# The target controller design

In this section, we will design a PI controller for the target electromechanical system. The T1 target system has a current amplifier, so the analysis of subsection 7.5.2 holds. We will use the parameters of the T1a specific target system for concreteness, but the design process is similar for any T1 system (see appendix A).

The controller design requirements for the closed-loop system are:

- A settling time \(T_S\) of around \(0.2\) s
- Zero steady-state error for a step command
- The control effort required to step from \(0\) to \(500\) revolutions per minute (RPM) is within the capabilities of the current amplifier

A PI controller is a good candidate for these requirements because a proportional controller can be used to design for the transient response requirement, and an integral compensator can be used to design for the steady-state error.

## Setting the design point

The settling time requirement is associated with the second-order approximation \[ T_S = \frac{4}{\zeta \omega_n}. \] According to , the denominator \(\zeta \omega_n\) is the negative of the real part of the design point \(\psi\), that is, \[ \Re(\psi) = -\zeta \omega_n. \] So we would like to have a dominant closed-loop pole at \(\psi\) such that \[ \Re(\psi) = -\frac{4}{T_S} = -20\text{ rad/s}. \]

In MATLAB,

```
Ts = 0.2; % s ... design settling time
psi_r = -4 / Ts; % real part of design point psi
```

The imaginary part of the design point is not determined by the requirements.

## Defining the continuous system model

From eq. **¿eq:motor-tf-is?**, the electromechanical
system transfer function \(G_P(s) =
\Omega_J(s)/U_a(s)\), including the amplifier gain \(K_a\) (A/V), is \[
G_P(s) = K_a K_M \frac{1}{J s + B}\ ,
\] where \(K_M\) is the motor
constant (N\(\cdot\)m/A), \(B\) is the damping coefficient (N\(\cdot\)m\(\cdot\)s/rad), and \(J\) is the moment of inertia (N\(\cdot\)m\(\cdot\)s\(^2\)/rad).

### Getting the T1a Parameters

The T1a specific target system parameters are available in a `.mat`

file at the Uniform Resource Locator
(URL) https://github.com/rtc-book/source/blob/085ae7ff3676306939b105a3ca169985b25395c6/matlab/elmech_params/elmech_params_T1a.mat
Load the file `filename`

with

`load(filename);`

Variable `p`

, a `struct`

ure, will
be loaded into the current workspace. The parameters can be accessed
with, for instance, `p.R`

for the motor winding resistance. See the variable `p_doc`

for
documentation of the parameters.

For other target system parameters, see the following repository: https://github.com/rtc-book/source/tree/main/matlab/elmech_params

With the parameters loaded into the `struct`

`p`

, the transfer
function can be defined as

`GP = tf([p.Ka * p.Km], [p.J, p.B]); % electromech. system TF`

The unity feedback transfer function \(H\) can be defined as

`H = tf([1], [1]); % feedback transfer function`

## Proportional controller design

The open-loop transfer function is \(G_P H\), so the root locus can be generated with

```
figure;
rlocus(GP * H); % root locus
xlim([-40, 0]);
```

The root locus is shown in . Choosing the point at \(\Re(s) = -20\),

`K1 = 0.062; % from root locus`

## Integral compensation

Eq. **¿eq:motor-tf4?** shows that the electromechanical
system has no integrators and no differentiators, so an integral
compensator should make the steady-state error zero. Considering
figure 7.20, we observe that, if the PI compensator zero
\(Z_I\) is between the plant pole and
the origin, the root locus is significantly different than if the zero
is left of the plant pole. The plant pole, which is at \(-B/J\), depends on the damping \(B\), which is not a well-known parameter
(and can vary with temperature). This means that designs for which the
compensator zero and the plant pole are in close proximity are not very
robust. However, if we place the compensator zero sufficiently far left
of the plant pole, uncertainties and variations in \(B\) will have little effect on the control
system. Therefore, we place \(Z_I\) at
\(-20\) and construct the compensator
transfer function without the gain:

```
ZI = -20; % compensator zero
s = tf([1, 0], [1]); % s as tf object
CI_sans = (s - ZI) / s; % compensator sans gain
```

The compensated root locus, shown in , is given by

```
figure;
rlocus(CI_sans * K1 * GP * H);
xlim([-40, 0]);
```

The root locus has been significantly affected by the compensator. However, the desired \(\Re(s) = -20\) can still be achieved with another gain \(K_2\):

`K2 = 1.67; % from root locus`

The continuous PI controller \(G_C\), then, is given by

`GC = K1 * K2 * CI_sans;`

## Closing the loop and discretization

