diff --git a/figs/angle_error_schematic_cercalo.png b/figs/angle_error_schematic_cercalo.png new file mode 100644 index 0000000..d654ab6 Binary files /dev/null and b/figs/angle_error_schematic_cercalo.png differ diff --git a/figs/effect_cercalo_angle_distance_meas.png b/figs/effect_cercalo_angle_distance_meas.png new file mode 100644 index 0000000..b0c389d Binary files /dev/null and b/figs/effect_cercalo_angle_distance_meas.png differ diff --git a/figs/simulation_beam_path_high_angle.png b/figs/simulation_beam_path_high_angle.png new file mode 100644 index 0000000..7c96635 Binary files /dev/null and b/figs/simulation_beam_path_high_angle.png differ diff --git a/index.org b/index.org index 7763fb4..f44370c 100644 --- a/index.org +++ b/index.org @@ -1857,6 +1857,7 @@ The file =mat/plant.mat= is accessible [[./mat/plant.mat][here]]. #+end_src * Huddle Test +** Introduction :ignore: ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> @@ -1960,16 +1961,274 @@ We compute the Power Spectral Density of the voltage across the inductance used xlim([1, 1000]); #+end_src +* Budget Error +** Introduction :ignore: +Goals: +- List all sources of error and their effects on the Attocube measurement +- Think about how to determine the value of the individual sources of error + +Sources of error for the Attocube measurement: +- Cercalo rotation error +- Cercalo unwanted translation perpendicular to its surface +- Newport rotation error +- Newport unwanted translation perpendicular to its surface +- Temperature variations of the metrology frame +- Temperature / Pressure / Humidity variations of the air in the beam path + +** Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +** Effect of the Cercalo angle error on the measured distance by the Attocube +To simplify, we suppose that the Newport mirror is a flat mirror. +The geometry of the setup is shown in Fig. [[fig:angle_error_schematic_cercalo]]. + +We define the angle error range where we want to evaluate the distance error measured by the Attocube. +#+begin_src matlab + thetas_c = logspace(-7, -4, 100); % [rad] +#+end_src + +The geometrical parameters of the setup are defined below. +#+begin_src matlab + H = 0.05; % [m] + L = 0.05; % [m] +#+end_src + +#+begin_src latex :file angle_error_schematic_cercalo.pdf :exports results + \begin{tikzpicture} + \draw[->] (0, 0)node[branch](O){}node[below]{$O (0,0)$} -- ++(1, 0) node[above left]{$x$}; + \draw[->] (0, 0) -- ++(0, 1) node[below right]{$y$}; + \draw[] (4, 0)node[branch](S){}node[below right]{$S (L,0)$} -- ++(45:1); + \draw[] (4, 0) -- ++(225:1); + \draw[] (3, 2) --node[midway, branch](X){}node[above]{$X (0,H)$} (5, 2); + \draw[<->] ([shift=(30:1.2)]S.center) arc (30:60:1.2) node[midway, above right]{$\theta_c$}; + + \draw[red, ->-=.7, -<-=0.3] (O.center) -- (S.center); + \draw[red, ->-=.7, -<-=0.3] (S.center) -- (X.center); + \end{tikzpicture} +#+end_src + +#+NAME: fig:angle_error_schematic_cercalo +#+CAPTION: Caption +#+RESULTS: +[[file:figs/angle_error_schematic_cercalo.png]] + +The nominal points $O$, $S$ and $X$ are defined. +#+begin_src matlab + O = [-L, 0]; + S = [0, 0]; + X = [0, H]; +#+end_src + +Thus, the initial path length is: +#+begin_src matlab + path_nominal = norm(S-O) + norm(X-S) + norm(S-X) + norm(O-S); +#+end_src + +We now compute the new path length when there is an error angle $\delta \theta_c$ of the Cercalo. +#+begin_src matlab + path_length = zeros(size(thetas_c)); + + for i = 1:length(thetas_c) + theta_c = thetas_c(i); + Y = [H*tan(2*theta_c), H]; + M = 2*H/(tan(pi/4-theta_c)+1/tan(2*theta_c))*[1, tan(pi/4-theta_c)]; + T = [-L, M(2)+(L+M(1))*tan(4*theta_c)]; + + path_length(i) = norm(S-O) + norm(Y-S) + norm(M-Y) + norm(T-M); + end +#+end_src + +We then compute the distance error and we plot it as a function of the Cercalo angle error (Fig. [[]]). +#+begin_src matlab + path_error = path_length - path_nominal; +#+end_src + +#+begin_src matlab :exports none + figure; + plot(thetas_c, path_error) + set(gca,'xscale','log'); + set(gca,'yscale','log'); + xlabel('Cercalo angle error [rad]'); + ylabel('Attocube measurement error [m]'); +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/effect_cercalo_angle_distance_meas.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:effect_cercalo_angle_distance_meas +#+CAPTION: Effect of an angle error of the Cercalo on the distance error measured by the Attocube ([[./figs/effect_cercalo_angle_distance_meas.png][png]], [[./figs/effect_cercalo_angle_distance_meas.pdf][pdf]]) +[[file:figs/effect_cercalo_angle_distance_meas.png]] + +And we plot the beam path using Matlab for an high angle to verify that the code is working (Fig. [[]]). +#+begin_src matlab + theta = 2*2*pi/360; % [rad] + H = 0.05; % [m] + L = 0.05; % [m] + + O = [-L, 0]; + S = [0, 0]; + X = [0, H]; + Y = [H*tan(2*theta), H]; + M = 2*H/(tan(pi/4-theta)+1/tan(2*theta))*[1, tan(pi/4-theta)]; + T = [-L, M(2)+(L+M(1))*tan(4*theta)]; +#+end_src + +#+begin_src matlab :exports none + figure; + hold on; + plot([-L, -L], [0, H], 'k-'); % Interferometer + plot([-L, 0.1*L], [H, H], 'k-'); % Reflector + plot(0.5*min(L, H)*[-cos(pi/4-theta), cos(pi/4-theta)], 0.5*min(L, H)*[-sin(pi/4-theta), sin(pi/4-theta)], 'k-'); % Tilt-Mirror + plot(0.5*min(L, H)*[-cos(pi/4), cos(pi/4)], 0.5*min(L, H)*[-sin(pi/4), sin(pi/4)], 'k--'); % Initial position of tilt mirror + plot([O(1), S(1), Y(1), M(1), T(1)], [O(2), S(2), Y(2), M(2), T(2)], 'r-'); + plot([O(1), S(1), X(1), S(1), O(1)], [O(2), S(2), X(2), S(2), O(2)], 'b--'); + hold off; + xlabel('X [m]'); ylabel('Y [m]'); + axis equal +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/simulation_beam_path_high_angle.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:simulation_beam_path_high_angle +#+CAPTION: Simulation of a beam path for high angle error ([[./figs/simulation_beam_path_high_angle.png][png]], [[./figs/simulation_beam_path_high_angle.pdf][pdf]]) +[[file:figs/simulation_beam_path_high_angle.png]] + +#+begin_important + An angle error $\delta\theta_c$ of the Attocube produces a distance error measured by the attocube of + \begin{equation} + \delta L = 10^{-6} \cdot \delta\theta_c + \end{equation} + Thus, $1 \mu \text{rad}$ of angle error corresponds to $1mn$ of distance error. +#+end_important + +** Estimation of the Cercalo angle error due to Noise +*** Perfect Control +If the feedback is perfect, the Cercalo angle error will be equal to the 4 quadrant diode noise. +Let's estimate the 4QD noise in radians. + +If we note $V_1$, $V_2$, $V_3$ and $V_4$ the voltage of each of the quadrant, a measurement error $\delta V_i$ of one of the quadrant will have an effect $\delta \theta$ on the measured angle: +\[ \delta\theta = G \frac{\delta V_i}{V_1 + V_2 + V_3 + V_4} \] +with $G$ is the gain of the 4QD in [rad]. + +We should then have that the voltage of each quadrant is as large as possible. +Suppose here that $V_i \approx 5V$, $\delta V_i = 1mV$ and $G = 0.03\,rad$, we obtain: +\[ \delta \theta = 0.03 \frac{0.001}{20} = 1.5\, \mu\text{rad} \] +This then corresponds to +\[ \delta L = 10^{-6} \cdot \delta \theta = 1.5\,nm \] + +If we just consider the ADC noise: +- the ADC range is $\pm 10V$ with $16\text{ bits}$. +- thus, the LSB corresponds to: + \[ \frac{20}{2^{16}} \approx 0.000305\,V = 0.305\,mV \] +- this corresponds to an error $\delta L \approx 0.5 nm$ + +*** Error due to DAC noise used for the Cercalo +#+begin_src matlab + load('./mat/plant.mat', 'Gi', 'Gc', 'Gd'); +#+end_src + +#+begin_src matlab + G = inv(Gd)*Gc*Gi; +#+end_src + +Dynamical estimation: +- ASD of DAC noise used for the Cercalo +- Multiply by transfer function from Cercalo voltage to angle estimation using the 4QD + +#+begin_src matlab + freqs = logspace(1, 3, 1000); + + fs = 1e4; + + % ASD of the DAC voltage going to the Cercalo in [V/sqrt(Hz)] + asd_uc = (20/2^16)/sqrt(12*fs)*ones(length(freqs), 1); + + % ASD of the measured angle by the QD in [rad/sqrt(Hz)] + asd_theta = asd_uc.*abs(squeeze(freqresp(G(1,1), freqs, 'Hz'))); + + figure; + loglog(freqs, asd_theta) +#+end_src + +Then the corresponding ASD of the measured displacement by the interferometer is: +#+begin_src matlab + asd_L = asd_theta*10^(-6); % [m/sqrt(Hz)] +#+end_src + +And we integrate that to have the RMS value: +#+begin_src matlab + cps_L = 1/pi*cumtrapz(2*pi*freqs, (asd_L).^2); +#+end_src + +The RMS value is: +#+begin_src matlab :results value replace + sqrt(cps_L(end)) +#+end_src + +#+RESULTS: +: 1.647e-11 + +#+begin_src matlab + figure; + loglog(freqs, cps_L) +#+end_src + +Let's estimate the beam angle error corresponding to 1 LSB of the cercalo's DAC. +Gain of the Cercalo is approximatively 5 degrees for 10V. +However the beam angle deviation is 4 times the angle deviation of the cercalo mirror, thus: +#+begin_src matlab :results value replace + d_alpha = 4*(20/2^16)*(5*pi/180)/10 % [rad] +#+end_src + +#+RESULTS: +: 1.0653e-05 + +This corresponds to a measurement error of the Attocube equals to (in [m]) +#+begin_src matlab :results value replace + 1e-6*d_alpha % [m] +#+end_src + +#+RESULTS: +: 1.0653e-11 + +#+begin_important + The DAC noise use for the Cercalo does not limit the performance of the system. +#+end_important + * Plant Scaling -| | Value | Unit | | -|------------------------+-------+-------------+---| -| Expected perturbations | 1 | [V] | $U_n$ | -| Maximum input usage | 10 | [V] | $U_c$ | +| | Value | Unit | | +|------------------------+-------+-------------+----------| +| Expected perturbations | 1 | [V] | $U_n$ | +| Maximum input usage | 10 | [V] | $U_c$ | | Maximum wanted error | 10 | [$\mu rad$] | $\theta$ | -| Measured noise | 5 | [$\mu rad$] | | +| Measured noise | 5 | [$\mu rad$] | | ** General Configuration +* Control Objective +The maximum expected stroke is $y_\text{max} = 3mm \approx 5e^{-2} rad$ at $1Hz$. +The maximum wanted error is $e_\text{max} = 10 \mu rad$. + +Thus, we require the sensitivity function at $\omega_0 = 1\text{ Hz}$: +\begin{align*} + |S(j\omega_0)| &< \left| \frac{e_\text{max}}{y_\text{max}} \right| \\ + &< 2 \cdot 10^{-4} +\end{align*} + +In terms of loop gain, this is equivalent to: +\[ |L(j\omega_0)| > 5 \cdot 10^{3} \] + * Plant Analysis ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -2023,20 +2282,7 @@ We compute the Power Spectral Density of the voltage across the inductance used G0 = freqresp(G, 0); #+end_src -* Control Objective -The maximum expected stroke is $y_\text{max} = 3mm \approx 5e^{-2} rad$ at $1Hz$. -The maximum wanted error is $e_\text{max} = 10 \mu rad$. - -Thus, we require the sensitivity function at $\omega_0 = 1\text{ Hz}$: -\begin{align*} - |S(j\omega_0)| &< \left| \frac{e_\text{max}}{y_\text{max}} \right| \\ - &< 2 \cdot 10^{-4} -\end{align*} - -In terms of loop gain, this is equivalent to: -\[ |L(j\omega_0)| > 5 \cdot 10^{3} \] - -* Decentralized Control +* Decentralized Control of the Cercalo :PROPERTIES: :header-args:matlab+: :tangle matlab/decentralized_control.m :header-args:matlab+: :comments org :mkdirp yes @@ -2249,11 +2495,9 @@ The controllers can be downloaded [[./mat/K_newport.mat][here]]. save('mat/K_newport.mat', 'Kn', 'Knd'); #+end_src -* Measuement of the non-repeatability +* Measurement of the non-repeatability ** Introduction :ignore: - Explanation of the procedure -- List all sources of error and their effects on the Attocube measurement -- Think about how to determine the value of the individual sources of error ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)