DEV Community

Cover image for Stop Comparing UAV Motors at Equal Throttle: A Reproducible MN505-S Bench Workflow
UNITED UAV Official
UNITED UAV Official

Posted on

Stop Comparing UAV Motors at Equal Throttle: A Reproducible MN505-S Bench Workflow

A motor table is often read as a shopping chart: find the largest thrust number, check that the ESC amperage looks close, and move on. For an aircraft that must fly repeatedly, that is not a propulsion design. The useful question is whether a particular motor, propeller, ESC, battery, mount, and cooling path can deliver the required thrust at the actual operating point, for the required duration, with measurable margin.

The randomly selected product for this example is the UNITED UAV T-MOTOR MN505-S KV320 Navigator motor. It provides an unusually useful case study because T-MOTOR publishes separate bench curves for the KV320 winding with P20×6 and P22×6.6 propellers. Those curves let us demonstrate a mistake that survives many otherwise careful reviews: comparing combinations at equal throttle percentage rather than equal thrust.

This is a software-and-test-engineering article, not a recommendation that a motor is suitable for any particular aircraft. No flight test, calibrated bench test, or independent endurance measurement was performed for this post. Published numbers are reference data to audit and reproduce. The Python example is an analysis tool for recorded observations; it does not command a motor or an aircraft.

Commercial disclosure: UNITED UAV Official publishes this article and sells the linked motor. The analysis method is intended to be useful even if you choose a different supplier.

Define the decision before opening a motor spreadsheet

Start with an aircraft-level requirement rather than a component-level target. For a multirotor, record the maximum takeoff mass, number of lifting rotors, permitted center-of-gravity range, intended hover duration, climb requirement, ambient-temperature envelope, operating altitude, and minimum reserve after a credible degradation. A VTOL needs separate lift, transition, and cruise conditions because the same average mission power can hide a short but severe vertical-load phase.

A first-pass hover estimate is aircraft weight divided by the number of lifting rotors. It is not the design thrust per rotor. It omits maneuvering, gust rejection, thrust imbalance, degraded battery voltage, manufacturing variation, and whatever reserve the airframe safety analysis requires. It also assumes every rotor shares load equally. That may not hold when the center of gravity moves with payload or battery placement. Calculate the required operating points from the complete aircraft, then ask which propulsion combination can meet them.

Write the acceptance criteria before testing. Examples include a maximum measured current at a specified thrust, a maximum stabilized motor and ESC temperature at a specified ambient condition, a minimum control reserve at the worst expected battery voltage, and a vibration threshold under the installed propeller. The numerical limits must come from the airframe design and verified component documentation; borrowing a generic percentage from another aircraft is not engineering evidence.

The output should be a decision record with the exact motor winding, propeller part number and revision, ESC model and firmware, battery or power-supply configuration, mount, calibration identifiers, environmental conditions, raw data hashes, analysis version, and reviewer. Without configuration identity, a beautiful thrust plot is difficult to reproduce and almost impossible to use safely for a later replacement.

Read the published numbers with their conditions attached

The current UNITED UAV listing identifies the MN505-S KV320 item separately from other windings. The manufacturer's specification and test table list 6S LiPo as the rated voltage, 55 A peak current for 180 seconds, 1,300 W maximum power for 180 seconds, approximately 225 g motor mass including cable, and suggested 20–22 inch propellers. The same page identifies IP45 for the motor. These are not whole-aircraft ratings. They do not tell you that a chosen ESC, connector, battery, flight controller, or airframe can tolerate rain, dust, heat, or a 180-second peak.

The published table gives these KV320 points:

Propeller Throttle label Voltage Current Thrust Input power Listed efficiency
P20×6 70% 24.03 V 16.30 A 2,921 g 393 W 7.44 g/W
P22×6.6 60% 23.99 V 15.20 A 2,968 g 364 W 8.15 g/W
P20×6 100% 23.96 V 38.50 A 5,372 g 921 W 5.83 g/W
P22×6.6 100% 23.87 V 52.40 A 6,680 g 1,249 W 5.35 g/W

