148 lines
5.2 KiB
Org Mode
148 lines
5.2 KiB
Org Mode
#+TITLE: Study of the Metrology Frame
|
|
#+SETUPFILE: ./setup/org-setup-file.org
|
|
|
|
* 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.kinematics.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.kinematics.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
|