Rename mat files

This commit is contained in:
Thomas Dehaeze 2024-11-06 15:16:41 +01:00
parent 13a2e57322
commit 3ee0784e22
37 changed files with 247 additions and 212 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

After

Width:  |  Height:  |  Size: 111 KiB

BIN
matlab/mat/conf_log.mat Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
matlab/mat/nass_stages.mat Normal file

Binary file not shown.

View File

@ -9,7 +9,7 @@
% Outputs: % Outputs:
% - - % - -
load('./mat/conf_simscape.mat', 'conf_simscape'); load('./mat/nass_model_conf_simscape.mat', 'conf_simscape');
fprintf('Simscape Configuration:\n'); fprintf('Simscape Configuration:\n');
@ -21,7 +21,7 @@
fprintf('\n'); fprintf('\n');
load('./mat/nass_disturbances.mat', 'args'); load('./mat/nass_model_disturbances.mat', 'args');
fprintf('Disturbances:\n'); fprintf('Disturbances:\n');
if ~args.enable if ~args.enable
@ -30,7 +30,7 @@
if args.Dwx && args.Dwy && args.Dwz if args.Dwx && args.Dwy && args.Dwz
fprintf('- Ground motion\n'); fprintf('- Ground motion\n');
end end
if args.Fty_x && args.Fty_z if args.Fdy_x && args.Fdy_z
fprintf('- Vibrations of the Translation Stage\n'); fprintf('- Vibrations of the Translation Stage\n');
end end
if args.Frz_z if args.Frz_z
@ -39,7 +39,7 @@
end end
fprintf('\n'); fprintf('\n');
load('./mat/nass_references.mat', 'args'); load('./mat/nass_model_references.mat', 'args');
fprintf('Reference Tracking:\n'); fprintf('Reference Tracking:\n');
fprintf('- Translation Stage:\n'); fprintf('- Translation Stage:\n');
@ -93,13 +93,7 @@
fprintf('\n'); fprintf('\n');
load('./mat/controller.mat', 'controller'); load('./mat/nass_model_stages.mat', 'ground', 'granite', 'ty', 'ry', 'rz', 'micro_hexapod', 'axisc');
fprintf('Controller:\n');
fprintf('- %s\n', controller.name);
fprintf('\n');
load('./mat/stages.mat', 'ground', 'granite', 'ty', 'ry', 'rz', 'micro_hexapod', 'axisc');
fprintf('Micro Station:\n'); fprintf('Micro Station:\n');

View File

@ -205,7 +205,7 @@ Rz.y = Rz.y - Rz.y(1);
Rz.z = Rz.z - Rz.z(1); Rz.z = Rz.z - Rz.z(1);
if exist('./mat', 'dir') if exist('./mat', 'dir')
save('mat/nass_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args'); save('mat/nass_model_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args');
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
save('matlab/mat/nass_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args'); save('matlab/mat/nass_model_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args');
end end

View File

@ -31,15 +31,15 @@
granite.C = args.C; % [N/(m/s)] granite.C = args.C; % [N/(m/s)]
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/nass_stages.mat', 'file') if exist('./mat/nass_model_stages.mat', 'file')
save('mat/nass_stages.mat', 'granite', '-append'); save('mat/nass_model_stages.mat', 'granite', '-append');
else else
save('mat/nass_stages.mat', 'granite'); save('mat/nass_model_stages.mat', 'granite');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/nass_stages.mat', 'file') if exist('./matlab/mat/nass_model_stages.mat', 'file')
save('matlab/mat/nass_stages.mat', 'granite', '-append'); save('matlab/mat/nass_model_stages.mat', 'granite', '-append');
else else
save('matlab/mat/nass_stages.mat', 'granite'); save('matlab/mat/nass_model_stages.mat', 'granite');
end end
end end

View File

@ -20,15 +20,15 @@
ground.rot_point = args.rot_point; ground.rot_point = args.rot_point;
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/nass_stages.mat', 'file') if exist('./mat/nass_model_stages.mat', 'file')
save('mat/nass_stages.mat', 'ground', '-append'); save('mat/nass_model_stages.mat', 'ground', '-append');
else else
save('mat/nass_stages.mat', 'ground'); save('mat/nass_model_stages.mat', 'ground');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/nass_stages.mat', 'file') if exist('./matlab/mat/nass_model_stages.mat', 'file')
save('matlab/mat/nass_stages.mat', 'ground', '-append'); save('matlab/mat/nass_model_stages.mat', 'ground', '-append');
else else
save('matlab/mat/nass_stages.mat', 'ground'); save('matlab/mat/nass_model_stages.mat', 'ground');
end end
end end

View File

@ -19,15 +19,15 @@
conf_log.Ts = args.Ts; conf_log.Ts = args.Ts;
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/conf_log.mat', 'file') if exist('./mat/nass_model_conf_log.mat', 'file')
save('mat/conf_log.mat', 'conf_log', '-append'); save('mat/nass_model_conf_log.mat', 'conf_log', '-append');
else else
save('mat/conf_log.mat', 'conf_log'); save('mat/nass_model_conf_log.mat', 'conf_log');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/conf_log.mat', 'file') if exist('./matlab/mat/nass_model_conf_log.mat', 'file')
save('matlab/mat/conf_log.mat', 'conf_log', '-append'); save('matlab/mat/nass_model_conf_log.mat', 'conf_log', '-append');
else else
save('matlab/mat/conf_log.mat', 'conf_log'); save('matlab/mat/nass_model_conf_log.mat', 'conf_log');
end end
end end

View File

