nass-simscape/org/metrology_frame.org

173 lines
6.2 KiB
Org Mode

#+TITLE: Study of the Metrology Frame
:DRAWER:
#+STARTUP: overview
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :results none
#+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:matlab+ :tangle no
#+PROPERTY: header-args:matlab+ :mkdirp yes
#+PROPERTY: header-args:shell :eval no-export
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/org/}{config.tex}")
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
#+PROPERTY: header-args:latex+ :results file raw replace
#+PROPERTY: header-args:latex+ :buffer no
#+PROPERTY: header-args:latex+ :eval no-export
#+PROPERTY: header-args:latex+ :exports results
#+PROPERTY: header-args:latex+ :mkdirp yes
#+PROPERTY: header-args:latex+ :output-dir figs
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
:END:
* Flexibility of the reference mirror
** Introduction :ignore:
In this section we wish to see how a flexibility between the nano-hexapod's top platform and the reference mirror will change the plant dynamics and limits the performance.
First, we identify the dynamics of the system for an infinitely rigid reference mirror, and then for a reference mirror with a limited resonance frequency.
We will compare the two dynamics and conclude.
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
simulinkproject('../');
#+end_src
#+begin_src matlab
load('mat/conf_simulink.mat');
open('nass_model.slx')
#+end_src
** Initialization
We initialize all the stages with the default parameters.
#+begin_src matlab
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeNanoHexapod();
#+end_src
We first consider a rigid Sample to simplify the analysis.
#+begin_src matlab
initializeSample('type', 'rigid');
#+end_src
#+begin_src matlab :exports none
initializeReferences();
initializeSimscapeConfiguration();
initializeDisturbances('enable', false);
initializeController('type', 'open-loop');
initializeLoggingConfiguration('log', 'none');
#+end_src
#+begin_src matlab :exports none
%% Name of the Simulink File
mdl = 'nass_model';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs
io(io_i) = linio([mdl, '/Tracking Error'], 1, 'output', [], 'En'); io_i = io_i + 1; % Position Errror
#+end_src
** Rigid fixation between the metrology frame and the nano-hexapod
Let's first consider a rigid reference mirror and we identify the dynamics of the system.
#+begin_src matlab
initializeMirror('type', 'rigid');
#+end_src
#+begin_src matlab :exports none
%% Run the linearization
G = linearize(mdl, io);
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
load('mat/stages.mat', 'nano_hexapod');
Gx = -G*inv(nano_hexapod.J');
Gx.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
#+end_src
** Flexible fixation between the metrology frame and the nano-hexapod
We now initialize a reference mirror with a main resonance frequency at $200\ [Hz]$.
#+begin_src matlab
initializeMirror('type', 'flexible', 'freq', 200*ones(6,1));
#+end_src
And we re identify the plant dynamics.
#+begin_src matlab :exports none
%% Run the linearization
G = linearize(mdl, io);
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
G.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'};
load('mat/stages.mat', 'nano_hexapod');
Gxb = -G*inv(nano_hexapod.J');
Gxb.InputName = {'Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz'};
#+end_src
** Comparison
The obtained transfer functions from $\mathcal{F}_z$ to $\mathcal{X}_z$ when considering a rigid reference mirror and a flexible one are shown in Figure [[fig:effect_mirror_flexibility_fz_dz]].
#+begin_src matlab :exports none
freqs = logspace(0, 3, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(freqs, abs(squeeze(freqresp(Gx( 3, 3), freqs, 'Hz'))), 'k-');
plot(freqs, abs(squeeze(freqresp(Gxb(3, 3), freqs, 'Hz'))), 'k--');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
hold on;
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gx( 3, 3), freqs, 'Hz')))), 'k-', 'DisplayName', 'Rigid Mirror');
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Gxb(3, 3), freqs, 'Hz')))), 'k--', 'DisplayName', 'Flexible Mirror');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-360, 0]);
yticks([-360:90:360]);
legend();
linkaxes([ax1,ax2],'x');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/effect_mirror_flexibility_fz_dz.pdf', 'width', 'full', 'height', 'full')
#+end_src
#+name: fig:effect_mirror_flexibility_fz_dz
#+caption: Effect of the mirror flexibility on the transfer function from $\mathcal{F}_z$ to $\mathcal{X}_z$
#+RESULTS:
[[file:figs/effect_mirror_flexibility_fz_dz.png]]
** Conclusion
#+begin_important
A flexibility between the nano-hexapod top platform and the reference mirror will appear in the plant as two complex conjugate poles at the frequency of the resonance of the mirror on top of the nano-hexapod.
This induces 180 degrees of phase drop on the plant and will limit the attainable controller bandwidth.
This phase drop appears whatever the nano-hexapod stiffness.
Thus, care should be taken when designing the fixation of the reference mirror on top of the nano-hexapod.
#+end_important