Designing Lag or Lead Compensators with 3rd order systems

AI Thread Summary
For designing Lead or Lag compensators in a 3rd order system, a 2nd order approximation can be valid if the dominant pole is significantly distanced from the third pole. The Open Loop Transfer Function (OLTF) can be approximated, simplifying the design process while adhering to performance specifications. MATLAB simulations are recommended to compare the effects of including or excluding the less dominant pole, particularly when assessing system response. The addition of a pole can influence overshoot and overall system accuracy, so adjustments may be necessary after initial approximations. Testing both configurations will ensure that the desired phase margin and step response are achieved effectively.
koochiee
Messages
16
Reaction score
0
For a 3rd order system, can I use 2nd order approximation (granted dominant pole is ≈5 Tau away from third pole), when designing a Lead or Lag compensator?



Can this OLTF = K/{s(0.1s+1)(s+1)} be approximated to 10K/{s(s+1) which ultimately gives CLTF=10K/{s(s+1)+ K} ? and then design Lead or lag network based on the performance specifications (which are given)

OLTF - Open Loop Transfer Function
CLTF - Closed Loop Transfer Function
 
Physics news on Phys.org
1.) The smallest pole is the most dominant. If you were to get rid of a pole it would be the pole at 1.

2.) do you have access to matlab? If the answer is yes, I would sim both systems and compare the differences.
typically to completely disregard a pole pd/px << 1 where px is the pole in question and pd is the dominant pole. When you are near that range things can get fuzzy.

in your case I would disregard the pole for your calculation of your lead/lag network. Then resim the system with the original network. If you need to tweek your lead/lag filter to achive the desired phase margin or step response then do so. Keep in mind that the closer a pole/zero is to the dominant pole, the more effect it will have on the system response

keep in mind that a pole that occurs after the zero crossover has much less of an effect than a pole that occurs before the zero crossover. Keep that in mind when setting your dc gain
 
clc,clear
close all
format short engk=0.01;
%p=extra pole
p=1

sys_1=zpk([],[0 -0.1],k);
sys_2=zpk([],[0 -p -0.1],k*p);

sys_1_cl=feedback(sys_1,1);
sys_2_cl=feedback(sys_2,1);

figure()
step(sys_1_cl,sys_2_cl)
legend('sys 1','sys 2')
title('closed loop step response')

figure()
bode(sys_1,sys_2)
legend('sys 1','sys 2')
title('open loop freq response')

figure()
bode(sys_1_cl,sys_2_cl)
legend('sys 1','sys 2')
title('closed loop freq response')

sys_1_info=stepinfo(sys_1_cl)
sys_2_info=stepinfo(sys_2_cl)

sys_1_cl_pole=pole(sys_1_cl)
sys_2_cl_pole=pole(sys_2_cl)

here is some MATLAB code you can use to experiment. change p to change the value of the added pole
 
Don, I was thinking that the smallest pole is s=-10 is the one that can be ignored, sorry if I'm wrong. But isn't that's the one farthest from imaginary axis so has little effect on the system response?

And thank you for the answer & the MATLAB code. I'll check it soon as I get MATLAB.
 
ya you're right. I was an idiot and thought the pole was at 0.1...
it was a blond moment
 
:) no worries. So do you think the approximation is right?
 
As I said above, the approximation is on the border of being right. The addition of that pole at 10 does effect the system. It really depends on how accurate you need to be. with the pole at 10, the overshoot changes by 5%. All other effects are negligible.

I would recommend you make the approximation, but then test the system with a pole at 10, and make adjustments if needed. Does that make sense?clc,clear
close all
format short engk=1;
%p=extra pole
p=10

sys_1=zpk([],[0 -1],k);
sys_2=zpk([],[0 -p -1],k*p);

sys_1_cl=feedback(sys_1,1);
sys_2_cl=feedback(sys_2,1);

figure()
step(sys_1_cl,sys_2_cl)
legend('sys 1','sys 2')
title('closed loop step response')

figure()
bode(sys_1,sys_2)
legend('sys 1','sys 2')
title('open loop freq response')

figure()
bode(sys_1_cl,sys_2_cl)
legend('sys 1','sys 2')
title('closed loop freq response')

sys_1_info=stepinfo(sys_1_cl)
sys_2_info=stepinfo(sys_2_cl)

sys_1_cl_pole=pole(sys_1_cl)
sys_2_cl_pole=pole(sys_2_cl)
 
Yes I do, thank you! Thank you again for the codes.
 
Back
Top