Finish section about module margin

This commit is contained in:
Thomas Dehaeze 2020-12-01 10:54:06 +01:00
parent 1065724fb5
commit bd27568455
4 changed files with 501 additions and 352 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because it is too large Load Diff

239
index.org
View File

@ -1174,53 +1174,13 @@ Similarly, to reduce the effect of measurement noise $n$ on the output $y$, we w
xlabel('Time [s]'); ylabel('Step Response'); xlabel('Time [s]'); ylabel('Step Response');
#+end_src #+end_src
#+begin_src latex :file h-infinity-spec-S.pdf
\begin{tikzpicture}
\begin{axis}[%
width=8cm,
height=4cm,
at={(0,0)},
xmode=log,
xmin=0.01,
xmax=10000,
ymin=-80,
ymax=40,
ylabel={Magnitude [dB]},
xlabel={Frequency [Hz]},
ytick={40, 20, 0, -20, -40, -60, -80},
xminorgrids,
yminorgrids
]
\addplot [thick, color=black, forget plot]
table[row sep=crcr]{%
0.01 -60\\
0.1 -60\\
190 6\\
10000 6\\
};
\draw[<-] (0.05, -60) -- (0.1, -70);
\draw (0.1, -70) -- (2, -70) node[right, fill=white, draw]{$\SI{-60}{\decibel} \rightarrow$ \footnotesize{Static error}};
\draw[<-] (1, -40) -- (10, -40) node[right, fill=white, draw]{$\SI{20}{\decibel/dec} \rightarrow$ \footnotesize{Ref. track.}};
\draw[<-] (100, 0) -- (3, 0) node[left, fill=white, draw]{$\omega_c \rightarrow$ \footnotesize{Speed}};
\draw[<-] (300, 6) -- (200, 20);
\draw (200, 20) -- (10, 20) node[left, fill=white, draw]{$\SI{6}{\decibel} \rightarrow$ \footnotesize{Module margin}};
\end{axis}
\end{tikzpicture}
#+end_src
#+name: fig:h-infinity-spec-S
#+caption: Typical wanted shape of the Sensitivity transfer function
#+RESULTS:
[[file:figs/h-infinity-spec-S.png]]
** Robustness: Module Margin ** Robustness: Module Margin
<<sec:module_margin>> <<sec:module_margin>>
Let's start by an example demonstrating why the phase and gain margins might not be good indicators of robustness. Let's start by an example demonstrating why the phase and gain margins might not be good indicators of robustness.
#+begin_exampl #+begin_exampl
Let's consider the following plant: Let's consider the following plant $G_t(s)$:
#+begin_src matlab #+begin_src matlab
w0 = 2*pi*100; w0 = 2*pi*100;
xi = 0.1; xi = 0.1;
@ -1229,17 +1189,19 @@ Let's consider the following plant:
Gt = 1/k*(s/w0/4 + 1)/(s^2/w0^2 + 2*xi*s/w0 + 1); Gt = 1/k*(s/w0/4 + 1)/(s^2/w0^2 + 2*xi*s/w0 + 1);
#+end_src #+end_src
Let's say we have designed a controller that gives the loop gain shown in Figure [[fig:phase_gain_margin_model_plant]] where the following characteristics can be determined: Let's say we have designed a controller $K_t(s)$ that gives the loop gain shown in Figure [[fig:phase_gain_margin_model_plant]].
#+begin_src matlab
Kt = 1.2e6*(s + w0)/s;
#+end_src
The following characteristics can be determined from Figure [[fig:phase_gain_margin_model_plant]]:
- bandwidth of $\approx 10\, \text{Hz}$ - bandwidth of $\approx 10\, \text{Hz}$
- infinite gain margin (the phase of the loop-gain never reaches -180 degrees - infinite gain margin (the phase of the loop-gain never reaches -180 degrees
- more than 90 degrees of phase margin - more than 90 degrees of phase margin
This might indicate very good robustness properties of the closed-loop system. This might indicate very good robustness properties of the closed-loop system.
#+begin_src matlab
Kt = 1.2e6*(s + w0)/s;
#+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
freqs = logspace(0, 3, 1000); freqs = logspace(0, 3, 1000);
@ -1277,14 +1239,14 @@ This might indicate very good robustness properties of the closed-loop system.
[[file:figs/phase_gain_margin_model_plant.png]] [[file:figs/phase_gain_margin_model_plant.png]]
Now let's suppose the "real" plant =Gr= as a slightly lower damping factor: Now let's suppose the "real" plant $G_r(s)$ as a slightly lower damping factor:
#+begin_src matlab #+begin_src matlab
xi = 0.03; xi = 0.03;
Gr = 1/k*(s/w0/4 + 1)/(s^2/w0^2 + 2*xi*s/w0 + 1); Gr = 1/k*(s/w0/4 + 1)/(s^2/w0^2 + 2*xi*s/w0 + 1);
#+end_src #+end_src
The obtained loop gain is in Figure [[fig:phase_gain_margin_real_plant]]. The obtained "real" loop gain is shown in Figure [[fig:phase_gain_margin_real_plant]].
It is shown that at a frequency little bit above 100Hz, the phase of the loop gain reaches -180 degrees while its magnitude is more than one which indicated unstability. At a frequency little bit above 100Hz, the phase of the loop gain reaches -180 degrees while its magnitude is more than one which indicated instability.
It is confirmed by checking the stability of the closed loop system: It is confirmed by checking the stability of the closed loop system:
#+begin_src matlab :results value replace #+begin_src matlab :results value replace
@ -1334,35 +1296,125 @@ It is confirmed by checking the stability of the closed loop system:
Therefore, even a small change of the plant parameter makes the system unstable even though both the gain margin and the phase margin for the nominal plant are excellent. Therefore, even a small change of the plant parameter makes the system unstable even though both the gain margin and the phase margin for the nominal plant are excellent.
This is due to the fact that the gain and phase margin are indicators to the robustness of the system to a *pure* change or gain or a *pure* change of phase but not a combination of both. This is due to the fact that the gain and phase margin are robustness indicators for a *pure* change or gain or a *pure* change of phase but not a combination of both.
#+end_exampl
Let's now determine a new robustness indicator based on the Nyquist Stability Criteria.
#+begin_definition
- Nyquist Stability Criteria (for stable systems) ::
If the open-loop transfer function $L(s)$ is stable, then the closed-loop system is unstable for any encirclement of the point $1$ on the Nyquist plot.
- Nyquist Plot ::
The Nyquist plot shows the evolution of $L(j\omega)$ in the complex plane from $\omega = 0 \to \infty$.
#+end_definition
#+begin_seealso
For more information about the /general/ Nyquist Stability Criteria, you may want to look at [[https://www.youtube.com/watch?v=sof3meN96MA][this]] video.
#+end_seealso
From the Nyquist stability criteria, it is clear that we want $L(j\omega)$ to be as far away from the $-1$ point (called the /unstable point/) in the complex plane.
From this, we define the *module margin*.
#+begin_definition
- Module Margin ::
The Module Margin $\Delta M$ is defined as the *minimum distance* between the point $-1$ and the loop gain $L(j\omega)$ in the complex plane.
#+end_definition
A typical Nyquist plot is shown in Figure [[fig:module_margin_example]].
The gain, phase and module margins are graphically shown to have an idea of what they represent.
As expected from Figure [[fig:module_margin_example]], there is a close relationship between the module margin and the gain and phase margins.
We can indeed show that for a given value of the module margin $\Delta M$, we have:
\begin{equation}
\Delta G \ge \frac{\Delta M}{\Delta M - 1}; \quad \Delta \phi \ge \frac{1}{\Delta M}
\end{equation}
#+begin_src matlab :exports none
% Example Plant
k = 1e6; % Stiffness [N/m]
c = 4e2; % Damping [N/(m/s)]
m = 10; % Mass [kg]
G = 1/(m*s^2 + c*s + k); % Plant
% Example Controller
K = 14e8 * ... % Gain
1/(s^2) * ... % Double Integrator
(1 + s/(2*pi*10/sqrt(8)))/(1 + s/(2*pi*10*sqrt(8))); % Lead
L = G*K;
L_resp = squeeze(freqresp(L, freqs, 'Hz'));
% Module Margin
Dm = min(abs(1 + L_resp));
% Phase Gain Margin
[Gm, Pm, Wcg, Wcp] = margin(L);
freqs = logspace(0, 3, 1000);
figure;
hold on;
% Gain Margin
plot([-1, -1/Gm], [0, 0], '-', 'DisplayName', sprintf('$\\Delta G = %.1f$', Gm))
% Phase Margin
theta = -pi:0.01:-pi+Pm*pi/180;
plot(cos(theta), sin(theta), '-', 'DisplayName', sprintf('$\\Delta \\phi = %.1f^o$', Pm));
% Module Margin
theta = 0 : 0.01 : 2*pi;
plot(Dm*cos(theta)-1, Dm*sin(theta), '-', 'DisplayName', sprintf('$\\Delta M = %.1f$', Dm));
% Nyquist Plot
plot(real(L_resp), imag(L_resp), 'k-', 'DisplayName', '$L(j\omega)$')
plot(-1, 0, 'k*', 'HandleVisibility', 'off');
hold off;
xlabel('Real Axis'); ylabel('Imaginary Axis');
xlim([-1.5, 0.5]); ylim([-1, 1]);
axis equal;
legend('location', 'southeast');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/module_margin_example.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:module_margin_example
#+caption: Nyquist plot with visual indication of the Gain margin $\Delta G$, Phase margin $\Delta \phi$ and Module margin $\Delta M$
#+RESULTS:
[[file:figs/module_margin_example.png]]
Let's now try to express the Module margin $\Delta M$ as an $\mathcal{H}_\infty$ norm of a closed-loop transfer function:
\begin{align*}
\Delta M &= \text{minimum distance between } L(j\omega) \text{ and point } (-1) \\
&= \min_\omega |L(j\omega) - (-1)| \\
&= \min_\omega |1 + L(j\omega)| \\
&= \frac{1}{\max_\omega \frac{1}{|1 + L(j\omega)|}} \\
&= \frac{1}{\|S\|_\infty}
\end{align*}
#+begin_important
The $\mathcal{H}_\infty$ norm of the sensitivity function $\|S\|_\infty$ is a measure of the Module margin $\Delta M$ and therefore an indicator of the system robustness.
\begin{equation}
\Delta M = \frac{1}{\|S\|_\infty} \label{eq:module_margin_S}
\end{equation}
The wanted robustness of the closed-loop system can be specified by setting a maximum value on $\|S\|_\infty$.
#+end_important
Note that this is why large peak value of $|S(j\omega)|$ usually indicate robustness problems.
#+begin_exampl
Typical, we require $\|S\|_\infty < 2 (6dB)$ which implies $\Delta G \ge 2$ and $\Delta \phi \ge 29^o$
#+end_exampl #+end_exampl
#+begin_seealso #+begin_seealso
To learn more about module (or disk) margin, you can check out [[https://www.youtube.com/watch?v=XazdN6eZF80][this]] video. To learn more about module/disk margin, you can check out [[https://www.youtube.com/watch?v=XazdN6eZF80][this]] video.
#+end_seealso #+end_seealso
- [ ] Example why the module margin might be a good alternative
- [ ] Stability => L does not does at the left of point -1
- [ ] => ...
#+begin_definition
The *module margin* $\Delta M$ is defined as the *minimum distance* between the point $-1$ and $L(j\omega) = G(j\omega) K(j\omega)$ in the complex plane.
#+end_definition
The module margin can be visually determined on the Nyquist plot ($L(j\omega)$ from $\omega = -\infty$ to $\infty$ in the complex plane).
- [ ] Example of Nyquist plot and module margin
- [ ] Express the module margin as a function of $\|S\|_\infty$
\[ M_S < 2 \Rightarrow \text{GM} > 2 \text{ and } \text{PM} > 29^o \]
#+begin_important
Large peak value of $S$ indicate robustness problems.
The wanted robustness of the closed-loop system can there be specified by setting a maximum value on $\|S\|_\infty$.
#+end_important
** How to *Shape* transfer function? Using of Weighting Functions! ** How to *Shape* transfer function? Using of Weighting Functions!
<<sec:weighting_functions>> <<sec:weighting_functions>>
@ -1603,6 +1655,47 @@ The obtained shapes are shown in Figure [[fig:high_order_weight]].
** Sensitivity Function Shaping - Example ** Sensitivity Function Shaping - Example
<<sec:sensitivity_shaping_example>> <<sec:sensitivity_shaping_example>>
#+begin_src latex :file h-infinity-spec-S.pdf
\begin{tikzpicture}
\begin{axis}[%
width=8cm,
height=4cm,
at={(0,0)},
xmode=log,
xmin=0.01,
xmax=10000,
ymin=-80,
ymax=40,
ylabel={Magnitude [dB]},
xlabel={Frequency [Hz]},
ytick={40, 20, 0, -20, -40, -60, -80},
xminorgrids,
yminorgrids
]
\addplot [thick, color=black, forget plot]
table[row sep=crcr]{%
0.01 -60\\
0.1 -60\\
190 6\\
10000 6\\
};
\draw[<-] (0.05, -60) -- (0.1, -70);
\draw (0.1, -70) -- (2, -70) node[right, fill=white, draw]{$\SI{-60}{\decibel} \rightarrow$ \footnotesize{Static error}};
\draw[<-] (1, -40) -- (10, -40) node[right, fill=white, draw]{$\SI{20}{\decibel/dec} \rightarrow$ \footnotesize{Ref. track.}};
\draw[<-] (100, 0) -- (3, 0) node[left, fill=white, draw]{$\omega_c \rightarrow$ \footnotesize{Speed}};
\draw[<-] (300, 6) -- (200, 20);
\draw (200, 20) -- (10, 20) node[left, fill=white, draw]{$\SI{6}{\decibel} \rightarrow$ \footnotesize{Module margin}};
\end{axis}
\end{tikzpicture}
#+end_src
#+name: fig:h-infinity-spec-S
#+caption: Typical wanted shape of the Sensitivity transfer function
#+RESULTS:
[[file:figs/h-infinity-spec-S.png]]
- Robustness: Module margin > 2 ($\Rightarrow \text{GM} > 2 \text{ and } \text{PM} > 29^o$) - Robustness: Module margin > 2 ($\Rightarrow \text{GM} > 2 \text{ and } \text{PM} > 29^o$)
- Bandwidth: - Bandwidth:
- Slope of -2 - Slope of -2