The first two rows are near the same thrust, even though their throttle labels differ by ten points. In those specific published conditions, P22×6.6 produces about 47 g more thrust while drawing about 29 W less electrical power. That is a useful clue for a roughly 3 kg-per-rotor design point, not proof that P22×6.6 is always superior. It may have different mechanical clearance, inertia, control response, vibration, or high-temperature behavior. The last two rows instead show why “more maximum thrust” carries a cost: the larger propeller's published full-throttle point is 52.4 A and 1,249 W, close to the motor's listed 55 A and 1,300 W 180-second figures. Treat those maxima as boundary data, not a continuous operating prescription.

The manufacturer notes an ambient temperature of 9.5 °C for the bench curves and describes motor-surface temperature after a ten-minute full-throttle run. Its page also labels peak current and maximum power as 180-second values. Do not resolve that duration mismatch by assuming a ten-minute high-power rating. Ask the manufacturer which conditions, sensors, and duty limits apply to the exact combination, then validate the intended duty cycle locally. A cool laboratory is not a hot installed nacelle.

A quick arithmetic check is worthwhile. At the P20×6 70% row, 24.03 V × 16.30 A is about 392 W, consistent with the listed 393 W after rounding. Thrust divided by listed power is about 7.43 g/W, consistent with 7.44 g/W. These checks cannot certify the test, but they catch transcription or unit errors before the data enters a selection model.

Compare at equal thrust, not equal command

Throttle percentage is a command coordinate, not an aerodynamic requirement. Two ESCs can map the same percentage to different electrical timing and speed; two propellers impose different torque on the same motor. Even within one manufacturer's table, equal percentages do not imply equal thrust, current, efficiency, or thermal load.

For candidate comparison, choose a target thrust derived from the aircraft load case. Interpolate within a measured curve only between nearby points of the same motor, propeller, voltage class, and test setup. Do not extrapolate beyond its measured range. Report the bracket points and interpolation method with the result. If battery voltage differs materially between curves, normalize with an appropriate validated model or repeat the test at matched voltage rather than silently treating them as equal.

Near 3 kg, the two rows above are close enough to illustrate the principle without pretending to be a high-precision interpolation. At 70% command, P20×6 reports 2,921 g and 393 W. At 60% command, P22×6.6 reports 2,968 g and 364 W. A chart organized by throttle would put those observations in different columns and could obscure the comparison. A chart with thrust on the x-axis and electrical input power on the y-axis makes the design decision visible.

At other load points, the answer can change. Propeller aerodynamic efficiency, motor copper loss, ESC behavior, and cooling all vary with torque and speed. A single g/W value is not a universal property of the motor. The candidate should be evaluated over the mission's thrust distribution: minutes at hover, seconds during climb, time in transition, and the battery voltage at each phase. One row at full throttle should never be used to predict an entire flight.

Instrument the bench so the data can be trusted

A useful bench has a restrained, guarded motor mount; a calibrated thrust sensor; voltage and current measurement at a declared point in the electrical path; RPM measurement; motor and ESC temperature sensors; ambient temperature; and a record of propeller identity. If torque is measured, log the torque-sensor calibration and sign convention. If it is not measured, do not infer mechanical efficiency from electrical input and thrust alone.

Specify sensor placement. Battery-terminal voltage is not necessarily ESC-input voltage after cables, connectors, and distribution hardware. An ESC's reported current may be filtered or estimated differently from a calibrated shunt. An infrared image of a shiny rotor can be misleading because emissivity and viewing angle are uncontrolled. For temperature trends, use repeatable sensor locations and document whether the value is winding, stator case, rotor surface, ESC case, or ambient air.

Define a common timebase. Record raw sensor timestamps, sample rates, clock offsets, and the aggregation window used for each test point. A row that joins thrust at second 12 with current at second 18 can create a false efficiency result during a throttle ramp. A stable-point result should be computed from a window in which command, RPM, thrust, and current have settled. Keep the raw series so an analyst can see oscillation or heating that a single average hides.

Calibrate and zero the load cell before each session. Record the thrust-stand orientation, fixture geometry, propeller plane, and nearby surfaces. Recirculation, wall proximity, ground effect, and test-stand blockage can move results. Compare candidate propellers on the same fixture under a controlled procedure. Randomize test order or repeat a baseline combination at the end; otherwise ambient warming, battery depletion, or sensor drift may look like a propeller effect.

