# FEM-Parameterized PMSM

Permanent magnet synchronous motor defined in terms of magnetic flux linkage

**Libraries:**

Simscape /
Electrical /
Electromechanical /
Permanent Magnet

## Description

The FEM-Parameterized PMSM block models a permanent magnet synchronous motor (PMSM) defined in terms of magnetic flux linkage. Use this block to model any three-phase machine that has a permanent magnet rotor including:

Axial flux (pancake) motors.

Brushless servomotors.

Motors with interior magnet rotors such as the interior permanent magnet (IPM) motor or interior permanent magnet synchronous machine (IPMSM).

Motors with surface-mounted magnet rotors:

Surface permanent magnet (SPM) motors or surface permanent magnet synchronous machines (SPMSMs).

Brushless DC (BLDC) motors.

You parameterize the block by providing tabulated data of the motor magnetic flux as a function of current and rotor angle. This is the way that finite element method (FEM) packages usually export flux information. Because of the tabulated form, the flux can vary nonlinearly with both rotor angle and current. The nonlinear dependence on rotor angle enables the block to support trapezoidal flux profiles exhibited by brushless DC motors and also capture the higher harmonics for motors with only approximately sinusoidal flux profiles.

This figure shows the equivalent circuit for a wye-connected PMSM. The rotor angle is zero when the permanent magnet flux aligns with the A-phase magnetic axis.

In practice, the flux linking each of the three windings depends on all three currents and rotor angle. Tabulating flux as a function of four independent variables might lead to simulation inefficiency and significant memory requirements to manage the data. The block, therefore, lets you select between the following parameterization methods for flux and torque:

**2-D partial derivative data**— 2-D table lookup, with options to tabulate in terms of current and rotor angle, or in terms of-axis and`d`

-axis currents. The first option assumes constant mutual inductance and supports nonsinusoidal back emf profiles. The second option assumes a sinusoidal back emf and captures saturation effects for interior PMSMs (IPMSMs).`q`

**3-D partial derivative data**— 3-D table lookup, based on direct current, quadrature current, and rotor angle. You provide the flux lookup data for the*a*phase. The block uses Park transform to map the three stator winding currents to direct and quadrature currents. This method reduces the data complexity, as compared to the 4-D table lookup, and therefore results in improved simulation performance.**4-D partial derivative data**— 4-D table lookup, based on the three stator winding currents and the rotor angle. You provide the flux lookup data for the*a*phase. This model has the best fidelity of the three, but also is the most costly in terms of simulation performance and memory requirements.**3-D flux linkage data**— 3-D table lookup, based on the flux linkage data. You can provide the flux linkage data in a variety of formats. The block uses Park transform to map the three stator winding currents to direct and quadrature currents. This method reduces the data complexity, as compared to the 4-D table lookup, and therefore results in improved simulation performance.

By default, the blocks implements a wye-wound configuration for the stator windings
for all these parameterizations. However, you can switch to a delta-wound or an open-end
configuration by using the **Winding type** parameter. When in the
delta-wound configuration, the *a* phase is connected between ports
**a** and **b**, the *b* phase
between ports **b** and **c** and the
*c* phase between ports **c** and
**a**.

To access these parameterization methods, double-click the block in your model and set
the **Modeling option** parameter to the desired option, with or
without thermal ports. By default, the thermal ports are not exposed. For more
information, see Model Thermal Effects.

**Note**

Simscape™ Electrical™ includes several blocks that can model the same type of motor or actuator. You must choose a block that has sufficient modeling detail for the engineering design questions that you need to answer. However, do not use more detail than you need, because higher-fidelity models slow down simulation and are more complex to parameterize.

Blocks like the FEM-Parameterized PMSM block define motor behavior in terms of flux linkage. These models have a high level of fidelity. Use this block only when you need a high level of modeling detail, for example, to predict efficiency for traction applications or to capture torque and electrical current harmonics. For more information about choosing the right block to model your motor at the right level of fidelity, see Choose Blocks to Model Motors or Actuators.

### 2-D Data Model with Constant Mutual Inductance

In this 2-D flux data model, the flux linking each winding is assumed to depend nonlinearly only on the current in that same winding, plus the rotor angle. In practice, this is a reasonable assumption for many permanent magnet synchronous motors; however, it is less accurate for switched reluctance motors. Given this assumption, the fluxes in the three windings are:

