Add tilt flexibility to granite
This commit is contained in:
parent
cdbd62b3ee
commit
3745bbebee
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<Info Ref="simscape" Type="Relative" />
|
@ -1,2 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
|
||||||
<Info Ref="identification" Type="Relative" />
|
|
@ -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
simscape/index.html
Normal file
3075
simscape/index.html
Normal file
File diff suppressed because it is too large
Load Diff
1895
simscape/index.org
Normal file
1895
simscape/index.org
Normal file
File diff suppressed because it is too large
Load Diff
BIN
simscape/sim_micro_station_id.slx
Normal file
BIN
simscape/sim_micro_station_id.slx
Normal file
Binary file not shown.
Binary file not shown.
BIN
simscape/sim_micro_station_modal_analysis.slx
Normal file
BIN
simscape/sim_micro_station_modal_analysis.slx
Normal file
Binary file not shown.
BIN
simscape/sim_micro_station_modal_analysis_com.slx
Normal file
BIN
simscape/sim_micro_station_modal_analysis_com.slx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user