diff --git a/dcm-simscape-model.html b/dcm-simscape-model.html new file mode 100644 index 0000000..eb9e5f3 --- /dev/null +++ b/dcm-simscape-model.html @@ -0,0 +1,2134 @@ + + + + + + +ESRF Double Crystal Monochromator - Dynamical Multi-Body Model + + + + + + + + +
+ UP + | + HOME +
+

ESRF Double Crystal Monochromator - Dynamical Multi-Body Model

+
+

Table of Contents

+ +
+
+

This report is also available as a pdf.

+
+ +

+In this document, a Simscape (.e.g. multi-body) model of the ESRF Double Crystal Monochromator (DCM) is presented and used to develop and optimize the control strategy. +

+ +

+It is structured as follow: +

+ + +
+

1. System Kinematics

+
+

+ +

+
+ +
+

1.1. Bragg Angle

+
+

+There is a simple relation eq:bragg_angle_formula between: +

+
    +
  • \(d_{\text{off}}\) is the wanted offset between the incident x-ray and the output x-ray
  • +
  • \(\theta_b\) is the bragg angle
  • +
  • \(d_z\) is the corresponding distance between the first and second crystals
  • +
+ +\begin{equation} \label{eq:bragg_angle_formula} +d_z = \frac{d_{\text{off}}}{2 \cos \theta_b} +\end{equation} + +

+This relation is shown in Figure 1. +

+ + +
+

jack_motion_bragg_angle.png +

+

Figure 1: Jack motion as a function of Bragg angle

+
+ +

+The required jack stroke is approximately 25mm. +

+ +
+
%% Required Jack stroke
+ans = 1e3*(dz(end) - dz(1))
+
+
+ +
+24.963
+
+
+
+ +
+

1.2. Kinematics (311 Crystal)

+
+

+The reference frame is taken at the center of the 311 second crystal. +

+
+ +
+

1.2.1. Interferometers - 311 secondary Crystal

+
+

+Three interferometers are pointed to the bottom surface of the 311 crystal. +

+ +

+The position of the measurement points are shown in Figure 2 as well as the origin where the motion of the crystal is computed. +

+ + +
+

sensor_311_crystal_points.png +

+

Figure 2: Bottom view of the second crystal 311. Position of the measurement points.

+
+ +

+The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure 3): +

+\begin{equation} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} += +\bm{J}_{s,311} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} +\end{equation} + + +
+

schematic_sensor_jacobian_inverse_kinematics_311.png +

+

Figure 3: Inverse Kinematics - Interferometers

+
+ + +

+From the Figure 2, the inverse kinematics can be solved as follow (for small motion): +

+\begin{equation} +\bm{J}_{s,311} += +\begin{bmatrix} +1 & 0.07 & -0.015 \\ +1 & 0 & 0.015 \\ +1 & -0.07 & -0.015 +\end{bmatrix} +\end{equation} + +
+
%% Sensor Jacobian matrix for 311 crystal
+J_s_311 = [1,  0.07, -0.015
+           1,  0,     0.015
+           1, -0.07, -0.015];
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 1: Sensor Jacobian \(\bm{J}_{s,311}\)
1.00.07-0.015
1.00.00.015
1.0-0.07-0.015
+ +

+The forward kinematics is solved by inverting the Jacobian matrix (see Figure 4). +

+\begin{equation} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} += +\bm{J}_{s,311}^{-1} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} +\end{equation} + + +
+

schematic_sensor_jacobian_forward_kinematics_311.png +

+

Figure 4: Forward Kinematics - Interferometers

+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 2: Inverse of the sensor Jacobian \(\bm{J}_{s,311}^{-1}\)
0.250.50.25
7.140.0-7.14
-16.6733.33-16.67
+
+
+ +
+

1.2.2. Interferometers - 311 primary Crystal

+
+

+Three interferometers are pointed to the bottom surface of the 311 crystal. +

+ +

+The position of the measurement points are shown in Figure 5 as well as the origin where the motion of the crystal is computed. +

+ + +
+

sensor_311_crystal_points_primary.png +

+

Figure 5: Top view of the primary crystal 311. Position of the measurement points.

+
+ +

+The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure 3): +

+\begin{equation} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} += +\bm{J}_{s,311} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} +\end{equation} + + +
+

schematic_sensor_jacobian_inverse_kinematics_311.png +

+

Figure 6: Inverse Kinematics - Interferometers

+
+ + +

+From the Figure 2, the inverse kinematics can be solved as follow (for small motion): +

+\begin{equation} +\bm{J}_{s,311} += +\begin{bmatrix} +-1 & -0.07 & 0.015 \\ +-1 & 0 & -0.015 \\ +-1 & 0.07 & 0.015 +\end{bmatrix} +\end{equation} + +
+
%% Sensor Jacobian matrix for 311 crystal
+J_s_311_1 = [-1,  0.07, -0.015
+             -1,  0,     0.015
+             -1, -0.07, -0.015];
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 3: Sensor Jacobian - Primary Crystal - \(\bm{J}_{s,311}\)
-1.00.07-0.015
-1.00.00.015
-1.0-0.07-0.015
+ +

+The forward kinematics is solved by inverting the Jacobian matrix (see Figure 4). +

+\begin{equation} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} += +\bm{J}_{s,311}^{-1} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} +\end{equation} + + +
+

schematic_sensor_jacobian_forward_kinematics_311.png +

+

Figure 7: Forward Kinematics - Interferometers

+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 4: Inverse of the sensor Jacobian \(\bm{J}_{s,311}^{-1}\)
-0.25-0.5-0.25
7.140.0-7.14
-16.6733.33-16.67
+
+
+ +
+

1.2.3. Piezo - 311 Crystal

+
+

+The location of the actuators with respect with the center of the 311 second crystal are shown in Figure 8. +

+ + +
+

actuator_jacobian_311_points.png +

+

Figure 8: Location of actuators with respect to the center of the 311 second crystal (bottom view)

+
+ +

+Inverse Kinematics consist of deriving the axial (z) motion of the 3 actuators from the motion of the crystal’s center. +

+\begin{equation} +\begin{bmatrix} +d_{u_r} \\ d_{u_h} \\ d_{d} +\end{bmatrix} += +\bm{J}_{a,311} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} +\end{equation} + + +
+

schematic_actuator_jacobian_inverse_kinematics_311.png +

+

Figure 9: Inverse Kinematics - Actuators

+
+ +

+Based on the geometry in Figure 8, we obtain: +

+\begin{equation} +\bm{J}_{a,311} += +\begin{bmatrix} +1 & 0.14 & -0.1525 \\ +1 & 0.14 & 0.0675 \\ +1 & -0.14 & -0.0425 +\end{bmatrix} +\end{equation} + +
+
%% Actuator Jacobian - 311 crystal
+J_a_311 = [1,  0.14, -0.1525
+           1,  0.14,  0.0675
+           1, -0.14, -0.0425];
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 5: Actuator Jacobian \(\bm{J}_{a,311}\)
1.00.14-0.1525
1.00.140.0675
1.0-0.14-0.0425
+ +

+The forward Kinematics is solved by inverting the Jacobian matrix: +

+\begin{equation} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} += +\bm{J}_{a,311}^{-1} +\begin{bmatrix} +d_{u_r} \\ d_{u_h} \\ d_{d} +\end{bmatrix} +\end{equation} + + +
+

schematic_actuator_jacobian_forward_kinematics_311.png +

+

Figure 10: Forward Kinematics - Actuators for 311 crystal

+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 6: Inverse of the actuator Jacobian \(\bm{J}_{a,311}^{-1}\)
0.05680.44320.5
1.78571.7857-3.5714
-4.54554.54550.0
+
+
+
+ +
+

1.3. Kinematics (111 Crystal)

+
+

+The reference frame is taken at the center of the 111 second crystal. +

+
+ +
+

1.3.1. Interferometers - 111 secondary Crystal

+
+

+Three interferometers are pointed to the bottom surface of the 111 crystal. +

+ +

+The position of the measurement points are shown in Figure 11 as well as the origin where the motion of the crystal is computed. +

+ + +
+

sensor_111_crystal_points.png +

+

Figure 11: Bottom view of the second crystal 111. Position of the measurement points.

+
+ +

+The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure 12): +

+\begin{equation} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} += +\bm{J}_{s,111} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} +\end{equation} + + +
+

schematic_sensor_jacobian_inverse_kinematics_111.png +

+

Figure 12: Inverse Kinematics - Interferometers

+
+ + +

+From the Figure 11, the inverse kinematics can be solved as follow (for small motion): +

+\begin{equation} +\bm{J}_{s,111} += +\begin{bmatrix} +1 & 0.07 & 0.015 \\ +1 & 0 & -0.015 \\ +1 & -0.07 & 0.015 +\end{bmatrix} +\end{equation} + +
+
%% Sensor Jacobian matrix for 111 crystal
+J_s_111 = [1,  0.07,  0.015
+           1,  0,    -0.015
+           1, -0.07,  0.015];
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 7: Sensor Jacobian \(\bm{J}_{s,111}\)
1.00.070.015
1.00.0-0.015
1.0-0.070.015
+ +

+The forward kinematics is solved by inverting the Jacobian matrix (see Figure 13). +

+\begin{equation} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} += +\bm{J}_{s,111}^{-1} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} +\end{equation} + + +
+

schematic_sensor_jacobian_forward_kinematics_111.png +

+

Figure 13: Forward Kinematics - Interferometers

+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 8: Inverse of the sensor Jacobian \(\bm{J}_{s,111}^{-1}\)
0.250.50.25
7.140.0-7.14
16.67-33.3316.67
+
+
+ +
+

1.3.2. Interferometers - 111 primary Crystal

+
+

+Three interferometers are pointed to the bottom surface of the 111 crystal. +

+ +

+The position of the measurement points are shown in Figure 14 as well as the origin where the motion of the crystal is computed. +

+ + +
+

sensor_111_crystal_points_primary.png +

+

Figure 14: Top view of the primary crystal 111. Position of the measurement points.

+
+ +

+The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure 12): +

+\begin{equation} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} += +\bm{J}_{s,111} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} +\end{equation} + + +
+

