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:
|
||||
|
||||
* 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:
|
||||
- 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.
|
||||
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:
|
||||
#+begin_src bash :exports none :results none
|
||||
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