Start the analysis of a budget error
This commit is contained in:
parent
b0333f3917
commit
0543f123a1
BIN
figs/angle_error_schematic_cercalo.png
Normal file
BIN
figs/angle_error_schematic_cercalo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
BIN
figs/effect_cercalo_angle_distance_meas.png
Normal file
BIN
figs/effect_cercalo_angle_distance_meas.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 79 KiB |
BIN
figs/simulation_beam_path_high_angle.png
Normal file
BIN
figs/simulation_beam_path_high_angle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
288
index.org
288
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)
|
||||
<<matlab-dir>>
|
||||
@ -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)
|
||||
<<matlab-dir>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent :noweb yes
|
||||
<<matlab-init>>
|
||||
#+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")
|
||||
<<plt-matlab>>
|
||||
#+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")
|
||||
<<plt-matlab>>
|
||||
#+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)
|
||||
|
Loading…
Reference in New Issue
Block a user