nass-simscape/active_damping/index.org
Thomas Dehaeze 3e37f1edff Deleted the initializeInputs and initializeExperiment functions
Now, the function initializeReferences should be used
2019-12-11 17:07:51 +01:00

77 KiB

Active Damping

Introduction   ignore

First, in section sec:undamped_system, we will looked at the undamped system.

Then, we will compare three active damping techniques:

  • In section sec:iff: the integral force feedback is used
  • In section sec:rmc: the relative motion control is used
  • In section sec:dvf: the direct velocity feedback is used

For each of the active damping technique, we will:

  • Compare the sensitivity from disturbances
  • Look at the damped plant

The disturbances are:

  • Ground motion
  • Direct forces
  • Motion errors of all the stages

Undamped System

<<sec:undamped_system>>

ZIP file containing the data and matlab files   ignore

All the files (data and Matlab scripts) are accessible here.

Introduction   ignore

We first look at the undamped system. The performance of this undamped system will be compared with the damped system using various techniques.

Init

We initialize all the stages with the default parameters. The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.

  initializeReferences();
  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();
  initializeNanoHexapod(struct('actuator', 'piezo'));
  initializeSample(struct('mass', 50));

All the controllers are set to 0.

  K = tf(zeros(6));
  save('./mat/controllers.mat', 'K', '-append');
  K_iff = tf(zeros(6));
  save('./mat/controllers.mat', 'K_iff', '-append');
  K_rmc = tf(zeros(6));
  save('./mat/controllers.mat', 'K_rmc', '-append');
  K_dvf = tf(zeros(6));
  save('./mat/controllers.mat', 'K_dvf', '-append');

Identification

We identify the various transfer functions of the system

  G = identifyPlant();

And we save it for further analysis.

  save('./active_damping/mat/plants.mat', 'G', '-append');

Sensitivity to disturbances