@ -93,15 +93,15 @@
micro_hexapod = stewart; micro_hexapod = stewart;
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/nass_stages.mat', 'file') if exist('./mat/nass_model_stages.mat', 'file')
save('mat/nass_stages.mat', 'micro_hexapod', '-append'); save('mat/nass_model_stages.mat', 'micro_hexapod', '-append');
else else
save('mat/nass_stages.mat', 'micro_hexapod'); save('mat/nass_model_stages.mat', 'micro_hexapod');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/nass_stages.mat', 'file') if exist('./matlab/mat/nass_model_stages.mat', 'file')
save('matlab/mat/nass_stages.mat', 'micro_hexapod', '-append'); save('matlab/mat/nass_model_stages.mat', 'micro_hexapod', '-append');
else else
save('matlab/mat/nass_stages.mat', 'micro_hexapod'); save('matlab/mat/nass_model_stages.mat', 'micro_hexapod');
end end
end end

View File

@ -157,7 +157,7 @@
case 'constant' case 'constant'
Dh = [args.Dh_pos, args.Dh_pos]; Dh = [args.Dh_pos, args.Dh_pos];
load('nass_stages.mat', 'micro_hexapod'); load('nass_model_stages.mat', 'micro_hexapod');
AP = [args.Dh_pos(1) ; args.Dh_pos(2) ; args.Dh_pos(3)]; AP = [args.Dh_pos(1) ; args.Dh_pos(2) ; args.Dh_pos(3)];
@ -185,15 +185,15 @@
Dhl = struct('time', t, 'signals', struct('values', Dhl)); Dhl = struct('time', t, 'signals', struct('values', Dhl));
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/nass_references.mat', 'file') if exist('./mat/nass_model_references.mat', 'file')
save('mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append'); save('mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append');
else else
save('mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts'); save('mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/nass_references.mat', 'file') if exist('./matlab/mat/nass_model_references.mat', 'file')
save('matlab/mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append'); save('matlab/mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append');
else else
save('matlab/mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts'); save('matlab/mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts');
end end
end end

View File

@ -40,15 +40,15 @@
ry.C = [1e5; 1e5; 1e5; 3e4; 1e3; 3e4]; ry.C = [1e5; 1e5; 1e5; 3e4; 1e3; 3e4];
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/nass_stages.mat', 'file') if exist('./mat/nass_model_stages.mat', 'file')
save('mat/nass_stages.mat', 'ry', '-append'); save('mat/nass_model_stages.mat', 'ry', '-append');
else else
save('mat/nass_stages.mat', 'ry'); save('mat/nass_model_stages.mat', 'ry');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/nass_stages.mat', 'file') if exist('./matlab/mat/nass_model_stages.mat', 'file')
save('matlab/mat/nass_stages.mat', 'ry', '-append'); save('matlab/mat/nass_model_stages.mat', 'ry', '-append');
else else
save('matlab/mat/nass_stages.mat', 'ry'); save('matlab/mat/nass_model_stages.mat', 'ry');
end end
end end

View File

@ -31,15 +31,15 @@
rz.C = [4e4; 4e4; 7e4; 1e4; 1e4; 1e4]; rz.C = [4e4; 4e4; 7e4; 1e4; 1e4; 1e4];
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/nass_stages.mat', 'file') if exist('./mat/nass_model_stages.mat', 'file')
save('mat/nass_stages.mat', 'rz', '-append'); save('mat/nass_model_stages.mat', 'rz', '-append');
else else
save('mat/nass_stages.mat', 'rz'); save('mat/nass_model_stages.mat', 'rz');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/nass_stages.mat', 'file') if exist('./matlab/mat/nass_model_stages.mat', 'file')
save('matlab/mat/nass_stages.mat', 'rz', '-append'); save('matlab/mat/nass_model_stages.mat', 'rz', '-append');
else else
save('matlab/mat/nass_stages.mat', 'rz'); save('matlab/mat/nass_model_stages.mat', 'rz');
end end
end end

View File

@ -13,15 +13,15 @@
end end
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/conf_simscape.mat', 'file') if exist('./mat/nass_model_conf_simscape.mat', 'file')
save('mat/conf_simscape.mat', 'conf_simscape', '-append'); save('mat/nass_model_conf_simscape.mat', 'conf_simscape', '-append');
else else
save('mat/conf_simscape.mat', 'conf_simscape'); save('mat/nass_model_conf_simscape.mat', 'conf_simscape');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/conf_simscape.mat', 'file') if exist('./matlab/mat/nass_model_conf_simscape.mat', 'file')
save('matlab/mat/conf_simscape.mat', 'conf_simscape', '-append'); save('matlab/mat/nass_model_conf_simscape.mat', 'conf_simscape', '-append');
else else
save('matlab/mat/conf_simscape.mat', 'conf_simscape'); save('matlab/mat/nass_model_conf_simscape.mat', 'conf_simscape');
end end
end end

View File

@ -55,15 +55,15 @@
ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 1e4]; % [N/(m/s), N*m/(rad/s)] ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 1e4]; % [N/(m/s), N*m/(rad/s)]
if exist('./mat', 'dir') if exist('./mat', 'dir')
if exist('./mat/nass_stages.mat', 'file') if exist('./mat/nass_model_stages.mat', 'file')
save('mat/nass_stages.mat', 'ty', '-append'); save('mat/nass_model_stages.mat', 'ty', '-append');
else else
save('mat/nass_stages.mat', 'ty'); save('mat/nass_model_stages.mat', 'ty');
end end
elseif exist('./matlab', 'dir') elseif exist('./matlab', 'dir')
if exist('./matlab/mat/nass_stages.mat', 'file') if exist('./matlab/mat/nass_model_stages.mat', 'file')
save('matlab/mat/nass_stages.mat', 'ty', '-append'); save('matlab/mat/nass_model_stages.mat', 'ty', '-append');
else else
save('matlab/mat/nass_stages.mat', 'ty'); save('matlab/mat/nass_model_stages.mat', 'ty');
end end
end end

Binary file not shown.

View File

