# PMSM Current Controller with Pre-Control

Discrete-time permanent magnet synchronous machine current controller with pre-control

**Library:**Simscape / Electrical / Control / PMSM Control

## Description

The PMSM Current Controller with Pre-Control block implements a
discrete-time PI-based permanent magnet synchronous machine (PMSM) current controller in
the rotor *d*-*q* reference frame with internal
feedforward pre-control.

You typically use this block in a series of blocks making up a control structure.

You can generate a current reference in the d-q frame to be used as an input to this block with a PMSM Current Reference Generator.

You can obtain a voltage reference in the abc domain by converting the output of this block using an Inverse Park Transform block.

You can see an example of a full control structure, from machine measurements to machine inputs, in the PMSM Field-Oriented Control block.

### Equations

The block is discretized using the backward Euler method due to its first-order simplicity and its stability.

Two PI current controllers implemented in the rotor reference frame produce the reference voltage vector:

${v}_{d}^{ref}=\left({K}_{p\_id}+{K}_{i\_id}\frac{{T}_{s}z}{z-1}\right)\left({i}_{d}^{ref}-{i}_{d}\right)+{v}_{d\_FF},$

and

${v}_{q}^{ref}=\left({K}_{p\_iq}+{K}_{i\_iq}\frac{{T}_{s}z}{z-1}\right)\left({i}_{q}^{ref}-{i}_{q}\right)+{v}_{q\_FF},$

where:

$${v}_{d}^{ref}$$ and $${v}_{q}^{ref}$$ are the

*d*-axis and*q*-axis reference voltages, respectively.$${i}_{d}^{ref}$$ and $${i}_{q}^{ref}$$ are the

*d*-axis and*q*-axis reference currents, respectively.$${i}_{d}$$ and $${i}_{q}$$ are the

*d*-axis and*q*-axis currents, respectively.*K*and_{p_id}*K*are the proportional gains for the_{p_iq}*d*-axis and*q*-axis controllers, respectively.*K*and_{i_id}*K*are the integral gains for the_{i_iq}*d*-axis and*q*-axis controllers, respectively.*T*is the sample time of the discrete controller._{s}*v*and_{d_FF}*v*are the feedforward voltages for the_{q_FF}*d*-axis and*q*-axis, respectively.

The feedforward voltages are obtained from the machine mathematical equations:

$${v}_{d\_FF}=-{\omega}_{e}{L}_{q}{i}_{q}^{ref},$$

and

${v}_{q\_FF}={\omega}_{e}\left({L}_{d}{i}_{d}^{ref}+{\psi}_{m}\right),$

where:

*ω*is the rotor electrical velocity._{e}*L*and_{d}*L*are the_{q}*d*-axis and*q*-axis inductances, respectively.*ψ*is the permanent magnet flux linkage._{m}

### Zero Cancellation

Using PI control results in a zero in the closed-loop transfer function, which can result in undesired overshoot in the closed-loop response. This zero can be canceled by introducing a zero-cancelation block in the feedforward path. The zero cancellation transfer functions in discrete time are:

${G}_{ZC\_id}\left(z\right)=\frac{\frac{{T}_{s}{K}_{i\_id}}{{K}_{p\_id}}}{z+\left(\frac{{T}_{s}-\frac{{K}_{p\_id}}{{K}_{i\_id}}}{\frac{{K}_{p\_id}}{{K}_{i\_id}}}\right)},$

and

${G}_{ZC\_iq}\left(z\right)=\frac{\frac{{T}_{s}{K}_{i\_iq}}{{K}_{p\_iq}}}{z+\left(\frac{{T}_{s}-\frac{{K}_{p\_iq}}{{K}_{i\_iq}}}{\frac{{K}_{p\_iq}}{{K}_{i\_iq}}}\right)}.$

### Voltage Saturation

Saturation must be imposed when the stator voltage vector exceeds the voltage
phase limit *V _{ph_max}*:

$\sqrt{{v}_{d}^{2}+{v}_{q}^{2}}\le {V}_{ph\_max},$

where *v _{d}* and

*v*are the

_{q}*d*-axis and

*q*-axis voltages, respectively.

In the case of axis prioritization, the voltages
*v _{1}* and

*v*are introduced, where:

_{2}*v*and_{1}= v_{d}*v*for_{2}= v_{q}*d*-axis prioritization.*v*and_{1}= v_{q}*v*for_{2}= v_{d}*q*-axis prioritization.

The constrained (saturated) voltages $${v}_{1}^{sat}$$ and $${v}_{2}^{sat}$$ are obtained as follows:

${v}_{1}^{sat}=\text{min}\left(\mathrm{max}\left({v}_{1}^{unsat},-{V}_{ph\_max}\right),{V}_{ph\_max}\right)$

and

${v}_{2}^{sat}=\text{min}\left(\mathrm{max}\left({v}_{2}^{unsat},-{V}_{2\_max}\right),{V}_{2\_max}\right),$

where:

$${v}_{1}^{unsat}$$ and $${v}_{2}^{unsat}$$ are the unconstrained (unsaturated) voltages.

*v*is the maximum value of_{2_max}*v*that does not exceed the voltage phase limit, given by ${v}_{2\_max}=\sqrt{{\left({V}_{ph\_max}\right)}^{2}-{\left({v}_{1}^{sat}\right)}^{2}}.$_{2}

In the case that the direct and quadrature axes have the same priority (d-q equivalence), the constrained voltages are obtained as follows:

${v}_{d}^{sat}=\text{min}\left(\mathrm{max}\left({v}_{d}^{unsat},-{V}_{d\_max}\right),{V}_{d\_max}\right)$

and

${v}_{q}^{sat}=\text{min}\left(\mathrm{max}\left({v}_{q}^{unsat},-{V}_{q\_max}\right),{V}_{q\_max}\right),$

where:

${V}_{d\_max}=\frac{{V}_{ph\_max}\left|{v}_{d}^{unsat}\right|}{\sqrt{{({v}_{d}^{unsat})}^{2}+{({v}_{q}^{unsat})}^{2}}}$

and

${V}_{q\_max}=\frac{{V}_{ph\_max}\left|{v}_{q}^{unsat}\right|}{\sqrt{{({v}_{d}^{unsat})}^{2}+{({v}_{q}^{unsat})}^{2}}}.$

### Integral Anti-Windup

An anti-windup mechanism is employed to avoid saturation of integrator output. In such a situation, the integrator gains become:

${K}_{i\_id}+{K}_{aw\_id}\left({v}_{d}^{sat}-{v}_{d}^{unsat}\right)$

and

${K}_{i\_iq}+{K}_{aw\_iq}\left({v}_{q}^{sat}-{v}_{q}^{unsat}\right),$

where *K _{aw_id}*,

*K*, and

_{aw_iq}*K*are the anti-windup gains for the

_{aw_if}*d*-axis,

*q*-axis, and field controllers, respectively.

### Assumptions

The plant model for direct and quadrature axis can be approximated with a first-order system.

This control solution is used only for permanent magnet synchronous motors with sinusoidal flux distribution and field windings.

## Ports

### Input

### Output

## Parameters

## Model Examples

## References

[1] Bernardes, T., V. F. Montagner, H. A. Gründling, and H. Pinheiro.
"Discrete-time sliding mode observer for sensorless vector control of permanent magnet
synchronous machine." *IEEE Transactions on Industrial
Electronics.* Vol. 61, Number 4, 2014, pp. 1679–1691.

[2] Carpiuc, S., and C. Lazar. "Fast real-time constrained predictive current
control in permanent magnet synchronous machine-based automotive traction drives."
*IEEE Transactions on Transportation Electrification.* Vol.1,
Number 4, 2015, pp. 326–335.

## Extended Capabilities

## Version History

**Introduced in R2017b**