Propeller testing is hazardous. Use a suitable enclosure and exclusion zone, secure the stand, keep people out of the propeller plane, provide an independent emergency power disconnect, and have a qualified operator supervise the test. A browser dashboard or Python script should only observe the stand. Flight-critical protection and physical emergency controls must not depend on a cloud service.

Persist a minimal data contract

A row should be self-describing enough to survive export from the original logging system. A compact JSON record can carry the exact configuration, measurements, and quality flags:

{
  "schema_version": 1,
  "run_id": "mn505s-kv320-p22x66-20260913-b",
  "point_id": "hover-03",
  "motor": "MN505-S KV320",
  "propeller": "T-MOTOR P22x6.6",
  "esc": "record-exact-model-and-firmware",
  "supply": "6S test supply",
  "window_start_utc": "2026-09-13T03:10:00Z",
  "window_duration_s": 20,
  "voltage_v": 23.99,
  "current_a": 15.20,
  "thrust_g": 2968,
  "rpm": 3790,
  "motor_surface_c": null,
  "esc_case_c": null,
  "ambient_c": 9.5,
  "quality_flags": ["illustrative_from_manufacturer_table"]
}
Enter fullscreen mode Exit fullscreen mode

The sample values reproduce one published manufacturer row; the run ID and timestamp are illustrative, not a claim that UNITED UAV performed this test. Null temperatures mean “not available in this row,” not zero degrees. A production record should include sensor IDs, calibration dates, fixture revision, raw-data URI and checksum, operator, and the exact source document revision. Use a separate field for a vendor-published row versus a measurement made by your team. Otherwise downstream code may accidentally merge literature data and acceptance-test evidence.

Keep current and voltage at the same electrical boundary. If a regulator, distribution board, or cable lies between their measurement points, their product does not represent the motor/ESC input power you think it does. Record whether the power measurement includes ESC loss. “Efficiency” in g/W is a useful thrust-per-electrical-input metric, but it is not motor shaft efficiency and should not be labeled as such.

Validate observations before ranking candidates

The following dependency-free Python function checks the minimum numerical invariants in a list of bench records and selects a point near a target thrust. It intentionally refuses to compare records outside a declared thrust tolerance. It does not extrapolate, interpolate, or claim a production safety decision.

from math import isfinite

def rank_near_target(rows, target_g, tolerance_g=100):
    if not isfinite(target_g) or target_g <= 0:
        raise ValueError("target_g must be positive and finite")
    if not isfinite(tolerance_g) or tolerance_g <= 0:
        raise ValueError("tolerance_g must be positive and finite")

    accepted = []
    rejected = []

    for row in rows:
        identity = (row.get("run_id"), row.get("point_id"))
        try:
            if row.get("schema_version") != 1:
                raise ValueError("unsupported schema")
            if not row.get("motor") or not row.get("propeller"):
                raise ValueError("missing configuration identity")

            v = float(row["voltage_v"])
            a = float(row["current_a"])
            thrust = float(row["thrust_g"])
            if not all(map(isfinite, (v, a, thrust))):
                raise ValueError("non-finite measurement")
            if min(v, a, thrust) <= 0:
                raise ValueError("non-positive measurement")

            power_w = v * a
            efficiency_g_per_w = thrust / power_w
            if abs(thrust - target_g) > tolerance_g:
                raise ValueError("outside target thrust window")

            accepted.append({
                "identity": identity,
                "propeller": row["propeller"],
                "thrust_g": thrust,
                "power_w": power_w,
                "g_per_w": efficiency_g_per_w,
                "distance_g": abs(thrust - target_g),
            })
        except (KeyError, TypeError, ValueError) as error:
            rejected.append({"identity": identity, "reason": str(error)})

    accepted.sort(key=lambda item: (item["power_w"], item["distance_g"]))
    return {"ranked": accepted, "rejected": rejected}
Enter fullscreen mode Exit fullscreen mode

For the two published near-3 kg observations, the function reports roughly 392 W for P20×6 and 365 W for P22×6.6 when calculated from the rounded voltage and current fields. That slight difference from the table's 393 W and 364 W is a rounding reminder, not a reason to “correct” the manufacturer's data. Retain both the published value and the recomputed value with provenance if exact reconciliation matters.

