The DC motor was easy. Why was AC so hard?
Engineers loved the brushed DC motor for one reason: its torque was a single multiplication. Pour in armature current, and torque came out proportional to it — `T = k·I`. Want twice the torque? Send twice the current. The mechanical commutator, that ring of copper segments and carbon brushes, did something quietly genius: it kept the armature's magnetic field pinned at exactly 90° to the magnet's field, the angle where every amp of current buys the most twist. The motor *mechanically solved its own control problem*, around and around, all by itself.
But brushes wear out, throw sparks, and cap your speed. So we moved to the brushless world — the permanent-magnet synchronous motor and the BLDC motor — where the magnets ride on the rotor and the copper windings sit still in the stator. The catch: now *nobody* keeps that 90° angle for you. The stator's three windings are fed three sinusoidal AC currents, each phase-shifted by 120°, and as the rotor whirls past them, the angle between 'where the current's field points' and 'where the rotor magnet points' changes every instant. Get that angle wrong and your beautiful current produces almost no torque — or worse, it fights you.
The change of viewpoint: Clarke and Park
Imagine sitting on a carousel and trying to describe a rider standing still beside it. From your spinning seat, that rider seems to circle you endlessly — exhausting to track. But step off and stand on the *ground*, and suddenly the rider is just... standing there, a fixed point. Nothing about the rider changed; you changed the frame you measured from. Field-oriented control plays exactly this trick on the motor's currents. It mathematically climbs onto the rotor and rides along with it. From that rotating seat, the three frantic AC currents stop dancing and freeze into two steady DC values.
It happens in two steps. The Clarke transform collapses the three phase currents (`iₐ, i_b, i_c`, which are redundant — they always sum to zero) into just two currents on fixed perpendicular axes called α and β. We've gone from three numbers to two without losing anything. Then the Park transform rotates those α–β axes by the rotor angle θ, snapping them onto the rotor itself, giving two final currents named i_d and i_q. This is the famous dq frame.
Three AC phases Two fixed axes Two rotating (dq) axes (stator frame) (Clarke: α,β) (Park: rotates with rotor) iₐ i_b i_c i_α i_d ← flux-producing \ | / | i_β i_q ← torque-producing sinusoids ──► 90° apart, fixed ──► TWO DC VALUES (constant ~60-1000 Hz still AC at steady speed!) Park angle θ comes from the rotor position sensor (or an estimator). Inverse Park + inverse Clarke turn the dq commands back into three phase voltages the inverter actually applies.
Here is the payoff, and it is enormous. In the dq frame, i_q is your torque knob and i_d is your flux knob, and they are independent. For a surface-magnet PMSM the torque is simply `T = (3/2)·p·λ_m·i_q` — proportional to i_q alone, exactly like the old DC motor's `T = k·I`. The rotor already carries its own magnetic flux from the permanent magnets, so for normal running you command i_d = 0 (waste no current building flux you already have) and steer all of i_q into torque. You have rebuilt the brushed DC motor's simplicity, in software, inside a machine that has no brushes.
Closing the loops: from torque command to PWM
A real motor drive is a nest of feedback loops running one inside another, like clockwork gears at different speeds. The innermost and fastest loops regulate i_d and i_q. Wrapped around them, a slower loop regulates speed. Sometimes a slower-still position loop wraps around that. The trick of nesting them is that each inner loop must settle far faster than the loop outside it — typically each outer loop runs at a tenth of the inner loop's bandwidth, so the inner loop looks 'instant' to the outer one.
- Sense. Read two phase currents with shunt or Hall sensors (the third comes free from `iₐ+i_b+i_c=0`), and read the rotor angle θ from an encoder, resolver, or estimator.
- Transform. Apply Clarke then Park (using θ) to get the *measured* i_d and i_q in the rotor frame.
- Compare & correct. Two PI controllers compare measured i_d, i_q against their commands and output the dq *voltages* needed to push the error to zero.
- Transform back. Inverse Park then inverse Clarke turn those dq voltages into three phase voltage demands.
- Modulate. Space-vector PWM chops the DC bus into pulses whose averages equal those three demands, gating the inverter's six IGBT or MOSFET switches.
- Repeat — every 50 to 100 microseconds, 10,000–20,000 times a second, forever.
The outer speed loop is what the throttle pedal or the robot's trajectory planner actually talks to. It compares commanded speed to measured speed and outputs a *torque command*, which it converts straight into an i_q command for the inner loop. Press the accelerator and you are, deep down, just dialling up i_q — and because i_q maps to torque with no lag and no angle ambiguity, the wheels respond in a millisecond. That instant, vibration-free shove is why an electric car feels so different from a gearbox-and-clutch combustion car.
speed* + ┌────┐ iq* ┌───────────────┐
(from pedal) ───►(–)───►│ PI │──────►│ inner │ vd,vq ┌────────┐
▲ └────┘ │ current PI │─────────►│ inverse│
id* = 0 ────────────────────────────►│ (d & q axis) │ │Park/ │
│ └───────────────┘ │Clarke │
measured speed │ ▲ id,iq measured └───┬────┘
◄──────────┘ │ (Clarke→Park, uses θ) │ va,vb,vc
└──────────────────────────────┐ ▼
θ, ω ◄───[ encoder / resolver / sensorless estimator ] │ ┌───────┐
└───┤ SVPWM │──► 3-phase
│inverter│ motor
└───────┘Where does θ come from? Sensors vs sensorless
Everything above leans on one number: the rotor angle θ. Park can only rotate the maths onto the rotor if it *knows where the rotor is*. Feed it the wrong θ — even 20° off — and your carefully commanded i_q leaks partly into i_d, torque sags, current rises, and efficiency collapses. So how the drive learns θ is not a footnote; it is the soul of the system.
Sensored drives bolt a position sensor onto the shaft. A quadrature encoder counts optical lines to report angle to a thousandth of a turn. A resolver — essentially a tiny rotating transformer — survives the heat, oil, and vibration of an EV traction motor where an optical encoder would die, which is why traction inverters favour it. Hall-effect sensors are the cheap option in fans and BLDC appliances, giving coarse 60° sectors — enough for trapezoidal commutation, marginal for smooth FOC.
Sensorless has one famous Achilles' heel: at zero and near-zero speed the back-EMF vanishes, so there is nothing to observe and θ is lost. A washing machine that need not hold position can shrug this off, but an EV that must hold a hill, or a robot joint, cannot. The fix is high-frequency injection: superimpose a small, fast probing signal and listen to how the rotor's magnetic *saliency* — its slight d/q inductance asymmetry — modulates the response, which betrays θ even at a dead stop. Modern traction drives blend the two: HF injection at low speed, back-EMF observers at high speed, handing off seamlessly.
Field weakening, max torque per amp, and efficiency
Remember the i_d knob we left at zero? Now it earns its keep. As the rotor spins faster, its back-EMF climbs in direct proportion to speed, like a head-wind that stiffens the faster you pedal. Once that back-EMF approaches the inverter's DC-bus voltage, the drive can no longer push current into the windings — you have hit the speed ceiling. A motor with no answer to this would simply stop accelerating there.
FOC has an answer, and it is elegant: field weakening. Drive i_d *negative* to create a stator field that opposes the rotor magnets, partly cancelling their flux. Less net flux means less back-EMF, which buys headroom to keep spinning faster — letting an EV reach highway speed without a gearbox. The price is honest: torque fades in this region (you have spent current weakening flux instead of making torque, and per `T ∝ λ·i_q`, less λ means less torque), so the machine trades torque for speed above its 'base speed', tracing the classic constant-power region.
torque │‾‾‾‾‾‾‾‾‾‾‾‾● constant-torque region: id≈0 (or MTPA),
│ ╲ full i_q, torque flat
│ ╲___
│ ╲___ constant-power (field-weakening)
│ ╲____ region: id<0, torque ∝ 1/speed
└──────────────┼──────────────► speed
base speed (back-EMF ≈ bus voltage here)Below base speed, the goal flips from speed to thrift. For a pure surface-magnet PMSM, i_d=0 already gives the most torque per amp. But interior-magnet motors (IPMSM, the EV workhorse) have reluctance torque — extra twist from the rotor's magnetic geometry that only appears when i_d is slightly negative. So the drive solves a small optimisation called Maximum Torque Per Ampere (MTPA), choosing the i_d/i_q split that extracts a target torque from the *least* total current. Least current means least `I²R` heat in the copper, which is the largest loss at the low speeds where vehicles spend most of their life — directly lifting motor efficiency and range.
Putting it together: a worked feel for the numbers
Let's make it concrete with a small EV traction motor and walk one control cycle's worth of arithmetic, so the abstractions land in your hands as real volts and amps. Take an 8-pole IPMSM (so pole pairs `p = 4`) with magnet flux linkage `λ_m = 0.08 Wb`, asked for 150 N·m of torque.
Torque target: T = 150 N·m
Surface-magnet approximation: T = (3/2)·p·λ_m·i_q
150 = 1.5 × 4 × 0.08 × i_q
150 = 0.48 × i_q → i_q ≈ 312 A (the torque current)
Cruising below base speed, surface magnets: i_d = 0
Total stator current magnitude: |I| = √(i_d² + i_q²) = 312 A
Control loop runs at 16 kHz → 62.5 µs per cycle.
Rotor at 3000 rpm, 4 pole pairs:
electrical freq = 3000/60 × 4 = 200 Hz (the AC the phases carry)
In 62.5 µs the rotor turns only 200×360°×62.5e-6 ≈ 4.5° electrical
→ θ barely moves between updates: the dq values look like DC. ✓That last line is the quiet miracle. The electrical world is screaming along at 200 Hz, yet because the controller hops onto the rotor 16,000 times a second, between any two updates the angle barely twitches — so the i_d and i_q it regulates really do behave like slow DC signals that a humble PI loop can chase with ease. Speed up the motor or slow down the loop, and that margin shrinks; this is exactly why traction drives push switching frequencies high and run their current loops on dedicated hardware or fast microcontrollers.
Step back and see the whole arc of this track. You learned that a current in a field feels a force; that the force depends on an angle; that back-EMF grows with speed; that a PMSM hides its torque inside three AC phases. Field-oriented control is where every one of those ideas converges into a single algorithm: transform to dq so torque and flux separate, regulate i_q for torque and i_d for efficiency and field weakening, find θ by sensor or observer, and modulate the IGBT bridge tens of thousands of times a second. That loop, quietly closing in a chip the size of a fingernail, is what lets an EV launch silently, a robot arm halt without overshoot, and a factory drive sip the bare minimum of current. You now understand the state of the art.