diff --git a/figs/general_control_names.png b/figs/general_control_names.png new file mode 100644 index 0000000..b64fb77 Binary files /dev/null and b/figs/general_control_names.png differ diff --git a/figs/huddle_test_4qd.png b/figs/huddle_test_4qd.png new file mode 100644 index 0000000..b81c7b1 Binary files /dev/null and b/figs/huddle_test_4qd.png differ diff --git a/figs/huddle_test_4qd_psd.png b/figs/huddle_test_4qd_psd.png new file mode 100644 index 0000000..a94bac9 Binary files /dev/null and b/figs/huddle_test_4qd_psd.png differ diff --git a/figs/huddle_test_Va.png b/figs/huddle_test_Va.png new file mode 100644 index 0000000..966d559 Binary files /dev/null and b/figs/huddle_test_Va.png differ diff --git a/figs/huddle_test_psd_va.png b/figs/huddle_test_psd_va.png new file mode 100644 index 0000000..bd0a509 Binary files /dev/null and b/figs/huddle_test_psd_va.png differ diff --git a/index.html b/index.html index c54e7a9..e31a5ba 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Cercalo Test Bench @@ -276,140 +276,143 @@ for the JavaScript code in this tag.

Table of Contents

-
-

1 Introduction

+
+

1 Introduction

-
-

1.1 Block Diagram

+
+

1.1 Block Diagram

-The block diagram of the setup to be controlled is shown in Fig. 1. +The block diagram of the setup to be controlled is shown in Fig. 1.

-
+

cercalo_diagram_simplify.png

Figure 1: Block Diagram of the Experimental Setup

@@ -439,10 +442,10 @@ The transfer functions in the system are:

-The block diagram with each transfer function is shown in Fig. 2. +The block diagram with each transfer function is shown in Fig. 2.

-
+

cercalo_diagram.png

Figure 2: Block Diagram of the Experimental Setup with detailed dynamics

@@ -450,14 +453,14 @@ The block diagram with each transfer function is shown in Fig. -

1.2 Cercalo

+
+

1.2 Cercalo

-From the Cercalo documentation, we have the parameters shown on table 1. +From the Cercalo documentation, we have the parameters shown on table 1.

- +
@@ -515,11 +518,11 @@ The Inductance and DC resistance of the two axis of the Cercalo have been measur

-Let's first consider the horizontal direction and we try to model the Cercalo by a spring/mass/damper system (Fig. 3). +Let's first consider the horizontal direction and we try to model the Cercalo by a spring/mass/damper system (Fig. 3).

-
+

mech_cercalo.png

Figure 3: 1 degree-of-freedom model of the Cercalo

@@ -558,7 +561,7 @@ The current \(I\) is also proportional to the voltage at the output of the buffe

Let's try to determine the equivalent mass and spring values. -From table 1, for the horizontal direction: +From table 1, for the horizontal direction: \[ \left| \frac{x}{I} \right|(0) = \left| \alpha \frac{x}{F} \right|(0) = 28.4\ \frac{mA}{deg} = 1.63\ \frac{A}{rad} \]

@@ -619,18 +622,18 @@ This will be done using the Newport.
-
-

1.3 Optical Setup

+
+

1.3 Optical Setup

-
-

1.4 Newport

+
+

1.4 Newport

-Parameters of the Newport are shown in Fig. 4. +Parameters of the Newport are shown in Fig. 4.

-It's dynamics for small angle excitation is shown in Fig. 5. +It's dynamics for small angle excitation is shown in Fig. 5.

@@ -642,14 +645,14 @@ And we have: \end{align*} -

+

newport_doc.png

Figure 4: Documentation of the Newport

-
+

newport_gain.png

Figure 5: Transfer function of the Newport

@@ -657,25 +660,25 @@ And we have:
-
-

1.5 4 quadrant Diode

+
+

1.5 4 quadrant Diode

-The front view of the 4 quadrant photo-diode is shown in Fig. 6. +The front view of the 4 quadrant photo-diode is shown in Fig. 6.

-
+

4qd_naming.png

Figure 6: Front view of the 4QD

-Each of the photo-diode is amplified using a 4-channel amplifier as shown in Fig. 7. +Each of the photo-diode is amplified using a 4-channel amplifier as shown in Fig. 7.

-
+

4qd_amplifier.png

Figure 7: Wiring of the amplifier. The amplifier is located on the bottom right of the board

@@ -683,8 +686,8 @@ Each of the photo-diode is amplified using a 4-channel amplifier as shown in Fig
-
-

1.6 ADC/DAC

+
+

1.6 ADC/DAC

Let's compute the theoretical noise of the ADC/DAC. @@ -704,14 +707,14 @@ with \(\Delta V\) the total range of the ADC, \(n\) its number of bits, \(q\) th

-
-

2 Identification of the system dynamics

+
+

2 Identification of the system dynamics

- +

-In this section, we seek to identify all the blocks as shown in Fig. 1. +In this section, we seek to identify all the blocks as shown in Fig. 1.

Table 1: Cercalo Parameters
@@ -808,8 +811,8 @@ All the files (data and Matlab scripts) are accessible -

2.1 Calibration of the 4 Quadrant Diode

+
+

2.1 Calibration of the 4 Quadrant Diode

Prior to any dynamic identification, we would like to be able to determine the meaning of the 4 quadrant diode measurement. @@ -824,8 +827,8 @@ We then should be able to obtain the "gain" of the 4QD in [V/rad].

-
-

2.1.1 Input / Output data

+
+

2.1.1 Input / Output data

The identification data is loaded @@ -859,7 +862,7 @@ uv.t = uv.t - uv.t +

calib_4qd_h.png

Figure 8: Identification signals when exciting the horizontal direction (png, pdf)

@@ -867,7 +870,7 @@ uv.t = uv.t - uv.t +

calib_4qd_v.png

Figure 9: Identification signals when exciting in the vertical direction (png, pdf)

@@ -875,8 +878,8 @@ uv.t = uv.t - uv.t -

2.1.2 Linear Regression to obtain the gain of the 4QD

+
+

2.1.2 Linear Regression to obtain the gain of the 4QD

We plot the angle of mirror @@ -906,7 +909,7 @@ where:

-The linear regression is shown in Fig. 10. +The linear regression is shown in Fig. 10.

