Speed Control#
Proportional-integral (PI) control is widely used in machine drives. 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 [1]. In the following, we will use a speed controller as an example, cf. the motulator.drive.control.SpeedController
class. The presented control design can be extended to many other control tasks as well.
Continuous-Time Design#
Even if controllers operate in the discrete-time domain, they are often designed and analyzed in the continuous-time domain.
Typical Structure#
The state-space form of a simple 2DOF PI speed controller is given by
where \(\omega_\mathrm{M}\) is the measured (or estimated) mechanical angular speed of the rotor, \(\omega_\mathrm{M,ref}\) is the reference angular speed, and \(\tau_\mathrm{i}\) is the the integral state. Furthermore, \(k_\mathrm{t}\) is the reference feedforward gain, \(k_\mathrm{p}\) is the proportional gain, and \(k_\mathrm{i}\) is the integral gain. Setting \(k_\mathrm{t} = k_\mathrm{p}\) 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 [2].
Disturbance-Observer Structure#
The above 2DOF PI controller can be equally represented using the disturbance-observer structure,
where \(\alpha_\mathrm{i} = k_\mathrm{i}/k_\mathrm{t}\) is the redefined integral gain and \(\hat \tau_\mathrm{L}\) is the input-equivalent disturbance estimate (i.e., the load torque estimate). This structure is convenient to prevent the integral windup that originates from the actuator saturation [2]. The electromagnetic torque is limited in practice due to the maximum current of the inverter (and possibly due to other constraints as well). Consequently, the realized (limited) torque reference is
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
The other parts of the above controller are not affected by the saturation. The implementation in the motulator.drive.control.SpeedController
class is based on this disturbance-observer form.
Gain Selection Example#
For simplicity, let us assume ideal torque control (\(\tau_\mathrm{M} = \tau_\mathrm{M,ref}\)) and a stiff mechanical system [3]
where \(\tau_\mathrm{M}\) is the electromagnetic torque, \(\tau_\mathrm{L}\) is the load torque, and \(J\) is the total moment of inertia. In the Laplace domain, the resulting closed-loop system is given by
where it can be seen that the gain \(k_\mathrm{t}\) allows to place the reference-tracking zero.
The gain selection
results in
where \(\alpha_\mathrm{s}\) is the closed-loop bandwidth of reference tracking and \(\hat{J} = J\) is assumed.
Discrete-Time Algorithm#
The discrete-time variant of the controller is given by
where \(T_\mathrm{s}\) is the sampling period and \(k\) is the discrete-time index. This corresponds to the implementation in the motulator.drive.control.SpeedController
class.
References