Current Control#

Synchronous-frame two-degrees-of-freedom (2DOF) proportional-integral (PI) current control is commonly used in three-phase AC machine drives [1], [2], [3], [4]. This control structure allows to compensate for the cross-coupling originating from rotating coordinates as well as to improve disturbance rejection.

A 2DOF PI current controller for induction machines is available in the motulator.drive.control.im.CurrentController class and for synchronous machines in the motulator.drive.control.sm.CurrentController class, both of which inherit from the motulator.common.control.ComplexPIController class. In the following, current control of induction machines is first considered in detail. Then, the same principles are applied to synchronous machines. Complex space vectors are used to represent three-phase quantities.

Induction Machines#

System Model#

The inverse-Γ model of an induction machine is considered (see Electric Machines). Using the stator current \(\boldsymbol{i}_\mathrm{s}\) and the rotor flux linkage \(\boldsymbol{\psi}_\mathrm{R}\) as state variables, the model in synchronous coordinates rotating at \(\omega_\mathrm{s}\) can be written as

\[\begin{split}L_\sigma \frac{\mathrm{d} \boldsymbol{i}_\mathrm{s}}{\mathrm{d} t} &= \boldsymbol{u}_\mathrm{s} - (R_\sigma + \mathrm{j} \omega_\mathrm{s}L_\sigma)\boldsymbol{i}_\mathrm{s} - \underbrace{\left(\mathrm{j}\omega_\mathrm{m} - \frac{R_\mathrm{R}}{L_\mathrm{M}}\right)\boldsymbol{\psi}_\mathrm{R}}_{\text{back-emf } \boldsymbol{e}_\mathrm{s}} \\ \frac{\mathrm{d} \boldsymbol{\psi}_\mathrm{R}}{\mathrm{d} t} &= R_\mathrm{R}\boldsymbol{i}_\mathrm{s} - \left(\frac{R_\mathrm{R}}{L_\mathrm{M}} + \mathrm{j}\omega_\mathrm{r} \right)\boldsymbol{\psi}_\mathrm{R}\end{split}\]

where \(R_\sigma = R_\mathrm{s} + R_\mathrm{R}\) is the total resistance and \(\omega_\mathrm{r} = \omega_\mathrm{s} - \omega_\mathrm{m}\) is the slip angular frequency. The rotor flux linkage \(\boldsymbol{\psi}_\mathrm{R}\) and the rotor speed \(\omega_\mathrm{m}\) change slowly as compared to the stator current. Consequently, the back-emf \(\boldsymbol{e}_\mathrm{s}\) can be considered as a quasi-constant input (load) disturbance for the current controller, and it suffices to consider the stator current dynamics

(1)#\[L_\sigma \frac{\mathrm{d} \boldsymbol{i}_\mathrm{s}}{\mathrm{d} t} = \boldsymbol{u}_\mathrm{s} - (R_\sigma + \mathrm{j} \omega_\mathrm{s}L_\sigma)\boldsymbol{i}_\mathrm{s} - \boldsymbol{e}_\mathrm{s}\]

2DOF PI Controller#

The design of synchronous-frame 2DOF PI current control is considered in the continuous-time domain, even though the actual implementation is discrete. Two typical gain selections for this control type are known as the internal-model-control (IMC) design [1] and the complex-vector design [2]. Here, only the complex-vector design is considered, see Complex-Vector 2DOF PI Controller, which is compatible with the motulator.common.control.ComplexPIController base class. The controller can be expressed in a state-space form as

(2)#\[\begin{split}\frac{\mathrm{d} \boldsymbol{u}_\mathrm{i}}{\mathrm{d} t} &= (\boldsymbol{k}_\mathrm{i} + \mathrm{j}\omega_\mathrm{s}\boldsymbol{k}_\mathrm{t} )\left(\boldsymbol{i}_\mathrm{s,ref} - \boldsymbol{i}_\mathrm{s}\right) \\ \boldsymbol{u}_\mathrm{s,ref} &= \boldsymbol{k}_\mathrm{t}\boldsymbol{i}_\mathrm{s,ref} - \boldsymbol{k}_\mathrm{p}\boldsymbol{i}_\mathrm{s} + \boldsymbol{u}_\mathrm{i}\end{split}\]

