Add tilt flexibility to granite
This commit is contained in:
+2
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<Info Ref="simscape" Type="Relative" />
|
||||||
-2
@@ -1,2 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
|
||||||
<Info Ref="identification" Type="Relative" />
|
|
||||||
+351
-1
@@ -42,7 +42,7 @@
|
|||||||
:END:
|
:END:
|
||||||
|
|
||||||
* Introduction :ignore:
|
* Introduction :ignore:
|
||||||
The goal here is to make an identification of the micro-station in order to compare the model with the measurements on the real micro-station.
|
The goal here is to make an identification of the *micro-station* in order to compare the model with the measurements on the real micro-station.
|
||||||
|
|
||||||
In order to do so:
|
In order to do so:
|
||||||
- Decide where to virtually excite the station and where to measure its motion
|
- Decide where to virtually excite the station and where to measure its motion
|
||||||
@@ -56,6 +56,356 @@ Indeed, we can define the center of mass of any solid body but not of multiple s
|
|||||||
One solution could be to use one STEP file for one solid body.
|
One solution could be to use one STEP file for one solid body.
|
||||||
However, the position of the center of mass can be exported using simulink and then defined on Simscape.
|
However, the position of the center of mass can be exported using simulink and then defined on Simscape.
|
||||||
|
|
||||||
|
* Identification of the Micro-Station
|
||||||
|
** Introduction :ignore:
|
||||||
|
|
||||||
|
** 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
|
||||||
|
|
||||||
|
** Compute the transfer functions
|
||||||
|
We first define some parameters for the identification.
|
||||||
|
The simulink file for the identification is =sim_micro_station_id.slx=.
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
open 'simscape/sim_micro_station_id.slx'
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Options for Linearized
|
||||||
|
options = linearizeOptions;
|
||||||
|
options.SampleTime = 0;
|
||||||
|
|
||||||
|
%% Name of the Simulink File
|
||||||
|
mdl = 'sim_micro_station_id';
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Micro-Hexapod
|
||||||
|
% Input/Output definition
|
||||||
|
io(1) = linio([mdl, '/Micro-Station/Fm_ext'],1,'openinput');
|
||||||
|
io(2) = linio([mdl, '/Micro-Station/Fg_ext'],1,'openinput');
|
||||||
|
io(3) = linio([mdl, '/Micro-Station/Dm_inertial'],1,'output');
|
||||||
|
io(4) = linio([mdl, '/Micro-Station/Ty_inertial'],1,'output');
|
||||||
|
io(5) = linio([mdl, '/Micro-Station/Ry_inertial'],1,'output');
|
||||||
|
io(6) = linio([mdl, '/Micro-Station/Dg_inertial'],1,'output');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
% Run the linearization
|
||||||
|
G_ms = linearize(mdl, io, 0);
|
||||||
|
|
||||||
|
% Input/Output names
|
||||||
|
G_ms.InputName = {'Fmx', 'Fmy', 'Fmz',...
|
||||||
|
'Fgx', 'Fgy', 'Fgz'};
|
||||||
|
G_ms.OutputName = {'Dmx', 'Dmy', 'Dmz', ...
|
||||||
|
'Tyx', 'Tyy', 'Tyz', ...
|
||||||
|
'Ryx', 'Ryy', 'Ryz', ...
|
||||||
|
'Dgx', 'Dgy', 'Dgz'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Save the obtained transfer functions
|
||||||
|
save('./mat/id_micro_station.mat', 'G_ms');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
** Plots the transfer functions
|
||||||
|
|
||||||
|
** Compare with the measurements
|
||||||
|
|
||||||
|
|
||||||
|
* Modal Analysis of the Micro-Station
|
||||||
|
** 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
|
||||||
|
|
||||||
|
** Simscape Model
|
||||||
|
#+begin_src matlab
|
||||||
|
open 'simscape/sim_micro_station_modal_analysis.slx'
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Options for Linearized
|
||||||
|
options = linearizeOptions;
|
||||||
|
options.SampleTime = 0;
|
||||||
|
|
||||||
|
%% Name of the Simulink File
|
||||||
|
mdl = 'sim_micro_station_modal_analysis';
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Micro-Hexapod
|
||||||
|
% Input/Output definition
|
||||||
|
io(1) = linio([mdl, '/Micro-Station/F_hammer'],1,'openinput');
|
||||||
|
io(2) = linio([mdl, '/Micro-Station/acc9'],1,'output');
|
||||||
|
io(3) = linio([mdl, '/Micro-Station/acc10'],1,'output');
|
||||||
|
io(4) = linio([mdl, '/Micro-Station/acc11'],1,'output');
|
||||||
|
io(5) = linio([mdl, '/Micro-Station/acc12'],1,'output');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
% Run the linearization
|
||||||
|
G_ms = linearize(mdl, io, 0);
|
||||||
|
|
||||||
|
% Input/Output names
|
||||||
|
G_ms.InputName = {'Fx', 'Fy', 'Fz'};
|
||||||
|
G_ms.OutputName = {'x9', 'y9', 'z9', ...
|
||||||
|
'x10', 'y10', 'z10', ...
|
||||||
|
'x11', 'y11', 'z11', ...
|
||||||
|
'x12', 'y12', 'z12'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Plot Results
|
||||||
|
#+begin_src matlab
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G_ms('x9', 'Fx'), freqs, 'Hz'))));
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/N]');
|
||||||
|
hold off;
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Compare with measurements
|
||||||
|
#+begin_src matlab
|
||||||
|
load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
dirs = {'x', 'y', 'z'};
|
||||||
|
|
||||||
|
n_acc = 9;
|
||||||
|
n_dir = 1; % x, y, z
|
||||||
|
n_exc = 1; % x, y, z
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs(3*(n_acc-1) + n_dir, n_exc, :)))./((2*pi*freqs).^2)');
|
||||||
|
plot(freqs, abs(squeeze(freqresp(G_ms([dirs{n_dir}, num2str(n_acc)], ['F', dirs{n_dir}]), freqs, 'Hz'))));
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/N]');
|
||||||
|
hold off;
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Compare with measurements at the CoM of each element
|
||||||
|
** 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
|
||||||
|
|
||||||
|
** Init
|
||||||
|
#+begin_src matlab :results none
|
||||||
|
%% Initialize Ground
|
||||||
|
initializeGround();
|
||||||
|
|
||||||
|
%% Initialize Granite
|
||||||
|
initializeGranite();
|
||||||
|
|
||||||
|
%% Initialize Translation stage
|
||||||
|
initializeTy();
|
||||||
|
|
||||||
|
%% Initialize Tilt Stage
|
||||||
|
initializeRy();
|
||||||
|
|
||||||
|
%% Initialize Spindle
|
||||||
|
initializeRz();
|
||||||
|
|
||||||
|
%% Initialize Hexapod Symétrie
|
||||||
|
initializeMicroHexapod();
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Center of Mass of each solid body
|
||||||
|
|
||||||
|
| | granite bot | granite top | ty | ry | rz | hexa |
|
||||||
|
|--------+-------------+-------------+------+------+------+------|
|
||||||
|
| X [mm] | 45 | 52 | 0 | 0 | 0 | -4 |
|
||||||
|
| Y [mm] | 144 | 258 | 14 | -5 | 0 | 6 |
|
||||||
|
| Z [mm] | -1251 | -778 | -600 | -628 | -580 | -319 |
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
open 'simscape/sim_micro_station_modal_analysis_com.slx'
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Simscape Model
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Options for Linearized
|
||||||
|
options = linearizeOptions;
|
||||||
|
options.SampleTime = 0;
|
||||||
|
|
||||||
|
%% Name of the Simulink File
|
||||||
|
mdl = 'sim_micro_station_modal_analysis_com';
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
%% Micro-Hexapod
|
||||||
|
% Input/Output definition
|
||||||
|
io(1) = linio([mdl, '/Micro-Station/F_hammer'],1,'openinput');
|
||||||
|
io(2) = linio([mdl, '/Micro-Station/acc_gtop'],1,'output');
|
||||||
|
io(3) = linio([mdl, '/Micro-Station/acc_ty'],1,'output');
|
||||||
|
io(4) = linio([mdl, '/Micro-Station/acc_ry'],1,'output');
|
||||||
|
io(5) = linio([mdl, '/Micro-Station/acc_rz'],1,'output');
|
||||||
|
io(6) = linio([mdl, '/Micro-Station/acc_hexa'],1,'output');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
% Run the linearization
|
||||||
|
G_ms = linearize(mdl, io, 0);
|
||||||
|
|
||||||
|
% Input/Output names
|
||||||
|
G_ms.InputName = {'Fx', 'Fy', 'Fz'};
|
||||||
|
G_ms.OutputName = {'gtop_x', 'gtop_y', 'gtop_z', 'gtop_rx', 'gtop_ry', 'gtop_rz', ...
|
||||||
|
'ty_x', 'ty_y', 'ty_z', 'ty_rx', 'ty_ry', 'ty_rz', ...
|
||||||
|
'ry_x', 'ry_y', 'ry_z', 'ry_rx', 'ry_ry', 'ry_rz', ...
|
||||||
|
'rz_x', 'rz_y', 'rz_z', 'rz_rx', 'rz_ry', 'rz_rz', ...
|
||||||
|
'hexa_x', 'hexa_y', 'hexa_z', 'hexa_rx', 'hexa_ry', 'hexa_rz'};
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Compare with measurements
|
||||||
|
#+begin_src matlab
|
||||||
|
load('../meas/modal-analysis/mat/frf_coh_matrices.mat', 'freqs');
|
||||||
|
load('../meas/modal-analysis/mat/frf_com.mat', 'FRFs_CoM');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
|
stages = {'gbot', 'gtop', 'ty', 'ry', 'rz', 'hexa'}
|
||||||
|
|
||||||
|
n_stg = 2;
|
||||||
|
n_dir = 2; % x, y, z, Rx, Ry, Rz
|
||||||
|
n_exc = 2; % x, y, z
|
||||||
|
|
||||||
|
f = logspace(1, 3, 1000);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg-1) + n_dir, n_exc, :)))./((2*pi*freqs).^2)');
|
||||||
|
plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_exc}]), f, 'Hz'))));
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/N]');
|
||||||
|
hold off;
|
||||||
|
xlim([10, 1000]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
|
stages = {'gtop', 'ty', 'ry', 'rz', 'hexa'}
|
||||||
|
|
||||||
|
f = logspace(1, 3, 1000);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
for n_stg = 1:2
|
||||||
|
for n_dir = 1:3
|
||||||
|
subplot(3, 2, (n_dir-1)*2 + n_stg);
|
||||||
|
title(['F ', dirs{n_dir}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg) + n_dir, n_dir, :)))./((2*pi*freqs).^2)');
|
||||||
|
plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_dir}]), f, 'Hz'))));
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/N]');
|
||||||
|
hold off;
|
||||||
|
xlim([10, 1000]);
|
||||||
|
ylim([1e-12, 1e-6]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
|
stages = {'ry', 'rz', 'hexa'}
|
||||||
|
|
||||||
|
f = logspace(1, 3, 1000);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
for n_stg = 1:2
|
||||||
|
for n_dir = 1:3
|
||||||
|
subplot(3, 2, (n_dir-1)*2 + n_stg);
|
||||||
|
title(['F ', dirs{n_dir}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg+2) + n_dir, n_dir, :)))./((2*pi*freqs).^2)');
|
||||||
|
plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_dir}]), f, 'Hz'))));
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/N]');
|
||||||
|
hold off;
|
||||||
|
xlim([10, 1000]);
|
||||||
|
ylim([1e-12, 1e-6]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
|
stages = {'hexa'}
|
||||||
|
|
||||||
|
f = logspace(1, 3, 1000);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
for n_stg = 1
|
||||||
|
for n_dir = 1:3
|
||||||
|
subplot(3, 2, (n_dir-1)*2 + n_stg);
|
||||||
|
title(['F ', dirs{n_dir}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg+4) + n_dir, n_dir, :)))./((2*pi*freqs).^2)');
|
||||||
|
plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_dir}]), f, 'Hz'))));
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/N]');
|
||||||
|
hold off;
|
||||||
|
xlim([10, 1000]);
|
||||||
|
ylim([1e-12, 1e-6]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
For Granite Fx to Tx/Ty/Tz/Rx/Ry/Rz
|
||||||
|
#+begin_src matlab
|
||||||
|
dirs = {'x', 'y', 'z', 'rx', 'ry', 'rz'};
|
||||||
|
stages = {'gtop', 'ty', 'ry', 'rz', 'hexa'}
|
||||||
|
|
||||||
|
n_stg = 2;
|
||||||
|
n_exc = 2;
|
||||||
|
|
||||||
|
f = logspace(1, 3, 1000);
|
||||||
|
|
||||||
|
figure;
|
||||||
|
for n_dir = 1:6
|
||||||
|
subplot(2, 3, n_dir);
|
||||||
|
title(['F', dirs{n_exc}, ' to ', stages{n_stg}, ' ', dirs{n_dir}]);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs_CoM(6*(n_stg) + n_dir, n_exc, :)))./((2*pi*freqs).^2)');
|
||||||
|
plot(f, abs(squeeze(freqresp(G_ms([stages{n_stg}, '_', dirs{n_dir}], ['F', dirs{n_exc}]), f, 'Hz'))));
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
ylabel('Amplitude [m/N]');
|
||||||
|
hold off;
|
||||||
|
xlim([10, 1000]);
|
||||||
|
ylim([1e-12, 1e-6]);
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
* ZIP file containing the data and matlab files :ignore:
|
* ZIP file containing the data and matlab files :ignore:
|
||||||
#+begin_src bash :exports none :results none
|
#+begin_src bash :exports none :results none
|
||||||
if [ matlab/identification_micro_station.m -nt data/identification_micro_station.zip ]; then
|
if [ matlab/identification_micro_station.m -nt data/identification_micro_station.zip ]; then
|
||||||
|
|||||||
+3075
File diff suppressed because it is too large
Load Diff
+1895
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user