🎉 75% of content is free forever — Unlock Premium from $10/mo →
CW
NEWSLIVESearch All Content
đŸ’ŧ Servicesâ„šī¸ Aboutâœ‰ī¸ ContactView Pricing Plansfrom $10

Propulsion Systems

đŸŸĸ Free Lesson

Advertisement

Propulsion Systems

The propulsion system converts electrical energy into thrust. Understanding motors and propellers is critical for optimizing drone performance and efficiency.

Motor-Propeller System Overview

Sponsored
Motor-Propeller Combo SystemMotor Cross-SectionSTATOR (Outer)Copper WindingsCreates magnetic fieldROTORNd MagnetsOutput ShaftBell (rotates)Rotation DirectionThrust CurvesThrottle %5 inch prop3 inch prop0500g1000g1500g

Brushless Motor Theory

Brushless DC motors work via electromagnetic induction — alternating magnetic fields in the stator cause permanent magnets in the rotor to spin.

Motor Naming Convention

Architecture Diagram
Motor Size: WWMM
 WW = Stator width in mm
 MM = Stator height in mm

Examples:
 2207 = 22mm wide, 7mm tall (5-inch racing)
 2306 = 23mm wide, 6mm tall (5-inch freestyle)
 1404 = 14mm wide, 4mm tall (3-inch micro)
 2812 = 28mm wide, 12mm tall (7-inch long range)
python
class BrushlessMotor:
 def __init__(self, kv, stator_width, stator_height, weight_g):
 self.kv = kv
 self.stator_width = stator_width
 self.stator_height = stator_height
 self.weight = weight_g

 def no_load_rpm(self, voltage):
 return self.kv * voltage

 def max_thrust_grams(self, voltage):
 return self.kv * voltage * 0.08

 def efficiency_at_throttle(self, throttle_pct):
 if throttle_pct <= 50:
 return 0.5 + (throttle_pct / 100)
 else:
 return 1.0 - ((throttle_pct - 50) / 100 * 0.6)

# Compare motor sizes
motors = [
 BrushlessMotor(kv=2300, stator_width=22, stator_height=7, weight_g=31),
 BrushlessMotor(kv=2400, stator_width=23, stator_height=6, weight_g=28),
 BrushlessMotor(kv=1700, stator_width=28, stator_height=12, weight_g=55),
]

voltage = 14.8 # 4S LiPo
for m in motors:
 print(f"{m.stator_width}{m.stator_height} @ {m.kv}KV")
 print(f" No-load RPM: {m.no_load_rpm(voltage):.0f}")
 print(f" Max thrust: {m.max_thrust_grams(voltage):.0f}g")
 print(f" Weight: {m.weight}g")
 print(f" Thrust/Weight: {m.max_thrust_grams(voltage)/m.weight:.1f}:1\n")

KV Rating Explained

KV stands for "RPM per Volt" — the number of revolutions the motor makes per volt of input with no load.

KV Rating ComparisonLOW KV (1400-1700)Slow RPM, High TorqueLarge props (7-10 inch)Long range / cinemaMore efficientLess responsive1700KV on 6SMED KV (2200-2600)Balanced RPM/TorqueStandard props (5 inch)Racing / freestyleGood all-aroundMost popular2400KV on 4SHIGH KV (2800+)High RPM, Low TorqueSmall props (3-4 inch)Micro racing / whoopsVery responsiveLess efficient3100KV on 2S
python
def kv_recommendation(voltage, prop_diameter_inches):
 """Recommend KV range based on battery and prop size"""
 # Rule of thumb: KV * voltage * prop_diameter should be ~constant
 magic_number = voltage * prop_diameter_inches

 if magic_number < 50:
 return "High KV (2800+)", "Micro/whoop builds"
 elif magic_number < 70:
 return "Medium-High KV (2400-2800)", "3-4 inch builds"
 elif magic_number < 90:
 return "Medium KV (2200-2500)", "5 inch standard"
 elif magic_number < 120:
 return "Low-Medium KV (1700-2200)", "5-6 inch long range"
 else:
 return "Low KV (1400-1700)", "7+ inch heavy lift"

configs = [
 (7.4, 3), # 2S, 3-inch
 (14.8, 5), # 4S, 5-inch
 (22.2, 5), # 6S, 5-inch
 (22.2, 7), # 6S, 7-inch
]
for v, p in configs:
 kv_range, use = kv_recommendation(v, p)
 print(f"{v}V + {p}inch prop: {kv_range} — {use}")

Propeller Theory

Sponsored

Propellers are airfoils that generate thrust by accelerating air downward. Key parameters:

python

class Propeller:
 def __init__(self, diameter_inches, pitch_inches, blades=2):
 self.diameter = diameter_inches
 self.pitch = pitch_inches
 self.blades = blades
 self.diameter_m = diameter_inches * 0.0254
 self.pitch_m = pitch_inches * 0.0254

 def advance_ratio(self, velocity_ms, rpm):
 """J = V / (n * D) — ratio of forward speed to tip speed"""
 n = rpm / 60 # rev/s
 return velocity_ms / (n * self.diameter_m) if n > 0 else 0

 def theoretical_thrust_constant(self):
 """Simplified thrust coefficient based on blade area"""
 blade_area = self.blades * 0.1 * self.diameter_m ** 2
 disk_area = math.pi * (self.diameter_m / 2) ** 2
 solidity = blade_area / disk_area
 return solidity * 0.05 # Simplified Ct

 def thrust_at_rpm(self, rpm, air_density=1.225):
 """T = Ct * rho * n^2 * D^4"""
 Ct = self.theoretical_thrust_constant()
 n = rpm / 60
 thrust = Ct * air_density * (n ** 2) * (self.diameter_m ** 4)
 return thrust # Newtons

 def pitch_speed(self):
 """Theoretical max speed from pitch: Pitch * RPM"""
 return self.pitch_m # meters per revolution

 def __repr__(self):
 return f"{self.diameter}x{self.pitch}x{self.blades}"

