The problem field-oriented control solves

In a running PMSM, the three phase currents are sinusoids that shift constantly as the rotor turns — awkward to control directly. Field-oriented control (FOC) makes the motor behave like a simple DC machine by transforming those three time-varying phase currents into two DC values that rotate with the rotor: Id and Iq. Once you're in that rotor frame, torque control becomes almost trivial, which is why essentially every EV traction drive uses FOC.

The Clarke and Park transforms

Two coordinate changes get you there. The Clarke transform collapses the three phase currents into an equivalent two-axis (α, β) stationary vector. The Park transform then rotates that vector into the rotor's own frame using the measured rotor angle, giving Id and Iq. Using the amplitude-invariant convention (the standard in motor control), the d–q vector length equals the peak phase current: |Is|_peak = √(Id² + Iq²), with |Is|_rms = |Is|_peak / √2. The current angle γ is measured from the d-axis (the rotor flux axis); many drives instead quote the advance angle β = γ − 90° from the q-axis.

Why split current into two axes?

Because the two axes do different jobs:

  • Iq (aligned with the q-axis, 90° from the magnets) produces torque against the magnet flux — the "useful" current.
  • Id (aligned with the rotor flux axis) doesn't make torque against the magnets directly; it's used to weaken the field at high speed, and to exploit reluctance in a salient machine.

For a salient PMSM the torque is a magnet term plus a reluctance term:

T = (3/2)·p·[ λpm·Iq + (Ld − Lq)·Id·Iq ]

The first term is the permanent-magnet torque; the second only exists when the rotor is salient (Lq ≠ Ld) and is why an interior-PM motor can make torque from a negative Id.

MTPA: getting the most torque per amp

Since a salient machine makes torque from both terms, there's an optimal current angle that maximises torque for a given current magnitude — maximum torque per ampere. There's a closed-form d-axis solution for it, and it reduces to Id = 0 for a non-salient (surface-PM) machine, where all the torque comes from Iq and the best strategy is simply to put all your current on the q-axis.

Worked example, field weakening & checklist

A worked Id/Iq split for a target torque, why negative Id buys both reluctance torque and high-speed operation, and a checklist for choosing an operating point.

🔒 Field-oriented control deep dive Premium

← All guides · Open the Id/Iq Current Vector Calculator