$$\left[\begin{array}{c}{\varphi}_{a}\\ \begin{array}{l}{\varphi}_{b}\\ {\varphi}_{c}\end{array}\end{array}\right]=\left[\begin{array}{ccc}0& -{M}_{s}& -{M}_{s}\\ -{M}_{s}& 0& -{M}_{s}\\ -{M}_{s}& -{M}_{s}& 0\end{array}\right]\left[\begin{array}{c}{i}_{a}\\ \begin{array}{l}{i}_{b}\\ {i}_{c}\end{array}\end{array}\right]+\left[\begin{array}{c}\varphi \left({i}_{a},{\theta}_{r}\right)\\ \begin{array}{l}\varphi \left({i}_{b},{\theta}_{r}-2\pi /\left(3N\right)\right)\\ \varphi \left({i}_{c},{\theta}_{r}-4\pi /\left(3N\right)\right)\end{array}\end{array}\right]$$

where $$\varphi \left({\theta}_{r},{i}_{a}\right)$$ is the flux linkage for the A-phase winding as a function of rotor
angle and A-phase current. *Θ*_{r} = 0 corresponds to the rotor * d*-axis
aligning with the A-phase positive magnetic flux direction.

*M*

_{s}is the stator-stator mutual inductance.

For improved numerical performance, the equations implemented in the block
actually work with the partial derivatives of flux linkage with respect to current, $$\partial \varphi \left(i,{\theta}_{r}\right)/\partial i$$, and rotor angle, $$\partial \varphi \left(i,{\theta}_{r}\right)/\partial {\theta}_{r}$$, rather than the flux directly. If your FEM package does not
export these partial derivatives, you can determine them using a MATLAB^{®} script. See the Solenoid
Parameterized with FEM Data example model and its supporting MATLAB script for an example of how to do this.

The electrical equations for the block, defined in terms of flux partial derivatives, are:

$$\begin{array}{l}{v}_{a}=\frac{\partial \varphi}{\partial {i}_{a}}\frac{d{i}_{a}}{dt}+\frac{\partial \varphi}{\partial {\theta}_{r}}\frac{d{\theta}_{r}}{dt}-{M}_{s}\left(\frac{d{i}_{b}}{dt}+\frac{d{i}_{c}}{dt}\right)+{R}_{s}{i}_{a}\\ {v}_{b}=\frac{\partial \varphi}{\partial {i}_{b}}\frac{d{i}_{b}}{dt}+\frac{\partial \varphi}{\partial {\theta}_{r}}\frac{d{\theta}_{r}}{dt}-{M}_{s}\left(\frac{d{i}_{a}}{dt}+\frac{d{i}_{c}}{dt}\right)+{R}_{s}{i}_{b}\\ {v}_{c}=\frac{\partial \varphi}{\partial {i}_{c}}\frac{d{i}_{c}}{dt}+\frac{\partial \varphi}{\partial {\theta}_{r}}\frac{d{\theta}_{r}}{dt}-{M}_{s}\left(\frac{d{i}_{a}}{dt}+\frac{d{i}_{b}}{dt}\right)+{R}_{s}{i}_{c}\end{array}$$

where

*v*_{a},*v*_{b},*v*_{c}are the voltages applied to the A, B, and C stator windings.*i*_{a},*i*_{b},*i*_{c}are the stator currents in each of the three windings.*R*_{s}is the resistance of each of the stator windings.*M*_{s}is the stator-stator mutual inductance.$$\partial \varphi /\partial {i}_{a},\text{}\partial \varphi /\partial {i}_{b}\text{,}\partial \varphi /\partial {i}_{c}$$ are the partial derivatives of flux linkage with respect to stator current in each of the three windings.

$$\partial \varphi /\partial {\theta}_{r}$$ is the partial derivative of flux linkage with respect to rotor angle.

The block can automatically calculate the torque matrix from the flux information
that you provide. Alternatively, you can set the **Calculate torque
matrix?** parameter to `No`

and directly
specify the torque as a function of current and rotor angle. See the FEM-Parameterized Rotary Actuator block reference page for more
information.

### 2-D Data Model with Sinusoidal Back EMF

In this 2-D flux data model, the flux linking each winding is assumed to depend nonlinearly on all stator winding currents, plus it is assumed that the permanent magnet flux linkage is sinusoidal. Interior magnet PMSMs (or IPMSMs) usually fit this assumption well. The equations are:

$$\left[\begin{array}{c}{\varphi}_{d}\\ {\varphi}_{q}\end{array}\right]=\left[\begin{array}{cc}{L}_{d}\left({i}_{d},{i}_{q}\right)& \\ & {L}_{q}\left({i}_{d},{i}_{q}\right)\end{array}\right]\left[\begin{array}{c}{i}_{d}\\ {i}_{q}\end{array}\right]+\left[\begin{array}{c}{\varphi}_{m}\left({i}_{d},{i}_{q}\right)\\ \end{array}\right]$$

$$T=\frac{3}{2}N\left({i}_{q}\left({i}_{d}{L}_{d}\left({i}_{d},{i}_{q}\right)+{\varphi}_{m}\left({i}_{d},{i}_{q}\right)\right)-{i}_{d}{i}_{q}{L}_{q}\left({i}_{d},{i}_{q}\right)\right)$$

