Controllers#

2DOF PI Controller#

Proportional-integral (PI) control is widely used in various applications. A standard one-degree-of-freedom (1DOF) PI controller manipulates only the control error, i.e., it has single input and single output. Its two-degrees-of-freedom (2DOF) variants have two inputs (reference signal and feedback signal), which allows to design disturbance rejection and reference tracking separately [Skogestad and Postlethwaite, 1996]. The 2DOF PI controller is available in the motulator.common.control.PIController class, which is the base class for the motulator.drive.control.im.SpeedController and motulator.grid.control.DCBusVoltageController classes.

Typical Structure#

Figure 1 shows a 2DOF PI controller with an optional feedforward term. Its equivalent state-space form is given by

(1)#\[\begin{split} \frac{\D \ui}{\D t} &= \ki\left(r - y\right) \\ u &= \kt r - \kp y + \ui + \uff\end{split}\]

where \(r\) is the reference signal, \(y\) is the measured (or estimated) feedback signal, \(\ui\) is the the integral state, and \(\uff\) is the optional feedforward signal. Furthermore, \(\kt\) is the reference-feedforward gain, \(\kp\) is the proportional gain, and \(\ki\) is the integral gain. Setting \(\kt = \kp\) and \(\uff = 0\) results in the standard PI controller. This 2DOF PI controller can also be understood as a state-feedback controller with integral action and reference feedforward [Franklin et al., 1997].

2DOF PI controller

Figure 1: 2DOF PI controller with an optional feedforward term. The operator \(1/s\) refers to integration. A discrete-time variant of this controller with the integrator anti-windup is implemented in the motulator.common.control.PIController class.#

2DOF PI controller

Figure 1: 2DOF PI controller with an optional feedforward term. The operator \(1/s\) refers to integration. A discrete-time variant of this controller with the integrator anti-windup is implemented in the motulator.common.control.PIController class.#

Disturbance-Observer Structure#

The controller (1) can be equally represented using the disturbance-observer structure as

(2)#\[\begin{split} \frac{\D \ui}{\D t} &= \alphai\left(u - \hat v\right) \\ \hat v &= \ui - (\kp - \kt)y + \uff \\ u &= \kt\left(r - y\right) + \hat v\end{split}\]

where \(\alphai = \ki/\kt\) is the redefined integral gain and \(\hat v\) is the input-equivalent disturbance estimate. This structure is convenient to prevent the integral windup that originates from the actuator saturation [Franklin et al., 1997]. The actuator output is limited in practice due to physical constraints. Consequently, the realized actuator output is

\[ \bar{u} = \mathrm{sat}(u)\]

where \(\mathrm{sat}(\cdot)\) is the saturation function. If this saturation function is known, the anti-windup of the integrator can be implemented simply as

(3)#\[ \frac{\D \ui}{\D t} = \alphai\left(\bar{u} - \hat v \right)\]

The other parts of the above controller are not affected by the saturation.

Discrete-Time Algorithm#

The discrete-time variant of the controller (2) with the anti-windup in (3) is given by

(4)#\[\begin{split} \ui(k+1) &= \ui(k) + \Ts \alphai \left[\bar{u}(k) - \hat v(k) \right] \\ \hat v(k) &= \ui(k) - (\kp - \kt)y(k) + \uff(k) \\ u(k) &= \kt\left[r(k) - y(k)\right] + \hat v(k) \\ \bar{u}(k) &= \mathrm{sat}[u(k)]\end{split}\]

where \(\Ts\) is the sampling period and \(k\) is the discrete-time index. This algorithm corresponds to the actual implementation in the motulator.common.control.PIController class.

Complex-Vector 2DOF PI Controller#

As shown in Figure 2, the 2DOF PI controller presented above can be extended for the control of complex-valued space vectors in a coordinate system rotating at \(\omegac\) [del Blanco et al., 1999]. Depending on the control task, the controlled quantity is typically either a current vector or a flux linkage vector. In the continuous-time domain, the controller in the state-space form is given by

(5)#\[\begin{split} \frac{\D \uI}{\D t} &= (\kI + \jj\omegac \kT)\left(\mathbf{r} - \mathbf{y}\right) \\ \mathbf{u} &= \kT\mathbf{r} - \kP\mathbf{y} + \uI + \uFF\end{split}\]

where \(\mathbf{u}\) is the output of the controller, \(\mathbf{r}\) is the reference signal, \(\uI\) is the the integral state, and \(\uFF\) is the optional feedforward signal. Furthermore, \(\kT\) is the reference-feedforward gain, \(\kP\) is the proportional gain, and \(\kI\) is the integral gain.

2DOF complex-vector PI controller with feedforward

Figure 2: 2DOF complex-vector PI controller with an optional feedforward term.#

2DOF complex-vector PI controller with feedforward

Figure 2: 2DOF complex-vector PI controller with an optional feedforward term.#

The discrete-time implementation of (5) with the anti-windup is given in the motulator.common.control.ComplexPIController class, which is the base class for motulator.drive.control.sm.CurrentController, motulator.drive.control.im.CurrentController, and motulator.grid.control.CurrentController classes. The algorithm is similar to the real-valued case given in (4).

The converter output voltage is limited due to the limited DC-bus voltage. The realized switching-cycle averaged voltage is obtained from the pulse-width modulation (PWM) algorithm. The motulator.common.control.PWM class implements the space-vector modulation [Hava et al., 1999] with different overmodulation strategies (minimum phase error, minimum amplitude error, six-step [Bolognani and Zigliotto, 1997]). In the computation of the realized voltage, the effect of the computational and PWM delays on the realized voltage angle are also compensated for [Bae and Sul, 2003].