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]. This control structure allows to compensate for the cross-coupling originating from rotating coordinates as well as to improve disturbance rejection. The structure and design principles are essentially the same as those of 2DOF PI speed control (see Speed Control).
In the following, current control of an induction machine is first considered in detail. Then, the same control structure is applied to synchronous machines. Finally, the discrete-time implementation is described. 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
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
Equivalently, the stator current dynamics in (1) can be expressed as
where \(\boldsymbol{\psi}_\sigma = L_\sigma \boldsymbol{i}_\mathrm{s}\) is the leakage flux linkage and \(\boldsymbol{v} = \boldsymbol{e}_\mathrm{s} + R_\sigma \boldsymbol{i}_\mathrm{s}\) is the input disturbance.
2DOF PI Control Structure#
First, synchronous-frame 2DOF PI current control is designed and analyzed in the continuous-time domain. The controller can be expressed in a state-space form as [3]
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, and \(\boldsymbol{u}_\mathrm{i}\) is the the integral state. 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. Setting \(\boldsymbol{k}'_\mathrm{t} = \boldsymbol{k}'_\mathrm{p}\) results in the standard PI controller.
Closed-Loop System#
Here, ideal voltage production is assumed, \(\boldsymbol{u}_\mathrm{s} = \boldsymbol{u}_\mathrm{s,ref}\). Using (1) and (3), the closed-loop system in the Laplace domain becomes
The disturbance rejection depends on the closed-loop admittance
The closed-loop poles can be arbitrarily placed by means of \(\boldsymbol{k}'_\mathrm{p}\) and \(\boldsymbol{k}'_\mathrm{i}\). The reference-tracking transfer function is
whose zero can be placed by means of the reference-feedforward gain \(\boldsymbol{k}'_\mathrm{t}\).
Gain Selection#
Two typical gain selections, known as the internal-model-control (IMC) design [1] and the complex-vector design [2], are described in the following.
IMC Design#
Consider the gains
where the hat indicates the parameter estimates. Assuming accurate parameter estimates, the closed-loop transfer functions (4) and (5) reduce to
where \(\alpha_\mathrm{c}\) is the closed-loop bandwidth for reference tracking. The effect of the resistance is negligible, i.e., \(\hat R_\sigma = 0\) can be chosen.
Complex-Vector Design#
Consider the gains
Assuming accurate parameter estimates, the closed-loop transfer functions (4) and (5) reduce to
It can be seen that both gain designs result in the first-order reference-tracking dynamics. 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.
Flux Linkage as an Internal State#
Based on (2), both the reference current and the measured current can be scaled by the leakage inductance estimate,
where the notation of the leakage flux has been simplified by dropping the subscript \(\sigma\) (in order to be able to reuse some of the following equations for synchronous machines). Now the 2DOF PI controller (3) can be rewritten as
It can be easily seen that the controllers (3) and (7) are equivalent if \(\boldsymbol{k}_\mathrm{p} = \boldsymbol{k}'_\mathrm{p}/\hat L_\sigma\), \(\boldsymbol{k}_\mathrm{i} = \boldsymbol{k}'_\mathrm{i}/\hat L_\sigma\), and \(\boldsymbol{k}_\mathrm{t} = \boldsymbol{k}'_\mathrm{t}/\hat L_\sigma\). As an example, gains for the complex-vector design reduce to
where \(\hat R_\sigma = 0\) is assumed. This choice of using the leakage 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 extended to synchronous machines [3].
Disturbance-Observer Structure#
The controller (7) can be equally represented using the disturbance-observer structure,
where \(\boldsymbol{\alpha}_\mathrm{i} = \boldsymbol{k}_\mathrm{i}/\boldsymbol{k}_\mathrm{t}\) is the redefined integral gain and \(\hat{\boldsymbol{v}}_\mathrm{s}\) is the estimated input disturbance. This structure is convenient to prevent the integral windup that originates from the actuator saturation [4]. The stator voltage is limited in practice due to the limited DC-bus voltage of the converter. Consequently, the realized (limited) voltage reference is
where \(\mathrm{sat}(\cdot)\) is the saturation function. The limited voltage can be obtained from a pulse-width modulation (PWM) algorithm. The anti-windup of the integrator can be implemented simply as
The other parts of the above controller are not affected by the saturation. The implementation in the motulator.common.control.ComplexPIController
class is based on this disturbance-observer form.
Synchronous Machines#
The flux-based control algorithms (7) and (9) can be directly used for both non-salient and salient synchronous machines by mapping the stator current to the flux linkage, [3]
It is important to 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.
Discrete-Time Algorithm#
The discrete-time variant of the disturbance-observer form (9) is given by
where \(T_\mathrm{s}\) is the sampling period and \(k\) is the discrete-time index. Depending on the machine type, either (6) or (10) is used to map the stator current to the flux linkage. This discrete-time algorithm corresponds to the implementation in the motulator.drive.control.sm.CurrentController
class. The default gain selection corresponds to the complex-vector gains in (8).
References