where

*i*_{d}and*i*_{q}are the-axis and`d`

-axis currents, respectively.`q`

*ϕ*_{d}and*ϕ*_{q}are the-axis and`d`

-axis flux linkages, respectively.`q`

*ϕ*_{m}is the permanent magnet flux linkage.*L*_{d}and*L*_{q}are the-axis and`d`

-axis inductances, respectively. They are assumed to depend on the`q`

-axis and`d`

-axis currents.`q`

*N*is the number of pole pairs.*T*is the electrical torque.

### 3-D Partial Derivative Data Model Using Park Transform

Working with four-dimensional data has both a simulation performance cost and a memory cost. To reduce the table dimension to three-dimensional, the 3-D data model uses Park transform to map the three currents to direct and quadrature currents:

$$\left[\begin{array}{c}{i}_{d}\\ {i}_{q}\end{array}\right]=\frac{2}{3}\left[\begin{array}{ccc}\mathrm{cos}\left(N{\theta}_{r}\right)& \mathrm{cos}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& \mathrm{cos}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ -\mathrm{sin}\left(N{\theta}_{r}\right)& -\mathrm{sin}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& -\mathrm{sin}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\end{array}\right]\left[\begin{array}{c}{i}_{a}\\ \begin{array}{l}{i}_{b}\\ {i}_{c}\end{array}\end{array}\right]$$

In the general case, Park transform maps to direct, quadrature, and zero-sequence currents. However, the zero-sequence current is typically small under normal operating conditions. Therefore, the model neglects the dependence of the flux linkage terms on zero-sequence current, and determines the flux linkage in terms of just direct and quadrature currents plus rotor angle. The flux equation for the 3-D data model is:

$$\left[\begin{array}{c}{\varphi}_{a}\\ \begin{array}{l}{\varphi}_{b}\\ {\varphi}_{c}\end{array}\end{array}\right]=\left[\begin{array}{c}\varphi \left({i}_{d},{i}_{q},{\theta}_{r}\right)\\ \begin{array}{l}\varphi \left({i}_{d},{i}_{q},{\theta}_{r}-2\pi /\left(3N\right)\right)\\ \varphi \left({i}_{d},{i}_{q},{\theta}_{r}-4\pi /\left(3N\right)\right)\end{array}\end{array}\right]$$

The electrical equations for the block are also defined in terms of flux partial
derivatives, similar to the 4-D data model. You can calculate 3-D flux linkage
partial derivative data from 4-D flux linkage data using `ee_calculateFluxPartialDerivatives`

.

### 4-D Partial Derivative Data Model

The flux linking each of the windings is a function of the current in that winding, the currents in the other two windings, and the rotor angle. For full accuracy, the 4-D flux data model assumes that the flux linkage is a function of the three currents and the rotor angle, therefore performing four-dimensional table lookups. The flux equation is:

$$\left[\begin{array}{c}{\varphi}_{a}\\ \begin{array}{l}{\varphi}_{b}\\ {\varphi}_{c}\end{array}\end{array}\right]=\left[\begin{array}{c}\varphi \left({i}_{a},{i}_{b},{i}_{c},{\theta}_{r}\right)\\ \begin{array}{l}\varphi \left({i}_{b},{i}_{c},{i}_{a},{\theta}_{r}-2\pi /\left(3N\right)\right)\\ \varphi \left({i}_{c},{i}_{a},{i}_{b},{\theta}_{r}-4\pi /\left(3N\right)\right)\end{array}\end{array}\right]$$

where

*ϕ*_{a},*ϕ*_{b},*ϕ*_{c}are the flux linkages for the A, B, and C stator windings.*i*_{a},*i*_{b},*i*_{c}are the stator currents in each of the three windings.*Θ*_{r}is the rotor angle.*Θ*_{r}= 0 corresponds to the case where the permanent magnet flux is aligned with the A-phase stator winding flux.*N*is the number of pole pairs.

Flux linkage data is assumed cyclic with
*Θ*_{r}. If, for example, the motor has six
pole pairs, then the range for the data is 0 ≤ *Θ*_{r} ≤
60°. You must provide data both at 0 and 60 degrees, and because the
data is cyclic, the flux linkage partial derivatives must be the same at these two
end points.

The torque equation is:

$$\tau =T\left({i}_{a},{i}_{b},{i}_{c},{\theta}_{r}\right)$$

The 4-D data model does not have an option for the block to determine torque from flux linkage. Because of the increased numerical overhead in the 4-D case, it is better to precalculate the torque just once, rather than calculate it every time you run the simulation.

