Main Content

Field-Oriented Control of a Surface Mounted Permanent Magnet Synchronous Motor

This example shows the speed regulation of a surface-mounted permanent magnet synchronous motor (PMSM) using field-oriented control (FOC).


PMSMs are AC synchronous motors with permanent magnets mounted on their rotor surfaces (surfaced-mounted PMSMs) or buried into the rotor (interior-mounted PMSMs). While a BLDC motor has a trapezoidal back-EMF, PMSMs have a sinusoidal back-EMF.

PMSM motors are typically controlled using the field-oriented control scheme and fed with sinusoidal currents.

Electrical Model

A DC bus, modeled as an ideal DC source of 400 V, is connected to a three-phase, two-level converter. This converter generates the appropriate three-phase voltages for the speed regulation of the 3 kW, 3000 rpm PMSM motor.

The converter is controlled by a FOC controller that generates the voltage references to a space-vector PWM modulator.

Field-Oriented Control Theory

FOC is a control scheme in which a d-q coordinates reference frame that is locked to the motor flux space vector is used to achieve decoupling between the motor flux and torque. Consequently, they can be separately controlled by stator direct-axis and quadrature-axis currents, respectively.

The torque is at maximum when the flux produced by the magnets is perpendicular to the stator flux produced by the stator currents. In field-oriented control scheme, the angle between these two fluxes is maintained at 90° to produce maximum torque.

The torque developed by the motor is given by:

$$T_e = \frac{3}{2} \: p \:[ \lambda \: i_{q} + (L_{d}-L_{q})\: i_{d}\: i_{q}]$$


  • $p$ is the number of pole pairs.

  • $\lambda$ is the flux induced by the permanent magnets in the stator windings.

  • $L_{d}$ and $L_{q}$ are the d-axis and q-axis inductances.

  • $i_{d}$ and $i_{q}$ are the d-axis and q-axis stator currents.

Note that the equation is expressed in the rotor reference frame (dq frame) and all quantities in the rotor reference frame are referred to the stator.

Because the permanent magnets of the motor are mounted on the rotor surface, the direct and quadrature-axis inductances have the same value (Ld = Lq in our example). The equation above can then be simplified to:

$$T_e = \frac{3}{2} \: p \:[ \lambda \: i_{q}]$$

This new equation shows that the direct-axis current component Id has no influence on the torque. The motor torque can then be controlled by the stator Iq component.

Field-Oriented Control System

Based on the rotor position (represented by the signal theta in the motor model), the measured three-phase stator currents are converted into their d-q coordinates in the rotor reference frame.

The motor speed $\omega_{m}$ and the speed reference $\omega_{ref}$ are fed to the speed regulator to produce a current reference, $Iq_{ref}$. The role of the speed regulator is to keep the motor speed equal to the speed reference by producing more or less torque to accelerate or decelerate the motor.

The $Iq_{ref}$ current reference and the $Id_{ref}$ current reference (which are set to zero when field weakening is not required) are fed to the current regulators. The regulators process the measured and reference currents to produce the three-phase reference signals. The signals are connected to the PWM modulator that generates pulses for the motor inverter. The modulator uses the space vector PWM method with pulse averaging and a switching frequency of 8 kHz.


Run the simulation and observe waveforms on the scope blocks. The motor rapidely reaches its reference speed of 2000 rpm. At 0.25 s, the motor rotation is reversed by setting the speed reference to -2800 rpm. To respect this new set point, the control system produces a large negative torque. Notice that the active power transferred back to the DC source during the deceleration. At 0.65 s, a negative load torque of -8 N.m is applied to the motor. In order to maintain the motor speed at -2800 rpm, the control system changes the reference current to produce a negative torque of about -10 N.m.

Real-Time Simulation

If you have Simulink Real-Time and a Speedgoat target, you can run this model in real time.

  1. Open the Configuration Parameters window (or press Ctrl+E ), click Code Generation , and set System target file to slrealtime.tlc .

  2. Connect to the target and, in the Real-Time tab, click Run on Target.

Your model will then be automatically built, deployed, and executed on the target. Depending on your target streaming bandwidth, you may have to reduce the number of signals transferred in real-time from the target to the host computer.


Cirrincione, M., M. Pucci, G. Vitale. Power Converters and AC Electrical Drives with Linear Neural Networks. CRC Press, 2012.