where \(\boldsymbol{u}_\mathrm{s,ref}\) is the output of the controller, i.e., the stator voltage reference, \(\boldsymbol{i}_\mathrm{s,ref}\) is the stator current reference, \(\boldsymbol{u}_\mathrm{i}\) is the the integral state, and \(\omega_\mathrm{s}\) is the angular speed of the coordinate system. Furthermore, \(\boldsymbol{k}_\mathrm{t}\) is the reference-feedforward gain, \(\boldsymbol{k}_\mathrm{p}\) is the proportional gain, and \(\boldsymbol{k}_\mathrm{i}\) is the integral gain.

Note

The gain definitions used in (2) differ from [4], where a more general controller structure is considered.

Closed-Loop System#

Here, ideal voltage production is assumed, \(\boldsymbol{u}_\mathrm{s} = \boldsymbol{u}_\mathrm{s,ref}\). Using (1) and (2), the closed-loop system in the Laplace domain becomes

\[\boldsymbol{i}_\mathrm{s} = \boldsymbol{G}_\mathrm{c}(s)\boldsymbol{i}_\mathrm{s,ref} - \boldsymbol{Y}_\mathrm{c}(s)\boldsymbol{e}_\mathrm{s}\]

The disturbance rejection depends on the closed-loop admittance

(3)#\[\boldsymbol{Y}_\mathrm{c}(s) = \frac{s}{L_\sigma s^2 + (R_\sigma + \mathrm{j}\omega_\mathrm{s} L_\sigma + \boldsymbol{k}_\mathrm{p}) s + \boldsymbol{k}_\mathrm{i} + \mathrm{j}\omega_\mathrm{s} \boldsymbol{k}_\mathrm{t}}\]

The closed-loop poles can be arbitrarily placed by means of the gains. The reference-tracking transfer function is

(4)#\[\boldsymbol{G}_\mathrm{c}(s) = \frac{(s + \mathrm{j}\omega_\mathrm{s}) \boldsymbol{k}_\mathrm{t} + \boldsymbol{k}_\mathrm{i} }{L_\sigma s^2 + (R_\sigma + \mathrm{j}\omega_\mathrm{s} L_\sigma + \boldsymbol{k}_\mathrm{p}) s + \boldsymbol{k}_\mathrm{i} + \mathrm{j}\omega_\mathrm{s} \boldsymbol{k}_\mathrm{t}}\]

whose zero can be placed by means of the reference-feedforward gain \(\boldsymbol{k}_\mathrm{t}\).

Gain Selection#

Consider the gains

(5)#\[\boldsymbol{k}_\mathrm{p} = 2\alpha_\mathrm{c} \hat L_\sigma - \hat R_\sigma \qquad\qquad \boldsymbol{k}_\mathrm{i} = \alpha_\mathrm{c}^2\hat L_\sigma \qquad \qquad \boldsymbol{k}_\mathrm{t} = \alpha_\mathrm{c} \hat L_\sigma\]

where \(\hat R_\sigma = 0\) can be used in practice due to its minor effect and integral action. Assuming accurate parameter estimates, the closed-loop transfer functions (3) and (4) reduce to

\[\boldsymbol{Y}_\mathrm{c}(s) = \frac{s}{L_\sigma (s + \alpha_\mathrm{c})(s + \alpha_\mathrm{c} + \mathrm{j}\omega_\mathrm{s})} \qquad\qquad \boldsymbol{G}_\mathrm{c}(s) = \frac{\alpha_\mathrm{c}}{s + \alpha_\mathrm{c}}\]

It can be seen that this design results in the first-order reference-tracking dynamics. Furthermore, one pole is placed at the real axis at \(s=-\alpha_\mathrm{c}\), while another pole moves with the angular frequency of the coordinate system, \(s= -\alpha_\mathrm{c} - \mathrm{j}\omega_\mathrm{s}\). The complex-vector design tends to be slightly more robust to parameter errors than the IMC design since the other closed-loop pole approximately corresponds to the open-loop pole.

This gain selection is used in the motulator.drive.control.im.CurrentController class. The stator voltage is limited in practice due to the limited DC-bus voltage of the converter. Consequently, the realized (limited) voltage reference is

\[\bar{\boldsymbol{u}}_\mathrm{s,ref} = \mathrm{sat}(\boldsymbol{u}_\mathrm{s,ref})\]

where \(\mathrm{sat}(\cdot)\) is the saturation function. The limited voltage can be obtained from a pulse-width modulation (PWM) algorithm (see the motulator.common.control.PWM class). The anti-windup of the integrator is included in the implementation of the motulator.common.control.ComplexPIController base class.

Synchronous Machines#

System Model#

Consider the synchronous machine model in rotor coordinates, rotating at \(\omega_\mathrm{m}\) and aligned along the d-axis of the rotor,

