M.Eng (Hons) First Class
Software engineer at Starship Technologies and co-founder of Purple Parrot. Previously at CERN and ESA. MEng (Hons, 1st) from the University of Plymouth. Based in Tallinn, Estonia.
This is a bottom-up explanation of how a brushless outrunner motor produces torque — starting from a single wire in a magnetic field, building up through commutation, trapezoidal control, and finally why FOC exists and what it’s actually doing.
Every electric motor is built on one physical law:
\[\vec{F} = I \vec{L} \times \vec{B}\]A current-carrying wire inside a magnetic field experiences a force. The force is:
That’s it. Every motor, from a toy to a Tesla, is just this equation repeated many times over.
An outrunner BLDC motor has two parts:
| Part | Description | Moves? |
|---|---|---|
| Bell | Outer rotating shell, permanent magnets on inner face | Yes — this is your output shaft |
| Stator | Inner fixed part, copper coils wound on iron teeth | No — bolted to your frame |
The magnets on the bell alternate N–S–N–S around the circumference. The coils on the stator sit in the air gap between bell and stator.

Outrunners have higher torque for the same motor volume because the force acts at a larger radius (the bell), giving a longer moment arm.
Let’s strip everything back: one coil on one tooth, and one N–S pair on the bell.
The PM creates a radial B field through the air gap:
The coil has two sides — current goes in one side and out the other (it’s a loop). By design, the two sides sit under opposite poles:
Bell: | N | S |
↓ B ↑ B (radial field)
Stator: [× current in] [● current out]
→ F → F (force: tangential, same direction)
Both sides of the coil push the bell in the same direction — one because current-in × B-inward = rightward, the other because current-out × B-outward = also rightward.
The stator is fixed, so by Newton’s third law: the bell gets pushed in the opposite direction and rotates.

The formula isn’t magic — it falls out of one more fundamental law: the Lorentz force on a moving charge.
A charge \(q\) moving with velocity \(\vec{v}\) through a magnetic field \(\vec{B}\) experiences:
\[\vec{F} = q\vec{v} \times \vec{B}\]This is experimental fact — it’s how magnetic fields are defined. The force is perpendicular to both the velocity and the field.
In a wire carrying current \(I\):
In a small element of wire with length \(dL\):
Since \(nqv_d A = I\), we can substitute:
\[d\vec{F} = I\ (d\vec{L} \times \vec{B})\]Integrate along the whole wire in a uniform field:
\[\boxed{\vec{F} = I\vec{L} \times \vec{B}}\]That’s it. F = IL×B is just the Lorentz force on all the drifting charges in the wire, summed up.
The wire carries current → it creates its own circular B field (by Biot-Savart):
\[B_{wire} = \frac{\mu_0 I}{2\pi r}\]This field superimposes with the PM field. The total stored magnetic energy density at any point is:
\[u = \frac{B_{total}^2}{2\mu_0} = \frac{(\vec{B}_{PM} + \vec{B}_{wire})^2}{2\mu_0}\]Expanding:
\[u = \frac{B_{PM}^2 + 2\vec{B}_{PM}\cdot\vec{B}_{wire} + B_{wire}^2}{2\mu_0}\]The \(B_{PM}^2\) and \(B_{wire}^2\) terms are fixed. Only the cross term \(\vec{B}_{PM} \cdot \vec{B}_{wire}\) changes with position:
Left of wire: B_PM and B_wire point same way → dot product > 0 → high energy density
Right of wire: B_PM and B_wire point opposite → dot product < 0 → low energy density
A system always moves to minimise its energy. The wire is pushed from the high-energy side to the low-energy side — i.e., rightward.
The force is the gradient of the interaction energy:
\[\vec{F} = -\nabla U_{interaction} = -\nabla \int \frac{\vec{B}_{PM} \cdot \vec{B}_{wire}}{\mu_0}\ dV\]When you work through this integral (it becomes the Maxwell stress tensor), you recover exactly:
\[\vec{F} = I\vec{L} \times \vec{B}\]Both derivations are the same physics. The Lorentz route is faster. The field energy route shows you why the weak-field side pulls — the system is literally moving downhill in energy.
The bell rotates. Eventually the N pole that was sitting over your × conductor moves on, and an S pole arrives instead. The B field at that conductor has reversed direction.
Same current + reversed B = reversed force — now opposing rotation.
You have to reverse the current at exactly the right moment to keep the force in the same direction. This is commutation.