The closed-loop transfer function (eq. **¿eq:gcl?**)
can be defined with

`GCL = GC * GP / (1 + GC * GP * H); % closed-loop tf`

A discrete model can be developed by discretizing each of the loop transfer functions. With a sample rate of \(T = 5\) ms and Tustin’s method, we get the following:

```
T = 5e-3; % s ... sample period
GCd = c2d(GC, T, 'Tustin'); % using Tustin's method
GPd = c2d(GP, T, 'Tustin');
Hd = c2d(H, T, 'Tustin');
GCLd = GCd * GPd / (1 + GCd * GPd * Hd); % discrete closed-loop tf
```

The discrete controller transfer function `GCd`

can be made
into a difference equation for programming purposes. Let us first
predict its performance.

## Simulation and evaluation

To evaluate the performance of the control system, we should simulate its step response. Let’s use a command of \(500\) RPM:

```
R_rpm = 500; % RPM ... command angular velocity
R_rads = R_rpm * 2 * pi / 60; % rad/s
t = 0:T:0.3; % time array
Omega = R_rads * step(GCL, t); % continuous step response
Omegad = R_rads * step(GCLd, t); % discrete step response
```

The results are shown in the upper plot of figure 7.22.
We see that the discrete controller performs similarly to the continuous
controller. The steady-state error is zero and the settling time can be
verified with `stepinfo()`

to
be \(T_S \approx 0.177\) s, close to
the design requirement. The overshoot is about \(20\) percent, which is reasonable for this
application.

It is important to ensure that the required control effort is within
the capabilities of the current amplifier. The transfer function for the
control effort \(U\) over command \(R\) is \[
\frac{U(s)}{R(s)} = \frac{G_C(s)}{1 + G_C(s) G_P(s) H(s)}.
\] Using the discrete versions and defining the transfer function
as `U_R`

,
we can simulate the control effort with

```
U_R = GCd / (1 + GCd * GPd * Hd); % V, control effort cl tf, ampl. in.
u = R_rads * step(U_R, t); % V, amplifier input voltage
u_c = u * p.Ka; % amplifier output current
```

The scaling by `R_rads`

uses
superposition to give the amplifier input voltage. Recall that the
amplifier gain is included in the model, so to compute the amplifier
output, we must scale `u`

by the
amplifier gain `Ka`

to get the
amplifier output current `u_c`

. This is
shown in the lower plot of figure 7.22. The required
current is well below the maximum current of the amplifier.

The amplifier’s output voltage is limited by its power supply
voltage, so we should also compute the required voltage. This is given
by the loop equation \[
v_S = v_R + v_L + v_M = I_S R + L \frac{d I_S}{d t} + K_M \Omega_J.
\] In MATLAB, we can estimate the derivative with the `diff()`

function
such that

```
u_v = p.R * u_c(1:end - 1) + ... % V, amplifier output voltage
p.L * diff(u_c)/T + ...
p.Km * Omegad(1:end - 1);
```

The amplifier output voltage `u_v`

is also
shown in the lower plot of figure 7.22. The maximum voltage
required is less than \(8\) V, which is
below the source voltage.

Therefore, all the controller design requirements have been achieved with our design for the T1a specific target system. While the particulars of the design differ for different specific T1 systems, the design process should proceed in a similar manner.

In lab 7, we will implement this controller. The proportional and integral gains \(K_P\) and \(K_I\) are easily computed from the design given here as follows:

```
KP = K1 * K2; % V/(rad/s)
KI = -ZI * KP; % V/rad
```

This returns

```
KP = 0.103540
KI = 2.070800
```

This completes the root locus controller design for the T1a specific target system.

## The base set of controller gains

The base set of controller gains for lab 7 will be derived analytically in this section. The
root locus technique described in subsection
7.6.2, subsection 7.6.3, subsection
7.6.4, subsection 7.6.5, subsection
7.6.6 is recommended for most PI controller designs; however,
the first-order plant model allows us to design analytically, based on
the closed-loop transfer function of
eq. **¿eq:vel-i-cl-tf?**, repeated here: \[
\frac{\Omega_J}{\Omega_R} = \frac{K_a G_C G_P}{1 + K_a G_C G_P H} =
\omega_n'^{\,2} \frac{\tau' s + 1}{s^2 + 2 \zeta'
\omega_n' s + \omega_n'^2}
\]

