What it means: a permanent-magnet DC motor is an electromagnet on an axle sitting between permanent magnets. Feed it voltage and it spins; make it work harder and it slows down and pulls more current. Its whole personality fits on one straight line — the torque–speed curve — from "free spin, no torque" down to "stalled, no speed".
Why it matters: every motor-driven design — drill, e-bike, sumo robot — must choose where on that line to live. Near the free-spin end you have speed but no strength; near stall the winding cooks. Engineers pair a motor with the right gearbox so the working point sits in the healthy middle.
How it works: ① the supply voltage V pushes current through the winding resistance R. ② Current makes torque: τ = k_t·I. ③ A winding spinning in a magnetic field also generates a voltage that opposes the supply — the back-EMF, k_e·ω, which grows with speed. ④ Only the leftover voltage drives current: I = (V − k_e·ω)/R. ⑤ Add load → the motor slows → back-EMF shrinks → current climbs until motor torque = load torque: that's the steady state. ⑥ At stall (ω = 0) there is no back-EMF at all, so I = V/R — the dangerous maximum. ⑦ PWM switches the supply fully on and off thousands of times a second; the motor only feels the average voltage, duty × V.
Where you see it in real engineering
Push a cordless drill into a stubborn screw: the motor slows, current soars, and the trigger electronics clamp it. An e-bike controller reads current as "torque requested" — a hill means amps, and battery sag follows. A stalled sumo motor is a heater, so good designs gear down to stay away from stall. And every hobby PWM controller (Arduino + DRV8833, drone ESCs) performs exactly the duty-cycle trick simulated here.
🧮 The maths
V_eff = duty·V, I = (V_eff − k_e·ω)/R, τ_motor = k_t·I, steady state: τ_motor = τ_load ⇒ ω = (V_eff − τ_load·R/k_t)/k_e V_eff — effective (average) supply voltage (V) · R — winding resistance (Ω) · k_t — torque constant, 0.05 N·m/A here · k_e — back-EMF constant, 0.05 V·s/rad here (in SI, k_t = k_e numerically) · ω — angular speed (rad/s) · I — current (A) · τ — torque (N·m) · P — power (W) Limits: stall τ_stall = V_eff·k_t/R and I_stall = V_eff/R (ω = 0) · no load: ω₀ = V_eff/k_e with I ≈ 0 · P_mech = τ·ω · P_elec = V_eff·I · η = P_mech/P_elec
Worked example: V = 12 V, duty = 100 %, τ_load = 0.25 N·m (τ_stall = 12 × 0.05/1.2 = 0.5 N·m, so this is exactly half). I = τ/k_t = 0.25/0.05 = 5 A. ω = (12 − 0.25 × 1.2/0.05)/0.05 = (12 − 6)/0.05 = 120 rad/s = 1146 rpm. P_mech = 0.25 × 120 = 30 W; P_elec = 12 × 5 = 60 W; η = 50 % — the missing 30 W is copper heat, I²R = 5² × 1.2. Set those sliders — every tile matches.
Assumptions & limitations: the model is quasi-static — it displays the closed-form steady state directly, with no spin-up inertia (real rotors take ~0.1–0.5 s to settle); there is no friction torque, no iron/core losses and no brush drop, so efficiency comes only from copper loss I²R; PWM is modelled as its average voltage; the winding-temperature physics is reduced to a simplified, modelled thermal protection (I > 8 A for ~2 s → trip). This simulation is an educational approximation of a permanent-magnet DC motor — real motors add friction, magnetic saturation and temperature-dependent resistance, which bend the perfectly straight torque–speed line.
🕹 Simulation workspace
Controls
Nameplate (fixed): k_t = k_e = 0.05 N·m/A (= V·s/rad) · winding R = 1.2 Ω · modelled thermal trip at I > 8 A. ▶ Run/Pause animates the shaft; ↺ Restart clears the thermal state; Reset restores every default. Readouts stay live (quasi-static) even while paused.
Live measurements
Speed—
Motor current—
Torque—
Mech power—
Elec power—
Efficiency—
Stall torque τ_stall—
Stall current I_stall—
Ready
Tiles are computed from the closed-form steady state every frame — nothing here is a fixed number. Watch the current tile climb as the load slows the motor.
The torque–speed line for the current effective voltage — every PM DC motor lives on this straight line, from (0, τ_stall) to (ω₀, 0). The red dot is the operating point; the left end is stall.
Mechanical power (blue, W — a parabola that peaks at HALF the stall torque) and efficiency (green, %) vs load torque for the current V_eff. In this copper-loss-only model the efficiency line is straight; real motors' friction and iron losses bend it.
🧪 Guided experiments
🏆 Engineering challenges
🌍 Real-world applications
🤖 Sumo & drive robotsA stalled motor is a heater: gearing keeps the operating point away from stall, and good controllers watch current, not just speed.
🪛 Cordless drillsPush hard into a screw and the motor slows; current soars; smart triggers clamp it — that's exactly the I = (V − k_e·ω)/R law biting.
🚲 E-bikes & scootersControllers read current as "torque requested". Hills mean amps, amps mean heat, and battery sag follows the same story.
🚁 Drones & fansThe propeller IS the load: its aerodynamic torque picks the operating point on the line — bigger prop, more torque, more current.
🔧 Try it with hardware — Arduino UNO R4 WiFi + DRV8833PWM is your duty slider in real life. Drive a small motor at several duties, measure current with a shunt + ADC (or an INA219 board), and check I = (duty·V − k_e·ω)/R against your log.
⚙️ ESP32 stall probe (careful!)Through a current sensor, command full duty and read the surge for ONE second only: I_stall = V/R. Never stall a motor longer — you just watched why.
✅ Check your understanding
📌 What you discovered
Back-EMF (k_e·ω) is the built-in regulator: spin fast and EMF ≈ V, so current stays tiny.
τ = k_t·I is the bridge between electrics and mechanics — load torque sets current, not voltage.
The torque–speed line runs from (0, τ_stall) to (ω₀, 0); adding load slides the operating point down it.
Mechanical power peaks at HALF the stall torque; in this idealised model efficiency simply falls linearly with load (η = 1 − I·R/V).
Stall means maximum current and zero useful power — every watt becomes heat, which is why controllers and thermal trips exist.
PWM scales the whole line: duty·V moves τ_stall, ω₀ and the operating point together.
➡ Engineering takeaway: a motor buys torque with current and pays for it with heat — choose your point on the torque–speed line (motor + gearbox) so you never park at the stall end.