Synchronous Machines#

This document describes continuous-time synchronous machine models of the motulator.drive.model package.

Synchronous Machine Model#

Figure 1 shows the space-vector equivalent circuit model of a synchronous machine in rotor coordinates. The model is implemented in the motulator.drive.model.SynchronousMachine class. The synchronous machine model can be parametrized to represent permanent-magnet synchronous machines (PMSMs) and synchronous reluctance machines (SyRMs).

Equivalent circuit model of a synchronous machine

Figure 1: Space-vector equivalent circuit model of a synchronous machine in rotor coordinates. The nonlinear stator inductance is defined by the current map \(\is = \isfcn(\psis)\).#

Equivalent circuit model of a synchronous machine

Figure 1: Space-vector equivalent circuit model of a synchronous machine in rotor coordinates. The nonlinear stator inductance is defined by the current map \(\is = \isfcn(\psis)\).#

The state equations in rotor coordinates are [Jahns et al., 1986]

(1)#\[\begin{split} \frac{\D\psis}{\D t} &= \us - \Rs\is - \jj\omegam\psis \\ \frac{\D\thetam}{\D t} &= \omegam\end{split}\]

where \(\us\) is the stator voltage and \(\is\) is the stator current. The stator resistance is denoted by \(\Rs\). The rotor angular speed is \(\omegam = \np \omegaM\), where \(\omegaM\) is the mechanical angular speed of the rotor and \(\np\) is the number of pole pairs. The current \(\is = \id + \jj \iq\) depends on the flux linkage \(\psis = \psid + \jj \psiq\) as

(2)#\[\begin{split} \is &= \isfcn(\psis) \\ &= \idfcn(\psid, \psiq) + \jj\iqfcn(\psid, \psiq)\end{split}\]

where the complex function \(\isfcn\) is referred to as a current map. The electromagnetic torque is

(3)#\[ \tauM = \frac{3 \np}{2}\IM\left\{\is\psis^*\right\}\]

Figure 2 shows the block diagram of the machine model in rotor coordinates. The magnetic model includes the current map and the torque equation. Since the machine is fed and observed from stator coordinates, the quantities are transformed accordingly, as shown in Figure 3.

Synchronous machine model

Figure 2: Block diagram of the machine model in rotor coordinates. The magnetic model includes the flux equation (or, optionally, saturation characteristics) and the torque equation.#

Synchronous machine model

Figure 2: Block diagram of the synchronous machine model in rotor coordinates. The magnetic model includes (2) and (3). Since the spatial harmonics are omitted, the current \(\is\) and the torque \(\tauM\) do not depend on the angle \(\thetam\).#

Synchronous machine model seen from stator coordinates

Figure 3: Synchronous machine model seen from stator coordinates.#

Synchronous machine model seen from stator coordinates

Figure 3: Synchronous machine model seen from stator coordinates.#

Note

Due to the spatial harmonics, the stator current \(\is = \isfcn(\psis, \thetam)\) and the electromagnetic torque \(\tauM = \tauM(\psis,\thetam)\) would also depend on the angle \(\thetam\). This effect is typically omitted in dynamic models and not implemented here.

Linear Magnetic Model#

The linear magnetic model is parametrized using the motulator.drive.model.SynchronousMachinePars class. In this case, the current is

(4)#\[ \is = \frac{\psid - \psif}{\Ld} + \jj\frac{\psiq}{\Lq}\]

where \(\Ld\) is the d-axis inductance, \(\Lq\) is the q-axis inductance, and \(\psif\) is the permanent-magnet (PM) flux linkage. The model represents a surface-PMSM with \(\Ld = \Lq\) and SyRM with \(\psif = 0\). The linear magnetic model (4) can be inverted, i.e., the flux linkage is \(\psis = \psif + \Ld\id + \jj\Lq\iq\).

Saturation Models#

Nonlinear magnetic models are parametrized using the motulator.drive.model.SaturatedSynchronousMachinePars class. The term magnetic model refers to the complete magnetic characterization of the machine. This characterization can be represented in two equivalent ways: as current maps or as flux linkage maps. These two representations are mathematically inverse to each other but describe the same physical relationship.

The magnetic model can be obtained through experimental measurements [Armando et al., 2013] or finite-element method analysis. Regardless of the source, these models can be implemented as the current map \(\is = \isfcn(\psis)\) or as its inverse, the flux linkage map