The sensitivity to disturbances are shown on figure fig:sensitivity_dist_undamped.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_dist_undamped.png
Undamped sensitivity to disturbances (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_dist_stages.png
Sensitivity to force disturbances in various stages (png, pdf)

Undamped Plant

The "plant" (transfer function from forces applied by the nano-hexapod to the measured displacement of the sample with respect to the granite) bode plot is shown on figure fig:sensitivity_dist_undamped.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/plant_undamped.png
Transfer Function from cartesian forces to displacement for the undamped plant (png, pdf)

Integral Force Feedback

<<sec:iff>>

ZIP file containing the data and matlab files   ignore

All the files (data and Matlab scripts) are accessible here.

Introduction   ignore

Integral Force Feedback is applied. In section sec:iff_1dof, IFF is applied on a uni-axial system to understand its behavior. Then, it is applied on the simscape model.

One degree-of-freedom example

<<sec:iff_1dof>>

Equations

/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/iff_1dof.png

Integral Force Feedback applied to a 1dof system

The dynamic of the system is described by the following equation:

\begin{equation} ms^2x = F_d - kx - csx + kw + csw + F \end{equation}

The measured force $F_m$ is:

\begin{align} F_m &= F - kx - csx + kw + csw \\ &= ms^2 x - F_d \end{align}

The Integral Force Feedback controller is $K = -\frac{g}{s}$, and thus the applied force by this controller is:

\begin{equation} F_{\text{IFF}} = -\frac{g}{s} F_m = -\frac{g}{s} (ms^2 x - F_d) \end{equation}

Once the IFF is applied, the new dynamics of the system is:

\begin{equation} ms^2x = F_d + F - kx - csx + kw + csw - \frac{g}{s} (ms^2x - F_d) \end{equation}

And finally:

\begin{equation} x = F_d \frac{1 + \frac{g}{s}}{ms^2 + (mg + c)s + k} + F \frac{1}{ms^2 + (mg + c)s + k} + w \frac{k + cs}{ms^2 + (mg + c)s + k} \end{equation}

We can see that this:

  • adds damping to the system by a value $mg$
  • lower the compliance as low frequency by a factor: $1 + g/s$

If we want critical damping:

\begin{equation} \xi = \frac{1}{2} \frac{c + gm}{\sqrt{km}} = \frac{1}{2} \end{equation}

This is attainable if we have:

\begin{equation} g = \frac{\sqrt{km} - c}{m} \end{equation}

Matlab Example

Let define the system parameters.

  m = 50; % [kg]
  k = 1e6; % [N/m]
  c = 1e3; % [N/(m/s)]

The state space model of the system is defined below.

  A = [-c/m -k/m;
       1     0];

  B = [1/m 1/m -1;
       0   0    0];

  C = [ 0  1;
       -c -k];

  D = [0 0 0;
       1 0 0];

  sys = ss(A, B, C, D);
  sys.InputName = {'F', 'Fd', 'wddot'};
  sys.OutputName = {'d', 'Fm'};
  sys.StateName = {'ddot', 'd'};

The controller $K_\text{IFF}$ is:

  Kiff = -((sqrt(k*m)-c)/m)/s;
  Kiff.InputName = {'Fm'};
  Kiff.OutputName = {'F'};

And the closed loop system is computed below.

  sys_iff = feedback(sys, Kiff, 'name', +1);
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/iff_1dof_sensitivitiy.png
Sensitivity to disturbance when IFF is applied on the 1dof system (png, pdf)

Control Design

Let's load the undamped plant:

  load('./active_damping/mat/plants.mat', 'G');

Let's look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor (figure fig:iff_plant).

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/iff_plant.png
Transfer function from forces applied in the legs to force sensor (png, pdf)

The controller for each pair of actuator/sensor is:

  K_iff = -1000/s;

The corresponding loop gains are shown in figure fig:iff_open_loop.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/iff_open_loop.png
Loop Gain for the Integral Force Feedback (png, pdf)

Identification of the damped plant

Let's initialize the system prior to identification.

  initializeReferences();
  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();
  initializeNanoHexapod(struct('actuator', 'piezo'));
  initializeSample(struct('mass', 50));

All the controllers are set to 0.

  K = tf(zeros(6));
  save('./mat/controllers.mat', 'K', '-append');
  K_iff = -K_iff*eye(6);
  save('./mat/controllers.mat', 'K_iff', '-append');
  K_rmc = tf(zeros(6));
  save('./mat/controllers.mat', 'K_rmc', '-append');
  K_dvf = tf(zeros(6));
  save('./mat/controllers.mat', 'K_dvf', '-append');

We identify the system dynamics now that the IFF controller is ON.

  G_iff = identifyPlant();

And we save the damped plant for further analysis

  save('./active_damping/mat/plants.mat', 'G_iff', '-append');

Sensitivity to disturbances

As shown on figure fig:sensitivity_dist_iff:

  • The top platform of the nano-hexapod how behaves as a "free-mass".
  • The transfer function from direct forces $F_s$ to the relative displacement $D$ is equivalent to the one of an isolated mass.
  • The transfer function from ground motion $D_g$ to the relative displacement $D$ tends to the transfer function from $D_g$ to the displacement of the granite (the sample is being isolated thanks to IFF). However, as the goal is to make the relative displacement $D$ as small as possible (e.g. to make the sample motion follows the granite motion), this is not a good thing.
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_dist_iff.png
Sensitivity to disturbance once the IFF controller is applied to the system (png, pdf)

The order of the models are very high and thus the plots may be wrong. For instance, the plots are not the same when using minreal.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_dist_stages_iff.png
Sensitivity to force disturbances in various stages when IFF is applied (png, pdf)

Damped Plant

Now, look at the new damped plant to control.

It damps the plant (resonance of the nano hexapod as well as other resonances) as shown in figure fig:plant_iff_damped.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/plant_iff_damped.png
Damped Plant after IFF is applied (png, pdf)

However, it increases coupling at low frequency (figure fig:plant_iff_coupling).

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/plant_iff_coupling.png
Coupling induced by IFF (png, pdf)

Conclusion

Integral Force Feedback:

  • Robust (guaranteed stability)
  • Acceptable Damping
  • Increase the sensitivity to disturbances at low frequencies

Relative Motion Control

<<sec:rmc>>

ZIP file containing the data and matlab files   ignore

All the files (data and Matlab scripts) are accessible here.

Introduction   ignore

In the Relative Motion Control (RMC), a derivative feedback is applied between the measured actuator displacement to the actuator force input.

One degree-of-freedom example

<<sec:rmc_1dof>>

Equations

/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/rmc_1dof.png

Relative Motion Control applied to a 1dof system

The dynamic of the system is:

\begin{equation} ms^2x = F_d - kx - csx + kw + csw + F \end{equation}

In terms of the stage deformation $d = x - w$:

\begin{equation} (ms^2 + cs + k) d = -ms^2 w + F_d + F \end{equation}

The relative motion control law is:

\begin{equation} K = -g s \end{equation}

Thus, the applied force is:

\begin{equation} F = -g s d \end{equation}

And the new dynamics will be:

\begin{equation} d = w \frac{-ms^2}{ms^2 + (c + g)s + k} + F_d \frac{1}{ms^2 + (c + g)s + k} + F \frac{1}{ms^2 + (c + g)s + k} \end{equation}

And thus damping is added.

If critical damping is wanted:

\begin{equation} \xi = \frac{1}{2}\frac{c + g}{\sqrt{km}} = \frac{1}{2} \end{equation}

This corresponds to a gain:

\begin{equation} g = \sqrt{km} - c \end{equation}

Matlab Example

Let define the system parameters.

  m = 50; % [kg]
  k = 1e6; % [N/m]
  c = 1e3; % [N/(m/s)]

The state space model of the system is defined below.

  A = [-c/m -k/m;
       1     0];

  B = [1/m 1/m -1;
       0   0    0];

  C = [ 0  1;
       -c -k];

  D = [0 0 0;
       1 0 0];

  sys = ss(A, B, C, D);
  sys.InputName = {'F', 'Fd', 'wddot'};
  sys.OutputName = {'d', 'Fm'};
  sys.StateName = {'ddot', 'd'};

The controller $K_\text{RMC}$ is:

  Krmc = -(sqrt(k*m)-c)*s;
  Krmc.InputName = {'d'};
  Krmc.OutputName = {'F'};

And the closed loop system is computed below.

  sys_rmc = feedback(sys, Krmc, 'name', +1);
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/rmc_1dof_sensitivitiy.png
Sensitivity to disturbance when RMC is applied on the 1dof system (png, pdf)

Control Design

Let's load the undamped plant:

  load('./active_damping/mat/plants.mat', 'G');

Let's look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor (figure fig:rmc_plant).

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/rmc_plant.png
Transfer function from forces applied in the legs to leg displacement sensor (png, pdf)

The Relative Motion Controller is defined below. A Low pass Filter is added to make the controller transfer function proper.

  K_rmc = s*50000/(1 + s/2/pi/10000);

The obtained loop gains are shown in figure fig:rmc_open_loop.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/rmc_open_loop.png
Loop Gain for the Integral Force Feedback (png, pdf)

Identification of the damped plant

Let's initialize the system prior to identification.

  initializeReferences();
  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();
  initializeNanoHexapod(struct('actuator', 'piezo'));
  initializeSample(struct('mass', 50));

And initialize the controllers.

  K = tf(zeros(6));
  save('./mat/controllers.mat', 'K', '-append');
  K_iff = tf(zeros(6));
  save('./mat/controllers.mat', 'K_iff', '-append');
  K_rmc = -K_rmc*eye(6);
  save('./mat/controllers.mat', 'K_rmc', '-append');
  K_dvf = tf(zeros(6));
  save('./mat/controllers.mat', 'K_dvf', '-append');

We identify the system dynamics now that the RMC controller is ON.

  G_rmc = identifyPlant();

And we save the damped plant for further analysis.

  save('./active_damping/mat/plants.mat', 'G_rmc', '-append');

Sensitivity to disturbances

As shown in figure fig:sensitivity_dist_rmc, RMC control succeed in lowering the sensitivity to disturbances near resonance of the system.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_dist_rmc.png
Sensitivity to disturbance once the RMC controller is applied to the system (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_dist_stages_rmc.png
Sensitivity to force disturbances in various stages when RMC is applied (png, pdf)

Damped Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/plant_rmc_damped.png
Damped Plant after RMC is applied (png, pdf)

Conclusion

Relative Motion Control:

Direct Velocity Feedback

<<sec:dvf>>

ZIP file containing the data and matlab files   ignore

All the files (data and Matlab scripts) are accessible here.

Introduction   ignore

In the Relative Motion Control (RMC), a feedback is applied between the measured velocity of the platform to the actuator force input.

One degree-of-freedom example

<<sec:dvf_1dof>>

Equations

/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/dvf_1dof.png

Direct Velocity Feedback applied to a 1dof system

The dynamic of the system is:

\begin{equation} ms^2x = F_d - kx - csx + kw + csw + F \end{equation}

In terms of the stage deformation $d = x - w$:

\begin{equation} (ms^2 + cs + k) d = -ms^2 w + F_d + F \end{equation}

The direct velocity feedback law shown in figure fig:dvf_1dof is:

\begin{equation} K = -g \end{equation}

Thus, the applied force is:

\begin{equation} F = -g \dot{x} \end{equation}

And the new dynamics will be:

\begin{equation} d = w \frac{-ms^2 - gs}{ms^2 + (c + g)s + k} + F_d \frac{1}{ms^2 + (c + g)s + k} + F \frac{1}{ms^2 + (c + g)s + k} \end{equation}

And thus damping is added.

If critical damping is wanted:

\begin{equation} \xi = \frac{1}{2}\frac{c + g}{\sqrt{km}} = \frac{1}{2} \end{equation}

This corresponds to a gain:

\begin{equation} g = \sqrt{km} - c \end{equation}

Matlab Example

Let define the system parameters.

  m = 50; % [kg]
  k = 1e6; % [N/m]
  c = 1e3; % [N/(m/s)]

The state space model of the system is defined below.

  A = [-c/m -k/m;
       1     0];

  B = [1/m 1/m -1;
       0   0    0];

  C = [1 0;
       0 1;
       0 0];

  D = [0 0 0;
       0 0 0;
       0 0 1];

  sys = ss(A, B, C, D);
  sys.InputName = {'F', 'Fd', 'wddot'};
  sys.OutputName = {'ddot', 'd', 'wddot'};
  sys.StateName = {'ddot', 'd'};

Because we need $\dot{x}$ for feedback, we compute it from the outputs

  G_xdot = [1, 0, 1/s;
            0, 1, 0];
  G_xdot.InputName = {'ddot', 'd', 'wddot'};
  G_xdot.OutputName = {'xdot', 'd'};

Finally, the system is described by sys as defined below.

  sys = series(sys, G_xdot, [1 2 3], [1 2 3]);

The controller $K_\text{DVF}$ is:

  Kdvf = tf(-(sqrt(k*m)-c));
  Kdvf.InputName = {'xdot'};
  Kdvf.OutputName = {'F'};

And the closed loop system is computed below.

  sys_dvf = feedback(sys, Kdvf, 'name', +1);

The obtained sensitivity to disturbances is shown in figure fig:dvf_1dof_sensitivitiy.

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/dvf_1dof_sensitivitiy.png
Sensitivity to disturbance when DVF is applied on the 1dof system (png, pdf)

Control Design

Let's load the undamped plant:

  load('./active_damping/mat/plants.mat', 'G');

Let's look at the transfer function from actuator forces in the nano-hexapod to the measured velocity of the nano-hexapod platform in the direction of the corresponding actuator for all 6 pairs of actuator/sensor (figure fig:dvf_plant).

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/dvf_plant.png
Transfer function from forces applied in the legs to leg velocity sensor (png, pdf)

The controller is defined below and the obtained loop gain is shown in figure fig:dvf_open_loop_gain.

  K_dvf = tf(3e4);
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/dvf_open_loop_gain.png
Loop Gain for DVF (png, pdf)

Identification of the damped plant

Let's initialize the system prior to identification.

  initializeReferences();
  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();
  initializeNanoHexapod(struct('actuator', 'piezo'));
  initializeSample(struct('mass', 50));

And initialize the controllers.

  K = tf(zeros(6));
  save('./mat/controllers.mat', 'K', '-append');
  K_iff = tf(zeros(6));
  save('./mat/controllers.mat', 'K_iff', '-append');
  K_rmc = tf(zeros(6));
  save('./mat/controllers.mat', 'K_rmc', '-append');
  K_dvf = -K_dvf*eye(6);
  save('./mat/controllers.mat', 'K_dvf', '-append');

We identify the system dynamics now that the RMC controller is ON.

  G_dvf = identifyPlant();

And we save the damped plant for further analysis.

  save('./active_damping/mat/plants.mat', 'G_dvf', '-append');

Sensitivity to disturbances

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_dist_dvf.png
Sensitivity to disturbance once the DVF controller is applied to the system (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_dist_stages_dvf.png
Sensitivity to force disturbances in various stages when DVF is applied (png, pdf)

Damped Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/plant_dvf_damped.png
Damped Plant after DVF is applied (png, pdf)

Conclusion

Direct Velocity Feedback:

Comparison

<<sec:comparison>>

Introduction   ignore

Load the plants

  load('./active_damping/mat/plants.mat', 'G', 'G_iff', 'G_rmc', 'G_dvf');

Sensitivity to Disturbance

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_comp_ground_motion_z.png
caption (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_comp_direct_forces_z.png
caption (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_comp_spindle_z.png
caption (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_comp_ty_z.png
caption (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/sensitivity_comp_ty_x.png
caption (png, pdf)

Damped Plant

  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/plant_comp_damping_z.png
Plant for the $z$ direction for different active damping technique used (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/plant_comp_damping_x.png
Plant for the $x$ direction for different active damping technique used (png, pdf)
  <<plt-matlab>>
/tdehaeze/nass-simscape/media/commit/6541ee4002bdad6110413f904e69acc44a41839c/active_damping/figs/plant_comp_damping_coupling.png
Comparison of one off-diagonal plant for different damping technique applied (png, pdf)

Conclusion

<<sec:conclusion>>