A motor is not selected when its maximum-thrust number exceeds the aircraft weight. It is selected only after the motor, propeller, voltage, ESC, battery, airframe, and control reserve have been evaluated at the operating points the mission will actually use.
This article builds that evaluation around the randomly selected UNITED UAV T-MOTOR MN4010 KV370 Navigator motor. The useful part of this example is not the product name. It is the unusually complete set of manufacturer-published MN4010 test rows: several propellers, both 14.8 V and 22.2 V supplies, and current, power, thrust, RPM, and temperature at multiple command points. That is enough data to show how a mission requirement can become a traceable propulsion decision instead of a spreadsheet guess.
No UNITED UAV flight test or calibrated thrust-stand test was performed for this article. All MN4010 measurements cited below are published manufacturer reference data. The aircraft and mission are an explicit engineering example, not a claim about a production vehicle. Before flight, reproduce the relevant points on the installed propulsion system and use limits approved for that aircraft.
Commercial disclosure: UNITED UAV Official publishes this article and sells the linked motor. The workflow is vendor-neutral and is designed to expose, rather than hide, the assumptions behind a selection.
Begin with a load-case contract
Suppose a team is designing a six-rotor mapping aircraft with a maximum takeoff mass of 4.5 kg. Its nominal static hover allocation is:
4500 g / 6 = 750 g per rotor
That value is not yet a motor requirement. The installed aircraft may have unequal arm loading, non-ideal inflow near the fuselage, propeller-to-propeller variation, battery voltage sag, and lower air density than the bench environment. For a first screening calculation, the team assigns a 13% installed-condition factor:
750 g × 1.13 = 847.5 g per rotor
We will round the screening hover target to 850 g. The factor is an example input, not a universal safety constant. A real project should derive it from mass-properties analysis, expected density altitude, installation measurements, manufacturing tolerance, and the applicable safety process.
The same contract requires at least 1.6 times the corrected hover target at the published high-command point:
850 g × 1.6 = 1360 g per rotor
This second constraint matters. A combination can be extremely efficient at hover and still leave too little authority for climb, gust rejection, load redistribution, or control saturation. Conversely, a combination with impressive maximum thrust can waste energy during the long hover segment. A defensible choice has to pass both the normal operating point and the reserve condition.
Write the contract as data before inspecting candidates. At minimum, include aircraft mass, lifting-rotor count, corrected hover target, required thrust ratio, maximum propeller diameter, allowed supply-voltage range, mission duration, ambient envelope, maximum permitted current at each electrical boundary, and the policy for interpolation. If a value is unknown, mark it unknown. Quietly replacing an unknown with an optimistic default is how a screening spreadsheet becomes an unsafe specification.
Preserve the source rows, not just a marketing maximum
The manufacturer's current page identifies the KV370 version as a 4–8S motor with a listed 137 g mass including its cable, 98 mΩ internal resistance, 0.8 A idle current at 10 V, and 450 W / 20 A figures labeled for 180 seconds. Its test table includes these representative KV370 observations:
| Supply | Propeller | Command | Current | Power | Thrust | RPM | Listed temperature |
|---|---|---|---|---|---|---|---|
| 14.8 V | 14×4.8 CF | 85% | 5.4 A | 79.92 W | 810 g | 4,400 | 44 °C |
| 14.8 V | 14×4.8 CF | 100% | 6.5 A | 96.20 W | 920 g | 4,700 | 44 °C |
| 14.8 V | 15×5 CF | 75% | 5.1 A | 75.48 W | 820 g | 3,800 | 44 °C |
| 14.8 V | 15×5 CF | 100% | 8.2 A | 121.36 W | 1,160 g | 4,450 | 44 °C |
| 14.8 V | 16×5.4 CF | 65% | 4.3 A | 63.64 W | 770 g | 3,300 | 45 °C |
| 14.8 V | 16×5.4 CF | 75% | 6.1 A | 90.28 W | 970 g | 3,650 | 45 °C |
| 14.8 V | 16×5.4 CF | 100% | 9.6 A | 142.08 W | 1,380 g | 4,300 | 45 °C |
| 22.2 V | 12×4 CF | 75% | 5.0 A | 111.00 W | 860 g | 6,200 | 40 °C |
| 22.2 V | 13×4.4 CF | 65% | 4.3 A | 95.46 W | 810 g | 5,300 | 47 °C |
| 22.2 V | 14×4.8 CF | 50% | 3.5 A | 77.70 W | 780 g | 4,400 | 51 °C |
| 22.2 V | 14×4.8 CF | 65% | 5.7 A | 126.54 W | 1,060 g | 5,100 | 51 °C |
| 22.2 V | 14×4.8 CF | 100% | 11.7 A | 259.74 W | 1,830 g | 6,600 | 51 °C |
The page notes that the temperature field is motor surface temperature after a ten-minute run at 100% command. That note is part of the data. It does not establish winding temperature, hot-day continuous capability, or the temperature of a motor partly shielded by an airframe. Likewise, the 180-second current and power labels are duration-limited component figures, not permission to operate the whole installed system at those values.
Keep the original source URL, retrieval date, model and winding, voltage, propeller identity, and every published column. Do not copy only thrust and current into a design sheet. RPM can reveal a transcription error. Voltage is required to reconcile power. Test notes define what the temperature means. Provenance lets a later reviewer distinguish manufacturer literature from local acceptance evidence.
Do not treat KV as a complete propulsion model
KV is approximately the no-load speed constant expressed in RPM per volt. Multiplying 370 KV by 22.2 V may be useful as a rough no-load sanity check, but it does not predict loaded RPM, thrust, torque, current, or efficiency. The loaded operating point emerges from the motor, ESC timing, supply impedance, propeller torque curve, and airflow together.
The table demonstrates this directly. At 22.2 V with the 14×4.8 propeller, the published 100% point is 6,600 RPM, well below the simplistic no-load product. The difference is not a defect; it is evidence that the propeller is loading the motor. A design process that estimates thrust from KV and voltage alone has discarded the dominant aerodynamic interaction.
Command percentage is also not a portable physical unit. It is a point on one ESC/controller mapping under one test setup. The required quantity is thrust. When comparing propellers, interpolate against thrust inside each measured curve. Never assume that 70% on one propeller is equivalent to 70% on another, and never extrapolate outside the measured range merely because a polynomial can produce a number.
Interpolate with explicit refusal rules
For the 850 g screening target, the 14.8 V 16×5.4 curve brackets the requirement between 770 g and 970 g. Linear interpolation places the target 40% of the way through that interval. That produces approximately 5.02 A and 74.30 W. The same calculation for the 22.2 V 14×4.8 curve, bracketed by 780 g and 1,060 g, produces approximately 4.05 A and 89.91 W.
Linear interpolation is not a claim that the underlying motor-propeller physics are linear. It is a local screening method between adjacent measurements. Its result should retain the two bracket rows and an interpolated flag. If the target is outside the source curve, if voltage differs, if the propeller identity changes, or if the bracket is too wide for the project's accuracy requirement, the program must refuse the calculation.
The 14.8 V 15×5 curve also brackets 850 g and would use about 79.48 W by the same method. However, its published maximum of 1,160 g fails the 1,360 g reserve requirement. The 14.8 V 14×4.8 curve fails that reserve even more clearly. Ranking only by interpolated hover power without enforcing reserve would therefore return a result that violates the aircraft contract.
The 14.8 V 16×5.4 combination reaches a published 1,380 g, only 20 g above the illustrative reserve threshold. It technically passes the simple screen but leaves about 1.5% margin between the required and published values. That is too narrow to absorb the uncertainties we explicitly said existed. A production rule might require the source maximum to exceed the reserve target by an additional measured uncertainty allowance. Under such a rule, this candidate would be rejected or moved to a mandatory local test rather than silently accepted.
The 22.2 V 14×4.8 combination reaches a published 1,830 g and therefore offers more screening headroom, but it consumes about 21% more electrical power at the interpolated 850 g point than the 14.8 V 16×5.4 combination. This is the engineering trade: hover energy, command headroom, propeller clearance, acoustic behavior, current, voltage, control response, and thermal state are coupled. There is no single “best motor efficiency” number that resolves all of them.
Make the screening algorithm auditable
The following dependency-free Python program implements the narrow decision described above. It validates the source rows, groups only identical motor/voltage/propeller configurations, brackets a target without extrapolation, interpolates current and power, and then applies a separate maximum-thrust reserve constraint. It deliberately does not invent density corrections or thermal limits.
from dataclasses import dataclass
from math import isfinite
@dataclass(frozen=True)
class Point:
voltage_v: float
propeller: str
command_pct: float
current_a: float
power_w: float
thrust_g: float
rpm: float
def validate(point: Point) -> None:
values = (
point.voltage_v,
point.command_pct,
point.current_a,
point.power_w,
point.thrust_g,
point.rpm,
)
if not point.propeller or not all(isfinite(value) for value in values):
raise ValueError("invalid source point")
if min(point.voltage_v, point.current_a, point.power_w,
point.thrust_g, point.rpm) <= 0:
raise ValueError("measurements must be positive")
if not 0 < point.command_pct <= 100:
raise ValueError("command must be in (0, 100]")
relative_power_error = abs(
point.power_w - point.voltage_v * point.current_a
) / point.power_w
if relative_power_error > 0.015:
raise ValueError("published power is inconsistent with V × A")
def interpolate_at_thrust(points: list[Point], target_g: float) -> dict:
if not isfinite(target_g) or target_g <= 0:
raise ValueError("target thrust must be positive and finite")
if len(points) < 2:
raise ValueError("at least two source points are required")
for point in points:
validate(point)
voltages = {point.voltage_v for point in points}
propellers = {point.propeller for point in points}
if len(voltages) != 1 or len(propellers) != 1:
raise ValueError("mixed configurations cannot be interpolated")
ordered = sorted(points, key=lambda point: point.thrust_g)
if any(a.thrust_g >= b.thrust_g for a, b in zip(ordered, ordered[1:])):
raise ValueError("thrust points must be unique and increasing")
bracket = next(
(
(low, high)
for low, high in zip(ordered, ordered[1:])
if low.thrust_g <= target_g <= high.thrust_g
),
None,
)
if bracket is None:
raise ValueError("target would require extrapolation")
low, high = bracket
fraction = (target_g - low.thrust_g) / (high.thrust_g - low.thrust_g)
def lerp(a: float, b: float) -> float:
return a + fraction * (b - a)
return {
"voltage_v": low.voltage_v,
"propeller": low.propeller,
"target_thrust_g": target_g,
"current_a": lerp(low.current_a, high.current_a),
"power_w": lerp(low.power_w, high.power_w),
"command_pct": lerp(low.command_pct, high.command_pct),
"bracket_thrust_g": [low.thrust_g, high.thrust_g],
"published_max_thrust_g": ordered[-1].thrust_g,
"interpolated": True,
}
def screen(points: list[Point], hover_target_g: float,
minimum_thrust_ratio: float) -> dict:
result = interpolate_at_thrust(points, hover_target_g)
reserve_target_g = hover_target_g * minimum_thrust_ratio
result["reserve_target_g"] = reserve_target_g
result["passes_published_reserve"] = (
result["published_max_thrust_g"] >= reserve_target_g
)
result["reserve_margin_g"] = (
result["published_max_thrust_g"] - reserve_target_g
)
return result
mn4010_4s_16x54 = [
Point(14.8, "T-MOTOR 16x5.4 CF", 65, 4.3, 63.64, 770, 3300),
Point(14.8, "T-MOTOR 16x5.4 CF", 75, 6.1, 90.28, 970, 3650),
Point(14.8, "T-MOTOR 16x5.4 CF", 100, 9.6, 142.08, 1380, 4300),
]
mn4010_6s_14x48 = [
Point(22.2, "T-MOTOR 14x4.8 CF", 50, 3.5, 77.70, 780, 4400),
Point(22.2, "T-MOTOR 14x4.8 CF", 65, 5.7, 126.54, 1060, 5100),
Point(22.2, "T-MOTOR 14x4.8 CF", 100, 11.7, 259.74, 1830, 6600),
]
for curve in (mn4010_4s_16x54, mn4010_6s_14x48):
print(screen(curve, hover_target_g=850, minimum_thrust_ratio=1.6))
The output should show roughly 5.02 A, 74.30 W, and 20 g of published reserve margin for the 4S 16×5.4 curve; and roughly 4.05 A, 89.91 W, and 470 g for the 6S 14×4.8 curve. The lower current on 6S does not mean lower battery stress by itself: pack construction, capacity, C-rate, wiring, connector loss, state of charge, and total six-motor current all matter. Power and heat must be evaluated at the correct boundary.
The function also performs a 1.5% consistency check between the published power and voltage × current. Such checks catch unit and transcription mistakes, but small differences can result from rounded display values or measurements averaged over different windows. Store the source value and the recomputed value; do not overwrite the source to make the table look cleaner.
For production use, add a schema version, source identifier, retrieval timestamp, test report number, unit metadata, uncertainty fields, calibration state, and immutable raw-data hash. Keep rejected rows with their rejection reasons. A system that silently drops malformed observations can produce a polished but unauditable ranking.
Integrate power over the mission, not over one row
Hover is often the longest segment, but it is not the whole mission. Create a timeline of takeoff, climb, transit, mapping, loiter, descent, and reserve. Each segment should specify duration and per-rotor thrust distribution, not merely a throttle percentage. Interpolate power only within a validated curve and sum energy across the timeline:
mission energy = Σ(power at segment operating point × segment duration)
For six rotors at the illustrative 850 g point, the interpolated motor/ESC input implied by the manufacturer rows is about 446 W for the 4S 16×5.4 option or 539 W for the 6S 14×4.8 option. Those numbers exclude avionics, payload, conversion losses outside the measurement boundary, and any extra control activity. They are not battery-size recommendations.
Battery sizing must use the worst credible loaded voltage rather than the nominal label alone. Repeat the operating-point analysis at the voltage the ESC will actually see near the minimum allowed state of charge. If no source curve exists at that voltage, test it. Scaling thrust by the square of voltage or scaling current linearly may be tempting, but those approximations can be wrong once ESC duty, motor loading, propeller RPM, and battery resistance interact.
Log current at the pack and, during development, at selected ESC inputs. The sum of ESC currents need not exactly equal pack current if timestamps, filters, and measurement boundaries differ. Synchronize clocks and document averaging windows before using the data to estimate wiring loss or diagnose an outlier motor.
Size the ESC and wiring from waveforms and duration
An ESC should not be chosen by matching one published current number. Confirm supported cell count, continuous and transient current at the installed cooling condition, commutation compatibility, firmware settings, command protocol, telemetry behavior, and protection response. Consider the current step during rapid attitude correction, not just steady hover average. A slow current logger can miss short peaks that heat semiconductors or trigger protection.
Connector, cable, distribution-board, and solder-joint resistance turn current into localized heat. Measure voltage at both the pack and ESC during a restrained installed test. A few tenths of a volt lost in distribution can alter available control margin while the battery monitor still reports an acceptable pack voltage. Use appropriately rated protection and an independent emergency disconnect on the test stand.
Do not run an automated script as a flight-safety controller. The code above is offline analysis. Propeller testing requires a mechanically secure stand, guarding, an exclusion zone, remote observation, and a qualified operator. Emergency shutdown must not depend on a browser, wireless link, cloud service, or the analysis process.
Treat temperature as a time series
A single temperature cell cannot prove thermal suitability. Record ambient temperature, pressure, motor surface or winding sensor location, ESC sensor location, airflow configuration, command, current, RPM, and time. Plot temperature rise and its slope. If the slope is still positive at the end of the required segment, the system has not demonstrated a stable continuous condition.
The manufacturer's listed test temperatures were produced under its stated procedure. An installed arm, fairing, payload, or coaxial arrangement can change cooling and recirculation. Copper resistance rises with temperature, battery sag changes with state and temperature, and hot electronics may derate. Validate the hottest expected operating environment and the actual duty cycle. Do not subtract a cool bench ambient from a listed surface temperature and then add that difference to a hot-day forecast as if the system were linear.
Air density affects the operating point as well. Density altitude is not solved by adding an arbitrary fixed thrust percentage to every mission. Use atmospheric inputs appropriate to the site, then verify the predicted correction against an installed test. If the aircraft must operate across a wide altitude range, store separate validated envelopes or use a model whose error bounds are supported by test data.
Connect the calculation to telemetry and review
The design record and flight log should share stable identifiers for motor model, winding, propeller part and revision, ESC hardware and firmware, battery type, airframe revision, and analysis version. Without those joins, an analyst can observe elevated current but cannot determine which physical configuration produced it.
At minimum, log battery voltage and current, per-motor command, RPM or ESC telemetry where available, attitude-controller saturation, vehicle mass configuration, ambient conditions, and relevant temperatures. Use monotonic timestamps on the vehicle and preserve clock-correlation metadata for external payloads. Flag sensor dropouts explicitly; zero is a measurement, not a substitute for missing data.
Define operational signals before flight. Examples include hover power drifting upward relative to comparable flights, persistent RPM divergence at similar commands, reduced command headroom, rising vibration, connector temperature growth, or one ESC reporting repeated protection events. Compare like with like: similar mass, propeller, battery state, wind, altitude, and mission segment. A fleet dashboard that ignores configuration identity can turn normal differences into false alarms and real degradation into averages.
Review the result as an envelope, not a winner. A candidate can be rejected, requires_test, or qualified_for_defined_conditions. The last state must name those conditions. “Qualified” without voltage, propeller, mass, ambient range, firmware, and duration is not a reusable engineering decision.
Build evidence in stages
Start with document reconciliation: current drawing, winding, propeller, voltage, ESC manual, connector and mounting requirements. Then perform receiving inspection and a no-propeller electrical check. Move to a guarded thrust stand with calibrated thrust, voltage, current, RPM, vibration, and temperature sensing. Reproduce the intended hover and reserve points, including the worst expected loaded voltage and duration.
Next test the installed but restrained propulsion system. Installation can reveal arm resonance, airflow obstruction, wiring loss, telemetry interference, or controller behavior absent from an isolated stand. Only then conduct a conservative first flight with explicit abort conditions and a limited envelope. Review the complete log before expanding mass, duration, wind, temperature, or altitude.
Acceptance criteria should have been written before the test. They may include maximum stabilized current at a specified thrust, minimum command reserve, temperature limits at declared sensor locations, vibration thresholds, allowable sensor disagreement, and post-test mechanical inspection. If the evidence fails a criterion, preserve the failure and its configuration. Do not simply rerun until a passing trace appears.
The MN4010 data illustrates the central lesson: component selection is a constrained, provenance-aware software problem as much as it is a hardware problem. At the same 850 g screening target, a larger 4S propeller can use less published electrical power, while a smaller 6S propeller provides substantially more published thrust headroom. The right choice depends on the aircraft's mission, geometry, uncertainty, power system, thermal envelope, and control requirements. A professional workflow makes every one of those dependencies visible—and refuses to manufacture certainty when the required evidence does not exist.
Top comments (0)