UP | HOME

# ESRF Double Crystal Monochromator - Dynamical Multi-Body Model
Author: Dehaeze Thomas

## Table of Contents

- 1. System Kinematics
  - 1.1. Bragg Angle
  - 1.2. Kinematics (311 Crystal)
    - 1.2.1. Interferometers - 311 secondary Crystal
    - 1.2.2. Interferometers - 311 primary Crystal
    - 1.2.3. Piezo - 311 Crystal
  - 1.3. Kinematics (111 Crystal)
    - 1.3.1. Interferometers - 111 secondary Crystal
    - 1.3.2. Interferometers - 111 primary Crystal
    - 1.3.3. Piezo - 111 Crystal
  - 1.4. Kinematics (Metrology Frame)
  - 1.5. Verification
  - 1.6. Save Kinematics
- 2. Open Loop System Identification
  - 2.1. Identification
  - 2.2. Plant in the frame of the fastjacks
  - 2.3. Plant in the frame of the crystal
- 3. Open-Loop Noise Budgeting
  - 3.1. Power Spectral Density of signals
  - 3.2. Open Loop disturbance and measurement noise
- 4. Active Damping Plant (Strain gauges)
  - 4.1. Identification
  - 4.2. Relative Active Damping
  - 4.3. Damped Plant
- 5. Active Damping Plant (Force Sensors)
  - 5.1. Identification
  - 5.2. Controller - Root Locus
  - 5.3. Damped Plant
- 6. Feedback Control
- 7. HAC-LAC (IFF) architecture
  - 7.1. System Identification
  - 7.2. High Authority Controller
  - 7.3. Performances
  - 7.4. Close Loop noise budget

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:

- Section 1: the kinematics of the DCM is presented, and Jacobian matrices which are used to solve the inverse and forward kinematics are computed.
- Section 2: the system dynamics is identified in the absence of control.
- Section 3: an open-loop noise budget is performed.
- Section 4: it is studied whether if the strain gauges fixed to the piezoelectric actuators can be used to actively damp the plant.
- Section 5: piezoelectric force sensors are added in series with the piezoelectric actuators and are used to actively damp the plant using the Integral Force Feedback (IFF) control strategy.
- Section 7: the High Authority Control - Low Authority Control (HAC-LAC) strategy is tested on the Simscape model.

## 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.

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.

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}

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.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 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}

Figure 4: Forward Kinematics - Interferometers

Table 2: Inverse of the sensor Jacobian \(\bm{J}_{s,311}^{-1}\)
0.25 | 0.5 | 0.25
7.14 | 0.0 | -7.14
-16.67 | 33.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.

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}

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.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 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}

Figure 7: Forward Kinematics - Interferometers

Table 4: Inverse of the sensor Jacobian \(\bm{J}_{s,311}^{-1}\)
-0.25 | -0.5 | -0.25
7.14 | 0.0 | -7.14
-16.67 | 33.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.

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}

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.0 | 0.14 | -0.1525
1.0 | 0.14 | 0.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}

Figure 10: Forward Kinematics - Actuators for 311 crystal

Table 6: Inverse of the actuator Jacobian \(\bm{J}_{a,311}^{-1}\)
0.0568 | 0.4432 | 0.5
1.7857 | 1.7857 | -3.5714
-4.5455 | 4.5455 | 0.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.

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}

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.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 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}

Figure 13: Forward Kinematics - Interferometers

Table 8: Inverse of the sensor Jacobian \(\bm{J}_{s,111}^{-1}\)
0.25 | 0.5 | 0.25
7.14 | 0.0 | -7.14
16.67 | -33.33 | 16.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.

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}

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.0 | 0.0 | 0.015
-1.0 | 0.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}

Figure 16: Forward Kinematics - Interferometers

Table 10: Inverse of the sensor Jacobian \(\bm{J}_{s,111}^{-1}\)
-0.25 | -0.5 | -0.25
-13.89 | 0.0 | 13.89
-16.67 | 33.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.

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}

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.0 | 0.14 | -0.1525
1.0 | 0.14 | 0.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}

Figure 19: Forward Kinematics - Actuators for 111 crystal

Table 12: Inverse of the actuator Jacobian \(\bm{J}_{a,111}^{-1}\)
0.25 | 0.25 | 0.5
0.4058 | 3.1656 | -3.5714
-4.5455 | 4.5455 | 0.0

### 1.4. Kinematics (Metrology Frame)

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.0 | 0.102 | 0.0
1.0 | -0.088 | 0.1275
1.0 | -0.088 | -0.1275

0.463 | 0.268 | 0.268
5.263 | -2.632 | -2.632
0.0 | 3.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.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

-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

### 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.

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).

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-09 | 2.7656e-12 | 1.0132e-12
2.7656e-12 | 4.4407e-09 | 1.0132e-12
1.0109e-12 | 1.0109e-12 | 4.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;

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

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-09 | 3.9657e-09 | 7.7944e-09
3.9656e-09 | 8.4979e-08 | -1.5135e-17
7.7944e-09 | -3.9252e-17 | 1.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

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.

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-09 | 1.0339e-13 | 3.774e-14
1.0339e-13 | 4.4443e-09 | 3.774e-14
3.7792e-14 | 3.7792e-14 | 4.4444e-09

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.

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'};

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.

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);

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.

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.

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

## 7. HAC-LAC (IFF) architecture

The HAC-LAC architecture is shown in Figure 34.

Figure 34: HAC-LAC architecture

### 7.1. System Identification

Let’s identify the damped plant.

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;

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.

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.

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.

Figure 39: Closed Loop noise budget

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

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