In this post we can see how to make root locus plots in python. This requires the setup from part 1.
The problem is from Dorf's modern control systems AP 10.1. A three-axis pick-and-place application requires the precise movement of a robotic arm in three-dimensional space. The overshoot for a step input should be less than 13%.
a) Let Gc(s) = K, and determine the gain K that satisfies the requirement. Determine the resulting settling time (with a 2% criterion). First we compute the Routh Hurwitz table to determine the valid
range of K.
We see 0<K<20 so If we let K = 2, then the step response becomes:
which shows the settling time is 8.68 seconds and overshoot is less than 13%.
b) Use a lead network and reduce the settling time to less than 3 seconds. Since we are dealing with time response parameters the root-locus method will be used.
The new controller is:
the overshoot and settling time criteria lead to a damping ratio of 0.545 or more and the real part of the dominant poles must be to the left of -1.33 respectively.
If we choose our dominant poles to be at s1 = -2 +- 2j they fall in the correct region on the root locus and should get the desired response. The angle of the system L(s) at s1 is Ls 63.4o. So letting m=0,
∠Gc(s1) =180 - 63.4 = 116.6o
the controller must add this amount. If we pick our zero to be at ½ , then using the relationship:
∠( s1+ z ) -∠(s1+p) = 106.26o
we find p = 6.34 and K = 34.19. This leads to the step response of:
from which we can see the settling time has been reduced but not enough to meet the specifications. Let's move it closer to the system pole at -1.
Reiterating through the root locus design procedure, if we move our zero out to z=¾ and recalculate p=5.86 and K=32.9, the response now is:
which shows another good improvement in the settling time but the zero still needs moved closer to the pole at -1.
Lastly let’s set our z=0.9, then p=5.63 and K=32.5. The root locus is computed using:def rootLocus(Ts,*args,**kwargs): num = Poly(Ts.as_numer_denom()[0],s).all_coeffs() den = Poly(Ts.as_numer_denom()[1],s).all_coeffs() tf = matlab.tf(map(float,num),map(float,den)) r,k = matlab.rlocus(tf,*args,**kwargs) plt.title("Root Locus") #plt.plot(k,r) plt.grid() plt.show()and the output is:
resulting in the final controller of:
who's step response is:
which shows the controller has reduced the overshoot and settling time to within the specifications (the settling time is less than 3 seconds).
The problem is from Dorf's modern control systems AP 10.1. A three-axis pick-and-place application requires the precise movement of a robotic arm in three-dimensional space. The overshoot for a step input should be less than 13%.
a) Let Gc(s) = K, and determine the gain K that satisfies the requirement. Determine the resulting settling time (with a 2% criterion). First we compute the Routh Hurwitz table to determine the valid
range of K.
which shows the settling time is 8.68 seconds and overshoot is less than 13%.
b) Use a lead network and reduce the settling time to less than 3 seconds. Since we are dealing with time response parameters the root-locus method will be used.
The new controller is:
the overshoot and settling time criteria lead to a damping ratio of 0.545 or more and the real part of the dominant poles must be to the left of -1.33 respectively.
If we choose our dominant poles to be at s1 = -2 +- 2j they fall in the correct region on the root locus and should get the desired response. The angle of the system L(s) at s1 is Ls 63.4o. So letting m=0,
∠Gc(s1) =180 - 63.4 = 116.6o
the controller must add this amount. If we pick our zero to be at ½ , then using the relationship:
∠( s1+ z ) -∠(s1+p) = 106.26o
we find p = 6.34 and K = 34.19. This leads to the step response of:
from which we can see the settling time has been reduced but not enough to meet the specifications. Let's move it closer to the system pole at -1.
Reiterating through the root locus design procedure, if we move our zero out to z=¾ and recalculate p=5.86 and K=32.9, the response now is:
Lastly let’s set our z=0.9, then p=5.63 and K=32.5. The root locus is computed using:def rootLocus(Ts,*args,**kwargs): num = Poly(Ts.as_numer_denom()[0],s).all_coeffs() den = Poly(Ts.as_numer_denom()[1],s).all_coeffs() tf = matlab.tf(map(float,num),map(float,den)) r,k = matlab.rlocus(tf,*args,**kwargs) plt.title("Root Locus") #plt.plot(k,r) plt.grid() plt.show()and the output is:
Comments
Post a Comment