schematic_sensor_jacobian_inverse_kinematics_111.png +

+

Figure 15: Inverse Kinematics - Interferometers

+
+ + +

+From the Figure 11, the inverse kinematics can be solved as follow (for small motion): +

+\begin{equation} +\bm{J}_{s,111} += +\begin{bmatrix} +1 & -0.036 & -0.015 \\ +1 & 0 & 0.015 \\ +1 & 0.036 & -0.015 +\end{bmatrix} +\end{equation} + +
+
%% Sensor Jacobian matrix for 111 crystal
+J_s_111_1 = [-1, -0.036, -0.015
+             -1,  0,     0.015
+             -1,  0.036, -0.015];
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 9: Sensor Jacobian \(\bm{J}_{s,111}\)
-1.0-0.036-0.015
-1.00.00.015
-1.00.036-0.015
+ +

+The forward kinematics is solved by inverting the Jacobian matrix (see Figure 13). +

+\begin{equation} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} += +\bm{J}_{s,111}^{-1} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} +\end{equation} + + +
+

schematic_sensor_jacobian_forward_kinematics_111.png +

+

Figure 16: Forward Kinematics - Interferometers

+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 10: Inverse of the sensor Jacobian \(\bm{J}_{s,111}^{-1}\)
-0.25-0.5-0.25
-13.890.013.89
-16.6733.33-16.67
+
+
+ +
+

1.3.3. Piezo - 111 Crystal

+
+

+The location of the actuators with respect with the center of the 111 second crystal are shown in Figure 17. +

+ + +
+

actuator_jacobian_111_points.png +

+

Figure 17: Location of actuators with respect to the center of the 111 second crystal (bottom view)

+
+ +

+Inverse Kinematics consist of deriving the axial (z) motion of the 3 actuators from the motion of the crystal’s center. +

+\begin{equation} +\begin{bmatrix} +d_{u_r} \\ d_{u_h} \\ d_{d} +\end{bmatrix} += +\bm{J}_{a,111} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} +\end{equation} + + +
+

schematic_actuator_jacobian_inverse_kinematics_111.png +

+

Figure 18: Inverse Kinematics - Actuators

+
+ +

+Based on the geometry in Figure 17, we obtain: +

+\begin{equation} +\bm{J}_{a,111} += +\begin{bmatrix} +1 & 0.14 & -0.0675 \\ +1 & 0.14 & 0.1525 \\ +1 & -0.14 & 0.0425 +\end{bmatrix} +\end{equation} + +
+
%% Actuator Jacobian - 111 crystal
+J_a_111 = [1,  0.14, -0.0675
+           1,  0.14,  0.1525
+           1, -0.14,  0.0425];
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 11: Actuator Jacobian \(\bm{J}_{a,111}\)
1.00.14-0.1525
1.00.140.0675
1.0-0.140.0425
+ +

+The forward Kinematics is solved by inverting the Jacobian matrix: +

+\begin{equation} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} += +\bm{J}_{a,111}^{-1} +\begin{bmatrix} +d_{u_r} \\ d_{u_h} \\ d_{d} +\end{bmatrix} +\end{equation} + + +
+

schematic_actuator_jacobian_forward_kinematics_111.png +

+

Figure 19: Forward Kinematics - Actuators for 111 crystal

+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 12: Inverse of the actuator Jacobian \(\bm{J}_{a,111}^{-1}\)
0.250.250.5
0.40583.1656-3.5714
-4.54554.54550.0
+
+
+
+ +
+

1.4. Kinematics (Metrology Frame)

+
+ +
+

jacobian_metrology_frame.png +

+

Figure 20: Top View - Top metrology frame

+
+ +
+
%% Sensor Jacobian matrix for 111 crystal
+J_m = [1,  0.102,  0
+       1, -0.088,  0.1275
+       1, -0.088, -0.1275];
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
1.00.1020.0
1.0-0.0880.1275
1.0-0.088-0.1275
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
0.4630.2680.268
5.263-2.632-2.632
0.03.922-3.922
+
+
+ +
+

1.5. Verification

+
+
+
mdl = 'coordinate_transform';
+
+%% Input/Output definition
+clear io; io_i = 1;
+
+%% Inputs
+io(io_i) = linio([mdl, '/interferometers'], 1, 'openinput');  io_i = io_i + 1;
+
+%% Outputs
+io(io_i) = linio([mdl, '/xtal_111'], 1, 'openoutput'); io_i = io_i + 1;
+
+
+ +
+
%% Extraction of the dynamics
+G_311 = linearize(mdl, io);
+G_311 = G_311(:,[1 2 3 7 8 9 13 14 15]);
+
+
+ +
+
mdl = 'coordinate_transform';
+
+%% Input/Output definition
+clear io; io_i = 1;
+
+%% Inputs
+io(io_i) = linio([mdl, '/interferometers'], 1, 'openinput');  io_i = io_i + 1;
+
+%% Outputs
+io(io_i) = linio([mdl, '/xtal_111'], 1, 'openoutput'); io_i = io_i + 1;
+
+
+ +
+
G_111 = linearize(mdl, io);
+G_111 = G_111(:,[4 5 6 10 11 12 13 14 15]);
+
+
+ +
+
%% Sensor Jacobian matrix for 1st 111 crystal
+J_s_111_1 = [-1, -0.036, -0.015
+             -1,  0,      0.015
+             -1,  0.036, -0.015];
+
+
+ +
+
%% Sensor Jacobian matrix for 2nd 111 crystal
+J_s_111_2 = [1,  0.07,  0.015
+             1,  0,    -0.015
+             1, -0.07,  0.015];
+
+
+ +
+
%% Sensor Jacobian matrix for 111 crystal
+J_m = [1,  0.102,  0
+       1, -0.088,  0.1275
+       1, -0.088, -0.1275];
+
+
+ +
+
G_111_t = [-inv(J_s_111_1), inv(J_s_111_2), -inv(J_m)]
+G_111_t(1,:) = -G_111_t(1,:);
+
+
+ + + + +++ ++ ++ ++ ++ ++ ++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-0.25-0.5-0.25-0.25-0.5-0.250.4630.2680.268
13.8890.0-13.8897.1430.0-7.143-5.2632.6322.632
16.667-33.33316.66716.667-33.33316.6670.0-3.9223.922
+ + + + +++ ++ ++ ++ ++ ++ ++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-0.25-0.5-0.25-0.25-0.5-0.250.3330.3330.333
13.8890.0-13.8897.1430.0-7.143-5.2632.6322.632
16.667-33.33316.66716.667-33.33316.6670.0-3.9223.922
+
+
+ + + +
+

1.6. Save Kinematics

+
+
+
save('mat/dcm_kinematics.mat', 'J_a_311', 'J_s_311', 'J_a_111', 'J_s_111')
+
+
+
+
+
+ +
+

2. Open Loop System Identification

+
+

+ +

+
+
+

2.1. Identification

+
+

+Let’s considered the system \(\bm{G}(s)\) with: +

+
    +
  • 3 inputs: force applied to the 3 fast jacks
  • +
  • 3 outputs: measured displacement by the 3 interferometers pointing at the 111 second crystal
  • +
+ +

+It is schematically shown in Figure 21. +

+ + +
+

schematic_system_inputs_outputs.png +

+

Figure 21: Dynamical system with inputs and outputs

+
+ +

+The system is identified from the Simscape model. +

+ +
+
%% Input/Output definition
+clear io; io_i = 1;
+
+%% Inputs
+% Control Input {3x1} [N]
+io(io_i) = linio([mdl, '/control_system'], 1, 'openinput');  io_i = io_i + 1;
+
+%% Outputs
+% Interferometers {3x1} [m]
+io(io_i) = linio([mdl, '/DCM'], 1, 'openoutput'); io_i = io_i + 1;
+
+
+ +
+
%% Extraction of the dynamics
+G = linearize(mdl, io);
+
+
+ +
+
size(G)
+
+
+ +
+size(G)
+State-space model with 3 outputs, 3 inputs, and 24 states.
+
+
+
+ +
+

2.2. Plant in the frame of the fastjacks

+
+
+
load('dcm_kinematics.mat');
+
+
+ +

+Using the forward and inverse kinematics, we can computed the dynamics from piezo forces to axial motion of the 3 fastjacks (see Figure 22). +

+ + +
+

schematic_jacobian_frame_fastjack.png +

+

Figure 22: Use of Jacobian matrices to obtain the system in the frame of the fastjacks

+
+ + +
+
%% Compute the system in the frame of the fastjacks
+G_pz = J_a_311*inv(J_s_311)*G;
+
+
+ +

+The DC gain of the new system shows that the system is well decoupled at low frequency. +

+
+
dcgain(G_pz)
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
Table 13: DC gain of the plant in the frame of the fast jacks \(\bm{G}_{\text{fj}}\)
4.4407e-092.7656e-121.0132e-12
2.7656e-124.4407e-091.0132e-12
1.0109e-121.0109e-124.4424e-09
+ +

+The bode plot of \(\bm{G}_{\text{fj}}(s)\) is shown in Figure 23. +

+ +
+
G_pz = diag(1./diag(dcgain(G_pz)))*G_pz;
+
+
+ + +
+

bode_plot_plant_fj.png +

+

Figure 23: Bode plot of the diagonal and off-diagonal elements of the plant in the frame of the fast jacks

+
+ +
+

+Computing the system in the frame of the fastjack gives good decoupling at low frequency (until the first resonance of the system). +

+ +
+
+
+ +
+

2.3. Plant in the frame of the crystal

+
+ +
+

schematic_jacobian_frame_crystal.png +

+

Figure 24: Use of Jacobian matrices to obtain the system in the frame of the crystal

