Stability
Table of Contents
Calculating the roots of the system for larger than the second-order polynomial becomes time-consuming and possibly even impossible in a closed-form
Routh array is a table that can be populated with the coefficients of the polynomial with a few simple rules
$$
\begin{align*}
D(s) &= P(s) \cdot R(s) \\\\\\
s^5 + 2s^4 + 6s^3 + 10s^2 + 8s +12 & = \underbrace{(s^2 + 2)}_{\text{marginally stable}}\;\;\underbrace{(s^3 + 2s^2 + 4s + 6)}_{\text{stable}}
\end{align*}
$$
%%html
<center><iframe src="https://www.youtube.com/embed/WBCZBOB3LCA?rel=0"
width="560" height="315" frameborder="0" allowfullscreen></iframe></center>
%%html
<center><iframe src="https://www.youtube.com/embed/oMmUPvn6lP8?rel=0"
width="560" height="315" frameborder="0" allowfullscreen></iframe></center>
%%html
<center><iframe src="https://www.youtube.com/embed/wGC5C_7Yy-s?rel=0"
width="560" height="315" frameborder="0" allowfullscreen></iframe></center>
$$\begin{cases}
a>0: \text{unstable}\\
a<0: \text{asymptotically stable}\\
a=0: \text{critically stable}
\end{cases}$$
$$1+KG(s) = 0 \implies KG(s) = -1 = 1 \angle (2k+1) \pi, \quad k = 0, \pm1, \pm 2, \cdots$$
Closed-loop poles in the LHP indicate stability
by Prof. Richard Hill
%%html
<center><iframe src="https://www.youtube.com/embed/Ky8In4J0v4w?rel=0"
width="560" height="315" frameborder="0" allowfullscreen></iframe></center>
Open-loop transfer function:
$$G(s) = \frac{1}{s^3+2s^2+s} = \frac{1}{s(s+1)^2}$$G = tf(1,[1 2 1 0]);
Gm - Gain margin
Pm - Phase margin
Wcg - Gain crossover frequency
Wcp - Phase crossover frequency
margin(G)
[Gm,Pm,Wcg,Wcp] = margin(G)
20*log10(2)
Is stable the closed-loop system with a unity negative feedback?
step(feedback(G,1,-1))
Gain margin
$$CG(s) = 2 \times \frac{1}{s^3+2s^2+s}$$GmG = Gm*G;
margin(GmG)
step(feedback(GmG,1,-1))
xlim([0,50])
GmG = 4*G;
margin(GmG)
step(feedback(GmG,1,-1))
xlim([0,30])
ylim([-100,100])
Phase margin
PmG = exp(-j*Pm/180*pi)*G
margin(PmG)
FG = feedback(PmG,1,-1);
t = linspace(0,100,1000);
u = ones(size(t));
[y, tout] = lsim(FG,u,t,0);
plot(tout, abs(y))
s = tf('s');
G = 20/((s+1)*(s+2)*(s+3));
margin(G)
[Gm,Pm,Wcg,Wcp] = margin(G)
nyquist(G)
axis([-6,12,-7,7])
axis equal
nyquist(Gm*G)
axis([-6,12,-7,7])
axis equal
% expect instability for large Km
rlocus(G)
axis equal
PmG = exp(-j*Pm/180*pi)*G
margin(PmG)
nyquist(PmG)
axis([-6,12,-7,7])
axis equal
%%javascript
$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')