For improved numerical performance, the equations implemented in the block
actually work with the partial derivatives of flux linkage with respect to the three
currents and the rotor angle, rather than the flux directly. If your FEM package
does not export these partial derivatives, you can determine them using `ee_calculateFluxPartialDerivatives`

.

The electrical equations for the block, defined in terms of flux partial derivatives, are:

$$\begin{array}{l}{v}_{a}=\frac{\partial {\varphi}_{a}}{\partial {i}_{a}}\frac{d{i}_{a}}{dt}+\frac{\partial {\varphi}_{a}}{\partial {i}_{b}}\frac{d{i}_{b}}{dt}+\frac{\partial {\varphi}_{a}}{\partial {i}_{c}}\frac{d{i}_{c}}{dt}+\frac{\partial {\varphi}_{a}}{\partial {\theta}_{r}}\frac{d{\theta}_{r}}{dt}+{R}_{s}{i}_{a}\\ {v}_{b}=\frac{\partial {\varphi}_{b}}{\partial {i}_{a}}\frac{d{i}_{a}}{dt}+\frac{\partial {\varphi}_{b}}{\partial {i}_{b}}\frac{d{i}_{b}}{dt}+\frac{\partial {\varphi}_{b}}{\partial {i}_{c}}\frac{d{i}_{c}}{dt}+\frac{\partial {\varphi}_{b}}{\partial {\theta}_{r}}\frac{d{\theta}_{r}}{dt}+{R}_{s}{i}_{b}\\ {v}_{c}=\frac{\partial {\varphi}_{c}}{\partial {i}_{a}}\frac{d{i}_{a}}{dt}+\frac{\partial {\varphi}_{c}}{\partial {i}_{b}}\frac{d{i}_{b}}{dt}+\frac{\partial {\varphi}_{c}}{\partial {i}_{c}}\frac{d{i}_{c}}{dt}+\frac{\partial {\varphi}_{c}}{\partial {\theta}_{r}}\frac{d{\theta}_{r}}{dt}+{R}_{s}{i}_{c}\end{array}$$

where

*v*_{a},*v*_{b},*v*_{c}are the voltages applied to the A, B, and C stator windings.*i*_{a},*i*_{b},*i*_{c}are the stator currents in each of the three windings.*R*_{s}is the resistance of each of the stator windings.

### 3-D Flux Linkage Data Models

The 3-D flux linkage data options let you work with raw flux linkage data exported from your finite-element (FE) motor design tool. This is in contrast to the 3-D partial derivative data options, for which you need to determine the partial derivatives. You can provide flux linkage data in a variety of formats, to support different FE tool conventions:

Tabulate DQ-axes flux linkage data or A-phase flux linkage data — Some tools support working with flux linkage resolved into direct (D) and quadrature (Q) axes. An advantage of this approach is that data for rotor angles in the range 0 to 360/

