PID Design for a DC Motor
NOTE: This tutorial is a modified version of an online control system tutorial provided by Carnegie Mellon University and the University of Michigan.
As you should recall from Studio #5, the transfer function between shaft speed
and input voltage for a DC motor is given by:
Let's again consider a unity-gain negative feedback control loop with a controller added to the forward path:
We previously considered a proportional controller to modify dynamic and steady-state behavior of the system. Now let's design a PID controller and add it into the system. First create a new m-file and type in the following commands(refer to main problem for the details of getting those commands).
J=3.2284E-6; b=3.5077E-6; K=0.0274; R=4; L=2.75E-6; num=K; den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2) 0];Recall that the transfer function for a PID controller can be written in either of the following forms:
Let's first try using a proportional controller with a gain of 1.7. Add the following code to the end of your m-file:
Kp=1.7; numcf=[Kp]; dencf=[1]; numf=conv(numcf,num); denf=conv(dencf,den);To determine the closed-loop transfer function, we use the cloop() command. Add the following line to your m-file:
[numc,denc]=cloop(numf,denf);Note that numc and denc are the numerator and the denominator of the overall closed-loop transfer function.
Now let's see how the step response looks. Add the following to the end of your m-file, and run it in the command window:
t=0:0.001:0.2; step(numc,denc,t)You should get the following plot:
Now lets take a look at the step disturbance response. Add the following to the end of your m-file, and run it in the command window:
numdcl=conv(numc,1); dendcl=conv(denc,Kp); step(numdcl,dendcl,t);You should get the following plot:
From the plots above we see that although the steady-state error looks good the settling time is too large, as is the overshoot. We also see that the steady-state error to a disturbance is large. Recall from PID tutorial that adding an integral term will eliminate the steady-state error and a derivative term will reduce the overshoot. Let's first try a PI controller to get rid of the disturbance steady state error. Change your m-file so it looks like:
J=3.2284E-6; b=3.5077E-6; K=0.0274; R=4; L=2.75E-6; num=K; den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2) 0]; Kp=1.7; Ki=20; numcf=[Kp Ki]; dencf=[1 0]; numf=conv(numcf,num); denf=conv(dencf,den); [numc,denc]=cloop(numf,denf,-1); t=0:0.001:0.4; step(numc,denc,t)You should get the following step response:
Lets see what happened to the step disturbance response, add the following to your m-file:
figure numdcl=conv(numc,dencf); dendcl=conv(denc,numcf); step(numdcl,dendcl,t);You should get the following plot:
The settling time is still too long. Let's increase the gains in order to speed up the response. Go back to your m-file and change Ki to 200 and Kp to 17. Rerun the file and you should get plots like these:
Now we see that the response is faster than before, but the large Ki has worsened the transient response (big overshoot). Let's now try a PID controller to reduce the overshoot. Go back to the m-file and make the following changes to look at the step response.
Kp=17; Ki=200; Kd=0.15; numcf=[Kd Kp Ki]; dencf=[1 0]; numf=conv(numcf,num); denf=conv(dencf,den); [numc,denc]=cloop(numf,denf,-1); t=0:0.001:0.1; step(numc,denc,t)Rerun it and you should get this plot:
Your step disturbance plot should look like this:
We now see that our step response looks really good, it has less than 16% overshoot and the settling time is roughly 40ms, and there is no steady-state error. However the step disturbance response is now really slow. Lets increase Ki to speed up the disturbance response. Change Ki to 600 in your m-file and rerun the file. You should get the following plots:
We now can see that the step response has a settling time of roughly 40ms,
it has less than 16% overshoot, and it has no steady state error. The step disturbance
response also has no steady state error. So now we know that if we use a PID
controller with
Kp = 17,
Ki = 600,
Kd = 0.15,
all of our design requirements will be satisfied.