MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply TodayTo resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Asked by Timo on 23 Apr 2013

Hello all,

I am a question for you control experts out there.

I have a slow first order system for which I designed a PI controller.

P(s)= 1.429e-07*1/(s + 0.02857);

C(s)= (5.5e05*s + 17500)/s

When analyzing the loop gain and its margin I see that the system as both a negative GM (- infinite) and a negative PM:

allmargin(PC):

GainMargin: [0 Inf] GMFrequency: [0 Inf] PhaseMargin: -0.6556 PMFrequency: 0.2805 DelayMargin: 22.3599 DMFrequency: 0.2805 Stable: 0

According to "allmargin" the system is supposedly unstable but the step response is actually stable with good performance. Despite a small negative PM of -0.6556, the time delay margin is actually huge. Matlab should calculate the time delay margin as follow:

Time Delay Margin=PM/GMFreq*pi/180

but it this case it seems that the PM value they used is 360-0.6556;

Which leads to Time Delay Margin = 359.3444/0.2805*pi/180=22.35 s which correspond to the result found in allmargin.

Does this mean that in this case a small negative PM is actually a phase margin of almost 360 degrees??? I tested my system by adding time delay and a gain uncertainty and it is actually really robust and can handle large time delays of +25 seconds and both large and small multiplicative uncertainty gains.

Also I looked at the Nyquist and there is no encirclement of the critical point.

Can someone help me understand how this system under a robust controller can have a negative phase margin? I am tempted to use this controller for my application but I would like to justify its robustness, and a negative phase margin just looks bad.

Thanks a lot,

Tim

Answer by Teja Muppirala on 24 Apr 2013

Accepted answer

When I try that, I get something completely different. How are you defining your P and C?

s = tf('s'); P= 1.429e-07*1/(s + 0.02857); C= (5.5e05*s + 17500)/s; PC = P*C; allmargin(P*C)

ans =

GainMargin: [1x0 double] GMFrequency: [1x0 double] PhaseMargin: 87.9574 PMFrequency: 0.0797 DelayMargin: 19.2701 DMFrequency: 0.0797 Stable: 1

These values seem reasonable to me.

## 0 Comments