Rename mat files
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 2.5 MiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 111 KiB |
BIN
matlab/mat/conf_log.mat
Normal file
BIN
matlab/mat/conf_simscape.mat
Normal file
BIN
matlab/mat/nass_disturbances.mat
Normal file
BIN
matlab/mat/nass_references.mat
Normal file
BIN
matlab/mat/nass_stages.mat
Normal file
@ -9,7 +9,7 @@
|
||||
% Outputs:
|
||||
% - -
|
||||
|
||||
load('./mat/conf_simscape.mat', 'conf_simscape');
|
||||
load('./mat/nass_model_conf_simscape.mat', 'conf_simscape');
|
||||
|
||||
fprintf('Simscape Configuration:\n');
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
fprintf('\n');
|
||||
|
||||
load('./mat/nass_disturbances.mat', 'args');
|
||||
load('./mat/nass_model_disturbances.mat', 'args');
|
||||
|
||||
fprintf('Disturbances:\n');
|
||||
if ~args.enable
|
||||
@ -30,7 +30,7 @@
|
||||
if args.Dwx && args.Dwy && args.Dwz
|
||||
fprintf('- Ground motion\n');
|
||||
end
|
||||
if args.Fty_x && args.Fty_z
|
||||
if args.Fdy_x && args.Fdy_z
|
||||
fprintf('- Vibrations of the Translation Stage\n');
|
||||
end
|
||||
if args.Frz_z
|
||||
@ -39,7 +39,7 @@
|
||||
end
|
||||
fprintf('\n');
|
||||
|
||||
load('./mat/nass_references.mat', 'args');
|
||||
load('./mat/nass_model_references.mat', 'args');
|
||||
|
||||
fprintf('Reference Tracking:\n');
|
||||
fprintf('- Translation Stage:\n');
|
||||
@ -93,13 +93,7 @@
|
||||
|
||||
fprintf('\n');
|
||||
|
||||
load('./mat/controller.mat', 'controller');
|
||||
|
||||
fprintf('Controller:\n');
|
||||
fprintf('- %s\n', controller.name);
|
||||
fprintf('\n');
|
||||
|
||||
load('./mat/stages.mat', 'ground', 'granite', 'ty', 'ry', 'rz', 'micro_hexapod', 'axisc');
|
||||
load('./mat/nass_model_stages.mat', 'ground', 'granite', 'ty', 'ry', 'rz', 'micro_hexapod', 'axisc');
|
||||
|
||||
fprintf('Micro Station:\n');
|
||||
|
||||
|
@ -205,7 +205,7 @@ Rz.y = Rz.y - Rz.y(1);
|
||||
Rz.z = Rz.z - Rz.z(1);
|
||||
|
||||
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')
|
||||
save('matlab/mat/nass_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args');
|
||||
save('matlab/mat/nass_model_disturbances.mat', 'Dw', 'Dy', 'Rz', 'Fd', 'args');
|
||||
end
|
||||
|
@ -31,15 +31,15 @@
|
||||
granite.C = args.C; % [N/(m/s)]
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/nass_stages.mat', 'file')
|
||||
save('mat/nass_stages.mat', 'granite', '-append');
|
||||
if exist('./mat/nass_model_stages.mat', 'file')
|
||||
save('mat/nass_model_stages.mat', 'granite', '-append');
|
||||
else
|
||||
save('mat/nass_stages.mat', 'granite');
|
||||
save('mat/nass_model_stages.mat', 'granite');
|
||||
end
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/nass_stages.mat', 'file')
|
||||
save('matlab/mat/nass_stages.mat', 'granite', '-append');
|
||||
if exist('./matlab/mat/nass_model_stages.mat', 'file')
|
||||
save('matlab/mat/nass_model_stages.mat', 'granite', '-append');
|
||||
else
|
||||
save('matlab/mat/nass_stages.mat', 'granite');
|
||||
save('matlab/mat/nass_model_stages.mat', 'granite');
|
||||
end
|
||||
end
|
||||
|
@ -20,15 +20,15 @@
|
||||
ground.rot_point = args.rot_point;
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/nass_stages.mat', 'file')
|
||||
save('mat/nass_stages.mat', 'ground', '-append');
|
||||
if exist('./mat/nass_model_stages.mat', 'file')
|
||||
save('mat/nass_model_stages.mat', 'ground', '-append');
|
||||
else
|
||||
save('mat/nass_stages.mat', 'ground');
|
||||
save('mat/nass_model_stages.mat', 'ground');
|
||||
end
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/nass_stages.mat', 'file')
|
||||
save('matlab/mat/nass_stages.mat', 'ground', '-append');
|
||||
if exist('./matlab/mat/nass_model_stages.mat', 'file')
|
||||
save('matlab/mat/nass_model_stages.mat', 'ground', '-append');
|
||||
else
|
||||
save('matlab/mat/nass_stages.mat', 'ground');
|
||||
save('matlab/mat/nass_model_stages.mat', 'ground');
|
||||
end
|
||||
end
|
||||
|
@ -19,15 +19,15 @@
|
||||
conf_log.Ts = args.Ts;
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/conf_log.mat', 'file')
|
||||
save('mat/conf_log.mat', 'conf_log', '-append');
|
||||
if exist('./mat/nass_model_conf_log.mat', 'file')
|
||||
save('mat/nass_model_conf_log.mat', 'conf_log', '-append');
|
||||
else
|
||||
save('mat/conf_log.mat', 'conf_log');
|
||||
save('mat/nass_model_conf_log.mat', 'conf_log');
|
||||
end
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/conf_log.mat', 'file')
|
||||
save('matlab/mat/conf_log.mat', 'conf_log', '-append');
|
||||
if exist('./matlab/mat/nass_model_conf_log.mat', 'file')
|
||||
save('matlab/mat/nass_model_conf_log.mat', 'conf_log', '-append');
|
||||
else
|
||||
save('matlab/mat/conf_log.mat', 'conf_log');
|
||||
save('matlab/mat/nass_model_conf_log.mat', 'conf_log');
|
||||
end
|
||||
end
|
||||
|
@ -93,15 +93,15 @@
|
||||
|
||||
micro_hexapod = stewart;
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/nass_stages.mat', 'file')
|
||||
save('mat/nass_stages.mat', 'micro_hexapod', '-append');
|
||||
if exist('./mat/nass_model_stages.mat', 'file')
|
||||
save('mat/nass_model_stages.mat', 'micro_hexapod', '-append');
|
||||
else
|
||||
save('mat/nass_stages.mat', 'micro_hexapod');
|
||||
save('mat/nass_model_stages.mat', 'micro_hexapod');
|
||||
end
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/nass_stages.mat', 'file')
|
||||
save('matlab/mat/nass_stages.mat', 'micro_hexapod', '-append');
|
||||
if exist('./matlab/mat/nass_model_stages.mat', 'file')
|
||||
save('matlab/mat/nass_model_stages.mat', 'micro_hexapod', '-append');
|
||||
else
|
||||
save('matlab/mat/nass_stages.mat', 'micro_hexapod');
|
||||
save('matlab/mat/nass_model_stages.mat', 'micro_hexapod');
|
||||
end
|
||||
end
|
||||
|
@ -157,7 +157,7 @@
|
||||
case 'constant'
|
||||
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)];
|
||||
|
||||
@ -185,15 +185,15 @@
|
||||
Dhl = struct('time', t, 'signals', struct('values', Dhl));
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/nass_references.mat', 'file')
|
||||
save('mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append');
|
||||
if exist('./mat/nass_model_references.mat', 'file')
|
||||
save('mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append');
|
||||
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
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/nass_references.mat', 'file')
|
||||
save('matlab/mat/nass_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append');
|
||||
if exist('./matlab/mat/nass_model_references.mat', 'file')
|
||||
save('matlab/mat/nass_model_references.mat', 'Dy', 'Ry', 'Rz', 'Dh', 'Dhl', 'args', 'Ts', '-append');
|
||||
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
|
||||
|
@ -40,15 +40,15 @@
|
||||
ry.C = [1e5; 1e5; 1e5; 3e4; 1e3; 3e4];
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/nass_stages.mat', 'file')
|
||||
save('mat/nass_stages.mat', 'ry', '-append');
|
||||
if exist('./mat/nass_model_stages.mat', 'file')
|
||||
save('mat/nass_model_stages.mat', 'ry', '-append');
|
||||
else
|
||||
save('mat/nass_stages.mat', 'ry');
|
||||
save('mat/nass_model_stages.mat', 'ry');
|
||||
end
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/nass_stages.mat', 'file')
|
||||
save('matlab/mat/nass_stages.mat', 'ry', '-append');
|
||||
if exist('./matlab/mat/nass_model_stages.mat', 'file')
|
||||
save('matlab/mat/nass_model_stages.mat', 'ry', '-append');
|
||||
else
|
||||
save('matlab/mat/nass_stages.mat', 'ry');
|
||||
save('matlab/mat/nass_model_stages.mat', 'ry');
|
||||
end
|
||||
end
|
||||
|
@ -31,15 +31,15 @@
|
||||
rz.C = [4e4; 4e4; 7e4; 1e4; 1e4; 1e4];
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/nass_stages.mat', 'file')
|
||||
save('mat/nass_stages.mat', 'rz', '-append');
|
||||
if exist('./mat/nass_model_stages.mat', 'file')
|
||||
save('mat/nass_model_stages.mat', 'rz', '-append');
|
||||
else
|
||||
save('mat/nass_stages.mat', 'rz');
|
||||
save('mat/nass_model_stages.mat', 'rz');
|
||||
end
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/nass_stages.mat', 'file')
|
||||
save('matlab/mat/nass_stages.mat', 'rz', '-append');
|
||||
if exist('./matlab/mat/nass_model_stages.mat', 'file')
|
||||
save('matlab/mat/nass_model_stages.mat', 'rz', '-append');
|
||||
else
|
||||
save('matlab/mat/nass_stages.mat', 'rz');
|
||||
save('matlab/mat/nass_model_stages.mat', 'rz');
|
||||
end
|
||||
end
|
||||
|
@ -13,15 +13,15 @@
|
||||
end
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/conf_simscape.mat', 'file')
|
||||
save('mat/conf_simscape.mat', 'conf_simscape', '-append');
|
||||
if exist('./mat/nass_model_conf_simscape.mat', 'file')
|
||||
save('mat/nass_model_conf_simscape.mat', 'conf_simscape', '-append');
|
||||
else
|
||||
save('mat/conf_simscape.mat', 'conf_simscape');
|
||||
save('mat/nass_model_conf_simscape.mat', 'conf_simscape');
|
||||
end
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/conf_simscape.mat', 'file')
|
||||
save('matlab/mat/conf_simscape.mat', 'conf_simscape', '-append');
|
||||
if exist('./matlab/mat/nass_model_conf_simscape.mat', 'file')
|
||||
save('matlab/mat/nass_model_conf_simscape.mat', 'conf_simscape', '-append');
|
||||
else
|
||||
save('matlab/mat/conf_simscape.mat', 'conf_simscape');
|
||||
save('matlab/mat/nass_model_conf_simscape.mat', 'conf_simscape');
|
||||
end
|
||||
end
|
||||
|
@ -55,15 +55,15 @@
|
||||
ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 1e4]; % [N/(m/s), N*m/(rad/s)]
|
||||
|
||||
if exist('./mat', 'dir')
|
||||
if exist('./mat/nass_stages.mat', 'file')
|
||||
save('mat/nass_stages.mat', 'ty', '-append');
|
||||
if exist('./mat/nass_model_stages.mat', 'file')
|
||||
save('mat/nass_model_stages.mat', 'ty', '-append');
|
||||
else
|
||||
save('mat/nass_stages.mat', 'ty');
|
||||
save('mat/nass_model_stages.mat', 'ty');
|
||||
end
|
||||
elseif exist('./matlab', 'dir')
|
||||
if exist('./matlab/mat/nass_stages.mat', 'file')
|
||||
save('matlab/mat/nass_stages.mat', 'ty', '-append');
|
||||
if exist('./matlab/mat/nass_model_stages.mat', 'file')
|
||||
save('matlab/mat/nass_model_stages.mat', 'ty', '-append');
|
||||
else
|
||||
save('matlab/mat/nass_stages.mat', 'ty');
|
||||
save('matlab/mat/nass_model_stages.mat', 'ty');
|
||||
end
|
||||
end
|
||||
|
@ -43,9 +43,9 @@
|
||||
#+PROPERTY: header-args:latex+ :mkdirp yes
|
||||
#+PROPERTY: header-args:latex+ :output-dir figs
|
||||
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
|
||||
:END:
|
||||
|
||||
#+latex: \clearpage
|
||||
:END:
|
||||
|
||||
* Build :noexport:
|
||||
#+NAME: startblock
|
||||
@ -314,6 +314,46 @@ Be able to pass custom =.mat= files (one mat file per disturbance)?
|
||||
- Wait for Marc reply
|
||||
|
||||
** 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
|
||||
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.
|
||||
@ -833,17 +873,18 @@ xlim([2, 500]);
|
||||
|
||||
* Introduction :ignore:
|
||||
|
||||
Introduction...
|
||||
|
||||
#+name: tab:ustation_section_matlab_code
|
||||
#+caption: Report sections and corresponding Matlab files
|
||||
#+attr_latex: :environment tabularx :width 0.6\linewidth :align lX
|
||||
#+attr_latex: :center t :booktabs t
|
||||
| *Sections* | *Matlab File* |
|
||||
|---------------------------------------+-----------------------------|
|
||||
| Section ref:sec:ustation_kinematics | =ustation_1_kinematics.m= |
|
||||
| Section ref:sec:ustation_modeling | =ustation_2_modeling.m= |
|
||||
| Section ref:sec:ustation_disturbances | =ustation_3_disturbances.m= |
|
||||
| Section ref:sec:ustation_experiments | =ustation_4_experiments.m= |
|
||||
# #+name: tab:ustation_section_matlab_code
|
||||
# #+caption: Report sections and corresponding Matlab files
|
||||
# #+attr_latex: :environment tabularx :width 0.6\linewidth :align lX
|
||||
# #+attr_latex: :center t :booktabs t
|
||||
# | *Sections* | *Matlab File* |
|
||||
# |---------------------------------------+-----------------------------|
|
||||
# | Section ref:sec:ustation_kinematics | =ustation_1_kinematics.m= |
|
||||
# | Section ref:sec:ustation_modeling | =ustation_2_modeling.m= |
|
||||
# | Section ref:sec:ustation_disturbances | =ustation_3_disturbances.m= |
|
||||
# | Section ref:sec:ustation_experiments | =ustation_4_experiments.m= |
|
||||
|
||||
* Micro-Station Kinematics
|
||||
:PROPERTIES:
|
||||
@ -854,26 +895,13 @@ xlim([2, 500]);
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
#+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
|
||||
[[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.
|
||||
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.
|
||||
@ -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.
|
||||
|
||||
#+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
|
||||
|
||||
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.
|
||||
|
||||
#+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
|
||||
#+caption: Tilt Stage
|
||||
#+attr_latex: :scale 1 :float nil
|
||||
[[file:figs/ustation_ry_stage.png]]
|
||||
|
||||
# | Axial Error ($y$) | Radial Error ($z$) | Tilt error ($R_y$) |
|
||||
# |-------------------+--------------------+--------------------|
|
||||
# | $0.5\mu m$ | $10nm$ | $5 \mu rad$ repeat |
|
||||
#+end_minipage
|
||||
|
||||
**** 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.
|
||||
|
||||
#+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
|
||||
|
||||
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 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
|
||||
#+caption: Micro Hexapod
|
||||
#+attr_latex: :scale 1 :float nil
|
||||
[[file:figs/ustation_hexapod_stage.png]]
|
||||
|
||||
# | 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$ | |
|
||||
#+end_minipage
|
||||
|
||||
** Mathematical description of a rigid body motion
|
||||
<<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.
|
||||
#+attr_latex: :options [htbp]
|
||||
#+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}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
[[file:figs/ustation_frf_compliance_xyz.png]]
|
||||
#+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}
|
||||
#+begin_subfigure
|
||||
#+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.
|
||||
#+attr_latex: :options [htbp]
|
||||
#+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}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
[[file:figs/ustation_frf_compliance_xyz_model.png]]
|
||||
#+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}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
@ -2606,6 +2629,10 @@ exportFig('figs/ustation_dist_source_ground_motion_time.pdf', 'width', 'third',
|
||||
|
||||
** 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:
|
||||
#+begin_src matlab
|
||||
@ -2628,16 +2655,23 @@ exportFig('figs/ustation_dist_source_ground_motion_time.pdf', 'width', 'third',
|
||||
<<m-init-path-tangle>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :noweb yes
|
||||
<<m-init-simscape>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :noweb yes
|
||||
<<m-init-other>>
|
||||
#+end_src
|
||||
|
||||
** Tomography Experiment
|
||||
60rpm
|
||||
ground motion + spindle vibrations
|
||||
Measurement of the PoI position with respect to the granite
|
||||
<<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.
|
||||
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
|
||||
%% Tomography experiment
|
||||
@ -2705,8 +2739,8 @@ exportFig('figs/ustation_errors_model_spindle_radial.pdf', 'width', 'half', 'hei
|
||||
%% Measured axial errors of the Spindle
|
||||
figure;
|
||||
hold on;
|
||||
plot(spindle_errors.deg(1:100:end)/360, 1e9*spindle_errors.Dz(1:100:end), 'DisplayName', 'Measurements')
|
||||
plot(exp_tomography.y.z.Time, 1e9*exp_tomography.y.z.Data, 'DisplayName', 'Simulation')
|
||||
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, detrend(1e9*exp_tomography.y.z.Data, 0), 'DisplayName', 'Simulation')
|
||||
hold off;
|
||||
xlabel('Rotation [turn]'); ylabel('Z displacement [nm]');
|
||||
axis square
|
||||
@ -2720,7 +2754,7 @@ exportFig('figs/ustation_errors_model_spindle_axial.pdf', 'width', 'half', 'heig
|
||||
#+end_src
|
||||
|
||||
#+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]
|
||||
#+begin_figure
|
||||
#+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
|
||||
|
||||
** Raster Scans with the translation stage
|
||||
<<sec:ustation_experiments_ty_scans>>
|
||||
|
||||
|
||||
+/-5mm constant velocity scans.
|
||||
ground motion + translation stage vibrations
|
||||
Measurement of the PoI position with respect to the granite
|
||||
Results are shown in Figure ref:fig:ustation_errors_model_spindle.
|
||||
Great match with measurements of Figure ref:fig:ustation_errors_spindle.
|
||||
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_src matlab
|
||||
%% Translation stage latteral scans
|
||||
set_param(conf_simulink, 'StopTime', '4');
|
||||
set_param(conf_simulink, 'StopTime', '2');
|
||||
|
||||
initializeGround();
|
||||
initializeGranite();
|
||||
@ -2772,27 +2806,32 @@ initializeDisturbances(...
|
||||
|
||||
initializeReferences(...
|
||||
'Dy_type', 'triangular', ...
|
||||
'Dy_amplitude', 5e-3, ...
|
||||
'Dy_period', 4);
|
||||
'Dy_amplitude', 4.5e-3, ...
|
||||
'Dy_period', 2);
|
||||
|
||||
sim(mdl);
|
||||
exp_latteral_scans = simout;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% Load the experimentally measured errors
|
||||
% Load the experimentally measured errors
|
||||
ty_errors = load('ustation_errors_ty.mat');
|
||||
|
||||
% Compute best straight line to remove it from data
|
||||
average_error = mean(ty_errors.ty_z')';
|
||||
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
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
figure;
|
||||
hold on;
|
||||
plot(ty_errors.setpoint, ty_errors.ty_z(:,1) - straight_line, '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(:,1) - straight_line, 0), 'color', colors(1,:), 'DisplayName', 'Measurement')
|
||||
% 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;
|
||||
xlabel('$D_y$ position [mm]'); ylabel('Vertical error [$\mu$m]');
|
||||
xlim([-5, 5]); ylim([-0.4, 0.4]);
|
||||
@ -2800,13 +2839,14 @@ leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
#+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]);
|
||||
exportFig('figs/ustation_errors_model_dy_vertical.pdf', 'width', 'half', 'height', 'normal');
|
||||
#+end_src
|
||||
|
||||
#+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]]
|
||||
|
||||
* Conclusion
|
||||
|
@ -1,4 +1,4 @@
|
||||
% Created 2024-11-06 Wed 12:01
|
||||
% Created 2024-11-06 Wed 15:14
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||
|
||||
@ -22,30 +22,16 @@
|
||||
\maketitle
|
||||
\tableofcontents
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{table}[htbp]
|
||||
\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}
|
||||
Introduction\ldots{}
|
||||
|
||||
\end{table}
|
||||
|
||||
\chapter{Micro-Station Kinematics}
|
||||
\label{sec:ustation_kinematics}
|
||||
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.
|
||||
|
||||
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]
|
||||
\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.}
|
||||
\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.
|
||||
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.
|
||||
@ -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.
|
||||
|
||||
\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}
|
||||
|
||||
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.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/ustation_ry_stage.png}
|
||||
\caption{\label{fig:ustation_ry_stage}Tilt Stage}
|
||||
\end{figure}
|
||||
|
||||
\begin{minipage}[b]{0.48\linewidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=1]{figs/ustation_ty_stage.png}
|
||||
\captionof{figure}{\label{fig:ustation_ty_stage}Translation Stage}
|
||||
\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}
|
||||
|
||||
@ -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.
|
||||
|
||||
\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}
|
||||
|
||||
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 can also be used to precisely position the PoI vertically with respect to the x-ray.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/ustation_hexapod_stage.png}
|
||||
\caption{\label{fig:ustation_hexapod_stage}Micro Hexapod}
|
||||
\end{figure}
|
||||
|
||||
\begin{minipage}[t]{0.49\linewidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=1]{figs/ustation_rz_stage.png}
|
||||
\captionof{figure}{\label{fig:ustation_rz_stage}Rotation Stage (Spindle)}
|
||||
\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}
|
||||
\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}
|
||||
\label{sec:ustation_experiments}
|
||||
\begin{itemize}
|
||||
\item[{$\square$}] Perfect tomography => no error
|
||||
\item[{$\square$}] Add vibrations and some off-center => results, compare with measurements
|
||||
\item[{$\square$}] Ty scans (-4.5mm to 4.5mm) => compare with measurements
|
||||
\end{itemize}
|
||||
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}).
|
||||
|
||||
\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{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
@ -808,13 +786,36 @@ Examples of obtained time domain disturbance signals are shown in Figure \ref{fi
|
||||
\end{center}
|
||||
\subcaption{\label{fig:ustation_errors_model_spindle_axial}Axial error}
|
||||
\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}
|
||||
|
||||
|
||||
\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}
|
||||
\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}]
|
||||
\end{document}
|
||||
|