# Designing Lag or Lead Compensators with 3rd order systems

1. Jun 17, 2014

### koochiee

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

2. Jun 17, 2014

### donpacino

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

3. Jun 17, 2014

### donpacino

clc,clear
close all
format short eng

k=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

4. Jun 17, 2014

### koochiee

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.

5. Jun 18, 2014

### donpacino

ya you're right. I was an idiot and thought the pole was at 0.1....
it was a blond moment

6. Jun 18, 2014

### koochiee

:) no worries. So do you think the approximation is right?

7. Jun 18, 2014

### donpacino

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 eng

k=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)

8. Jun 18, 2014

### koochiee

Yes I do, thank you! Thank you again for the codes.