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
|
#+end_src
|
||||||
|
|
||||||
* Huddle Test
|
* Huddle Test
|
||||||
|
** Introduction :ignore:
|
||||||
** Matlab Init :noexport: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)
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||||
<<matlab-dir>>
|
<<matlab-dir>>
|
||||||
@ -1960,16 +1961,274 @@ We compute the Power Spectral Density of the voltage across the inductance used
|
|||||||
xlim([1, 1000]);
|
xlim([1, 1000]);
|
||||||
#+end_src
|
#+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
|
* Plant Scaling
|
||||||
| | Value | Unit | |
|
| | Value | Unit | |
|
||||||
|------------------------+-------+-------------+---|
|
|------------------------+-------+-------------+----------|
|
||||||
| Expected perturbations | 1 | [V] | $U_n$ |
|
| Expected perturbations | 1 | [V] | $U_n$ |
|
||||||
| Maximum input usage | 10 | [V] | $U_c$ |
|
| Maximum input usage | 10 | [V] | $U_c$ |
|
||||||
| Maximum wanted error | 10 | [$\mu rad$] | $\theta$ |
|
| Maximum wanted error | 10 | [$\mu rad$] | $\theta$ |
|
||||||
| Measured noise | 5 | [$\mu rad$] | |
|
| Measured noise | 5 | [$\mu rad$] | |
|
||||||
|
|
||||||
** General Configuration
|
** 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
|
* Plant Analysis
|
||||||
** Matlab Init :noexport: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)
|
#+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);
|
G0 = freqresp(G, 0);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* Control Objective
|
* Decentralized Control of the Cercalo
|
||||||
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
|
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:matlab+: :tangle matlab/decentralized_control.m
|
:header-args:matlab+: :tangle matlab/decentralized_control.m
|
||||||
:header-args:matlab+: :comments org :mkdirp yes
|
: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');
|
save('mat/K_newport.mat', 'Kn', 'Knd');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* Measuement of the non-repeatability
|
* Measurement of the non-repeatability
|
||||||
** Introduction :ignore:
|
** Introduction :ignore:
|
||||||
- Explanation of the procedure
|
- 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:
|
** Matlab Init :noexport:ignore:
|
||||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
#+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