Update figure export settings
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 296 KiB After Width: | Height: | Size: 346 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 319 KiB After Width: | Height: | Size: 328 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 272 KiB After Width: | Height: | Size: 278 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 311 KiB After Width: | Height: | Size: 317 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 208 KiB After Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 395 KiB After Width: | Height: | Size: 422 KiB |
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 388 KiB After Width: | Height: | Size: 411 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 228 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 323 KiB After Width: | Height: | Size: 386 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 163 KiB |
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 211 KiB After Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 169 KiB |
Before Width: | Height: | Size: 310 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 263 KiB After Width: | Height: | Size: 267 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 235 KiB After Width: | Height: | Size: 236 KiB |
@ -21,22 +21,23 @@
|
||||
#+PROPERTY: header-args:matlab+ :exports both
|
||||
#+PROPERTY: header-args:matlab+ :eval no-export
|
||||
#+PROPERTY: header-args:matlab+ :output-dir Figures
|
||||
#+PROPERTY: header-args:matlab+ :mkdirp yes
|
||||
:END:
|
||||
|
||||
* Introduction
|
||||
The objective of this note it to highlight some control problems that arises when controlling the position of an object using actuators that are rotating with respect to a fixed reference frame.
|
||||
|
||||
In section [[sec:system]], a simple system composed of a spindle and a translation stage is defined and the equations of motion are written.
|
||||
In section ref:sec:system, a simple system composed of a spindle and a translation stage is defined and the equations of motion are written.
|
||||
The rotation induces some coupling between the actuators and their displacement, and modifies the dynamics of the system.
|
||||
This is studied using the equations, and some numerical computations are used to compare the use of voice coil and piezoelectric actuators.
|
||||
|
||||
Then, in section [[sec:control_strategies]], two different control approach are compared where:
|
||||
Then, in section ref:sec:control_strategies, two different control approach are compared where:
|
||||
- the measurement is made in the fixed frame
|
||||
- the measurement is made in the rotating frame
|
||||
|
||||
In section [[sec:simscape]], the analytical study will be validated using a multi body model of the studied system.
|
||||
In section ref:sec:simscape, the analytical study will be validated using a multi body model of the studied system.
|
||||
|
||||
Finally, in section [[sec:control]], the control strategies are implemented using Simulink and Simscape and compared.
|
||||
Finally, in section ref:sec:control, the control strategies are implemented using Simulink and Simscape and compared.
|
||||
|
||||
* System Description and Analysis
|
||||
:PROPERTIES:
|
||||
@ -44,7 +45,7 @@ Finally, in section [[sec:control]], the control strategies are implemented usin
|
||||
:END:
|
||||
<<sec:system>>
|
||||
** System description
|
||||
The system consists of one 2 degree of freedom translation stage on top of a spindle (figure [[fig:rotating_frame_2dof]]).
|
||||
The system consists of one 2 degree of freedom translation stage on top of a spindle (figure ref:fig:rotating_frame_2dof).
|
||||
|
||||
The control inputs are the forces applied by the actuators of the translation stage ($F_u$ and $F_v$).
|
||||
As the translation stage is rotating around the Z axis due to the spindle, the forces are applied along $u$ and $v$.
|
||||
@ -71,7 +72,7 @@ Indices $u$ and $v$ corresponds to signals in the rotating reference frame ($\ve
|
||||
|
||||
** Equations
|
||||
<<sec:equations>>
|
||||
Based on the figure [[fig:rotating_frame_2dof]], we can write the equations of motion of the system.
|
||||
Based on the figure ref:fig:rotating_frame_2dof, we can write the equations of motion of the system.
|
||||
|
||||
Let's express the kinetic energy $T$ and the potential energy $V$ of the mass $m$:
|
||||
#+name: eq:energy_inertial_frame
|
||||
@ -226,7 +227,7 @@ First we will determine the value for Euler and Coriolis forces during regular e
|
||||
Fcheavy = 2*mheavy*ddot*wheavy;
|
||||
#+end_src
|
||||
|
||||
The obtained values are displayed in table [[tab:euler_coriolis]].
|
||||
The obtained values are displayed in table ref:tab:euler_coriolis.
|
||||
|
||||
#+begin_src matlab :results value table :exports results :post addhdr(*this*)
|
||||
data = [Fclight, Fcheavy ;
|
||||
@ -250,7 +251,7 @@ The negative stiffness due to the rotation is equal to $-m{\omega_0}^2$.
|
||||
Kheavy = mheavy*wheavy^2;
|
||||
#+end_src
|
||||
|
||||
The values for the negative spring effect are displayed in table [[tab:negative_spring]].
|
||||
The values for the negative spring effect are displayed in table ref:tab:negative_spring.
|
||||
|
||||
This is definitely negligible when using piezoelectric actuators. It may not be the case when using voice coil actuators.
|
||||
|
||||
@ -267,12 +268,12 @@ This is definitely negligible when using piezoelectric actuators. It may not be
|
||||
| Neg. Spring | 1381.7[N/m] | 0.9[N/m] |
|
||||
|
||||
** Limitations due to coupling
|
||||
To simplify, we consider a constant rotating speed $\dot{\theta} = {\omega_0}$ and thus $\ddot{\theta} = 0$.
|
||||
To simplify, we consider a constant rotating speed $\dot{\theta} = \omega_0$ and thus $\ddot{\theta} = 0$.
|
||||
|
||||
From equations [[eq:du_coupled]] and [[eq:dv_coupled]], we obtain:
|
||||
\begin{align*}
|
||||
(m s^2 + (k - m{\omega_0}^2)) d_u &= F_u + 2 m {\omega_0} s d_v \\
|
||||
(m s^2 + (k - m{\omega_0}^2)) d_v &= F_v - 2 m {\omega_0} s d_u \\
|
||||
From equations eqref:eq:du_coupled and eqref:eq:dv_coupled, we obtain:
|
||||
\begin{align*}
|
||||
(m s^2 + (k - m{\omega_0}^2)) d_u &= F_u + 2 m {\omega_0} s d_v \\
|
||||
(m s^2 + (k - m{\omega_0}^2)) d_v &= F_v - 2 m {\omega_0} s d_u \\
|
||||
\end{align*}
|
||||
|
||||
From second equation:
|
||||
@ -311,8 +312,8 @@ Then, coupling is negligible if $|-m \omega^2 + (k - m{\omega_0}^2)| \gg |2 m {\
|
||||
|
||||
*** Numerical Analysis
|
||||
We plot on the same graph $\frac{|-m \omega^2 + (k - m {\omega_0}^2)|}{|2 m \omega_0 \omega|}$ for the voice coil and the piezo:
|
||||
- with the light sample (figure [[fig:coupling_light]]).
|
||||
- with the heavy sample (figure [[fig:coupling_heavy]]).
|
||||
- with the light sample (figure ref:fig:coupling_light).
|
||||
- with the heavy sample (figure ref:fig:coupling_heavy).
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
f = logspace(-1, 3, 1000);
|
||||
@ -330,9 +331,8 @@ We plot on the same graph $\frac{|-m \omega^2 + (k - m {\omega_0}^2)|}{|2 m \ome
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coupling_light
|
||||
#+HEADER: :var filepath="Figures/coupling_light.pdf" :var figsize="normal-normal"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file coupling_light.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/coupling_light.pdf" :var figsize="normal-normal" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -354,9 +354,8 @@ We plot on the same graph $\frac{|-m \omega^2 + (k - m {\omega_0}^2)|}{|2 m \ome
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coupling_heavy
|
||||
#+HEADER: :var filepath="Figures/coupling_heavy.pdf" :var figsize="normal-normal"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file coupling_heavy.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/coupling_heavy.pdf" :var figsize="normal-normal" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -372,7 +371,7 @@ Coupling is higher for actuators with small stiffness.
|
||||
** Limitations due to negative stiffness effect
|
||||
If $\max{\dot{\theta}} \ll \sqrt{\frac{k}{m}}$, then the negative spring effect is negligible and $k - m\dot{\theta}^2 \approx k$.
|
||||
|
||||
Let's estimate what is the maximum rotation speed for which the negative stiffness effect is still negligible ($\omega_\text{max} = 0.1 \sqrt{\frac{k}{m}}$). Results are shown table [[tab:negative_stiffness]].
|
||||
Let's estimate what is the maximum rotation speed for which the negative stiffness effect is still negligible ($\omega_\text{max} = 0.1 \sqrt{\frac{k}{m}}$). Results are shown table ref:tab:negative_stiffness.
|
||||
#+begin_src matlab :results table :exports results :post addhdr(*this*)
|
||||
data = 0.1*60*(1/2/pi)*[sqrt(kvc/mlight), sqrt(kpz/mlight);
|
||||
sqrt(kvc/mheavy), sqrt(kpz/mheavy)];
|
||||
@ -396,7 +395,7 @@ The system dynamics will be much more affected when using soft actuator.
|
||||
|
||||
The system can even goes unstable when $m \omega^2 > k$, that is when the centrifugal forces are higher than the forces due to stiffness.
|
||||
|
||||
From this analysis, we can determine the lowest practical stiffness that is possible to use: $k_\text{min} = 10 m \omega^2$ (table [[tab:min_k]])
|
||||
From this analysis, we can determine the lowest practical stiffness that is possible to use: $k_\text{min} = 10 m \omega^2$ (table sec:tab:min_k)
|
||||
|
||||
#+begin_src matlab :results table :exports results :post addhdr(*this*)
|
||||
data = 10*[mlight*2*pi, mheavy*2*pi/60]
|
||||
@ -411,7 +410,7 @@ From this analysis, we can determine the lowest practical stiffness that is poss
|
||||
| k min [N/m] | 2199 | 89 |
|
||||
|
||||
** Effect of rotation speed on the plant
|
||||
As shown in equation [[eq:coupledplant]], the plant changes with the rotation speed $\omega_0$.
|
||||
As shown in equation eqref:eq:coupledplant, the plant changes with the rotation speed $\omega_0$.
|
||||
|
||||
Then, we compute the bode plot of the direct term and coupling term for multiple rotating speed.
|
||||
|
||||
@ -465,9 +464,8 @@ Then we compare the result between voice coil and piezoelectric actuators.
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:G_ws_vc
|
||||
#+HEADER: :var filepath="Figures/G_ws_vc.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file G_ws_vc.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/G_ws_vc.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -508,9 +506,8 @@ Then we compare the result between voice coil and piezoelectric actuators.
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Gc_ws_vc
|
||||
#+HEADER: :var filepath="Figures/Gc_ws_vc.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file Gc_ws_vc.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/Gc_ws_vc.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -567,9 +564,8 @@ Then we compare the result between voice coil and piezoelectric actuators.
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:G_ws_pz
|
||||
#+HEADER: :var filepath="Figures/G_ws_pz.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file G_ws_pz.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/G_ws_pz.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -607,9 +603,8 @@ Then we compare the result between voice coil and piezoelectric actuators.
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Gc_ws_pz
|
||||
#+HEADER: :var filepath="Figures/Gc_ws_pz.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file Gc_ws_pz.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/Gc_ws_pz.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -664,11 +659,11 @@ The poles of the system are computed for multiple values of the rotation frequen
|
||||
end
|
||||
#+end_src
|
||||
|
||||
We then plot the real and imaginary part of the poles as a function of the rotation frequency (figures [[fig:poles_w_vc]] and [[fig:poles_w_pz]]).
|
||||
We then plot the real and imaginary part of the poles as a function of the rotation frequency (figures ref:fig:poles_w_vc and ref:fig:poles_w_pz).
|
||||
|
||||
When the real part of one pole becomes positive, the system goes unstable.
|
||||
|
||||
For the voice coil (figure [[fig:poles_w_vc]]), the system is unstable when the rotation speed is above 5 rad/s. The real and imaginary part of the poles of the system with piezoelectric actuators are changing much less (figure [[fig:poles_w_pz]]).
|
||||
For the voice coil (figure ref:fig:poles_w_vc), the system is unstable when the rotation speed is above 5 rad/s. The real and imaginary part of the poles of the system with piezoelectric actuators are changing much less (figure ref:fig:poles_w_pz).
|
||||
|
||||
#+begin_src matlab :results silent :exports none
|
||||
figure;
|
||||
@ -697,9 +692,8 @@ For the voice coil (figure [[fig:poles_w_vc]]), the system is unstable when the
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:poles_w_vc
|
||||
#+HEADER: :var filepath="Figures/poles_w_vc.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file poles_w_vc.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+begin_src matlab :var filepath="Figures/poles_w_vc.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -736,9 +730,8 @@ For the voice coil (figure [[fig:poles_w_vc]]), the system is unstable when the
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:poles_w_pz
|
||||
#+HEADER: :var filepath="Figures/poles_w_pz.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file poles_w_pz.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/poles_w_pz.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -760,7 +753,7 @@ The position error $[\epsilon_x, \epsilon_y]$ is then express in the rotating fr
|
||||
|
||||
Finally, the control low $K$ links the position errors $[\epsilon_u, \epsilon_v]$ to the actuator forces $[F_u, F_v]$.
|
||||
|
||||
The block diagram is shown on figure [[fig:control_measure_fixed_2dof]].
|
||||
The block diagram is shown on figure ref:fig:control_measure_fixed_2dof.
|
||||
|
||||
#+name: fig:control_measure_fixed_2dof
|
||||
#+caption: Control with a measure from fixed frame
|
||||
@ -773,7 +766,7 @@ One question we wish to answer is: is $G(\theta) J(\theta) = G(\theta_0) J(\thet
|
||||
** Measurement in the rotating frame
|
||||
Let's consider that the measurement is made in the rotating reference frame.
|
||||
|
||||
The corresponding block diagram is shown figure [[fig:control_measure_rotating_2dof]]
|
||||
The corresponding block diagram is shown figure ref:fig:control_measure_rotating_2dof
|
||||
|
||||
#+name: fig:control_measure_rotating_2dof
|
||||
#+caption: Control with a measure from rotating frame
|
||||
@ -790,7 +783,19 @@ The loop gain is $L = G K$.
|
||||
** Initialization
|
||||
#+begin_src matlab :exports none :results silent :noweb yes
|
||||
<<matlab-init>>
|
||||
|
||||
load('./mat/parameters.mat');
|
||||
|
||||
bode_opts = bodeoptions;
|
||||
bode_opts.FreqUnits = 'Hz';
|
||||
bode_opts.MagUnits = 'abs';
|
||||
bode_opts.MagScale = 'log';
|
||||
bode_opts.Grid = 'on';
|
||||
bode_opts.PhaseVisible = 'off';
|
||||
bode_opts.Title.FontSize = 10;
|
||||
bode_opts.XLabel.FontSize = 10;
|
||||
bode_opts.YLabel.FontSize = 10;
|
||||
bode_opts.TickLabel.FontSize = 10;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
@ -882,9 +887,9 @@ Then we identify the system with an heavy mass and low speed.
|
||||
** Coupling ratio between $f_{uv}$ and $d_{uv}$
|
||||
In order to validate the equations written, we can compute the coupling ratio using the simscape model and compare with the equations.
|
||||
|
||||
From the previous identification, we plot the coupling ratio in both case (figure [[fig:coupling_ratio_light_heavy]]).
|
||||
From the previous identification, we plot the coupling ratio in both case (figure ref:fig:coupling_ratio_light_heavy).
|
||||
|
||||
We obtain the same result than the analytical case (figures [[fig:coupling_light]] and [[fig:coupling_heavy]]).
|
||||
We obtain the same result than the analytical case (figures ref:fig:coupling_light and ref:fig:coupling_heavy).
|
||||
#+begin_src matlab :results silent :exports none
|
||||
figure;
|
||||
hold on;
|
||||
@ -897,18 +902,17 @@ We obtain the same result than the analytical case (figures [[fig:coupling_light
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('Coupling ratio');
|
||||
legend({'light - VC', 'light - PZ', 'heavy - VC', 'heavy - PZ'})
|
||||
legend({'light - VC', 'light - PZ', 'heavy - VC', 'heavy - PZ'}, 'Location', 'northeast')
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coupling_ratio_light_heavy
|
||||
#+HEADER: :var filepath="Figures/coupling_ratio_light_heavy.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file coupling_ratio_light_heavy.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+begin_src matlab :var filepath="Figures/coupling_ratio_light_heavy.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+LABEL: fig:coupling_ratio_light_heavy
|
||||
#+CAPTION: caption
|
||||
#+CAPTION: Coupling ratio obtained with the Simscape model
|
||||
#+RESULTS: fig:coupling_ratio_light_heavy
|
||||
[[file:Figures/coupling_ratio_light_heavy.png]]
|
||||
|
||||
@ -936,7 +940,7 @@ First, we identify the system when the rotation speed is null and then when the
|
||||
|
||||
The actuators are voice coil with some damping added.
|
||||
|
||||
The bode plot of the system not rotating and rotating at 60rpm is shown figure [[fig:Gvc_speed]].
|
||||
The bode plot of the system not rotating and rotating at 60rpm is shown figure ref:fig:Gvc_speed.
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
w = 0; % Rotation speed [rad/s]
|
||||
@ -962,208 +966,25 @@ The bode plot of the system not rotating and rotating at 60rpm is shown figure [
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
bode(Gvc, Gtvc)
|
||||
bode(Gvc, Gtvc, bode_opts)
|
||||
legend({'Gvc - $\omega = 0$', 'Gvc - $\omega = 60$rpm'}, 'Location', 'southwest');
|
||||
title('');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Gvc_speed
|
||||
#+HEADER: :var filepath="Figures/Gvc_speed.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file Gvc_speed.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/Gvc_speed.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+LABEL: fig:Gvc_speed
|
||||
#+CAPTION: Bode plot of the system not rotating and rotating at 60rmp - Voice coil and light sample
|
||||
#+CAPTION: Change of transfer functions due to rotating speed
|
||||
#+RESULTS: fig:Gvc_speed
|
||||
[[file:Figures/Gvc_speed.png]]
|
||||
|
||||
*** Controller design
|
||||
We design a controller based on the identification when the system is not rotating.
|
||||
|
||||
#+begin_src matlab :results none :exports code
|
||||
sisotool(Gvc('Du', 'fu'))
|
||||
#+end_src
|
||||
|
||||
The controller is a lead-lag controller with the following transfer function.
|
||||
#+begin_src matlab :results none :exports code
|
||||
Kll = 2.0698e09*(s+40.45)*(s+1.181)/(s*(s+198.4)*(s+2790));
|
||||
K = [Kll 0;
|
||||
0 Kll];
|
||||
#+end_src
|
||||
|
||||
The loop gain is displayed figure [[fig:Gvc_loop_gain]].
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
freqs = logspace(-2, 2, 1000);
|
||||
|
||||
figure;
|
||||
% Amplitude
|
||||
ax1 = subaxis(2,1,1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gvc('Du', 'fu')*Kll, freqs, 'Hz'))), '-');
|
||||
set(gca,'xscale','log'); set(gca,'yscale','log');
|
||||
ylabel('Amplitude [m/N]');
|
||||
set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
% Phase
|
||||
ax2 = subaxis(2,1,2);
|
||||
hold on;
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gvc('Du', 'fu')*Kll, freqs, 'Hz')))), '-');
|
||||
set(gca,'xscale','log');
|
||||
yticks(-180:180:180);
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Gvc_loop_gain
|
||||
#+HEADER: :var filepath="Figures/Gvc_loop_gain.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file Gvc_loop_gain.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+LABEL: fig:Gvc_loop_gain
|
||||
#+CAPTION: Loop gain obtained for a lead-lag controller on the system with a voice coil
|
||||
#+RESULTS: fig:Gvc_loop_gain
|
||||
[[file:Figures/Gvc_loop_gain.png]]
|
||||
|
||||
*** Controlling the rotating system
|
||||
We here want to see if the system is robust with respect to the rotation speed. We then use the controller based on the non-rotating system, and see if the system is stable and its dynamics.
|
||||
|
||||
We can then plot the same loop gain with the rotating system using the same controller (figure [[fig:Gtvc_loop_gain]]). The result obtained is unstable.
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
freqs = logspace(-2, 2, 1000);
|
||||
|
||||
figure;
|
||||
% Amplitude
|
||||
ax1 = subaxis(2,1,1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gtvc('Du', 'fu')*Kll, freqs, 'Hz'))), '-');
|
||||
set(gca,'xscale','log'); set(gca,'yscale','log');
|
||||
ylabel('Amplitude [m/N]');
|
||||
set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
% Phase
|
||||
ax2 = subaxis(2,1,2);
|
||||
hold on;
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gtvc('Du', 'fu')*Kll, freqs, 'Hz'))), '-');
|
||||
set(gca,'xscale','log');
|
||||
yticks(-180:180:180);
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Gtvc_loop_gain
|
||||
#+HEADER: :var filepath="Figures/Gtvc_loop_gain.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file Gtvc_loop_gain.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+LABEL: fig:Gtvc_loop_gain
|
||||
#+CAPTION: Loop gain with the rotating system
|
||||
#+RESULTS: fig:Gtvc_loop_gain
|
||||
[[file:Figures/Gtvc_loop_gain.png]]
|
||||
|
||||
We can look at the poles of the system where we control only one direction ($u$ for instance). We obtain a pole with a positive real part.
|
||||
#+begin_src matlab :results table :exports both
|
||||
pole(feedback(Gtvc, blkdiag(Kll, 0)))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| -2798 |
|
||||
| -58.906+94.246i |
|
||||
| -58.906-94.246i |
|
||||
| -71.654 |
|
||||
| 3.1648 |
|
||||
| -3.3031 |
|
||||
| -1.1902 |
|
||||
|
||||
However, when we look at the poles of the closed loop with a diagonal controller, all the poles have negative real part and the system is stable.
|
||||
#+begin_src matlab :results table :exports both
|
||||
pole(feedback(Gtvc, blkdiag(Kll, Kll)))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| -2798+0.035765i |
|
||||
| -2798-0.035765i |
|
||||
| -56.406+105.34i |
|
||||
| -56.406-105.34i |
|
||||
| -64.482+79.308i |
|
||||
| -64.482-79.308i |
|
||||
| -68.521+13.503i |
|
||||
| -68.521-13.503i |
|
||||
| -1.1837+0.0041777i |
|
||||
| -1.1837-0.0041777i |
|
||||
|
||||
*** Close loop performance
|
||||
First, we create the closed loop systems. Then, we plot the transfer function from the reference signals $[\epsilon_u, \epsilon_v]$ to the output $[d_u, d_v]$ (figure [[fig:perfcomp]]).
|
||||
#+begin_src matlab :results none :exports code
|
||||
K.InputName = 'e';
|
||||
K.OutputName = 'u';
|
||||
|
||||
Gtvc.InputName = 'u';
|
||||
Gtvc.OutputName = 'y';
|
||||
|
||||
Gvc.InputName = 'u';
|
||||
Gvc.OutputName = 'y';
|
||||
|
||||
Sum = sumblk('e = r-y', 2);
|
||||
|
||||
Tvc = connect(Gvc, K, Sum, 'r', 'y');
|
||||
Ttvc = connect(Gtvc, K, Sum, 'r', 'y');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results none :exports code
|
||||
freqs = logspace(-2, 2, 1000);
|
||||
|
||||
figure;
|
||||
ax1 = subplot(1,2,1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Tvc(1, 1), freqs, 'Hz'))));
|
||||
plot(freqs, abs(squeeze(freqresp(Ttvc(1, 1), freqs, 'Hz'))));
|
||||
hold off;
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]');
|
||||
legend({'w = 0 [rpm]', 'w = 60 [rpm]'}, 'Location', 'southwest')
|
||||
title('$G_{r_u \to d_u}$')
|
||||
|
||||
ax2 = subplot(1,2,2);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Tvc(1, 2), freqs, 'Hz'))));
|
||||
plot(freqs, abs(squeeze(freqresp(Ttvc(1, 2), freqs, 'Hz'))));
|
||||
hold off;
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
ylim([1e-5, 1]);
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]');
|
||||
title('$G_{r_u \to d_v}$')
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:perfconp
|
||||
#+HEADER: :var filepath="Figures/perfconp.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file perfconp.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+LABEL: fig:perfconp
|
||||
#+CAPTION: Close loop performance for $\omega = 0$ and $\omega = 60 rpm$
|
||||
#+RESULTS: fig:perfconp
|
||||
[[file:Figures/perfconp.png]]
|
||||
|
||||
*** Effect of rotation speed
|
||||
We first identify the system (voice coil and light mass) for multiple rotation speed.
|
||||
Then we compute the bode plot of the diagonal element (figure [[fig:Guu_ws]]) and of the coupling element (figure [[fig:Guv_ws]]).
|
||||
Then we compute the bode plot of the diagonal element (figure ref:fig:Guu_ws) and of the coupling element (figure ref:fig:Guv_ws).
|
||||
|
||||
As the rotation frequency increases:
|
||||
- one pole goes to lower frequencies while the other goes to higher frequencies
|
||||
@ -1218,9 +1039,8 @@ To stabilize the unstable pole, we need a control bandwidth of at least twice of
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Guu_ws
|
||||
#+HEADER: :var filepath="Figures/Guu_ws.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file Guu_ws.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/Guu_ws.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -1261,9 +1081,8 @@ To stabilize the unstable pole, we need a control bandwidth of at least twice of
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Guv_ws
|
||||
#+HEADER: :var filepath="Figures/Guv_ws.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file Guv_ws.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/Guv_ws.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -1272,7 +1091,7 @@ To stabilize the unstable pole, we need a control bandwidth of at least twice of
|
||||
#+RESULTS: fig:Guv_ws
|
||||
[[file:Figures/Guv_ws.png]]
|
||||
|
||||
Then, we can look at the same plots for the piezoelectric actuator (figure [[fig:Guu_ws_pz]]). The effect of the rotation frequency has very little effect on the dynamics of the system to control.
|
||||
Then, we can look at the same plots for the piezoelectric actuator (figure ref:fig:Guu_ws_pz). The effect of the rotation frequency has very little effect on the dynamics of the system to control.
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
ws = linspace(0, 2*pi, 5); % Rotation speed vector [rad/s]
|
||||
@ -1320,9 +1139,8 @@ Then, we can look at the same plots for the piezoelectric actuator (figure [[fig
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Guu_ws_pz
|
||||
#+HEADER: :var filepath="Figures/Guu_ws_pz.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file Guu_ws_pz.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/Guu_ws_pz.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -1331,6 +1149,202 @@ Then, we can look at the same plots for the piezoelectric actuator (figure [[fig
|
||||
#+RESULTS: fig:Guu_ws_pz
|
||||
[[file:Figures/Guu_ws_pz.png]]
|
||||
|
||||
*** Controller design
|
||||
We design a controller based on the identification when the system is not rotating.
|
||||
|
||||
The obtained controller is a lead-lag controller with the following transfer function.
|
||||
#+begin_src matlab :results none :exports code
|
||||
Kll = 2.0698e09*(s+40.45)*(s+1.181)/((s+0.01)*(s+198.4)*(s+2790));
|
||||
K = [Kll 0;
|
||||
0 Kll];
|
||||
#+end_src
|
||||
|
||||
The loop gain is displayed figure ref:fig:Gvc_loop_gain.
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
freqs = logspace(-2, 2, 1000);
|
||||
|
||||
figure;
|
||||
% Amplitude
|
||||
ax1 = subaxis(2,1,1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gvc('Du', 'fu')*Kll, freqs, 'Hz'))), '-');
|
||||
set(gca,'xscale','log'); set(gca,'yscale','log');
|
||||
ylabel('Amplitude [m/N]');
|
||||
set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
% Phase
|
||||
ax2 = subaxis(2,1,2);
|
||||
hold on;
|
||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gvc('Du', 'fu')*Kll, freqs, 'Hz')))), '-');
|
||||
set(gca,'xscale','log');
|
||||
yticks(-180:180:180);
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Gvc_loop_gain
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/Gvc_loop_gain.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+LABEL: fig:Gvc_loop_gain
|
||||
#+CAPTION: Loop gain obtained for a lead-lag controller on the system with a voice coil
|
||||
#+RESULTS: fig:Gvc_loop_gain
|
||||
[[file:Figures/Gvc_loop_gain.png]]
|
||||
|
||||
*** Controlling the rotating system
|
||||
We here want to see if the system is robust with respect to the rotation speed. We then use the controller based on the non-rotating system, and see if the system is stable and its dynamics.
|
||||
|
||||
We can then plot the same loop gain with the rotating system using the same controller (figure ref:fig:Gtvc_loop_gain). The result obtained is unstable.
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
freqs = logspace(-2, 2, 1000);
|
||||
|
||||
figure;
|
||||
% Amplitude
|
||||
ax1 = subaxis(2,1,1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gtvc('Du', 'fu')*Kll, freqs, 'Hz'))), '-');
|
||||
set(gca,'xscale','log'); set(gca,'yscale','log');
|
||||
ylabel('Amplitude [m/N]');
|
||||
set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
% Phase
|
||||
ax2 = subaxis(2,1,2);
|
||||
hold on;
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gtvc('Du', 'fu')*Kll, freqs, 'Hz'))), '-');
|
||||
set(gca,'xscale','log');
|
||||
yticks(-180:180:180);
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:Gtvc_loop_gain
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/Gtvc_loop_gain.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+LABEL: fig:Gtvc_loop_gain
|
||||
#+CAPTION: Loop gain with the rotating system
|
||||
#+RESULTS: fig:Gtvc_loop_gain
|
||||
[[file:Figures/Gtvc_loop_gain.png]]
|
||||
|
||||
We can look at the poles of the system where we control only one direction ($u$ for instance). We obtain a pole with a positive real part.
|
||||
|
||||
#+begin_important
|
||||
The system is then unstable when controlling only one direction.
|
||||
#+end_important
|
||||
|
||||
#+begin_src matlab :results table :exports both
|
||||
pole(feedback(Gtvc, blkdiag(Kll, 0)))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| -2798 |
|
||||
| -58.916+94.248i |
|
||||
| -58.916-94.248i |
|
||||
| -71.644 |
|
||||
| 3.1647 |
|
||||
| -3.3034 |
|
||||
| -1.1901 |
|
||||
|
||||
However, when we look at the poles of the closed loop with a diagonal controller, all the poles have negative real part and the system is stable.
|
||||
#+begin_src matlab :results table :exports both
|
||||
pole(feedback(Gtvc, blkdiag(Kll, Kll)))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| -2798+0.035765i |
|
||||
| -2798-0.035765i |
|
||||
| -56.414+105.34i |
|
||||
| -56.414-105.34i |
|
||||
| -64.495+79.314i |
|
||||
| -64.495-79.314i |
|
||||
| -68.509+13.499i |
|
||||
| -68.509-13.499i |
|
||||
| -1.1837+0.0041422i |
|
||||
| -1.1837-0.0041422i |
|
||||
|
||||
Check stability of MIMO system.
|
||||
#+begin_src matlab :result silent
|
||||
isstable(1/(1+K*Gtvc))
|
||||
isstable(Gtvc/(1+K*Gtvc))
|
||||
isstable(Gtvc/(1+K*Gtvc))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: 0
|
||||
|
||||
*** Close loop performance
|
||||
First, we create the closed loop systems. Then, we plot the transfer function from the reference signals $[\epsilon_u, \epsilon_v]$ to the output $[d_u, d_v]$ (figure ref:fig:perfcomp).
|
||||
|
||||
#+begin_src matlab :results none :exports code
|
||||
S = eye(2)/(eye(2) + Gvc*K);
|
||||
T = Gvc*K /(eye(2) + Gvc*K);
|
||||
|
||||
St = eye(2)/(eye(2) + Gtvc*K);
|
||||
Tt = Gtvc*K/(eye(2) + Gtvc*K);
|
||||
|
||||
freqs = logspace(-3, 3, 1000);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results none :exports code
|
||||
figure;
|
||||
bode(S, St, 2*pi*freqs, bode_opts)
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results none :exports code
|
||||
figure;
|
||||
bode(T, Tt, 2*pi*freqs, bode_opts)
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results none :exports code
|
||||
freqs = logspace(-2, 2, 1000);
|
||||
|
||||
figure;
|
||||
ax1 = subplot(1,2,1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Tvc(1, 1), freqs, 'Hz'))));
|
||||
plot(freqs, abs(squeeze(freqresp(Ttvc(1, 1), freqs, 'Hz'))));
|
||||
hold off;
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]');
|
||||
legend({'w = 0 [rpm]', 'w = 60 [rpm]'}, 'Location', 'southwest')
|
||||
title('$G_{r_u \to d_u}$')
|
||||
|
||||
ax2 = subplot(1,2,2);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Tvc(1, 2), freqs, 'Hz'))));
|
||||
plot(freqs, abs(squeeze(freqresp(Ttvc(1, 2), freqs, 'Hz'))));
|
||||
hold off;
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
ylim([1e-5, 1]);
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]');
|
||||
title('$G_{r_u \to d_v}$')
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:perfconp
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/perfconp.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+LABEL: fig:perfconp
|
||||
#+CAPTION: Close loop performance for $\omega = 0$ and $\omega = 60 rpm$
|
||||
#+RESULTS: fig:perfconp
|
||||
[[file:Figures/perfconp.png]]
|
||||
|
||||
** Plant Control - MIMO approach
|
||||
*** TODO Analysis - SVD
|
||||
\[ G = U \Sigma V^H \]
|
||||
@ -1340,7 +1354,7 @@ With:
|
||||
- $U$ is an $2 \times 2$ unitary matrix. The columns vectors of $U$, denoted $u_i$, represent the *output directions* of the plant. They are orthonomal
|
||||
- $V$ is an $2 \times 2$ unitary matrix. The columns vectors of $V$, denoted $v_i$, represent the *input directions* of the plant. They are orthonomal
|
||||
|
||||
We first look at the evolution of the singular values as a function of frequency (figure [[fig:G_sigma]]).
|
||||
We first look at the evolution of the singular values as a function of frequency (figure ref:fig:G_sigma).
|
||||
#+begin_src matlab :exports none :results silent
|
||||
ws = linspace(0, 2*pi, 5); % Rotation speed vector [rad/s]
|
||||
m = mlight; % mass of the sample [kg]
|
||||
@ -1386,9 +1400,8 @@ We first look at the evolution of the singular values as a function of frequency
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:G_sigma
|
||||
#+HEADER: :var filepath="Figures/G_sigma.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file G_sigma.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/G_sigma.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -1498,9 +1511,8 @@ So, if we consider an input in the direction $v_i$, then the output is in the di
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coupling_simscape
|
||||
#+HEADER: :var filepath="Figures/coupling_simscape.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file coupling_simscape.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/coupling_simscape.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -1535,9 +1547,8 @@ And then with the heavy sample.
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coupling_simscape_heavy
|
||||
#+HEADER: :var filepath="Figures/coupling_simscape_heavy.pdf" :var figsize="full-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file coupling_simscape_heavy.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/coupling_simscape_heavy.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -1562,9 +1573,8 @@ Plot the ratio between the main transfer function and the coupling term:
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coupling_ratio_simscape_light
|
||||
#+HEADER: :var filepath="Figures/coupling_ratio_simscape_light.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file coupling_ratio_simscape_light.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/coupling_ratio_simscape_light.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -1588,9 +1598,8 @@ Plot the ratio between the main transfer function and the coupling term:
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coupling_ratio_simscape_heavy
|
||||
#+HEADER: :var filepath="Figures/coupling_ratio_simscape_heavy.pdf" :var figsize="wide-tall"
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes :mkdirp yes
|
||||
#+begin_src matlab :output-dir Figures :file coupling_ratio_simscape_heavy.pdf :post pdf2svg(file=*this*, ext="png")
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="Figures/coupling_ratio_simscape_heavy.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
@ -1734,17 +1743,6 @@ Finally, we run the linearization.
|
||||
exportFig('G_u_v_to_x_y', 'wide-tall');
|
||||
#+end_src
|
||||
|
||||
** Effect of the rotating Speed
|
||||
<<sec:effect_rot_speed>>
|
||||
|
||||
#+begin_src matlab :exports none :results silent :noweb yes
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
*** TODO Use realistic parameters for the mass of the sample and stiffness of the X-Y stage
|
||||
|
||||
*** TODO Check if the plant is changing a lot when we are not turning to when we are turning at the maximum speed (60rpm)
|
||||
|
||||
** Effect of the X-Y stage stiffness
|
||||
<<sec:effect_stiffness>>
|
||||
|
||||
|