# Compare propellers
props = [
 Propeller(5, 4.5, 3), # 5045 triblade
 Propeller(5, 4.0, 2), # 5040 biblade
 Propeller(7, 3.5, 2), # 7035 long range
 Propeller(3, 2.5, 2), # 3025 micro
]

rpm = 20000
print(f"Thrust at {rpm} RPM:")
for p in props:
 thrust_n = p.thrust_at_rpm(rpm)
 thrust_g = thrust_n / 9.81 * 1000
 print(f" {p}: {thrust_g:.0f}g ({thrust_n:.2f}N)")

Motor Sizing Guide

Motor-Prop-Battery Compatibility MatrixBUILD TYPEMOTORPROPBATTERYWEIGHT3in Micro1404 3800KV3020 triblade2S 450mAh~80g5in Racing2207 2400KV5040 biblade4S 1300mAh~350g5in Freestyle2306 1700KV5051 triblade6S 1100mAh~450g7in Long Range2812 1300KV7035 biblade6S 1800mAh~600g10in Heavy Lift4014 500KV1045 biblade6S 5000mAh~2kg

Thrust-to-Weight Ratio

python
def analyze_build(motor_thrust_g, motor_count, drone_weight_g):
 total_thrust = motor_thrust_g * motor_count
 twr = total_thrust / drone_weight_g

 print(f"Total thrust: {total_thrust}g")
 print(f"Drone weight: {drone_weight_g}g")
 print(f"Thrust/Weight: {twr:.1f}:1")

 if twr < 2:
 print(" WARNING: Cannot fly! TWR must be > 1")
 elif twr < 3:
 print(" Type: Cinematic / Gentle flying")
 elif twr < 5:
 print(" Type: General purpose / Photography")
 elif twr < 8:
 print(" Type: Racing / Acrobatic")
 else:
 print(" Type: Extreme racing / Competition")
 return twr

print("=== Racing Quad Build ===")
analyze_build(motor_thrust_g=1200, motor_count=4, drone_weight_g=450)

print("\n=== Cinematic Build ===")
analyze_build(motor_thrust_g=800, motor_count=4, drone_weight_g=600)

Hands-On Project: Propulsion Efficiency Calculator

python

class PropulsionAnalyzer:
 def __init__(self):
 self.motor_data = {
 "2207_2400KV": {"kv": 2400, "resistance": 0.08, "weight": 31},
 "2306_1700KV": {"kv": 1700, "resistance": 0.10, "weight": 33},
 "2812_1300KV": {"kv": 1300, "resistance": 0.12, "weight": 55},
 }

 def compute_thrust(self, kv, voltage, prop_diameter_m, Cp=0.04):
 rpm = kv * voltage
 n = rpm / 60
 thrust = Cp * 1.225 * (n ** 2) * (prop_diameter_m ** 4)
 return thrust * 1000 # grams

 def compute_power(self, voltage, thrust_g, efficiency=0.7):
 mechanical_power = thrust_g * 9.81 / 1000 * 2 # simplified
 electrical_power = mechanical_power / efficiency
 return electrical_power

 def flight_time_estimate(self, battery_mah, total_power_w, voltage):
 battery_wh = battery_mah * voltage / 1000
 # Only use 80% of battery
 usable_wh = battery_wh * 0.8
 flight_time_h = usable_wh / total_power_w
 return flight_time_h * 60 # minutes

 def analyze_build(self, motor_key, prop_diameter, battery_mah, voltage, drone_weight_g):
 motor = self.motor_data[motor_key]
 thrust_per_motor = self.compute_thrust(motor["kv"], voltage, prop_diameter)
 total_thrust = thrust_per_motor * 4
 twr = total_thrust / drone_weight_g
 power_per_motor = self.compute_power(voltage, thrust_per_motor)
 total_power = power_per_motor * 4
 flight_time = self.flight_time_estimate(battery_mah, total_power, voltage)

 print(f"\nBuild: {motor_key} + {prop_diameter*39.37:.0f}inch + {battery_mah}mAh")
 print(f" Thrust/motor: {thrust_per_motor:.0f}g")
 print(f" Total thrust: {total_thrust:.0f}g")
 print(f" TWR: {twr:.1f}:1")
 print(f" Total power: {total_power:.1f}W")
 print(f" Est. flight time: {flight_time:.1f} min")
 return {"twr": twr, "flight_time": flight_time, "power": total_power}

analyzer = PropulsionAnalyzer()
analyzer.analyze_build("2207_2400KV", 0.127, 1300, 14.8, 350)
analyzer.analyze_build("2812_1300KV", 0.178, 1800, 22.2, 600)

Summary

Advertisement
  • KV rating = RPM per volt; lower KV = more torque, higher KV = more speed
  • Propeller size (Diameter x Pitch) determines thrust and efficiency tradeoffs
  • Larger props are more efficient but less responsive
  • Motor stator size determines torque capability and physical fit
  • Thrust-to-weight ratio should be 4:1+ for good performance
  • Always match motor, prop, and battery for optimal efficiency

Next, we'll cover battery and power management.

—
☆☆☆☆☆
0 ratings

Rate & Feedback

Need Expert Drone AI Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement