Rework the effect of the spindle rotation speed
@ -126,7 +126,11 @@ The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
|
|||||||
|
|
||||||
We set the references to zero.
|
We set the references to zero.
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
initializeReferences('Rz_type', 'rotating', 'Ry_period', 1);
|
initializeReferences();
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
initializeDisturbances('enable', false);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
And all the controllers are set to 0.
|
And all the controllers are set to 0.
|
||||||
@ -159,7 +163,7 @@ First, we identify the dynamics of the system using the =linearize= function.
|
|||||||
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm'); io_i = io_i + 1;
|
io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm'); io_i = io_i + 1;
|
||||||
|
|
||||||
%% Run the linearization
|
%% Run the linearization
|
||||||
G = linearize(mdl, io, 1, options);
|
G = linearize(mdl, io, 0.5, options);
|
||||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||||
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
|
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
|
||||||
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
|
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
|
||||||
@ -2462,21 +2466,32 @@ We identify the dynamics for the following Spindle rotation periods.
|
|||||||
Rz_periods = [60, 10, 1]; % [s]
|
Rz_periods = [60, 10, 1]; % [s]
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
The goal is to identify the dynamics:
|
||||||
|
- after the transient phase
|
||||||
|
- at the same spindle angle
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
Gw = {zeros(length(Rz_periods))};
|
Gw = {zeros(length(Rz_periods))};
|
||||||
Gw_iff = {zeros(length(Rz_periods))};
|
Gw_iff = {zeros(length(Rz_periods))};
|
||||||
Gw_dvf = {zeros(length(Rz_periods))};
|
Gw_dvf = {zeros(length(Rz_periods))};
|
||||||
Gw_ine = {zeros(length(Rz_periods))};
|
Gw_ine = {zeros(length(Rz_periods))};
|
||||||
|
|
||||||
for i = 1:length(Rz_periods)
|
for i = 1:length(Rz_periods)
|
||||||
initializeReferences('Rz_type', 'rotating', 'Rz_period', Rz_periods(i));
|
initializeReferences('Rz_type', 'rotating', ...
|
||||||
|
'Rz_period', Rz_periods(i), ... % Rotation period [s]
|
||||||
|
'Rz_amplitude', -0.5*(2*pi/Rz_periods(i))); % Angle offset [rad]
|
||||||
|
|
||||||
|
load('mat/nass_references.mat', 'Rz'); % We load the reference for the Spindle
|
||||||
|
[~, i_end] = min(abs(Rz.signals.values)); % Obtain the indice where the spindle angle is zero
|
||||||
|
t_sim = Rz.time(i_end) % Simulation time before identification [s]
|
||||||
|
|
||||||
%% Run the linearization
|
%% Run the linearization
|
||||||
G = linearize(mdl, io, 0.5, options);
|
G = linearize(mdl, io, t_sim, options);
|
||||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||||
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
|
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
|
||||||
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
|
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
|
||||||
'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'};
|
'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'};
|
||||||
|
|
||||||
Gw(i) = {G};
|
Gw(i) = {G};
|
||||||
Gw_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
Gw_iff(i) = {minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||||
Gw_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
Gw_dvf(i) = {minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))};
|
||||||
@ -2707,7 +2722,7 @@ And all the controllers are set to 0.
|
|||||||
|
|
||||||
We identify the dynamics for the following Tilt stage angles.
|
We identify the dynamics for the following Tilt stage angles.
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
Ry_amplitudes = [0, 3*pi/180]; % [rad]
|
Ry_amplitudes = [0, 20*pi/180]; % [rad]
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
#+begin_src matlab :exports none
|
||||||
@ -2720,7 +2735,7 @@ We identify the dynamics for the following Tilt stage angles.
|
|||||||
initializeReferences('Ry_type', 'constant', 'Ry_amplitude', Ry_amplitudes(i))
|
initializeReferences('Ry_type', 'constant', 'Ry_amplitude', Ry_amplitudes(i))
|
||||||
|
|
||||||
%% Run the linearization
|
%% Run the linearization
|
||||||
G = linearize(mdl, io, 0.1, options);
|
G = linearize(mdl, io, 0.25, options);
|
||||||
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'};
|
||||||
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
|
G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ...
|
||||||
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
|
'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ...
|
||||||
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 123 KiB |
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 120 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 76 KiB |