@ -43,9 +43,9 @@
#+PROPERTY: header-args:latex+ :mkdirp yes #+PROPERTY: header-args:latex+ :mkdirp yes
#+PROPERTY: header-args:latex+ :output-dir figs #+PROPERTY: header-args:latex+ :output-dir figs
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png") #+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
:END:
#+latex: \clearpage #+latex: \clearpage
:END:
* Build :noexport: * Build :noexport:
#+NAME: startblock #+NAME: startblock
@ -314,6 +314,46 @@ Be able to pass custom =.mat= files (one mat file per disturbance)?
- Wait for Marc reply - Wait for Marc reply
** Backup - Kinematics ** Backup - Kinematics
*** Micro-Station DoF table
#+name: tab:ustation_dof_summary
#+caption: Summary of the micro-station degrees-of-freedom
#+attr_latex: :environment tabularx :width \linewidth :align lX
#+attr_latex: :center t :booktabs t
| *Stage* | *Degrees of Freedom* |
|-------------------+-------------------------------------------------------|
| Translation stage | $D_y = \pm 10\,mm$ |
| Tilt stage | $R_y = \pm 3\,\text{deg}$ |
| Spindle | $R_z = 360\,\text{deg}$ |
| Micro Hexapod | $D_{xyz} = \pm 10\,mm$, $R_{xyz} = \pm 3\,\text{deg}$ |
*** Stage specifications
Translation Stage
| Axial Motion ($y$) | Radial Motion ($y-z$) | Rotation motion ($\theta-z$) |
|--------------------+-----------------------+------------------------------|
| $40nm$ repeat | $20nm$ | $< 1.7 \mu rad$ |
Tilt stage
| Axial Error ($y$) | Radial Error ($z$) | Tilt error ($R_y$) |
|-------------------+--------------------+--------------------|
| $0.5\mu m$ | $10nm$ | $5 \mu rad$ repeat |
Spindle
| Radial Error ($x$-$y$) | Vertical Error ($z$) | Rz |
|------------------------+----------------------+----------------------------|
| $0.33\mu m$ | $0.07\mu m$ | $5\,\mu \text{rad}$ repeat |
Micro Hexapod
| Motion | Stroke | Repetability | MIM | Stiffness |
|------------------+--------------+----------------+--------------+---------------|
| $T_{\mu_x}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>12N/\mu m$ |
| $T_{\mu_y}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>12N/\mu m$ |
| $T_{\mu_z}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>135N/\mu m$ |
| $\theta_{\mu_x}$ | $\pm3 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | |
| $\theta_{\mu_y}$ | $\pm3 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | |
| $\theta_{\mu_z}$ | $\pm0.5 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | |
*** Frames *** Frames
Let's define the following frames: Let's define the following frames:
- $\{W\}$ the frame that is *fixed to the granite* and its origin at the theoretical meeting point between the X-ray and the spindle axis. - $\{W\}$ the frame that is *fixed to the granite* and its origin at the theoretical meeting point between the X-ray and the spindle axis.
@ -833,17 +873,18 @@ xlim([2, 500]);
* Introduction :ignore: * Introduction :ignore:
Introduction...
#+name: tab:ustation_section_matlab_code # #+name: tab:ustation_section_matlab_code
#+caption: Report sections and corresponding Matlab files # #+caption: Report sections and corresponding Matlab files
#+attr_latex: :environment tabularx :width 0.6\linewidth :align lX # #+attr_latex: :environment tabularx :width 0.6\linewidth :align lX
#+attr_latex: :center t :booktabs t # #+attr_latex: :center t :booktabs t
| *Sections* | *Matlab File* | # | *Sections* | *Matlab File* |
|---------------------------------------+-----------------------------| # |---------------------------------------+-----------------------------|
| Section ref:sec:ustation_kinematics | =ustation_1_kinematics.m= | # | Section ref:sec:ustation_kinematics | =ustation_1_kinematics.m= |
| Section ref:sec:ustation_modeling | =ustation_2_modeling.m= | # | Section ref:sec:ustation_modeling | =ustation_2_modeling.m= |
| Section ref:sec:ustation_disturbances | =ustation_3_disturbances.m= | # | Section ref:sec:ustation_disturbances | =ustation_3_disturbances.m= |
| Section ref:sec:ustation_experiments | =ustation_4_experiments.m= | # | Section ref:sec:ustation_experiments | =ustation_4_experiments.m= |
* Micro-Station Kinematics * Micro-Station Kinematics
:PROPERTIES: :PROPERTIES:
@ -854,26 +895,13 @@ xlim([2, 500]);
The micro-station consists of 4 stacked positioning stages (Figure ref:fig:ustation_cad_view). The micro-station consists of 4 stacked positioning stages (Figure ref:fig:ustation_cad_view).
From bottom to top, the stacked stages are the translation stage $D_y$, the tilt stage $R_y$, the rotation stage (Spindle) $R_z$ and the positioning hexapod. From bottom to top, the stacked stages are the translation stage $D_y$, the tilt stage $R_y$, the rotation stage (Spindle) $R_z$ and the positioning hexapod.
Such stacked architecture allows high mobility, but the overall stiffness is reduced and the dynamics is very complex. complex dynamics. Such stacked architecture allows high mobility, but the overall stiffness is reduced and the dynamics is very complex. complex dynamics.
The micro-station degrees-of-freedom are summarized in Table ref:tab:ustation_dof_summary.
#+name: fig:ustation_cad_view #+name: fig:ustation_cad_view
#+caption: CAD view of the micro-station with the translation stage (in blue), the tilt stage (in red), the rotation stage (in yellow) and the positioning hexapod (in purple). On top of these four stages, a solid part (shown in green) will be replaced by the stabilization stage. #+caption: CAD view of the micro-station with the translation stage (in blue), the tilt stage (in red), the rotation stage (in yellow) and the positioning hexapod (in purple). On top of these four stages, a solid part (shown in green) will be replaced by the stabilization stage.
#+attr_latex: :width \linewidth #+attr_latex: :width \linewidth
[[file:figs/ustation_cad_view.png]] [[file:figs/ustation_cad_view.png]]
#+name: tab:ustation_dof_summary
#+caption: Summary of the micro-station degrees-of-freedom
#+attr_latex: :environment tabularx :width \linewidth :align lX
#+attr_latex: :center t :booktabs t
| *Stage* | *Degrees of Freedom* |
|-------------------+-------------------------------------------------------|
| Translation stage | $D_y = \pm 10\,mm$ |
| Tilt stage | $R_y = \pm 3\,\text{deg}$ |
| Spindle | $R_z = 360\,\text{deg}$ |
| Micro Hexapod | $D_{xyz} = \pm 10\,mm$, $R_{xyz} = \pm 3\,\text{deg}$ |
There are different ways of modelling the stage dynamics in a multi-body model. There are different ways of modelling the stage dynamics in a multi-body model.
The one chosen in this work consists of modelling each stage by two solid bodies connected by one 6-DoF joint. The one chosen in this work consists of modelling each stage by two solid bodies connected by one 6-DoF joint.
The stiffness and damping properties of the joint can be tuned separately for each DoF. The stiffness and damping properties of the joint can be tuned separately for each DoF.
@ -922,14 +950,6 @@ An optical linear encoder is used to measure the stage motion and for PID contro
Four cylindrical bearings[fn:4] are used to guide the motion (i.e. minimize the parasitic motions) and have high stiffness. Four cylindrical bearings[fn:4] are used to guide the motion (i.e. minimize the parasitic motions) and have high stiffness.
#+name: fig:ustation_ty_stage
#+caption: Translation Stage
[[file:figs/ustation_ty_stage.png]]
# | Axial Motion ($y$) | Radial Motion ($y-z$) | Rotation motion ($\theta-z$) |
# |--------------------+-----------------------+------------------------------|
# | $40nm$ repeat | $20nm$ | $< 1.7 \mu rad$ |
**** Tilt Stage **** Tilt Stage
The tilt stage is guided by four linear motion guides[fn:1] which are placed such that the center of rotation coincide with the X-ray beam. The tilt stage is guided by four linear motion guides[fn:1] which are placed such that the center of rotation coincide with the X-ray beam.
@ -940,13 +960,21 @@ This stage can also be used to tilt the rotation axis of the Spindle.
To precisely control the $R_y$ angle, a stepper motor as well as two optical encoders are used in a PID feedback loop. To precisely control the $R_y$ angle, a stepper motor as well as two optical encoders are used in a PID feedback loop.
#+attr_latex: :options [b]{0.48\linewidth}
#+begin_minipage
#+name: fig:ustation_ty_stage
#+caption: Translation Stage
#+attr_latex: :scale 1 :float nil
[[file:figs/ustation_ty_stage.png]]
#+end_minipage
\hfill
#+attr_latex: :options [b]{0.48\linewidth}
#+begin_minipage
#+name: fig:ustation_ry_stage #+name: fig:ustation_ry_stage
#+caption: Tilt Stage #+caption: Tilt Stage
#+attr_latex: :scale 1 :float nil
[[file:figs/ustation_ry_stage.png]] [[file:figs/ustation_ry_stage.png]]
#+end_minipage
# | Axial Error ($y$) | Radial Error ($z$) | Tilt error ($R_y$) |
# |-------------------+--------------------+--------------------|
# | $0.5\mu m$ | $10nm$ | $5 \mu rad$ repeat |
**** Spindle **** Spindle
@ -955,14 +983,6 @@ It is composed of an air bearing spindle[fn:2], whose angular position is contro
Additional rotary unions and slip-rings to be able to pass through the rotation many electrical signals and fluids and gazes. Additional rotary unions and slip-rings to be able to pass through the rotation many electrical signals and fluids and gazes.
#+name: fig:ustation_rz_stage
#+caption: Rotation Stage (Spindle)
[[file:figs/ustation_rz_stage.png]]
# | Radial Error ($x$-$y$) | Vertical Error ($z$) | Rz |
# |------------------------+----------------------+----------------------------|
# | $0.33\mu m$ | $0.07\mu m$ | $5\,\mu \text{rad}$ repeat |
**** Micro-Hexapod **** Micro-Hexapod
Finally, a Stewart platform[fn:3] is used to position the sample. Finally, a Stewart platform[fn:3] is used to position the sample.
@ -971,18 +991,21 @@ It includes a DC motor and an optical linear encoders in each of the six strut.
It is used to position the point of interest of the sample with respect to the spindle rotation axis. It is used to position the point of interest of the sample with respect to the spindle rotation axis.
It can also be used to precisely position the PoI vertically with respect to the x-ray. It can also be used to precisely position the PoI vertically with respect to the x-ray.
#+attr_latex: :options [t]{0.49\linewidth}
#+begin_minipage
#+name: fig:ustation_rz_stage
#+caption: Rotation Stage (Spindle)
#+attr_latex: :scale 1 :float nil
[[file:figs/ustation_rz_stage.png]]
#+end_minipage
\hfill
#+attr_latex: :options [t]{0.49\linewidth}
#+begin_minipage
#+name: fig:ustation_hexapod_stage #+name: fig:ustation_hexapod_stage
#+caption: Micro Hexapod #+caption: Micro Hexapod
#+attr_latex: :scale 1 :float nil
[[file:figs/ustation_hexapod_stage.png]] [[file:figs/ustation_hexapod_stage.png]]
#+end_minipage
# | Motion | Stroke | Repetability | MIM | Stiffness |
# |------------------+--------------+----------------+--------------+---------------|
# | $T_{\mu_x}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>12N/\mu m$ |
# | $T_{\mu_y}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>12N/\mu m$ |
# | $T_{\mu_z}$ | $\pm10mm$ | $\pm1\mu m$ | $0.5\mu m$ | $>135N/\mu m$ |
# | $\theta_{\mu_x}$ | $\pm3 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | |
# | $\theta_{\mu_y}$ | $\pm3 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | |
# | $\theta_{\mu_z}$ | $\pm0.5 deg$ | $\pm5 \mu rad$ | $2.5\mu rad$ | |
** Mathematical description of a rigid body motion ** Mathematical description of a rigid body motion
<<ssec:ustation_motion_description>> <<ssec:ustation_motion_description>>
@ -1789,13 +1812,13 @@ exportFig('figs/ustation_frf_compliance_Rxyz.pdf', 'width', 'half', 'height', 'n
#+caption: Measured FRF of the compliance of the micro-station expressed in frame $\{\mathcal{X}\}$. Both translation terms (\subref{fig:ustation_frf_compliance_xyz}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz}) are displayed. #+caption: Measured FRF of the compliance of the micro-station expressed in frame $\{\mathcal{X}\}$. Both translation terms (\subref{fig:ustation_frf_compliance_xyz}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz}) are displayed.
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_xyz}sub caption a} #+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_xyz}Compliance in translation}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :width 0.95\linewidth #+attr_latex: :width 0.95\linewidth
[[file:figs/ustation_frf_compliance_xyz.png]] [[file:figs/ustation_frf_compliance_xyz.png]]
#+end_subfigure #+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_Rxyz}sub caption b} #+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_Rxyz}Compliance in rotation}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :width 0.95\linewidth #+attr_latex: :width 0.95\linewidth
@ -1886,13 +1909,13 @@ exportFig('figs/ustation_frf_compliance_Rxyz_model.pdf', 'width', 'half', 'heigh
#+caption: Measured FRF of the compliance of the micro-station expressed in frame $\{\mathcal{X}\}$. Both translation terms (\subref{fig:ustation_frf_compliance_xyz_model}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz_model}) are displayed. #+caption: Measured FRF of the compliance of the micro-station expressed in frame $\{\mathcal{X}\}$. Both translation terms (\subref{fig:ustation_frf_compliance_xyz_model}) and rotational terms (\subref{fig:ustation_frf_compliance_Rxyz_model}) are displayed.
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_xyz_model}sub caption a} #+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_xyz_model}Compliance in translation}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :width 0.95\linewidth #+attr_latex: :width 0.95\linewidth
[[file:figs/ustation_frf_compliance_xyz_model.png]] [[file:figs/ustation_frf_compliance_xyz_model.png]]
#+end_subfigure #+end_subfigure
#+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_Rxyz_model}sub caption b} #+attr_latex: :caption \subcaption{\label{fig:ustation_frf_compliance_Rxyz_model}Compliance in rotation}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
#+begin_subfigure #+begin_subfigure
#+attr_latex: :width 0.95\linewidth #+attr_latex: :width 0.95\linewidth
@ -2606,6 +2629,10 @@ exportFig('figs/ustation_dist_source_ground_motion_time.pdf', 'width', 'third',
** Introduction :ignore: ** Introduction :ignore:
In order to fully validate the micro-station multi-body model, two time domain simulations corresponding to typical use cases are performed.
First, a tomography experiment (i.e. a constant Spindle rotation) is performed and compared with experimental measurements (Section ref:sec:ustation_experiments_tomography).
Second, a constant velocity scans with the translation stage is performed and also compared with experimental data (Section ref:sec:ustation_experiments_ty_scans).
** Matlab Init :noexport:ignore: ** Matlab Init :noexport:ignore:
#+begin_src matlab #+begin_src matlab
@ -2628,16 +2655,23 @@ exportFig('figs/ustation_dist_source_ground_motion_time.pdf', 'width', 'third',
<<m-init-path-tangle>> <<m-init-path-tangle>>
#+end_src #+end_src
#+begin_src matlab :noweb yes
<<m-init-simscape>>
#+end_src
#+begin_src matlab :noweb yes #+begin_src matlab :noweb yes
<<m-init-other>> <<m-init-other>>
#+end_src #+end_src
** Tomography Experiment ** Tomography Experiment
60rpm <<sec:ustation_experiments_tomography>>
ground motion + spindle vibrations
Measurement of the PoI position with respect to the granite To simulate a tomography experiment, the setpoint of the Spindle is configured to perform a constant rotation with a rotational velocity of 60rpm.
Both ground motion and spindle vibration disturbances are simulation based on what was computed in Section ref:sec:ustation_disturbances.
A radial offset of $\approx 1\,\mu m$ between the "point-of-interest" and the spindle's rotation axis is introduced to represent what is experimentally observed.
During the 10 second simulation (i.e. 10 spindle turns), the position of the "point-of-interest" with respect to the granite is recorded.
Results are shown in Figure ref:fig:ustation_errors_model_spindle. Results are shown in Figure ref:fig:ustation_errors_model_spindle.
Great match with measurements of Figure ref:fig:ustation_errors_spindle. A good correlation with the measurements are observed both for radial errors (Figure ref:fig:ustation_errors_model_spindle_radial) and axial errors (Figure ref:fig:ustation_errors_model_spindle_axial).
#+begin_src matlab #+begin_src matlab
%% Tomography experiment %% Tomography experiment
@ -2705,8 +2739,8 @@ exportFig('figs/ustation_errors_model_spindle_radial.pdf', 'width', 'half', 'hei
%% Measured axial errors of the Spindle %% Measured axial errors of the Spindle
figure; figure;
hold on; hold on;
plot(spindle_errors.deg(1:100:end)/360, 1e9*spindle_errors.Dz(1:100:end), 'DisplayName', 'Measurements') plot(spindle_errors.deg(1:100:end)/360, detrend(1e9*spindle_errors.Dz(1:100:end), 0), 'DisplayName', 'Measurements')
plot(exp_tomography.y.z.Time, 1e9*exp_tomography.y.z.Data, 'DisplayName', 'Simulation') plot(exp_tomography.y.z.Time, detrend(1e9*exp_tomography.y.z.Data, 0), 'DisplayName', 'Simulation')
hold off; hold off;
xlabel('Rotation [turn]'); ylabel('Z displacement [nm]'); xlabel('Rotation [turn]'); ylabel('Z displacement [nm]');
axis square axis square
@ -2720,7 +2754,7 @@ exportFig('figs/ustation_errors_model_spindle_axial.pdf', 'width', 'half', 'heig
#+end_src #+end_src
#+name: fig:ustation_errors_model_spindle #+name: fig:ustation_errors_model_spindle
#+caption: Measurement of strut flexible modes #+caption: Simulation results for a tomography experiment with a constant velocity of 60rpm. The comparison is made with measurements both for radial (\subref{fig:ustation_errors_model_spindle_radial}) and axial errors (\subref{fig:ustation_errors_model_spindle_axial}).
#+attr_latex: :options [htbp] #+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:ustation_errors_model_spindle_radial}Radial error} #+attr_latex: :caption \subcaption{\label{fig:ustation_errors_model_spindle_radial}Radial error}
@ -2738,17 +2772,17 @@ exportFig('figs/ustation_errors_model_spindle_axial.pdf', 'width', 'half', 'heig
#+end_figure #+end_figure
** Raster Scans with the translation stage ** Raster Scans with the translation stage
<<sec:ustation_experiments_ty_scans>>
A second experiment is performed in which the translation stage is scanned with a constant velocity.
+/-5mm constant velocity scans. The translation stage setpoint is configured to have a "triangular" shape with stroke of $\pm 4.5\, mm$.
ground motion + translation stage vibrations Both ground motion and translation stage vibrations are included in the simulation.
Measurement of the PoI position with respect to the granite Similar to what was performed for the tomography simulation, the PoI position with respect to the granite is recorded and compared with experimental measurements in Figure ref:fig:ustation_errors_model_dy_vertical.
Results are shown in Figure ref:fig:ustation_errors_model_spindle. Similar error amplitude can be observed, thus indicating that the multi-body model with included disturbances is accurately representing the micro-station behavior for typical scientific experiments.
Great match with measurements of Figure ref:fig:ustation_errors_spindle.
#+begin_src matlab #+begin_src matlab
%% Translation stage latteral scans %% Translation stage latteral scans
set_param(conf_simulink, 'StopTime', '4'); set_param(conf_simulink, 'StopTime', '2');
initializeGround(); initializeGround();
initializeGranite(); initializeGranite();
@ -2772,27 +2806,32 @@ initializeDisturbances(...
initializeReferences(... initializeReferences(...
'Dy_type', 'triangular', ... 'Dy_type', 'triangular', ...
'Dy_amplitude', 5e-3, ... 'Dy_amplitude', 4.5e-3, ...
'Dy_period', 4); 'Dy_period', 2);
sim(mdl); sim(mdl);
exp_latteral_scans = simout; exp_latteral_scans = simout;
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
%% Load the experimentally measured errors % Load the experimentally measured errors
ty_errors = load('ustation_errors_ty.mat'); ty_errors = load('ustation_errors_ty.mat');
% Compute best straight line to remove it from data % Compute best straight line to remove it from data
average_error = mean(ty_errors.ty_z')'; average_error = mean(ty_errors.ty_z')';
straight_line = average_error - detrend(average_error, 1); straight_line = average_error - detrend(average_error, 1);
% Only plot data for the scan from -4.5mm to 4.5mm
dy_setpoint = 1e3*exp_latteral_scans.y.y.Data(exp_latteral_scans.y.y.time > 0.5 & exp_latteral_scans.y.y.time < 1.5);
dz_error = detrend(1e6*exp_latteral_scans.y.z.Data(exp_latteral_scans.y.y.time > 0.5 & exp_latteral_scans.y.y.time < 1.5), 0);
#+end_src #+end_src
#+begin_src matlab :exports none :results none #+begin_src matlab :exports none :results none
figure; figure;
hold on; hold on;
plot(ty_errors.setpoint, ty_errors.ty_z(:,1) - straight_line, 'DisplayName', 'Measurement') plot(ty_errors.setpoint, detrend(ty_errors.ty_z(:,1) - straight_line, 0), 'color', colors(1,:), 'DisplayName', 'Measurement')
plot(1e3*exp_latteral_scans.y.y.Data, 1e6*exp_latteral_scans.y.z.Data, 'DisplayName', 'Simulation') % plot(ty_errors.setpoint, detrend(ty_errors.ty_z(:,[4,6]) - straight_line, 0), 'color', colors(1,:), 'HandleVisibility', 'off')
plot(dy_setpoint, dz_error, 'color', colors(2,:), 'DisplayName', 'Simulation')
hold off; hold off;
xlabel('$D_y$ position [mm]'); ylabel('Vertical error [$\mu$m]'); xlabel('$D_y$ position [mm]'); ylabel('Vertical error [$\mu$m]');
xlim([-5, 5]); ylim([-0.4, 0.4]); xlim([-5, 5]); ylim([-0.4, 0.4]);
@ -2800,13 +2839,14 @@ leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
leg.ItemTokenSize(1) = 15; leg.ItemTokenSize(1) = 15;
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file none #+begin_src matlab :tangle no :exports results :results file replace
xticks([-5:1:5]); yticks([-0.4:0.1:0.4]); xticks([-5:1:5]); yticks([-0.4:0.1:0.4]);
exportFig('figs/ustation_errors_model_dy_vertical.pdf', 'width', 'half', 'height', 'normal'); exportFig('figs/ustation_errors_model_dy_vertical.pdf', 'width', 'half', 'height', 'normal');
#+end_src #+end_src
#+name: fig:ustation_errors_model_dy_vertical #+name: fig:ustation_errors_model_dy_vertical
#+caption: Figure caption #+caption: Vertical errors during a constant velocity scan of the translation stage. Comparison of the measurements and simulated errors.
#+RESULTS:
[[file:figs/ustation_errors_model_dy_vertical.png]] [[file:figs/ustation_errors_model_dy_vertical.png]]
* Conclusion * Conclusion

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2024-11-06 Wed 12:01 % Created 2024-11-06 Wed 15:14
% Intended LaTeX compiler: pdflatex % Intended LaTeX compiler: pdflatex
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
@ -22,30 +22,16 @@
\maketitle \maketitle
\tableofcontents \tableofcontents
\clearpage
\begin{table}[htbp] Introduction\ldots{}
\centering
\begin{tabularx}{0.6\linewidth}{lX}
\toprule
\textbf{Sections} & \textbf{Matlab File}\\
\midrule
Section \ref{sec:ustation_kinematics} & \texttt{ustation\_1\_kinematics.m}\\
Section \ref{sec:ustation_modeling} & \texttt{ustation\_2\_modeling.m}\\
Section \ref{sec:ustation_disturbances} & \texttt{ustation\_3\_disturbances.m}\\
Section \ref{sec:ustation_experiments} & \texttt{ustation\_4\_experiments.m}\\
\bottomrule
\end{tabularx}
\caption{\label{tab:ustation_section_matlab_code}Report sections and corresponding Matlab files}
\end{table}
\chapter{Micro-Station Kinematics} \chapter{Micro-Station Kinematics}
\label{sec:ustation_kinematics} \label{sec:ustation_kinematics}
The micro-station consists of 4 stacked positioning stages (Figure \ref{fig:ustation_cad_view}). The micro-station consists of 4 stacked positioning stages (Figure \ref{fig:ustation_cad_view}).
From bottom to top, the stacked stages are the translation stage \(D_y\), the tilt stage \(R_y\), the rotation stage (Spindle) \(R_z\) and the positioning hexapod. From bottom to top, the stacked stages are the translation stage \(D_y\), the tilt stage \(R_y\), the rotation stage (Spindle) \(R_z\) and the positioning hexapod.
Such stacked architecture allows high mobility, but the overall stiffness is reduced and the dynamics is very complex. complex dynamics. Such stacked architecture allows high mobility, but the overall stiffness is reduced and the dynamics is very complex. complex dynamics.
The micro-station degrees-of-freedom are summarized in Table \ref{tab:ustation_dof_summary}.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
@ -53,22 +39,6 @@ The micro-station degrees-of-freedom are summarized in Table \ref{tab:ustation_d
\caption{\label{fig:ustation_cad_view}CAD view of the micro-station with the translation stage (in blue), the tilt stage (in red), the rotation stage (in yellow) and the positioning hexapod (in purple). On top of these four stages, a solid part (shown in green) will be replaced by the stabilization stage.} \caption{\label{fig:ustation_cad_view}CAD view of the micro-station with the translation stage (in blue), the tilt stage (in red), the rotation stage (in yellow) and the positioning hexapod (in purple). On top of these four stages, a solid part (shown in green) will be replaced by the stabilization stage.}
\end{figure} \end{figure}
\begin{table}[htbp]
\centering
\begin{tabularx}{\linewidth}{lX}
\toprule
\textbf{Stage} & \textbf{Degrees of Freedom}\\
\midrule
Translation stage & \(D_y = \pm 10\,mm\)\\
Tilt stage & \(R_y = \pm 3\,\text{deg}\)\\
Spindle & \(R_z = 360\,\text{deg}\)\\
Micro Hexapod & \(D_{xyz} = \pm 10\,mm\), \(R_{xyz} = \pm 3\,\text{deg}\)\\
\bottomrule
\end{tabularx}
\caption{\label{tab:ustation_dof_summary}Summary of the micro-station degrees-of-freedom}
\end{table}
There are different ways of modelling the stage dynamics in a multi-body model. There are different ways of modelling the stage dynamics in a multi-body model.
The one chosen in this work consists of modelling each stage by two solid bodies connected by one 6-DoF joint. The one chosen in this work consists of modelling each stage by two solid bodies connected by one 6-DoF joint.
The stiffness and damping properties of the joint can be tuned separately for each DoF. The stiffness and damping properties of the joint can be tuned separately for each DoF.
@ -87,13 +57,6 @@ An optical linear encoder is used to measure the stage motion and for PID contro
Four cylindrical bearings\footnote{Ball cage (N501) and guide bush (N550) from Mahr are used} are used to guide the motion (i.e. minimize the parasitic motions) and have high stiffness. Four cylindrical bearings\footnote{Ball cage (N501) and guide bush (N550) from Mahr are used} are used to guide the motion (i.e. minimize the parasitic motions) and have high stiffness.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/ustation_ty_stage.png}
\caption{\label{fig:ustation_ty_stage}Translation Stage}
\end{figure}
\paragraph{Tilt Stage} \paragraph{Tilt Stage}
The tilt stage is guided by four linear motion guides\footnote{HCR 35 A C1, from THK} which are placed such that the center of rotation coincide with the X-ray beam. The tilt stage is guided by four linear motion guides\footnote{HCR 35 A C1, from THK} which are placed such that the center of rotation coincide with the X-ray beam.
@ -104,12 +67,19 @@ This stage can also be used to tilt the rotation axis of the Spindle.
To precisely control the \(R_y\) angle, a stepper motor as well as two optical encoders are used in a PID feedback loop. To precisely control the \(R_y\) angle, a stepper motor as well as two optical encoders are used in a PID feedback loop.
\begin{figure}[htbp] \begin{minipage}[b]{0.48\linewidth}
\centering \begin{center}
\includegraphics[scale=1]{figs/ustation_ry_stage.png} \includegraphics[scale=1,scale=1]{figs/ustation_ty_stage.png}
\caption{\label{fig:ustation_ry_stage}Tilt Stage} \captionof{figure}{\label{fig:ustation_ty_stage}Translation Stage}
\end{figure} \end{center}
\end{minipage}
\hfill
\begin{minipage}[b]{0.48\linewidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/ustation_ry_stage.png}
\captionof{figure}{\label{fig:ustation_ry_stage}Tilt Stage}
\end{center}
\end{minipage}
\paragraph{Spindle} \paragraph{Spindle}
@ -118,13 +88,6 @@ It is composed of an air bearing spindle\footnote{Made by LAB Motion Systems}, w
Additional rotary unions and slip-rings to be able to pass through the rotation many electrical signals and fluids and gazes. Additional rotary unions and slip-rings to be able to pass through the rotation many electrical signals and fluids and gazes.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/ustation_rz_stage.png}
\caption{\label{fig:ustation_rz_stage}Rotation Stage (Spindle)}
\end{figure}
\paragraph{Micro-Hexapod} \paragraph{Micro-Hexapod}
Finally, a Stewart platform\footnote{Modified Zonda Hexapod by Symetrie} is used to position the sample. Finally, a Stewart platform\footnote{Modified Zonda Hexapod by Symetrie} is used to position the sample.
@ -133,12 +96,19 @@ It includes a DC motor and an optical linear encoders in each of the six strut.
It is used to position the point of interest of the sample with respect to the spindle rotation axis. It is used to position the point of interest of the sample with respect to the spindle rotation axis.
It can also be used to precisely position the PoI vertically with respect to the x-ray. It can also be used to precisely position the PoI vertically with respect to the x-ray.
\begin{figure}[htbp] \begin{minipage}[t]{0.49\linewidth}
\centering \begin{center}
\includegraphics[scale=1]{figs/ustation_hexapod_stage.png} \includegraphics[scale=1,scale=1]{figs/ustation_rz_stage.png}
\caption{\label{fig:ustation_hexapod_stage}Micro Hexapod} \captionof{figure}{\label{fig:ustation_rz_stage}Rotation Stage (Spindle)}
\end{figure} \end{center}
\end{minipage}
\hfill
\begin{minipage}[t]{0.49\linewidth}
\begin{center}
\includegraphics[scale=1,scale=1]{figs/ustation_hexapod_stage.png}
\captionof{figure}{\label{fig:ustation_hexapod_stage}Micro Hexapod}
\end{center}
\end{minipage}
\section{Mathematical description of a rigid body motion} \section{Mathematical description of a rigid body motion}
\label{ssec:ustation_motion_description} \label{ssec:ustation_motion_description}
@ -788,13 +758,21 @@ Examples of obtained time domain disturbance signals are shown in Figure \ref{fi
\chapter{Simulation of Scientific Experiments} \chapter{Simulation of Scientific Experiments}
\label{sec:ustation_experiments} \label{sec:ustation_experiments}
\begin{itemize} In order to fully validate the micro-station multi-body model, two time domain simulations corresponding to typical use cases are performed.
\item[{$\square$}] Perfect tomography => no error
\item[{$\square$}] Add vibrations and some off-center => results, compare with measurements First, a tomography experiment (i.e. a constant Spindle rotation) is performed and compared with experimental measurements (Section \ref{sec:ustation_experiments_tomography}).
\item[{$\square$}] Ty scans (-4.5mm to 4.5mm) => compare with measurements Second, a constant velocity scans with the translation stage is performed and also compared with experimental data (Section \ref{sec:ustation_experiments_ty_scans}).
\end{itemize}
\section{Tomography Experiment} \section{Tomography Experiment}
\label{sec:ustation_experiments_tomography}
To simulate a tomography experiment, the setpoint of the Spindle is configured to perform a constant rotation with a rotational velocity of 60rpm.
Both ground motion and spindle vibration disturbances are simulation based on what was computed in Section \ref{sec:ustation_disturbances}.
A radial offset of \(\approx 1\,\mu m\) between the ``point-of-interest'' and the spindle's rotation axis is introduced to represent what is experimentally observed.
During the 10 second simulation (i.e. 10 spindle turns), the position of the ``point-of-interest'' with respect to the granite is recorded.
Results are shown in Figure \ref{fig:ustation_errors_model_spindle}.
A good correlation with the measurements are observed both for radial errors (Figure \ref{fig:ustation_errors_model_spindle_radial}) and axial errors (Figure \ref{fig:ustation_errors_model_spindle_axial}).
\begin{figure}[htbp] \begin{figure}[htbp]
\begin{subfigure}{0.49\textwidth} \begin{subfigure}{0.49\textwidth}
\begin{center} \begin{center}
@ -808,13 +786,36 @@ Examples of obtained time domain disturbance signals are shown in Figure \ref{fi
\end{center} \end{center}
\subcaption{\label{fig:ustation_errors_model_spindle_axial}Axial error} \subcaption{\label{fig:ustation_errors_model_spindle_axial}Axial error}
\end{subfigure} \end{subfigure}
\caption{\label{fig:ustation_errors_model_spindle}Measurement of strut flexible modes} \caption{\label{fig:ustation_errors_model_spindle}Simulation results for a tomography experiment with a constant velocity of 60rpm. The comparison is made with measurements both for radial (\subref{fig:ustation_errors_model_spindle_radial}) and axial errors (\subref{fig:ustation_errors_model_spindle_axial}).}
\end{figure} \end{figure}
\section{Raster Scans with the translation stage} \section{Raster Scans with the translation stage}
\label{sec:ustation_experiments_ty_scans}
A second experiment is performed in which the translation stage is scanned with a constant velocity.
The translation stage setpoint is configured to have a ``triangular'' shape with stroke of \(\pm 4.5\, mm\).
Both ground motion and translation stage vibrations are included in the simulation.
Similar to what was performed for the tomography simulation, the PoI position with respect to the granite is recorded and compared with experimental measurements in Figure \ref{fig:ustation_errors_model_dy_vertical}.
Similar error amplitude can be observed, thus indicating that the multi-body model with included disturbances is accurately representing the micro-station behavior for typical scientific experiments.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/ustation_errors_model_dy_vertical.png}
\caption{\label{fig:ustation_errors_model_dy_vertical}Vertical errors during a constant velocity scan of the translation stage. Comparison of the measurements and simulated errors.}
\end{figure}
\chapter{Conclusion} \chapter{Conclusion}
\label{sec:uniaxial_conclusion} \label{sec:uniaxial_conclusion}
In order to have good model:
\begin{itemize}
\item kinematics
\item dynamics
\item disturbances
\end{itemize}
Validated with time domain simulations.
\printbibliography[heading=bibintoc,title={Bibliography}] \printbibliography[heading=bibintoc,title={Bibliography}]
\end{document} \end{document}