(6)#\[\begin{split}\frac{\mathrm{d}\boldsymbol{\psi}_\mathrm{s}}{\mathrm{d} t} &= \boldsymbol{u}_\mathrm{s} - R_\mathrm{s}\boldsymbol{i}_\mathrm{s} - \mathrm{j}\omega_\mathrm{m}\boldsymbol{\psi}_\mathrm{s} \\ \boldsymbol{\psi}_\mathrm{s} &= L_\mathrm{d}\mathrm{Re}\{\boldsymbol{i}_\mathrm{s}\} + \mathrm{j}L_\mathrm{q}\mathrm{Im}\{\boldsymbol{i}_\mathrm{s}\} + \psi_\mathrm{f}\end{split}\]

where linear magnetics are assumed for simplicity. For further details, see Electric Machines.

2DOF PI Controller#

An internal change of the state variable from the stator current to the stator flux linkage simplifies the control design for synchronous machines, allowing the same algorithm to be used for both non-salient and salient synchronous machines [3]. Both the reference current and the actual current are scaled by the inductance estimates,

(7)#\[\begin{split}\boldsymbol{\psi}_\mathrm{s,ref} &= \hat{L}_\mathrm{d}\mathrm{Re}\{\boldsymbol{i}_\mathrm{s,ref}\} + \mathrm{j} \hat{L}_\mathrm{q}\mathrm{Im}\{\boldsymbol{i}_\mathrm{s,ref}\} \\ \hat{\boldsymbol{\psi}_\mathrm{s}} &= \hat{L}_\mathrm{d}\mathrm{Re}\{\boldsymbol{i}_\mathrm{s}\} + \mathrm{j} \hat{L}_\mathrm{q}\mathrm{Im}\{\boldsymbol{i}_\mathrm{s}\}\end{split}\]

This choice of using the flux linkage as the internal state has some advantages: the gain expressions become simpler; the magnetic saturation would be more convenient to take into account; and the same control structure can be used for salient and nonsalient machines.

Here, the complex vector design is considered. Hence, the controller (2) can be rewritten as

(8)#\[\begin{split}\frac{\mathrm{d} \boldsymbol{u}_\mathrm{i}}{\mathrm{d} t} &= (\boldsymbol{k}_\mathrm{i} + \mathrm{j}\omega_\mathrm{s}\boldsymbol{k}_\mathrm{t} )\left(\boldsymbol{\psi}_\mathrm{s,ref} - \hat{\boldsymbol{\psi}}_\mathrm{s}\right) \\ \boldsymbol{u}_\mathrm{s,ref} &= \boldsymbol{k}_\mathrm{t}\boldsymbol{\psi}_\mathrm{s,ref} - \boldsymbol{k}_\mathrm{p}\hat{\boldsymbol{\psi}}_\mathrm{s} + \boldsymbol{u}_\mathrm{i}\end{split}\]

where the angular speed of the coordinate system equals typically the measured rotor speed, \(\omega_\mathrm{s} = \omega_\mathrm{m}\), or the estimated rotor speed \(\omega_\mathrm{s} = \hat{\omega}_\mathrm{m}\). If the magnetic saturation is not considered, this flux-linkage-based current controller is equivalent to a regular 2DOF PI current controller (even if inductance estimates are inaccurate). Notice that \(\boldsymbol{i}_\mathrm{s,ref} = \boldsymbol{i}_\mathrm{s}\) holds in the steady state even with inductance estimate inaccuracies, since the same inductances are used to map both the reference current and the actual current to the corresponding flux linkages.

Note

The control law (8) omits the effect of the stator resistance for simplicity, i.e., \(\hat R_\mathrm{s} = 0\) is assumed. This is a common and practical assumption. However, if needed, the resistive voltage drop term \(\hat R_\mathrm{s}\boldsymbol{i}_\mathrm{s}\) could be simply added to \(\boldsymbol{u}_\mathrm{s,ref}\) in (8).

The gain selection analogous to (5) becomes

\[\boldsymbol{k}_\mathrm{p} = 2\alpha_\mathrm{c} \qquad\qquad \boldsymbol{k}_\mathrm{i} = \alpha_\mathrm{c}^2 \qquad \qquad \boldsymbol{k}_\mathrm{t} = \alpha_\mathrm{c}\]

Assume accurate parameter estimates and perfect alignment of the controller coordinate system with the rotor coordinate system. Then, using (6), (7), and (8), the closed-loop system can be shown to be analogous to the induction machine case. This control design corresponds to the implementation in the motulator.drive.control.sm.CurrentController class.

References