@@ -916,17 +919,17 @@ bv = [ones +

4qd_linear_reg.png

Figure 10: Linear Regression (png, pdf)

-Thus, we obtain the "gain of the 4 quadrant photo-diode as shown on table 2. +Thus, we obtain the "gain of the 4 quadrant photo-diode as shown on table 2.

-
+
@@ -970,11 +973,11 @@ We obtain: -
-

2.2 Identification of the Cercalo Impedance, Current Amplifier and Voltage Amplifier dynamics

+
+

2.2 Identification of the Cercalo Impedance, Current Amplifier and Voltage Amplifier dynamics

-We wish here to determine \(G_i\) and \(G_a\) shown in Fig. 1. +We wish here to determine \(G_i\) and \(G_a\) shown in Fig. 1.

@@ -982,15 +985,15 @@ We ignore the electro-mechanical coupling.

-
-

2.2.1 Electrical Schematic

+
+

2.2.1 Electrical Schematic

-The schematic of the electrical circuit used to drive the Cercalo is shown in Fig. 11. +The schematic of the electrical circuit used to drive the Cercalo is shown in Fig. 11.

-
+

cercalo_amplifier.png

Figure 11: Current Amplifier Schematic

@@ -1077,8 +1080,8 @@ with
-
-

2.2.2 Theoretical Transfer Functions

+
+

2.2.2 Theoretical Transfer Functions

The values of the components in the current amplifier have been measured. @@ -1108,7 +1111,7 @@ Ga = blkdiag( +

current_amplifier_tf.png

Figure 12: Transfer function for the current amplifier (png, pdf)

@@ -1130,8 +1133,8 @@ Zc = tf(blkdiag -

2.2.3 Identified Transfer Functions

+
+

2.2.3 Identified Transfer Functions

Noise is generated using the DAC (\([U_{c,h}\ U_{c,v}]\)) and we measure the output of the voltage amplifier \([V_{c,h}, V_{c,v}]\). @@ -1158,7 +1161,7 @@ We remove the first seconds where the Cercalo is turned on.

-
+

current_amplifier_comp_theory_id.png

Figure 13: Identified and Theoretical Transfer Function \(G_a G_i\) (png, pdf)

@@ -1176,7 +1179,7 @@ Gi = tf(blkdiag +

current_amplifier_comp_theory_id_bis.png

Figure 14: Identified and Theoretical Transfer Function \(G_a G_i\) (png, pdf)

@@ -1254,11 +1257,11 @@ Continuous-time zero/pole/gain model.
-
-

2.3 Identification of the Cercalo Dynamics

+
+

2.3 Identification of the Cercalo Dynamics

-We now wish to identify the dynamics of the Cercalo identified by \(G_c\) on the block diagram in Fig. 1. +We now wish to identify the dynamics of the Cercalo identified by \(G_c\) on the block diagram in Fig. 1.

@@ -1270,8 +1273,8 @@ The transfer function obtained will be \(G_c G_i\), and because we have already

-
-

2.3.1 Input / Output data

+
+

2.3.1 Input / Output data

The identification data is loaded @@ -1306,7 +1309,7 @@ uv.t = uv.t - uv.t +

identification_uh.png

Figure 15: Identification signals when exciting the horizontal direction (png, pdf)

@@ -1314,7 +1317,7 @@ uv.t = uv.t - uv.t +

identification_uv.png

Figure 16: Identification signals when exciting in the vertical direction (png, pdf)

@@ -1322,8 +1325,8 @@ uv.t = uv.t - uv.t -

2.3.2 Coherence

+
+

2.3.2 Coherence

The window used for the spectral analysis is an hanning windows with temporal size equal to 1 second. @@ -1342,7 +1345,7 @@ The window used for the spectral analysis is an hanning windows wit

-
+

coh_cercalo.png

Figure 17: Coherence (png, pdf)

@@ -1350,8 +1353,8 @@ The window used for the spectral analysis is an hanning windows wit
-
-

2.3.3 Estimation of the Frequency Response Function Matrix

+
+

2.3.3 Estimation of the Frequency Response Function Matrix

We compute an estimate of the transfer functions. @@ -1365,14 +1368,14 @@ We compute an estimate of the transfer functions.

-
+

frf_cercalo_gain.png

Figure 18: Frequency Response Matrix (png, pdf)

-
+

frf_cercalo_phase.png

Figure 19: Frequency Response MatrixPhase (png, pdf)

@@ -1380,8 +1383,8 @@ We compute an estimate of the transfer functions.
-
-

2.3.4 Time Delay

+
+

2.3.4 Time Delay

Now, we would like to remove the time delay included in the FRF prior to the model extraction. @@ -1412,8 +1415,8 @@ tf_Ucv_Vpv = tf_Ucv_Vpv./G_delay_resp;

-
-

2.3.5 Extraction of a transfer function matrix

+
+

2.3.5 Extraction of a transfer function matrix

First we define the initial guess for the resonance frequencies and the weights associated. @@ -1463,11 +1466,11 @@ weight_Ucv_Vpv(f

-The weights are shown in Fig. 20. +The weights are shown in Fig. 20.

-
+

weights_cercalo.png

Figure 20: Weights amplitude (png, pdf)

@@ -1519,7 +1522,7 @@ An we run the vectfit3 algorithm.
-
+

identification_matrix_fit.png

Figure 21: Transfer Function Extraction of the FRF matrix (png, pdf)

@@ -1527,7 +1530,7 @@ An we run the vectfit3 algorithm. -
+

identification_matrix_fit_phase.png

Figure 22: Transfer Function Extraction of the FRF matrix (png, pdf)

@@ -1550,8 +1553,8 @@ Gc = [G_Uch_Vph, G_Ucv_Vph;
-
-

2.4 Identification of the Newport Dynamics

+
+

2.4 Identification of the Newport Dynamics

We here identify the transfer function from a reference sent to the Newport \([U_{n,h},\ U_{n,v}]\) to the measurement made by the 4QD \([V_{p,h},\ V_{p,v}]\). @@ -1562,8 +1565,8 @@ To do so, we inject noise to the Newport \([U_{n,h},\ U_{n,v}]\) and we record t

-
-

2.4.1 Input / Output data

+
+

2.4.1 Input / Output data

The identification data is loaded @@ -1598,14 +1601,14 @@ uv.t = uv.t - uv.t +

identification_unh.png

Figure 23: Identification signals when exciting the horizontal direction (png, pdf)

-
+

identification_unv.png

Figure 24: Identification signals when exciting in the vertical direction (png, pdf)

@@ -1613,8 +1616,8 @@ uv.t = uv.t - uv.t -

2.4.2 Coherence

+
+

2.4.2 Coherence

The window used for the spectral analysis is an hanning windows with temporal size equal to 1 second. @@ -1633,7 +1636,7 @@ The window used for the spectral analysis is an hanning windows wit

-
+

id_newport_coherence.png

Figure 25: Coherence (png, pdf)

@@ -1641,8 +1644,8 @@ The window used for the spectral analysis is an hanning windows wit
-
-

2.4.3 Estimation of the Frequency Response Function Matrix

+
+

2.4.3 Estimation of the Frequency Response Function Matrix

We compute an estimate of the transfer functions. @@ -1656,14 +1659,14 @@ We compute an estimate of the transfer functions.

-
+

frf_newport_gain.png

Figure 26: Frequency Response Matrix (png, pdf)

-
+

frf_newport_phase.png

Figure 27: Frequency Response Matrix Phase (png, pdf)

@@ -1671,8 +1674,8 @@ We compute an estimate of the transfer functions.
-
-

2.4.4 Time Delay

+
+

2.4.4 Time Delay

Now, we would like to remove the time delay included in the FRF prior to the model extraction. @@ -1694,7 +1697,7 @@ G_delay_resp = squeeze(freqr We then remove the time delay from the frequency response function.

-
+

time_delay_newport.png

Figure 28: Phase change due to time-delay in the Newport dynamics (png, pdf)

@@ -1702,11 +1705,11 @@ We then remove the time delay from the frequency response function.
-
-

2.4.5 Extraction of a transfer function matrix

+
+

2.4.5 Extraction of a transfer function matrix

-From Fig. 26, it seems reasonable to model the Newport dynamics as diagonal and constant. +From Fig. 26, it seems reasonable to model the Newport dynamics as diagonal and constant.

@@ -1717,8 +1720,8 @@ From Fig. 26, it seems reasonable to model the Newport
-
-

2.5 Full System

+
+

2.5 Full System

We now have identified: @@ -1780,129 +1783,216 @@ The file mat/plant.mat is accessible here

-
-

3 Active Damping

+
+

3 Huddle Test

+

+ +

+

+The goal is to determine the noise of the photodiodes as well as the noise of the Attocube interferometer. +

+ +

+Multiple measurements are done with different experimental configuration as follow: +

+ +
Table 2: Identified Gain of the 4 quadrant diode
+ + +++ ++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3: Experimental Configuration for the various Huddle test
NumberOL/CLCompensation UnitAluminum
1Open Loop  
2Open LoopCompensation Unit 
3Closed LoopCompensation Unit 
4Open LoopCompensation UnitAluminum
5Closed LoopCompensation UnitAluminum
-
-

3.1 Load Plant

+
+

3.1 Load Data

-
load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd');
+
ht_1 = load('./mat/data_huddle_test_1.mat', 't', 'Vph', 'Vpv', 'Va');
+ht_2 = load('./mat/data_huddle_test_2.mat', 't', 'Vph', 'Vpv', 'Va');
+ht_3 = load('./mat/data_huddle_test_3.mat', 't', 'Uch', 'Ucv', 'Vph', 'Vpv', 'Va');
+ht_4 = load('./mat/data_huddle_test_4.mat', 't', 'Vph', 'Vpv', 'Va');
+% ht_5 = load('./mat/data_huddle_test_5.mat', 't', 'Uch', 'Ucv', 'Vph', 'Vpv', 'Va');
+
+
+ +
+
fs = 1e4;
 
-
-

3.2 Test

+
+

3.2 Pre-processing

-
bode(sys({'Vch', 'Vcv'}, {'Uch', 'Ucv'}));
+
t0 = 1; % [s]
+
+tend = 100; % [s]
+
+ht_s = {ht_1 ht_2 ht_3 ht_4}
+
+for i = 1:length(ht_s)
+  ht_s{i}.Vph(ht_s{i}.t<t0) = [];
+  ht_s{i}.Vpv(ht_s{i}.t<t0) = [];
+  ht_s{i}.Va(ht_s{i}.t<t0)  = [];
+  ht_s{i}.t(ht_s{i}.t<t0)   = [];
+
+  ht_s{i}.t = ht_s{i}.t - ht_s{i}.t(1); % We start at t=0
+
+  ht_s{i}.Vph(tend*fs+1:end) = [];
+  ht_s{i}.Vpv(tend*fs+1:end) = [];
+  ht_s{i}.Va(tend*fs+1:end)  = [];
+  ht_s{i}.t(tend*fs+1:end)   = [];
+
+  ht_s{i}.Va = ht_s{i}.Va - mean(ht_s{i}.Va);
+end
+
+ht_1 = ht_s{1};
+ht_2 = ht_s{2};
+ht_3 = ht_s{3};
+ht_4 = ht_s{4};
+
+
+
+
+ +
+

3.3 Time domain plots

+
+ +
+

huddle_test_Va.png +

+

Figure 29: Measurement of the Attocube during Huddle Test (png, pdf)

+
+ + +
+

huddle_test_4qd.png +

+

Figure 30: Measurement of the 4QD during the Huddle tests (png, pdf)

+
+
+
+ +
+

3.4 Power Spectral Density

+
+
+
win = hanning(ceil(1*fs));
 
-
Kppf = blkdiag(-10000/s, tf(0));
-
-Kppf.InputName  = {'Vch', 'Vcv'};
-Kppf.OutputName = {'Uch', 'Ucv'};
+
[psd_Va1, f] = pwelch(ht_1.Va, win, [], [], fs);
+[psd_Va2, ~] = pwelch(ht_2.Va, win, [], [], fs);
+[psd_Va3, ~] = pwelch(ht_3.Va, win, [], [], fs);
+[psd_Va4, ~] = pwelch(ht_4.Va, win, [], [], fs);
 
-
inputs  = {'Uch', 'Ucv', 'Unh', 'Unv'};
-outputs = {'Ich', 'Icv', 'Rh', 'Rv', 'Vph', 'Vpv'};
-
-sys_cl = connect(sys, Kppf, inputs, outputs);
-
-figure; bode(sys_cl({'Vph', 'Vpv'}, {'Uch', 'Ucv'}), sys({'Vph', 'Vpv'}, {'Uch', 'Ucv'}))
+
[psd_Vph1, ~] = pwelch(ht_1.Vph, win, [], [], fs);
+[psd_Vph2, ~] = pwelch(ht_2.Vph, win, [], [], fs);
+[psd_Vph3, ~] = pwelch(ht_3.Vph, win, [], [], fs);
+[psd_Vph4, ~] = pwelch(ht_4.Vph, win, [], [], fs);
 
+ +
+
[psd_Vpv1, ~] = pwelch(ht_1.Vpv, win, [], [], fs);
+[psd_Vpv2, ~] = pwelch(ht_2.Vpv, win, [], [], fs);
+[psd_Vpv3, ~] = pwelch(ht_3.Vpv, win, [], [], fs);
+[psd_Vpv4, ~] = pwelch(ht_4.Vpv, win, [], [], fs);
+
+
+ + +
+

huddle_test_psd_va.png +

+

Figure 31: PSD of the Interferometer measurement during Huddle tests (png, pdf)

+
+ + + +
+

huddle_test_4qd_psd.png +

+

Figure 32: PSD of the 4QD signal during Huddle tests (png, pdf)

-
-

4 Huddle Test

+ +
+

3.5 Conclusion

+
+

+The Attocube's "Environmental Compensation Unit" does not have a significant effect on the stability of the measurement. +

+
+
+
+ +
+

4 Budget Error

-
-
-

4.1 Load data

-

-We load the data taken during the Huddle Test. -

-
-
load('mat/data_huddle_test.mat', ...
-     't', 'Uch', 'Ucv', ...
-     'Unh', 'Unv', ...
-     'Vph', 'Vpv', ...
-     'Vch', 'Vcv', ...
-     'Vnh', 'Vnv', ...
-     'Va');
-
-
-
-
- -
-

4.2 Pre-processing

-
-

-We remove the first second of data where everything is settling down. -

-
-
t0 = 1;
-
-Uch(t<t0) = [];
-Ucv(t<t0) = [];
-Unh(t<t0) = [];
-Unv(t<t0) = [];
-Vph(t<t0) = [];
-Vpv(t<t0) = [];
-Vch(t<t0) = [];
-Vcv(t<t0) = [];
-Vnh(t<t0) = [];
-Vnv(t<t0) = [];
-Va(t<t0)  = [];
-t(t<t0)   = [];
-
-t = t - t(1); % We start at t=0
-
-
-
-
- -
-

4.3 Time Domain Data

-
-

-We compute the Power Spectral Density of the horizontal and vertical positions of the beam as measured by the 4 quadrant diode. -

-
-
[psd_Vph, f] = pwelch(Vph, hanning(ceil(1*fs)), [], [], fs);
-[psd_Vpv, ~] = pwelch(Vpv, hanning(ceil(1*fs)), [], [], fs);
-
-
- -

-We compute the Power Spectral Density of the voltage across the inductance used for horizontal and vertical positioning of the Cercalo. -

-
-
[psd_Vch, f] = pwelch(Vch, hanning(ceil(1*fs)), [], [], fs);
-[psd_Vcv, ~] = pwelch(Vcv, hanning(ceil(1*fs)), [], [], fs);
-
-
-
-
-
- -
-

5 Budget Error

-
-

- +

Goals: @@ -1938,28 +2028,27 @@ This can be due to change of Temperature, Pressure and Humidity of the air in th Procedure:

    -
  • in section 5.1: +
  • in section 4.1: We estimate the effect of an angle error of the Cercalo mirror on the Attocube measurement
  • -
  • in section 5.2: +
  • in section 4.2: The effect of perpendicular motion of the Newport and Cercalo mirrors on the Attocube measurement is determined.
  • -
  • in section 5.3: +
  • in section 4.3: We estimate the expected change of refractive index of the air in the beam path and the resulting Attocube measurement error
  • -
  • in section 5.5: +
  • in section 4.5: The feedback system using the 4 quadrant diode and the Cercalo is studied. Sensor noise, actuator noise and their effects on the control error is discussed.
- -
-

5.1 Effect of the Cercalo angle error on the measured distance by the Attocube

-
+
+

4.1 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 (instead of a concave one).

-The geometry of the setup is shown in Fig. 29 where: +The geometry of the setup is shown in Fig. 33 where:

  • \(O\) is the reference surface of the Attocube
  • @@ -1986,10 +2075,10 @@ L = 0. +

    angle_error_schematic_cercalo.png

    -

    Figure 29: Caption

    +

    Figure 33: Schematic of the geometry used to evaluate the effect of \(\delta \theta_c\) on the measured distance \(\delta L\)

    @@ -2028,7 +2117,7 @@ We now compute the new path length when there is an error angle \(\delta \theta_

-We then compute the distance error and we plot it as a function of the Cercalo angle error (Fig. 30). +We then compute the distance error and we plot it as a function of the Cercalo angle error (Fig. 34).

path_error = path_length - path_nominal;
@@ -2036,14 +2125,14 @@ We then compute the distance error and we plot it as a function of the Cercalo a
 
-
+

effect_cercalo_angle_distance_meas.png

-

Figure 30: Effect of an angle error of the Cercalo on the distance error measured by the Attocube (png, pdf)

+

Figure 34: Effect of an angle error of the Cercalo on the distance error measured by the Attocube (png, pdf)

-And we plot the beam path using Matlab for an high angle to verify that the code is working (Fig. 31). +And we plot the beam path using Matlab for an high angle to verify that the code is working (Fig. 35).

theta = 2*2*pi/360; % [rad]
@@ -2060,15 +2149,15 @@ T = [
 
-
+

simulation_beam_path_high_angle.png

-

Figure 31: Simulation of a beam path for high angle error (png, pdf)

+

Figure 35: Simulation of a beam path for high angle error (png, pdf)

-Based on Fig. 30, we see that an angle error \(\delta\theta_c\) of the Cercalo mirror induces a distance error \(\delta L\) measured by the Attocube which is dependent of the square of \(\delta \theta_c\): +Based on Fig. 34, we see that an angle error \(\delta\theta_c\) of the Cercalo mirror induces a distance error \(\delta L\) measured by the Attocube which is dependent of the square of \(\delta \theta_c\):

\begin{equation} @@ -2083,7 +2172,7 @@ with:

-Some example are shown in table 3. +Some example are shown in table 4.

@@ -2092,8 +2181,8 @@ The tracking error of the feedback system used to position the Cercalo mirror sh

- - +
Table 3: Effect of an angle error \(\delta \theta_c\) of the Cercalo's mirror on the measurement error \(\delta L\) by the Attocube
+@@ -2126,15 +2215,15 @@ The tracking error of the feedback system used to position the Cercalo mirror sh -
-

5.2 Unwanted motion of Cercalo/Newport mirrors perpendicular to its surface

-
+
+

4.2 Unwanted motion of Cercalo/Newport mirrors perpendicular to its surface

+

- +

-From Figs 32 and 33, it is clear that perpendicular motions of the Cercalo mirror and of the Newport mirror have an impact on the measured distance by the Attocube interferometer. +From Figs 36 and 37, it is clear that perpendicular motions of the Cercalo mirror and of the Newport mirror have an impact on the measured distance by the Attocube interferometer.

@@ -2158,17 +2247,17 @@ The error in measured distance by the Attocube will we \(\delta L/2\).

-
+

cercalo_perpendicular_motion.png

-

Figure 32: Effect of a Perpendicular motion of the Cercalo Mirror

+

Figure 36: Effect of a Perpendicular motion of the Cercalo Mirror

-
+

newport_perpendicular_motion.png

-

Figure 33: Effect of a Perpendicular motion of the Newport Mirror

+

Figure 37: Effect of a Perpendicular motion of the Newport Mirror

@@ -2185,11 +2274,11 @@ However, the non repeatability of this motion should be less than few nano-meter
-
-

5.3 Change in refractive index of the air in the beam path

-
+
+

4.3 Change in refractive index of the air in the beam path

+

- +

@@ -2287,9 +2376,9 @@ The beam path should be protected using aluminum to minimize the change in refra

-
-

5.4 Thermal Expansion of the Metrology Frame

-
+
+

4.4 Thermal Expansion of the Metrology Frame

+

The material used for the metrology frame is Aluminum. Its linear thermal expansion coefficient is \(\alpha = 23 \cdot 10^{-6} K^{-1}\). @@ -2308,18 +2397,18 @@ Thus, the temperature of the metrology frame should be kept constant to less tha

-
-

5.5 Estimation of the Cercalo angle error due to Noise

-
+
+

4.5 Estimation of the Cercalo angle error due to Noise

+

- +

In this section, we seek to estimate the angle error \(\delta \theta\)

-Consider the block diagram in Fig. 34 with: +Consider the block diagram in Fig. 38 with:

  • \(G\): represents the transfer function from a voltage applied by the Speedgoat DAC used for the Cercalo to the Beam angle
  • @@ -2350,23 +2439,23 @@ It includes:
-
+

feedback_diagram.png

-

Figure 34: Block Diagram of the Feedback system

+

Figure 38: Block Diagram of the Feedback system

-
-

5.5.1 Estimation of sources of noise and disturbances

-
+
+

4.5.1 Estimation of sources of noise and disturbances

+

Let's estimate the values of \(d_u\), \(d\) and \(n_\theta\).

-
-
5.5.1.1 ADC Quantization Noise
-
+
+
4.5.1.1 ADC Quantization Noise
+

The ADC quantization noise is:

@@ -2400,9 +2489,9 @@ For the ADC used:
-
-
5.5.1.2 DAC Quantization Noise
-
+
+
4.5.1.2 DAC Quantization Noise
+

The DAC quantization noise is:

@@ -2436,9 +2525,9 @@ For the DAC used:
-
-
5.5.1.3 Noise of the Newport Mirror angle
-
+
+
4.5.1.3 Noise of the Newport Mirror angle
+

Plus, we estimate the effect of DAC quantization noise on the angle error on the Newport mirror.

@@ -2487,9 +2576,9 @@ If we suppose a white noise, the power spectral density of the beam angle due to
-
-
5.5.1.4 Disturbances due the Newport Mirror Rotation
-
+
+
4.5.1.4 Disturbances due the Newport Mirror Rotation
+

We will rotate the Newport mirror in order to simulate a displacement of the Sample:

@@ -2499,10 +2588,10 @@ We will rotate the Newport mirror in order to simulate a displacement of the Sam -
+

newport_angle_concave_mirror.png

-

Figure 35: Rotation of the (concave) Newport mirror

+

Figure 39: Rotation of the (concave) Newport mirror

@@ -2514,9 +2603,9 @@ where \(\alpha\) is the rotation of the Newport mirror.

-
-

5.5.2 Perfect Control

-
+
+

4.5.2 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. @@ -2548,9 +2637,9 @@ If we just consider the ADC noise:

-
-

5.5.3 Error due to DAC noise used for the Cercalo

-
+
+

4.5.3 Error due to DAC noise used for the Cercalo

+
load('./mat/plant.mat', 'Gi', 'Gc', 'Gd');
 
@@ -2659,11 +2748,19 @@ The DAC noise use for the Cercalo does not limit the performance of the system.
-
-

6 Plant Scaling

-
-
Table 4: Effect of an angle error \(\delta \theta_c\) of the Cercalo's mirror on the measurement error \(\delta L\) by the Attocube
+
+

5 Plant Scaling

+
+

+ +

+

+The goal is the scale the plant prior to control synthesis. +This will simplify the choice of weighting functions and will yield useful insight on the controllability of the plant. +

+
+@@ -2679,7 +2776,7 @@ The DAC noise use for the Cercalo does not limit the performance of the system. - + @@ -2713,15 +2810,9 @@ The DAC noise use for the Cercalo does not limit the performance of the system.
Table 5: Maximum wanted values for various signals
  Value Unit Variable Name
- -
-

6.1 General Configuration

-
-
- -
-

7 Control Objective

-
+
+

5.1 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\). @@ -2742,13 +2833,33 @@ In terms of loop gain, this is equivalent to:

-
-

8 Plant Analysis

-
+
+

5.2 General Configuration

+
+

+The plant is put in a general configuration as shown in Fig. 40. +

+ + +
+

general_control_names.png +

+

Figure 40: General Control Configuration

-
-

8.1 Load Plant

-
+
+
+
+ +
+

6 Plant Analysis

+
+

+ +

+
+
+

6.1 Load Plant

+
load('mat/plant.mat', 'G');
 
@@ -2756,9 +2867,9 @@ In terms of loop gain, this is equivalent to:
-
-

8.2 RGA-Number

-
+
+

6.2 RGA-Number

+
freqs = logspace(2, 4, 1000);
 G_resp = freqresp(G, freqs, 'Hz');
@@ -2796,9 +2907,9 @@ V = zeros(
-

8.3 Rotation Matrix

-
+
+

6.3 Rotation Matrix

+
G0 = freqresp(G, 0);
 
@@ -2807,11 +2918,66 @@ V = zeros( -

9 Decentralized Control of the Cercalo

-
+
+

7 Active Damping

+

- + +

+
+
+

7.1 Load Plant

+
+
+
load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd');
+
+
+
+
+ +
+

7.2 Integral Force Feedback

+
+
+
bode(sys({'Vch', 'Vcv'}, {'Uch', 'Ucv'}));
+
+
+ +
+
Kppf = blkdiag(-10000/s, tf(0));
+
+Kppf.InputName  = {'Vch', 'Vcv'};
+Kppf.OutputName = {'Uch', 'Ucv'};
+
+
+ +
+
inputs  = {'Uch', 'Ucv', 'Unh', 'Unv'};
+outputs = {'Ich', 'Icv', 'Rh', 'Rv', 'Vph', 'Vpv'};
+
+sys_cl = connect(sys, Kppf, inputs, outputs);
+
+figure; bode(sys_cl({'Vph', 'Vpv'}, {'Uch', 'Ucv'}), sys({'Vph', 'Vpv'}, {'Uch', 'Ucv'}))
+
+
+
+
+ +
+

7.3 Conclusion

+
+

+Active damping does not seems to be applicable here. +

+
+
+
+ +
+

8 Decentralized Control of the Cercalo

+
+

+

In this section, we try to implement a simple decentralized controller. @@ -2823,10 +2989,9 @@ All the files (data and Matlab scripts) are accessible -

9.1 Load Plant

-
+
+

8.1 Load Plant

+
load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd');
 
@@ -2834,12 +2999,12 @@ All the files (data and Matlab scripts) are accessible
-

9.2 Diagonal Controller

-
+
+

8.2 Diagonal Controller

+

Using SISOTOOL, a diagonal controller is designed. -The two SISO loop gains are shown in Fig. 36. +The two SISO loop gains are shown in Fig. 41.

Kh = -0.25598*(s+112)*(s^2 + 15.93*s + 6.686e06)/((s^2*(s+352.5)*(1+s/2/pi/2000)));
@@ -2852,14 +3017,14 @@ K.OutputName = {
 
 
-
+

diag_contr_loop_gain.png

-

Figure 36: Loop Gain using the Decentralized Diagonal Controller (png, pdf)

+

Figure 41: Loop Gain using the Decentralized Diagonal Controller (png, pdf)

-We then close the loop and we look at the transfer function from the Newport rotation signal to the beam angle (Fig. 37). +We then close the loop and we look at the transfer function from the Newport rotation signal to the beam angle (Fig. 42).

inputs  = {'Uch', 'Ucv', 'Unh', 'Unv'};
@@ -2870,17 +3035,17 @@ sys_cl = connect(sys, 
 
 
-
+

diag_contr_effect_newport.png

-

Figure 37: Effect of the Newport rotation on the beam position when the loop is closed using the Decentralized Diagonal Controller (png, pdf)

+

Figure 42: Effect of the Newport rotation on the beam position when the loop is closed using the Decentralized Diagonal Controller (png, pdf)

-
-

9.3 Save the Controller

-
+
+

8.3 Save the Controller

+
Kd = c2d(K, 1e-4, 'tustin');
 
@@ -2897,9 +3062,12 @@ The diagonal controller is accessible here.
-
-

10 Newport Control

-
+
+

9 Newport Control

+
+

+ +

In this section, we try to implement a simple decentralized controller for the Newport. This can be used to align the 4QD: @@ -2911,10 +3079,9 @@ This can be used to align the 4QD:

  • finally, we are sure to be aligned when the command signal of the Newport is 0
  • - -
    -

    10.1 Load Plant

    -
    +
    +

    9.1 Load Plant

    +
    load('mat/plant.mat', 'Gn', 'Gd');
     
    @@ -2922,9 +3089,9 @@ This can be used to align the 4QD:
    -
    -

    10.2 Analysis

    -
    +
    +

    9.2 Analysis

    +

    The plant is basically a constant until frequencies up to the required bandwidth.

    @@ -2950,17 +3117,17 @@ Knv = 1
    -
    +

    loop_gain_newport.png

    -

    Figure 38: Diagonal Loop Gain for the Newport (png, pdf)

    +

    Figure 43: Diagonal Loop Gain for the Newport (png, pdf)

    -
    -

    10.3 Save

    -
    +
    +

    9.3 Save

    +
    Kn = blkdiag(Knh, Knv);
     Knd = c2d(Kn, 1e-4, 'tustin');
    @@ -2980,17 +3147,19 @@ The controllers can be downloaded here.
     
    -
    -

    11 Measurement of the non-repeatability

    -
    +
    +

    10 Measurement of the non-repeatability

    +
    +

    + +

    • Explanation of the procedure
    - -
    -

    11.1 Data Load

    -
    +
    +

    10.1 Data Load

    +
    uh = load('mat/data_rep_h.mat', ...
          't', 'Uch', 'Ucv', ...
    @@ -3052,9 +3221,9 @@ uv.t = uv.t - uv.t
    -

    11.2 Verify Tracking Angle Error

    -
    +
    +

    10.2 Verify Tracking Angle Error

    +

    Let's verify that the positioning error of the beam is small and what could be the effect on the distance measured by the intereferometer.

    @@ -3138,9 +3307,9 @@ Now, compare that with the PSD of the measured distance by the interferometer.
    -
    -

    11.3 Processing

    -
    +
    +

    10.3 Processing

    +

    First, we get the mean value as measured by the interferometer for each value of the Newport angle.

    @@ -3167,9 +3336,9 @@ xlabel( -

    11.4 Some Plots

    -
    +
    +

    10.4 Some Plots

    +
    figure;
     hold on;
    @@ -3182,9 +3351,9 @@ xlabel(
    -

    11.5 Repeatability

    -
    +
    +

    10.5 Repeatability

    +
    bh = [ones(size(Vnh)) Vnh]\Vph;
     bv = [ones(size(Vnv)) Vnv]\Vpv;
    @@ -3196,7 +3365,7 @@ bv = [ones
     

    Author: Dehaeze Thomas

    -

    Created: 2019-09-19 jeu. 16:10

    +

    Created: 2019-09-20 ven. 09:25

    Validate

    diff --git a/index.org b/index.org index cd5f270..4962201 100644 --- a/index.org +++ b/index.org @@ -1791,73 +1791,27 @@ The file =mat/plant.mat= is accessible [[./mat/plant.mat][here]]. save('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd'); #+end_src -* Active Damping -** 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 - -#+begin_src matlab - freqs = logspace(1, 3, 1000); -#+end_src - -** Load Plant -#+begin_src matlab - load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd'); -#+end_src - -** Test -#+begin_src matlab - bode(sys({'Vch', 'Vcv'}, {'Uch', 'Ucv'})); -#+end_src - -#+begin_src matlab - Kppf = blkdiag(-10000/s, tf(0)); - - Kppf.InputName = {'Vch', 'Vcv'}; - Kppf.OutputName = {'Uch', 'Ucv'}; -#+end_src - -#+begin_src matlab :exports none - figure; - % Magnitude - ax1 = subaxis(2,1,1); - hold on; - plot(freqs, abs(squeeze(freqresp(G, freqs, 'Hz'))), 'k-'); - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - set(gca, 'XTickLabel',[]); - ylabel('Magnitude [dB]'); - hold off; - - % Phase - ax2 = subaxis(2,1,2); - hold on; - plot(freqs, 180/pi*angle(squeeze(freqresp(G, freqs, 'Hz'))), 'k-'); - set(gca,'xscale','log'); - yticks(-360:90:180); - ylim([-360 0]); - xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); - hold off; - - linkaxes([ax1,ax2],'x'); - xlim([freqs(1), freqs(end)]); -#+end_src - -#+begin_src matlab - inputs = {'Uch', 'Ucv', 'Unh', 'Unv'}; - outputs = {'Ich', 'Icv', 'Rh', 'Rv', 'Vph', 'Vpv'}; - - sys_cl = connect(sys, Kppf, inputs, outputs); - - figure; bode(sys_cl({'Vph', 'Vpv'}, {'Uch', 'Ucv'}), sys({'Vph', 'Vpv'}, {'Uch', 'Ucv'})) -#+end_src - * Huddle Test +:PROPERTIES: +:header-args:matlab+: :tangle matlab/huddle_test.m +:header-args:matlab+: :comments org :mkdirp yes +:END: +<> ** Introduction :ignore: +The goal is to determine the noise of the photodiodes as well as the noise of the Attocube interferometer. + +Multiple measurements are done with different experimental configuration as follow: + +#+name: tab:huddle_tests +#+caption: Experimental Configuration for the various Huddle test +| Number | OL/CL | Compensation Unit | Aluminum | +|--------+-------------+-------------------+----------| +| 1 | Open Loop | | | +| 2 | Open Loop | Compensation Unit | | +| 3 | Closed Loop | Compensation Unit | | +| 4 | Open Loop | Compensation Unit | Aluminum | +| 5 | Closed Loop | Compensation Unit | Aluminum | + ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> @@ -1867,103 +1821,227 @@ The file =mat/plant.mat= is accessible [[./mat/plant.mat][here]]. <> #+end_src -** Load data -We load the data taken during the Huddle Test. +** Load Data #+begin_src matlab - load('mat/data_huddle_test.mat', ... - 't', 'Uch', 'Ucv', ... - 'Unh', 'Unv', ... - 'Vph', 'Vpv', ... - 'Vch', 'Vcv', ... - 'Vnh', 'Vnv', ... - 'Va'); + ht_1 = load('./mat/data_huddle_test_1.mat', 't', 'Vph', 'Vpv', 'Va'); + ht_2 = load('./mat/data_huddle_test_2.mat', 't', 'Vph', 'Vpv', 'Va'); + ht_3 = load('./mat/data_huddle_test_3.mat', 't', 'Uch', 'Ucv', 'Vph', 'Vpv', 'Va'); + ht_4 = load('./mat/data_huddle_test_4.mat', 't', 'Vph', 'Vpv', 'Va'); + % ht_5 = load('./mat/data_huddle_test_5.mat', 't', 'Uch', 'Ucv', 'Vph', 'Vpv', 'Va'); +#+end_src + +#+begin_src matlab + fs = 1e4; #+end_src ** Pre-processing -We remove the first second of data where everything is settling down. #+begin_src matlab - t0 = 1; + t0 = 1; % [s] - Uch(t> +#+end_src + +#+NAME: fig:huddle_test_Va +#+CAPTION: Measurement of the Attocube during Huddle Test ([[./figs/huddle_test_Va.png][png]], [[./figs/huddle_test_Va.pdf][pdf]]) +[[file:figs/huddle_test_Va.png]] + +#+begin_src matlab :exports none + figure; + ax1 = subaxis(2, 2, 1) + hold on; + plot(ht_1.t, ht_1.Vph); + plot(ht_1.t, ht_1.Vpv); + hold off; + ylabel('Voltage [V]'); + set(gca, 'XTickLabel',[]); + title('OL'); + + ax2 = subaxis(2, 2, 2) + hold on; + plot(ht_2.t, ht_2.Vph); + plot(ht_2.t, ht_2.Vpv); + hold off; + set(gca, 'XTickLabel',[]); + set(gca, 'YTickLabel',[]); + title('OL + CU'); + + ax3 = subaxis(2, 2, 3) + hold on; + plot(ht_3.t, ht_3.Vph); + plot(ht_3.t, ht_3.Vpv); + hold off; + xlabel('Time [s]'); + ylabel('Voltage [V]'); + title('CL + CU'); + + ax4 = subaxis(2, 2, 4) + hold on; + plot(ht_4.t, ht_4.Vph); + plot(ht_4.t, ht_4.Vpv); + hold off; + xlabel('Time [s]'); + set(gca, 'YTickLabel',[]); + title('OL + CU + AL'); + + linkaxes([ax1 ax2 ax3 ax4], 'xy'); +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/huddle_test_4qd.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:huddle_test_4qd +#+CAPTION: Measurement of the 4QD during the Huddle tests ([[./figs/huddle_test_4qd.png][png]], [[./figs/huddle_test_4qd.pdf][pdf]]) +[[file:figs/huddle_test_4qd.png]] + +** Power Spectral Density #+begin_src matlab - [psd_Vph, f] = pwelch(Vph, hanning(ceil(1*fs)), [], [], fs); - [psd_Vpv, ~] = pwelch(Vpv, hanning(ceil(1*fs)), [], [], fs); + win = hanning(ceil(1*fs)); +#+end_src + +#+begin_src matlab + [psd_Va1, f] = pwelch(ht_1.Va, win, [], [], fs); + [psd_Va2, ~] = pwelch(ht_2.Va, win, [], [], fs); + [psd_Va3, ~] = pwelch(ht_3.Va, win, [], [], fs); + [psd_Va4, ~] = pwelch(ht_4.Va, win, [], [], fs); +#+end_src + +#+begin_src matlab + [psd_Vph1, ~] = pwelch(ht_1.Vph, win, [], [], fs); + [psd_Vph2, ~] = pwelch(ht_2.Vph, win, [], [], fs); + [psd_Vph3, ~] = pwelch(ht_3.Vph, win, [], [], fs); + [psd_Vph4, ~] = pwelch(ht_4.Vph, win, [], [], fs); +#+end_src + +#+begin_src matlab + [psd_Vpv1, ~] = pwelch(ht_1.Vpv, win, [], [], fs); + [psd_Vpv2, ~] = pwelch(ht_2.Vpv, win, [], [], fs); + [psd_Vpv3, ~] = pwelch(ht_3.Vpv, win, [], [], fs); + [psd_Vpv4, ~] = pwelch(ht_4.Vpv, win, [], [], fs); #+end_src #+begin_src matlab :exports none figure; hold on; - plot(f, sqrt(psd_Vph), 'DisplayName', '$\Gamma_{Vp_h}$'); - plot(f, sqrt(psd_Vpv), 'DisplayName', '$\Gamma_{Vp_v}$'); + plot(f, sqrt(psd_Va1), 'DisplayName', 'OL'); + plot(f, sqrt(psd_Va2), 'DisplayName', 'OL + CU'); + plot(f, sqrt(psd_Va3), 'DisplayName', 'CL + CU'); + plot(f, sqrt(psd_Va4), 'DisplayName', 'OL + CU + AL'); hold off; set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); - xlabel('Frequency [Hz]'); ylabel('ASD $\left[\frac{V}{\sqrt{Hz}}\right]$') - legend('Location', 'southwest'); + xlabel('Frequency [Hz]'); + ylabel('ASD $\left[\frac{m}{\sqrt{Hz}}\right]$'); + legend('location', 'northeast'); xlim([1, 1000]); #+end_src -#+begin_src matlab :exports none - figure; - hold on; - plot(t, Vch, 'DisplayName', '$Vc_h$'); - plot(t, Vcv, 'DisplayName', '$Vc_v$'); - hold off; - xlabel('Time [s]'); - ylabel('Amplitude [V]'); - xlim([t(1), t(end)]); - legend(); +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/huddle_test_psd_va.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> #+end_src -We compute the Power Spectral Density of the voltage across the inductance used for horizontal and vertical positioning of the Cercalo. -#+begin_src matlab - [psd_Vch, f] = pwelch(Vch, hanning(ceil(1*fs)), [], [], fs); - [psd_Vcv, ~] = pwelch(Vcv, hanning(ceil(1*fs)), [], [], fs); -#+end_src +#+NAME: fig:huddle_test_psd_va +#+CAPTION: PSD of the Interferometer measurement during Huddle tests ([[./figs/huddle_test_psd_va.png][png]], [[./figs/huddle_test_psd_va.pdf][pdf]]) +[[file:figs/huddle_test_psd_va.png]] + #+begin_src matlab :exports none figure; hold on; - plot(f, sqrt(psd_Vch), 'DisplayName', '$\Gamma_{Vc_h}$'); - plot(f, sqrt(psd_Vcv), 'DisplayName', '$\Gamma_{Vc_v}$'); + plot(f, sqrt(psd_Vph1), 'DisplayName', 'OL'); + plot(f, sqrt(psd_Vph2), 'DisplayName', 'OL + CU'); + plot(f, sqrt(psd_Vph3), 'DisplayName', 'CL + CU'); + plot(f, sqrt(psd_Vph4), 'DisplayName', 'OL + CU + AL'); hold off; set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); - xlabel('Frequency [Hz]'); ylabel('ASD $\left[\frac{V}{\sqrt{Hz}}\right]$') - legend('Location', 'southwest'); + xlabel('Frequency [Hz]'); + ylabel('ASD $\left[\frac{m}{\sqrt{Hz}}\right]$'); + legend('location', 'northeast'); xlim([1, 1000]); #+end_src +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/huddle_test_4qd_psd.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:huddle_test_4qd_psd +#+CAPTION: PSD of the 4QD signal during Huddle tests ([[./figs/huddle_test_4qd_psd.png][png]], [[./figs/huddle_test_4qd_psd.pdf][pdf]]) +[[file:figs/huddle_test_4qd_psd.png]] + + +** Conclusion +The Attocube's "Environmental Compensation Unit" does not have a significant effect on the stability of the measurement. + * Budget Error <> - ** Introduction :ignore: *Goals*: - List all sources of error and compute their effects on the Attocube measurement @@ -2039,7 +2117,7 @@ The geometrical parameters of the setup are defined below. #+end_src #+NAME: fig:angle_error_schematic_cercalo -#+CAPTION: Caption +#+CAPTION: Schematic of the geometry used to evaluate the effect of $\delta \theta_c$ on the measured distance $\delta L$ #+RESULTS: [[file:figs/angle_error_schematic_cercalo.png]] @@ -2554,16 +2632,21 @@ This corresponds to a measurement error of the Attocube equals to (in [m]) #+end_important * Plant Scaling -| | 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$] | | +<> +** Introduction :ignore: +The goal is the scale the plant prior to control synthesis. +This will simplify the choice of weighting functions and will yield useful insight on the controllability of the plant. -** General Configuration +#+name: tab:plant_scaling_values +#+caption: Maximum wanted values for various signals +| | Value | Unit | Variable Name | +|------------------------+-------+-------------+---------------| +| 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$] | | -* Control Objective +** 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$. @@ -2576,8 +2659,17 @@ Thus, we require the sensitivity function at $\omega_0 = 1\text{ Hz}$: In terms of loop gain, this is equivalent to: \[ |L(j\omega_0)| > 5 \cdot 10^{3} \] +** General Configuration +The plant is put in a general configuration as shown in Fig. [[fig:general_control_names]]. + +#+name: fig:general_control_names +#+caption: General Control Configuration +[[file:figs/general_control_names.png]] + * Plant Analysis -** Matlab Init :noexport:ignore: +<> +** 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) <> #+end_src @@ -2629,17 +2721,90 @@ In terms of loop gain, this is equivalent to: G0 = freqresp(G, 0); #+end_src +* Active Damping +:PROPERTIES: +:header-args:matlab+: :tangle matlab/active_damping.m +:header-args:matlab+: :comments org :mkdirp yes +:END: +<> +** 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) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +#+begin_src matlab + freqs = logspace(1, 3, 1000); +#+end_src + +** Load Plant +#+begin_src matlab + load('mat/plant.mat', 'sys', 'Gi', 'Zc', 'Ga', 'Gc', 'Gn', 'Gd'); +#+end_src + +** Integral Force Feedback +#+begin_src matlab + bode(sys({'Vch', 'Vcv'}, {'Uch', 'Ucv'})); +#+end_src + +#+begin_src matlab + Kppf = blkdiag(-10000/s, tf(0)); + + Kppf.InputName = {'Vch', 'Vcv'}; + Kppf.OutputName = {'Uch', 'Ucv'}; +#+end_src + +#+begin_src matlab :exports none + figure; + % Magnitude + ax1 = subaxis(2,1,1); + hold on; + plot(freqs, abs(squeeze(freqresp(G, freqs, 'Hz'))), 'k-'); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + ylabel('Magnitude [dB]'); + hold off; + + % Phase + ax2 = subaxis(2,1,2); + hold on; + plot(freqs, 180/pi*angle(squeeze(freqresp(G, freqs, 'Hz'))), 'k-'); + set(gca,'xscale','log'); + yticks(-360:90:180); + ylim([-360 0]); + xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); + hold off; + + linkaxes([ax1,ax2],'x'); + xlim([freqs(1), freqs(end)]); +#+end_src + +#+begin_src matlab + inputs = {'Uch', 'Ucv', 'Unh', 'Unv'}; + outputs = {'Ich', 'Icv', 'Rh', 'Rv', 'Vph', 'Vpv'}; + + sys_cl = connect(sys, Kppf, inputs, outputs); + + figure; bode(sys_cl({'Vph', 'Vpv'}, {'Uch', 'Ucv'}), sys({'Vph', 'Vpv'}, {'Uch', 'Ucv'})) +#+end_src + +** Conclusion +Active damping does not seems to be applicable here. + * Decentralized Control of the Cercalo :PROPERTIES: :header-args:matlab+: :tangle matlab/decentralized_control.m :header-args:matlab+: :comments org :mkdirp yes :END: <> - ** Introduction :ignore: In this section, we try to implement a simple decentralized controller. -** ZIP file containing the data and matlab files :ignore: +** ZIP file containing the data and matlab files :ignore: #+begin_src bash :exports none :results none if [ matlab/decentralized_control.m -nt data/decentralized_control.zip ]; then cp matlab/decentralized_control.m decentralized_control.m; @@ -2767,6 +2932,7 @@ The diagonal controller is accessible [[./mat/K_diag.mat][here]]. #+end_src * Newport Control +<> ** Introduction :ignore: In this section, we try to implement a simple decentralized controller for the Newport. This can be used to align the 4QD: @@ -2843,6 +3009,7 @@ The controllers can be downloaded [[./mat/K_newport.mat][here]]. #+end_src * Measurement of the non-repeatability +<> ** Introduction :ignore: - Explanation of the procedure