From eq. **¿eq:GCL-root-locus-num-den?**, we can see
that the closed-loop zero will equal the open-loop zero \(Z\). For a PI controller, the zero is
typically placed near the origin to cancel the effects of the integrator
pole. However, to ensure the robustness of the design (see subsection 7.6.4), we will place the zero significantly
leftward of the plant pole at \(-1/\tau\); that is, \[
Z \ll -\frac{1}{\tau}\quad,
\qquad{(1)}\] where \(\tau =
J/B\) is the plant’s time constant and \(-1/\tau\) is the plant’s pole location. In
terms of the closed-loop transfer function of
eq. **¿eq:vel-i-cl-tf?**, we let \[
\tau' = -1/Z.
\qquad{(2)}\]

From the closed-loop transfer function of
eq. **¿eq:vel-i-cl-tf?**, the closed-loop poles are \[
p_1, p_2 = -\zeta'\omega_n' \pm \omega_n'
\sqrt{\zeta'^2-1}.
\] Let us restrict the closed-loop system
design to be underdamped, \(\psi \in
(0,1)\). Then \[
\Re(\psi) = -\zeta'\omega_n'.
\qquad{(3)}\] To coincide with the root locus design
technique from subsection 7.6.2, subsection 7.6.3, subsection 7.6.4, subsection 7.6.5, subsection
7.6.6, we make the following assumption: \[
\Re(\psi) < -\frac{1}{\tau}.
\qquad{(4)}\]

With eqns. 1-4 as design constraints on \(\tau'\), \(\omega_n'\), and \(\zeta'\), let us reexamine their
definitions in terms of the system parameters and controller gains; from
eq. **¿eq:vel-i-cl-tf-params?**, \[
\tau' = \frac{K_P}{K_I}, \quad
\omega_n' = \sqrt{\frac{K_a K_M K_I}{J}},\text{ and} \quad
\zeta' = \frac{B + K_a K_M K_P}{2 \sqrt{J K_a K_M K_I}}.
\]

From the definition of \(\tau'\) and the constraint in eq. 2 we have the relationship: \[ K_P = -\frac{1}{Z} K_I. \qquad{(5)}\] From the definitions of \(\omega_n'\) and \(\zeta'\), we can solve for gains \(K_P\) and \(K_I\): \[\begin{align} K_P &= \frac{2 J \zeta' \omega_n' - B}{K_a K_M}\quad\text{and} \label{eq:dp-kpki2-kp}\\ K_I &= \frac{J \omega_n'^2}{K_a K_M}. \label{eq:dp-kpki2-ki} \end{align}\] What remains is to express \(\omega_n'\) and \(\zeta'\) in terms of \(\psi\) and \(Z\).

Substituting the solutions for \(K_P\) and \(K_I\) in
eqns. **¿eq:dp-kpki2-kp?**,
**¿eq:dp-kpki2-ki?** into eq. 5 and solving the result
simultaneously with the constraint in eq. 3, we obtain the solution
\[
\omega_n' = \sqrt{Z \left(B/J + 2 \Re(\psi)\right)}
\quad\text{and}\quad
\zeta' = \frac{-\Re(\psi)}{Z(B/J + 2 \Re(\psi))}.
\qquad{(6)}\] Substituting these solutions for \(\omega_n'\) and \(\zeta'\) in eq. 6 into
eqns. **¿eq:dp-kpki2-kp?**,
**¿eq:dp-kpki2-ki?** yields the design equations \[
\begin{aligned}
K_P &= -\frac{B + 2 J \Re(\psi)}{K_a K_M}\text{ and} \\
K_I &= \frac{Z \left(B + 2 J \Re(\psi)\right)}{K_a K_M}.
\end{aligned}
\qquad{(7)}\] Specifying the real part of the design point
\(\Re(\psi) < -1/\tau\) and the
controller zero \(Z \ll -1/\tau\)
determines the gains \(K_P\) and \(K_I\) in eq. 7. This is a more general
result than that of the root locus design procedure above, which
resulted in the \(K_P\) and \(K_I\) given in subsection
7.6.6.

In subsection 7.6.1, we established that the design
point should have real part \[
\Re(\psi) = -4/T_S = -20\text{ rad/s},
\qquad{(8)}\] which is based on a target settling time of
\(0.2\) s. In lab 7,
the *base set of gains* will be eq. 7 with \(\Re(\psi) = -20\) rad/s and \(Z = -20\) rad/s.

We do not have a guarantee that the closed-loop transfer function will yield the target settling time of \(T_S = 200\) ms because the presence of the zero makes the equality \(T_S = 4/\Re(\psi)\) an approximation, and perhaps a poor one at that given that the zero is near the poles. To check the quality of the approximation and estimate the rise time, the simulation techniques of subsection 7.6.6 should be applied.

## Online Resources for Section 7.6

No online resources.