Speed Control#

A speed controller is implemented in the motulator.drive.control.SpeedController class, whose base class is motulator.common.control.PIController. In the following, the tuning of the speed controller is discussed. The presented approach can be extended to many other control tasks as well.

2DOF PI Controller#

Even if controllers operate in the discrete-time domain, they are often designed and analyzed in the continuous-time domain. The state-space form of a simple 2DOF PI speed controller is given by [1]

(1)#\[\begin{split}\frac{\mathrm{d} \tau_\mathrm{i}}{\mathrm{d} t} &= k_\mathrm{i}\left(\omega_\mathrm{M,ref} - \omega_\mathrm{M}\right) \\ \tau_\mathrm{M,ref} &= k_\mathrm{t}\omega_\mathrm{M,ref} - k_\mathrm{p}\omega_\mathrm{M} + \tau_\mathrm{i}\end{split}\]

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].

Closed-Loop System#

For simplicity, let us assume ideal torque control (\(\tau_\mathrm{M} = \tau_\mathrm{M,ref}\)) and a stiff mechanical system

(2)#\[J\frac{\mathrm{d}\omega_\mathrm{M}}{\mathrm{d} t} = \tau_\mathrm{M} - \tau_\mathrm{L}\]

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 closed-loop system resulting from (1) and (2) is given by

\[\omega_\mathrm{M}(s) = \frac{k_\mathrm{t} s + k_\mathrm{i}}{J s^2 + k_\mathrm{p} s + k_\mathrm{i}} \omega_\mathrm{M,ref}(s) - \frac{s}{J s^2 + k_\mathrm{p} s + k_\mathrm{i}} \tau_\mathrm{L}(s)\]

where it can be seen that the gain \(k_\mathrm{t}\) allows to place the reference-tracking zero.

Gain Selection#

The gain selection [3]

\[k_\mathrm{t} = \alpha_\mathrm{s} \hat{J} \qquad k_\mathrm{p} = 2\alpha_\mathrm{s} \hat{J} \qquad k_\mathrm{i} = \alpha_\mathrm{s}^2 \hat{J}\]

results in

\[\omega_\mathrm{M}(s) = \frac{\alpha_\mathrm{s}}{s + \alpha_\mathrm{s}} \omega_\mathrm{M,ref}(s) - \frac{s}{J (s + \alpha_\mathrm{s})^2} \tau_\mathrm{L}(s)\]

where \(\alpha_\mathrm{s}\) is the closed-loop bandwidth of reference tracking and \(\hat{J} = J\) is assumed.

References