Other Controllers

Visual Cue Narration

In order to eliminate the steady state error, we add an integrator to the proportional controller That is to say, we add a pole at origin. In order to have the root locus pass through the same point as before so as to maintain the same transient performance, we add a zero near the origin:

PI = (s+1)/s
evans(PI*System)
sgrid(zeta, wn)
Kpi = -1/real(horner(PI*System, [1 %i]*locate(1)))

We use the same values of zeta and omega_n from the proportional controller.

We now check the performance of the PI controller.

PISystem = Kpi*PI*System/. 1
yPI = csim('step', t, PISystem);
plot(t, yPI)
plot(t, ones(t), 'r'), // Compare with step

We can also compare this response with the Proportional controller

plot(t, [ones(t); y; yPI; yProp])

Now, let us try to design a PD controller that has better transient performance than the plain Proportional controller.

Let us aim for the following parameters:

Overshoot of 0.05 and Settling time of 0.5 seconds.

Show first slide of PD controller:

OS = 0.05
Ts = 0.5

From theory we know, <read from slide>

zeta = sqrt((log(OS))^2/((log(OS))^2 + %pi^2))
wn = 4/(zeta*Ts)

Therefore, we design our PD controller:

PD = s + 20
evans(PD*System)
sgrid(zeta, wn)  // Zoom first, then execute next line:
Kpd = -1/real(horner(PD*System, [1 %i]*locate(1)))

You might need to go through a few trials to find the location of the pole required so that the modified root locus passes through the point of intersection of the curves corresponding to zeta and omega_n. We do not wish to waste our time here- let me tell you that -20 is an appropriate location.

We check the performance of the controller:

PDSystem = Kpd*PD*System/. 1
yPD = csim('step', t, PDSystem);
plot(t, yPD)
plot(t, ones(t), 'r'), // Compare with step

We note that the transient performance has improved significantly, but the steady state performance has degraded somewhat.

Let us now try to design a PID controller by removing the steady state error from the PD controlled system, in a manner similar to how we designed a PI controller:

PID = (s + 20)*(s+1)/s
evans(PID*System)
sgrid(zeta, wn)
Kpid = -1/real(horner(PID*System, [1 %i]*locate(1)))
PIDSystem = Kpid*PID*System/. 1

We add a zero at origin to the PD controller.

We use the same values of zeta and omega_n from the PD system.

Now we check the performance of the PID controller:

yPID = csim('step', t, PIDSystem);
plot(t, yPID)
plot(t, ones(t), 'r')

We note the significantly improved steady state as well as transient response.

As a final step, let us compare the performance of all the controllers we have studied so far:

plot(t, [ones(t); y; yFeedback; yProp; yPI; yPD; yPID])
legend(["Step"; "Open Loop TF"; "Closed Loop TF"; "Proportional     Controller"; "PI Controller"; "PD Controller"; "PID Controller"])

END