One coil with binary on/off commutation is jerky and inefficient. Real motors use three sets of coils (phases A, B, C) wound around the stator, spaced 120° apart electrically. At any moment, two phases are active — current enters through one terminal and returns through another. The third floats.
Why two phases at a time? You need a complete circuit (current must loop), and two active phases means more conductors contributing force simultaneously.
With three phases you have six valid on/off combinations. You cycle through them as the rotor turns:
| Step | High | Low | Net MMF direction |
|---|---|---|---|
| 1 | A | B | 330° |
| 2 | A | C | 30° |
| 3 | B | C | 90° |
| 4 | B | A | 150° |
| 5 | C | A | 210° |
| 6 | C | B | 270° |
Each step, all the currents in all the active slots produce a combined magnetic field — the MMF vector — pointing in one fixed direction. The rotor chases that vector. When it gets close, you switch to the next step and it chases again.

All the currents in all the active slots add up as vectors to produce one net magnetic field direction — the magnetomotive force (MMF) vector.
For A high, B low — you can work out the contribution of each coil side, sum them geometrically, and get one arrow pointing in a specific direction. That arrow is what the rotor is chasing.

The torque depends on the angle δ between this MMF vector and the rotor’s own magnetic field (from the PMs):
\[\tau = k \cdot |\text{MMF}| \cdot |\Phi_{rotor}| \cdot \sin(\delta)\]Maximum torque when δ = 90° because sin(90°) = 1.
In 6-step control the MMF only exists in six fixed directions, 60° apart. The rotor moves continuously but the MMF jumps discretely. As a result, δ isn’t constant — it drifts between 60° and 120° (ideally) or worse:
At δ = 90°: sin(90°) = 1.00 → 100% of possible torque
At δ = 60°: sin(60°) = 0.87 → 87%
At δ = 30°: sin(30°) = 0.50 → 50% ← worst case mid-step
So torque ripples between ~50% and 100% of maximum every 60° of electrical rotation. On a 22-pole motor that’s 11 electrical cycles per mechanical revolution — a lot of ripple.
Additional problems:
If, instead of 6 discrete steps, you vary all three phase currents continuously and sinusoidally, you can make the MMF vector rotate smoothly rather than jump.
If you know where the rotor is at every instant (encoder, Hall sensors, or sensorless estimation), you can calculate exactly what currents to inject so the MMF always stays exactly 90° ahead of the rotor flux — regardless of speed or load.
This is Field Oriented Control (FOC).
\[\tau = k \cdot \sin(90°) = k \cdot 1 = \text{maximum torque at every instant}\]Results:
The d/q axis framing you see in FOC literature is just a coordinate system that rotates with the rotor. Saying “keep q-axis current high, d-axis current zero” is mathematically identical to “keep the MMF 90° ahead of the rotor flux at all times.”

Here’s something that seems unrelated but is crucial: spin the bell with no power connected and measure the voltage across two phase wires.
You’ll see an AC voltage appear. Why?
Faraday’s law: a changing magnetic flux through a coil induces a voltage.
As the bell spins, PM poles sweep past the stator teeth. Each tooth sees the flux through it change from +Φ to −Φ and back as N and S poles pass. The rate of change of flux induces a voltage in the coil:
\[V = -N \frac{d\Phi}{dt}\]Faster spin → faster flux change → higher induced voltage.

This induced voltage is the back EMF (BEMF). It’s proportional to speed, and the proportionality constant is the motor velocity constant:
\[KV = \frac{RPM_{mechanical}}{V_{BEMF}}\]Higher KV → more RPM per volt → faster but less torque per amp. Lower KV → slower but more torque per amp. This is why motor selection comes down to matching KV to your gearbox and load.
When you’re actually driving the motor, BEMF opposes the supply voltage (Lenz’s law — induced voltages always oppose the change that caused them). The net current is:
\[I = \frac{V_{supply} - V_{BEMF}}{R_{winding}}\]As speed increases, BEMF increases, current decreases, torque decreases. At some speed:
\[V_{BEMF} = V_{supply} \implies I = 0 \implies \tau = 0\]This is the no-load maximum speed — the ceiling set by your supply voltage and KV. To go faster you either need more voltage or a motor with higher KV.
You can measure KV by spinning the motor with a drill at a known RPM and measuring the peak-to-peak voltage across two phase wires. You just need to account for:
| Concept | One line |
|---|---|
| Force on conductor | F = IL × B, always tangential |
| Why the force reverses | Bell rotates → pole polarity flips under conductor |
| Commutation | Reverse the current before the force reverses |
| 3-phase, 6-step trap | Step MMF through 6 fixed directions, rotor chases |
| Why trap is bad | MMF jumps → δ varies → sin(δ) < 1 → torque ripple |
| MMF vector | Net field from all active coils combined |
| 90° rule | τ = k sin(δ), maximised at δ = 90° |
| FOC | Track rotor, set currents so MMF always 90° ahead |
| Back EMF | Spinning PMs induce voltage proportional to speed |
| KV constant | RPM per volt — set by turns, poles, and flux |