Finish first version
This commit is contained in:
parent
1c31574926
commit
e08bdaf4fa
@ -1,4 +1,4 @@
|
||||
#+TITLE: Nano-Hexapod on the micro-station
|
||||
#+TITLE: Experimental Validation on the ID31 Beamline
|
||||
:DRAWER:
|
||||
#+LANGUAGE: en
|
||||
#+EMAIL: dehaeze.thomas@gmail.com
|
||||
@ -454,17 +454,23 @@ CLOSED: [2024-11-12 Tue 16:03]
|
||||
|
||||
* Introduction :ignore:
|
||||
|
||||
Now that the nano-hexapod is mounted and that the the multi-body model of the nano-hexapod could be validated based on dynamics measurements, the complete NASS is mounted as shown in Figure ref:fig:test_id31_micro_station_nano_hexapod and the performances are evaluated on the ID31 beamline.
|
||||
The nano-hexapod's mounting and validation through dynamics measurements marks a crucial milestone in the development of the Nano Active Stabilization System (NASS).
|
||||
This chapter presents a comprehensive experimental evaluation of the complete system's performance on the ID31 beamline, focusing on its ability to maintain precise sample positioning during various experimental conditions.
|
||||
|
||||
At the beginning of the project, it was planned to develop a long stroke 5-DoF metrology system to measure the pose of the sample with respect to the granite.
|
||||
The development of such system was complex, and was not completed at the time of the experimental tests on ID31.
|
||||
To still be able to validate the developed nano active platform and the associated instrumentation and control architecture, a 5-DoF short stroke metrology system is developed and presented in Section ref:sec:test_id31_metrology.
|
||||
Initially, the project planned to develop a long-stroke ($\approx 1 \, cm^3$) 5-DoF metrology system to measure sample position relative to the granite base.
|
||||
However, the complexity of this development prevented its completion before the experimental testing phase on ID31.
|
||||
To proceed with validation of the nano active platform and its associated control architecture, an alternative short-stroke ($> 100\,\mu m^3$) metrology system was developed, which is presented in Section ref:sec:test_id31_metrology.
|
||||
|
||||
The identify dynamics of the nano-hexapod fixed on top of the micro-station is identified for different experimental conditions (payload masses, rotational velocities) and compared with the multi-body model in Section ref:sec:test_id31_open_loop_plant.
|
||||
Then, several key aspects of the system validation are examined.
|
||||
Section ref:sec:test_id31_open_loop_plant analyzes the identified dynamics of the nano-hexapod mounted on the micro-station under various experimental conditions, including different payload masses and rotational velocities.
|
||||
These measurements are compared with predictions from the multi-body model to verify its accuracy and applicability for control design.
|
||||
|
||||
In order to apply the developed HAC-LAC architecture, decentralized Integral Force Feedback is first applied to actively damp the plant in a robust way (Section ref:sec:test_id31_iff), and the high authority controller is then implemented (Section ref:sec:test_id31_hac).
|
||||
Sections ref:sec:test_id31_iff and ref:sec:test_id31_hac focus on the implementation and validation of the HAC-LAC control architecture.
|
||||
First, Section ref:sec:test_id31_iff demonstrates the application of decentralized Integral Force Feedback for robust active damping of the nano-hexapod's suspension modes.
|
||||
This is followed in Section ref:sec:test_id31_hac by the implementation of the high authority controller, which addresses low-frequency disturbances and completes the control system design.
|
||||
|
||||
Finally, the positioning accuracy of the NASS is evaluated by performing scans corresponding to several scientific experiments (Section ref:sec:test_id31_experiments)
|
||||
Finally, Section ref:sec:test_id31_experiments evaluates the NASS's positioning performances through a comprehensive series of experiments that mirror typical scientific applications.
|
||||
These include tomography scans at various speeds and with different payload masses, reflectivity measurements, and combined motion sequences that test the system's full capabilities.
|
||||
|
||||
#+name: fig:test_id31_micro_station_nano_hexapod
|
||||
#+caption: Picture of the micro-station without the nano-hexapod (\subref{fig:test_id31_micro_station_cables}) and with the nano-hexapod (\subref{fig:test_id31_fixed_nano_hexapod})
|
||||
@ -761,7 +767,7 @@ exportFig('figs/test_id31_metrology_align_dx_dy.pdf', 'width', 'half', 'height',
|
||||
<<ssec:test_id31_metrology_acceptance>>
|
||||
|
||||
Because the interferometers are pointing to spheres and not flat surfaces, the lateral acceptance is limited.
|
||||
In order to estimate the metrology acceptance, the micro-hexapod is used to perform three accurate scans of $\pm 1\,mm$, respectively along the the $x$, $y$ and $z$ axes.
|
||||
In order to estimate the metrology acceptance, the micro-hexapod is used to perform three accurate scans of $\pm 1\,mm$, respectively along the $x$, $y$ and $z$ axes.
|
||||
During these scans, the 5 interferometers are recorded individually, and the ranges in which each interferometer has enough coupling efficiency to be able to measure the displacement are estimated.
|
||||
Results are summarized in Table ref:tab:test_id31_metrology_acceptance.
|
||||
The obtained lateral acceptance for pure displacements in any direction is estimated to be around $+/-0.5\,mm$, which is enough for the current application as it is well above the micro-station errors to be actively corrected by the NASS.
|
||||
@ -3495,26 +3501,26 @@ These results demonstrate both the effectiveness and limitations of implementing
|
||||
<<sec:test_id31_experiments>>
|
||||
** Introduction :ignore:
|
||||
|
||||
In this section, the goal is to evaluate the performances of the NASS and validate its use for real work scientific experiments.
|
||||
In this section, the goal is to evaluate the performances of the NASS and validate its use for typical 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.
|
||||
|
||||
Several scientific experiments are mimicked, such as:
|
||||
Several scientific experiments are here replicated, such as:
|
||||
- Tomography scans: continuous rotation of the Spindle along the vertical axis (Section ref:ssec:test_id31_scans_tomography)
|
||||
- Reflectivity scans: $R_y$ rotations using the tilt-stage (Section ref:ssec:test_id31_scans_reflectivity)
|
||||
- Vertical layer scans: the nano-hexapod is used to perform $D_z$ step motion or ramp scans (Section ref:ssec:test_id31_scans_dz)
|
||||
- Vertical layer scans: $D_z$ step motion or ramp scans using the nano-hexapod (Section ref:ssec:test_id31_scans_dz)
|
||||
- Lateral scans: $D_y$ scans using the $T_y$ translation stage (Section ref:ssec:test_id31_scans_dy)
|
||||
- Diffraction Tomography: the Spindle is performing continuous $R_z$ rotation while the translation stage is performing lateral $D_y$ scans at the same time.
|
||||
- Diffraction Tomography:continuous $R_z$ rotation using the Spindle and lateral $D_y$ scans performed at the same time using the translation stage.
|
||||
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.
|
||||
In this 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.
|
||||
Results obtained for all the experiments are summarized and compared to the specifications in Section ref:ssec:test_id31_scans_conclusion.
|
||||
|
||||
#+name: tab:test_id31_experiments_specifications
|
||||
#+caption: Specifications for the Nano-Active-Stabilization-System
|
||||
@ -3551,13 +3557,13 @@ Obtained results for all the experiments are summarized and compared with the sp
|
||||
**** Slow Tomography scans
|
||||
|
||||
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.
|
||||
Each experimental sequence consisted of two complete spindle rotations: an initial open-loop rotation followed by a closed-loop rotation.
|
||||
The experimental results for the $26\,\text{kg}$ payload are presented 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 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.
|
||||
Due to static deformation of the micro-station stages under payload loading, a significant eccentricity was observed between the point of interest and the spindle rotation axis.
|
||||
To establish a theoretical lower bound for open-loop errors, an ideal scenario was assumed where the point of interest perfectly aligns with the spindle rotation axis.
|
||||
This idealized case was simulated by first calculating the eccentricity through circular fitting (represented by the dashed black circle in Figure ref:fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit), and then subtracting it from the measured data, as shown in Figure ref:fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed.
|
||||
While this approach likely underestimates actual open-loop errors, as perfect alignment is practically unattainable, it enables a more balanced comparison with closed-loop performance.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Load Tomography scans with robust controller
|
||||
@ -3663,9 +3669,9 @@ exportFig('figs/test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed.pdf', 'width',
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
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.
|
||||
After eccentricity compensation for each experiment, the residual motion in the $Y-Z$ is compared against the minimum beam size, as illustrated 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.
|
||||
These experimental findings align with the predictions from the tomography simulations presented in Section ref:ssec:test_id31_iff_hac_robustness.
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Tomography experiment at 1rpm - Results in the YZ - All masses tested
|
||||
@ -3745,9 +3751,9 @@ exportFig('figs/test_id31_tomo_Wz36_results.pdf', 'width', 'full', 'height', 'no
|
||||
#+begin_src matlab
|
||||
%% 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));
|
||||
data_tomo_m0_Wz6.Ry_rms_cl = rms(detrend(data_tomo_m0_Wz6.Ry_int(i_m0+50000:end), 0));
|
||||
data_tomo_m0_Wz6.Dy_rms_cl = rms(detrend(data_tomo_m0_Wz6.Dy_int(i_m0+1e4:end), 0));
|
||||
data_tomo_m0_Wz6.Dz_rms_cl = rms(detrend(data_tomo_m0_Wz6.Dz_int(i_m0+1e4:end), 0));
|
||||
data_tomo_m0_Wz6.Ry_rms_cl = rms(detrend(data_tomo_m0_Wz6.Ry_int(i_m0+1e4:end), 0));
|
||||
|
||||
% Remove eccentricity for OL errors
|
||||
data_tomo_m0_Wz6.Dy_rms_ol = rms(data_tomo_m0_Wz6.Dy_int(1:i_m0) - (y_m0 + R_m0*sin(data_tomo_m0_Wz6.Rz(1:i_m0)+delta_theta_m0)));
|
||||
@ -3759,9 +3765,9 @@ delta_theta = fminsearch(fun, 0);
|
||||
data_tomo_m0_Wz6.Ry_rms_ol = rms(data_tomo_m0_Wz6.Ry_int(1:i_m0) - (y0 + R*sin(data_tomo_m0_Wz6.Rz(1:i_m0)+delta_theta)));
|
||||
|
||||
% 1 "layer mass"
|
||||
data_tomo_m1_Wz6.Dy_rms_cl = rms(detrend(data_tomo_m1_Wz6.Dy_int(i_m1+50000:end), 0));
|
||||
data_tomo_m1_Wz6.Dz_rms_cl = rms(detrend(data_tomo_m1_Wz6.Dz_int(i_m1+50000:end), 0));
|
||||
data_tomo_m1_Wz6.Ry_rms_cl = rms(detrend(data_tomo_m1_Wz6.Ry_int(i_m1+50000:end), 0));
|
||||
data_tomo_m1_Wz6.Dy_rms_cl = rms(detrend(data_tomo_m1_Wz6.Dy_int(i_m1+1e4:end), 0));
|
||||
data_tomo_m1_Wz6.Dz_rms_cl = rms(detrend(data_tomo_m1_Wz6.Dz_int(i_m1+1e4:end), 0));
|
||||
data_tomo_m1_Wz6.Ry_rms_cl = rms(detrend(data_tomo_m1_Wz6.Ry_int(i_m1+1e4:end), 0));
|
||||
|
||||
% Remove eccentricity for OL errors
|
||||
data_tomo_m1_Wz6.Dy_rms_ol = rms(data_tomo_m1_Wz6.Dy_int(1:i_m1) - (y_m1 + R_m1*sin(data_tomo_m1_Wz6.Rz(1:i_m1)+delta_theta_m1)));
|
||||
@ -3773,9 +3779,9 @@ delta_theta = fminsearch(fun, 0);
|
||||
data_tomo_m1_Wz6.Ry_rms_ol = rms(data_tomo_m1_Wz6.Ry_int(1:i_m1) - (y0 + R*sin(data_tomo_m1_Wz6.Rz(1:i_m1)+delta_theta)));
|
||||
|
||||
% 2 "layer masses"
|
||||
data_tomo_m2_Wz6.Dy_rms_cl = rms(detrend(data_tomo_m2_Wz6.Dy_int(i_m2+50000:end), 0));
|
||||
data_tomo_m2_Wz6.Dz_rms_cl = rms(detrend(data_tomo_m2_Wz6.Dz_int(i_m2+50000:end), 0));
|
||||
data_tomo_m2_Wz6.Ry_rms_cl = rms(detrend(data_tomo_m2_Wz6.Ry_int(i_m2+50000:end), 0));
|
||||
data_tomo_m2_Wz6.Dy_rms_cl = rms(detrend(data_tomo_m2_Wz6.Dy_int(i_m2+1e4:end), 0));
|
||||
data_tomo_m2_Wz6.Dz_rms_cl = rms(detrend(data_tomo_m2_Wz6.Dz_int(i_m2+1e4:end), 0));
|
||||
data_tomo_m2_Wz6.Ry_rms_cl = rms(detrend(data_tomo_m2_Wz6.Ry_int(i_m2+1e4:end), 0));
|
||||
|
||||
% Remove eccentricity for OL errors
|
||||
data_tomo_m2_Wz6.Dy_rms_ol = rms(data_tomo_m2_Wz6.Dy_int(1:i_m2) - (y_m2 + R_m2*sin(data_tomo_m2_Wz6.Rz(1:i_m2)+delta_theta_m2)));
|
||||
@ -3787,9 +3793,9 @@ delta_theta = fminsearch(fun, 0);
|
||||
data_tomo_m2_Wz6.Ry_rms_ol = rms(data_tomo_m2_Wz6.Ry_int(1:i_m2) - (y0 + R*sin(data_tomo_m2_Wz6.Rz(1:i_m2)+delta_theta)));
|
||||
|
||||
% 3 "layer masses"
|
||||
data_tomo_m3_Wz6.Dy_rms_cl = rms(detrend(data_tomo_m3_Wz6.Dy_int(i_m3+50000:end), 0));
|
||||
data_tomo_m3_Wz6.Dz_rms_cl = rms(detrend(data_tomo_m3_Wz6.Dz_int(i_m3+50000:end), 0));
|
||||
data_tomo_m3_Wz6.Ry_rms_cl = rms(detrend(data_tomo_m3_Wz6.Ry_int(i_m3+50000:end), 0));
|
||||
data_tomo_m3_Wz6.Dy_rms_cl = rms(detrend(data_tomo_m3_Wz6.Dy_int(i_m3+1e4:end), 0));
|
||||
data_tomo_m3_Wz6.Dz_rms_cl = rms(detrend(data_tomo_m3_Wz6.Dz_int(i_m3+1e4:end), 0));
|
||||
data_tomo_m3_Wz6.Ry_rms_cl = rms(detrend(data_tomo_m3_Wz6.Ry_int(i_m3+1e4:end), 0));
|
||||
|
||||
% Remove eccentricity for OL errors
|
||||
data_tomo_m3_Wz6.Dy_rms_ol = rms(data_tomo_m3_Wz6.Dy_int(1:i_m3) - (y_m3 + R_m3*sin(data_tomo_m3_Wz6.Rz(1:i_m3)+delta_theta_m3)));
|
||||
@ -3804,12 +3810,12 @@ data_tomo_m3_Wz6.Ry_rms_ol = rms(data_tomo_m3_Wz6.Ry_int(1:i_m3) - (y0 + R*sin(d
|
||||
**** 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.
|
||||
The trajectory of the point of interest during this fast tomography scan is shown in Figure ref:fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp.
|
||||
While the experimental results closely mirror the simulation results (Figure ref:fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim), the actual performance are slightly lower than predicted.
|
||||
Nevertheless, even with this robust (conservative) HAC implementation, the system performance approaches the specified requirements.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Experimental Results for Tomography at 30RPM, no payload
|
||||
%% Experimental Results for Tomography at 180deg/s, no payload
|
||||
data_tomo_m0_Wz180 = load('2023-08-17_15-26_tomography_30rpm_m0_robust.mat');
|
||||
|
||||
[~, i_m0] = find(data_tomo_m0_Wz180.hac_status == 1);
|
||||
@ -3899,9 +3905,9 @@ exportFig('figs/test_id31_tomo_m0_30rpm_robust_hac_iff_exp_yz.pdf', 'width', 'ha
|
||||
#+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));
|
||||
data_tomo_m0_Wz180.Dy_rms_cl = rms(detrend(data_tomo_m0_Wz180.Dy_int(i_m0+1e4:end), 0));
|
||||
data_tomo_m0_Wz180.Dz_rms_cl = rms(detrend(data_tomo_m0_Wz180.Dz_int(i_m0+1e4:end), 0));
|
||||
data_tomo_m0_Wz180.Ry_rms_cl = rms(detrend(data_tomo_m0_Wz180.Ry_int(i_m0+1e4:end), 0));
|
||||
|
||||
% 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)));
|
||||
@ -3915,27 +3921,32 @@ data_tomo_m0_Wz180.Ry_rms_ol = rms(data_tomo_m0_Wz180.Ry_int(1:i_m0) - (y0 + R*s
|
||||
|
||||
**** Cumulative Amplitude Spectra
|
||||
|
||||
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.
|
||||
A comparative analysis was conducted using three tomography scans at $180,\text{deg/s}$ to evaluate the effectiveness of the HAC-LAC strategy in reducing positioning errors.
|
||||
The scans were performed under three conditions: open-loop, with decentralized IFF control, and with the complete HAC-LAC strategy.
|
||||
For these specific measurements, an enhanced high authority controller was optimized for low payload masses to meet performance requirements.
|
||||
|
||||
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.
|
||||
Figure ref:fig:test_id31_hac_cas_cl presents the cumulative amplitude spectra of the position errors for all three cases.
|
||||
The results reveal two distinct control contributions: the decentralized IFF effectively attenuates vibrations near the nano-hexapod suspension modes (an achievement not possible with HAC alone), while the high authority controller suppresses low-frequency vibrations primarily arising from Spindle guiding errors.
|
||||
Notably, the spectral patterns in Figure ref:fig:test_id31_hac_cas_cl closely resemble the cumulative amplitude spectra computed in the project's early stages.
|
||||
|
||||
This experiment also shows that designing a controller for specific experimental conditions (especially payload inertia) can lead to better performances.
|
||||
This experiment also illustrates that when needed, performance can be enhanced by designing controllers for specific experimental conditions, rather than relying solely on robust controllers that accommodate all payload ranges.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Load measured vibrations in Open-Loop
|
||||
data_ol_Wz0 = load('2023-08-11_16-51_m0_lac_off.mat'); % no rotation
|
||||
|
||||
%% Compute the motion in the X-Y-Z-Rx-Ry directions
|
||||
% Coordinate transform
|
||||
%% Jacobian to compute the motion in the X-Y-Z-Rx-Ry directions
|
||||
J_int_to_X = [ 0 0 -0.787401574803149 -0.212598425196851 0;
|
||||
0.78740157480315 0.21259842519685 0 0 0;
|
||||
0 0 0 0 -1;
|
||||
-13.1233595800525 13.1233595800525 0 0 0;
|
||||
0 0 -13.1233595800525 13.1233595800525 0];
|
||||
|
||||
%% Parameters for frequency analysis computation
|
||||
Nfft = floor(20.0/Ts);
|
||||
win = hanning(Nfft);
|
||||
Noverlap = floor(Nfft/2);
|
||||
|
||||
%% Open-Loop measurement
|
||||
data_ol_Wz180 = load('2023-08-11_16-51_m0_lac_off.mat'); % no rotation
|
||||
|
||||
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,:);
|
||||
@ -3943,12 +3954,6 @@ data_ol_Wz180.Dz_int = a(3,:);
|
||||
data_ol_Wz180.Rx_int = a(4,:);
|
||||
data_ol_Wz180.Ry_int = a(5,:);
|
||||
|
||||
%% Computed the power spectral density of the measured motion
|
||||
% Hannning Windows
|
||||
Nfft = floor(20.0/Ts);
|
||||
win = hanning(Nfft);
|
||||
Noverlap = floor(Nfft/2);
|
||||
|
||||
[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);
|
||||
@ -3956,8 +3961,6 @@ Noverlap = floor(Nfft/2);
|
||||
[data_ol_Wz180.pxx_Ry, ~ ] = pwelch(detrend(data_ol_Wz180.Ry_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
|
||||
%% Effect of LAC - 180 deg/s
|
||||
|
||||
% Load measured noise
|
||||
data_lac_Wz180 = load('2023-08-11_17-36_m0_lac_on_30rpm.mat');
|
||||
|
||||
a = J_int_to_X*[data_lac_Wz180.d1; data_lac_Wz180.d2; data_lac_Wz180.d3; data_lac_Wz180.d4; data_lac_Wz180.d5];
|
||||
@ -3968,13 +3971,12 @@ data_lac_Wz180.Rx_int = a(4,:);
|
||||
data_lac_Wz180.Ry_int = a(5,:);
|
||||
|
||||
[data_lac_Wz180.pxx_Dx, data_lac_Wz180.f] = pwelch(detrend(data_lac_Wz180.Dx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_lac_Wz180.pxx_Dy, ~ ] = pwelch(detrend(data_lac_Wz180.Dy_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_lac_Wz180.pxx_Dz, ~ ] = pwelch(detrend(data_lac_Wz180.Dz_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_lac_Wz180.pxx_Rx, ~ ] = pwelch(detrend(data_lac_Wz180.Rx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_lac_Wz180.pxx_Ry, ~ ] = pwelch(detrend(data_lac_Wz180.Ry_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_lac_Wz180.pxx_Dy, ~ ] = pwelch(detrend(data_lac_Wz180.Dy_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_lac_Wz180.pxx_Dz, ~ ] = pwelch(detrend(data_lac_Wz180.Dz_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_lac_Wz180.pxx_Rx, ~ ] = pwelch(detrend(data_lac_Wz180.Rx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_lac_Wz180.pxx_Ry, ~ ] = pwelch(detrend(data_lac_Wz180.Ry_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
|
||||
%% Effect of HAC - 180 deg/s
|
||||
% Load measured noise
|
||||
data_hac_Wz180 = load('2023-08-11_16-49_m0_hac_on.mat');
|
||||
|
||||
a = J_int_to_X*[data_hac_Wz180.d1; data_hac_Wz180.d2; data_hac_Wz180.d3; data_hac_Wz180.d4; data_hac_Wz180.d5];
|
||||
@ -3985,10 +3987,15 @@ data_hac_Wz180.Rx_int = a(4,:);
|
||||
data_hac_Wz180.Ry_int = a(5,:);
|
||||
|
||||
[data_hac_Wz180.pxx_Dx, data_hac_Wz180.f] = pwelch(detrend(data_hac_Wz180.Dx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_hac_Wz180.pxx_Dy, ~ ] = pwelch(detrend(data_hac_Wz180.Dy_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_hac_Wz180.pxx_Dz, ~ ] = pwelch(detrend(data_hac_Wz180.Dz_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_hac_Wz180.pxx_Rx, ~ ] = pwelch(detrend(data_hac_Wz180.Rx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_hac_Wz180.pxx_Ry, ~ ] = pwelch(detrend(data_hac_Wz180.Ry_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_hac_Wz180.pxx_Dy, ~ ] = pwelch(detrend(data_hac_Wz180.Dy_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_hac_Wz180.pxx_Dz, ~ ] = pwelch(detrend(data_hac_Wz180.Dz_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_hac_Wz180.pxx_Rx, ~ ] = pwelch(detrend(data_hac_Wz180.Rx_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
[data_hac_Wz180.pxx_Ry, ~ ] = pwelch(detrend(data_hac_Wz180.Ry_int, 0), win, Noverlap, Nfft, 1/Ts);
|
||||
|
||||
% Compute closed-loop RMS errors
|
||||
data_hac_Wz180.Dy_rms_cl = rms(detrend(data_hac_Wz180.Dy_int(1e4:end), 0));
|
||||
data_hac_Wz180.Dz_rms_cl = rms(detrend(data_hac_Wz180.Dz_int(1e4:end), 0));
|
||||
data_hac_Wz180.Ry_rms_cl = rms(detrend(data_hac_Wz180.Ry_int(1e4:end), 0));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
@ -4084,14 +4091,19 @@ exportFig('figs/test_id31_hac_cas_cl_ry.pdf', 'width', 'third', 'height', 'norma
|
||||
** Reflectivity Scans
|
||||
<<ssec:test_id31_scans_reflectivity>>
|
||||
|
||||
X-ray reflectivity consists of scanning the $R_y$ angle of thin structures (typically solid/liquid interfaces) through the beam.
|
||||
Here, a $R_y$ scan is performed with a rotational velocity of $100\,\mu rad/s$ and the positioning errors in closed-loop are recorded (Figure ref:fig:test_id31_reflectivity).
|
||||
It is shown that the NASS is able to keep the point of interest in the beam within specifications.
|
||||
X-ray reflectivity measurements involve scanning thin structures, particularly solid/liquid interfaces, through the beam by varying the $R_y$ angle.
|
||||
In this experiment, a $R_y$ scan was executed at a rotational velocity of $100,\mu rad/s$, and the closed-loop positioning errors were monitored (Figure ref:fig:test_id31_reflectivity).
|
||||
The results confirm that the NASS successfully maintains the point of interest within the specified beam parameters throughout the scanning process.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Load data for the reflectivity scan
|
||||
data_ry = load("2023-08-18_15-24_first_reflectivity_m0.mat");
|
||||
data_ry.time = Ts*[0:length(data_ry.Ry_int)-1];
|
||||
|
||||
% Compute closed-loop errors
|
||||
data_ry.Dy_rms_cl = rms(detrend(data_ry.e_dy,0)); % [m RMS]
|
||||
data_ry.Dz_rms_cl = rms(detrend(data_ry.e_dz,0)); % [m RMS]
|
||||
data_ry.Ry_rms_cl = rms(detrend(data_ry.e_ry,0)); % [rad RMS]
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
@ -4191,18 +4203,17 @@ exportFig('figs/test_id31_reflectivity_ry.pdf', 'width', 'third', 'height', 'nor
|
||||
<<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_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.
|
||||
In some cases, samples are composed of several atomic "layers" that are first aligned in the horizontal plane through $R_x$ and $R_y$ positioning, followed by vertical scanning with precise $D_z$ motion.
|
||||
These vertical scans can be executed either continuously or in a step-by-step manner.
|
||||
|
||||
**** Step by Step $D_z$ motion
|
||||
|
||||
Vertical steps are here performed using the nano-hexapod only.
|
||||
Step sizes from $10\,nm$ to $1\,\mu m$ are tested, and the results are shown in Figure ref:fig:test_id31_dz_mim_steps.
|
||||
10nm steps can be resolved if detectors are integrating over 50ms (see red curve in Figure ref:fig:test_id31_dz_mim_10nm_steps), which is reasonable for many experiments.
|
||||
The vertical step motion is performed exclusively with the nano-hexapod.
|
||||
Testing was conducted across step sizes ranging from $10,nm$ to $1,\mu m$, with results presented in Figure ref:fig:test_id31_dz_mim_steps. The system successfully resolves 10nm steps when detectors integrate over a 50ms period (illustrated by the red curve in Figure ref:fig:test_id31_dz_mim_10nm_steps), which is compatible with many experimental requirements.
|
||||
|
||||
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.
|
||||
In step-by-step scanning procedures, settling time is a critical parameter as it significantly impacts the total experiment duration.
|
||||
The system achieves a response time of approximately $70,ms$ to reach the target position (within $\pm 20,nm$), as demonstrated by the $1,\mu m$ step response in Figure ref:fig:test_id31_dz_mim_1000nm_steps.
|
||||
This settling duration typically decreases for smaller step sizes.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Load Dz steps data
|
||||
@ -4309,10 +4320,10 @@ exportFig('figs/test_id31_dz_mim_1000nm_steps.pdf', 'width', 'third', 'height',
|
||||
|
||||
**** Continuous $D_z$ motion: Dirty Layer Scans
|
||||
|
||||
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.
|
||||
For these and subsequent experiments, the NASS performs "ramp scans" (constant velocity scans).
|
||||
To eliminate tracking errors, the feedback controller incorporates two integrators, compensating for the plant's lack of integral action at low frequencies.
|
||||
|
||||
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).
|
||||
Initial testing at $10,\mu m/s$ demonstrates positioning errors well within specifications (indicated by dashed lines in Figure ref:fig:test_id31_dz_scan_10ums).
|
||||
|
||||
#+begin_src matlab
|
||||
%% Dirty layer scans - 10um/s
|
||||
@ -4331,14 +4342,14 @@ 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;
|
||||
dz_10ums_dy_peak = (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 = (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 = (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));
|
||||
data_dz_10ums.Dy_rms_cl = rms(detrend(data_dz_10ums.e_dy(i_dz_10ums), 0));
|
||||
data_dz_10ums.Dz_rms_cl = rms(detrend(data_dz_10ums.e_dz(i_dz_10ums), 0));
|
||||
data_dz_10ums.Ry_rms_cl = rms(detrend(data_dz_10ums.e_ry(i_dz_10ums), 0));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@ -4347,21 +4358,21 @@ 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;
|
||||
dz_100ums_dy_peak = (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 = (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 = (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));
|
||||
data_dz_100ums.Dy_rms_cl = rms(detrend(data_dz_100ums.e_dy(i_dz_100ums), 0));
|
||||
data_dz_100ums.Dz_rms_cl = rms(detrend(data_dz_100ums.e_dz(i_dz_100ums), 0));
|
||||
data_dz_100ums.Ry_rms_cl = 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;
|
||||
hold on;
|
||||
plot(data_dz_10ums.time, 1e9*data_dz_10ums.e_dy, 'DisplayName', sprintf('$\\epsilon D_y: %.0f$ nm RMS', 1e9*rms(data_dz_10ums.e_dy)))
|
||||
plot(data_dz_10ums.time, 1e9data_dz_10ums.e_dy, 'DisplayName', sprintf('$\\epsilon D_y: %.0f$ nm RMS', 1e9*rms(data_dz_10ums.e_dy)))
|
||||
plot([0, 2.2], [specs_dy_peak, specs_dy_peak], '--', 'color', colors(1,:), 'HandleVisibility', 'off');
|
||||
plot([0, 2.2], [-specs_dy_peak, -specs_dy_peak], '--', 'color', colors(1,:), 'HandleVisibility', 'off');
|
||||
hold off;
|
||||
@ -4450,10 +4461,9 @@ exportFig('figs/test_id31_dz_scan_10ums_ry.pdf', 'width', 'third', 'height', 'no
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
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.
|
||||
A subsequent scan at $100,\mu m/s$ - the maximum velocity for high-precision $D_z$ scans[fn:8] - maintains positioning errors within specifications during the constant velocity phase, with deviations occurring only during acceleration and deceleration phases (Figure ref:fig:test_id31_dz_scan_100ums).
|
||||
Since detectors typically operate only during the constant velocity phase, these transient deviations do not compromise measurement quality.
|
||||
Yet, performance during acceleration phases could potentially be enhanced through the implementation of feedforward control.
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Dz scan at 100um/s - Lateral error
|
||||
@ -4550,42 +4560,39 @@ exportFig('figs/test_id31_dz_scan_100ums_ry.pdf', 'width', 'third', 'height', 'n
|
||||
<<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 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.
|
||||
Lateral scans are executed using the $T_y$ stage.
|
||||
The stepper motor controller[fn:5] generates a setpoint that is transmitted to the Speedgoat.
|
||||
Within the Speedgoat, the system computes the positioning error by comparing the measured $D_y$ sample position against the received setpoint, and the Nano-Hexapod compensates for positioning errors introduced during $T_y$ stage scanning.
|
||||
The scanning range is constrained $\pm 100\,\mu m$ due to the limited acceptance of the metrology system.
|
||||
|
||||
**** Slow scan
|
||||
|
||||
The $T_y$ stage is first scanned with a velocity of $10\,\mu m/s$ which is typical for such experiments.
|
||||
The errors in open-loop (i.e. without using the NASS) and in closed-loop are compared in Figure ref:fig:test_id31_dy_10ums.
|
||||
Initial testing utilized a scanning velocity of $10,\mu m/s$, which is typical for these experiments.
|
||||
Figure ref:fig:test_id31_dy_10ums compares the positioning errors between open-loop (without NASS) and closed-loop operation.
|
||||
In the scanning direction, open-loop measurements reveal periodic errors (Figure ref:fig:test_id31_dy_10ums_dy) attributable to the $T_y$ stage's stepper motor.
|
||||
These micro-stepping errors, inherent to stepper motor operation, occur 200 times per motor rotation with approximately $1\,\text{mrad}$ angular error amplitude.
|
||||
Given the $T_y$ stage's lead screw pitch of $2\,mm$, these errors manifest as $10\,\mu m$ periodic oscillations with $\approx 300\,nm$ amplitude, which can indeed be seen in the open-loop measurements (Figure ref:fig:test_id31_dy_10ums_dy).
|
||||
|
||||
In the direction of motion, periodic errors can be observed in the open-loop case (Figure ref:fig:test_id31_dy_10ums_dy).
|
||||
These errors are induced by the stepper motor being used in the $T_y$ stage.
|
||||
Indeed, stepper motors inherently have "micro-stepping errors" which are periodic errors happening 200 times per motor rotation with an amplitude approximately equal to $1\,\text{mrad}$.
|
||||
As the lead screw for the $T_y$ stage has a pitch of $2\,mm$, this means that the micro-stepping errors have a period of $10\,\mu m$ and an amplitude of $\approx 300\,nm$ which can indeed be seen in open-loop.
|
||||
|
||||
In the vertical direction (Figure ref:fig:test_id31_dy_10ums_dz), open-loop errors are most likely due to measurement errors of the metrology itself as the top interferometer point at a sphere (see Figure ref:fig:test_id31_xy_map_sphere).
|
||||
|
||||
In closed-loop, the errors are within the specifications in all directions.
|
||||
In the vertical direction (Figure ref:fig:test_id31_dy_10ums_dz), open-loop errors likely stem from metrology measurement error due to the fact that the top interferometer points at a spherical target surface (see Figure ref:fig:test_id31_xy_map_sphere).
|
||||
Under closed-loop control, positioning errors remain within specifications across all directions.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Slow Ty scan (10um/s) - OL
|
||||
data_ty_ol_slow = load("2023-08-21_20-05_ty_scan_m1_open_loop_slow.mat");
|
||||
data_ty_ol_slow.time = Ts*[0:length(data_ty_ol_slow.Dy_int)-1];
|
||||
data_ty_ol_10ums = load("2023-08-21_20-05_ty_scan_m1_open_loop_slow.mat");
|
||||
data_ty_ol_10ums.time = Ts*[0:length(data_ty_ol_10ums.Dy_int)-1];
|
||||
|
||||
%% Slow Ty scan (10um/s) - CL
|
||||
data_ty_cl_slow = load("2023-08-21_20-07_ty_scan_m1_cf_closed_loop_slow.mat");
|
||||
data_ty_cl_slow.time = Ts*[0:length(data_ty_cl_slow.Dy_int)-1];
|
||||
data_ty_cl_10ums = load("2023-08-21_20-07_ty_scan_m1_cf_closed_loop_slow.mat");
|
||||
data_ty_cl_10ums.time = Ts*[0:length(data_ty_cl_10ums.Dy_int)-1];
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Ty scan (at 10um/s) - Dy errors
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e6*data_ty_ol_slow.Ty, 1e6*detrend(data_ty_ol_slow.e_dy, 0), ...
|
||||
plot(1e6*data_ty_ol_10ums.Ty, 1e6*detrend(data_ty_ol_10ums.e_dy, 0), ...
|
||||
'DisplayName', 'Open-loop')
|
||||
plot(1e6*data_ty_cl_slow.Ty, 1e6*detrend(data_ty_cl_slow.e_dy, 0), ...
|
||||
plot(1e6*data_ty_cl_10ums.Ty, 1e6*detrend(data_ty_cl_10ums.e_dy, 0), ...
|
||||
'DisplayName', 'Closed-loop')
|
||||
plot([-100, 100], 1e-3*[specs_dy_peak, specs_dy_peak], 'k--', 'DisplayName', 'Specifications');
|
||||
plot([-100, 100], 1e-3*[-specs_dy_peak, -specs_dy_peak], 'k--', 'HandleVisibility', 'off');
|
||||
@ -4605,9 +4612,9 @@ exportFig('figs/test_id31_dy_10ums_dy.pdf', 'width', 'third', 'height', 'normal'
|
||||
%% Ty scan (at 10um/s) - Dz and Ry errors
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e6*data_ty_ol_slow.Ty, 1e6*detrend(data_ty_ol_slow.e_dz, 0), ...
|
||||
plot(1e6*data_ty_ol_10ums.Ty, 1e6*detrend(data_ty_ol_10ums.e_dz, 0), ...
|
||||
'DisplayName', 'Open-loop')
|
||||
plot(1e6*data_ty_cl_slow.Ty, 1e6*detrend(data_ty_cl_slow.e_dz, 0), ...
|
||||
plot(1e6*data_ty_cl_10ums.Ty, 1e6*detrend(data_ty_cl_10ums.e_dz, 0), ...
|
||||
'DisplayName', 'Closed-loop')
|
||||
plot([-100, 100], 1e-3*[specs_dz_peak, specs_dz_peak], 'k--', 'DisplayName', 'Specifications');
|
||||
plot([-100, 100], 1e-3*[-specs_dz_peak, -specs_dz_peak], 'k--', 'HandleVisibility', 'off');
|
||||
@ -4627,9 +4634,9 @@ exportFig('figs/test_id31_dy_10ums_dz.pdf', 'width', 'third', 'height', 'normal'
|
||||
#+begin_src matlab :exports none :results none
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e6*data_ty_ol_slow.Ty, 1e6*data_ty_ol_slow.e_ry, ...
|
||||
plot(1e6*data_ty_ol_10ums.Ty, 1e6*data_ty_ol_10ums.e_ry, ...
|
||||
'DisplayName', 'Open-loop')
|
||||
plot(1e6*data_ty_cl_slow.Ty, 1e6*data_ty_cl_slow.e_ry, ...
|
||||
plot(1e6*data_ty_cl_10ums.Ty, 1e6*data_ty_cl_10ums.e_ry, ...
|
||||
'DisplayName', 'Closed-loop')
|
||||
plot([-100, 100], [specs_ry_peak, specs_ry_peak], 'k--', 'DisplayName', 'Specifications');
|
||||
plot([-100, 100], [-specs_ry_peak, -specs_ry_peak], 'k--', 'HandleVisibility', 'off');
|
||||
@ -4672,34 +4679,33 @@ exportFig('figs/test_id31_dy_10ums_ry.pdf', 'width', 'third', 'height', 'normal'
|
||||
|
||||
**** 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.
|
||||
These vibrations are outside the bandwidth of the NASS feedback controller and therefore not well reduced in closed-loop.
|
||||
System performance was evaluated at an increased scanning velocity of $100\,\mu m/s$, with results presented in Figure ref:fig:test_id31_dy_100ums.
|
||||
At this velocity, the micro-stepping errors generate $10\,\text{Hz}$ vibrations, which are further amplified by micro-station resonances.
|
||||
These vibrations exceed the NASS feedback controller bandwidth, resulting in limited attenuation under closed-loop control.
|
||||
This limitation exemplifies why stepper motors are suboptimal for "long-stroke/short-stroke" systems requiring precise scanning performance [[cite:&dehaeze22_fastj_uhv]].
|
||||
|
||||
This is the main reason why stepper motors should be not be used for "long-stroke / short-stroke" systems when good scanning performances are wanted [[cite:&dehaeze22_fastj_uhv]].
|
||||
In order to improve the scanning performances at high velocity, the stepper motor of the $T_y$ stage could be replaced by a three-phase torque motor for instance.
|
||||
|
||||
As the closed-loop errors in $D_z$ and $R_y$ directions are within specifications (see Figures ref:fig:test_id31_dy_100ums_dz and ref:fig:test_id31_dy_100ums_ry), another option would be to trigger the detectors based on the measured $D_y$ position instead of based on time or on the $T_y$ setpoint.
|
||||
This would make the experiment less sensitive to $D_y$ vibrations.
|
||||
For small $D_y$ scans, the nano-hexapod alone can be used for the scans, but with limited strokes.
|
||||
Two potential solutions exist for improving high-velocity scanning performance.
|
||||
First, the $T_y$ stage's stepper motor could be replaced with a three-phase torque motor.
|
||||
Alternatively, since closed-loop errors in $D_z$ and $R_y$ directions remain within specifications (Figures ref:fig:test_id31_dy_100ums_dz and ref:fig:test_id31_dy_100ums_ry), detector triggering could be based on measured $D_y$ position rather than time or $T_y$ setpoint, reducing sensitivity to $D_y$ vibrations.
|
||||
For applications requiring small $D_y$ scans, the nano-hexapod can be used exclusively, though with limited stroke capability.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Fast Ty scan (100um/s) - OL
|
||||
data_ty_ol_fast = load("2023-08-21_20-05_ty_scan_m1_open_loop.mat");
|
||||
data_ty_ol_fast.time = Ts*[0:length(data_ty_ol_fast.Dy_int)-1];
|
||||
data_ty_ol_100ums = load("2023-08-21_20-05_ty_scan_m1_open_loop.mat");
|
||||
data_ty_ol_100ums.time = Ts*[0:length(data_ty_ol_100ums.Dy_int)-1];
|
||||
|
||||
%% Fast Ty scan (10um/s) - CL
|
||||
data_ty_cl_fast = load("2023-08-21_20-07_ty_scan_m1_cf_closed_loop.mat");
|
||||
data_ty_cl_fast.time = Ts*[0:length(data_ty_cl_fast.Dy_int)-1];
|
||||
%% Fast Ty scan (100um/s) - CL
|
||||
data_ty_cl_100ums = load("2023-08-21_20-07_ty_scan_m1_cf_closed_loop.mat");
|
||||
data_ty_cl_100ums.time = Ts*[0:length(data_ty_cl_100ums.Dy_int)-1];
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Ty scan (at 100um/s) - Dy errors
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e6*data_ty_ol_fast.Ty, 1e6*detrend(data_ty_ol_fast.e_dy, 0), ...
|
||||
plot(1e6*data_ty_ol_100ums.Ty, 1e6*detrend(data_ty_ol_100ums.e_dy, 0), ...
|
||||
'DisplayName', 'Open-loop')
|
||||
plot(1e6*data_ty_cl_fast.Ty, 1e6*detrend(data_ty_cl_fast.e_dy, 0), ...
|
||||
plot(1e6*data_ty_cl_100ums.Ty, 1e6*detrend(data_ty_cl_100ums.e_dy, 0), ...
|
||||
'DisplayName', 'Closed-loop')
|
||||
plot([-100, 100], 1e-3*[specs_dy_peak, specs_dy_peak], 'k--', 'DisplayName', 'Specifications');
|
||||
plot([-100, 100], 1e-3*[-specs_dy_peak, -specs_dy_peak], 'k--', 'HandleVisibility', 'off');
|
||||
@ -4720,9 +4726,9 @@ exportFig('figs/test_id31_dy_100ums_dy.pdf', 'width', 'third', 'height', 'normal
|
||||
%% Ty scan (at 100um/s) - Dz and Ry errors
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e6*data_ty_ol_fast.Ty, 1e6*detrend(data_ty_ol_fast.e_dz, 0), ...
|
||||
plot(1e6*data_ty_ol_100ums.Ty, 1e6*detrend(data_ty_ol_100ums.e_dz, 0), ...
|
||||
'DisplayName', 'Open-loop')
|
||||
plot(1e6*data_ty_cl_fast.Ty, 1e6*detrend(data_ty_cl_fast.e_dz, 0), ...
|
||||
plot(1e6*data_ty_cl_100ums.Ty, 1e6*detrend(data_ty_cl_100ums.e_dz, 0), ...
|
||||
'DisplayName', 'Closed-loop')
|
||||
plot([-100, 100], 1e-3*[specs_dz_peak, specs_dz_peak], 'k--', 'DisplayName', 'Specifications');
|
||||
plot([-100, 100], 1e-3*[-specs_dz_peak, -specs_dz_peak], 'k--', 'HandleVisibility', 'off');
|
||||
@ -4742,9 +4748,9 @@ exportFig('figs/test_id31_dy_100ums_dz.pdf', 'width', 'third', 'height', 'normal
|
||||
#+begin_src matlab :exports none :results none
|
||||
figure;
|
||||
hold on;
|
||||
plot(1e6*data_ty_ol_fast.Ty, 1e6*data_ty_ol_fast.e_ry, ...
|
||||
plot(1e6*data_ty_ol_100ums.Ty, 1e6*data_ty_ol_100ums.e_ry, ...
|
||||
'DisplayName', 'Open-loop')
|
||||
plot(1e6*data_ty_cl_fast.Ty, 1e6*data_ty_cl_fast.e_ry, ...
|
||||
plot(1e6*data_ty_cl_100ums.Ty, 1e6*data_ty_cl_100ums.e_ry, ...
|
||||
'DisplayName', 'Closed-loop')
|
||||
plot([-100, 100], [specs_ry_peak, specs_ry_peak], 'k--', 'DisplayName', 'Specifications');
|
||||
plot([-100, 100], [-specs_ry_peak, -specs_ry_peak], 'k--', 'HandleVisibility', 'off');
|
||||
@ -4787,74 +4793,70 @@ exportFig('figs/test_id31_dy_100ums_ry.pdf', 'width', 'third', 'height', 'normal
|
||||
|
||||
#+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);
|
||||
i_ty_cl_slow = data_ty_cl_slow.Ty > data_ty_cl_slow.Ty(1) & data_ty_cl_slow.Ty < data_ty_cl_slow.Ty(end);
|
||||
i_ty_ol_fast = data_ty_ol_fast.Ty > data_ty_ol_fast.Ty(1) & data_ty_ol_fast.Ty < data_ty_ol_fast.Ty(end);
|
||||
i_ty_cl_fast = data_ty_cl_fast.Ty > data_ty_cl_fast.Ty(1) & data_ty_cl_fast.Ty < data_ty_cl_fast.Ty(end);
|
||||
i_ty_ol_10ums = data_ty_ol_10ums.Ty > data_ty_ol_10ums.Ty(1) & data_ty_ol_10ums.Ty < data_ty_ol_10ums.Ty(end);
|
||||
i_ty_cl_10ums = data_ty_cl_10ums.Ty > data_ty_cl_10ums.Ty(1) & data_ty_cl_10ums.Ty < data_ty_cl_10ums.Ty(end);
|
||||
i_ty_ol_100ums = data_ty_ol_100ums.Ty > data_ty_ol_100ums.Ty(1) & data_ty_ol_100ums.Ty < data_ty_ol_100ums.Ty(end);
|
||||
i_ty_cl_100ums = data_ty_cl_100ums.Ty > data_ty_cl_100ums.Ty(1) & data_ty_cl_100ums.Ty < data_ty_cl_100ums.Ty(end);
|
||||
|
||||
% Peak to Peak errors
|
||||
ty_ol_slow_dy_peak = 1e9*(max(detrend(data_ty_ol_slow.e_dy(i_ty_ol_slow), 0))-min(detrend(data_ty_ol_slow.e_dy(i_ty_ol_slow), 0)))/2;
|
||||
ty_ol_slow_dz_peak = 1e9*(max(detrend(data_ty_ol_slow.e_dz(i_ty_ol_slow), 0))-min(detrend(data_ty_ol_slow.e_dz(i_ty_ol_slow), 0)))/2;
|
||||
ty_ol_slow_ry_peak = 1e6*(max(detrend(data_ty_ol_slow.e_ry(i_ty_ol_slow), 0))-min(detrend(data_ty_ol_slow.e_ry(i_ty_ol_slow), 0)))/2;
|
||||
ty_ol_10ums_dy_peak = (max(detrend(data_ty_ol_10ums.e_dy(i_ty_ol_10ums), 0))-min(detrend(data_ty_ol_10ums.e_dy(i_ty_ol_10ums), 0)))/2;
|
||||
ty_ol_10ums_dz_peak = (max(detrend(data_ty_ol_10ums.e_dz(i_ty_ol_10ums), 0))-min(detrend(data_ty_ol_10ums.e_dz(i_ty_ol_10ums), 0)))/2;
|
||||
ty_ol_10ums_ry_peak = (max(detrend(data_ty_ol_10ums.e_ry(i_ty_ol_10ums), 0))-min(detrend(data_ty_ol_10ums.e_ry(i_ty_ol_10ums), 0)))/2;
|
||||
|
||||
ty_cl_slow_dy_peak = 1e9*(max(detrend(data_ty_cl_slow.e_dy(i_ty_cl_slow), 0))-min(detrend(data_ty_cl_slow.e_dy(i_ty_cl_slow), 0)))/2;
|
||||
ty_cl_slow_dz_peak = 1e9*(max(detrend(data_ty_cl_slow.e_dz(i_ty_cl_slow), 0))-min(detrend(data_ty_cl_slow.e_dz(i_ty_cl_slow), 0)))/2;
|
||||
ty_cl_slow_ry_peak = 1e6*(max(detrend(data_ty_cl_slow.e_ry(i_ty_cl_slow), 0))-min(detrend(data_ty_cl_slow.e_ry(i_ty_cl_slow), 0)))/2;
|
||||
ty_cl_10ums_dy_peak = (max(detrend(data_ty_cl_10ums.e_dy(i_ty_cl_10ums), 0))-min(detrend(data_ty_cl_10ums.e_dy(i_ty_cl_10ums), 0)))/2;
|
||||
ty_cl_10ums_dz_peak = (max(detrend(data_ty_cl_10ums.e_dz(i_ty_cl_10ums), 0))-min(detrend(data_ty_cl_10ums.e_dz(i_ty_cl_10ums), 0)))/2;
|
||||
ty_cl_10ums_ry_peak = (max(detrend(data_ty_cl_10ums.e_ry(i_ty_cl_10ums), 0))-min(detrend(data_ty_cl_10ums.e_ry(i_ty_cl_10ums), 0)))/2;
|
||||
|
||||
ty_ol_fast_dy_peak = 1e9*(max(detrend(data_ty_ol_fast.e_dy(i_ty_ol_fast), 0))-min(detrend(data_ty_ol_fast.e_dy(i_ty_ol_fast), 0)))/2;
|
||||
ty_ol_fast_dz_peak = 1e9*(max(detrend(data_ty_ol_fast.e_dz(i_ty_ol_fast), 0))-min(detrend(data_ty_ol_fast.e_dz(i_ty_ol_fast), 0)))/2;
|
||||
ty_ol_fast_ry_peak = 1e6*(max(detrend(data_ty_ol_fast.e_ry(i_ty_ol_fast), 0))-min(detrend(data_ty_ol_fast.e_ry(i_ty_ol_fast), 0)))/2;
|
||||
ty_ol_100ums_dy_peak = (max(detrend(data_ty_ol_100ums.e_dy(i_ty_ol_100ums), 0))-min(detrend(data_ty_ol_100ums.e_dy(i_ty_ol_100ums), 0)))/2;
|
||||
ty_ol_100ums_dz_peak = (max(detrend(data_ty_ol_100ums.e_dz(i_ty_ol_100ums), 0))-min(detrend(data_ty_ol_100ums.e_dz(i_ty_ol_100ums), 0)))/2;
|
||||
ty_ol_100ums_ry_peak = (max(detrend(data_ty_ol_100ums.e_ry(i_ty_ol_100ums), 0))-min(detrend(data_ty_ol_100ums.e_ry(i_ty_ol_100ums), 0)))/2;
|
||||
|
||||
ty_cl_fast_dy_peak = 1e9*(max(detrend(data_ty_cl_fast.e_dy(i_ty_cl_fast), 0))-min(detrend(data_ty_cl_fast.e_dy(i_ty_cl_fast), 0)))/2;
|
||||
ty_cl_fast_dz_peak = 1e9*(max(detrend(data_ty_cl_fast.e_dz(i_ty_cl_fast), 0))-min(detrend(data_ty_cl_fast.e_dz(i_ty_cl_fast), 0)))/2;
|
||||
ty_cl_fast_ry_peak = 1e6*(max(detrend(data_ty_cl_fast.e_ry(i_ty_cl_fast), 0))-min(detrend(data_ty_cl_fast.e_ry(i_ty_cl_fast), 0)))/2;
|
||||
ty_cl_100ums_dy_peak = (max(detrend(data_ty_cl_100ums.e_dy(i_ty_cl_100ums), 0))-min(detrend(data_ty_cl_100ums.e_dy(i_ty_cl_100ums), 0)))/2;
|
||||
ty_cl_100ums_dz_peak = (max(detrend(data_ty_cl_100ums.e_dz(i_ty_cl_100ums), 0))-min(detrend(data_ty_cl_100ums.e_dz(i_ty_cl_100ums), 0)))/2;
|
||||
ty_cl_100ums_ry_peak = (max(detrend(data_ty_cl_100ums.e_ry(i_ty_cl_100ums), 0))-min(detrend(data_ty_cl_100ums.e_ry(i_ty_cl_100ums), 0)))/2;
|
||||
|
||||
% RMS error
|
||||
ty_ol_slow_dy_rms = 1e9*rms(detrend(data_ty_ol_slow.e_dy(i_ty_ol_slow), 0));
|
||||
ty_ol_slow_dz_rms = 1e9*rms(detrend(data_ty_ol_slow.e_dz(i_ty_ol_slow), 0));
|
||||
ty_ol_slow_ry_rms = 1e6*rms(detrend(data_ty_ol_slow.e_ry(i_ty_ol_slow), 0));
|
||||
data_ty_ol_10ums.Dy_rms = rms(detrend(data_ty_ol_10ums.e_dy(i_ty_ol_10ums), 0));
|
||||
data_ty_ol_10ums.Dz_rms = rms(detrend(data_ty_ol_10ums.e_dz(i_ty_ol_10ums), 0));
|
||||
data_ty_ol_10ums.Ry_rms = rms(detrend(data_ty_ol_10ums.e_ry(i_ty_ol_10ums), 0));
|
||||
|
||||
ty_cl_slow_dy_rms = 1e9*rms(detrend(data_ty_cl_slow.e_dy(i_ty_cl_slow), 0));
|
||||
ty_cl_slow_dz_rms = 1e9*rms(detrend(data_ty_cl_slow.e_dz(i_ty_cl_slow), 0));
|
||||
ty_cl_slow_ry_rms = 1e6*rms(detrend(data_ty_cl_slow.e_ry(i_ty_cl_slow), 0));
|
||||
data_ty_cl_10ums.Dy_rms = rms(detrend(data_ty_cl_10ums.e_dy(i_ty_cl_10ums), 0));
|
||||
data_ty_cl_10ums.Dz_rms = rms(detrend(data_ty_cl_10ums.e_dz(i_ty_cl_10ums), 0));
|
||||
data_ty_cl_10ums.Ry_rms = rms(detrend(data_ty_cl_10ums.e_ry(i_ty_cl_10ums), 0));
|
||||
|
||||
ty_ol_fast_dy_rms = 1e9*rms(detrend(data_ty_ol_fast.e_dy(i_ty_ol_fast), 0));
|
||||
ty_ol_fast_dz_rms = 1e9*rms(detrend(data_ty_ol_fast.e_dz(i_ty_ol_fast), 0));
|
||||
ty_ol_fast_ry_rms = 1e6*rms(detrend(data_ty_ol_fast.e_ry(i_ty_ol_fast), 0));
|
||||
data_ty_ol_100ums.Dy_rms = rms(detrend(data_ty_ol_100ums.e_dy(i_ty_ol_100ums), 0));
|
||||
data_ty_ol_100ums.Dz_rms = rms(detrend(data_ty_ol_100ums.e_dz(i_ty_ol_100ums), 0));
|
||||
data_ty_ol_100ums.Ry_rms = rms(detrend(data_ty_ol_100ums.e_ry(i_ty_ol_100ums), 0));
|
||||
|
||||
ty_cl_fast_dy_rms = 1e9*rms(detrend(data_ty_cl_fast.e_dy(i_ty_cl_fast), 0));
|
||||
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));
|
||||
data_ty_cl_100ums.Dy_rms = rms(detrend(data_ty_cl_100ums.e_dy(i_ty_cl_100ums), 0));
|
||||
data_ty_cl_100ums.Dz_rms = rms(detrend(data_ty_cl_100ums.e_dz(i_ty_cl_100ums), 0));
|
||||
data_ty_cl_100ums.Ry_rms = rms(detrend(data_ty_cl_100ums.e_ry(i_ty_cl_100ums), 0));
|
||||
#+end_src
|
||||
|
||||
** 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 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$.
|
||||
|
||||
The $D_y$ setpoint and the measured positions are shown for all tested velocities in Figure ref:fig:test_id31_diffraction_tomo_setpoint.
|
||||
In diffraction tomography experiments, the micro-station executes combined motions: continuous rotation around the $R_z$ axis while performing lateral scans along $D_y$.
|
||||
For this validation, the spindle maintained a constant rotational velocity of $6\,\text{deg/s}$ while the nano-hexapod executed the lateral scanning motion.
|
||||
To avoid high-frequency vibrations typically induced by the stepper motor, the $T_y$ stage was not utilized, which constrained the scanning range to approximately $\pm 100\,\mu m/s$.
|
||||
The system's performance was evaluated at three lateral scanning velocities: $0.1\,mm/s$, $0.5\,mm/s$, and $1\,mm/s$. Figure ref:fig:test_id31_diffraction_tomo_setpoint presents both the $D_y$ position setpoints and the corresponding measured $D_y$ positions for all tested velocities.
|
||||
|
||||
#+begin_src matlab
|
||||
%% 100um/s - Robust controller
|
||||
data_dt_100ums = load("2023-08-18_17-12_diffraction_tomo_m0.mat");
|
||||
t = Ts*[0:length(data_dt_100ums.Dy_int)-1];
|
||||
data_dt_100ums = structfun(@(field) field(t>1.0861),data_dt_100ums, 'UniformOutput', false)
|
||||
data_dt_100ums = structfun(@(field) field(t>1.0861),data_dt_100ums, 'UniformOutput', false);
|
||||
data_dt_100ums.time = Ts*[0:length(data_dt_100ums.Dy_int)-1];
|
||||
|
||||
%% 500um/s - Complementary filters
|
||||
data_dt_500ums = load("2023-08-21_15-15_diffraction_tomo_m0_fast_cf.mat");
|
||||
t = Ts*[0:length(data_dt_500ums.Dy_int)-1];
|
||||
data_dt_500ums = structfun(@(field) field(t>0.275),data_dt_500ums, 'UniformOutput', false)
|
||||
data_dt_500ums = structfun(@(field) field(t>0.275),data_dt_500ums, 'UniformOutput', false);
|
||||
data_dt_500ums.time = Ts*[0:length(data_dt_500ums.Dy_int)-1];
|
||||
|
||||
%% 1mm/s - Complementary filters
|
||||
data_dt_1000ums = load("2023-08-21_15-16_diffraction_tomo_m0_fast_cf.mat");
|
||||
t = Ts*[0:length(data_dt_1000ums.Dy_int)-1];
|
||||
data_dt_1000ums = structfun(@(field) field(t>0.19),data_dt_1000ums, 'UniformOutput', false)
|
||||
data_dt_1000ums = structfun(@(field) field(t>0.19),data_dt_1000ums, 'UniformOutput', false);
|
||||
data_dt_1000ums.time = Ts*[0:length(data_dt_1000ums.Dy_int)-1];
|
||||
#+end_src
|
||||
|
||||
@ -4891,10 +4893,11 @@ exportFig('figs/test_id31_diffraction_tomo_setpoint.pdf', 'width', 'wide', 'heig
|
||||
#+RESULTS:
|
||||
[[file:figs/test_id31_diffraction_tomo_setpoint.png]]
|
||||
|
||||
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$, 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.
|
||||
The positioning errors measured along $D_y$, $D_z$, and $R_y$ directions are displayed in Figure ref:fig:test_id31_diffraction_tomo.
|
||||
The system maintained positioning errors within specifications for both $D_z$ and $R_y$ (Figures ref:fig:test_id31_diffraction_tomo_dz and ref:fig:test_id31_diffraction_tomo_ry).
|
||||
However, lateral positioning errors exceeded specifications during acceleration and deceleration phases (Figure ref:fig:test_id31_diffraction_tomo_dy).
|
||||
Since these large errors occurred only during $\approx 20\,ms$ intervals, the issue could be addressed by implementing a corresponding delay in detector integration.
|
||||
Alternatively, developing a feedforward controller could improve lateral positioning accuracy during these transient phases.
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Diffraction Tomography - Dy errors for several configured velocities
|
||||
@ -4970,7 +4973,6 @@ leg.ItemTokenSize(1) = 15;
|
||||
exportFig('figs/test_id31_diffraction_tomo_ry.pdf', 'width', 'third', 'height', 'normal');
|
||||
#+end_src
|
||||
|
||||
|
||||
#+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 $6\,\text{deg/s}$).
|
||||
#+attr_latex: :options [htbp]
|
||||
@ -5033,158 +5035,104 @@ for i = i_dec(2:2:end)
|
||||
end
|
||||
|
||||
% Peak to Peak errors
|
||||
dt_100ums_dy_peak = 1e9*(max(detrend(data_dt_100ums.Dy_int(i_dt_100ums)-data_dt_100ums.m_hexa_dy(i_dt_100ums), 0))-min(detrend(data_dt_100ums.Dy_int(i_dt_100ums)-data_dt_100ums.m_hexa_dy(i_dt_100ums), 0)))/2;
|
||||
dt_100ums_dz_peak = 1e9*(max(detrend(data_dt_100ums.Dz_int(i_dt_100ums), 0))-min(detrend(data_dt_100ums.Dz_int(i_dt_100ums), 0)))/2;
|
||||
dt_100ums_ry_peak = 1e6*(max(detrend(data_dt_100ums.Ry_int(i_dt_100ums), 0))-min(detrend(data_dt_100ums.Ry_int(i_dt_100ums), 0)))/2;
|
||||
dt_100ums_dy_peak = (max(detrend(data_dt_100ums.Dy_int(i_dt_100ums)-data_dt_100ums.m_hexa_dy(i_dt_100ums), 0))-min(detrend(data_dt_100ums.Dy_int(i_dt_100ums)-data_dt_100ums.m_hexa_dy(i_dt_100ums), 0)))/2;
|
||||
dt_100ums_dz_peak = (max(detrend(data_dt_100ums.Dz_int(i_dt_100ums), 0))-min(detrend(data_dt_100ums.Dz_int(i_dt_100ums), 0)))/2;
|
||||
dt_100ums_ry_peak = (max(detrend(data_dt_100ums.Ry_int(i_dt_100ums), 0))-min(detrend(data_dt_100ums.Ry_int(i_dt_100ums), 0)))/2;
|
||||
|
||||
dt_500ums_dy_peak = 1e9*(max(detrend(data_dt_500ums.Dy_int(i_dt_500ums)-data_dt_500ums.m_hexa_dy(i_dt_500ums), 0))-min(detrend(data_dt_500ums.Dy_int(i_dt_500ums)-data_dt_500ums.m_hexa_dy(i_dt_500ums), 0)))/2;
|
||||
dt_500ums_dz_peak = 1e9*(max(detrend(data_dt_500ums.Dz_int(i_dt_500ums), 0))-min(detrend(data_dt_500ums.Dz_int(i_dt_500ums), 0)))/2;
|
||||
dt_500ums_ry_peak = 1e6*(max(detrend(data_dt_500ums.Ry_int(i_dt_500ums), 0))-min(detrend(data_dt_500ums.Ry_int(i_dt_500ums), 0)))/2;
|
||||
dt_500ums_dy_peak = (max(detrend(data_dt_500ums.Dy_int(i_dt_500ums)-data_dt_500ums.m_hexa_dy(i_dt_500ums), 0))-min(detrend(data_dt_500ums.Dy_int(i_dt_500ums)-data_dt_500ums.m_hexa_dy(i_dt_500ums), 0)))/2;
|
||||
dt_500ums_dz_peak = (max(detrend(data_dt_500ums.Dz_int(i_dt_500ums), 0))-min(detrend(data_dt_500ums.Dz_int(i_dt_500ums), 0)))/2;
|
||||
dt_500ums_ry_peak = (max(detrend(data_dt_500ums.Ry_int(i_dt_500ums), 0))-min(detrend(data_dt_500ums.Ry_int(i_dt_500ums), 0)))/2;
|
||||
|
||||
dt_1000ums_dy_peak = 1e9*(max(detrend(data_dt_1000ums.Dy_int(i_dt_1000ums)-data_dt_1000ums.m_hexa_dy(i_dt_1000ums), 0))-min(detrend(data_dt_1000ums.Dy_int(i_dt_1000ums)-data_dt_1000ums.m_hexa_dy(i_dt_1000ums), 0)))/2;
|
||||
dt_1000ums_dz_peak = 1e9*(max(detrend(data_dt_1000ums.Dz_int(i_dt_1000ums), 0))-min(detrend(data_dt_1000ums.Dz_int(i_dt_1000ums), 0)))/2;
|
||||
dt_1000ums_ry_peak = 1e6*(max(detrend(data_dt_1000ums.Ry_int(i_dt_1000ums), 0))-min(detrend(data_dt_1000ums.Ry_int(i_dt_1000ums), 0)))/2;
|
||||
dt_1000ums_dy_peak = (max(detrend(data_dt_1000ums.Dy_int(i_dt_1000ums)-data_dt_1000ums.m_hexa_dy(i_dt_1000ums), 0))-min(detrend(data_dt_1000ums.Dy_int(i_dt_1000ums)-data_dt_1000ums.m_hexa_dy(i_dt_1000ums), 0)))/2;
|
||||
dt_1000ums_dz_peak = (max(detrend(data_dt_1000ums.Dz_int(i_dt_1000ums), 0))-min(detrend(data_dt_1000ums.Dz_int(i_dt_1000ums), 0)))/2;
|
||||
dt_1000ums_ry_peak = (max(detrend(data_dt_1000ums.Ry_int(i_dt_1000ums), 0))-min(detrend(data_dt_1000ums.Ry_int(i_dt_1000ums), 0)))/2;
|
||||
|
||||
% RMS error
|
||||
dt_100ums_dy_rms = 1e9*(rms(detrend(data_dt_100ums.Dy_int(i_dt_100ums)-data_dt_100ums.m_hexa_dy(i_dt_100ums), 0)));
|
||||
dt_100ums_dz_rms = 1e9*(rms(detrend(data_dt_100ums.Dz_int(i_dt_100ums), 0)));
|
||||
dt_100ums_ry_rms = 1e6*(rms(detrend(data_dt_100ums.Ry_int(i_dt_100ums), 0)));
|
||||
data_dt_100ums.Dy_rms_cl = rms(detrend(data_dt_100ums.Dy_int(i_dt_100ums)-data_dt_100ums.m_hexa_dy(i_dt_100ums), 0));
|
||||
data_dt_100ums.Dz_rms_cl = rms(detrend(data_dt_100ums.Dz_int(i_dt_100ums), 0));
|
||||
data_dt_100ums.Ry_rms_cl = rms(detrend(data_dt_100ums.Ry_int(i_dt_100ums), 0));
|
||||
|
||||
dt_500ums_dy_rms = 1e9*(rms(detrend(data_dt_500ums.Dy_int(i_dt_500ums)-data_dt_500ums.m_hexa_dy(i_dt_500ums), 0)));
|
||||
dt_500ums_dz_rms = 1e9*(rms(detrend(data_dt_500ums.Dz_int(i_dt_500ums), 0)));
|
||||
dt_500ums_ry_rms = 1e6*(rms(detrend(data_dt_500ums.Ry_int(i_dt_500ums), 0)));
|
||||
data_dt_500ums.Dy_rms_cl = rms(detrend(data_dt_500ums.Dy_int(i_dt_500ums)-data_dt_500ums.m_hexa_dy(i_dt_500ums), 0));
|
||||
data_dt_500ums.Dz_rms_cl = rms(detrend(data_dt_500ums.Dz_int(i_dt_500ums), 0));
|
||||
data_dt_500ums.Ry_rms_cl = rms(detrend(data_dt_500ums.Ry_int(i_dt_500ums), 0));
|
||||
|
||||
dt_1000ums_dy_rms = 1e9*(rms(detrend(data_dt_1000ums.Dy_int(i_dt_1000ums)-data_dt_1000ums.m_hexa_dy(i_dt_1000ums), 0)));
|
||||
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)));
|
||||
data_dt_1000ums.Dy_rms_cl = rms(detrend(data_dt_1000ums.Dy_int(i_dt_1000ums)-data_dt_1000ums.m_hexa_dy(i_dt_1000ums), 0));
|
||||
data_dt_1000ums.Dz_rms_cl = rms(detrend(data_dt_1000ums.Dz_int(i_dt_1000ums), 0));
|
||||
data_dt_1000ums.Ry_rms_cl = rms(detrend(data_dt_1000ums.Ry_int(i_dt_1000ums), 0));
|
||||
#+end_src
|
||||
|
||||
** Conclusion
|
||||
<<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.
|
||||
A comprehensive series of experimental validations was conducted to evaluate the NASS performance across a wide range of typical scientific experiments.
|
||||
The system demonstrated robust performance in most scenarios, with positioning errors generally remaining within specified tolerances (30 nm RMS in $D_y$, 15 nm RMS in $D_z$, and 250 nrad RMS in $R_y$).
|
||||
|
||||
- [ ] Remove 20ms at the start of each scan for Dy
|
||||
- [ ] Add result for move aggressive controller (tomography, 180deg/s)
|
||||
For tomography experiments, the NASS successfully maintained positioning accuracy at rotational velocities up to $180\,\text{deg/s}$ with light payloads, though performance degraded somewhat with heavier masses.
|
||||
The HAC-LAC control architecture proved particularly effective, with the decentralized IFF providing damping of nano-hexapod suspension modes while the high authority controller addressed low-frequency disturbances.
|
||||
|
||||
Vertical scanning capabilities were validated in both step-by-step and continuous motion modes.
|
||||
The system successfully resolved 10 nm steps with 50 ms detector integration time, while maintaining positioning accuracy during continuous scans at speeds up to $100\,\mu m/s$.
|
||||
|
||||
For lateral scanning, the system performed well at moderate speeds ($10\,\mu m/s$) but showed limitations at higher velocities ($100\,\mu m/s$) due to stepper motor-induced vibrations in the $T_y$ stage.
|
||||
|
||||
The most challenging test case - diffraction tomography combining rotation and lateral scanning - demonstrated the system's ability to maintain vertical and angular stability while highlighting some limitations in lateral positioning during rapid accelerations.
|
||||
These limitations could potentially be addressed through feedforward control or alternative detector triggering strategies.
|
||||
|
||||
Overall, the experimental results validate the effectiveness of the developed control architecture and demonstrate that the NASS meets most design specifications across a wide range of operating conditions (summarized in Table ref:tab:id31_experiments_results_summary).
|
||||
The identified limitations, primarily related to high-speed lateral scanning and heavy payload handling, provide clear directions for future improvements.
|
||||
|
||||
#+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_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
|
||||
1e9*rms(detrend(data_ry.e_dy,0)), 1e9*rms(detrend(data_ry.e_dz,0)), 1e9*rms(detrend(data_ry.e_ry,0)) ; ... % Ry 100urad/s
|
||||
1e9*rms(detrend(data_ty_cl_slow.e_dy, 0)), 1e9*rms(detrend(data_ty_cl_slow.e_dz, 0)), 1e9*rms(detrend(data_ty_cl_slow.e_ry, 0)) ; ... % Dy 10 um/s
|
||||
1e9*rms(detrend(data_dt_100ums.Dy_int-data_dt_100ums.m_hexa_dy, 0)), 1e9*rms(detrend(data_dt_100ums.Dz_int, 0)), 1e9*rms(detrend(data_dt_100ums.Ry_int, 0)); ... % Diffraction tomo 0.1mm/s
|
||||
1e9*rms(detrend(data_dt_1000ums.Dy_int-data_dt_1000ums.m_hexa_dy,0)), 1e9*rms(detrend(data_dt_1000ums.Dz_int,0)), 1e9*rms(detrend(data_dt_1000ums.Ry_int,0)) ... % Diffraction tomo 1mm/s
|
||||
];
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
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 ');
|
||||
1e9*data_tomo_m0_Wz6.Dy_rms_ol, 1e9*data_tomo_m0_Wz6.Dz_rms_ol, 1e6*data_tomo_m0_Wz6.Ry_rms_ol % Tomo - OL - 6deg/s - 0kg
|
||||
1e9*data_tomo_m0_Wz6.Dy_rms_cl, 1e9*data_tomo_m0_Wz6.Dz_rms_cl, 1e6*data_tomo_m0_Wz6.Ry_rms_cl % Tomo - CL - 6deg/s - 0kg
|
||||
1e9*data_tomo_m1_Wz6.Dy_rms_ol, 1e9*data_tomo_m1_Wz6.Dz_rms_ol, 1e6*data_tomo_m1_Wz6.Ry_rms_ol % Tomo - OL - 6deg/s - 13kg
|
||||
1e9*data_tomo_m1_Wz6.Dy_rms_cl, 1e9*data_tomo_m1_Wz6.Dz_rms_cl, 1e6*data_tomo_m1_Wz6.Ry_rms_cl % Tomo - CL - 6deg/s - 13kg
|
||||
1e9*data_tomo_m2_Wz6.Dy_rms_ol, 1e9*data_tomo_m2_Wz6.Dz_rms_ol, 1e6*data_tomo_m2_Wz6.Ry_rms_ol % Tomo - OL - 6deg/s - 26kg
|
||||
1e9*data_tomo_m2_Wz6.Dy_rms_cl, 1e9*data_tomo_m2_Wz6.Dz_rms_cl, 1e6*data_tomo_m2_Wz6.Ry_rms_cl % Tomo - CL - 6deg/s - 26kg
|
||||
1e9*data_tomo_m3_Wz6.Dy_rms_ol, 1e9*data_tomo_m3_Wz6.Dz_rms_ol, 1e6*data_tomo_m3_Wz6.Ry_rms_ol % Tomo - OL - 6deg/s - 39kg
|
||||
1e9*data_tomo_m3_Wz6.Dy_rms_cl, 1e9*data_tomo_m3_Wz6.Dz_rms_cl, 1e6*data_tomo_m3_Wz6.Ry_rms_cl % Tomo - CL - 6deg/s - 39kg
|
||||
1e9*data_tomo_m0_Wz180.Dy_rms_ol, 1e9*data_tomo_m0_Wz180.Dz_rms_ol, 1e6*data_tomo_m0_Wz180.Ry_rms_ol % Tomo - OL - 180deg/s - 0kg
|
||||
1e9*data_tomo_m0_Wz180.Dy_rms_cl, 1e9*data_tomo_m0_Wz180.Dz_rms_cl, 1e6*data_tomo_m0_Wz180.Ry_rms_cl % Tomo - CL - 180deg/s - 0kg
|
||||
1e9*data_hac_Wz180.Dy_rms_cl, 1e9*data_hac_Wz180.Dz_rms_cl, 1e6*data_hac_Wz180.Ry_rms_cl % Tomo - CL (high performance HAC) - 180deg/s - 0kg
|
||||
1e9*data_ry.Dy_rms_cl, 1e9*data_ry.Dz_rms_cl, 1e6*data_ry.Ry_rms_cl % Ry 100urad/s
|
||||
1e9*data_dz_10ums.Dy_rms_cl, 1e9*data_dz_10ums.Dz_rms_cl, 1e6*data_dz_10ums.Ry_rms_cl % Dz 10um/s
|
||||
1e9*data_dz_100ums.Dy_rms_cl, 1e9*data_dz_100ums.Dz_rms_cl, 1e6*data_dz_100ums.Ry_rms_cl % Dz 100um/s
|
||||
1e9*data_ty_ol_10ums.Dy_rms, 1e9*data_ty_ol_10ums.Dz_rms, 1e6*data_ty_ol_10ums.Ry_rms % Ty - OL - 10um/s
|
||||
1e9*data_ty_cl_10ums.Dy_rms, 1e9*data_ty_cl_10ums.Dz_rms, 1e6*data_ty_cl_10ums.Ry_rms % Ty - CL - 10um/s
|
||||
1e9*data_ty_ol_100ums.Dy_rms, 1e9*data_ty_ol_100ums.Dz_rms, 1e6*data_ty_ol_100ums.Ry_rms % Ty - OL - 100um/s
|
||||
1e9*data_ty_cl_100ums.Dy_rms, 1e9*data_ty_cl_100ums.Dz_rms, 1e6*data_ty_cl_100ums.Ry_rms % Ty - CL - 100um/s
|
||||
1e9*data_dt_100ums.Dy_rms_cl, 1e9*data_dt_100ums.Dz_rms_cl, 1e6*data_dt_100ums.Ry_rms_cl % Diffraction Tomo - CL - 6deg/s, 100um/s
|
||||
1e9*data_dt_500ums.Dy_rms_cl, 1e9*data_dt_500ums.Dz_rms_cl, 1e6*data_dt_500ums.Ry_rms_cl % Diffraction Tomo - CL - 6deg/s, 500um/s
|
||||
1e9*data_dt_1000ums.Dy_rms_cl, 1e9*data_dt_1000ums.Dz_rms_cl, 1e6*data_dt_1000ums.Ry_rms_cl % Diffraction Tomo - CL - 6deg/s, 1000um/s
|
||||
#+end_src
|
||||
|
||||
#+name: tab:id31_experiments_results_summary
|
||||
#+caption: Table caption
|
||||
#+caption: Summary of the experimental results performed with the NASS on ID31. Open-loop errors are indicated at the left of the arrows. Closed-loop errors that are out of specifications are indicated by bold number.
|
||||
#+attr_latex: :environment tabularx :width \linewidth :align Xccc
|
||||
#+attr_latex: :center t :booktabs t
|
||||
#+RESULTS:
|
||||
| | $D_y$ [nmRMS] | $D_z$ [nmRMS] | $R_y$ [nradRMS] |
|
||||
|----------------------------------------------------+---------------+---------------+-----------------|
|
||||
| Specifications | | | |
|
||||
|----------------------------------------------------+---------------+---------------+-----------------|
|
||||
| Tomography ($R_z$ 1rpm) | 15 | 5 | 55 |
|
||||
| Tomography ($R_z$ 6rpm) | 19 | 5 | 73 |
|
||||
| Tomography ($R_z$ 30rpm) | 38 | 10 | 129 |
|
||||
|----------------------------------------------------+---------------+---------------+-----------------|
|
||||
| Dirty Layer ($D_z$ $10\,\mu m/s$) | 25 | 5 | 114 |
|
||||
| Dirty Layer ($D_z$ $100\,\mu m/s$) | 34 | 15 | 130 |
|
||||
|----------------------------------------------------+---------------+---------------+-----------------|
|
||||
| Reflectivity ($R_y$ $100\,\mu\text{rad}/s$) | 28 | 6 | 118 |
|
||||
|----------------------------------------------------+---------------+---------------+-----------------|
|
||||
| Lateral Scan ($D_y$ $10\,\mu m/s$) | 21 | 10 | 37 |
|
||||
|----------------------------------------------------+---------------+---------------+-----------------|
|
||||
| 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 |
|
||||
| *Experiments* | $\bm{D_y}$ *[nmRMS]* | $\bm{D_z}$ *[nmRMS]* | $\bm{R_y}$ *[nradRMS]* |
|
||||
|---------------------------------------------------------+-----------------------------+---------------------------+-----------------------------|
|
||||
| Tomography ($6\,\text{deg/s}$) | $142 \Rightarrow 15$ | $32 \Rightarrow 5$ | $464 \Rightarrow 56$ |
|
||||
| Tomography ($6\,\text{deg/s}$, 13kg) | $149 \Rightarrow 25$ | $26 \Rightarrow 6$ | $471 \Rightarrow 55$ |
|
||||
| Tomography ($6\,\text{deg/s}$, 26kg) | $202 \Rightarrow 25$ | $36 \Rightarrow 7$ | $1737 \Rightarrow 104$ |
|
||||
| Tomography ($6\,\text{deg/s}$, 39kg) | $297 \Rightarrow \bm{53}$ | $38 \Rightarrow 9$ | $1737 \Rightarrow 170$ |
|
||||
|---------------------------------------------------------+-----------------------------+---------------------------+-----------------------------|
|
||||
| Tomography ($180\,\text{deg/s}$) | $143 \Rightarrow \bm{38}$ | $24 \Rightarrow 11$ | $252 \Rightarrow 130$ |
|
||||
| Tomography ($180\,\text{deg/s}$, custom HAC) | $143 \Rightarrow 29$ | $24 \Rightarrow 5$ | $252 \Rightarrow 142$ |
|
||||
|---------------------------------------------------------+-----------------------------+---------------------------+-----------------------------|
|
||||
| Reflectivity ($100\,\mu\text{rad}/s$) | $28$ | $6$ | $118$ |
|
||||
|---------------------------------------------------------+-----------------------------+---------------------------+-----------------------------|
|
||||
| $D_z$ scan ($10\,\mu m/s$) | $25$ | $5$ | $108$ |
|
||||
| $D_z$ scan ($100\,\mu m/s$) | $\bm{35}$ | $9$ | $132$ |
|
||||
|---------------------------------------------------------+-----------------------------+---------------------------+-----------------------------|
|
||||
| Lateral Scan ($10\,\mu m/s$) | $585 \Rightarrow 21$ | $155 \Rightarrow 10$ | $6300 \Rightarrow 60$ |
|
||||
| Lateral Scan ($100\,\mu m/s$) | $1063 \Rightarrow \bm{732}$ | $167 \Rightarrow \bm{20}$ | $6445 \Rightarrow \bm{356}$ |
|
||||
|---------------------------------------------------------+-----------------------------+---------------------------+-----------------------------|
|
||||
| Diffraction tomography ($6\,\text{deg/s}$, $0.1\,mm/s$) | $\bm{36}$ | $7$ | $113$ |
|
||||
| Diffraction tomography ($6\,\text{deg/s}$, $0.5\,mm/s$) | $29$ | $8$ | $81$ |
|
||||
| Diffraction tomography ($6\,\text{deg/s}$, $1\,mm/s$) | $\bm{53}$ | $10$ | $135$ |
|
||||
|---------------------------------------------------------+-----------------------------+---------------------------+-----------------------------|
|
||||
| *Specifications* | $30$ | $15$ | $250$ |
|
||||
|
||||
* Conclusion
|
||||
:PROPERTIES:
|
||||
@ -5192,6 +5140,24 @@ data2orgtable(data_results, {'Specifications', 'Tomography ($R_z$ 6 deg/s)', 'To
|
||||
:END:
|
||||
<<ssec:test_id31_conclusion>>
|
||||
|
||||
This chapter presented a comprehensive experimental validation of the Nano Active Stabilization System (NASS) on the ID31 beamline, demonstrating its capability to maintain precise sample positioning during various experimental scenarios.
|
||||
The implementation and testing followed a systematic approach, beginning with the development of a short-stroke metrology system to measure the sample's position, followed by the successful implementation of a HAC-LAC control architecture, and concluding in extensive performance validation across diverse experimental conditions.
|
||||
|
||||
The short-stroke metrology system, while designed as an temporary solution, proved effective in providing high bandwidth and low noise 5-DoF position measurements.
|
||||
The careful alignment of the fibered interferometers targeting two reference spheres ensured reliable measurements throughout the testing campaign.
|
||||
|
||||
The implementation of the control architecture validated the theoretical framework developed earlier in the project.
|
||||
The decentralized Integral Force Feedback (IFF) controller successfully provided robust damping of suspension modes across all payload conditions (0-39 kg), reducing peak amplitudes by approximately a factor of 10.
|
||||
The High Authority Controller (HAC) effectively managed low-frequency disturbances, though its performance showed some dependency on payload mass, particularly for lateral motion control.
|
||||
|
||||
The experimental validation encompassed a wide range of scientific scenarios.
|
||||
The system demonstrated remarkable performance in most conditions, meeting the stringent positioning requirements (30 nm RMS in $D_y$, 15 nm RMS in $D_z$, and 250 nrad RMS in $R_y$) for the majority of test cases.
|
||||
Some limitations were identified, particularly in handling heavy payloads during rapid motions and in managing high-speed lateral scanning with the existing stepper motor $T_y$ stage.
|
||||
|
||||
The successful validation of the NASS demonstrates that, once an accurate online metrology system is developed, it will be ready for integration into actual beamline operations.
|
||||
The system's ability to maintain precise sample positioning across a wide range of experimental conditions, combined with its robust performance and adaptive capabilities, suggests it will significantly enhance the quality and efficiency of X-ray experiments at ID31.
|
||||
Moreover, the systematic approach to system development and validation, along with the detailed understanding of performance limitations, provides valuable insights for future improvements and potential applications in similar high-precision positioning systems.
|
||||
|
||||
* Bibliography :ignore:
|
||||
#+latex: \printbibliography[heading=bibintoc,title={Bibliography}]
|
||||
|
||||
|
Binary file not shown.
@ -1,4 +1,4 @@
|
||||
% Created 2025-02-03 Mon 18:41
|
||||
% Created 2025-02-04 Tue 12:58
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||
|
||||
@ -12,10 +12,10 @@
|
||||
\bibliography{test-bench-id31.bib}
|
||||
\author{Dehaeze Thomas}
|
||||
\date{\today}
|
||||
\title{Nano-Hexapod on the micro-station}
|
||||
\title{Experimental Validation on the ID31 Beamline}
|
||||
\hypersetup{
|
||||
pdfauthor={Dehaeze Thomas},
|
||||
pdftitle={Nano-Hexapod on the micro-station},
|
||||
pdftitle={Experimental Validation on the ID31 Beamline},
|
||||
pdfkeywords={},
|
||||
pdfsubject={},
|
||||
pdfcreator={Emacs 29.4 (Org mode 9.6)},
|
||||
@ -29,17 +29,23 @@
|
||||
|
||||
\clearpage
|
||||
|
||||
Now that the nano-hexapod is mounted and that the the multi-body model of the nano-hexapod could be validated based on dynamics measurements, the complete NASS is mounted as shown in Figure \ref{fig:test_id31_micro_station_nano_hexapod} and the performances are evaluated on the ID31 beamline.
|
||||
The nano-hexapod's mounting and validation through dynamics measurements marks a crucial milestone in the development of the Nano Active Stabilization System (NASS).
|
||||
This chapter presents a comprehensive experimental evaluation of the complete system's performance on the ID31 beamline, focusing on its ability to maintain precise sample positioning during various experimental conditions.
|
||||
|
||||
At the beginning of the project, it was planned to develop a long stroke 5-DoF metrology system to measure the pose of the sample with respect to the granite.
|
||||
The development of such system was complex, and was not completed at the time of the experimental tests on ID31.
|
||||
To still be able to validate the developed nano active platform and the associated instrumentation and control architecture, a 5-DoF short stroke metrology system is developed and presented in Section \ref{sec:test_id31_metrology}.
|
||||
Initially, the project planned to develop a long-stroke (\(\approx 1 \, cm^3\)) 5-DoF metrology system to measure sample position relative to the granite base.
|
||||
However, the complexity of this development prevented its completion before the experimental testing phase on ID31.
|
||||
To proceed with validation of the nano active platform and its associated control architecture, an alternative short-stroke (\(> 100\,\mu m^3\)) metrology system was developed, which is presented in Section \ref{sec:test_id31_metrology}.
|
||||
|
||||
The identify dynamics of the nano-hexapod fixed on top of the micro-station is identified for different experimental conditions (payload masses, rotational velocities) and compared with the multi-body model in Section \ref{sec:test_id31_open_loop_plant}.
|
||||
Then, several key aspects of the system validation are examined.
|
||||
Section \ref{sec:test_id31_open_loop_plant} analyzes the identified dynamics of the nano-hexapod mounted on the micro-station under various experimental conditions, including different payload masses and rotational velocities.
|
||||
These measurements are compared with predictions from the multi-body model to verify its accuracy and applicability for control design.
|
||||
|
||||
In order to apply the developed HAC-LAC architecture, decentralized Integral Force Feedback is first applied to actively damp the plant in a robust way (Section \ref{sec:test_id31_iff}), and the high authority controller is then implemented (Section \ref{sec:test_id31_hac}).
|
||||
Sections \ref{sec:test_id31_iff} and \ref{sec:test_id31_hac} focus on the implementation and validation of the HAC-LAC control architecture.
|
||||
First, Section \ref{sec:test_id31_iff} demonstrates the application of decentralized Integral Force Feedback for robust active damping of the nano-hexapod's suspension modes.
|
||||
This is followed in Section \ref{sec:test_id31_hac} by the implementation of the high authority controller, which addresses low-frequency disturbances and completes the control system design.
|
||||
|
||||
Finally, the positioning accuracy of the NASS is evaluated by performing scans corresponding to several scientific experiments (Section \ref{sec:test_id31_experiments})
|
||||
Finally, Section \ref{sec:test_id31_experiments} evaluates the NASS's positioning performances through a comprehensive series of experiments that mirror typical scientific applications.
|
||||
These include tomography scans at various speeds and with different payload masses, reflectivity measurements, and combined motion sequences that test the system's full capabilities.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
@ -745,28 +751,28 @@ These results demonstrate both the effectiveness and limitations of implementing
|
||||
|
||||
\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.
|
||||
In this section, the goal is to evaluate the performances of the NASS and validate its use for typical 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.
|
||||
|
||||
Several scientific experiments are mimicked, such as:
|
||||
Several scientific experiments are here replicated, such as:
|
||||
\begin{itemize}
|
||||
\item Tomography scans: continuous rotation of the Spindle along the vertical axis (Section \ref{ssec:test_id31_scans_tomography})
|
||||
\item Reflectivity scans: \(R_y\) rotations using the tilt-stage (Section \ref{ssec:test_id31_scans_reflectivity})
|
||||
\item Vertical layer scans: the nano-hexapod is used to perform \(D_z\) step motion or ramp scans (Section \ref{ssec:test_id31_scans_dz})
|
||||
\item Vertical layer scans: \(D_z\) step motion or ramp scans using the nano-hexapod (Section \ref{ssec:test_id31_scans_dz})
|
||||
\item Lateral scans: \(D_y\) scans using the \(T_y\) translation stage (Section \ref{ssec:test_id31_scans_dy})
|
||||
\item Diffraction Tomography: the Spindle is performing continuous \(R_z\) rotation while the translation stage is performing lateral \(D_y\) scans at the same time.
|
||||
\item Diffraction Tomography:continuous \(R_z\) rotation using the Spindle and lateral \(D_y\) scans performed at the same time using the translation stage.
|
||||
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.
|
||||
In this 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}.
|
||||
Results obtained for all the experiments are summarized and compared to 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}
|
||||
@ -785,13 +791,13 @@ RMS & 30nm & 15nm & \(250\,\text{nrad}\)\\
|
||||
\paragraph{Slow Tomography scans}
|
||||
|
||||
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.
|
||||
Each experimental sequence consisted of two complete spindle rotations: an initial open-loop rotation followed by a closed-loop rotation.
|
||||
The experimental results for the \(26\,\text{kg}\) payload are presented 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 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.
|
||||
Due to static deformation of the micro-station stages under payload loading, a significant eccentricity was observed between the point of interest and the spindle rotation axis.
|
||||
To establish a theoretical lower bound for open-loop errors, an ideal scenario was assumed where the point of interest perfectly aligns with the spindle rotation axis.
|
||||
This idealized case was simulated by first calculating the eccentricity through circular fitting (represented by the dashed black circle in Figure \ref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit}), and then subtracting it from the measured data, as shown in Figure \ref{fig:test_id31_tomo_m2_1rpm_robust_hac_iff_fit_removed}.
|
||||
While this approach likely underestimates actual open-loop errors, as perfect alignment is practically unattainable, it enables a more balanced comparison with closed-loop performance.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
@ -809,9 +815,9 @@ This underestimate the real open-loop errors as it is difficult to obtain a perf
|
||||
\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}
|
||||
|
||||
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}.
|
||||
After eccentricity compensation for each experiment, the residual motion in the \(Y-Z\) is compared against the minimum beam size, as illustrated 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}.
|
||||
These experimental findings align with the predictions from the tomography simulations presented in Section \ref{ssec:test_id31_iff_hac_robustness}.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
@ -821,10 +827,10 @@ This confirms what was found during the tomography simulations performed in Sect
|
||||
|
||||
\paragraph{Fast Tomography scans}
|
||||
|
||||
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.
|
||||
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 an issue in the Spindle's controller.}.
|
||||
The trajectory of the point of interest during this fast tomography scan is shown in Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_exp}.
|
||||
While the experimental results closely mirror the simulation results (Figure \ref{fig:test_id31_tomo_m0_30rpm_robust_hac_iff_sim}), the actual performance are slightly lower than predicted.
|
||||
Nevertheless, even with this robust (conservative) HAC implementation, the system performance approaches the specified requirements.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
@ -844,14 +850,15 @@ Results obtained with this robust (i.e. conservative) HAC are already close to t
|
||||
|
||||
\paragraph{Cumulative Amplitude Spectra}
|
||||
|
||||
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.
|
||||
A comparative analysis was conducted using three tomography scans at \(180,\text{deg/s}\) to evaluate the effectiveness of the HAC-LAC strategy in reducing positioning errors.
|
||||
The scans were performed under three conditions: open-loop, with decentralized IFF control, and with the complete HAC-LAC strategy.
|
||||
For these specific measurements, an enhanced high authority controller was optimized for low payload masses to meet performance requirements.
|
||||
|
||||
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.
|
||||
Figure \ref{fig:test_id31_hac_cas_cl} presents the cumulative amplitude spectra of the position errors for all three cases.
|
||||
The results reveal two distinct control contributions: the decentralized IFF effectively attenuates vibrations near the nano-hexapod suspension modes (an achievement not possible with HAC alone), while the high authority controller suppresses low-frequency vibrations primarily arising from Spindle guiding errors.
|
||||
Notably, the spectral patterns in Figure \ref{fig:test_id31_hac_cas_cl} closely resemble the cumulative amplitude spectra computed in the project's early stages.
|
||||
|
||||
This experiment also shows that designing a controller for specific experimental conditions (especially payload inertia) can lead to better performances.
|
||||
This experiment also illustrates that when needed, performance can be enhanced by designing controllers for specific experimental conditions, rather than relying solely on robust controllers that accommodate all payload ranges.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -878,9 +885,9 @@ This experiment also shows that designing a controller for specific experimental
|
||||
\section{Reflectivity Scans}
|
||||
\label{ssec:test_id31_scans_reflectivity}
|
||||
|
||||
X-ray reflectivity consists of scanning the \(R_y\) angle of thin structures (typically solid/liquid interfaces) through the beam.
|
||||
Here, a \(R_y\) scan is performed with a rotational velocity of \(100\,\mu rad/s\) and the positioning errors in closed-loop are recorded (Figure \ref{fig:test_id31_reflectivity}).
|
||||
It is shown that the NASS is able to keep the point of interest in the beam within specifications.
|
||||
X-ray reflectivity measurements involve scanning thin structures, particularly solid/liquid interfaces, through the beam by varying the \(R_y\) angle.
|
||||
In this experiment, a \(R_y\) scan was executed at a rotational velocity of \(100,\mu rad/s\), and the closed-loop positioning errors were monitored (Figure \ref{fig:test_id31_reflectivity}).
|
||||
The results confirm that the NASS successfully maintains the point of interest within the specified beam parameters throughout the scanning process.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -906,17 +913,16 @@ It is shown that the NASS is able to keep the point of interest in the beam with
|
||||
|
||||
\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_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.
|
||||
In some cases, samples are composed of several atomic ``layers'' that are first aligned in the horizontal plane through \(R_x\) and \(R_y\) positioning, followed by vertical scanning with precise \(D_z\) motion.
|
||||
These vertical scans can be executed either continuously or in a step-by-step manner.
|
||||
\paragraph{Step by Step \(D_z\) motion}
|
||||
|
||||
Vertical steps are here performed using the nano-hexapod only.
|
||||
Step sizes from \(10\,nm\) to \(1\,\mu m\) are tested, and the results are shown in Figure \ref{fig:test_id31_dz_mim_steps}.
|
||||
10nm steps can be resolved if detectors are integrating over 50ms (see red curve in Figure \ref{fig:test_id31_dz_mim_10nm_steps}), which is reasonable for many experiments.
|
||||
The vertical step motion is performed exclusively with the nano-hexapod.
|
||||
Testing was conducted across step sizes ranging from \(10,nm\) to \(1,\mu m\), with results presented in Figure \ref{fig:test_id31_dz_mim_steps}. The system successfully resolves 10nm steps when detectors integrate over a 50ms period (illustrated by the red curve in Figure \ref{fig:test_id31_dz_mim_10nm_steps}), which is compatible with many experimental requirements.
|
||||
|
||||
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.
|
||||
In step-by-step scanning procedures, settling time is a critical parameter as it significantly impacts the total experiment duration.
|
||||
The system achieves a response time of approximately \(70,ms\) to reach the target position (within \(\pm 20,nm\)), as demonstrated by the \(1,\mu m\) step response in Figure \ref{fig:test_id31_dz_mim_1000nm_steps}.
|
||||
This settling duration typically decreases for smaller step sizes.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -942,10 +948,10 @@ This is typically shorted for smaller steps.
|
||||
|
||||
\paragraph{Continuous \(D_z\) motion: Dirty Layer Scans}
|
||||
|
||||
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.
|
||||
For these and subsequent experiments, the NASS performs ``ramp scans'' (constant velocity scans).
|
||||
To eliminate tracking errors, the feedback controller incorporates two integrators, compensating for the plant's lack of integral action at low frequencies.
|
||||
|
||||
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).
|
||||
Initial testing at \(10,\mu m/s\) demonstrates positioning errors well within specifications (indicated by dashed lines in Figure \ref{fig:test_id31_dz_scan_10ums}).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -969,10 +975,9 @@ The first test is a scan at \(10\,\mu m/s\), and the errors shown in Figure \ref
|
||||
\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}
|
||||
|
||||
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.
|
||||
A subsequent scan at \(100,\mu m/s\) - the maximum velocity for high-precision \(D_z\) scans\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).} - maintains positioning errors within specifications during the constant velocity phase, with deviations occurring only during acceleration and deceleration phases (Figure \ref{fig:test_id31_dz_scan_100ums}).
|
||||
Since detectors typically operate only during the constant velocity phase, these transient deviations do not compromise measurement quality.
|
||||
Yet, performance during acceleration phases could potentially be enhanced through the implementation of feedforward control.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -998,23 +1003,20 @@ The performances during acceleration phase may also be improved by using a feedf
|
||||
|
||||
\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 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.
|
||||
Lateral scans are executed using the \(T_y\) stage.
|
||||
The stepper motor controller\footnote{The ``IcePAP'' \cite{janvier13_icepap} which is developed at the ESRF.} generates a setpoint that is transmitted to the Speedgoat.
|
||||
Within the Speedgoat, the system computes the positioning error by comparing the measured \(D_y\) sample position against the received setpoint, and the Nano-Hexapod compensates for positioning errors introduced during \(T_y\) stage scanning.
|
||||
The scanning range is constrained \(\pm 100\,\mu m\) due to the limited acceptance of the metrology system.
|
||||
\paragraph{Slow scan}
|
||||
|
||||
The \(T_y\) stage is first scanned with a velocity of \(10\,\mu m/s\) which is typical for such experiments.
|
||||
The errors in open-loop (i.e. without using the NASS) and in closed-loop are compared in Figure \ref{fig:test_id31_dy_10ums}.
|
||||
Initial testing utilized a scanning velocity of \(10,\mu m/s\), which is typical for these experiments.
|
||||
Figure \ref{fig:test_id31_dy_10ums} compares the positioning errors between open-loop (without NASS) and closed-loop operation.
|
||||
In the scanning direction, open-loop measurements reveal periodic errors (Figure \ref{fig:test_id31_dy_10ums_dy}) attributable to the \(T_y\) stage's stepper motor.
|
||||
These micro-stepping errors, inherent to stepper motor operation, occur 200 times per motor rotation with approximately \(1\,\text{mrad}\) angular error amplitude.
|
||||
Given the \(T_y\) stage's lead screw pitch of \(2\,mm\), these errors manifest as \(10\,\mu m\) periodic oscillations with \(\approx 300\,nm\) amplitude, which can indeed be seen in the open-loop measurements (Figure \ref{fig:test_id31_dy_10ums_dy}).
|
||||
|
||||
In the direction of motion, periodic errors can be observed in the open-loop case (Figure \ref{fig:test_id31_dy_10ums_dy}).
|
||||
These errors are induced by the stepper motor being used in the \(T_y\) stage.
|
||||
Indeed, stepper motors inherently have ``micro-stepping errors'' which are periodic errors happening 200 times per motor rotation with an amplitude approximately equal to \(1\,\text{mrad}\).
|
||||
As the lead screw for the \(T_y\) stage has a pitch of \(2\,mm\), this means that the micro-stepping errors have a period of \(10\,\mu m\) and an amplitude of \(\approx 300\,nm\) which can indeed be seen in open-loop.
|
||||
|
||||
In the vertical direction (Figure \ref{fig:test_id31_dy_10ums_dz}), open-loop errors are most likely due to measurement errors of the metrology itself as the top interferometer point at a sphere (see Figure \ref{fig:test_id31_xy_map_sphere}).
|
||||
|
||||
In closed-loop, the errors are within the specifications in all directions.
|
||||
In the vertical direction (Figure \ref{fig:test_id31_dy_10ums_dz}), open-loop errors likely stem from metrology measurement error due to the fact that the top interferometer points at a spherical target surface (see Figure \ref{fig:test_id31_xy_map_sphere}).
|
||||
Under closed-loop control, positioning errors remain within specifications across all directions.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -1040,16 +1042,15 @@ In closed-loop, the errors are within the specifications in all directions.
|
||||
|
||||
\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.
|
||||
These vibrations are outside the bandwidth of the NASS feedback controller and therefore not well reduced in closed-loop.
|
||||
System performance was evaluated at an increased scanning velocity of \(100\,\mu m/s\), with results presented in Figure \ref{fig:test_id31_dy_100ums}.
|
||||
At this velocity, the micro-stepping errors generate \(10\,\text{Hz}\) vibrations, which are further amplified by micro-station resonances.
|
||||
These vibrations exceed the NASS feedback controller bandwidth, resulting in limited attenuation under closed-loop control.
|
||||
This limitation exemplifies why stepper motors are suboptimal for ``long-stroke/short-stroke'' systems requiring precise scanning performance \cite{dehaeze22_fastj_uhv}.
|
||||
|
||||
This is the main reason why stepper motors should be not be used for ``long-stroke / short-stroke'' systems when good scanning performances are wanted \cite{dehaeze22_fastj_uhv}.
|
||||
In order to improve the scanning performances at high velocity, the stepper motor of the \(T_y\) stage could be replaced by a three-phase torque motor for instance.
|
||||
|
||||
As the closed-loop errors in \(D_z\) and \(R_y\) directions are within specifications (see Figures \ref{fig:test_id31_dy_100ums_dz} and \ref{fig:test_id31_dy_100ums_ry}), another option would be to trigger the detectors based on the measured \(D_y\) position instead of based on time or on the \(T_y\) setpoint.
|
||||
This would make the experiment less sensitive to \(D_y\) vibrations.
|
||||
For small \(D_y\) scans, the nano-hexapod alone can be used for the scans, but with limited strokes.
|
||||
Two potential solutions exist for improving high-velocity scanning performance.
|
||||
First, the \(T_y\) stage's stepper motor could be replaced with a three-phase torque motor.
|
||||
Alternatively, since closed-loop errors in \(D_z\) and \(R_y\) directions remain within specifications (Figures \ref{fig:test_id31_dy_100ums_dz} and \ref{fig:test_id31_dy_100ums_ry}), detector triggering could be based on measured \(D_y\) position rather than time or \(T_y\) setpoint, reducing sensitivity to \(D_y\) vibrations.
|
||||
For applications requiring small \(D_y\) scans, the nano-hexapod can be used exclusively, though with limited stroke capability.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -1075,14 +1076,10 @@ For small \(D_y\) scans, the nano-hexapod alone can be used for the scans, but w
|
||||
|
||||
\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 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\).
|
||||
|
||||
The \(D_y\) setpoint and the measured positions are shown for all tested velocities in Figure \ref{fig:test_id31_diffraction_tomo_setpoint}.
|
||||
In diffraction tomography experiments, the micro-station executes combined motions: continuous rotation around the \(R_z\) axis while performing lateral scans along \(D_y\).
|
||||
For this validation, the spindle maintained a constant rotational velocity of \(6\,\text{deg/s}\) while the nano-hexapod executed the lateral scanning motion.
|
||||
To avoid high-frequency vibrations typically induced by the stepper motor, the \(T_y\) stage was not utilized, which constrained the scanning range to approximately \(\pm 100\,\mu m/s\).
|
||||
The system's performance was evaluated at three lateral scanning velocities: \(0.1\,mm/s\), \(0.5\,mm/s\), and \(1\,mm/s\). Figure \ref{fig:test_id31_diffraction_tomo_setpoint} presents both the \(D_y\) position setpoints and the corresponding measured \(D_y\) positions for all tested velocities.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
@ -1090,10 +1087,11 @@ The \(D_y\) setpoint and the measured positions are shown for all tested velocit
|
||||
\caption{\label{fig:test_id31_diffraction_tomo_setpoint}Dy motion for several configured velocities}
|
||||
\end{figure}
|
||||
|
||||
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\), 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.
|
||||
The positioning errors measured along \(D_y\), \(D_z\), and \(R_y\) directions are displayed in Figure \ref{fig:test_id31_diffraction_tomo}.
|
||||
The system maintained positioning errors within specifications for both \(D_z\) and \(R_y\) (Figures \ref{fig:test_id31_diffraction_tomo_dz} and \ref{fig:test_id31_diffraction_tomo_ry}).
|
||||
However, lateral positioning errors exceeded specifications during acceleration and deceleration phases (Figure \ref{fig:test_id31_diffraction_tomo_dy}).
|
||||
Since these large errors occurred only during \(\approx 20\,ms\) intervals, the issue could be addressed by implementing a corresponding delay in detector integration.
|
||||
Alternatively, developing a feedforward controller could improve lateral positioning accuracy during these transient phases.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.33\textwidth}
|
||||
@ -1120,43 +1118,75 @@ Another way to improve the errors in the \(D_y\) direction would be to develop a
|
||||
\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}.
|
||||
A comprehensive series of experimental validations was conducted to evaluate the NASS performance across a wide range of typical scientific experiments.
|
||||
The system demonstrated robust performance in most scenarios, with positioning errors generally remaining within specified tolerances (30 nm RMS in \(D_y\), 15 nm RMS in \(D_z\), and 250 nrad RMS in \(R_y\)).
|
||||
|
||||
\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}
|
||||
For tomography experiments, the NASS successfully maintained positioning accuracy at rotational velocities up to \(180\,\text{deg/s}\) with light payloads, though performance degraded somewhat with heavier masses.
|
||||
The HAC-LAC control architecture proved particularly effective, with the decentralized IFF providing damping of nano-hexapod suspension modes while the high authority controller addressed low-frequency disturbances.
|
||||
|
||||
Vertical scanning capabilities were validated in both step-by-step and continuous motion modes.
|
||||
The system successfully resolved 10 nm steps with 50 ms detector integration time, while maintaining positioning accuracy during continuous scans at speeds up to \(100\,\mu m/s\).
|
||||
|
||||
For lateral scanning, the system performed well at moderate speeds (\(10\,\mu m/s\)) but showed limitations at higher velocities (\(100\,\mu m/s\)) due to stepper motor-induced vibrations in the \(T_y\) stage.
|
||||
|
||||
The most challenging test case - diffraction tomography combining rotation and lateral scanning - demonstrated the system's ability to maintain vertical and angular stability while highlighting some limitations in lateral positioning during rapid accelerations.
|
||||
These limitations could potentially be addressed through feedforward control or alternative detector triggering strategies.
|
||||
|
||||
Overall, the experimental results validate the effectiveness of the developed control architecture and demonstrate that the NASS meets most design specifications across a wide range of operating conditions (summarized in Table \ref{tab:id31_experiments_results_summary}).
|
||||
The identified limitations, primarily related to high-speed lateral scanning and heavy payload handling, provide clear directions for future improvements.
|
||||
|
||||
\begin{table}[htbp]
|
||||
\caption{\label{tab:id31_experiments_results_summary}Table caption}
|
||||
\caption{\label{tab:id31_experiments_results_summary}Summary of the experimental results performed with the NASS on ID31. Open-loop errors are indicated at the left of the arrows. Closed-loop errors that are out of specifications are indicated by bold number.}
|
||||
\centering
|
||||
\begin{tabularx}{\linewidth}{Xccc}
|
||||
\toprule
|
||||
& \(D_y\) [nmRMS] & \(D_z\) [nmRMS] & \(R_y\) [nradRMS]\\
|
||||
\textbf{Experiments} & \(\bm{D_y}\) \textbf{[nmRMS]} & \(\bm{D_z}\) \textbf{[nmRMS]} & \(\bm{R_y}\) \textbf{[nradRMS]}\\
|
||||
\midrule
|
||||
Specifications & & & \\
|
||||
Tomography (\(6\,\text{deg/s}\)) & \(142 \Rightarrow 15\) & \(32 \Rightarrow 5\) & \(464 \Rightarrow 56\)\\
|
||||
Tomography (\(6\,\text{deg/s}\), 13kg) & \(149 \Rightarrow 25\) & \(26 \Rightarrow 6\) & \(471 \Rightarrow 55\)\\
|
||||
Tomography (\(6\,\text{deg/s}\), 26kg) & \(202 \Rightarrow 25\) & \(36 \Rightarrow 7\) & \(1737 \Rightarrow 104\)\\
|
||||
Tomography (\(6\,\text{deg/s}\), 39kg) & \(297 \Rightarrow \bm{53}\) & \(38 \Rightarrow 9\) & \(1737 \Rightarrow 170\)\\
|
||||
\midrule
|
||||
Tomography (\(R_z\) 1rpm) & 15 & 5 & 55\\
|
||||
Tomography (\(R_z\) 6rpm) & 19 & 5 & 73\\
|
||||
Tomography (\(R_z\) 30rpm) & 38 & 10 & 129\\
|
||||
Tomography (\(180\,\text{deg/s}\)) & \(143 \Rightarrow \bm{38}\) & \(24 \Rightarrow 11\) & \(252 \Rightarrow 130\)\\
|
||||
Tomography (\(180\,\text{deg/s}\), custom HAC) & \(143 \Rightarrow 29\) & \(24 \Rightarrow 5\) & \(252 \Rightarrow 142\)\\
|
||||
\midrule
|
||||
Dirty Layer (\(D_z\) \(10\,\mu m/s\)) & 25 & 5 & 114\\
|
||||
Dirty Layer (\(D_z\) \(100\,\mu m/s\)) & 34 & 15 & 130\\
|
||||
Reflectivity (\(100\,\mu\text{rad}/s\)) & \(28\) & \(6\) & \(118\)\\
|
||||
\midrule
|
||||
Reflectivity (\(R_y\) \(100\,\mu\text{rad}/s\)) & 28 & 6 & 118\\
|
||||
\(D_z\) scan (\(10\,\mu m/s\)) & \(25\) & \(5\) & \(108\)\\
|
||||
\(D_z\) scan (\(100\,\mu m/s\)) & \(\bm{35}\) & \(9\) & \(132\)\\
|
||||
\midrule
|
||||
Lateral Scan (\(D_y\) \(10\,\mu m/s\)) & 21 & 10 & 37\\
|
||||
Lateral Scan (\(10\,\mu m/s\)) & \(585 \Rightarrow 21\) & \(155 \Rightarrow 10\) & \(6300 \Rightarrow 60\)\\
|
||||
Lateral Scan (\(100\,\mu m/s\)) & \(1063 \Rightarrow \bm{732}\) & \(167 \Rightarrow \bm{20}\) & \(6445 \Rightarrow \bm{356}\)\\
|
||||
\midrule
|
||||
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\\
|
||||
Diffraction tomography (\(6\,\text{deg/s}\), \(0.1\,mm/s\)) & \(\bm{36}\) & \(7\) & \(113\)\\
|
||||
Diffraction tomography (\(6\,\text{deg/s}\), \(0.5\,mm/s\)) & \(29\) & \(8\) & \(81\)\\
|
||||
Diffraction tomography (\(6\,\text{deg/s}\), \(1\,mm/s\)) & \(\bm{53}\) & \(10\) & \(135\)\\
|
||||
\midrule
|
||||
\textbf{Specifications} & \(30\) & \(15\) & \(250\)\\
|
||||
\bottomrule
|
||||
\end{tabularx}
|
||||
\end{table}
|
||||
|
||||
|
||||
|
||||
\chapter*{Conclusion}
|
||||
\label{ssec:test_id31_conclusion}
|
||||
|
||||
This chapter presented a comprehensive experimental validation of the Nano Active Stabilization System (NASS) on the ID31 beamline, demonstrating its capability to maintain precise sample positioning during various experimental scenarios.
|
||||
The implementation and testing followed a systematic approach, beginning with the development of a short-stroke metrology system to measure the sample's position, followed by the successful implementation of a HAC-LAC control architecture, and concluding in extensive performance validation across diverse experimental conditions.
|
||||
|
||||
The short-stroke metrology system, while designed as an temporary solution, proved effective in providing high bandwidth and low noise 5-DoF position measurements.
|
||||
The careful alignment of the fibered interferometers targeting two reference spheres ensured reliable measurements throughout the testing campaign.
|
||||
|
||||
The implementation of the control architecture validated the theoretical framework developed earlier in the project.
|
||||
The decentralized Integral Force Feedback (IFF) controller successfully provided robust damping of suspension modes across all payload conditions (0-39 kg), reducing peak amplitudes by approximately a factor of 10.
|
||||
The High Authority Controller (HAC) effectively managed low-frequency disturbances, though its performance showed some dependency on payload mass, particularly for lateral motion control.
|
||||
|
||||
The experimental validation encompassed a wide range of scientific scenarios.
|
||||
The system demonstrated remarkable performance in most conditions, meeting the stringent positioning requirements (30 nm RMS in \(D_y\), 15 nm RMS in \(D_z\), and 250 nrad RMS in \(R_y\)) for the majority of test cases.
|
||||
Some limitations were identified, particularly in handling heavy payloads during rapid motions and in managing high-speed lateral scanning with the existing stepper motor \(T_y\) stage.
|
||||
|
||||
The successful validation of the NASS demonstrates that, once an accurate online metrology system is developed, it will be ready for integration into actual beamline operations.
|
||||
The system's ability to maintain precise sample positioning across a wide range of experimental conditions, combined with its robust performance and adaptive capabilities, suggests it will significantly enhance the quality and efficiency of X-ray experiments at ID31.
|
||||
Moreover, the systematic approach to system development and validation, along with the detailed understanding of performance limitations, provides valuable insights for future improvements and potential applications in similar high-precision positioning systems.
|
||||
|
||||
\printbibliography[heading=bibintoc,title={Bibliography}]
|
||||
\end{document}
|
||||
|
Loading…
x
Reference in New Issue
Block a user