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:
|
% 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');
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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}
|
||||||
|