(5)#\[\begin{split} \psis &= \psisfcn(\is) \\ &= \psidfcn(\id, \iq) + \jj\psiqfcn(\id, \iq)\end{split}\]

In practice, these maps can be realized as lookup tables, explicit mathematical functions [Hinkkanen et al., 2017, Lelli et al., 2024, Woo et al., 2023], or neural networks [Lee et al., 2025].

Methods for manipulating and plotting the magnetic models are provided in the classes motulator.drive.utils.MagneticModel, motulator.drive.utils.plot_map(), and motulator.drive.utils.plot_flux_vs_current(). If the magnetic model is lossless and physically feasible, it can be numerically inverted between the two representations, see the motulator.drive.utils.MagneticModel.invert() method.

See also the examples 5.6-kW saturated PM-SyRM, FVC, 6.7-kW saturated SyRM, FVC, and 5.1-kW saturated PM-SyRM, CVC.

MTPV and MTPA Conditions#

The maximum-torque-per-volt (MTPV) and maximum-torque-per-ampere (MTPA) conditions for saturable machines can be compactly presented by means of the auxiliary current and flux vectors [Varatharajan et al., 2022]. In addition to optimal reference generation, these vectors are useful in flux-vector control and sensorless observers [Tiitinen et al., 2025]. The motulator.drive.model.SaturatedSynchronousMachinePars class contains methods for computing these vectors from the given magnetic model.

Consider the MTPV condition as an example. Applying the flux linkage vector \(\psis = \abspsis \e^{\jj\delta}\) with a given magnitude \(\abspsis\) in the torque expression (3), the MTPV condition is obtained by setting \(\partial \tauM/\partial \delta = 0\). This results in

(6)#\[ \text{MTPV:} \quad \RE\left\{\iaux\psis^* \right\} = 0\]

where the auxiliary current vector is

(7)#\[ \iaux(\psis) = -\is + \Gqq \psid + \jj \Gdd \psiq - \jj \Gdq \psis^*\]

The current \(\is\) as well as the incremental inverse inductances \(\Gdd = \partial \id/\partial \psid\), \(\Gqq = \partial \iq/\partial \psiq\), and \(\Gdq = \partial \id/\partial \psiq\) are obtained from the current map \(\isfcn(\psis)\).

The MTPA condition is obtained in a similar manner, resulting in

(8)#\[ \text{MTPA:} \quad \RE\left\{\psiaux\is^* \right\} = 0\]

where the auxiliary flux vector is

(9)#\[ \psiaux(\is) = \psis - \Lqq \id - \jj \Ldd \iq + \jj \Ldq \is^*\]

The flux linkage \(\psis\) as well as the incremental inductances \(\Ldd = \partial \psid/\partial \id\), \(\Lqq = \partial \psiq/\partial \iq\), and \(\Ldq = \partial \psid/\partial \iq\) are obtained from the flux linkage map \(\psisfcn(\is)\).

The conditions in (6) and (8) are realized in the class motulator.drive.utils.ControlLoci that provides methods for computing the MTPA, MTPV, and constant current loci for magnetically linear as well as saturated machines. The class motulator.drive.utils.MachineCharacteristics provides methods for visualizing these loci. See also the examples 5.6-kW saturated PM-SyRM, FVC, 6.7-kW saturated SyRM, FVC, and 5.1-kW saturated PM-SyRM, CVC.

Note

The auxiliary vectors follow [Hinkkanen et al., 2018] conventions and are rotated 90° relative to [Varatharajan et al., 2022].

Flux and Torque Dynamics#

From the machine model (1)(3), the stator flux and torque dynamics can be written as [Tiitinen et al., 2025]

(10)#\[\begin{split} \frac{\D \abspsis}{\D t} &= \frac{1}{\abspsis} \RE \{\left(\us - \Rs \is - \jj\omegam\psis\right) \psis^* \} \\ \frac{\D\tauM}{\D t} &= \frac{3 \np}{2} \IM \{ \left(\us - \Rs \is - \jj\omegam\psis \right) \iaux^*\}\end{split}\]

where \(\abspsis = |\psis|\) is the flux magnitude. These dynamics are valid also for saturated machines, when the auxiliary current \(\iaux\) is defined according to (7).