*N*/3 degrees is required (where*N*is the number of pole pairs). Other tools work directly with A-, B-, and C-phase flux linkages, and for this you can import just the A-phase flux linkage, for which the rotor angle range must be in the range 0 to 360/*N*degrees. The implicit assumption of importing just the A-phase data is that the B and C phase data is the same except shifted in phase.Tabulate using cartesian or polar current coordinates — Cartesian tabulation implies the flux linkage is tabulated in terms of D-axis current and Q-axis current (plus rotor angle). Alternatively, polar tabulation involves tabulating flux linkages in terms of current magnitude, current advance angle relative to the Q-axis, and rotor angle. The advantage of polar coordinates is that it more naturally reflects the permitted operating currents, thereby avoiding unused table data points.

These conventions result in four **Flux linkage data format**
parameterization options:

`D and Q axes flux linkages as a function of D-axis current (iD), Q-axis current (iQ), and rotor angle (theta)`

`D and Q axes flux linkages as a function of peak current magnitude (I), current advance angle (B), and rotor angle (theta)`

`A-phase flux linkage as a function of D-axis current (iD), Q-axis current (iQ), and rotor angle (theta)`

`A-phase flux linkage as a function of peak current magnitude (I), current advance angle (B), and rotor angle (theta)`

Besides selecting the flux linkage data format used by your FE tool, you have to
select the version of Park transform used by the tool. The four conventions are
described below and correspond to the four options for the **Park’s
convention for tabulated data** drop-down menu.

**Note**

When looking at logged values for D- and Q-axis currents, keep in mind that for each of these options, the format is converted, as needed, so that internally the FEM-Parameterized PMSM block consistently uses Option 1.

**Note**

To preserve higher-order harmonics due to the permanent magnet back EMF,
provide the A-phase flux data rather than the D-axis and Q-axis flux data.
Conversely, if you provide D-axis and Q-axis fluxes, the Park's transform
removes the higher-order harmonics. Working with D and Q fluxes is sufficient
for many applications, particularly if you set the **Winding
type** parameter to `Wye-wound`

and there
aren't connections to the neutral port of this block. For this particular case,
the constraint that the sum of the currents is zero at the neutral port removes
all third-order harmonics.

**Option 1. Q leads D, rotor angle measured from A-phase to D-axis**

This is the Park’s convention used internally by Simscape Electrical motor and machine blocks. All other options are converted into this format.

*N*: number of pole pairs*θ*_{r}: rotor angle*i*_{d},*i*_{q}: D-axis and Q-axis currents*i*_{p}: Current magnitude = $$\sqrt{{i}_{d}^{2}+{i}_{q}^{2}}$$*β*: Current advance angle = $${\mathrm{tan}}^{-1}\left(-{i}_{d}/{i}_{q}\right)$$

Corresponding Park transform is

$$\left[\begin{array}{c}{i}_{d}\\ {i}_{q}\\ {i}_{0}\end{array}\right]=\frac{2}{3}\left[\begin{array}{ccc}\mathrm{cos}\left(N{\theta}_{r}\right)& \mathrm{cos}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& \mathrm{cos}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ -\mathrm{sin}\left(N{\theta}_{r}\right)& -\mathrm{sin}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& -\mathrm{sin}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ \frac{1}{2}& \frac{1}{2}& \frac{1}{2}\end{array}\right]\left[\begin{array}{c}{i}_{a}\\ \begin{array}{l}{i}_{b}\\ {i}_{c}\end{array}\end{array}\right]$$

where *i*_{a},
*i*_{b}, and
*i*_{c} are the A-phase, B-phase, and
C-phase currents, respectively.

**Option 2. Q leads D, rotor angle measured from A-phase to Q-axis**

*N*: number of pole pairs*θ*_{r}: rotor angle*i*_{d},*i*_{q}: D-axis and Q-axis currents*i*_{p}: Current magnitude = $$\sqrt{{i}_{d}^{2}+{i}_{q}^{2}}$$*β*: Current advance angle = $${\mathrm{tan}}^{-1}\left(-{i}_{d}/{i}_{q}\right)$$

Corresponding Park transform is

$$\left[\begin{array}{c}{i}_{d}\\ {i}_{q}\\ {i}_{0}\end{array}\right]=\frac{2}{3}\left[\begin{array}{ccc}\mathrm{sin}\left(N{\theta}_{r}\right)& \mathrm{sin}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& \mathrm{sin}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ \mathrm{cos}\left(N{\theta}_{r}\right)& \mathrm{cos}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& \mathrm{cos}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ \frac{1}{2}& \frac{1}{2}& \frac{1}{2}\end{array}\right]\left[\begin{array}{c}{i}_{a}\\ \begin{array}{l}{i}_{b}\\ {i}_{c}\end{array}\end{array}\right]$$

where *i*_{a},
*i*_{b}, and
*i*_{c} are the A-phase, B-phase, and
C-phase currents, respectively.

**Option 3. D leads Q, rotor angle measured from A-phase to D-axis**

*N*: number of pole pairs*θ*_{r}: rotor angle*i*_{d},*i*_{q}: D-axis and Q-axis currents*i*_{p}: Current magnitude = $$\sqrt{{i}_{d}^{2}+{i}_{q}^{2}}$$*β*: Current advance angle = $${\mathrm{tan}}^{-1}\left(-{i}_{d}/{i}_{q}\right)$$

Corresponding Park transform is

$$\left[\begin{array}{c}{i}_{d}\\ {i}_{q}\\ {i}_{0}\end{array}\right]=\frac{2}{3}\left[\begin{array}{ccc}\mathrm{cos}\left(N{\theta}_{r}\right)& \mathrm{cos}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& \mathrm{cos}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ \mathrm{sin}\left(N{\theta}_{r}\right)& \mathrm{sin}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& \mathrm{sin}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ \frac{1}{2}& \frac{1}{2}& \frac{1}{2}\end{array}\right]\left[\begin{array}{c}{i}_{a}\\ \begin{array}{l}{i}_{b}\\ {i}_{c}\end{array}\end{array}\right]$$

where *i*_{a},
*i*_{b}, and
*i*_{c} are the A-phase, B-phase, and
C-phase currents, respectively.

**Option 4. D leads Q, rotor angle measured from A-phase to Q-axis**

*N*: number of pole pairs*θ*_{r}: rotor angle*i*_{d},*i*_{q}: D-axis and Q-axis currents*i*_{p}: Current magnitude = $$\sqrt{{i}_{d}^{2}+{i}_{q}^{2}}$$*β*: Current advance angle = $${\mathrm{tan}}^{-1}\left(-{i}_{d}/{i}_{q}\right)$$

Corresponding Park transform is

$$\left[\begin{array}{c}{i}_{d}\\ {i}_{q}\\ {i}_{0}\end{array}\right]=\frac{2}{3}\left[\begin{array}{ccc}-\mathrm{sin}\left(N{\theta}_{r}\right)& -\mathrm{sin}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& -\mathrm{sin}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ \mathrm{cos}\left(N{\theta}_{r}\right)& \mathrm{cos}\left(N{\theta}_{r}-\frac{2\pi}{3}\right)& \mathrm{cos}\left(N{\theta}_{r}+\frac{2\pi}{3}\right)\\ \frac{1}{2}& \frac{1}{2}& \frac{1}{2}\end{array}\right]\left[\begin{array}{c}{i}_{a}\\ \begin{array}{l}{i}_{b}\\ {i}_{c}\end{array}\end{array}\right]$$

where *i*_{a},
*i*_{b}, and
*i*_{c} are the A-phase, B-phase, and
C-phase currents, respectively.

### Calculating Iron Losses

The FEM-Parameterized PMSM block models iron losses according to the parameterization methods you choose for flux and torque.

These iron losses produce heat. The block injects the heat from rotor iron losses
into the **HR** thermal port that represents the rotor thermal mass. The
block splits the stator iron losses in three equal parts and injects each part into
the stator winding thermal ports, **HA**, **HB**, and
**HC**.

**Specify open-circuit and short-circuit loss data (permanent magnet motors only)**

For the **2-D partial derivative data**,
**3-D partial derivative data**, and **4-D
partial derivative data** options, with or without thermal
ports, the iron loss model is based on the work of Mellor [1]. Iron losses are divided into two terms, one representing the main
magnetizing path, and the other representing the cross-tooth tip path that
becomes active during field weakened operation.

The term representing the main magnetizing path depends on the induced RMS stator voltage, $${V}_{{m}_{rms}}^{}$$:

$${P}_{OC}\left({V}_{{m}_{rms}}^{}\right)=\frac{{a}_{h}}{k}{V}_{{m}_{rms}}^{}+\frac{{a}_{j}}{{k}^{2}}{V}_{{m}_{rms}}^{2}+\frac{{a}_{ex}}{{k}^{1.5}}{V}_{{m}_{rms}}^{1.5}.$$

This is the dominant term during no-load operation. *k* is
the back emf constant relating RMS volts per Hz. It is defined as $$k={V}_{{m}_{rms}}^{}/f$$, where *f* is the electrical frequency. The
first term on the right-hand side is the magnetic hysteresis loss, the second is
the eddy current loss and the third is the excess loss. The three coefficients
appearing on the numerators are derived from the values that you provide for the
open-circuit hysteresis, eddy, and excess losses.

The term representing the cross-tooth tip path becomes important when a demagnetizing field is set up and can be determined from a finite element analysis short-circuit test. It depends on the RMS emf associated with the cross-tooth tip flux, $${V}_{{d}_{rms}}^{*}$$:

$${P}_{SC}\left({V}_{{d}_{rms}}^{*}\right)=\frac{{b}_{h}}{k}{V}_{{d}_{rms}}^{*}+\frac{{b}_{j}}{{k}^{2}}{V}_{{d}_{rms}}^{*2}+\frac{{b}_{ex}}{{k}^{1.5}}{V}_{{d}_{rms}}^{*1.5}.$$

The three numerator terms are derived from the values you provide for the short-circuit hysteresis, eddy, and excess losses.

**Steinmetz parameterization method**

For the **3-D flux linkage data** with or without
thermal ports, you can also model the iron losses based on the Steinmetz
equation. The Steinmetz method scales for different motor speeds or electrical
frequencies so that iron loss data is only required as function of motor
currents.

If, in the **Iron Losses** setting, you set the
**Model** parameter to ```
Specify open and short
circuit loss data (permanent magnet motors only)
```

, the block
uses the Steinmetz method, but assumes constant coefficients and no dependency
on peak current and current phase advance. Select this option if you have dyno
measurements or if you perform an FE analysis to get the iron losses from just
open-circuit and short-circuit simulations.

Conversely, if you set the **Flux linkage data format**
parameter to either ```
D and Q axes flux linkages as a function of
peak current magnitude (I), current advance angle (B), and rotor angle
(theta)
```

or ```
A-phase flux linkage as a function of
peak current magnitude (I), current advance angle (B), and rotor angle
(theta)
```

, then the block tabulated the coefficients with the
**Peak current magnitude vector, I** and **Current
advance angle vector, B** parameters, so that the iron losses are
given by:

$$\begin{array}{l}{P}_{rotor}\left(f\right)={k}_{hr}\left({I}_{p},\beta \right)f+{k}_{Jr}\left({I}_{p},\beta \right){f}^{2}+{k}_{er}\left({I}_{p},\beta \right){f}^{1.5}\\ {P}_{stator}\left(f\right)={k}_{hs}\left({I}_{p},\beta \right)f+{k}_{Js}\left({I}_{p},\beta \right){f}^{2}+{k}_{es}\left({I}_{p},\beta \right){f}^{1.5}\end{array}$$

where:

*f*is the electrical instantaneous frequency, in`Hz`

, and is equal to the rotor mechanical speed multiplied by the number of pole pairs. This frequency is a variable that changes over time.*k*is the_{hr}(I_{p},β)**Rotor hysteresis loss coefficient, k_hr(I,B)**.*k*is the_{Jr}(I_{p},β)**Rotor eddy current loss coefficient, k_Jr(I,B)**.*k*is the_{er}(I_{p},β)**Rotor excess current loss coefficient, k_er(I,B)**.*k*is the_{hs}(I_{p},β)**Stator hysteresis loss coefficient, k_hs(I,B)**.*k*is the_{Js}(I_{p},β)**Stator eddy current loss coefficient, k_Js(I,B)**.*k*is the_{es}(I_{p},β)**Stator excess current loss coefficient, k_es(I,B)**.

Similarly, if you set the **Flux linkage data format**
parameter to either ```
D and Q axes flux linkages as a function of
D-axis current (iD), Q-axis current (iQ), and rotor angle
(theta)
```

or ```
A-phase flux linkage as a function of
D-axis current (iD), Q-axis current (iQ), and rotor angle
(theta)
```

, then the iron losses are given by:

$$\begin{array}{l}{P}_{loss,rotor}\left(f\right)={k}_{hr}\left({i}_{d},{i}_{q}\right)f+{k}_{Jr}\left({i}_{d},{i}_{q}\right){f}^{2}+{k}_{er}\left({i}_{d},{i}_{q}\right){f}^{1.5}\\ {P}_{loss,stator}\left(f\right)={k}_{hs}\left({i}_{d},{i}_{q}\right)f+{k}_{Js}\left({i}_{d},{i}_{q}\right){f}^{2}+{k}_{es}\left({i}_{d},{i}_{q}\right){f}^{1.5}\end{array}$$

where:

*k*is the_{hr}(i_{d},i_{q})**Rotor hysteresis loss coefficient, k_hr(id,iq)**.*k*is the_{Jr}(i_{d},i_{q})**Rotor eddy current loss coefficient, k_Jr(id,iq)**.*k*is the_{er}(i_{d},i_{dq})**Rotor excess current loss coefficient, k_er(id,iq)**.*k*is the_{hs}(i_{d},i_{q})**Stator hysteresis loss coefficient, k_hs(id,iq)**.*k*is the_{Js}(i_{d},i_{q})**Stator eddy current loss coefficient, k_Js(id,iq)**.*k*is the_{es}(i_{d},i_{q})**Stator excess current loss coefficient, k_es(id,iq)**.

Select this option only in conjunction with a motor design tool
that can calculate the coefficients. You can export the Steinmetz coefficients
lookup tables in Cartesian coordinates
(*i _{d}*,

*i*) or radial coordinates (

_{q}*I*,

_{p}*β*) by using FEM tools such as Motor-CAD or ANSYS® Maxwell®. These coefficients are valid for a range of currents and frequencies. To obtain the right value based on the current state of the machine, this block interpolates the Steinmetz coefficient value at run-time.

For more information about importing Steinmetz coefficients from FEM tools, see the Import IPMSM Flux Linkage Data from Motor-CAD example.

**Tabulate with current and speed**

For the **3-D flux linkage data** with or without
thermal ports, you can also model the iron losses by tabulating them
independently for rotor and stator.

If you set the **Flux linkage data format** parameter to
either ```
D and Q axes flux linkages as a function of peak current
magnitude (I), current advance angle (B), and rotor angle
(theta)
```

or ```
A-phase flux linkage as a function of
peak current magnitude (I), current advance angle (B), and rotor angle
(theta)
```

, the block tabulated the iron losses with the
**Peak current magnitude vector, I** and **Current
advance angle vector, B** parameters, so that the iron losses are
given by:

$${P}_{loss}\left({I}_{p},\beta ,w\right)=tablelookup\left({P}_{table},{I}_{p},\beta ,w\right)$$

where *w* is the **Rotor speed
vector, w** parameter.

Similarly, if you set the **Flux linkage data format**
parameter to either ```
D and Q axes flux linkages as a function of
D-axis current (iD), Q-axis current (iQ), and rotor angle
(theta)
```

or ```
A-phase flux linkage as a function of
D-axis current (iD), Q-axis current (iQ), and rotor angle
(theta)
```

, then the iron losses are given by:

$${P}_{loss}\left({i}_{d},{i}_{q},w\right)=tablelookup\left({P}_{table},{i}_{d},{i}_{q},w\right).$$

### Model Thermal Effects

You can expose thermal ports to model the effects of losses that convert power to heat. To
expose the thermal ports, set the **Modeling option** parameter to either:

`2-D partial derivative data | No thermal port`

— 2-D table lookup parameterization, with options to tabulate in terms of current and rotor angle, but without thermal ports.`2-D partial derivative data | Show thermal port`

— 2-D table lookup parameterization, with options to tabulate in terms of current and rotor angle, and with thermal ports.`3-D partial derivative data | No thermal port`

— 3-D table lookup parameterization, based on direct current, quadrature current, and rotor angle, but without thermal ports.`3-D partial derivative data | Show thermal port`

— 3-D table lookup parameterization, based on direct current, quadrature current, and rotor angle, and with thermal ports.`4-D partial derivative data | No thermal port`

— 4-D table lookup parameterization, based on the three stator winding currents and the rotor angle, but without thermal ports.`4-D partial derivative data | Show thermal port`

— 4-D table lookup parameterization, based on the three stator winding currents and the rotor angle, and with thermal ports.`3-D flux linkage data | No thermal port`

— 3-D table lookup parameterization, based on the flux linkage data without thermal ports.`3-D flux linkage data | Show thermal port`

— 3-D table lookup parameterization, based on the flux linkage data with thermal ports.

For more information about using thermal ports in actuator blocks, see Simulating Thermal Effects in Rotational and Translational Actuators.

**Temperature Dependency for Permanent Magnet Flux**

To calculate the temperature dependence of the permanent magnet, the block
uses the **Permanent magnet flux temperature coefficient**
parameter, *α _{flux}*. This parameter
determines how much the motor flux decreases for each increase of degree of
temperature. The block calculates the flux reduction factor by using this equation:

$$\text{FluxReductionForTemp}=1+{\alpha}_{flux}\cdot \left({T}_{R}-{T}_{meas}\right),$$

where *T _{R}* is the
temperature at the

**HR**port and

*T*is the value of the

_{meas}**Measurement temperature**parameter. In this block, the flux decreases linearly with the temperature. This decrease causes the back EMF and torque to also decrease linearly with the temperature by the same amount,

$$\begin{array}{l}\text{EMF}=\text{FluxReductionForTemp}\cdot {\text{EMF}}_{0}\\ \tau =\text{FluxReductionForTemp}\cdot {\tau}_{0}\end{array}$$

where:

*τ*is the torque when the rotor temperature is equal to the value of the_{0}**Measurement temperature**parameter.*EMF*is the EMF when the rotor temperature is equal to the value of the_{0}**Measurement temperature**parameter.

After adjusting the torque based on the temperature, the block
further reduces the torque, *τ*, based on the iron
losses.

**Temperature Dependency for Stator Resistance**

The increase in temperature in the permanent magnet changes the stator
resistance. The **Resistance temperature coefficient**
parameter, *α*, drives this change of the resistance:

$$\begin{array}{l}{R}_{a}={R}_{s}\cdot \left[1+\alpha \left({T}_{A}-{T}_{meas}\right)\right]\\ {R}_{b}={R}_{s}\cdot \left[1+\alpha \left({T}_{B}-{T}_{meas}\right)\right]\\ {R}_{c}={R}_{s}\cdot \left[1+\alpha \left({T}_{C}-{T}_{meas}\right)\right]\end{array}$$

where *R _{a}*,

*R*, and

_{b}*R*are the temperature-adjusted resistances at each phase and

_{c}*T*,

_{A}*T*, and

_{B}*T*are the temperatures at the

_{C}**HA**,

**HB**, and

**HC**ports.

## Examples

## Assumptions and Limitations

This block has the following limitations:

For the 2-D data model, the stator-stator mutual inductance, defined by the

**Stator mutual inductance, Ms**parameter value, is constant during simulation and does not vary with rotor angle. This means that the block is suitable for modeling most PMSM and brushless DC motors, but not switched reluctance motors.The 3-D and 4-D data models assume symmetry, so that the flux linkage dependency on currents and rotor angle for windings B and C can be determined from that for winding A.

For the 4-D data model, consider memory requirements when fixing the independent parameter values (three currents and rotor angles). The linear interpolation option uses less memory, but the smooth interpolation option is more accurate for a given independent parameter spacing.

The iron losses model assumes sinusoidal currents.

## Ports

### Conserving

## Parameters

## References

[1] Mellor, P.H., R. Wrobel, and D. Holliday. “A
computationally efficient iron loss model for brushless AC machines that caters for
rated flux and field weakened operation.” *IEEE Electric Machines and
Drives Conference*. May 2009.

## Extended Capabilities

## Version History

**Introduced in R2019b**