+
+ +
+
G_mr = inv(J_s_111)*G*inv(J_a_111');
+
+
+ +
+
dcgain(G_mr)
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
1.9978e-093.9657e-097.7944e-09
3.9656e-098.4979e-08-1.5135e-17
7.7944e-09-3.9252e-171.834e-07
+ +

+This results in a coupled system. +The main reason is that, as we map forces to the center of the 111 crystal and not at the center of mass/stiffness of the moving part, vertical forces will induce rotation and torques will induce vertical motion. +

+
+
+
+ +
+

3. Open-Loop Noise Budgeting

+
+

+ +

+ +
+

noise_budget_dcm_schematic_fast_jack_frame.png +

+

Figure 25: Schematic representation of the control loop in the frame of one fast jack

+
+
+ +
+

3.1. Power Spectral Density of signals

+
+

+Interferometer noise: +

+
+
Wn = 6e-11*(1 + s/2/pi/200)/(1 + s/2/pi/60); % m/sqrt(Hz)
+
+
+ +
+Measurement noise: 0.79 [nm,rms]
+
+ + +

+DAC noise (amplified by the PI voltage amplifier, and converted to newtons): +

+
+
Wdac = tf(3e-8); % V/sqrt(Hz)
+Wu = Wdac*22.5*10; % N/sqrt(Hz)
+
+
+ +
+DAC noise: 0.95 [uV,rms]
+
+ + +

+Disturbances: +

+
+
Wd = 5e-7/(1 + s/2/pi); % m/sqrt(Hz)
+
+
+ +
+Disturbance motion: 0.61 [um,rms]
+
+ + +
+
%% Save ASD of noise and disturbances
+save('mat/asd_noises_disturbances.mat', 'Wn', 'Wu', 'Wd');
+
+
+
+
+ +
+

3.2. Open Loop disturbance and measurement noise

+
+

+The comparison of the amplitude spectral density of the measurement noise and of the jack parasitic motion is performed in Figure 26. +It confirms that the sensor noise is low enough to measure the motion errors of the crystal. +

+ + +
+

open_loop_noise_budget_fast_jack.png +

+

Figure 26: Open Loop noise budgeting

+
+
+
+
+ +
+

4. Active Damping Plant (Strain gauges)

+
+

+ +

+

+In this section, we wish to see whether if strain gauges fixed to the piezoelectric actuator can be used for active damping. +

+
+
+

4.1. Identification

+
+
+
%% Input/Output definition
+clear io; io_i = 1;
+
+%% Inputs
+% Control Input {3x1} [N]
+io(io_i) = linio([mdl, '/control_system'], 1, 'openinput');  io_i = io_i + 1;
+
+%% Outputs
+% Strain Gauges {3x1} [m]
+io(io_i) = linio([mdl, '/DCM'], 2, 'openoutput'); io_i = io_i + 1;
+
+
+ +
+
%% Extraction of the dynamics
+G_sg = linearize(mdl, io);
+
+
+ +
+
dcgain(G_sg)
+
+
+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + +
4.4443e-091.0339e-133.774e-14
1.0339e-134.4443e-093.774e-14
3.7792e-143.7792e-144.4444e-09
+ + +
+

strain_gauge_plant_bode_plot.png +

+

Figure 27: Bode Plot of the transfer functions from piezoelectric forces to strain gauges measuremed displacements

+
+ +
+

+As the distance between the poles and zeros in Figure 30 is very small, little damping can be actively added using the strain gauges. +This will be confirmed using a Root Locus plot. +

+ +
+
+
+ +
+

4.2. Relative Active Damping

+
+
+
Krad_g1 = eye(3)*s/(s^2/(2*pi*500)^2 + 2*s/(2*pi*500) + 1);
+
+
+ +

+As can be seen in Figure 28, very little damping can be added using relative damping strategy using strain gauges. +

+ + +
+

relative_damping_root_locus.png +

+

Figure 28: Root Locus for the relative damping control

+
+ +
+
Krad = -g*Krad_g1;
+
+
+
+
+ +
+

4.3. Damped Plant

+
+

+The controller is implemented on Simscape, and the damped plant is identified. +

+ +
+
%% Input/Output definition
+clear io; io_i = 1;
+
+%% Inputs
+% Control Input {3x1} [N]
+io(io_i) = linio([mdl, '/control_system'], 1, 'input');  io_i = io_i + 1;
+
+%% Outputs
+% Force Sensor {3x1} [m]
+io(io_i) = linio([mdl, '/DCM'], 1, 'openoutput'); io_i = io_i + 1;
+
+
+ +
+
%% DCM Kinematics
+load('dcm_kinematics.mat');
+
+
+ +
+
%% Identification of the Open Loop plant
+controller.type = 0; % Open Loop
+G_ol = J_a_111*inv(J_s_111)*linearize(mdl, io);
+G_ol.InputName  = {'u_ur',  'u_uh',  'u_d'};
+G_ol.OutputName = {'d_ur',  'd_uh',  'd_d'};
+
+
+ +
+
%% Identification of the damped plant with Relative Active Damping
+controller.type = 2; % RAD
+G_dp = J_a_111*inv(J_s_111)*linearize(mdl, io);
+G_dp.InputName  = {'u_ur',  'u_uh',  'u_d'};
+G_dp.OutputName = {'d_ur',  'd_uh',  'd_d'};
+
+
+ + +
+

comp_damp_undamped_plant_rad_bode_plot.png +

+

Figure 29: Bode plot of both the open-loop plant and the damped plant using relative active damping

+
+
+
+
+ +
+

5. Active Damping Plant (Force Sensors)

+
+

+ +

+

+Force sensors are added above the piezoelectric actuators. +They can consists of a simple piezoelectric ceramic stack. +See for instance fleming10_integ_strain_force_feedb_high. +

+
+
+

5.1. Identification

+
+
+
%% Input/Output definition
+clear io; io_i = 1;
+
+%% Inputs
+% Control Input {3x1} [N]
+io(io_i) = linio([mdl, '/control_system'], 1, 'openinput');  io_i = io_i + 1;
+
+%% Outputs
+% Force Sensor {3x1} [m]
+io(io_i) = linio([mdl, '/DCM'], 3, 'openoutput'); io_i = io_i + 1;
+
+
+ +
+
%% Extraction of the dynamics
+G_fs = linearize(mdl, io);
+
+
+ +

+The Bode plot of the identified dynamics is shown in Figure 30. +At high frequency, the diagonal terms are constants while the off-diagonal terms have some roll-off. +

+ + +
+

iff_plant_bode_plot.png +

+

Figure 30: Bode plot of IFF Plant

+
+
+
+ +
+

5.2. Controller - Root Locus

+
+

+We want to have integral action around the resonances of the system, but we do not want to integrate at low frequency. +Therefore, we can use a low pass filter. +

+ +
+
%% Integral Force Feedback Controller
+Kiff_g1 = eye(3)*1/(1 + s/2/pi/20);
+
+
+ + +
+

iff_root_locus.png +

+

Figure 31: Root Locus plot for the IFF Control strategy

+
+ +
+
%% Integral Force Feedback Controller with optimal gain
+Kiff = g*Kiff_g1;
+
+
+ +
+
%% Save the IFF controller
+save('mat/Kiff.mat', 'Kiff');
+
+
+
+
+ +
+

5.3. Damped Plant

+
+

+Both the Open Loop dynamics (see Figure 22) and the dynamics with IFF (see Figure 32) are identified. +

+ +

+We are here interested in the dynamics from \(\bm{u}^\prime = [u_{u_r}^\prime,\ u_{u_h}^\prime,\ u_d^\prime]\) (input of the damped plant) to \(\bm{d}_{\text{fj}} = [d_{u_r},\ d_{u_h},\ d_d]\) (motion of the crystal expressed in the frame of the fast-jacks). +This is schematically represented in Figure 32. +

+ + +
+

schematic_jacobian_frame_fastjack_iff.png +

+

Figure 32: Use of Jacobian matrices to obtain the system in the frame of the fastjacks

+
+ +

+The dynamics from \(\bm{u}\) to \(\bm{d}_{\text{fj}}\) (open-loop dynamics) and from \(\bm{u}^\prime\) to \(\bm{d}_{\text{fs}}\) are compared in Figure 33. +It is clear that the Integral Force Feedback control strategy is very effective in damping the resonances of the plant. +

+ + +
+

comp_damped_undamped_plant_iff_bode_plot.png +

+

Figure 33: Bode plot of both the open-loop plant and the damped plant using IFF

+
+ +
+

+The Integral Force Feedback control strategy is very effective in damping the modes present in the plant. +

+ +
+
+
+
+ +
+

6. Feedback Control

+
+ +
+

schematic_jacobian_frame_fastjack_feedback.png +

+
+
+
+ +
+

7. HAC-LAC (IFF) architecture

+
+

+ +

+

+The HAC-LAC architecture is shown in Figure 34. +

+ + +
+

schematic_jacobian_frame_fastjack_hac_iff.png +

+

Figure 34: HAC-LAC architecture

+
+
+
+

7.1. System Identification

+
+

+Let’s identify the damped plant. +

+ + +
+

bode_plot_hac_iff_plant.png +

+

Figure 35: Bode Plot of the plant for the High Authority Controller (transfer function from \(\bm{u}^\prime\) to \(\bm{\epsilon}_d\))

+
+
+
+ +
+

7.2. High Authority Controller

+
+

+Let’s design a controller with a bandwidth of 100Hz. +As the plant is well decoupled and well approximated by a constant at low frequency, the high authority controller can easily be designed with SISO loop shaping. +

+ +
+
%% Controller design
+wc = 2*pi*100; % Wanted crossover frequency [rad/s]
+a = 2; % Lead parameter
+
+Khac = diag(1./diag(abs(evalfr(G_dp, 1j*wc)))) * ... % Diagonal controller
+        wc/s * ... % Integrator
+        1/(sqrt(a))*(1 + s/(wc/sqrt(a)))/(1 + s/(wc*sqrt(a))) * ... % Lead
+        1/(s^2/(4*wc)^2 + 2*s/(4*wc) + 1); % Low pass filter
+
+
+ +
+
%% Save the HAC controller
+save('mat/Khac_iff.mat', 'Khac');
+
+
+ +
+
%% Loop Gain
+L_hac_lac = G_dp * Khac;
+
+
+ + +
+

hac_iff_loop_gain_bode_plot.png +

+

Figure 36: Bode Plot of the Loop gain for the High Authority Controller

+
+ +

+As shown in the Root Locus plot in Figure 37, the closed loop system should be stable. +

+ + +
+

loci_hac_iff_fast_jack.png +

+

Figure 37: Root Locus for the High Authority Controller

+
+
+
+ +
+

7.3. Performances

+
+

+In order to estimate the performances of the HAC-IFF control strategy, the transfer function from motion errors of the stepper motors to the motion error of the crystal is identified both in open loop and with the HAC-IFF strategy. +

+ +

+It is first verified that the closed-loop system is stable: +

+ +
+
isstable(T_hl)
+
+
+ +
+1
+
+ + +

+And both transmissibilities are compared in Figure 38. +

+ + +
+

stepper_transmissibility_comp_ol_hac_iff.png +

+

Figure 38: Comparison of the transmissibility of errors from vibrations of the stepper motor between the open-loop case and the hac-iff case.

+
+ +
+

+The HAC-IFF control strategy can effectively reduce the transmissibility of the motion errors of the stepper motors. +This reduction is effective inside the bandwidth of the controller. +

+ +
+
+
+ +
+

7.4. Close Loop noise budget

+
+

+Let’s compute the amplitude spectral density of the jack motion errors due to the sensor noise, the actuator noise and disturbances. +

+ +
+
%% Computation of ASD of contribution of inputs to the closed-loop motion
+% Error due to disturbances
+asd_d = abs(squeeze(freqresp(Wd*(1/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
+% Error due to actuator noise
+asd_u = abs(squeeze(freqresp(Wu*(G_dp(1,1)/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
+% Error due to sensor noise
+asd_n = abs(squeeze(freqresp(Wn*(G_dp(1,1)*Khac(1,1)/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
+
+
+ +

+The closed-loop ASD is then: +

+
+
%% ASD of the closed-loop motion
+asd_cl = sqrt(asd_d.^2 + asd_u.^2 + asd_n.^2);
+
+
+ +

+The obtained ASD are shown in Figure 39. +

+ + +
+

close_loop_asd_noise_budget_hac_iff.png +

+

Figure 39: Closed Loop noise budget

+
+ +

+Let’s compare the open-loop and close-loop cases (Figure 40). +

+ +
+

cps_comp_ol_cl_hac_iff.png +

+

Figure 40: Cumulative Power Spectrum of the open-loop and closed-loop motion error along one fast-jack

+
+
+
+
+
+
+

Author: Dehaeze Thomas

+

Created: 2022-02-15 mar. 14:18

+
+ + diff --git a/dcm-simscape.org b/dcm-simscape-model.org similarity index 84% rename from dcm-simscape.org rename to dcm-simscape-model.org index 85f14db..c584057 100644 --- a/dcm-simscape.org +++ b/dcm-simscape-model.org @@ -44,7 +44,7 @@ #+begin_export html
-

This report is also available as a pdf.

+

This report is also available as a pdf.


#+end_export @@ -107,7 +107,7 @@ d_z = \frac{d_{\text{off}}}{2 \cos \theta_b} #+begin_src matlab :exports none %% Tested bragg angles -bragg = linspace(5, 80, 1000); % Bragg angle [deg] +bragg = linspace(5, 80, 5000); % Bragg angle [deg] d_off = 10.5e-3; % Wanted offset between x-rays [m] #+end_src @@ -148,7 +148,7 @@ ans = 1e3*(dz(end) - dz(1)) *** Introduction :ignore: The reference frame is taken at the center of the 311 second crystal. -*** Interferometers - 311 Crystal +*** Interferometers - 311 secondary Crystal Three interferometers are pointed to the bottom surface of the 311 crystal. @@ -284,6 +284,142 @@ data2orgtable(inv(J_s_311), {}, {}, ' %.2f '); | 7.14 | 0.0 | -7.14 | | -16.67 | 33.33 | -16.67 | +*** Interferometers - 311 primary Crystal + +Three interferometers are pointed to the bottom surface of the 311 crystal. + +The position of the measurement points are shown in Figure [[fig:sensor_311_crystal_points_primary]] as well as the origin where the motion of the crystal is computed. + +#+begin_src latex :file sensor_311_crystal_points_primary.pdf +\begin{tikzpicture} + % Crystal + \draw (-15/2, -3.5/2) rectangle (15/2, 3.5/2); + + % Measurement Points + \node[branch] (a1) at (-7, -1.5){}; + \node[branch] (a2) at ( 0, 1.5){}; + \node[branch] (a3) at ( 7, -1.5){}; + + % Labels + \node[right] at (a1) {$\mathcal{O}_1 = (-0.07, -0.015)$}; + \node[right] at (a2) {$\mathcal{O}_2 = ( 0, 0.015)$}; + \node[left] at (a3) {$\mathcal{O}_3 = ( 0.07, -0.015)$}; + + % Origin + \draw[->] (0, 0) node[] -- ++(1, 0) node[right]{$x$}; + \draw[->] (0, 0) -- ++(0, 1) node[right]{$y$}; + \draw[fill, color=black] (0, 0) circle (0.05); + + \node[left] at (0,0) {$\mathcal{O}_{311}$}; +\end{tikzpicture} +#+end_src + +#+name: fig:sensor_311_crystal_points_primary +#+caption: Top view of the primary crystal 311. Position of the measurement points. +#+RESULTS: +[[file:figs/sensor_311_crystal_points_primary.png]] + +The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure [[fig:schematic_sensor_jacobian_inverse_kinematics_311]]): +\begin{equation} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} += +\bm{J}_{s,311} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} +\end{equation} + +#+begin_src latex :file schematic_sensor_jacobian_inverse_kinematics_311.pdf +\begin{tikzpicture} + % Blocs + \node[block] (Js) {$\bm{J}_{s,311}$}; + + % Connections and labels + \draw[->] ($(Js.west)+(-1.5,0)$) node[above right]{$\begin{bmatrix} d_z \\ r_y \\ r_x \end{bmatrix}$} -- (Js.west); + \draw[->] (Js.east) -- ++(1.5, 0) node[above left]{$\begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}$}; +\end{tikzpicture} +#+end_src + +#+name: fig:schematic_sensor_jacobian_inverse_kinematics_311 +#+caption: Inverse Kinematics - Interferometers +#+RESULTS: +[[file:figs/schematic_sensor_jacobian_inverse_kinematics_311.png]] + + +From the Figure [[fig:sensor_311_crystal_points]], the inverse kinematics can be solved as follow (for small motion): +\begin{equation} +\bm{J}_{s,311} += +\begin{bmatrix} +-1 & -0.07 & 0.015 \\ +-1 & 0 & -0.015 \\ +-1 & 0.07 & 0.015 +\end{bmatrix} +\end{equation} + +#+begin_src matlab +%% Sensor Jacobian matrix for 311 crystal +J_s_311_1 = [-1, 0.07, -0.015 + -1, 0, 0.015 + -1, -0.07, -0.015]; +#+end_src + +#+begin_src matlab :exports results :results value table replace :tangle no +data2orgtable(J_s_311_1, {}, {}, ' %.3f '); +#+end_src + +#+name: tab:jacobian_sensor_311_1 +#+caption: Sensor Jacobian - Primary Crystal - $\bm{J}_{s,311}$ +#+attr_latex: :environment tabularx :width 0.3\linewidth :align ccc +#+attr_latex: :center t :booktabs t +#+RESULTS: +| -1.0 | 0.07 | -0.015 | +| -1.0 | 0.0 | 0.015 | +| -1.0 | -0.07 | -0.015 | + +The forward kinematics is solved by inverting the Jacobian matrix (see Figure [[fig:schematic_sensor_jacobian_forward_kinematics_311]]). +\begin{equation} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} += +\bm{J}_{s,311}^{-1} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} +\end{equation} + +#+begin_src latex :file schematic_sensor_jacobian_forward_kinematics_311.pdf +\begin{tikzpicture} + % Blocs + \node[block] (Js_inv) {$\bm{J}_{s,311}^{-1}$}; + + % Connections and labels + \draw[->] ($(Js_inv.west)+(-1.5,0)$) node[above right]{$\begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}$} -- (Js_inv.west); + \draw[->] (Js_inv.east) -- ++(1.5, 0) node[above left]{$\begin{bmatrix} d_z \\ r_y \\ r_x \end{bmatrix}$}; +\end{tikzpicture} +#+end_src + +#+name: fig:schematic_sensor_jacobian_forward_kinematics_311 +#+caption: Forward Kinematics - Interferometers +#+RESULTS: +[[file:figs/schematic_sensor_jacobian_forward_kinematics_311.png]] + +#+begin_src matlab :exports results :results value table replace :tangle no +data2orgtable(inv(J_s_311_1), {}, {}, ' %.2f '); +#+end_src + +#+name: tab:inverse_jacobian_sensor_311 +#+caption: Inverse of the sensor Jacobian $\bm{J}_{s,311}^{-1}$ +#+attr_latex: :environment tabularx :width 0.3\linewidth :align ccc +#+attr_latex: :center t :booktabs t +#+RESULTS: +| -0.25 | -0.5 | -0.25 | +| 7.14 | 0.0 | -7.14 | +| -16.67 | 33.33 | -16.67 | + *** Piezo - 311 Crystal The location of the actuators with respect with the center of the 311 second crystal are shown in Figure [[fig:actuator_jacobian_311_points]]. @@ -397,7 +533,7 @@ data2orgtable(inv(J_a_311), {}, {}, ' %.4f '); *** Introduction :ignore: The reference frame is taken at the center of the 111 second crystal. -*** Interferometers - 111 Crystal +*** Interferometers - 111 secondary Crystal Three interferometers are pointed to the bottom surface of the 111 crystal. @@ -533,6 +669,142 @@ data2orgtable(inv(J_s_111), {}, {}, ' %.2f '); | 7.14 | 0.0 | -7.14 | | 16.67 | -33.33 | 16.67 | +*** Interferometers - 111 primary Crystal + +Three interferometers are pointed to the bottom surface of the 111 crystal. + +The position of the measurement points are shown in Figure [[fig:sensor_111_crystal_points_primary]] as well as the origin where the motion of the crystal is computed. + +#+begin_src latex :file sensor_111_crystal_points_primary.pdf +\begin{tikzpicture} + % Crystal + \draw (-7.5/2, -3.5/2) rectangle (7.5/2, 3.5/2); + + % Measurement Points + \node[branch] (a1) at (-3.6, 1.5){}; + \node[branch] (a2) at ( 0, -1.5){}; + \node[branch] (a3) at ( 3.6, 1.5){}; + + % Labels + \node[right] at (a1) {$\mathcal{O}_1 = (-0.036, 0.015)$}; + \node[right] at (a2) {$\mathcal{O}_2 = ( 0, -0.015)$}; + \node[left] at (a3) {$\mathcal{O}_3 = ( 0.036, 0.015)$}; + + % Origin + \draw[->] (0, 0) node[] -- ++(1, 0) node[right]{$x$}; + \draw[->] (0, 0) -- ++(0, 1) node[right]{$y$}; + \draw[fill, color=black] (0, 0) circle (0.05); + + \node[left] at (0,0) {$\mathcal{O}_{111}$}; +\end{tikzpicture} +#+end_src + +#+name: fig:sensor_111_crystal_points_primary +#+caption: Top view of the primary crystal 111. Position of the measurement points. +#+RESULTS: +[[file:figs/sensor_111_crystal_points_primary.png]] + +The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure [[fig:schematic_sensor_jacobian_inverse_kinematics_111]]): +\begin{equation} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} += +\bm{J}_{s,111} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} +\end{equation} + +#+begin_src latex :file schematic_sensor_jacobian_inverse_kinematics_111.pdf +\begin{tikzpicture} + % Blocs + \node[block] (Js) {$\bm{J}_{s,111}$}; + + % Connections and labels + \draw[->] ($(Js.west)+(-1.5,0)$) node[above right]{$\begin{bmatrix} d_z \\ r_y \\ r_x \end{bmatrix}$} -- (Js.west); + \draw[->] (Js.east) -- ++(1.5, 0) node[above left]{$\begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}$}; +\end{tikzpicture} +#+end_src + +#+name: fig:schematic_sensor_jacobian_inverse_kinematics_111 +#+caption: Inverse Kinematics - Interferometers +#+RESULTS: +[[file:figs/schematic_sensor_jacobian_inverse_kinematics_111.png]] + + +From the Figure [[fig:sensor_111_crystal_points]], the inverse kinematics can be solved as follow (for small motion): +\begin{equation} +\bm{J}_{s,111} += +\begin{bmatrix} +1 & -0.036 & -0.015 \\ +1 & 0 & 0.015 \\ +1 & 0.036 & -0.015 +\end{bmatrix} +\end{equation} + +#+begin_src matlab +%% Sensor Jacobian matrix for 111 crystal +J_s_111_1 = [-1, -0.036, -0.015 + -1, 0, 0.015 + -1, 0.036, -0.015]; +#+end_src + +#+begin_src matlab :exports results :results value table replace :tangle no +data2orgtable(J_s_111_1, {}, {}, ' %.3f '); +#+end_src + +#+name: tab:jacobian_sensor_111_primary +#+caption: Sensor Jacobian $\bm{J}_{s,111}$ +#+attr_latex: :environment tabularx :width 0.3\linewidth :align ccc +#+attr_latex: :center t :booktabs t +#+RESULTS: +| -1.0 | -0.036 | -0.015 | +| -1.0 | 0.0 | 0.015 | +| -1.0 | 0.036 | -0.015 | + +The forward kinematics is solved by inverting the Jacobian matrix (see Figure [[fig:schematic_sensor_jacobian_forward_kinematics_111]]). +\begin{equation} +\begin{bmatrix} +d_z \\ r_y \\ r_x +\end{bmatrix} += +\bm{J}_{s,111}^{-1} +\begin{bmatrix} +x_1 \\ x_2 \\ x_3 +\end{bmatrix} +\end{equation} + +#+begin_src latex :file schematic_sensor_jacobian_forward_kinematics_111.pdf +\begin{tikzpicture} + % Blocs + \node[block] (Js_inv) {$\bm{J}_{s,111}^{-1}$}; + + % Connections and labels + \draw[->] ($(Js_inv.west)+(-1.5,0)$) node[above right]{$\begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}$} -- (Js_inv.west); + \draw[->] (Js_inv.east) -- ++(1.5, 0) node[above left]{$\begin{bmatrix} d_z \\ r_y \\ r_x \end{bmatrix}$}; +\end{tikzpicture} +#+end_src + +#+name: fig:schematic_sensor_jacobian_forward_kinematics_111 +#+caption: Forward Kinematics - Interferometers +#+RESULTS: +[[file:figs/schematic_sensor_jacobian_forward_kinematics_111.png]] + +#+begin_src matlab :exports results :results value table replace :tangle no +data2orgtable(inv(J_s_111_1), {}, {}, ' %.2f '); +#+end_src + +#+name: tab:inverse_jacobian_sensor_111 +#+caption: Inverse of the sensor Jacobian $\bm{J}_{s,111}^{-1}$ +#+attr_latex: :environment tabularx :width 0.3\linewidth :align ccc +#+attr_latex: :center t :booktabs t +#+RESULTS: +| -0.25 | -0.5 | -0.25 | +| -13.89 | 0.0 | 13.89 | +| -16.67 | 33.33 | -16.67 | + *** Piezo - 111 Crystal The location of the actuators with respect with the center of the 111 second crystal are shown in Figure [[fig:actuator_jacobian_111_points]]. @@ -575,16 +847,16 @@ Based on the geometry in Figure [[fig:actuator_jacobian_111_points]], we obtain: \bm{J}_{a,111} = \begin{bmatrix} -1 & 0.14 & -0.1525 \\ -1 & 0.14 & 0.0675 \\ +1 & 0.14 & -0.0675 \\ +1 & 0.14 & 0.1525 \\ 1 & -0.14 & 0.0425 \end{bmatrix} \end{equation} #+begin_src matlab %% Actuator Jacobian - 111 crystal -J_a_111 = [1, 0.14, -0.1525 - 1, 0.14, 0.0675 +J_a_111 = [1, 0.14, -0.0675 + 1, 0.14, 0.1525 1, -0.14, 0.0425]; #+end_src @@ -642,6 +914,121 @@ data2orgtable(inv(J_a_111), {}, {}, ' %.4f '); | 0.4058 | 3.1656 | -3.5714 | | -4.5455 | 4.5455 | 0.0 | +** Kinematics (Metrology Frame) + +#+name: fig:jacobian_metrology_frame +#+caption: Top View - Top metrology frame +[[file:figs/jacobian_metrology_frame.png]] + +#+begin_src matlab +%% Sensor Jacobian matrix for 111 crystal +J_m = [1, 0.102, 0 + 1, -0.088, 0.1275 + 1, -0.088, -0.1275]; +#+end_src + +#+begin_src matlab :exports results :results value table replace :tangle no +data2orgtable(J_m, {}, {}, ' %.4f '); +#+end_src + +#+RESULTS: +| 1.0 | 0.102 | 0.0 | +| 1.0 | -0.088 | 0.1275 | +| 1.0 | -0.088 | -0.1275 | + +#+begin_src matlab :exports results :results value table replace :tangle no +data2orgtable(inv(J_m), {}, {}, ' %.3f '); +#+end_src + +#+RESULTS: +| 0.463 | 0.268 | 0.268 | +| 5.263 | -2.632 | -2.632 | +| 0.0 | 3.922 | -3.922 | + +** Verification +#+begin_src matlab +mdl = 'coordinate_transform'; + +%% Input/Output definition +clear io; io_i = 1; + +%% Inputs +io(io_i) = linio([mdl, '/interferometers'], 1, 'openinput'); io_i = io_i + 1; + +%% Outputs +io(io_i) = linio([mdl, '/xtal_111'], 1, 'openoutput'); io_i = io_i + 1; +#+end_src + +#+begin_src matlab +%% Extraction of the dynamics +G_311 = linearize(mdl, io); +G_311 = G_311(:,[1 2 3 7 8 9 13 14 15]); +#+end_src + +#+begin_src matlab +mdl = 'coordinate_transform'; + +%% Input/Output definition +clear io; io_i = 1; + +%% Inputs +io(io_i) = linio([mdl, '/interferometers'], 1, 'openinput'); io_i = io_i + 1; + +%% Outputs +io(io_i) = linio([mdl, '/xtal_111'], 1, 'openoutput'); io_i = io_i + 1; +#+end_src + +#+begin_src matlab +G_111 = linearize(mdl, io); +G_111 = G_111(:,[4 5 6 10 11 12 13 14 15]); +#+end_src + +#+begin_src matlab +%% Sensor Jacobian matrix for 1st 111 crystal +J_s_111_1 = [-1, -0.036, -0.015 + -1, 0, 0.015 + -1, 0.036, -0.015]; +#+end_src + +#+begin_src matlab +%% Sensor Jacobian matrix for 2nd 111 crystal +J_s_111_2 = [1, 0.07, 0.015 + 1, 0, -0.015 + 1, -0.07, 0.015]; +#+end_src + +#+begin_src matlab +%% Sensor Jacobian matrix for 111 crystal +J_m = [1, 0.102, 0 + 1, -0.088, 0.1275 + 1, -0.088, -0.1275]; +#+end_src + +#+begin_src matlab +G_111_t = [-inv(J_s_111_1), inv(J_s_111_2), -inv(J_m)] +G_111_t(1,:) = -G_111_t(1,:); +#+end_src + +#+begin_src matlab :exports results :results value table replace :tangle no +data2orgtable(G_111_t, {}, {}, ' %.3f '); +#+end_src + +#+RESULTS: +| -0.25 | -0.5 | -0.25 | -0.25 | -0.5 | -0.25 | 0.463 | 0.268 | 0.268 | +| 13.889 | 0.0 | -13.889 | 7.143 | 0.0 | -7.143 | -5.263 | 2.632 | 2.632 | +| 16.667 | -33.333 | 16.667 | 16.667 | -33.333 | 16.667 | 0.0 | -3.922 | 3.922 | + +#+begin_src matlab :exports results :results value table replace :tangle no +data2orgtable(dcgain(G_111), {}, {}, ' %.3f '); +#+end_src + +#+RESULTS: +| -0.25 | -0.5 | -0.25 | -0.25 | -0.5 | -0.25 | 0.333 | 0.333 | 0.333 | +| 13.889 | 0.0 | -13.889 | 7.143 | 0.0 | -7.143 | -5.263 | 2.632 | 2.632 | +| 16.667 | -33.333 | 16.667 | 16.667 | -33.333 | 16.667 | 0.0 | -3.922 | 3.922 | + + + ** TODO Inputs and Outputs :noexport: Disturbances: @@ -786,7 +1173,7 @@ Using the forward and inverse kinematics, we can computed the dynamics from piez #+begin_src matlab %% Compute the system in the frame of the fastjacks -G_pz = J_a_111*inv(J_s_111)*G; +G_pz = J_a_311*inv(J_s_311)*G; #+end_src The DC gain of the new system shows that the system is well decoupled at low frequency. @@ -805,8 +1192,13 @@ dcgain(G_pz) The bode plot of $\bm{G}_{\text{fj}}(s)$ is shown in Figure [[fig:bode_plot_plant_fj]]. +#+begin_src matlab +G_pz = diag(1./diag(dcgain(G_pz)))*G_pz; +#+end_src + #+begin_src matlab :exports none %% Bode plot for the plant +freqs = logspace(0,3,1000); figure; tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); @@ -828,7 +1220,7 @@ hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 3); -ylim([1e-13, 1e-6]); +ylim([1e-2, 1e2]); ax2 = nexttile; hold on; @@ -843,11 +1235,11 @@ yticks(-360:90:360); ylim([-180, 180]); linkaxes([ax1,ax2],'x'); -xlim([freqs(1), freqs(end)]); +xlim([1, 1e3]); #+end_src #+begin_src matlab :tangle no :exports results :results file replace -exportFig('figs/bode_plot_plant_fj.pdf', 'width', 'wide', 'height', 'tall'); +exportFig('figs/bode_plot_plant_fj_pres.pdf', 'width', 'full', 'height', 'tall'); #+end_src #+name: fig:bode_plot_plant_fj @@ -1703,6 +2095,34 @@ exportFig('figs/comp_damped_undamped_plant_iff_bode_plot.pdf', 'width', 'wide', The Integral Force Feedback control strategy is very effective in damping the modes present in the plant. #+end_important +* Feedback Control + +#+begin_src latex :file schematic_jacobian_frame_fastjack_feedback.pdf +\begin{tikzpicture} + % Blocs + \node[block={1.5cm}{1.5cm}] (G) at (0,0) {$\bm{G}(s)$}; + \node[block, right=1.2 of G] (Js) {$\bm{J}_{s}^{-1}$}; + + \node[block, left=1.2 of G] (Khac) {$\bm{K}(s)$}; + \node[block, left=1.2 of Khac] (Ja) {$\bm{J}_{a}$}; + \node[addb={+}{}{}{}{-}, left=1.0 of Ja] (subL) {}; + + % Connections and labels + \draw[->] (Khac.east) -- node[midway, above]{$\begin{bmatrix} u_{u_r} \\ u_{u_h} \\ u_d \end{bmatrix}$} (G.west); + \draw[->] (G.east) -- node[midway, above]{$\begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}$} (Js.west); + \draw[->] (Js.east) -- ++(1.0, 0); + + \draw[->] ($(subL.west) + (-1.0, 0)$) -- node[midway, above]{$\begin{bmatrix} r_{d_z} \\ r_{r_y} \\ r_{r_x} \end{bmatrix}$} (subL.west); + \draw[->] (subL.east) -- node[midway, above]{$\begin{bmatrix} \epsilon_{d_z} \\ \epsilon_{r_y} \\ \epsilon_{r_x} \end{bmatrix}$} (Ja.west); + \draw[->] (Ja.east) -- node[midway, above]{$\begin{bmatrix} \epsilon_{d_{u_r}} \\ \epsilon_{d_{u_h}} \\ \epsilon_{d_d} \end{bmatrix}$} (Khac.west); + + \draw[->] ($(Js.east) + (0.6, 0)$)node[branch]{}node[above]{$\begin{bmatrix} d_z \\ r_y \\ r_x \end{bmatrix}$} -- ++(0, -1.0) -| (subL.south); +\end{tikzpicture} +#+end_src + +#+RESULTS: +[[file:figs/schematic_jacobian_frame_fastjack_feedback.png]] + * HAC-LAC (IFF) architecture :PROPERTIES: :header-args:matlab+: :tangle matlab/dcm_hac_iff.m diff --git a/dcm-simscape.html b/dcm-simscape.html deleted file mode 100644 index 0fab696..0000000 --- a/dcm-simscape.html +++ /dev/null @@ -1,1237 +0,0 @@ - - - - - - -ESRF Double Crystal Monochromator - Dynamical Multi-Body Model - - - - - - - - -
- UP - | - HOME -
-

ESRF Double Crystal Monochromator - Dynamical Multi-Body Model

-
-

Table of Contents

- -
-
-

This report is also available as a pdf.

-
- -

-In this document, a Simscape (.e.g. multi-body) model of the ESRF Double Crystal Monochromator (DCM) is presented and used to develop and optimize the control strategy. -

- -

-It is structured as follow: -

- - -
-

1. System Kinematics

-
-

- -

-
- -
-

1.1. Bragg Angle

-
-

-There is a simple relation eq:bragg_angle_formula between: -

-
    -
  • \(d_{\text{off}}\) is the wanted offset between the incident x-ray and the output x-ray
  • -
  • \(\theta_b\) is the bragg angle
  • -
  • \(d_z\) is the corresponding distance between the first and second crystals
  • -
- -\begin{equation} \label{eq:bragg_angle_formula} -d_z = \frac{d_{\text{off}}}{2 \cos \theta_b} -\end{equation} - -

-This relation is shown in Figure 1. -

- - -
-

jack_motion_bragg_angle.png -

-

Figure 1: Jack motion as a function of Bragg angle

-
- -

-The required jack stroke is approximately 25mm. -

- -
-
%% Required Jack stroke
-ans = 1e3*(dz(end) - dz(1))
-
-
- -
-24.963
-
-
-
- -
-

1.2. Kinematics (111 Crystal)

-
-

-The reference frame is taken at the center of the 111 second crystal. -

-
- -
-

1.2.1. Interferometers - 111 Crystal

-
-

-Three interferometers are pointed to the bottom surface of the 111 crystal. -

- -

-The position of the measurement points are shown in Figure 2 as well as the origin where the motion of the crystal is computed. -

- - -
-

sensor_111_crystal_points.png -

-

Figure 2: Bottom view of the second crystal 111. Position of the measurement points.

-
- -

-The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure 3): -

-\begin{equation} -\begin{bmatrix} -x_1 \\ x_2 \\ x_3 -\end{bmatrix} -= -\bm{J}_{s,111} -\begin{bmatrix} -d_z \\ r_y \\ r_x -\end{bmatrix} -\end{equation} - - -
-

schematic_sensor_jacobian_inverse_kinematics.png -

-

Figure 3: Inverse Kinematics - Interferometers

-
- - -

-From the Figure 2, the inverse kinematics can be solved as follow (for small motion): -

-\begin{equation} -\bm{J}_{s,111} -= -\begin{bmatrix} -1 & 0.07 & -0.015 \\ -1 & 0 & 0.015 \\ -1 & -0.07 & -0.015 -\end{bmatrix} -\end{equation} - -
-
%% Sensor Jacobian matrix for 111 crystal
-J_s_111 = [1,  0.07, -0.015
-           1,  0,     0.015
-           1, -0.07, -0.015];
-
-
- - - - --- -- -- - - - - - - - - - - - - - - - - - - - -
Table 1: Sensor Jacobian \(\bm{J}_{s,111}\)
1.00.07-0.015
1.00.00.015
1.0-0.07-0.015
- -

-The forward kinematics is solved by inverting the Jacobian matrix (see Figure 4). -

-\begin{equation} -\begin{bmatrix} -d_z \\ r_y \\ r_x -\end{bmatrix} -= -\bm{J}_{s,111}^{-1} -\begin{bmatrix} -x_1 \\ x_2 \\ x_3 -\end{bmatrix} -\end{equation} - - -
-

schematic_sensor_jacobian_forward_kinematics.png -

-

Figure 4: Forward Kinematics - Interferometers

-
- - - - --- -- -- - - - - - - - - - - - - - - - - - - - -
Table 2: Inverse of the sensor Jacobian \(\bm{J}_{s,111}^{-1}\)
0.250.50.25
7.140.0-7.14
-16.6733.33-16.67
-
-
- -
-

1.2.2. Piezo - 111 Crystal

-
-

-The location of the actuators with respect with the center of the 111 second crystal are shown in Figure 5. -

- - -
-

actuator_jacobian_111_points.png -

-

Figure 5: Location of actuators with respect to the center of the 111 second crystal (bottom view)

-
- -

-Inverse Kinematics consist of deriving the axial (z) motion of the 3 actuators from the motion of the crystal’s center. -

-\begin{equation} -\begin{bmatrix} -d_{u_r} \\ d_{u_h} \\ d_{d} -\end{bmatrix} -= -\bm{J}_{a,111} -\begin{bmatrix} -d_z \\ r_y \\ r_x -\end{bmatrix} -\end{equation} - - -
-

schematic_actuator_jacobian_inverse_kinematics.png -

-

Figure 6: Inverse Kinematics - Actuators

-
- -

-Based on the geometry in Figure 5, we obtain: -

-\begin{equation} -\bm{J}_{a,111} -= -\begin{bmatrix} -1 & 0.14 & -0.1525 \\ -1 & 0.14 & 0.0675 \\ -1 & -0.14 & -0.0425 -\end{bmatrix} -\end{equation} - -
-
%% Actuator Jacobian - 111 crystal
-J_a_111 = [1,  0.14, -0.1525
-           1,  0.14,  0.0675
-           1, -0.14, -0.0425];
-
-
- - - - --- -- -- - - - - - - - - - - - - - - - - - - - -
Table 3: Actuator Jacobian \(\bm{J}_{a,111}\)
1.00.14-0.1525
1.00.140.0675
1.0-0.14-0.0425
- -

-The forward Kinematics is solved by inverting the Jacobian matrix: -

-\begin{equation} -\begin{bmatrix} -d_z \\ r_y \\ r_x -\end{bmatrix} -= -\bm{J}_{a,111}^{-1} -\begin{bmatrix} -d_{u_r} \\ d_{u_h} \\ d_{d} -\end{bmatrix} -\end{equation} - - -
-

schematic_actuator_jacobian_forward_kinematics.png -

-

Figure 7: Forward Kinematics - Actuators for 111 crystal

-
- - - - --- -- -- - - - - - - - - - - - - - - - - - - - -
Table 4: Inverse of the actuator Jacobian \(\bm{J}_{a,111}^{-1}\)
0.05680.44320.5
1.78571.7857-3.5714
-4.54554.54550.0
-
-
-
- -
-

1.3. Save Kinematics

-
-
-
save('mat/dcm_kinematics.mat', 'J_a_111', 'J_s_111')
-
-
-
-
-
- -
-

2. Open Loop System Identification

-
-

- -

-
-
-

2.1. Identification

-
-

-Let’s considered the system \(\bm{G}(s)\) with: -

-
    -
  • 3 inputs: force applied to the 3 fast jacks
  • -
  • 3 outputs: measured displacement by the 3 interferometers pointing at the 111 second crystal
  • -
- -

-It is schematically shown in Figure 8. -

- - -
-

schematic_system_inputs_outputs.png -

-

Figure 8: Dynamical system with inputs and outputs

-
- -

-The system is identified from the Simscape model. -

- -
-
%% Input/Output definition
-clear io; io_i = 1;
-
-%% Inputs
-% Control Input {3x1} [N]
-io(io_i) = linio([mdl, '/control_system'], 1, 'openinput');  io_i = io_i + 1;
-
-%% Outputs
-% Interferometers {3x1} [m]
-io(io_i) = linio([mdl, '/DCM'], 1, 'openoutput'); io_i = io_i + 1;
-
-
- -
-
%% Extraction of the dynamics
-G = linearize(mdl, io);
-
-
- -
-
size(G)
-
-
- -
-size(G)
-State-space model with 3 outputs, 3 inputs, and 24 states.
-
-
-
- -
-

2.2. Plant in the frame of the fastjacks

-
-
-
load('dcm_kinematics.mat');
-
-
- -

-Using the forward and inverse kinematics, we can computed the dynamics from piezo forces to axial motion of the 3 fastjacks (see Figure 9). -

- - -
-

schematic_jacobian_frame_fastjack.png -

-

Figure 9: Use of Jacobian matrices to obtain the system in the frame of the fastjacks

-
- - -
-
%% Compute the system in the frame of the fastjacks
-G_pz = J_a_111*inv(J_s_111)*G;
-
-
- -

-The DC gain of the new system shows that the system is well decoupled at low frequency. -

-
-
dcgain(G_pz)
-
-
- - - - --- -- -- - - - - - - - - - - - - - - - - - - - -
Table 5: DC gain of the plant in the frame of the fast jacks \(\bm{G}_{\text{fj}}\)
4.4407e-092.7656e-121.0132e-12
2.7656e-124.4407e-091.0132e-12
1.0109e-121.0109e-124.4424e-09
- -

-The bode plot of \(\bm{G}_{\text{fj}}(s)\) is shown in Figure 10. -

- - -
-

bode_plot_plant_fj.png -

-

Figure 10: Bode plot of the diagonal and off-diagonal elements of the plant in the frame of the fast jacks

-
- -
-

-Computing the system in the frame of the fastjack gives good decoupling at low frequency (until the first resonance of the system). -

- -
-
-
- -
-

2.3. Plant in the frame of the crystal

-
- -
-

schematic_jacobian_frame_crystal.png -

-

Figure 11: Use of Jacobian matrices to obtain the system in the frame of the crystal

-
- -
-
G_mr = inv(J_s_111)*G*inv(J_a_111');
-
-
- -
-
dcgain(G_mr)
-
-
- - - - --- -- -- - - - - - - - - - - - - - - - - - - - -
1.9978e-093.9657e-097.7944e-09
3.9656e-098.4979e-08-1.5135e-17
7.7944e-09-3.9252e-171.834e-07
- -

-This results in a coupled system. -The main reason is that, as we map forces to the center of the 111 crystal and not at the center of mass/stiffness of the moving part, vertical forces will induce rotation and torques will induce vertical motion. -

-
-
-
- -
-

3. Open-Loop Noise Budgeting

-
-

- -

- -
-

noise_budget_dcm_schematic_fast_jack_frame.png -

-

Figure 12: Schematic representation of the control loop in the frame of one fast jack

-
-
- -
-

3.1. Power Spectral Density of signals

-
-

-Interferometer noise: -

-
-
Wn = 6e-11*(1 + s/2/pi/200)/(1 + s/2/pi/60); % m/sqrt(Hz)
-
-
- -
-Measurement noise: 0.79 [nm,rms]
-
- - -

-DAC noise (amplified by the PI voltage amplifier, and converted to newtons): -

-
-
Wdac = tf(3e-8); % V/sqrt(Hz)
-Wu = Wdac*22.5*10; % N/sqrt(Hz)
-
-
- -
-DAC noise: 0.95 [uV,rms]
-
- - -

-Disturbances: -

-
-
Wd = 5e-7/(1 + s/2/pi); % m/sqrt(Hz)
-
-
- -
-Disturbance motion: 0.61 [um,rms]
-
- - -
-
%% Save ASD of noise and disturbances
-save('mat/asd_noises_disturbances.mat', 'Wn', 'Wu', 'Wd');
-
-
-
-
- -
-

3.2. Open Loop disturbance and measurement noise

-
-

-The comparison of the amplitude spectral density of the measurement noise and of the jack parasitic motion is performed in Figure 13. -It confirms that the sensor noise is low enough to measure the motion errors of the crystal. -

- - -
-

open_loop_noise_budget_fast_jack.png -

-

Figure 13: Open Loop noise budgeting

-
-
-
-
- -
-

4. Active Damping Plant (Strain gauges)

-
-

- -

-

-In this section, we wish to see whether if strain gauges fixed to the piezoelectric actuator can be used for active damping. -

-
-
-

4.1. Identification

-
-
-
%% Input/Output definition
-clear io; io_i = 1;
-
-%% Inputs
-% Control Input {3x1} [N]
-io(io_i) = linio([mdl, '/control_system'], 1, 'openinput');  io_i = io_i + 1;
-
-%% Outputs
-% Strain Gauges {3x1} [m]
-io(io_i) = linio([mdl, '/DCM'], 2, 'openoutput'); io_i = io_i + 1;
-
-
- -
-
%% Extraction of the dynamics
-G_sg = linearize(mdl, io);
-
-
- -
-
dcgain(G_sg)
-
-
- - - - --- -- -- - - - - - - - - - - - - - - - - - - - -
4.4443e-091.0339e-133.774e-14
1.0339e-134.4443e-093.774e-14
3.7792e-143.7792e-144.4444e-09
- - -
-

strain_gauge_plant_bode_plot.png -

-

Figure 14: Bode Plot of the transfer functions from piezoelectric forces to strain gauges measuremed displacements

-
- -
-

-As the distance between the poles and zeros in Figure 17 is very small, little damping can be actively added using the strain gauges. -This will be confirmed using a Root Locus plot. -

- -
-
-
- -
-

4.2. Relative Active Damping

-
-
-
Krad_g1 = eye(3)*s/(s^2/(2*pi*500)^2 + 2*s/(2*pi*500) + 1);
-
-
- -

-As can be seen in Figure 15, very little damping can be added using relative damping strategy using strain gauges. -

- - -
-

relative_damping_root_locus.png -

-

Figure 15: Root Locus for the relative damping control

-
- -
-
Krad = -g*Krad_g1;
-
-
-
-
- -
-

4.3. Damped Plant

-
-

-The controller is implemented on Simscape, and the damped plant is identified. -

- -
-
%% Input/Output definition
-clear io; io_i = 1;
-
-%% Inputs
-% Control Input {3x1} [N]
-io(io_i) = linio([mdl, '/control_system'], 1, 'input');  io_i = io_i + 1;
-
-%% Outputs
-% Force Sensor {3x1} [m]
-io(io_i) = linio([mdl, '/DCM'], 1, 'openoutput'); io_i = io_i + 1;
-
-
- -
-
%% DCM Kinematics
-load('dcm_kinematics.mat');
-
-
- -
-
%% Identification of the Open Loop plant
-controller.type = 0; % Open Loop
-G_ol = J_a_111*inv(J_s_111)*linearize(mdl, io);
-G_ol.InputName  = {'u_ur',  'u_uh',  'u_d'};
-G_ol.OutputName = {'d_ur',  'd_uh',  'd_d'};
-
-
- -
-
%% Identification of the damped plant with Relative Active Damping
-controller.type = 2; % RAD
-G_dp = J_a_111*inv(J_s_111)*linearize(mdl, io);
-G_dp.InputName  = {'u_ur',  'u_uh',  'u_d'};
-G_dp.OutputName = {'d_ur',  'd_uh',  'd_d'};
-
-
- - -
-

comp_damp_undamped_plant_rad_bode_plot.png -

-

Figure 16: Bode plot of both the open-loop plant and the damped plant using relative active damping

-
-
-
-
- -
-

5. Active Damping Plant (Force Sensors)

-
-

- -

-

-Force sensors are added above the piezoelectric actuators. -They can consists of a simple piezoelectric ceramic stack. -See for instance fleming10_integ_strain_force_feedb_high. -

-
-
-

5.1. Identification

-
-
-
%% Input/Output definition
-clear io; io_i = 1;
-
-%% Inputs
-% Control Input {3x1} [N]
-io(io_i) = linio([mdl, '/control_system'], 1, 'openinput');  io_i = io_i + 1;
-
-%% Outputs
-% Force Sensor {3x1} [m]
-io(io_i) = linio([mdl, '/DCM'], 3, 'openoutput'); io_i = io_i + 1;
-
-
- -
-
%% Extraction of the dynamics
-G_fs = linearize(mdl, io);
-
-
- -

-The Bode plot of the identified dynamics is shown in Figure 17. -At high frequency, the diagonal terms are constants while the off-diagonal terms have some roll-off. -

- - -
-

iff_plant_bode_plot.png -

-

Figure 17: Bode plot of IFF Plant

-
-
-
- -
-

5.2. Controller - Root Locus

-
-

-We want to have integral action around the resonances of the system, but we do not want to integrate at low frequency. -Therefore, we can use a low pass filter. -

- -
-
%% Integral Force Feedback Controller
-Kiff_g1 = eye(3)*1/(1 + s/2/pi/20);
-
-
- - -
-

iff_root_locus.png -

-

Figure 18: Root Locus plot for the IFF Control strategy

-
- -
-
%% Integral Force Feedback Controller with optimal gain
-Kiff = g*Kiff_g1;
-
-
- -
-
%% Save the IFF controller
-save('mat/Kiff.mat', 'Kiff');
-
-
-
-
- -
-

5.3. Damped Plant

-
-

-Both the Open Loop dynamics (see Figure 9) and the dynamics with IFF (see Figure 19) are identified. -

- -

-We are here interested in the dynamics from \(\bm{u}^\prime = [u_{u_r}^\prime,\ u_{u_h}^\prime,\ u_d^\prime]\) (input of the damped plant) to \(\bm{d}_{\text{fj}} = [d_{u_r},\ d_{u_h},\ d_d]\) (motion of the crystal expressed in the frame of the fast-jacks). -This is schematically represented in Figure 19. -

- - -
-

schematic_jacobian_frame_fastjack_iff.png -

-

Figure 19: Use of Jacobian matrices to obtain the system in the frame of the fastjacks

-
- -

-The dynamics from \(\bm{u}\) to \(\bm{d}_{\text{fj}}\) (open-loop dynamics) and from \(\bm{u}^\prime\) to \(\bm{d}_{\text{fs}}\) are compared in Figure 20. -It is clear that the Integral Force Feedback control strategy is very effective in damping the resonances of the plant. -

- - -
-

comp_damped_undamped_plant_iff_bode_plot.png -

-

Figure 20: Bode plot of both the open-loop plant and the damped plant using IFF

-
- -
-

-The Integral Force Feedback control strategy is very effective in damping the modes present in the plant. -

- -
-
-
-
- -
-

6. HAC-LAC (IFF) architecture

-
-

- -

-

-The HAC-LAC architecture is shown in Figure 21. -

- - -
-

schematic_jacobian_frame_fastjack_hac_iff.png -

-

Figure 21: HAC-LAC architecture

-
-
-
-

6.1. System Identification

-
-

-Let’s identify the damped plant. -

- - -
-

bode_plot_hac_iff_plant.png -

-

Figure 22: Bode Plot of the plant for the High Authority Controller (transfer function from \(\bm{u}^\prime\) to \(\bm{\epsilon}_d\))

-
-
-
- -
-

6.2. High Authority Controller

-
-

-Let’s design a controller with a bandwidth of 100Hz. -As the plant is well decoupled and well approximated by a constant at low frequency, the high authority controller can easily be designed with SISO loop shaping. -

- -
-
%% Controller design
-wc = 2*pi*100; % Wanted crossover frequency [rad/s]
-a = 2; % Lead parameter
-
-Khac = diag(1./diag(abs(evalfr(G_dp, 1j*wc)))) * ... % Diagonal controller
-        wc/s * ... % Integrator
-        1/(sqrt(a))*(1 + s/(wc/sqrt(a)))/(1 + s/(wc*sqrt(a))) * ... % Lead
-        1/(s^2/(4*wc)^2 + 2*s/(4*wc) + 1); % Low pass filter
-
-
- -
-
%% Save the HAC controller
-save('mat/Khac_iff.mat', 'Khac');
-
-
- -
-
%% Loop Gain
-L_hac_lac = G_dp * Khac;
-
-
- - -
-

hac_iff_loop_gain_bode_plot.png -

-

Figure 23: Bode Plot of the Loop gain for the High Authority Controller

-
- -

-As shown in the Root Locus plot in Figure 24, the closed loop system should be stable. -

- - -
-

loci_hac_iff_fast_jack.png -

-

Figure 24: Root Locus for the High Authority Controller

-
-
-
- -
-

6.3. Performances

-
-

-In order to estimate the performances of the HAC-IFF control strategy, the transfer function from motion errors of the stepper motors to the motion error of the crystal is identified both in open loop and with the HAC-IFF strategy. -

- -

-It is first verified that the closed-loop system is stable: -

- -
-
isstable(T_hl)
-
-
- -
-1
-
- - -

-And both transmissibilities are compared in Figure 25. -

- - -
-

stepper_transmissibility_comp_ol_hac_iff.png -

-

Figure 25: Comparison of the transmissibility of errors from vibrations of the stepper motor between the open-loop case and the hac-iff case.

-
- -
-

-The HAC-IFF control strategy can effectively reduce the transmissibility of the motion errors of the stepper motors. -This reduction is effective inside the bandwidth of the controller. -

- -
-
-
- -
-

6.4. Close Loop noise budget

-
-

-Let’s compute the amplitude spectral density of the jack motion errors due to the sensor noise, the actuator noise and disturbances. -

- -
-
%% Computation of ASD of contribution of inputs to the closed-loop motion
-% Error due to disturbances
-asd_d = abs(squeeze(freqresp(Wd*(1/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
-% Error due to actuator noise
-asd_u = abs(squeeze(freqresp(Wu*(G_dp(1,1)/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
-% Error due to sensor noise
-asd_n = abs(squeeze(freqresp(Wn*(G_dp(1,1)*Khac(1,1)/(1 + G_dp(1,1)*Khac(1,1))), f, 'Hz')));
-
-
- -

-The closed-loop ASD is then: -

-
-
%% ASD of the closed-loop motion
-asd_cl = sqrt(asd_d.^2 + asd_u.^2 + asd_n.^2);
-
-
- -

-The obtained ASD are shown in Figure 26. -

- - -
-

close_loop_asd_noise_budget_hac_iff.png -

-

Figure 26: Closed Loop noise budget

-
- -

-Let’s compare the open-loop and close-loop cases (Figure 27). -

- -
-

cps_comp_ol_cl_hac_iff.png -

-

Figure 27: Cumulative Power Spectrum of the open-loop and closed-loop motion error along one fast-jack

-
-
-
-
-
-
-

Author: Dehaeze Thomas

-

Created: 2021-11-30 mar. 17:54

-
- - diff --git a/dcm-simscape.pdf b/dcm-simscape.pdf deleted file mode 100644 index 9d29a54..0000000 Binary files a/dcm-simscape.pdf and /dev/null differ diff --git a/figs/bode_plot_plant_fj_pres.pdf b/figs/bode_plot_plant_fj_pres.pdf new file mode 100644 index 0000000..607bef1 Binary files /dev/null and b/figs/bode_plot_plant_fj_pres.pdf differ diff --git a/figs/bode_plot_plant_fj_pres.png b/figs/bode_plot_plant_fj_pres.png new file mode 100644 index 0000000..132fb35 Binary files /dev/null and b/figs/bode_plot_plant_fj_pres.png differ diff --git a/figs/jacobian_metrology_frame.pdf b/figs/jacobian_metrology_frame.pdf new file mode 100644 index 0000000..359849b Binary files /dev/null and b/figs/jacobian_metrology_frame.pdf differ diff --git a/figs/jacobian_metrology_frame.png b/figs/jacobian_metrology_frame.png new file mode 100644 index 0000000..77ffd19 Binary files /dev/null and b/figs/jacobian_metrology_frame.png differ diff --git a/figs/jacobian_metrology_frame.svg b/figs/jacobian_metrology_frame.svg new file mode 100644 index 0000000..e78ff07 --- /dev/null +++ b/figs/jacobian_metrology_frame.svg @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + x + y + z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/figs/schematic_jacobian_frame_fastjack_feedback.pdf b/figs/schematic_jacobian_frame_fastjack_feedback.pdf new file mode 100644 index 0000000..c00d61f Binary files /dev/null and b/figs/schematic_jacobian_frame_fastjack_feedback.pdf differ diff --git a/figs/schematic_jacobian_frame_fastjack_feedback.png b/figs/schematic_jacobian_frame_fastjack_feedback.png new file mode 100644 index 0000000..d26ffd0 Binary files /dev/null and b/figs/schematic_jacobian_frame_fastjack_feedback.png differ diff --git a/figs/schematic_jacobian_frame_fastjack_feedback.svg b/figs/schematic_jacobian_frame_fastjack_feedback.svg new file mode 100644 index 0000000..35314c1 --- /dev/null +++ b/figs/schematic_jacobian_frame_fastjack_feedback.svg @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/figs/sensor_111_crystal_points_primary.pdf b/figs/sensor_111_crystal_points_primary.pdf new file mode 100644 index 0000000..37fabfc Binary files /dev/null and b/figs/sensor_111_crystal_points_primary.pdf differ diff --git a/figs/sensor_111_crystal_points_primary.png b/figs/sensor_111_crystal_points_primary.png new file mode 100644 index 0000000..80c35df Binary files /dev/null and b/figs/sensor_111_crystal_points_primary.png differ diff --git a/figs/sensor_111_crystal_points_primary.svg b/figs/sensor_111_crystal_points_primary.svg new file mode 100644 index 0000000..70cf984 --- /dev/null +++ b/figs/sensor_111_crystal_points_primary.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/figs/sensor_311_crystal_points_primary.pdf b/figs/sensor_311_crystal_points_primary.pdf new file mode 100644 index 0000000..7e57204 Binary files /dev/null and b/figs/sensor_311_crystal_points_primary.pdf differ diff --git a/figs/sensor_311_crystal_points_primary.png b/figs/sensor_311_crystal_points_primary.png new file mode 100644 index 0000000..97242e5 Binary files /dev/null and b/figs/sensor_311_crystal_points_primary.png differ diff --git a/figs/sensor_311_crystal_points_primary.svg b/figs/sensor_311_crystal_points_primary.svg new file mode 100644 index 0000000..325a522 --- /dev/null +++ b/figs/sensor_311_crystal_points_primary.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 120000 index 0000000..da003a8 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +dcm-simscape-model.html \ No newline at end of file