This small function is not enough for an acceptance pipeline. Production code should validate units, schema revisions, unique identities, calibration validity, timestamps, sensor saturation, and the distinction between measured and source-derived records. It should keep rejected rows in an auditable quarantine set rather than silently dropping them. Property-based tests can generate zero, negative, infinite, NaN, duplicate, and out-of-range inputs to prove that ranking never accepts them.

Model uncertainty instead of hiding it

Any thrust/power comparison needs an uncertainty budget. The load cell contributes calibration and repeatability error. Current and voltage sensors contribute gain, offset, and timing error. The battery or power supply can sag. The stand can alter flow. Ambient density changes with temperature, pressure, and humidity. Propeller manufacturing tolerances and balance change both thrust and vibration. The total is not necessarily the simple sum of each individual sensor tolerance, but it should be documented.

Report at least the number of repeats, mean, spread, and test conditions for each target point. If the apparent power advantage is smaller than the combined uncertainty or varies by test order, label the result inconclusive. If the candidate is selected on a 29 W difference near 3 kg of thrust, repeat the measurements with a calibrated system before using that difference in an endurance promise.

Thermal uncertainty is especially easy to underestimate. The manufacturer's surface-temperature figures are tied to its bench and a cool listed ambient. A motor installed close to an arm, fairing, spray system, or tether hardware may have a different cooling path. Winding temperature can differ from a case or rotor measurement. Build a controlled duration test at the expected thrust, then review the temperature slope and stabilization behavior. If temperature is still rising near the end of the planned duty interval, a single final value does not establish continuous suitability.

Do not extrapolate “temperature rise above ambient” linearly from one laboratory point to a hot field site. Air density, propeller loading, convective cooling, ESC loss, and motor resistance can all change. A hot-condition test or validated thermal model is needed for a high-consequence mission.

Integrate the whole power path

A 55 A motor peak-current figure does not authorize a 55 A aircraft design. Confirm the ESC's voltage and continuous/transient current capability for the exact firmware and cooling condition. Confirm connector and cable ampacity, distribution-board heating, battery discharge limits, fuse or protection strategy where applicable, and voltage sag at the worst expected state of charge. Log at both battery and ESC boundaries if cable loss matters.

Mechanical integration is equally specific. The manufacturer's page lists an approximately 55.6 × 38.9 mm motor envelope, 225 g mass including cable, and a warning to keep mounting-thread engagement within its stated limit. Obtain the current drawing, verify bolt pattern and screw depth, and inspect for any contact with windings or rotating parts. Validate propeller retention, clearance, rotation direction, and arm stiffness. A well-matched electrical system can still fail because the mount resonates or a screw damages the motor.

The motor's IP45 claim does not transfer to the ESC, connectors, bearings after wear, or the complete aircraft. Environmental qualification should consider the installed system and its maintenance state. Record water or dust exposure, cleaning method, corrosion findings, bearing play, cable damage, vibration trend, and current drift over service life. A numerical MTBF claim, where listed, is not a substitute for a fleet-specific inspection program.

Turn the bench result into a flight-readiness gate

A sensible sequence is receiving inspection; document and connector review; no-propeller rotation check; guarded stand test; installed restrained ground test; conservative first flight; and log review before expanding the envelope. Each transition should have written entry conditions and stop criteria. The first flight should not be asked to discover a propeller mismatch that a guarded bench could have found.

For an installed multirotor, compare equivalent arms at a controlled operating condition. Look for differences in current at similar thrust command, RPM where available, ESC temperature, motor temperature, and vibration. An outlier may indicate a damaged propeller, bearing issue, cable resistance, ESC configuration difference, or structural resonance. Do not assume that swapping only the motor isolates the cause; change one variable at a time and preserve the configuration history.

After flight, compare the measured thrust-demand distribution with the load cases used in selection. If the aircraft spends more time at high command than expected, or one arm consistently works harder, revisit the mass, center of gravity, propeller, and control assumptions. A propulsion design is validated by the operating envelope it actually sees, not merely by a catalog point it once matched.

The engineering takeaway is narrow but important: use the MN505-S KV320 manufacturer's table as a starting dataset, not a certificate of aircraft suitability. Compare propellers at equal required thrust, carry measurement provenance and uncertainty through analysis, validate the thermal and electrical path at the intended duty cycle, and require independent acceptance evidence before flight. That workflow is portable to other UAV motors—and more valuable than any isolated “maximum thrust” number.

Top comments (0)