Other Controllers

From Script | Spoken-Tutorial
Jump to: navigation, search
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

Contributors and Content Editors

Gyan