Continue to rework experimental results
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 47 KiB |
BIN
figs/test_id31_tomo_Wz36_results.pdf
Normal file
BIN
figs/test_id31_tomo_Wz36_results.png
Normal file
After Width: | Height: | Size: 66 KiB |
@ -246,7 +246,8 @@ CLOSED: [2025-02-01 Sat 18:38]
|
||||
- Air Conditioning: +/-0.1 deg?
|
||||
- Experimental hutch is closed for a long time to have best thermal stability
|
||||
|
||||
** TODO [#B] Coherent notation/description of spindle rotation
|
||||
** DONE [#B] Coherent notation/description of spindle rotation
|
||||
CLOSED: [2025-02-03 Mon 18:13]
|
||||
|
||||
- RPM
|
||||
- rpm
|
||||
@ -3208,7 +3209,7 @@ exportFig('figs/test_id31_hac_characteristic_loci.pdf', 'width', 'half', 'height
|
||||
<<ssec:test_id31_iff_hac_perf>>
|
||||
|
||||
To estimate the performances that can be expected with this HAC-LAC architecture and the designed controller, simulations of tomography experiments were performed[fn:4].
|
||||
The rotational velocity was set to 30rpm, and no payload was added on top of the nano-hexapod.
|
||||
The rotational velocity was set to $180\,\text{deg/s}$, and no payload was added on top of the nano-hexapod.
|
||||
An open-loop simulation and a closed-loop simulation were performed and compared in Figure ref:fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim.
|
||||
The obtained closed-loop positioning accuracy was found to comply with the requirements as it succeeded to keep the point of interest on the beam (Figure ref:fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz).
|
||||
|
||||
@ -3218,7 +3219,7 @@ The obtained closed-loop positioning accuracy was found to comply with the requi
|
||||
% This is done by offsetfing the micro-hexapod by 0.9um
|
||||
P_micro_hexapod = [2.5e-6; 0; -0.3e-6]; % [m]
|
||||
|
||||
set_param(mdl, 'StopTime', '3'); % 6 turns at 30rpm
|
||||
set_param(mdl, 'StopTime', '3'); % 6 turns at 180deg/s (30rpm)
|
||||
|
||||
initializeGround();
|
||||
initializeGranite();
|
||||
@ -3339,7 +3340,7 @@ exportFig('figs/test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz.pdf', 'width', 'ha
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim
|
||||
#+caption: Position error of the sample in the XY (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_xy}) and YZ (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz}) planes during a simulation of a tomography experiment at 30RPM. No payload is placed on top of the nano-hexapod.
|
||||
#+caption: Position error of the sample in the XY (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_xy}) and YZ (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz}) planes during a simulation of a tomography experiment at $180\,\text{deg/s}$. No payload is placed on top of the nano-hexapod.
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_xy}XY plane}
|
||||
@ -3360,7 +3361,7 @@ exportFig('figs/test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz.pdf', 'width', 'ha
|
||||
<<ssec:test_id31_iff_hac_robustness>>
|
||||
|
||||
To verify the robustness to the change of payload mass, four simulations of tomography experiments were performed with payloads as shown Figure ref:fig:test_id31_picture_masses (i.e. $0\,kg$, $13\,kg$, $26\,kg$ and $39\,kg$).
|
||||
This time, the rotational velocity was set at 1rpm (i.e. 6deg/s), as it is the typical rotational velocity for heavy samples.
|
||||
This time, the rotational velocity was set at $6\,\text{deg/s}$, as it is the typical rotational velocity for heavy samples.
|
||||
|
||||
The closed-loop systems were stable for all payload conditions, indicating good control robustness.
|
||||
However, the positioning errors are getting worse as the payload mass increases, especially in the lateral $D_y$ direction, as shown in Figure ref:fig:test_id31_hac_tomography_Wz36_simulation.
|
||||
@ -3483,8 +3484,8 @@ Based on this analysis, a diagonal controller with a crossover frequency of 5 Hz
|
||||
|
||||
Finally, simulations of tomography experiments were performed to validate the HAC-LAC architecture.
|
||||
The closed-loop system remained stable for all tested payload conditions (0 to 39 kg).
|
||||
With no payload at 30 rpm, the NASS successfully kept the sample point of interested on the beam, which fulfills the specifications.
|
||||
At 1 rpm, while positioning errors increased with the payload mass (particularly in the lateral direction), the system maintained stable.
|
||||
With no payload at $180\,\text{deg/s}$, the NASS successfully kept the sample point of interested on the beam, which fulfills the specifications.
|
||||
At $6\,\text{deg/s}$, while positioning errors increased with the payload mass (particularly in the lateral direction), the system maintained stable.
|
||||
These results demonstrate both the effectiveness and limitations of implementing control in the frame of the struts.
|
||||
|
||||
* Validation with Scientific experiments
|
||||
@ -3506,14 +3507,18 @@ Several scientific experiments are mimicked, such as:
|
||||
- Diffraction Tomography: the Spindle is performing continuous $R_z$ rotation while the translation stage is performing lateral $D_y$ scans at the same time.
|
||||
This is the experiment with the most stringent requirements (Section ref:ssec:test_id31_scans_diffraction_tomo)
|
||||
|
||||
Unless explicitly stated, all the closed-loop experiments are performed using the robust (i.e. conservative) high authority controller designed in Section ref:ssec:test_id31_iff_hac_controller.
|
||||
|
||||
For each experiment, the obtained performances are compared to the specifications for the most depending case in which nano-focusing optics are used to focus the beam down to $200\,nm\times 100\,nm$.
|
||||
In that case the goal is to keep the sample's point of interested in the beam, and therefore the $D_y$ and $D_z$ positioning errors should be less than $200\,nm$ and $100\,nm$ peak-to-peak respectively.
|
||||
The $R_y$ error should be less than $1.7\,\mu\text{rad}$ peak-to-peak.
|
||||
In terms of RMS errors, this corresponds to $30\,nm$ in $D_y$, $15\,nm$ in $D_z$ and $250\,\text{nrad}$ in $R_y$ (a summary of the specifications is given in Table ref:tab:test_id31_experiments_specifications).
|
||||
|
||||
Obtained results for all the experiments are summarized and compared with the specifications in Section ref:ssec:test_id31_scans_conclusion.
|
||||
|
||||
#+name: tab:test_id31_experiments_specifications
|
||||
#+caption: Specifications for the Nano-Active-Stabilization-System
|
||||
#+attr_latex: :environment tabularx :width 0.4\linewidth :align Xccc
|
||||
#+attr_latex: :environment tabularx :width 0.45\linewidth :align Xccc
|
||||
#+attr_latex: :center t :booktabs t
|
||||
| | $D_y$ | $D_z$ | $R_y$ |
|
||||
|-------------+-------+-------+----------------------|
|
||||
@ -3641,7 +3646,7 @@ exportFig('figs/test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed.pdf', 'width',
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_id31_tomo_m2_1rpm_robust_hac_iff
|
||||
#+caption: Tomography experiment with rotation velocity of 1rpm, and payload mass of 26kg. Errors in the $(x,y)$ plane are shown in (\subref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}). The estimated eccentricity is displayed by the black dashed circle. Errors with subtracted eccentricity are shown in (\subref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed}).
|
||||
#+caption: Tomography experiment with rotation velocity of $6\,\text{deg/s}$, and payload mass of 26kg. Errors in the $(x,y)$ plane are shown in (\subref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}). The estimated eccentricity is displayed by the black dashed circle. Errors with subtracted eccentricity are shown in (\subref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed}).
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}Errors in $(x,y)$ plane}
|
||||
@ -3663,7 +3668,7 @@ Results are indicating the NASS succeeds in keeping the sample's point of intere
|
||||
This confirms what was found during the tomography simulations performed in Section ref:ssec:test_id31_iff_hac_robustness.
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Tomography experiment at 1rpm with 26kg payload
|
||||
%% Tomography experiment at 1rpm - Results in the YZ - All masses tested
|
||||
figure;
|
||||
tiledlayout(2, 2, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
|
||||
@ -3733,15 +3738,12 @@ exportFig('figs/test_id31_tomo_Wz36_results.pdf', 'width', 'full', 'height', 'no
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_id31_tomo_Wz36_results
|
||||
#+caption: Positioning errors in the Y-Z plane during tomography experiments simulated using the multi-body model (in closed-loop)
|
||||
#+caption: Measured errors in the $Y-Z$ plane during tomography experiments at $6\,\text{deg/s}$ for all considered payloads. In the open-loop case, the effect of eccentricity is removed from the data.
|
||||
#+RESULTS:
|
||||
[[file:figs/test_id31_tomo_Wz36_results.png]]
|
||||
|
||||
The RMS values of the open-loop (with the eccentricity removed) and closed-loop errors for all masses are summarized in Table ref:tab:test_id31_tomo_1rpm_robust_ol_cl_errors.
|
||||
The obtained closed-loop errors are fulfilling the requirements, except for the $39\,\text{kg}$ payload in the lateral ($D_y$) direction.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Estimate RMS of the errors while in closed-loop and open-loop
|
||||
%% Estimate RMS of the errors while in closed-loop and open-loop - Tomography at 6deg/s
|
||||
% No mass
|
||||
data_tomo_m0_Wz6.Dy_rms_cl = rms(detrend(data_tomo_m0_Wz6.Dy_int(i_m0+50000:end), 0));
|
||||
data_tomo_m0_Wz6.Dz_rms_cl = rms(detrend(data_tomo_m0_Wz6.Dz_int(i_m0+50000:end), 0));
|
||||
@ -3799,39 +3801,12 @@ delta_theta = fminsearch(fun, 0);
|
||||
data_tomo_m3_Wz6.Ry_rms_ol = rms(data_tomo_m3_Wz6.Ry_int(1:i_m3) - (y0 + R*sin(data_tomo_m3_Wz6.Rz(1:i_m3)+delta_theta)));
|
||||
#+end_src
|
||||
|
||||
#+name: tab:test_id31_tomo_1rpm_robust_ol_cl_errors
|
||||
#+caption: RMS values of the measured errors during open-loop and closed-loop tomography scans (1rpm) for all considered payloads. Measured closed-Loop errors are indicated by "bold" font.
|
||||
#+attr_latex: :environment tabularx :width 0.9\linewidth :align Xccc
|
||||
#+attr_latex: :center t :booktabs t
|
||||
| | $D_y$ | $D_z$ | $R_y$ |
|
||||
|------------------+----------------------------------------------+--------------------------------------------+--------------------------------------------------|
|
||||
| $0\,kg$ | $142 \Longrightarrow \bm{15}\,\text{nm RMS}$ | $32 \Longrightarrow \bm{5}\,\text{nm RMS}$ | $460 \Longrightarrow \bm{55}\,\text{nrad RMS}$ |
|
||||
| $13\,kg$ | $149 \Longrightarrow \bm{25}\,\text{nm RMS}$ | $26 \Longrightarrow \bm{6}\,\text{nm RMS}$ | $470 \Longrightarrow \bm{55}\,\text{nrad RMS}$ |
|
||||
| $26\,kg$ | $202 \Longrightarrow \bm{25}\,\text{nm RMS}$ | $36 \Longrightarrow \bm{7}\,\text{nm RMS}$ | $1700 \Longrightarrow \bm{103}\,\text{nrad RMS}$ |
|
||||
| $39\,kg$ | $297 \Longrightarrow \bm{53}\,\text{nm RMS}$ | $38 \Longrightarrow \bm{9}\,\text{nm RMS}$ | $1700 \Longrightarrow \bm{169}\,\text{nrad RMS}$ |
|
||||
|------------------+----------------------------------------------+--------------------------------------------+--------------------------------------------------|
|
||||
| *Specifications* | $30\,\text{nmRMS}$ | $15\,\text{nmRMS}$ | $250\,\text{nradRMS}$ |
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([1e9*data_tomo_m0_Wz6.Dy_rms_ol, 1e9*data_tomo_m0_Wz6.Dz_rms_ol, 1e9*data_tomo_m0_Wz6.Ry_rms_ol; ...
|
||||
1e9*data_tomo_m1_Wz6.Dy_rms_ol, 1e9*data_tomo_m1_Wz6.Dz_rms_ol, 1e9*data_tomo_m1_Wz6.Ry_rms_ol; ...
|
||||
1e9*data_tomo_m2_Wz6.Dy_rms_ol, 1e9*data_tomo_m2_Wz6.Dz_rms_ol, 1e9*data_tomo_m2_Wz6.Ry_rms_ol; ...
|
||||
1e9*data_tomo_m3_Wz6.Dy_rms_ol, 1e9*data_tomo_m3_Wz6.Dz_rms_ol, 1e9*data_tomo_m3_Wz6.Ry_rms_ol], ...
|
||||
{'$m_0$', '$m_1$', '$m_2$', '$m_3$'}, {'$D_y$ [$\mu m$]', '$D_z$ [$nm$]', '$R_y$ [$\mu\text{rad}$]'}, ' %.0f ');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([1e9*data_tomo_m0_Wz6.Dy_rms_cl, 1e9*data_tomo_m0_Wz6.Dz_rms_cl, 1e9*data_tomo_m0_Wz6.Ry_rms_cl; ...
|
||||
1e9*data_tomo_m1_Wz6.Dy_rms_cl, 1e9*data_tomo_m1_Wz6.Dz_rms_cl, 1e9*data_tomo_m1_Wz6.Ry_rms_cl; ...
|
||||
1e9*data_tomo_m2_Wz6.Dy_rms_cl, 1e9*data_tomo_m2_Wz6.Dz_rms_cl, 1e9*data_tomo_m2_Wz6.Ry_rms_cl; ...
|
||||
1e9*data_tomo_m3_Wz6.Dy_rms_cl, 1e9*data_tomo_m3_Wz6.Dz_rms_cl, 1e9*data_tomo_m3_Wz6.Ry_rms_cl], ...
|
||||
{'$m_0$', '$m_1$', '$m_2$', '$m_3$'}, {'$D_y$ [nm]', '$D_z$ [nm]', '$R_y$ [nrad]'}, ' %.0f ');
|
||||
#+end_src
|
||||
|
||||
**** Fast Tomography scans
|
||||
|
||||
A tomography experiment was then performed with the highest rotational velocity of the Spindle: $180\,\text{deg/s}$[fn:7].
|
||||
The measured position of the "point of interest" during the experiment is shown in Figure ref:fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp.
|
||||
Obtained results are similar to the simulated ones (Figure ref:fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim) even though performances are a bit worse experimentally.
|
||||
Results obtained with this robust (i.e. conservative) HAC are already close to the specifications.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Experimental Results for Tomography at 30RPM, no payload
|
||||
@ -3877,8 +3852,6 @@ hold on;
|
||||
plot(1e6*data_tomo_m0_Wz180.Dy_int(1:i_m0), 1e6*data_tomo_m0_Wz180.Dz_int(1:i_m0), 'DisplayName', 'OL')
|
||||
plot(1e6*data_tomo_m0_Wz180.Dy_int(i_m0:i_m0+1e4), 1e6*data_tomo_m0_Wz180.Dz_int(i_m0:i_m0+1e4), 'color', colors(3,:), 'HandleVisibility', 'off')
|
||||
plot(1e6*data_tomo_m0_Wz180.Dy_int(i_m0+1e4:end), 1e6*data_tomo_m0_Wz180.Dz_int(i_m0+1e4:end), 'color', colors(2,:), 'DisplayName', 'CL')
|
||||
% theta = linspace(0, 2*pi, 500); % Angle to plot the circle [rad]
|
||||
% plot(0.1*cos(theta), 0.05*sin(theta), 'k-', 'DisplayName', 'Best Fit')
|
||||
hold off;
|
||||
xlabel('$D_y$ [$\mu$m]'); ylabel('$D_z$ [$\mu$m]');
|
||||
axis equal
|
||||
@ -3897,8 +3870,6 @@ hold off;
|
||||
xlabel('$D_y$ [nm]'); ylabel('$D_z$ [nm]');
|
||||
axis equal
|
||||
xlim([-300, 300]); ylim([-100, 100]);
|
||||
% xticks([-3:1:3]);
|
||||
% yticks([-3:1:3]);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
#+end_src
|
||||
@ -3925,59 +3896,38 @@ exportFig('figs/test_id31_tomo_m0_30rpm_robust_hac_iff_exp_yz.pdf', 'width', 'ha
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
Even though the simulation (Figure ref:fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim) and the experimental results (Figure ref:fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp) are looking similar, the most important metric to compare is the RMS values of the positioning errors in closed-loop.
|
||||
These are computed for both the simulation and the experimental results and are compared in Table ref:tab:test_id31_tomo_m0_30rpm_robust_hac_iff_rms.
|
||||
The lateral and vertical errors are similar, however the tilt ($R_y$) errors are underestimated by the model, which is reasonable as disturbances in $R_y$ were not modeled.
|
||||
Results obtained with this robust (i.e. conservative) HAC are already close to the specifications.
|
||||
#+begin_src matlab
|
||||
%% Estimate RMS of the errors while in closed-loop and open-loop - Tomography at 180deg/s
|
||||
% No mass
|
||||
data_tomo_m0_Wz180.Dy_rms_cl = rms(detrend(data_tomo_m0_Wz180.Dy_int(i_m0+50000:end), 0));
|
||||
data_tomo_m0_Wz180.Dz_rms_cl = rms(detrend(data_tomo_m0_Wz180.Dz_int(i_m0+50000:end), 0));
|
||||
data_tomo_m0_Wz180.Ry_rms_cl = rms(detrend(data_tomo_m0_Wz180.Ry_int(i_m0+50000:end), 0));
|
||||
|
||||
#+name: tab:test_id31_tomo_m0_30rpm_robust_hac_iff_rms
|
||||
#+caption: RMS values of the errors for a tomography experiment at 30RPM and without payload. Experimental results and simulation are compared.
|
||||
#+attr_latex: :environment tabularx :width 0.7\linewidth :align Xccc
|
||||
#+attr_latex: :center t :booktabs t
|
||||
| | $D_y$ | $D_z$ | $R_y$ |
|
||||
|-----------------+-----------------------+--------------------+------------------------|
|
||||
| Experiment (OL) | $1.8\,\mu\text{mRMS}$ | $24\,\text{nmRMS}$ | $10\,\mu\text{radRMS}$ |
|
||||
|-----------------+-----------------------+--------------------+------------------------|
|
||||
| Simulation (CL) | $30\,\text{nmRMS}$ | $8\,\text{nmRMS}$ | $73\,\text{nradRMS}$ |
|
||||
| Experiment (CL) | $39\,\text{nmRMS}$ | $11\,\text{nmRMS}$ | $130\,\text{nradRMS}$ |
|
||||
|-----------------+-----------------------+--------------------+------------------------|
|
||||
| Specifications | $30\,\text{nmRMS}$ | $15\,\text{nmRMS}$ | $250\,\text{nradRMS}$ |
|
||||
% Remove eccentricity for OL errors
|
||||
data_tomo_m0_Wz180.Dy_rms_ol = rms(data_tomo_m0_Wz180.Dy_int(1:i_m0) - (y_m0 + R_m0*sin(data_tomo_m0_Wz180.Rz(1:i_m0)+delta_theta_m0)));
|
||||
data_tomo_m0_Wz180.Dz_rms_ol = rms(detrend(data_tomo_m0_Wz180.Dz_int(1:i_m0), 0));
|
||||
[x0, y0, R] = circlefit(data_tomo_m0_Wz180.Rx_int(1:i_m0), data_tomo_m0_Wz180.Ry_int(1:i_m0));
|
||||
fun = @(theta)rms((data_tomo_m0_Wz180.Rx_int(1:i_m0) - (x0 + R*cos(data_tomo_m0_Wz180.Rz(1:i_m0)+theta(1)))).^2 + ...
|
||||
(data_tomo_m0_Wz180.Ry_int(1:i_m0) - (y0 + R*sin(data_tomo_m0_Wz180.Rz(1:i_m0)+theta(1)))).^2);
|
||||
delta_theta = fminsearch(fun, 0);
|
||||
data_tomo_m0_Wz180.Ry_rms_ol = rms(data_tomo_m0_Wz180.Ry_int(1:i_m0) - (y0 + R*sin(data_tomo_m0_Wz180.Rz(1:i_m0)+delta_theta)));
|
||||
#+end_src
|
||||
|
||||
**** Dynamic Error Budgeting
|
||||
**** Cumulative Amplitude Spectra
|
||||
|
||||
In this section, the noise budget is performed.
|
||||
The vibrations of the sample is measured in different conditions using the external metrology.
|
||||
In order to see how the HAC-LAC strategy reduces the positioning errors, three tomography scans with a rotational velocity of $180\,\text{deg/s}$ are performed: in open-loop, with the decentralized IFF, and with the HAC-LAC strategy.
|
||||
For this particular measurement, a slightly more aggressive high authority controller was designed to work specifically with low payload masses in order to fulfill the requirements.
|
||||
|
||||
- Effect of rotation.
|
||||
- Comparison with measurement noise: should be higher
|
||||
- Maybe say that we then focus on the high rotation velocity
|
||||
- Also say that for the RMS errors, we don't take into account drifts (so we NASS we can correct drifts)
|
||||
- Focus on 30rpm case
|
||||
Cumulative amplitude spectra of the measured position errors are computed for the three cases and are compared in Figure ref:fig:test_id31_hac_cas_cl.
|
||||
It can be observed that the decentralized IFF decreases the vibrations around the suspension modes of the nano-hexapod (that would not be possible to do with a HAC alone), and then the high authority controller reduces the low frequency vibrations that are mainly due to guiding errors of the Spindle.
|
||||
It is interesting to see the similarity of Figure ref:fig:test_id31_hac_cas_cl with the cumulative amplitude spectra computed very early in the project.
|
||||
|
||||
This experiment also shows that designing a controller for specific experimental conditions (especially payload inertia) can lead to better performances.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Load measured vibrations in Open-Loop
|
||||
data_ol_Wz0 = load('2023-08-11_16-51_m0_lac_off.mat'); % no rotation
|
||||
data_ol_Wz36 = load('2023-08-11_17-18_m0_lac_off_1rpm.mat'); % 6 deg/s
|
||||
data_ol_Wz180 = load('2023-08-11_17-39_m0_lac_off_30rpm.mat'); % 180 deg/s
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
figure;
|
||||
hold on;
|
||||
% plot(detrend(data_ol_Wz0.Dx_int, 0), detrend(data_ol_Wz0.Dy_int, 0))
|
||||
plot(detrend(movmean(data_ol_Wz36.Dx_int, 1e4), 0), detrend(movmean(data_ol_Wz36.Dy_int, 1e4), 0))
|
||||
% plot(detrend(data_ol_Wz180.Dx_int, 0), detrend(data_ol_Wz180.Dy_int, 0))
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e-4*(1:length(data_ol_Wz0.Dz_int)), detrend(data_ol_Wz0.Dz_int, 0))
|
||||
plot(1e-4*(1:length(data_ol_Wz36.Dz_int)), detrend(data_ol_Wz36.Dz_int, 0))
|
||||
plot(1e-4*(1:length(data_ol_Wz180.Dz_int)), detrend(data_ol_Wz180.Dz_int, 0))
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% Compute the motion in the X-Y-Z-Rx-Ry directions
|
||||
% Coordinate transform
|
||||
J_int_to_X = [ 0 0 -0.787401574803149 -0.212598425196851 0;
|
||||
@ -3986,20 +3936,6 @@ J_int_to_X = [ 0 0 -0.787401574803149 -0.21259842
|
||||
-13.1233595800525 13.1233595800525 0 0 0;
|
||||
0 0 -13.1233595800525 13.1233595800525 0];
|
||||
|
||||
a = J_int_to_X*[data_ol_Wz0.d1; data_ol_Wz0.d2; data_ol_Wz0.d3; data_ol_Wz0.d4; data_ol_Wz0.d5];
|
||||
data_ol_Wz0.Dx_int = a(1,:);
|
||||
data_ol_Wz0.Dy_int = a(2,:);
|
||||
data_ol_Wz0.Dz_int = a(3,:);
|
||||
data_ol_Wz0.Rx_int = a(4,:);
|
||||
data_ol_Wz0.Ry_int = a(5,:);
|
||||
|
||||
a = J_int_to_X*[data_ol_Wz36.d1; data_ol_Wz36.d2; data_ol_Wz36.d3; data_ol_Wz36.d4; data_ol_Wz36.d5];
|
||||
data_ol_Wz36.Dx_int = a(1,:);
|
||||
data_ol_Wz36.Dy_int = a(2,:);
|
||||
data_ol_Wz36.Dz_int = a(3,:);
|
||||
data_ol_Wz36.Rx_int = a(4,:);
|
||||
data_ol_Wz36.Ry_int = a(5,:);
|
||||
|
||||
a = J_int_to_X*[data_ol_Wz180.d1; data_ol_Wz180.d2; data_ol_Wz180.d3; data_ol_Wz180.d4; data_ol_Wz180.d5];
|
||||
data_ol_Wz180.Dx_int = a(1,:);
|
||||
data_ol_Wz180.Dy_int = a(2,:);
|
||||
@ -4013,132 +3949,12 @@ Nfft = floor(20.0/Ts);
|
||||
win = hanning(Nfft);
|
||||
Noverlap = floor(Nfft/2);
|
||||
|
||||
[data_ol_Wz0.pxx_Dx, data_ol_Wz0.f] = pwelch(detrend(data_ol_Wz0.Dx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz0.pxx_Dy, ~ ] = pwelch(detrend(data_ol_Wz0.Dy_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz0.pxx_Dz, ~ ] = pwelch(detrend(data_ol_Wz0.Dz_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz0.pxx_Rx, ~ ] = pwelch(detrend(data_ol_Wz0.Rx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz0.pxx_Ry, ~ ] = pwelch(detrend(data_ol_Wz0.Ry_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
|
||||
[data_ol_Wz36.pxx_Dx, data_ol_Wz36.f] = pwelch(detrend(data_ol_Wz36.Dx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz36.pxx_Dy, ~ ] = pwelch(detrend(data_ol_Wz36.Dy_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz36.pxx_Dz, ~ ] = pwelch(detrend(data_ol_Wz36.Dz_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz36.pxx_Rx, ~ ] = pwelch(detrend(data_ol_Wz36.Rx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz36.pxx_Ry, ~ ] = pwelch(detrend(data_ol_Wz36.Ry_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
|
||||
[data_ol_Wz180.pxx_Dx, data_ol_Wz180.f] = pwelch(detrend(data_ol_Wz180.Dx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz180.pxx_Dy, ~ ] = pwelch(detrend(data_ol_Wz180.Dy_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz180.pxx_Dz, ~ ] = pwelch(detrend(data_ol_Wz180.Dz_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz180.pxx_Rx, ~ ] = pwelch(detrend(data_ol_Wz180.Rx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_ol_Wz180.pxx_Ry, ~ ] = pwelch(detrend(data_ol_Wz180.Ry_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Cumulative Amplitude Spectrum - Open-Loop - Dy
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
hold on;
|
||||
plot(data_ol_Wz0.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz0.f), flip(data_ol_Wz0.pxx_Dy)))), ...
|
||||
'DisplayName', sprintf('0rpm: $%.0f nm$', 1e9*rms(detrend(data_ol_Wz0.Dy_int, 0))));
|
||||
plot(data_ol_Wz36.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz36.f), flip(data_ol_Wz36.pxx_Dy)))), ...
|
||||
'DisplayName', sprintf('6rpm: $%.0f nm$', 1e9*rms(detrend(data_ol_Wz36.Dy_int, 0))));
|
||||
plot(data_ol_Wz180.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz180.f), flip(data_ol_Wz180.pxx_Dy)))), ...
|
||||
'DisplayName', sprintf('30rpm: $%.1f \\mu m$', 1e6*rms(detrend(data_ol_Wz180.Dy_int, 0))));
|
||||
plot([1e-2, 1e4], 1e-9*[specs_dy_rms, specs_dy_rms], 'k--', 'DisplayName', sprintf('Spec: $%.0f$nm', specs_dy_rms))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('CAS [m]');
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 3e-6]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_id31_hac_cas_ol_dy.pdf', 'width', 'third', 'height', 'normal');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Cumulative Amplitude Spectrum - Open-Loop - Dz
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
hold on;
|
||||
plot(data_ol_Wz0.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz0.f), flip(data_ol_Wz0.pxx_Dz)))), ...
|
||||
'DisplayName', sprintf('0rpm: $%.0f nm$', 1e9*rms(detrend(data_ol_Wz0.Dz_int, 0))));
|
||||
plot(data_ol_Wz36.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz36.f), flip(data_ol_Wz36.pxx_Dz)))), ...
|
||||
'DisplayName', sprintf('6rpm: $%.0f nm$', 1e9*rms(detrend(data_ol_Wz36.Dz_int, 0))));
|
||||
plot(data_ol_Wz180.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz180.f), flip(data_ol_Wz180.pxx_Dz)))), ...
|
||||
'DisplayName', sprintf('30rpm: $%.0f nm$', 1e9*rms(detrend(data_ol_Wz180.Dz_int, 0))));
|
||||
plot([1e-2, 1e4], 1e-9*[specs_dz_rms, specs_dz_rms], 'k--', 'DisplayName', sprintf('Spec: $%.0f$nm', specs_dz_rms))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('CAS [m]');
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 3e-6]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_id31_hac_cas_ol_dz.pdf', 'width', 'third', 'height', 'normal');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Cumulative Amplitude Spectrum - Open-Loop - Ry
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'compact', 'Padding', 'None');
|
||||
hold on;
|
||||
plot(data_ol_Wz0.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz0.f), flip(data_ol_Wz0.pxx_Ry)))), ...
|
||||
'DisplayName', sprintf('0rpm: $%.2f \\mu$rad', 1e6*rms(detrend(data_ol_Wz0.Ry_int, 0))));
|
||||
plot(data_ol_Wz36.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz36.f), flip(data_ol_Wz36.pxx_Ry)))), ...
|
||||
'DisplayName', sprintf('6rpm: $%.2f \\mu$rad', 1e6*rms(detrend(data_ol_Wz36.Ry_int, 0))));
|
||||
plot(data_ol_Wz180.f, sqrt(flip(-cumtrapz(flip(data_ol_Wz180.f), flip(data_ol_Wz180.pxx_Ry)))), ...
|
||||
'DisplayName', sprintf('30rpm: $%.0f \\mu$rad', 1e6*rms(detrend(data_ol_Wz180.Ry_int, 0))));
|
||||
plot([1e-2, 1e4], 1e-6*[specs_ry_rms, specs_ry_rms], 'k--', 'DisplayName', sprintf('Spec: $%.2f \\mu$rad', specs_ry_rms))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('CAS [rad]');
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 3e-6]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_id31_hac_cas_ol_ry.pdf', 'width', 'third', 'height', 'normal');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_id31_hac_cas_ol
|
||||
#+caption: Cumulative Amplitude Spectrum of the measured positioning errors without any rotation, with $\Omega_z = 36\,\text{deg}/s$ and with $\Omega_z = 180\,\text{deg}/s$. Open-loop case. RMS values are indicated in the legend.
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_id31_hac_cas_ol_dy} $D_y$}
|
||||
#+attr_latex: :options {0.33\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :scale 1
|
||||
[[file:figs/test_id31_hac_cas_ol_dy.png]]
|
||||
#+end_subfigure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_id31_hac_cas_ol_dz} $D_z$}
|
||||
#+attr_latex: :options {0.33\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :scale 1
|
||||
[[file:figs/test_id31_hac_cas_ol_dz.png]]
|
||||
#+end_subfigure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_id31_hac_cas_ol_ry} $R_y$}
|
||||
#+attr_latex: :options {0.33\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :scale 1
|
||||
[[file:figs/test_id31_hac_cas_ol_ry.png]]
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
Effect of LAC:
|
||||
- reduce amplitude around 80Hz
|
||||
- Inject some noise between 200 and 700Hz?
|
||||
|
||||
Effect of HAC:
|
||||
- Bandwidth is approximately 10Hz
|
||||
|
||||
#+begin_src matlab
|
||||
%% Effect of LAC - 180 deg/s
|
||||
|
||||
% Load measured noise
|
||||
@ -4186,11 +4002,11 @@ plot(data_hac_Wz180.f, sqrt(flip(-cumtrapz(flip(data_hac_Wz180.f), flip(data_hac
|
||||
plot([1e-2, 1e4], 1e-9*[specs_dy_rms, specs_dy_rms], 'k--', 'DisplayName', sprintf('Spec: $%.0f$nm', specs_dy_rms))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('CAS [rad]');
|
||||
xlabel('Frequency [Hz]'); ylabel('CAS [m]');
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 3e-6]);
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6, 1e-5]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 2e-5]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
@ -4208,11 +4024,11 @@ plot(data_hac_Wz180.f, sqrt(flip(-cumtrapz(flip(data_hac_Wz180.f), flip(data_hac
|
||||
plot([1e-2, 1e4], 1e-9*[specs_dz_rms, specs_dz_rms], 'k--', 'DisplayName', sprintf('Spec: $%.0f$nm', specs_dz_rms))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('CAS [rad]');
|
||||
xlabel('Frequency [Hz]'); ylabel('CAS [m]');
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 3e-6]);
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6, 1e-5]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 2e-5]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
@ -4233,8 +4049,8 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('CAS [rad]');
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 3e-6]);
|
||||
xticks([1e0, 1e1, 1e2]); yticks([1e-9, 1e-8, 1e-7, 1e-6, 1e-5]);
|
||||
xlim([0.1, 5e2]); ylim([1e-10, 2e-5]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
@ -4371,13 +4187,12 @@ exportFig('figs/test_id31_reflectivity_ry.pdf', 'width', 'third', 'height', 'nor
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
|
||||
** Dirty Layer Scans
|
||||
<<ssec:test_id31_scans_dz>>
|
||||
**** Introduction :ignore:
|
||||
|
||||
In some cases, samples are composed of several atomic "layers" that are first aligned in the horizontal plane with precise $R_y$ positioning and that are then scanned vertically with precise $D_z$ motion.
|
||||
The vertical scan can be performed continuously of using step-by-step motion.
|
||||
In some cases, samples are composed of several atomic "layers" that are first aligned in the horizontal plane with precise $R_x$ and $R_y$ positioning and that are then scanned vertically with accurate $D_z$ motion.
|
||||
The vertical scans can be performed continuously of using step-by-step motion.
|
||||
|
||||
**** Step by Step $D_z$ motion
|
||||
|
||||
@ -4387,6 +4202,7 @@ Step sizes from $10\,nm$ to $1\,\mu m$ are tested, and the results are shown in
|
||||
|
||||
When doing step-by-step scans, the time to reach the next value is quite critical as long settling time can render the total experiment excessively long.
|
||||
The response time to reach the wanted value (to within $\pm 20\,nm$) is around $70\,ms$ as shown with the $1\,\mu m$ step response in Figure ref:fig:test_id31_dz_mim_1000nm_steps.
|
||||
This is typically shorted for smaller steps.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Load Dz steps data
|
||||
@ -4493,12 +4309,10 @@ exportFig('figs/test_id31_dz_mim_1000nm_steps.pdf', 'width', 'third', 'height',
|
||||
|
||||
**** Continuous $D_z$ motion: Dirty Layer Scans
|
||||
|
||||
- [ ] In this section and the following experiments, the NASS performs "ramp scans" (i.e. constant velocity scans).
|
||||
In order to have no tracking errors, two integrators needs to be present in the feedback loop.
|
||||
As the plant present not integral action at low frequency, two integrators are included in the controller.
|
||||
In this section and for the following experiments, the NASS is used to performs "ramp scans" (i.e. constant velocity scans).
|
||||
To have no tracking errors, two integrators needs to be present in the feedback loop, and as the plant does not have integral action at low frequency, two integrators are included in the controller.
|
||||
|
||||
Instead of performing "step-by-step" scans, continuous scans can also be performed in the vertical direction.
|
||||
At $10\,\mu m/s$, the errors are well within the specifications (see Figure ref:fig:test_id31_dz_scan_10ums).
|
||||
The first test is a scan at $10\,\mu m/s$, and the errors shown in Figure ref:fig:test_id31_dz_scan_10ums are well into the specifications (shown by the dashed lines).
|
||||
|
||||
#+begin_src matlab
|
||||
%% Dirty layer scans - 10um/s
|
||||
@ -4510,6 +4324,39 @@ data_dz_100ums = load("2023-08-18_15-32_dirty_layer_m0.mat");
|
||||
data_dz_100ums.time = Ts*[0:length(data_dz_100ums.Dz_int)-1];
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% Performances for Dz scans - 10 um/s
|
||||
% Determine when the motion starts and stops
|
||||
i_dz_10ums = abs(diff(data_dz_10ums.m_hexa_dz)/Ts-10e-6) < 10*eps;
|
||||
% i_dz_10ums = data_dz_10ums.m_hexa_dz>data_dz_10ums.m_hexa_dz(1) & data_dz_10ums.m_hexa_dz<data_dz_10ums.m_hexa_dz(end);
|
||||
|
||||
% Peak to Peak errors
|
||||
dz_10ums_dy_peak = 1e9*(max(detrend(data_dz_10ums.e_dy(i_dz_10ums), 0))-min(detrend(data_dz_10ums.e_dy(i_dz_10ums), 0)))/2;
|
||||
dz_10ums_dz_peak = 1e9*(max(detrend(data_dz_10ums.e_dz(i_dz_10ums), 0))-min(detrend(data_dz_10ums.e_dz(i_dz_10ums), 0)))/2;
|
||||
dz_10ums_ry_peak = 1e6*(max(detrend(data_dz_10ums.e_ry(i_dz_10ums), 0))-min(detrend(data_dz_10ums.e_ry(i_dz_10ums), 0)))/2;
|
||||
|
||||
% RMS error
|
||||
dz_10ums_dy_rms = 1e9*rms(detrend(data_dz_10ums.e_dy(i_dz_10ums), 0));
|
||||
dz_10ums_dz_rms = 1e9*rms(detrend(data_dz_10ums.e_dz(i_dz_10ums), 0));
|
||||
dz_10ums_ry_rms = 1e6*rms(detrend(data_dz_10ums.e_ry(i_dz_10ums), 0));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% Performances for Dz scans - 100 um/s
|
||||
i_dz_100ums = abs(diff(data_dz_100ums.m_hexa_dz)/Ts-100e-6) < 10*eps;
|
||||
% i_dz_100ums = data_dz_100ums.m_hexa_dz>data_dz_100ums.m_hexa_dz(1) & data_dz_100ums.m_hexa_dz<data_dz_100ums.m_hexa_dz(end);
|
||||
|
||||
% Peak to Peak errors
|
||||
dz_100ums_dy_peak = 1e9*(max(detrend(data_dz_100ums.e_dy(i_dz_100ums), 0))-min(detrend(data_dz_100ums.e_dy(i_dz_100ums), 0)))/2;
|
||||
dz_100ums_dz_peak = 1e9*(max(detrend(data_dz_100ums.e_dz(i_dz_100ums), 0))-min(detrend(data_dz_100ums.e_dz(i_dz_100ums), 0)))/2;
|
||||
dz_100ums_ry_peak = 1e6*(max(detrend(data_dz_100ums.e_ry(i_dz_100ums), 0))-min(detrend(data_dz_100ums.e_ry(i_dz_100ums), 0)))/2;
|
||||
|
||||
% RMS error
|
||||
dz_100ums_dy_rms = 1e9*rms(detrend(data_dz_100ums.e_dy(i_dz_100ums), 0));
|
||||
dz_100ums_dz_rms = 1e9*rms(detrend(data_dz_100ums.e_dz(i_dz_100ums), 0));
|
||||
dz_100ums_ry_rms = 1e6*rms(detrend(data_dz_100ums.e_ry(i_dz_100ums), 0));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Dz scan at 10um/s - Lateral error
|
||||
figure;
|
||||
@ -4603,13 +4450,13 @@ exportFig('figs/test_id31_dz_scan_10ums_ry.pdf', 'width', 'third', 'height', 'no
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
The second tested velocity is $100\,\mu m/s$, which is the fastest velocity for $D_z$ scans when the ultimate performances is wanted (corresponding to a 1ms integration time and 100nm "resolution").
|
||||
A second scan is performed with a velocity of $100\,\mu m/s$, which is the fastest velocity for $D_z$ scans when the ultimate performances is wanted[fn:8].
|
||||
At this velocity, the positioning errors are also within the specifications except for the very start and very end of the motion (i.e. during acceleration/deceleration phases, see Figure ref:fig:test_id31_dz_scan_100ums).
|
||||
However, the detectors are usually triggered only during the constant velocity phase, so this is not not an issue.
|
||||
The performances during acceleration phase may also be improved by using a feedforward controller.
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Ry reflectivity scan - Vertical error
|
||||
%% Dz scan at 100um/s - Lateral error
|
||||
figure;
|
||||
hold on;
|
||||
plot(data_dz_100ums.time, 1e9*data_dz_100ums.e_dy, 'DisplayName', sprintf('$\\epsilon D_y = %.0f$ nm RMS', 1e9*rms(data_dz_100ums.e_dy)))
|
||||
@ -4628,6 +4475,7 @@ exportFig('figs/test_id31_dz_scan_100ums_dy.pdf', 'width', 'third', 'height', 'n
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Dz scan at 100um/s - Vertical error
|
||||
figure;
|
||||
yyaxis left
|
||||
hold on;
|
||||
@ -4656,7 +4504,7 @@ exportFig('figs/test_id31_dz_scan_100ums_dz.pdf', 'width', 'third', 'height', 'n
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Ry reflectivity scan - Vertical error
|
||||
%% Dz scan at 100um/s - Tilt error
|
||||
figure;
|
||||
hold on;
|
||||
plot(data_dz_100ums.time, 1e6*data_dz_100ums.e_ry, 'DisplayName', sprintf('$\\epsilon R_y = %.2f \\mu$rad RMS', 1e6*rms(data_dz_100ums.e_ry)))
|
||||
@ -4698,70 +4546,13 @@ exportFig('figs/test_id31_dz_scan_100ums_ry.pdf', 'width', 'third', 'height', 'n
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
**** Summary
|
||||
|
||||
#+begin_src matlab
|
||||
%% Performances for Dz scans
|
||||
% Determine when the motion starts and stops
|
||||
i_dz_10ums = abs(diff(data_dz_10ums.m_hexa_dz)/Ts-10e-6) < 10*eps;
|
||||
i_dz_100ums = abs(diff(data_dz_100ums.m_hexa_dz)/Ts-100e-6) < 10*eps;
|
||||
% i_dz_10ums = data_dz_10ums.m_hexa_dz>data_dz_10ums.m_hexa_dz(1) & data_dz_10ums.m_hexa_dz<data_dz_10ums.m_hexa_dz(end);
|
||||
% i_dz_100ums = data_dz_100ums.m_hexa_dz>data_dz_100ums.m_hexa_dz(1) & data_dz_100ums.m_hexa_dz<data_dz_100ums.m_hexa_dz(end);
|
||||
|
||||
% Peak to Peak errors
|
||||
dz_10ums_dy_peak = 1e9*(max(detrend(data_dz_10ums.e_dy(i_dz_10ums), 0))-min(detrend(data_dz_10ums.e_dy(i_dz_10ums), 0)))/2;
|
||||
dz_10ums_dz_peak = 1e9*(max(detrend(data_dz_10ums.e_dz(i_dz_10ums), 0))-min(detrend(data_dz_10ums.e_dz(i_dz_10ums), 0)))/2;
|
||||
dz_10ums_ry_peak = 1e6*(max(detrend(data_dz_10ums.e_ry(i_dz_10ums), 0))-min(detrend(data_dz_10ums.e_ry(i_dz_10ums), 0)))/2;
|
||||
|
||||
dz_100ums_dy_peak = 1e9*(max(detrend(data_dz_100ums.e_dy(i_dz_100ums), 0))-min(detrend(data_dz_100ums.e_dy(i_dz_100ums), 0)))/2;
|
||||
dz_100ums_dz_peak = 1e9*(max(detrend(data_dz_100ums.e_dz(i_dz_100ums), 0))-min(detrend(data_dz_100ums.e_dz(i_dz_100ums), 0)))/2;
|
||||
dz_100ums_ry_peak = 1e6*(max(detrend(data_dz_100ums.e_ry(i_dz_100ums), 0))-min(detrend(data_dz_100ums.e_ry(i_dz_100ums), 0)))/2;
|
||||
|
||||
|
||||
% RMS error
|
||||
dz_10ums_dy_rms = 1e9*rms(detrend(data_dz_10ums.e_dy(i_dz_10ums), 0));
|
||||
dz_10ums_dz_rms = 1e9*rms(detrend(data_dz_10ums.e_dz(i_dz_10ums), 0));
|
||||
dz_10ums_ry_rms = 1e6*rms(detrend(data_dz_10ums.e_ry(i_dz_10ums), 0));
|
||||
|
||||
dz_100ums_dy_rms = 1e9*rms(detrend(data_dz_100ums.e_dy(i_dz_100ums), 0));
|
||||
dz_100ums_dz_rms = 1e9*rms(detrend(data_dz_100ums.e_dz(i_dz_100ums), 0));
|
||||
dz_100ums_ry_rms = 1e6*rms(detrend(data_dz_100ums.e_ry(i_dz_100ums), 0));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([
|
||||
specs_dy_peak, specs_dz_peak, specs_ry_peak; ... % Specifications
|
||||
dz_10ums_dy_peak, dz_10ums_dz_peak, dz_10ums_ry_peak;
|
||||
dz_100ums_dy_peak, dz_100ums_dz_peak, dz_100ums_ry_peak], {'Specs', '10um/s', '100um/s'}, {'$D_y$', '$D_z$', '$R_y$'}, ' %.2f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| | $D_y$ | $D_z$ | $R_y$ |
|
||||
|---------+-------+-------+-------|
|
||||
| Specs | 100.0 | 50.0 | 0.85 |
|
||||
| 10um/s | 82.35 | 17.94 | 0.41 |
|
||||
| 100um/s | 98.72 | 41.45 | 0.48 |
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([
|
||||
specs_dy_rms, specs_dz_rms, specs_ry_rms; ... % Specifications
|
||||
dz_10ums_dy_rms, dz_10ums_dz_rms, dz_10ums_ry_rms;
|
||||
dz_100ums_dy_rms, dz_100ums_dz_rms, dz_100ums_ry_rms], {'Specs', '10um/s', '100um/s'}, {'$D_y$', '$D_z$', '$R_y$'}, ' %.2f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| | $D_y$ | $D_z$ | $R_y$ |
|
||||
|---------+-------+-------+-------|
|
||||
| Specs | 30.0 | 15.0 | 0.25 |
|
||||
| 10um/s | 25.11 | 5.04 | 0.11 |
|
||||
| 100um/s | 34.84 | 9.08 | 0.13 |
|
||||
|
||||
** Lateral Scans
|
||||
<<ssec:test_id31_scans_dy>>
|
||||
**** Introduction :ignore:
|
||||
|
||||
Lateral scans are performed with the $T_y$ stage.
|
||||
The stepper motor controller[fn:5] outputs the setpoint which is received by the Speedgoat.
|
||||
In the Speedgoat, the setpoint is compared with the measured $D_y$ position of the top-platform, and the Nano-Hexapod is used to correct positioning errors induced by the scanning of the $T_y$ stage.
|
||||
In the Speedgoat, the setpoint is compared with the measured $D_y$ position of the sample, and the Nano-Hexapod is used to correct positioning errors induced by the scanning of the $T_y$ stage.
|
||||
The stroke is here limited to $\pm 100\,\mu m$ due to the limited acceptance of the metrology system.
|
||||
|
||||
**** Slow scan
|
||||
@ -4879,7 +4670,7 @@ exportFig('figs/test_id31_dy_10ums_ry.pdf', 'width', 'third', 'height', 'normal'
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
**** Faster Scan
|
||||
**** Fast Scan
|
||||
|
||||
The performance of the NASS is then tested for a scanning velocity of $100\,\mu m/s$ and the results are shown in Figure ref:fig:test_id31_dy_100ums.
|
||||
At this velocity, the micro-stepping errors have a frequency of $10\,\text{Hz}$ and are inducing lot's of vibrations which are even amplified by some resonances of the micro-station.
|
||||
@ -4994,8 +4785,6 @@ exportFig('figs/test_id31_dy_100ums_ry.pdf', 'width', 'third', 'height', 'normal
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
**** Conclusion
|
||||
|
||||
#+begin_src matlab
|
||||
%% Compute errors for Dy scans
|
||||
i_ty_ol_slow = data_ty_ol_slow.Ty > data_ty_ol_slow.Ty(1) & data_ty_ol_slow.Ty < data_ty_ol_slow.Ty(end);
|
||||
@ -5038,49 +4827,11 @@ ty_cl_fast_dz_rms = 1e9*rms(detrend(data_ty_cl_fast.e_dz(i_ty_cl_fast), 0));
|
||||
ty_cl_fast_ry_rms = 1e6*rms(detrend(data_ty_cl_fast.e_ry(i_ty_cl_fast), 0));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([
|
||||
specs_dy_rms, specs_dz_rms, specs_ry_rms; ... % Specifications
|
||||
ty_ol_slow_dy_rms, ty_ol_slow_dz_rms, ty_ol_slow_ry_rms;
|
||||
ty_cl_slow_dy_rms, ty_cl_slow_dz_rms, ty_cl_slow_ry_rms;
|
||||
ty_ol_fast_dy_rms, ty_ol_fast_dz_rms, ty_ol_fast_ry_rms;
|
||||
ty_cl_fast_dy_rms, ty_cl_fast_dz_rms, ty_cl_fast_ry_rms], {'Specs', '10um/s (OL)', '10um/s (CL)', '100um/s (OL)', '100um/s (CL)'}, {'$D_y$', '$D_z$', '$R_y$'}, ' %.2f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| | $D_y$ | $D_z$ | $R_y$ |
|
||||
|--------------+---------+--------+-------|
|
||||
| Specs | 30.0 | 15.0 | 0.25 |
|
||||
|--------------+---------+--------+-------|
|
||||
| 10um/s (OL) | 585.43 | 154.51 | 6.3 |
|
||||
| 10um/s (CL) | 20.64 | 9.67 | 0.06 |
|
||||
|--------------+---------+--------+-------|
|
||||
| 100um/s (OL) | 1063.58 | 166.85 | 6.44 |
|
||||
| 100um/s (CL) | 731.63 | 19.91 | 0.36 |
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([
|
||||
specs_dy_peak, specs_dz_peak, specs_ry_peak; ... % Specifications
|
||||
ty_ol_slow_dy_peak, ty_ol_slow_dz_peak, ty_ol_slow_ry_peak;
|
||||
ty_cl_slow_dy_peak, ty_cl_slow_dz_peak, ty_cl_slow_ry_peak;
|
||||
ty_ol_fast_dy_peak, ty_ol_fast_dz_peak, ty_ol_fast_ry_peak;
|
||||
ty_cl_fast_dy_peak, ty_cl_fast_dz_peak, ty_cl_fast_ry_peak], {'Specs', '10um/s (OL)', '10um/s (CL)', '100um/s (OL)', '100um/s (CL)'}, {'$D_y$', '$D_z$', '$R_y$'}, ' %.2f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| | $D_y$ | $D_z$ | $R_y$ |
|
||||
|--------------+---------+--------+-------|
|
||||
| Specs | 100.0 | 50.0 | 0.85 |
|
||||
| 10um/s (OL) | 1167.8 | 308.35 | 11.06 |
|
||||
| 10um/s (CL) | 86.36 | 41.6 | 0.28 |
|
||||
| 100um/s (OL) | 2687.67 | 328.45 | 11.26 |
|
||||
| 100um/s (CL) | 1339.31 | 69.5 | 0.91 |
|
||||
|
||||
** Diffraction Tomography
|
||||
<<ssec:test_id31_scans_diffraction_tomo>>
|
||||
|
||||
In diffraction tomography, the micro-station performs combined $R_z$ rotation and $D_y$ lateral scans.
|
||||
Here the spindle is performing a continuous 1rpm rotation while the nano-hexapod is used to perform fast $D_y$ scans.
|
||||
Here the spindle is performing a continuous rotation at $6\,\text{deg/s}$ while the nano-hexapod is used to perform fast $D_y$ scans.
|
||||
|
||||
The $T_y$ stage is here not used as the stepper motor would induce high frequency vibrations, therefore the stroke is here limited to $\approx \pm 100\,\mu m/s$.
|
||||
Several $D_y$ velocities are tested: $0.1\,mm/s$, $0.5\,mm/s$ and $1\,mm/s$.
|
||||
@ -5142,7 +4893,8 @@ exportFig('figs/test_id31_diffraction_tomo_setpoint.pdf', 'width', 'wide', 'heig
|
||||
|
||||
The measured errors in $D_y$, $D_z$ and $R_y$ directions are shown in Figure ref:fig:test_id31_diffraction_tomo.
|
||||
While the $D_z$ and $R_y$ errors are within specifications (see Figures ref:fig:test_id31_diffraction_tomo_dz and ref:fig:test_id31_diffraction_tomo_ry), the lateral error goes outside of specifications during acceleration and deceleration phases (Figure ref:fig:test_id31_diffraction_tomo_dy).
|
||||
However, it goes out of specifications during only during $\approx 20\,ms$, and this could be optimized using feedforward and more appropriate setpoint signals.
|
||||
However, it goes out of specifications during only during $\approx 20\,ms$, so the detector integration can just be delayed by $20\,ms$ which could be acceptable.
|
||||
Another way to improve the errors in the $D_y$ direction would be to develop a feedforward controller.
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Diffraction Tomography - Dy errors for several configured velocities
|
||||
@ -5220,7 +4972,7 @@ exportFig('figs/test_id31_diffraction_tomo_ry.pdf', 'width', 'third', 'height',
|
||||
|
||||
|
||||
#+name: fig:test_id31_diffraction_tomo
|
||||
#+caption: Diffraction tomography scans (combined $R_z$ and $D_y$ motions) at several $D_y$ velocities ($R_z$ rotational velocity is 1rpm).
|
||||
#+caption: Diffraction tomography scans (combined $R_z$ and $D_y$ motions) at several $D_y$ velocities ($R_z$ rotational velocity is $6\,\text{deg/s}$).
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_id31_diffraction_tomo_dy} $D_y$}
|
||||
@ -5307,60 +5059,19 @@ dt_1000ums_dz_rms = 1e9*(rms(detrend(data_dt_1000ums.Dz_int(i_dt_1000ums), 0)));
|
||||
dt_1000ums_ry_rms = 1e6*(rms(detrend(data_dt_1000ums.Ry_int(i_dt_1000ums), 0)));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([
|
||||
specs_dy_peak, specs_dz_peak, specs_ry_peak; ... % Specifications
|
||||
dt_100ums_dy_peak, dt_100ums_dz_peak, dt_100ums_ry_peak;
|
||||
dt_500ums_dy_peak, dt_500ums_dz_peak, dt_500ums_ry_peak;
|
||||
dt_1000ums_dy_peak, dt_1000ums_dz_peak, dt_1000ums_ry_peak
|
||||
], {'Specs', '0.1 mm/s', '0.5 mm/s', '1 mm/s'}, {'Velocity', '$D_y$ [nmRMS]', '$D_z$ [nmRMS]', '$R_y$ [$\mu\text{radRMS}$]'}, ' %.2f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| Velocity | $D_y$ [nmRMS] | $D_z$ [nmRMS] | $R_y$ [$\mu\text{radRMS}$] |
|
||||
|----------+---------------+---------------+----------------------------|
|
||||
| Specs | 100.0 | 50.0 | 0.85 |
|
||||
| 0.1 mm/s | 208.25 | 35.33 | 0.73 |
|
||||
| 0.5 mm/s | 117.94 | 28.03 | 0.27 |
|
||||
| 1 mm/s | 186.88 | 33.02 | 0.53 |
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([
|
||||
specs_dy_rms, specs_dz_rms, specs_ry_rms; ... % Specifications
|
||||
dt_100ums_dy_rms, dt_100ums_dz_rms, dt_100ums_ry_rms;
|
||||
dt_500ums_dy_rms, dt_500ums_dz_rms, dt_500ums_ry_rms;
|
||||
dt_1000ums_dy_rms, dt_1000ums_dz_rms, dt_1000ums_ry_rms
|
||||
], {'Specs', '0.1 mm/s', '0.5 mm/s', '1 mm/s'}, {'Velocity', '$D_y$ [nmRMS]', '$D_z$ [nmRMS]', '$R_y$ [$\mu\text{radRMS}$]'}, ' %.2f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| Velocity | $D_y$ [nmRMS] | $D_z$ [nmRMS] | $R_y$ [$\mu\text{radRMS}$] |
|
||||
|----------+---------------+---------------+----------------------------|
|
||||
| Specs | 30.0 | 15.0 | 0.25 |
|
||||
| 0.1 mm/s | 36.18 | 7.35 | 0.11 |
|
||||
| 0.5 mm/s | 28.58 | 7.52 | 0.08 |
|
||||
| 1 mm/s | 53.05 | 9.84 | 0.14 |
|
||||
|
||||
#+name: tab:id31_diffraction_tomo_results
|
||||
#+caption: Obtained errors during diffraction tomography experiments for several $D_y$ velocities
|
||||
#+attr_latex: :environment tabularx :width \linewidth :align lXX
|
||||
#+attr_latex: :center t :booktabs t
|
||||
#+RESULTS:
|
||||
|
||||
** Conclusion
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
:END:
|
||||
<<ssec:test_id31_scans_conclusion>>
|
||||
|
||||
For each conducted experiments, the $D_y$, $D_z$ and $R_y$ errors are computed and summarized in Table ref:tab:id31_experiments_results_summary.
|
||||
|
||||
- [ ] Remove 20ms at the start of each scan for Dy
|
||||
- [ ] Add result for move aggressive controller (tomography, 180deg/s)
|
||||
|
||||
#+begin_src matlab
|
||||
%% Summary of results
|
||||
data_results = [...
|
||||
specs_dy_rms, specs_dz_rms, 1e3*specs_ry_rms ; ... % Specifications
|
||||
1e9*data_tomo_1rpm_m0.Dy_rms_cl, 1e9*data_tomo_1rpm_m0.Dz_rms_cl, 1e9*data_tomo_1rpm_m0.Ry_rms_cl ; ... % Tomo 1rpm
|
||||
1e9*data_tomo_6rpm_m0.Dy_rms_cl, 1e9*data_tomo_6rpm_m0.Dz_rms_cl, 1e9*data_tomo_6rpm_m0.Ry_rms_cl ; ... % Tomo 6rpm
|
||||
1e9*data_tomo_30rpm_m0.Dy_rms_cl, 1e9*data_tomo_30rpm_m0.Dz_rms_cl, 1e9*data_tomo_30rpm_m0.Ry_rms_cl ; ... % Tomo 30rpm
|
||||
1e9*rms(detrend(data_dz_10ums.e_dy, 0)), 1e9*rms(detrend(data_dz_10ums.e_dz, 0)), 1e9*rms(detrend(data_dz_10ums.e_ry, 0)) ; ... % Dz 10um/s
|
||||
1e9*rms(detrend(data_dz_100ums.e_dy,0)), 1e9*rms(detrend(data_dz_100ums.e_dz,0)), 1e9*rms(detrend(data_dz_100ums.e_ry,0)) ; ... % Dz 100um/s
|
||||
@ -5372,7 +5083,7 @@ data_results = [...
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable(data_results, {'Specifications', 'Tomography ($R_z$ 1rpm)', 'Tomography ($R_z$ 6rpm)', 'Tomography ($R_z$ 30rpm)', 'Dirty Layer ($D_z$ $10\,\mu m/s$)', 'Dirty Layer ($D_z$ $100\,\mu m/s$)', 'Reflectivity ($R_y$ $100\,\mu\text{rad}/s$)', 'Lateral Scan ($D_y$ $10\,\mu m/s$)', 'Diffraction Tomography ($R_z$ 1rpm, $D_y$ 0.1mm/s)', 'Diffraction Tomography ($R_z$ 1rpm, $D_y$ 1mm/s)'}, {'$D_y$ [nmRMS]', '$D_z$ [nmRMS]', '$R_y$ [nradRMS]'}, ' %.0f ');
|
||||
data2orgtable(data_results, {'Specifications', 'Tomography ($R_z$ 6 deg/s)', 'Tomography ($R_z$ 180 deg/s)', 'Dirty Layer ($D_z$ $10\,\mu m/s$)', 'Dirty Layer ($D_z$ $100\,\mu m/s$)', 'Reflectivity ($R_y$ $100\,\mu\text{rad}/s$)', 'Lateral Scan ($D_y$ $10\,\mu m/s$)', 'Diffraction Tomography ($R_z$ 1rpm, $D_y$ 0.1mm/s)', 'Diffraction Tomography ($R_z$ 1rpm, $D_y$ 1mm/s)'}, {'$D_y$ [nmRMS]', '$D_z$ [nmRMS]', '$R_y$ [nradRMS]'}, ' %.0f ');
|
||||
#+end_src
|
||||
|
||||
#+name: tab:id31_experiments_results_summary
|
||||
@ -5398,6 +5109,83 @@ data2orgtable(data_results, {'Specifications', 'Tomography ($R_z$ 1rpm)', 'Tomog
|
||||
| Diffraction Tomography ($R_z$ 1rpm, $D_y$ 0.1mm/s) | 75 | 9 | 118 |
|
||||
| Diffraction Tomography ($R_z$ 1rpm, $D_y$ 1mm/s) | 428 | 11 | 169 |
|
||||
|
||||
|
||||
# #+caption: RMS values of the measured errors during open-loop and closed-loop tomography scans ($6\,\text{deg/s}$) for all considered payloads. Measured closed-Loop errors are indicated by "bold" font.
|
||||
# | | $D_y$ | $D_z$ | $R_y$ |
|
||||
# |------------------+----------------------------------------------+--------------------------------------------+--------------------------------------------------|
|
||||
# | $0\,kg$ | $142 \Longrightarrow \bm{15}\,\text{nm RMS}$ | $32 \Longrightarrow \bm{5}\,\text{nm RMS}$ | $460 \Longrightarrow \bm{55}\,\text{nrad RMS}$ |
|
||||
# | $13\,kg$ | $149 \Longrightarrow \bm{25}\,\text{nm RMS}$ | $26 \Longrightarrow \bm{6}\,\text{nm RMS}$ | $470 \Longrightarrow \bm{55}\,\text{nrad RMS}$ |
|
||||
# | $26\,kg$ | $202 \Longrightarrow \bm{25}\,\text{nm RMS}$ | $36 \Longrightarrow \bm{7}\,\text{nm RMS}$ | $1700 \Longrightarrow \bm{103}\,\text{nrad RMS}$ |
|
||||
# | $39\,kg$ | $297 \Longrightarrow \bm{53}\,\text{nm RMS}$ | $38 \Longrightarrow \bm{9}\,\text{nm RMS}$ | $1700 \Longrightarrow \bm{169}\,\text{nrad RMS}$ |
|
||||
# |------------------+----------------------------------------------+--------------------------------------------+--------------------------------------------------|
|
||||
# | *Specifications* | $30\,\text{nmRMS}$ | $15\,\text{nmRMS}$ | $250\,\text{nradRMS}$ |
|
||||
|
||||
# #+caption: RMS values of the errors for a tomography experiment at $180\,\text{deg/s}$ and without payload. Experimental results and simulation are compared.
|
||||
# | | $D_y$ | $D_z$ | $R_y$ |
|
||||
# |-----------------+-----------------------+--------------------+------------------------|
|
||||
# | Experiment (OL) | $1.8\,\mu\text{mRMS}$ | $24\,\text{nmRMS}$ | $10\,\mu\text{radRMS}$ |
|
||||
# |-----------------+-----------------------+--------------------+------------------------|
|
||||
# | Simulation (CL) | $30\,\text{nmRMS}$ | $8\,\text{nmRMS}$ | $73\,\text{nradRMS}$ |
|
||||
# | Experiment (CL) | $39\,\text{nmRMS}$ | $11\,\text{nmRMS}$ | $130\,\text{nradRMS}$ |
|
||||
# |-----------------+-----------------------+--------------------+------------------------|
|
||||
# | Specifications | $30\,\text{nmRMS}$ | $15\,\text{nmRMS}$ | $250\,\text{nradRMS}$ |
|
||||
|
||||
# #+caption: Dz scans, RMS values
|
||||
# #+RESULTS:
|
||||
# | | $D_y$ | $D_z$ | $R_y$ |
|
||||
# |---------+-------+-------+-------|
|
||||
# | Specs | 100.0 | 50.0 | 0.85 |
|
||||
# | 10um/s | 82.35 | 17.94 | 0.41 |
|
||||
# | 100um/s | 98.72 | 41.45 | 0.48 |
|
||||
|
||||
# #+caption: Dz scans, Peak 2 Peak values
|
||||
# #+RESULTS:
|
||||
# | | $D_y$ | $D_z$ | $R_y$ |
|
||||
# |---------+-------+-------+-------|
|
||||
# | Specs | 30.0 | 15.0 | 0.25 |
|
||||
# | 10um/s | 25.11 | 5.04 | 0.11 |
|
||||
# | 100um/s | 34.84 | 9.08 | 0.13 |
|
||||
|
||||
# #+caption: Dy scans, RMS values
|
||||
# #+RESULTS:
|
||||
# | | $D_y$ | $D_z$ | $R_y$ |
|
||||
# |--------------+---------+--------+-------|
|
||||
# | Specs | 30.0 | 15.0 | 0.25 |
|
||||
# |--------------+---------+--------+-------|
|
||||
# | 10um/s (OL) | 585.43 | 154.51 | 6.3 |
|
||||
# | 10um/s (CL) | 20.64 | 9.67 | 0.06 |
|
||||
# |--------------+---------+--------+-------|
|
||||
# | 100um/s (OL) | 1063.58 | 166.85 | 6.44 |
|
||||
# | 100um/s (CL) | 731.63 | 19.91 | 0.36 |
|
||||
|
||||
# #+caption: Dy scans, peak to peak values
|
||||
# #+RESULTS:
|
||||
# | | $D_y$ | $D_z$ | $R_y$ |
|
||||
# |--------------+---------+--------+-------|
|
||||
# | Specs | 100.0 | 50.0 | 0.85 |
|
||||
# | 10um/s (OL) | 1167.8 | 308.35 | 11.06 |
|
||||
# | 10um/s (CL) | 86.36 | 41.6 | 0.28 |
|
||||
# | 100um/s (OL) | 2687.67 | 328.45 | 11.26 |
|
||||
# | 100um/s (CL) | 1339.31 | 69.5 | 0.91 |
|
||||
|
||||
# #+caption: Diffraction tomography, Rz at 6deg/s, RMS values
|
||||
# #+RESULTS:
|
||||
# | Velocity | $D_y$ [nmRMS] | $D_z$ [nmRMS] | $R_y$ [$\mu\text{radRMS}$] |
|
||||
# |----------+---------------+---------------+----------------------------|
|
||||
# | Specs | 100.0 | 50.0 | 0.85 |
|
||||
# | 0.1 mm/s | 208.25 | 35.33 | 0.73 |
|
||||
# | 0.5 mm/s | 117.94 | 28.03 | 0.27 |
|
||||
# | 1 mm/s | 186.88 | 33.02 | 0.53 |
|
||||
|
||||
# #+caption: Diffraction tomography, Rz at 6deg/s, peak 2 peak values
|
||||
# #+RESULTS:
|
||||
# | Velocity | $D_y$ [nmRMS] | $D_z$ [nmRMS] | $R_y$ [$\mu\text{radRMS}$] |
|
||||
# |----------+---------------+---------------+----------------------------|
|
||||
# | Specs | 30.0 | 15.0 | 0.25 |
|
||||
# | 0.1 mm/s | 36.18 | 7.35 | 0.11 |
|
||||
# | 0.5 mm/s | 28.58 | 7.52 | 0.08 |
|
||||
# | 1 mm/s | 53.05 | 9.84 | 0.14 |
|
||||
|
||||
* Conclusion
|
||||
:PROPERTIES:
|
||||
:UNNUMBERED: t
|
||||
@ -8200,7 +7988,9 @@ Otherwise, when the limbs' lengths derived yield complex numbers, then the posit
|
||||
#+end_src
|
||||
|
||||
* Footnotes
|
||||
[fn:7]The highest rotational velocity of $360\,\text{deg/s}$ could not be tested due to issue in the Spindle's controller.
|
||||
|
||||
[fn:8]Such scan could corresponding to a 1ms integration time (which is typically the smallest integration time) and 100nm "resolution" (equal to the vertical beam size).
|
||||
[fn:7]The highest rotational velocity of $360\,\text{deg/s}$ could not be tested due to an issue in the Spindle's controller.
|
||||
[fn:6]The roundness of the spheres is specified at $50\,nm$.
|
||||
[fn:5]The "IcePAP" [[cite:&janvier13_icepap]] which is developed at the ESRF.
|
||||
[fn:4]Note that the eccentricity of the "point of interest" with respect to the Spindle rotation axis has been tuned based on measurements.
|
||||
|
@ -1,4 +1,4 @@
|
||||
% Created 2025-02-03 Mon 14:43
|
||||
% Created 2025-02-03 Mon 18:41
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||
|
||||
@ -64,7 +64,7 @@ As the long-stroke (\(\approx 1 \,cm^3\)) metrology system was not developed yet
|
||||
|
||||
A first considered option was to use the ``Spindle error analyzer'' shown in Figure \ref{fig:test_id31_lion}.
|
||||
This system comprises 5 capacitive sensors which are facing two reference spheres.
|
||||
But as the gap between the capacitive sensors and the spheres is very small\footnote{Depending on the measuring range, gap can range from \(\approx 1\,\mu m\) to \(\approx 100\,\mu m\)}, the risk of damaging the spheres and the capacitive sensors is too high.
|
||||
But as the gap between the capacitive sensors and the spheres is very small\footnote{Depending on the measuring range, gap can range from \(\approx 1\,\mu m\) to \(\approx 100\,\mu m\).}, the risk of damaging the spheres and the capacitive sensors is too high.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -89,7 +89,7 @@ But as the gap between the capacitive sensors and the spheres is very small\foot
|
||||
\end{figure}
|
||||
|
||||
Instead of using capacitive sensors, 5 fibered interferometers were used in a similar way (Figure \ref{fig:test_id31_interf}).
|
||||
At the end of each fiber, a sensor head\footnote{M12/F40 model from Attocube} (Figure \ref{fig:test_id31_interf_head}) is used, which consists of a lens precisely positioned with respect to the fiber's end.
|
||||
At the end of each fiber, a sensor head\footnote{M12/F40 model from Attocube.} (Figure \ref{fig:test_id31_interf_head}) is used, which consists of a lens precisely positioned with respect to the fiber's end.
|
||||
The lens is focusing the light on the surface of the sphere, such that the reflected light comes back into the fiber and produces an interference.
|
||||
This way, the gap between the head and the reference sphere is much larger (here around \(40\,mm\)), removing the risk of collision.
|
||||
|
||||
@ -244,7 +244,7 @@ First, the ``metrology kinematics'' (discussed in Section \ref{ssec:test_id31_me
|
||||
This can be easily seen when performing lateral \([D_x,\,D_y]\) scans using the micro-hexapod while recording the vertical interferometer (Figure \ref{fig:test_id31_xy_map_sphere}).
|
||||
As the interferometer is pointing to a sphere and not to a plane, lateral motion of the sphere is seen as a vertical motion by the top interferometer.
|
||||
|
||||
Then, the reference spheres have some deviations with respect to an ideal sphere \footnote{The roundness of the spheres is specified at \(50\,nm\)}.
|
||||
Then, the reference spheres have some deviations with respect to an ideal sphere \footnote{The roundness of the spheres is specified at \(50\,nm\).}.
|
||||
They are initially meant to be used with capacitive sensors which are integrating the shape errors over large surfaces.
|
||||
When using interferometers, the size of the ``light spot'' on the sphere surface is a circle with a diameter approximately equal to \(50\,\mu m\), and therefore the measurement is more sensitive to shape errors with small features.
|
||||
|
||||
@ -303,7 +303,7 @@ A good match can be observed for the diagonal dynamics (except the high frequenc
|
||||
However, the coupling for the transfer function from command signals \(\bm{u}\) to the estimated strut motion from the external metrology \(\bm{\epsilon\mathcal{L}}\) is larger than expected (Figure \ref{fig:test_id31_first_id_int}).
|
||||
|
||||
The experimental time delay estimated from the FRF (Figure \ref{fig:test_id31_first_id_int}) is larger than expected.
|
||||
After investigation, it was found that the additional delay was due to a digital processing unit\footnote{The ``PEPU'' \cite{hino18_posit_encod_proces_unit} was used for digital protocol conversion between the interferometers and the Speedgoat} that was used to get the interferometers' signals in the Speedgoat.
|
||||
After investigation, it was found that the additional delay was due to a digital processing unit\footnote{The ``PEPU'' \cite{hino18_posit_encod_proces_unit} was used for digital protocol conversion between the interferometers and the Speedgoat.} that was used to get the interferometers' signals in the Speedgoat.
|
||||
This issue was later solved.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
@ -693,7 +693,7 @@ However, small stability margins are observed for the highest mass, indicating t
|
||||
\label{ssec:test_id31_iff_hac_perf}
|
||||
|
||||
To estimate the performances that can be expected with this HAC-LAC architecture and the designed controller, simulations of tomography experiments were performed\footnote{Note that the eccentricity of the ``point of interest'' with respect to the Spindle rotation axis has been tuned based on measurements.}.
|
||||
The rotational velocity was set to 30rpm, and no payload was added on top of the nano-hexapod.
|
||||
The rotational velocity was set to \(180\,\text{deg/s}\), and no payload was added on top of the nano-hexapod.
|
||||
An open-loop simulation and a closed-loop simulation were performed and compared in Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim}.
|
||||
The obtained closed-loop positioning accuracy was found to comply with the requirements as it succeeded to keep the point of interest on the beam (Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz}).
|
||||
|
||||
@ -710,14 +710,14 @@ The obtained closed-loop positioning accuracy was found to comply with the requi
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz}YZ plane}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim}Position error of the sample in the XY (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_xy}) and YZ (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz}) planes during a simulation of a tomography experiment at 30RPM. No payload is placed on top of the nano-hexapod.}
|
||||
\caption{\label{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim}Position error of the sample in the XY (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_xy}) and YZ (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim_yz}) planes during a simulation of a tomography experiment at \(180\,\text{deg/s}\). No payload is placed on top of the nano-hexapod.}
|
||||
\end{figure}
|
||||
|
||||
\section{Robustness estimation with simulation of Tomography scans}
|
||||
\label{ssec:test_id31_iff_hac_robustness}
|
||||
|
||||
To verify the robustness to the change of payload mass, four simulations of tomography experiments were performed with payloads as shown Figure \ref{fig:test_id31_picture_masses} (i.e. \(0\,kg\), \(13\,kg\), \(26\,kg\) and \(39\,kg\)).
|
||||
This time, the rotational velocity was set at 1rpm (i.e. 6deg/s), as it is the typical rotational velocity for heavy samples.
|
||||
This time, the rotational velocity was set at \(6\,\text{deg/s}\), as it is the typical rotational velocity for heavy samples.
|
||||
|
||||
The closed-loop systems were stable for all payload conditions, indicating good control robustness.
|
||||
However, the positioning errors are getting worse as the payload mass increases, especially in the lateral \(D_y\) direction, as shown in Figure \ref{fig:test_id31_hac_tomography_Wz36_simulation}.
|
||||
@ -739,14 +739,13 @@ Based on this analysis, a diagonal controller with a crossover frequency of 5 Hz
|
||||
|
||||
Finally, simulations of tomography experiments were performed to validate the HAC-LAC architecture.
|
||||
The closed-loop system remained stable for all tested payload conditions (0 to 39 kg).
|
||||
With no payload at 30 rpm, the NASS successfully kept the sample point of interested on the beam, which fulfills the specifications.
|
||||
At 1 rpm, while positioning errors increased with the payload mass (particularly in the lateral direction), the system maintained stable.
|
||||
With no payload at \(180\,\text{deg/s}\), the NASS successfully kept the sample point of interested on the beam, which fulfills the specifications.
|
||||
At \(6\,\text{deg/s}\), while positioning errors increased with the payload mass (particularly in the lateral direction), the system maintained stable.
|
||||
These results demonstrate both the effectiveness and limitations of implementing control in the frame of the struts.
|
||||
|
||||
\chapter{Validation with Scientific experiments}
|
||||
\label{sec:test_id31_experiments}
|
||||
In this section, the goal is to evaluate the performances of the NASS and validate its use for real work scientific experiments.
|
||||
|
||||
However, the online metrology prototype (presented in Section \ref{sec:test_id31_metrology}) does not allow samples to be placed on top of the nano-hexapod while being illuminated by the x-ray beam.
|
||||
Nevertheless, in order to fully validate the NASS, typical motion performed during scientific experiments can be mimicked, and the positioning performances can be evaluated.
|
||||
|
||||
@ -760,15 +759,19 @@ Several scientific experiments are mimicked, such as:
|
||||
This is the experiment with the most stringent requirements (Section \ref{ssec:test_id31_scans_diffraction_tomo})
|
||||
\end{itemize}
|
||||
|
||||
Unless explicitly stated, all the closed-loop experiments are performed using the robust (i.e. conservative) high authority controller designed in Section \ref{ssec:test_id31_iff_hac_controller}.
|
||||
|
||||
For each experiment, the obtained performances are compared to the specifications for the most depending case in which nano-focusing optics are used to focus the beam down to \(200\,nm\times 100\,nm\).
|
||||
In that case the goal is to keep the sample's point of interested in the beam, and therefore the \(D_y\) and \(D_z\) positioning errors should be less than \(200\,nm\) and \(100\,nm\) peak-to-peak respectively.
|
||||
The \(R_y\) error should be less than \(1.7\,\mu\text{rad}\) peak-to-peak.
|
||||
In terms of RMS errors, this corresponds to \(30\,nm\) in \(D_y\), \(15\,nm\) in \(D_z\) and \(250\,\text{nrad}\) in \(R_y\).
|
||||
In terms of RMS errors, this corresponds to \(30\,nm\) in \(D_y\), \(15\,nm\) in \(D_z\) and \(250\,\text{nrad}\) in \(R_y\) (a summary of the specifications is given in Table \ref{tab:test_id31_experiments_specifications}).
|
||||
|
||||
Obtained results for all the experiments are summarized and compared with the specifications in Section \ref{ssec:test_id31_scans_conclusion}.
|
||||
|
||||
\begin{table}[htbp]
|
||||
\caption{\label{tab:test_id31_experiments_specifications}Specifications for the Nano-Active-Stabilization-System}
|
||||
\centering
|
||||
\begin{tabularx}{0.5\linewidth}{Xccc}
|
||||
\begin{tabularx}{0.45\linewidth}{Xccc}
|
||||
\toprule
|
||||
& \(D_y\) & \(D_z\) & \(R_y\)\\
|
||||
\midrule
|
||||
@ -779,30 +782,16 @@ RMS & 30nm & 15nm & \(250\,\text{nrad}\)\\
|
||||
\end{table}
|
||||
\section{Tomography Scans}
|
||||
\label{ssec:test_id31_scans_tomography}
|
||||
\textbf{Issue with this control architecture (or controller?)}:
|
||||
\begin{itemize}
|
||||
\item The position is not converging to zero
|
||||
\end{itemize}
|
||||
\paragraph{Slow Tomography scans}
|
||||
|
||||
\textbf{Compare}:
|
||||
\begin{itemize}
|
||||
\item 1rpm, 6rpm, 30rpm
|
||||
\item at 1rpm: m0, m1, m2, m3 (same robust controller!)
|
||||
\end{itemize}
|
||||
\paragraph{Previous results at 1rpm}
|
||||
First, tomography scans are performed with a rotational velocity of \(6\,\text{deg/s}\) for all considered payload masses (shown in Figure \ref{fig:test_id31_picture_masses}).
|
||||
For each experiment, a complete spindle rotation was first performed in open-loop, and then the loop was closed during another full spindle rotation.
|
||||
|
||||
The tomography experiments that were simulated were then experimentally conducted.
|
||||
For each payload, a spindle rotating was first performed in open-loop, and then the loop was closed during another full spindle rotation.
|
||||
An example with the \(26\,\text{kg}\) payload is shown in Figure \ref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}.
|
||||
Results with the \(26\,\text{kg}\) payload is shown in Figure \ref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}.
|
||||
The eccentricity between the ``point of interest'' and the spindle rotation axis is quite large as the added payload mass statically deforms the micro-station stages.
|
||||
To estimate the open-loop errors, it is supposed that the ``point of interest'' can be perfectly aligned with the spindle rotation axis.
|
||||
Therefore, the eccentricity is first estimated by performing a circular fit (dashed black circle in Figure \ref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}), and then subtracted from the data in Figure \ref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed}.
|
||||
This underestimate the real condition open-loop errors as it is difficult to obtain a perfect alignment in practice.
|
||||
|
||||
\begin{itemize}
|
||||
\item[{$\square$}] Maybe show in the YZ plane?
|
||||
\item[{$\square$}] Add the beam size?
|
||||
\end{itemize}
|
||||
To estimate the open-loop errors, it is here supposed that the ``point of interest'' can be perfectly aligned with the spindle rotation axis.
|
||||
To simulate this case, the eccentricity is first estimated by performing a circular fit (dashed black circle in Figure \ref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}), and is then subtracted from the data in Figure \ref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed}.
|
||||
This underestimate the real open-loop errors as it is difficult to obtain a perfect alignment in practice, but it provides a more equitable comparison with the closed-loop case.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
@ -817,33 +806,25 @@ This underestimate the real condition open-loop errors as it is difficult to obt
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed}Removed eccentricity}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_id31_tomo_m2_1rpm_robust_hac_iff}Tomography experiment with rotation velocity of 1rpm, and payload mass of 26kg. Errors in the \((x,y)\) plane are shown in (\subref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}). The estimated eccentricity is displayed by the black dashed circle. Errors with subtracted eccentricity are shown in (\subref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed}).}
|
||||
\caption{\label{fig:test_id31_tomo_m2_1rpm_robust_hac_iff}Tomography experiment with rotation velocity of \(6\,\text{deg/s}\), and payload mass of 26kg. Errors in the \((x,y)\) plane are shown in (\subref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}). The estimated eccentricity is displayed by the black dashed circle. Errors with subtracted eccentricity are shown in (\subref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed}).}
|
||||
\end{figure}
|
||||
|
||||
The RMS values of the open-loop and closed-loop errors for all masses are summarized in Table \ref{tab:test_id31_tomo_1rpm_robust_ol_cl_errors}.
|
||||
The obtained closed-loop errors are fulfilling the requirements, except for the \(39\,\text{kg}\) payload in the lateral (\(D_y\)) direction.
|
||||
After removing the eccentricity for each experiment, the remaining measured motion are shown in the \(Y-Z\) plane and compared with the smallest beam size in Figure \ref{fig:test_id31_tomo_Wz36_results}.
|
||||
Results are indicating the NASS succeeds in keeping the sample's point of interests on the beam, except for the highest mass of \(39\,\text{kg}\) for which the lateral motion is a bit too high.
|
||||
This confirms what was found during the tomography simulations performed in Section \ref{ssec:test_id31_iff_hac_robustness}.
|
||||
|
||||
\begin{table}[htbp]
|
||||
\caption{\label{tab:test_id31_tomo_1rpm_robust_ol_cl_errors}RMS values of the measured errors during open-loop and closed-loop tomography scans (1rpm) for all considered payloads. Measured closed-Loop errors are indicated by ``bold'' font.}
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\begin{tabularx}{0.9\linewidth}{Xccc}
|
||||
\toprule
|
||||
& \(D_y\) & \(D_z\) & \(R_y\)\\
|
||||
\midrule
|
||||
\(0\,kg\) & \(142 \Longrightarrow \bm{15}\,\text{nm RMS}\) & \(32 \Longrightarrow \bm{5}\,\text{nm RMS}\) & \(460 \Longrightarrow \bm{55}\,\text{nrad RMS}\)\\
|
||||
\(13\,kg\) & \(149 \Longrightarrow \bm{25}\,\text{nm RMS}\) & \(26 \Longrightarrow \bm{6}\,\text{nm RMS}\) & \(470 \Longrightarrow \bm{55}\,\text{nrad RMS}\)\\
|
||||
\(26\,kg\) & \(202 \Longrightarrow \bm{25}\,\text{nm RMS}\) & \(36 \Longrightarrow \bm{7}\,\text{nm RMS}\) & \(1700 \Longrightarrow \bm{103}\,\text{nrad RMS}\)\\
|
||||
\(39\,kg\) & \(297 \Longrightarrow \bm{53}\,\text{nm RMS}\) & \(38 \Longrightarrow \bm{9}\,\text{nm RMS}\) & \(1700 \Longrightarrow \bm{169}\,\text{nrad RMS}\)\\
|
||||
\midrule
|
||||
\textbf{Specifications} & \(30\,\text{nmRMS}\) & \(15\,\text{nmRMS}\) & \(250\,\text{nradRMS}\)\\
|
||||
\bottomrule
|
||||
\end{tabularx}
|
||||
\end{table}
|
||||
\includegraphics[scale=1]{figs/test_id31_tomo_Wz36_results.png}
|
||||
\caption{\label{fig:test_id31_tomo_Wz36_results}Measured errors in the \(Y-Z\) plane during tomography experiments at \(6\,\text{deg/s}\) for all considered payloads. In the open-loop case, the effect of eccentricity is removed from the data.}
|
||||
\end{figure}
|
||||
|
||||
\paragraph{Previous results at 30rpm}
|
||||
\paragraph{Fast Tomography scans}
|
||||
|
||||
Then the same tomography experiment (i.e. constant spindle rotation at 30rpm, and no payload) was performed experimentally.
|
||||
The measured position of the ``point of interest'' during the experiment are shown in Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp}.
|
||||
A tomography experiment was then performed with the highest rotational velocity of the Spindle: \(180\,\text{deg/s}\)\footnote{The highest rotational velocity of \(360\,\text{deg/s}\) could not be tested due to issue in the Spindle's controller.}.
|
||||
The measured position of the ``point of interest'' during the experiment is shown in Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp}.
|
||||
Obtained results are similar to the simulated ones (Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim}) even though performances are a bit worse experimentally.
|
||||
Results obtained with this robust (i.e. conservative) HAC are already close to the specifications.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
@ -858,95 +839,19 @@ The measured position of the ``point of interest'' during the experiment are sho
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp_yz}YZ plane}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp}Experimental results of a tomography experiment at 30RPM without payload. Position error of the sample is shown in the XY (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp_xy}) and YZ (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp_yz}) planes.}
|
||||
\caption{\label{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp}Experimental results of a tomography experiment at 180 deg/s without payload. Position error of the sample is shown in the XY (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp_xy}) and YZ (\subref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp_yz}) planes.}
|
||||
\end{figure}
|
||||
|
||||
Even though the simulation (Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim}) and the experimental results (Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp}) are looking similar, the most important metric to compare is the RMS values of the positioning errors in closed-loop.
|
||||
These are computed for both the simulation and the experimental results and are compared in Table \ref{tab:test_id31_tomo_m0_30rpm_robust_hac_iff_rms}.
|
||||
The lateral and vertical errors are similar, however the tilt (\(R_y\)) errors are underestimated by the model, which is reasonable as disturbances in \(R_y\) were not modeled.
|
||||
\paragraph{Cumulative Amplitude Spectra}
|
||||
|
||||
Results obtained with this conservative HAC are already close to the specifications.
|
||||
In order to see how the HAC-LAC strategy reduces the positioning errors, three tomography scans with a rotational velocity of \(180\,\text{deg/s}\) are performed: in open-loop, with the decentralized IFF, and with the HAC-LAC strategy.
|
||||
For this particular measurement, a slightly more aggressive high authority controller was designed to work specifically with low payload masses in order to fulfill the requirements.
|
||||
|
||||
\begin{table}[htbp]
|
||||
\caption{\label{tab:test_id31_tomo_m0_30rpm_robust_hac_iff_rms}RMS values of the errors for a tomography experiment at 30RPM and without payload. Experimental results and simulation are compared.}
|
||||
\centering
|
||||
\begin{tabularx}{0.7\linewidth}{Xccc}
|
||||
\toprule
|
||||
& \(D_y\) & \(D_z\) & \(R_y\)\\
|
||||
\midrule
|
||||
Experiment (OL) & \(1.8\,\mu\text{mRMS}\) & \(24\,\text{nmRMS}\) & \(10\,\mu\text{radRMS}\)\\
|
||||
\midrule
|
||||
Simulation (CL) & \(30\,\text{nmRMS}\) & \(8\,\text{nmRMS}\) & \(73\,\text{nradRMS}\)\\
|
||||
Experiment (CL) & \(39\,\text{nmRMS}\) & \(11\,\text{nmRMS}\) & \(130\,\text{nradRMS}\)\\
|
||||
\midrule
|
||||
Specifications & \(30\,\text{nmRMS}\) & \(15\,\text{nmRMS}\) & \(250\,\text{nradRMS}\)\\
|
||||
\bottomrule
|
||||
\end{tabularx}
|
||||
\end{table}
|
||||
Cumulative amplitude spectra of the measured position errors are computed for the three cases and are compared in Figure \ref{fig:test_id31_hac_cas_cl}.
|
||||
It can be observed that the decentralized IFF decreases the vibrations around the suspension modes of the nano-hexapod (that would not be possible to do with a HAC alone), and then the high authority controller reduces the low frequency vibrations that are mainly due to guiding errors of the Spindle.
|
||||
It is interesting to see the similarity of Figure \ref{fig:test_id31_hac_cas_cl} with the cumulative amplitude spectra computed very early in the project.
|
||||
|
||||
\paragraph{Dynamic Error Budgeting}
|
||||
|
||||
In this section, the noise budget is performed.
|
||||
The vibrations of the sample is measured in different conditions using the external metrology.
|
||||
|
||||
\textbf{Tomography}:
|
||||
\begin{itemize}
|
||||
\item Beam size: 200nm x 100nm
|
||||
\item Keep the PoI in the beam: peak to peak errors of 200nm in Dy and 100nm in Dz
|
||||
\item RMS errors (/ by 6.6) gives 30nmRMS in Dy and 15nmRMS in Dz.
|
||||
\item Ry error <1.7urad, 250nrad RMS
|
||||
\end{itemize}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{lllllll}
|
||||
& Dx & Dy & Dz & Rx & Ry & Rz\\
|
||||
\hline
|
||||
peak 2 peak & & 200nm & 100nm & & 1.7 urad & \\
|
||||
RMS & & 30nm & 15nm & & 250 nrad & \\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
|
||||
\begin{itemize}
|
||||
\item Effect of rotation.
|
||||
\item Comparison with measurement noise: should be higher
|
||||
\item Maybe say that we then focus on the high rotation velocity
|
||||
\item Also say that for the RMS errors, we don't take into account drifts (so we NASS we can correct drifts)
|
||||
\item Focus on 30rpm case
|
||||
\end{itemize}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=1]{figs/test_id31_hac_cas_ol_dy.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_id31_hac_cas_ol_dy} $D_y$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=1]{figs/test_id31_hac_cas_ol_dz.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_id31_hac_cas_ol_dz} $D_z$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,scale=1]{figs/test_id31_hac_cas_ol_ry.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_id31_hac_cas_ol_ry} $R_y$}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_id31_hac_cas_ol}Cumulative Amplitude Spectrum of the measured positioning errors without any rotation, with \(\Omega_z = 36\,\text{deg}/s\) and with \(\Omega_z = 180\,\text{deg}/s\). Open-loop case. RMS values are indicated in the legend.}
|
||||
\end{figure}
|
||||
|
||||
Effect of LAC:
|
||||
\begin{itemize}
|
||||
\item reduce amplitude around 80Hz
|
||||
\item Inject some noise between 200 and 700Hz?
|
||||
\end{itemize}
|
||||
|
||||
Effect of HAC:
|
||||
\begin{itemize}
|
||||
\item Bandwidth is approximately 10Hz
|
||||
\end{itemize}
|
||||
This experiment also shows that designing a controller for specific experimental conditions (especially payload inertia) can lead to better performances.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -999,11 +904,10 @@ It is shown that the NASS is able to keep the point of interest in the beam with
|
||||
\caption{\label{fig:test_id31_reflectivity}Reflectivity scan (\(R_y\)) with a rotational velocity of \(100\,\mu \text{rad}/s\).}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\section{Dirty Layer Scans}
|
||||
\label{ssec:test_id31_scans_dz}
|
||||
In some cases, samples are composed of several atomic ``layers'' that are first aligned in the horizontal plane with precise \(R_y\) positioning and that are then scanned vertically with precise \(D_z\) motion.
|
||||
The vertical scan can be performed continuously of using step-by-step motion.
|
||||
In some cases, samples are composed of several atomic ``layers'' that are first aligned in the horizontal plane with precise \(R_x\) and \(R_y\) positioning and that are then scanned vertically with accurate \(D_z\) motion.
|
||||
The vertical scans can be performed continuously of using step-by-step motion.
|
||||
\paragraph{Step by Step \(D_z\) motion}
|
||||
|
||||
Vertical steps are here performed using the nano-hexapod only.
|
||||
@ -1012,6 +916,7 @@ Step sizes from \(10\,nm\) to \(1\,\mu m\) are tested, and the results are shown
|
||||
|
||||
When doing step-by-step scans, the time to reach the next value is quite critical as long settling time can render the total experiment excessively long.
|
||||
The response time to reach the wanted value (to within \(\pm 20\,nm\)) is around \(70\,ms\) as shown with the \(1\,\mu m\) step response in Figure \ref{fig:test_id31_dz_mim_1000nm_steps}.
|
||||
This is typically shorted for smaller steps.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -1037,14 +942,10 @@ The response time to reach the wanted value (to within \(\pm 20\,nm\)) is around
|
||||
|
||||
\paragraph{Continuous \(D_z\) motion: Dirty Layer Scans}
|
||||
|
||||
\begin{itemize}
|
||||
\item[{$\square$}] In this section and the following experiments, the NASS performs ``ramp scans'' (i.e. constant velocity scans).
|
||||
In order to have no tracking errors, two integrators needs to be present in the feedback loop.
|
||||
As the plant present not integral action at low frequency, two integrators are included in the controller.
|
||||
\end{itemize}
|
||||
In this section and for the following experiments, the NASS is used to performs ``ramp scans'' (i.e. constant velocity scans).
|
||||
To have no tracking errors, two integrators needs to be present in the feedback loop, and as the plant does not have integral action at low frequency, two integrators are included in the controller.
|
||||
|
||||
Instead of performing ``step-by-step'' scans, continuous scans can also be performed in the vertical direction.
|
||||
At \(10\,\mu m/s\), the errors are well within the specifications (see Figure \ref{fig:test_id31_dz_scan_10ums}).
|
||||
The first test is a scan at \(10\,\mu m/s\), and the errors shown in Figure \ref{fig:test_id31_dz_scan_10ums} are well into the specifications (shown by the dashed lines).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -1068,7 +969,7 @@ At \(10\,\mu m/s\), the errors are well within the specifications (see Figure \r
|
||||
\caption{\label{fig:test_id31_dz_scan_10ums}\(D_z\) scan with a velocity of \(10\,\mu m/s\). \(D_z\) setpoint, measured position and error are shown in (\subref{fig:test_id31_dz_scan_10ums_dz}). Errors in \(D_y\) and \(R_y\) are respectively shown in (\subref{fig:test_id31_dz_scan_10ums_dy}) and (\subref{fig:test_id31_dz_scan_10ums_ry})}
|
||||
\end{figure}
|
||||
|
||||
The second tested velocity is \(100\,\mu m/s\), which is the fastest velocity for \(D_z\) scans when the ultimate performances is wanted (corresponding to a 1ms integration time and 100nm ``resolution'').
|
||||
A second scan is performed with a velocity of \(100\,\mu m/s\), which is the fastest velocity for \(D_z\) scans when the ultimate performances is wanted\footnote{Such scan could corresponding to a 1ms integration time (which is typically the smallest integration time) and 100nm ``resolution'' (equal to the vertical beam size).}.
|
||||
At this velocity, the positioning errors are also within the specifications except for the very start and very end of the motion (i.e. during acceleration/deceleration phases, see Figure \ref{fig:test_id31_dz_scan_100ums}).
|
||||
However, the detectors are usually triggered only during the constant velocity phase, so this is not not an issue.
|
||||
The performances during acceleration phase may also be improved by using a feedforward controller.
|
||||
@ -1095,33 +996,11 @@ The performances during acceleration phase may also be improved by using a feedf
|
||||
\caption{\label{fig:test_id31_dz_scan_100ums}\(D_z\) scan with a velocity of \(100\,\mu m/s\). \(D_z\) setpoint, measured position and error are shown in (\subref{fig:test_id31_dz_scan_100ums_dz}). Errors in \(D_y\) and \(R_y\) are respectively shown in (\subref{fig:test_id31_dz_scan_100ums_dy}) and (\subref{fig:test_id31_dz_scan_100ums_ry})}
|
||||
\end{figure}
|
||||
|
||||
\paragraph{Summary}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{lrrr}
|
||||
& \(D_y\) & \(D_z\) & \(R_y\)\\
|
||||
\hline
|
||||
Specs & 100.0 & 50.0 & 0.85\\
|
||||
10um/s & 82.35 & 17.94 & 0.41\\
|
||||
100um/s & 98.72 & 41.45 & 0.48\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{lrrr}
|
||||
& \(D_y\) & \(D_z\) & \(R_y\)\\
|
||||
\hline
|
||||
Specs & 30.0 & 15.0 & 0.25\\
|
||||
10um/s & 25.11 & 5.04 & 0.11\\
|
||||
100um/s & 34.84 & 9.08 & 0.13\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\section{Lateral Scans}
|
||||
\label{ssec:test_id31_scans_dy}
|
||||
Lateral scans are performed with the \(T_y\) stage.
|
||||
The stepper motor controller\footnote{The ``IcePAP'' \cite{janvier13_icepap} which is developed at the ESRF} outputs the setpoint which is received by the Speedgoat.
|
||||
In the Speedgoat, the setpoint is compared with the measured \(D_y\) position of the top-platform, and the Nano-Hexapod is used to correct positioning errors induced by the scanning of the \(T_y\) stage.
|
||||
The stepper motor controller\footnote{The ``IcePAP'' \cite{janvier13_icepap} which is developed at the ESRF.} outputs the setpoint which is received by the Speedgoat.
|
||||
In the Speedgoat, the setpoint is compared with the measured \(D_y\) position of the sample, and the Nano-Hexapod is used to correct positioning errors induced by the scanning of the \(T_y\) stage.
|
||||
The stroke is here limited to \(\pm 100\,\mu m\) due to the limited acceptance of the metrology system.
|
||||
\paragraph{Slow scan}
|
||||
|
||||
@ -1159,7 +1038,7 @@ In closed-loop, the errors are within the specifications in all directions.
|
||||
\caption{\label{fig:test_id31_dy_10ums}Open-Loop (in blue) and Closed-loop (i.e. using the NASS, in red) during a \(10\,\mu m/s\) scan with the \(T_y\) stage. Errors in \(D_y\) is shown in (\subref{fig:test_id31_dy_10ums_dy}).}
|
||||
\end{figure}
|
||||
|
||||
\paragraph{Faster Scan}
|
||||
\paragraph{Fast Scan}
|
||||
|
||||
The performance of the NASS is then tested for a scanning velocity of \(100\,\mu m/s\) and the results are shown in Figure \ref{fig:test_id31_dy_100ums}.
|
||||
At this velocity, the micro-stepping errors have a frequency of \(10\,\text{Hz}\) and are inducing lot's of vibrations which are even amplified by some resonances of the micro-station.
|
||||
@ -1194,39 +1073,11 @@ For small \(D_y\) scans, the nano-hexapod alone can be used for the scans, but w
|
||||
\caption{\label{fig:test_id31_dy_100ums}Open-Loop (in blue) and Closed-loop (i.e. using the NASS, in red) during a \(100\,\mu m/s\) scan with the \(T_y\) stage. Errors in \(D_y\) is shown in (\subref{fig:test_id31_dy_100ums_dy}).}
|
||||
\end{figure}
|
||||
|
||||
\paragraph{Conclusion}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{lrrr}
|
||||
& \(D_y\) & \(D_z\) & \(R_y\)\\
|
||||
\hline
|
||||
Specs & 30.0 & 15.0 & 0.25\\
|
||||
\hline
|
||||
10um/s (OL) & 585.43 & 154.51 & 6.3\\
|
||||
10um/s (CL) & 20.64 & 9.67 & 0.06\\
|
||||
\hline
|
||||
100um/s (OL) & 1063.58 & 166.85 & 6.44\\
|
||||
100um/s (CL) & 731.63 & 19.91 & 0.36\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{lrrr}
|
||||
& \(D_y\) & \(D_z\) & \(R_y\)\\
|
||||
\hline
|
||||
Specs & 100.0 & 50.0 & 0.85\\
|
||||
10um/s (OL) & 1167.8 & 308.35 & 11.06\\
|
||||
10um/s (CL) & 86.36 & 41.6 & 0.28\\
|
||||
100um/s (OL) & 2687.67 & 328.45 & 11.26\\
|
||||
100um/s (CL) & 1339.31 & 69.5 & 0.91\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\section{Diffraction Tomography}
|
||||
\label{ssec:test_id31_scans_diffraction_tomo}
|
||||
|
||||
In diffraction tomography, the micro-station performs combined \(R_z\) rotation and \(D_y\) lateral scans.
|
||||
Here the spindle is performing a continuous 1rpm rotation while the nano-hexapod is used to perform fast \(D_y\) scans.
|
||||
Here the spindle is performing a continuous rotation at \(6\,\text{deg/s}\) while the nano-hexapod is used to perform fast \(D_y\) scans.
|
||||
|
||||
The \(T_y\) stage is here not used as the stepper motor would induce high frequency vibrations, therefore the stroke is here limited to \(\approx \pm 100\,\mu m/s\).
|
||||
Several \(D_y\) velocities are tested: \(0.1\,mm/s\), \(0.5\,mm/s\) and \(1\,mm/s\).
|
||||
@ -1241,7 +1092,8 @@ The \(D_y\) setpoint and the measured positions are shown for all tested velocit
|
||||
|
||||
The measured errors in \(D_y\), \(D_z\) and \(R_y\) directions are shown in Figure \ref{fig:test_id31_diffraction_tomo}.
|
||||
While the \(D_z\) and \(R_y\) errors are within specifications (see Figures \ref{fig:test_id31_diffraction_tomo_dz} and \ref{fig:test_id31_diffraction_tomo_ry}), the lateral error goes outside of specifications during acceleration and deceleration phases (Figure \ref{fig:test_id31_diffraction_tomo_dy}).
|
||||
However, it goes out of specifications during only during \(\approx 20\,ms\), and this could be optimized using feedforward and more appropriate setpoint signals.
|
||||
However, it goes out of specifications during only during \(\approx 20\,ms\), so the detector integration can just be delayed by \(20\,ms\) which could be acceptable.
|
||||
Another way to improve the errors in the \(D_y\) direction would be to develop a feedforward controller.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -1262,36 +1114,19 @@ However, it goes out of specifications during only during \(\approx 20\,ms\), an
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_id31_diffraction_tomo_ry} $R_y$}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_id31_diffraction_tomo}Diffraction tomography scans (combined \(R_z\) and \(D_y\) motions) at several \(D_y\) velocities (\(R_z\) rotational velocity is 1rpm).}
|
||||
\caption{\label{fig:test_id31_diffraction_tomo}Diffraction tomography scans (combined \(R_z\) and \(D_y\) motions) at several \(D_y\) velocities (\(R_z\) rotational velocity is \(6\,\text{deg/s}\)).}
|
||||
\end{figure}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{lrrr}
|
||||
Velocity & \(D_y\) [nmRMS] & \(D_z\) [nmRMS] & \(R_y\) [\(\mu\text{radRMS}\)]\\
|
||||
\hline
|
||||
Specs & 100.0 & 50.0 & 0.85\\
|
||||
0.1 mm/s & 208.25 & 35.33 & 0.73\\
|
||||
0.5 mm/s & 117.94 & 28.03 & 0.27\\
|
||||
1 mm/s & 186.88 & 33.02 & 0.53\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{lrrr}
|
||||
Velocity & \(D_y\) [nmRMS] & \(D_z\) [nmRMS] & \(R_y\) [\(\mu\text{radRMS}\)]\\
|
||||
\hline
|
||||
Specs & 30.0 & 15.0 & 0.25\\
|
||||
0.1 mm/s & 36.18 & 7.35 & 0.11\\
|
||||
0.5 mm/s & 28.58 & 7.52 & 0.08\\
|
||||
1 mm/s & 53.05 & 9.84 & 0.14\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\section*{Conclusion}
|
||||
\section{Conclusion}
|
||||
\label{ssec:test_id31_scans_conclusion}
|
||||
|
||||
For each conducted experiments, the \(D_y\), \(D_z\) and \(R_y\) errors are computed and summarized in Table \ref{tab:id31_experiments_results_summary}.
|
||||
|
||||
\begin{itemize}
|
||||
\item[{$\square$}] Remove 20ms at the start of each scan for Dy
|
||||
\item[{$\square$}] Add result for move aggressive controller (tomography, 180deg/s)
|
||||
\end{itemize}
|
||||
|
||||
\begin{table}[htbp]
|
||||
\caption{\label{tab:id31_experiments_results_summary}Table caption}
|
||||
\centering
|
||||
@ -1318,6 +1153,8 @@ Diffraction Tomography (\(R_z\) 1rpm, \(D_y\) 1mm/s) & 428 & 11 & 169\\
|
||||
\end{tabularx}
|
||||
\end{table}
|
||||
|
||||
|
||||
|
||||
\chapter*{Conclusion}
|
||||
\label{ssec:test_id31_conclusion}
|
||||
|
||||
|