Phase-lead and phase-lag compensators with pre-fiter usign Bode and root-locus approaches
Table of Contents
- 1 Phase-lead and Phase-lag compensator with pre-filters
- 2 Pre-requisites
- 3 Source code
- 4 Design requirements: phase-lead compensator
-
5 Phase-lead compensator
- 5.1 Determine the gain $K$ for a step response overshoot no more than 10%
- 5.2 Matlab script
- 5.3 Design of the Phase-lead compensator
- 5.4 Phase-Lead compensator Matlab script
- 5.5 Evaluation of the compensated system to a unit ramp input
- 5.6 Evaluation the performance of the compensated system
- 5.7 Matlab script
- 5.8 Conclusion
- 6 Design requirements: phase-lead and phase-lag compensator
- 7 Phase-lead and phase-lag compensator
-
8 Adding a Pre-filter
- 8.1 Matlab script
- 8.2 Design of the Phase-Lag compensator
- 8.3 Matlab script
- 8.4 Evaluation of the performance
- 8.5 Matlab script
- 8.6 Performance results
- 8.7 New Phase-Lead compensator
- 8.8 Evaluation of the performance with the second Phase-Lead compensator
- 8.9 Matlab script
- 8.10 Performance results
- 8.11 Conclusion
Phase-lead and Phase-lag compensator with pre-filters¶
The first part is the design of a phase-lead compensator using the Bode analysis in the frequency domain. The second part is the design of a phase-lead compensator, and a phase-lag compensator in series with the first phase-lead compensator using root-locus approach.
Pre-requisites¶
- Control Systems theory.
- Bode and root-locus analysis theory
- Jupyter Notebook with Matlab-kernel.
- Matlab.
Source code¶
Design requirements: phase-lead compensator¶
For the plant, \begin{align*} G(s) &= \dfrac{K}{s(s+2.5)(s+27)} \end{align*}
- Using the frequency domain approach, determine the gain K required to give an overshoot, in response to a step input, of no more than 10%.
- Using frequency domain approach, design a phase-lead compensator to achieve a velocity error constant no less than 25 and a step response overshoot of no greater than 10%.
- Plot the response of the control system, to a unit ramp, showing both system output and ramp input, and evaluate the percentage steady state error to the ramp input signal.
- Evaluate the performance in the time and frequency domain.
Phase-lead compensator¶
The aim of this task is to design a Phase-lead compensator using the Bode analysisin the frequency domain, and evaluate it on Matlab. Although the plant $G(s)$ is a third-order system (1), the design requirements can be approximated in terms of the natural frequency ($\omega_n$) and damping ratio ($\zeta$) of a second-order system.
\begin{align} G(s) & =\dfrac{K}{s(s+a)(s+b)} \tag{1}\\ G(s) &= \dfrac{K}{s(s+2.5)(s+27)} \nonumber \end{align}Determine the gain $K$ for a step response overshoot no more than 10%¶
There are two steps to follow in order to obtain the required gain $K$, the first one uses the second-order performance approximation in the frequency domain, and the second step uses the gain and angle condition.
The relation between the Percentage Overshoot ($PO$) in response to a unity step input of a second-order system in the $\textbf{time domain}$, and the Phase Margin ($PM$) of the Bode analysis in the $\textbf{frequency domain}$, can be written as follows, \begin{align} PO &= 100~e^{-\zeta\pi/\sqrt{1-\zeta^2}} \tag{2} \\ PM &\approx 100 ~\zeta \tag{3} \end{align} applying the requirement of $PO\leq10\%$, \begin{align} \zeta &= \dfrac{ \ln\left(\frac{100}{P.O.}\right) }{\sqrt{\pi^2+\left[ \ln \left( \frac{100}{P.O.}\right)\right]}} \tag{4} \\ \zeta &= 0.59 \approx 0.60 \nonumber \end{align}
Using (3), the desired Phase Margin ($PM_d$) the system should have in order to satisfy the $PO$ is defined as, \begin{align*} PM_d = 100\times 0.6 = 60° \end{align*}
Now, it is necessary to obtain the new crossover frequency ($\omega_c^\prime$) where the $PM_d$ is satisfied. Using the $PM_d$ equation and the phase angle condition ($\phi(\omega_c^\prime)$) as follows,
\begin{align} &\phi(\omega_c^\prime) = -180° + PM_d \tag{5} \end{align}applying the rule of angles into the (1), \begin{align} &\phi(\omega_c^\prime) = -90° - \arctan \frac{\omega_c^\prime}{a} - \arctan \frac{\omega_c^\prime}{b} \tag{6}\\ \end{align} and after some algebraic operations $\omega_c^\prime$, \begin{align*} & PM_d - 180° = -90° - \arctan \frac{\omega_c^\prime}{a} - \arctan \frac{\omega_c^\prime}{b} \\ & \frac{\omega_c^\prime(a+b)}{a~b} = \left(1-\frac{\omega_c^{\prime 2}}{a~b}\right) \tan(180° - 90° -PM_d) \\ \end{align*} solving the quadratic equation with the corresponding values $a$, $b$, and $PM_d$, and using the high value of the solution, \begin{align} & \omega_c^{\prime 2} + \frac{a+b}{\tan(180° - 90° -PM_d)} \omega_c^\prime - a~b = 0 \tag{7}\\ & \omega_c^\prime = 1.29 ~rad/sec \nonumber \end{align}
Finally, the gain $K$ can be obtained from the $\textbf{gain condition}$, where it is established that the new crossover frequency $\omega_c^\prime$ should be at $0~dB$ of magnitude, in other words, \begin{align} & \arrowvert G(j\omega_c^\prime) \arrowvert = 1 \tag{8}\\ \end{align} applying into the plant $G$ (1), and replacing the values, \begin{align*} &\dfrac{K}{\omega_c^\prime \sqrt{\omega_c^{\prime 2}+a^2} \sqrt{\omega_c^{\prime 2}+b^2 }} = 1 \\ & K = \omega_c^\prime \sqrt{\omega_c^{\prime 2}+a^2} \sqrt{\omega_c^{\prime 2}+b^2 } \\ & K = 97.96 \nonumber \end{align*} therefore, the plant becomes, \begin{align*} & G(s)=\dfrac{97.96}{s(s+2.5)(s+27)} \end{align*}
Matlab script¶
% Paulo Loma Marconi
clear variables;
% plant G parameters
s = tf('s');
a = 2.5; b = 27;
%% a) Gain K for PO=10
PO = 10; % percentage overshoot
zeta = log(100/PO)/sqrt(pi^2+ (log(100/PO))^2 ); % damping ratio
PM_d = round(100*zeta)+1; % PM desired at the nearest round value
h = tand(180-90-PM_d);
omega_c = roots([1 (a+b)/h -a*b]); % new omega_c
K = omega_c(2)*sqrt(omega_c(2)^2+a^2)*sqrt(omega_c(2)^2+b^2); % new gain K
G = K/( s*(s+a)*(s+b) ); % Plant G
figure;
margin(G);
figure;
step(feedback(G,1));
stepinfo(feedback(G,1))
The results show the desired $PM_d = 60°$ is satisfied with the new gain, and step response has an $PO = 8.36$.
Design of the Phase-lead compensator¶
The Phase-Lead compensator has the following transfer function, \begin{align} Gc = \dfrac{s+z}{s+p} \tag{9} \end{align} where the location of the zero is to the left of the pole, $|z|<|p|$.
The design requirements are the velocity error constant $K_v\leq 25$, and the step response $PO\leq 10\%$
The first step is to calculate the loop gain that satisfies the $K_v$ is calculated as follows, \begin{align*} K_v &= \lim\limits_{s \rightarrow 0} s \dfrac{K}{s(s+2.5) (s+27)} \tag{10}\\ K_g &= 1687 \end{align*} therefore, the new plant is,} \begin{align*} G(s) &= \dfrac{K_g}{s(s+a)(s+b)} \tag{11}\\ G(s) &= \dfrac{1687}{s(s+2.5)(s+27)} \end{align*}
Using (2), (3), and (4), for an overshoot of $PO=10 \%$, the damping ratio is $\zeta = 0.6$, and the desired phase margin is $PM_d=60°$.
In order to obtain the $\omega_c$ that satisfies the gain condition with the new gain $K$, (8) is applied as follows, \begin{align*} &\arrowvert G(j\omega_c) \arrowvert = 1 \nonumber\\ &\left| \dfrac{K_g}{j\omega_c(j\omega_c+a)(j\omega_c+b)} \right| = 1 \nonumber\\ \end{align*} after some algebraic operation, \begin{align*} &\omega_c^2(\omega_c^2+a^2)(\omega_c^2+b^2)-K_g^2 = 0 \nonumber \\ &\omega_c = 7.55 ~rad/sec \nonumber \end{align*}
Now, the actual phase margin $PM_{act}$ is needed to calculate the additional phase ($\phi_m$) required from the compensator, \begin{align*} PM_act &= 180° + \phi(\omega_c) \tag{12}\\ PM_act &= 180° - 90° -\arctan \frac{\omega_c}{a} - \arctan \frac{\omega_c}{b} \nonumber \\ PM_act &= 2.65 \nonumber \end{align*} so, the additional phase angle is, \begin{align} \phi_m &= PM_d+\theta-PM_act \tag{13} \end{align} where $\theta$ is a factor of correction.
If $\theta=0$, \begin{align*} \phi_m &= 60° + 0° - 2.65 \nonumber\\ \phi_m &= 57° \nonumber \end{align*}
The additional phase margin is related with the zero and the pole of the Phase-Lead compensator, \begin{align*} \alpha &= \dfrac{\sin \phi_m+1}{1-\sin \phi_m} \tag{14}\\ \alpha &= 11 \nonumber \end{align*} where $\alpha$ is, \begin{align} \alpha &= \dfrac{p}{z} \tag{15} \end{align}
The next step is to determine the new $\omega_c^\prime$ using the following logarithm gain condition, \begin{align} &20\log|G(j\omega_c^\prime)| = -10 \log \alpha \tag{16}\\ &\dfrac{K_g}{\omega_c^\prime \sqrt{\omega_c^{\prime 2}+a^2} \sqrt{\omega_c^{\prime 2}+b^2 }} = \dfrac{1}{\sqrt{\alpha}} \tag{17}\\ \end{align} after some operations, \begin{align*} &\omega_c^{\prime 2}(\omega_c^{\prime 2}+a^2)(\omega_c^{\prime 2}+b^2)-K_g^2~\alpha = 0 \nonumber \\ &\omega_c^\prime = 13.50 ~rad/sec \nonumber \end{align*} now, calculating the zero of the compensator, \begin{align} \omega_c^\prime &= \sqrt{p~z} \tag{18}\\ z &= \dfrac{\omega_c^\prime}{\alpha} \nonumber\\ z &= 4.07 \nonumber\\ \end{align} and the pole of the compensator using (15) is, \begin{align} p &= \alpha ~z \nonumber\\ p &= 44.78 \nonumber \end{align}
The last step is to obtain the new gain of the $\textbf{compensated system}$, \begin{align} K_{new} &= \sqrt{\alpha} K_g \tag{19} \\ K_{new} &= 5596.80 \nonumber\\ \end{align} therefore, the compensated open-loop transfer function is as follows, \begin{align} G_{ol} &= \dfrac{s+z}{s+p} \quad \dfrac{K_{new}}{s(s+a)(s+b)} \tag{20} \\ G_{ol} &= \dfrac{s+4.07}{s+44.78} \quad \dfrac{5596.80}{s(s+2.5)(s+27)} \nonumber \end{align}
Phase-Lead compensator Matlab script¶
%% b) Phase-lead compensator
Kv = 25; % velocity error
Kg = Kv*a*b; % loop gain to satisfy Kv
G = Kg/( s*(s+a)*(s+b) ); % Plant G
% omega_c for the uncompensated system
omega_c = real( sqrt( roots([1 a^2+b^2 a^2*b^2 -Kg^2]) ) );
% obtaining actual PM
PM_act = 180-90-atand(omega_c(3)/a)-atand(omega_c(3)/b);
% additional phase angle from the compensator PM
theta = 0; % factor of correction
PM_c = round(PM_d+theta-PM_act);
% calculating alpha
alpha = round( (sind(PM_c)+1)/(1-sind(PM_c)) );
% Determine the new cross over frequency
omega_c_new = real( sqrt( roots([1 a^2+b^2 a^2*b^2 -Kg^2*alpha]) ) );
% Calculating the zero of the compensator
z = omega_c_new(3)/sqrt(alpha);
% Calculating the pole of the compensator
p = alpha*z;
% lead compensator
Gc = (s+z)/(s+p);
% new gain of the compensated system
K_new = sqrt(alpha)*Kg
% compensated open-loop
Gol = K_new*Gc*G/Kg;
% closed-loop
Gcl = feedback(Gol,1);
Evaluation of the compensated system to a unit ramp input¶
The unit ramp in the LaPlace domain has the following equation, \begin{align} R(s) &= \frac{1}{s^2} \tag{21} \end{align} and the steady-state error to that unit ramp is, \begin{align} ess_v &= \frac{1}{K_v} \tag{22} \end{align} where, \begin{align} K_v &= \lim\limits_{s\rightarrow 0} s~G(s) \tag{23} \end{align} evaluating $K_v$ for the compensated system $G_{ol}$, \begin{align*} K_v &= \lim\limits_{s\rightarrow 0} s~ \left[\dfrac{s+z}{s+p} \quad \dfrac{K_{new}}{s(s+a)(s+b)} \right] \nonumber\\ K_v &= 7.53 \nonumber \end{align*}
Therefore, \begin{align*} ess_v &= 0.13 \\ \end{align*} which is a relatively small steady-state error.
Evaluation the performance of the compensated system¶
Using the Matlab script below, we obtaint the Bode plot, the unit step response, and the unit ramp response, where you can see the desired $PM_d=60°$ and the $PO=10\%$ are satisfied, and the system has an improved the settling time to $t_s=1.04$.
Matlab script¶
%% c) evaluating the system to unit step and unit ramp
figure(2);
margin(Gol);
figure(3);
subplot(2,1,1);
step = 1/s; % step input
impulse(step,Gcl*step);
title('Step response');
subplot(2,1,2);
ramp = 1/s^2; % ramp input
impulse(ramp,Gcl*ramp);
title('Ramp response');
% evaluating Kv for the new compensated system
Kv_new = (z/p)*K_new/(a*b);
% steady-state error to a unity ramp
ess_ramp = 1/Kv_new;
stepinfo(Gcl)
% bandwidth of Gcl
BW = bandwidth(Gcl);
% resonant frequency
omega_r = 4/(0.6*1.03) *sqrt(1-2*0.6^2);
Quantity | Value |
---|---|
Steady state error to a unit ramp | 0.13 |
Rise Time | 0.24 |
Settling Time | 1.04 |
Percentage Overshoot | 10.38 |
Phase Margin | 60.20 |
Gain Margin | 22.90 |
Bandwidth | 8.19 |
Peak Magnitude | 0.57 |
Resonant frequency | 3.42 |
Conclusion¶
Comparing the uncompensated system, and the Phase-Lead compensated system, the desired phase margin $PM_d=60°$ and the overshoot $PO\leq10 \%$ were satisfied. Moreover, the settling time $t_s$ was improved three times in the Phase-lead compensated, which demonstrates this compensator improves the transient response without altering the desired phase margin.
Design requirements: phase-lead and phase-lag compensator¶
For the plant, \begin{align*} & G(s)=\dfrac{K}{s^2(s+9)(s+50)} \end{align*}
- Determine the location of the dominant poles of the closed-loop transfer function in order to achieve the following performance specification for a unit step input:
- The settling time for a step input should be less than $2.9~[s]$.
- The overshoot should be no more than 20%.
- Demonstrate analytically that the desired poles do not belong to the uncompensated root-locus.
- Use the root-locus approach to design a cascaded phase-lead compensator with the zero placed in $-1$, to yield the desired specifications. If specifications are not met, perform additional design iterations.
- Design a phase-lag compensator in series with the previous phase-lead compensator such that the steady-state error for a parabolic input $0.5~At^2$ is less than $2.5%$ of $A$.
- Evaluate the performance of your final design in the time and frequency domain.
Phase-lead and phase-lag compensator¶
The objective of this task is to design a Phase-Lead compensator, and a Phase-Lag compensator in series with the first Phase-Lead compensator using two different approaches.
The plant to be studied is, \begin{align} & G(s)=\dfrac{K}{s^2(s+a)(s+b)} \tag{24}\\ & G(s)=\dfrac{K}{s^2(s+9)(s+50)} \nonumber \end{align}
Determine the location of closed-loop dominant poles¶
The design requirements are the settling time $t_s\leq 2.9~ sec$, and the overshoot $PO\leq 20\%$. Although the plant is a fourth-order system, the compensator can be designed using the properties of a second-order system.
The settling time is, \begin{align} t_s &= \frac{4}{\zeta\omega_n} \tag{25} \end{align} where $\zeta$ is the damping ration and $\omega_n$ is the natural frequency.
Using (4), and (25), \begin{align*} \zeta &= 0.45, \quad \omega_n = 3.06 ~rad/sec \end{align*}
Therefore, the desired closed-loop dominant poles are, \begin{align*} r_{1,2} &= -\omega_n\zeta\pm j~\omega_n\sqrt{1-\zeta^2} \tag{26}\\ r_{1,2} &= -1.38\pm j~2.73 \end{align*}
Matlab script¶
clear variables;
%% plant G parameters
s = tf('s');
a = 9; b = 50;
%% a) Location of the dominant poles for PO=20 and ts=2.9
PO = 20; % percentage overshoot
ts = 2.9; % settling time
zeta = log(100/PO)/sqrt(pi^2+ (log(100/PO))^2 ); % damping ratio
zeta = round(zeta,2)-0.01;
omega_n = 4/(zeta*ts);
% desired location of dominant poles
s1 = -omega_n*zeta+omega_n*sqrt(1-zeta^2)*1i;
Demonstrate the desired poles do not belong to the root-locus¶
In order to demonstrate that the desired dominant poles $r_{1,2}$ do not belong to the root locus of the plant $G(s)$, the angle condition must not be satisfied.
Choosing the pole, $r_1=-1.38\pm j~2.73$, \begin{align} &\measuredangle(G(r_1)) = -180° \tag{27}\\ &\measuredangle \left( \dfrac{K}{r_1^2(r_1+9)(r_1+50)} \right) = 180° \nonumber\\ &-\measuredangle r_1 -\measuredangle r_1 - \measuredangle(r_1+9) - \measuredangle (r_1+50) = -80° \nonumber\\ &- 2~ \arctan \frac{2.73}{-1.38} - \arctan \frac{2.73}{9-1.38} - \arctan \frac{2.73}{50-1.38} = -180° \nonumber\\ &103.44 \neq -180° \nonumber \end{align} if the second pole $r_2$ is evaluated, \begin{align} &-103.44 \neq -180° \nonumber \end{align}
Design of the Phase-Lead compensator¶
The Phase-Lead compensator has the following transfer function, \begin{align} G_{lead} = \dfrac{s+z_{lead}}{s+p_{lead}}, \quad |z_{lead}| < |p_{lead}| \tag{28} \end{align}
The design requirement is that the location of the compensator's zero is 1. Once again, the angle criteria is applied with the desired pole $r_1$ as follows, \begin{align} &\measuredangle \left( \dfrac{s+z_{lead}}{s+p_{lead}} \quad \dfrac{K}{s^2(s+a)(s+b)} \right) = -180° \tag{29} \\ &\measuredangle \left( \dfrac{r_1+z_{lead}}{r_1+p_{lead}} \quad \dfrac{K}{r_1^2(r_1+a)(r_1+b)} \right) = -180° \nonumber \\ &\measuredangle z_{lead} -\measuredangle p_{lead}- 2~\measuredangle s -\measuredangle a - \measuredangle b = -180° \nonumber\\ \end{align} if $r_1 = -x+j~y$ \begin{align} &\left( 180°-\arctan\dfrac{y}{x-z_{lead}} \right) - \arctan\dfrac{y}{p_{lead}-x} - 2\left( 180° -\arctan\dfrac{y}{x} \right) ... \nonumber\\ &\quad -\arctan\dfrac{y}{a-x}-\arctan\dfrac{y}{b-x} = 180° \nonumber \end{align} after some operations, \begin{align} p_{lead} &= 8.36 \nonumber\\ \end{align} so, the Phase-Lead compensator is, \begin{align} G_{lead} &= \dfrac{s+1}{s+8.36} \nonumber \end{align}
Now, the gain $K$ of the compensated system can be found using the gain condition, \begin{align} &\left| \dfrac{s+z_{lead}}{s+p_{lead}} \quad \dfrac{K}{s^2(s+9)(s+50)} \right| = 1 \nonumber\\ &\left| \dfrac{r_1+1}{r_1+8.38} \quad \dfrac{K}{r_1^2(r_1+9)(r_1+50)} \right| = 1 \nonumber\\ &K = 10047 \nonumber \end{align}
Therefore, evaluating the following open-loop compensated system, \begin{align} G_{ol} &= G_{lead} ~G(s) \tag{30}\\ G_{ol} &= \dfrac{s+1}{s+8.36}~ \dfrac{10047}{s^2(s+9)(s+50)} \nonumber \end{align}
Matlab script¶
%% c) Phase lead compensator
z_lead = 1; % location of the desired zero
% using the angle condition to determine the location of the pole
x = -real(s1); y = imag(s1);
h = 180 + 180 - atand(y/(x-z_lead))-2*( 180-atand(y/x) )-atand(y/(a-x))...
-atand(y/(b-x));
p_lead = y/tand(h)+x;
% Gc compensator TF
Gc_lead = (s+z_lead)/(s+p_lead);
% obtaining the gain K with the gain condition equation
K = ((-x)^2+y^2)*sqrt((-x+a)^2+y^2)*sqrt((-x+b)^2+y^2)*...
sqrt((-x+p_lead)^2+y^2)/sqrt((-x+z_lead)^2+y^2);
% the open-loop system
G = K/(s^2*(s+a)*(s+b));% plant G
Gol_lead = Gc_lead*G; % open-loop with the Lead compensator
Gcl_lead = feedback(Gol_lead,1); % closed-loop with the Lead compensator
fig = figure(1);
rlocus(Gcl_lead);
hold;
% ploting the s1 and zeta in the rlocus
n = 0:1:160; m = n*sqrt(zeta^2/(1-zeta^2));
axis ([ -4 1 -4 4]);
plot (-m,n,'--'); % zeta
plot (-x,y,'rd');
fig = figure(2);
step(Gcl_lead);
stepinfo(Gcl_lead)
fig = figure(3);
margin(Gcl_lead);
BW_lead = bandwidth(Gcl_lead) % bandwidth
It can be seen that the close-loop desired poles belong to the root locus of the compensated system, but the overshoot is too high, so, it is recommended to use a Pre-filter to reduce the overshoot.
Adding a Pre-filter¶
The use of a Pre-filter in series with the closed-loop systems can reduce the overshoot canceling the effect of the Phase-Lead's zero.
The Pre-filter is written as follows, \begin{align} G_{pf} &= \dfrac{p}{s+p} \tag{31} \end{align} where $p$ can be at the exact point of the $z_{lead}=1$, \begin{align} G_{pf} &= \dfrac{1}{s+1} \nonumber \end{align} applying to the closed-loop Phase-Lead compensated system and evaluating it, \begin{align} G_{lead+prefilter} &= G_{pf}~ \dfrac{G_{ol}}{1+G_{ol}} \nonumber\\ G_{lead+prefilter} &= \dfrac{1}{s+1} ~\dfrac{10047~(s+1)}{(s+50)(s+13.07)(s+1.64)(s^2+2.76~s+9.40)}\nonumber \end{align}
Matlab script¶
%% Using prefilter to reduce the overshoot
pf = z_lead; % selecting the zero of the lead compensator (z_lead)
Gpf = pf/(s+pf);
fig = figure(3);
step(Gpf*Gcl_lead);
stepinfo(Gpf*Gcl_lead)
fig = figure(4);
margin(Gpf*Gcl_lead);
BW_lead_prefilter = bandwidth(Gpf*Gcl_lead) % bandwidth
The result on implementing a Pre-filter decreases the overshoot dramatically with a small change in the settling time.
Design of the Phase-Lag compensator¶
The Phase-Lag compensator has the following transfer function, \begin{align} G_{lag} = \dfrac{s+z_{lag}}{s+p_{lag}}, \quad |p_{lag}|< |z_{lag}| \tag{32} \end{align}
This compensator will be used in series with the Phase-Lead compensator designed in the previous task. And now, the design requirement is the steady-state error ($ess_a$) for a parabolic input $0.5At^2\leq2.5\%$.
First, obtaining the LaPlace transform of the parabolic input, \begin{align} r(t) &= 0.5 A t^2, \quad R(s) = \frac{A}{s^3} \nonumber \end{align} according to the final value theorem, \begin{align} ess &= \lim\limits_{s\rightarrow 0}~ s~\dfrac{A}{s^3} \dfrac{1}{1+G} \tag{33} \end{align} if $K_a = \lim\limits_{s\rightarrow 0} s^2~G$, the steady-state error is, \begin{align} ess_a &= \dfrac{A}{K_a} \tag{34} \end{align} where $K_a$ is the acceleration error constant.
If $ess_a=0.025$ and $A=1$, the $\textbf{desired}$ acceleration error constant ($K_{a_d}$) is obtained using (34), \begin{align} K_{a_d} &= \frac{1}{ess_a} \nonumber\\ K_{a_d} &= 40 \nonumber \end{align} and again, with $A=1$ and $G=G_{ol}$ from (30), the $\textbf{actual}$ acceleration error constant $K_{a_{act}}$ is, \begin{align} K_{a_{act}} &= \lim\limits_{s\rightarrow 0} s^2~ G_{ol} \\ K_{a_{act}} &= 2.67 \nonumber \end{align}
The relation between the zero $z_{lag}$ and the pole $p_{lag}$ of the Phase-Lag compensator can be written as follows, \begin{align} \alpha &= \dfrac{K_{a_d}}{K_{a_{act}}} = \dfrac{z_{lag}}{p_{lag}} \tag{35} \\ \alpha &= 14.97 \nonumber \end{align} choosing a $z_{lag}$ ten times smaller than the real part of the desired dominant pole $r_1$, \begin{align} z_{lag} &= \left| \dfrac{-1.38}{10} \right| \nonumber\\ z_{lag} &= 0.14 \nonumber \end{align} and the pole should be, \begin{align} p_{lag} &= \dfrac{z_{lag}}{\alpha} \nonumber\\ p_{lag} &= 0.0092 \nonumber \end{align} therefore, the Phase-Lag compensator becomes, \begin{align} G_{lag} &= \dfrac{s+0.14}{s+0.0092} \nonumber \end{align}
Matlab script¶
%% d) Phase-lag compensator
ess_a = 0.025; % steady-state error for a parabolic input 0.5At^2
Ka_d = 1/ess_a; % Ka desired
Ka_act = (z_lead/p_lead)*(K/(a*b));
% calculating the zero and pole of the compensator
alpha = Ka_d/Ka_act;
z_lag = abs(x)/10;
p_lag = z_lag/alpha;
% Gc phase-lag compensator
Gc_lag = (s+z_lag)/(s+p_lag);
Evaluation of the performance¶
Finally, the open-loop of the Phase-Lead compensator in series with the Phase-Lag compensator is written as follows, \begin{align} G_{ol1} &= G_{lag}~G_{lead} ~G(s) \tag{36} \\ G_{ol1} &= \dfrac{s+0.14}{s+0.0092}~ \dfrac{s+1}{s+8.36}~ \dfrac{10047}{s^2(s+9)(s+50)} \nonumber \end{align} and the Pre-filter with the closed-loop systems is, \begin{align} G_{lag+lead+prefilter} &= G_{pf}~ \dfrac{G_{ol1}}{1+G_{ol1}} \tag{37} \\ G_{lag+lead+prefilter} &= G_{pf}~ \dfrac{10047(s+1)(s+0.14)}{(s+50)(s+13.05)(s+1.78)(s+0.14)(s^2+2.51~s+8.75)} \nonumber \end{align}
Matlab script¶
%% Evaluating the performance with the phase-lead, phase-lag and prefilter
Gol_lead_lag = Gc_lead*Gc_lag*G;
Gcl_lead_lag = feedback(Gol_lead_lag,1);
fig = figure(5);
rlocus(Gcl_lead_lag);
hold;
% ploting the s1 and zeta in the rlocus
n = 0:1:160; m = n*sqrt(zeta^2/(1-zeta^2));
axis ([ -4 1 -4 4]);
plot (-m,n,'--'); % zeta
plot (-x,y,'rd');
fig = figure(6);
step(Gcl_lead,Gpf*Gcl_lead,Gcl_lead_lag,Gpf*Gcl_lead_lag)
legend('Lead','Pre-filter + Lead','Lead + Lag','Pre-filter + Lead + Lag'...
,'Location','southeast');
stepinfo(Gpf*Gcl_lead_lag)
fig = figure(7);
margin(Gcl_lead_lag);
BW_lead_lag = bandwidth(Gcl_lead_lag); % bandwidth
fig = figure(8);
margin(Gcl_lead_lag);
BW_lead_lag_prefilter = bandwidth(Gpf*Gcl_lead_lag); % bandwidth
%% Verifing Ka = 40
Ka = (z_lag/p_lag) * (z_lead/p_lead) * ( K/(a*b) )
ess_parabolic = a/Ka
Performance results¶
The step response plot of the system with and without the Pre-filter shows that the Pre-filter reduces the overshoot in both cases with good settling time. On the other hand, the root-locus plot shows that the desired dominant poles are slightly out of the target , it is recommended to add a second Phase-lead compensator in series in order correct that gap.
Quantity | Lead | Prefilter+Lead | Lead+Lag | Prefilter+Lead+Lag |
---|---|---|---|---|
Rise Time | 0.37 | 1.00 | 0.36 | 0.94 |
Settling Time | 2.79 | 3.08 | 3.59 | 3.31 |
Percentage Overshoot | 51.46 | 0.07 | 57.96 | 1.79 |
Phase Margin | 40.80 | -180 | 36.60 | 36.60 |
Gain Margin | 8.96 | 7.07 | 8.51 | 8.51 |
Bandwidth | 4.87 | 2.31 | 4.89 | 2.58 |
Peak Magnitude | 1.51 | 1.00 | 1.58 | 1.02 |
New Phase-Lead compensator¶
The previous root-locus plot demonstrates that the desired dominant closed-loop poles have moved slightly from the root-locus, therefore, a new Phase-Lead compensator is calculated to correct that shift.
This time, the location of the zero is exactly below the real part of the desired pole, $z_{lead~2}=1.38$. Applying the angle condition with the desired pole $r_1$ as follows, \begin{align} &\measuredangle \left( \dfrac{s+z_{lead~2}}{s+p_{lead~2}} \quad \dfrac{s+z_{lag}}{s+p_{lag}} \quad \dfrac{s+z_{lead}}{s+p_{lead}} \quad \dfrac{K}{s^2(s+a)(s+b)} \right) = -180° \tag{38} \\ &\measuredangle \left( \dfrac{r_1+z_{lead~2}}{r_1+p_{lead~2}} \quad \dfrac{r_1+z_{lag}}{r_1+p_{lag}} \quad \dfrac{r_1+z_{lead}}{r_1+p_{lead}} \quad \dfrac{K}{r_1^2(r_1+a)(r_1+b)} \right) = -180° \nonumber \\ &\measuredangle z_{lead~2} +\measuredangle z_{lag} +\measuredangle z_{lead} - \measuredangle p_{lead~2} -\measuredangle p_{lag} - \measuredangle p_{lead} - 2~\measuredangle s -\measuredangle a - \measuredangle b = -180° \nonumber \end{align} if $r_1 = -x+j~y$, \begin{align} & \arctan\dfrac{y}{x-z_{lead~2}} + \left( 180° - \arctan\dfrac{y}{x-z_{lag}} \right) + \left( 180°-\arctan\dfrac{y}{x-z_{lead}} \right) ... \nonumber\\ & \quad - \arctan\dfrac{y}{p_{lead~2}} - \left( 180°-\arctan\dfrac{y}{x-p_{lag}} \right) -\arctan\dfrac{y}{p_{lead}-x} - 2\left( 180° -\arctan\dfrac{y}{x} \right) ... \nonumber\\ &\qquad -\arctan\dfrac{y}{a-x}-\arctan\dfrac{y}{b-x} = 180° \nonumber \end{align} after some operations, \begin{align} p_{lead~2} &= 1.48 \nonumber \end{align} so, the second Phase-Lead compensator is, \begin{align} G_{lead~2} &= \dfrac{s+1.38}{s+1.48} \nonumber \end{align}
Now, the new gain $K_{new}$ of the compensated system can be found using the gain condition, \begin{align} %&\left| \dfrac{r_1+1}{r_1+8.38} \quad \dfrac{K}{r_1^2(r_1+9)(r_1+50)} \right| = 1 \nonumber\\ &\left| K_{new} \quad \dfrac{s+z_{lead~2}}{s+p_{lead~2}} \quad \dfrac{s+z_{lag}}{s+p_{lag}} \quad \dfrac{s+z_{lead}}{s+p_{lead}} \quad \dfrac{K}{s^2(s+a)(s+b)} \right| = 1 \tag{39} \\ &\left| K_{new} \quad \dfrac{r_1+z_{lead~2}}{r_1+p_{lead~2}} \quad \dfrac{r_1+z_{lag}}{r_1+p_{lag}} \quad \dfrac{r_1+z_{lead}}{r_1+p_{lead}} \quad \dfrac{K}{r_1^2(r_1+a)(r_1+b)} \right| = 1 \nonumber\\ &K_{new} = 1 \nonumber \end{align} which means that the gain has not changed.
%% New phase-lead compensator
z_lead2 = x; % given zero lead right below the desired pole
f = 180 + atand(y/(x-z_lead2))+(180-atand(y/(x-z_lag)))...
+(180-atand(y/(x-z_lead))) - (180-atand(y/(x-p_lag)))-atand(y/(p_lead-x))...
-2*(180-atand(y/x))-atand(y/(a-x))-atand(y/(b-x));
% p_lead2 = y/tand(180+f) - x;
p_lead2 = y/tand(f) + x;
Gc_lead2 = (s+z_lead2)/(s+p_lead2);
% Calculating the new gain K with the lead 2 compensator
K_new = sqrt((-x+p_lead2)^2+y^2)*sqrt((-x+p_lag)^2+y^2)*...
sqrt((-x+p_lead)^2+y^2)*((-x)^2+y^2)*sqrt((-x+a)^2+y^2)*sqrt((-x+b)^2+y^2)/...
( sqrt((-x+z_lead)^2+y^2)*sqrt((-x+z_lag)^2+y^2)*sqrt((-x+z_lead)^2+y^2)*K )
Gol_lead2_lead_lag = K_new*Gc_lead2*Gol_lead_lag;
Gcl_lead2_lead_lag = feedback(Gol_lead2_lead_lag,1);
%% Verifing Ka = 40
Ka_new = K_new*(z_lead2/p_lead2)*(z_lag/p_lag)*(z_lead/p_lead)*(K/(a*b));
ess_parabolic_new = a/Ka_new;
Evaluation of the performance with the second Phase-Lead compensator¶
The open-loop of the new Phase-Lead compensator in series with the previous compensators is written as follows, \begin{align} G_{ol2} &= G_{lead~2}~G_{lag}~G_{lead} ~G(s) \tag{40}\\ G_{ol2} &= \dfrac{s+1.38}{s+1.48}\quad \dfrac{s+0.14}{s+0.0092} \quad \dfrac{s+1}{s+8.36} \quad \dfrac{10047}{s^2(s+9)(s+50)} \nonumber\\ \end{align} and the Pre-filter with the closed-loop systems is, \begin{align} G_{lag+lead+prefilter} &= G_{pf}~ \dfrac{G_{ol2}}{1+G_{ol2}} \tag{41} \\ G_{lag+lead+prefilter} &= G_{pf}~ \dfrac{10047(s+1.38)(s+1)(s+0.14)}{(s+8.36)(s+1.48)(s+0.009)s^2(s+9)(s+50)} \nonumber \end{align}
Matlab script¶
%% Comparing the new compensator of the previous designs.
fig = figure(9);
rlocus(Gcl_lead2_lead_lag)
hold on;
% ploting the s1 and zeta in the rlocus
n = 0:1:160; m = n*sqrt(zeta^2/(1-zeta^2));
axis ([ -4 1 -4 4]);
plot (-m,n,'--'); % zeta
plot (-x,y,'rd');
fig = figure(10);
% step(Gcl_lead2_lead_lag,Gpf*Gcl_lead2_lead_lag)
step(Gcl_lead,Gpf*Gcl_lead,Gcl_lead_lag,Gpf*Gcl_lead_lag,...
Gcl_lead2_lead_lag,Gpf*Gcl_lead2_lead_lag)
legend('Lead','Pre-filter+Lead','Lead+Lag','Pre-filter+Lead+Lag'...
,'Lead 2+Lead+Lag','Pre-filter+Lead2+Lead+Lag','Location','southeast');
stepinfo(Gpf*Gcl_lead2_lead_lag)
fig = figure(11);
margin(Gcl_lead2_lead_lag);
BW_lead2_lead_lag = bandwidth(Gcl_lead2_lead_lag); % bandwidth
fig = figure(12);
margin(Gpf*Gcl_lead2_lead_lag);
BW_lead2_lead_lag_prefilter = bandwidth(Gpf*Gcl_lead2_lead_lag); % bandwidth
Performance results¶
From the root-locus plot, it can be seen that the desired closed-loop poles are exactly in the root locus. Also, the Bode plot shows that the $PM$ has changed a little with respect of the previous compensated system, from $36.60°$ to $39.50°$. On the other hand, the step response has been improved with the Pre-filter and the new Phase-Lead compensator, see Table 3.
Quantity | Lead | Prefilter+Lead | Lead+Lag | Prefilter+Lead+Lag | Lead_2+Lead+Lag | Prefilter+Lead_2+Lead+Lag |
---|---|---|---|---|---|---|
Rise Time | 0.37 | 1.00 | 0.36 | 0.94 | 0.37 | 0.97 |
Settling Time | 2.79 | 3.08 | 3.59 | 3.31 | 2.87 | 1.68 |
Percentage Overshoot | 51.46 | 0.07 | 57.96 | 1.79 | 55.00 | 1.25 |
Phase Margin | 40.80 | -180 | 36.60 | 36.60 | 39.50 | -180 |
Gain Margin | 8.96 | 7.07 | 8.51 | 8.51 | 8.79 | 6.79 |
Bandwidth | 4.87 | 2.31 | 4.89 | 2.58 | 4.88 | 2.42 |
Peak Magnitude | 1.51 | 1.00 | 1.58 | 1.02 | 1.55 | 1.01 |
Conclusion¶
The settling time requirement $t_s\leq2.9$ was satisfied by three of the six compensators, and only the last one with the Pre-filter achieved the desired overshoot $PO\leq 20 \%$. It is clear that the use of the Pre-filter reduces the overshoot drastically.
Comments
Comments powered by Disqus