nass-simscape/org/amplified_piezoelectric_stack.org
2020-09-01 13:51:12 +02:00

100 KiB

Amplified Piezoelectric Stack Actuator

Introduction   ignore

The presented model is based on cite:souleille18_concep_activ_mount_space_applic.

The model represents the amplified piezo APA100M from Cedrat-Technologies (Figure fig:souleille18_model_piezo). The parameters are shown in the table below.

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/souleille18_model_piezo.png
Picture of an APA100M from Cedrat Technologies. Simplified model of a one DoF payload mounted on such isolator
Value Meaning
$m$ $1\,[kg]$ Payload mass
$k_e$ $4.8\,[N/\mu m]$ Stiffness used to adjust the pole of the isolator
$k_1$ $0.96\,[N/\mu m]$ Stiffness of the metallic suspension when the stack is removed
$k_a$ $65\,[N/\mu m]$ Stiffness of the actuator
$c_1$ $10\,[N/(m/s)]$ Added viscous damping
Parameters used for the model of the APA 100M

Simplified Model

Parameters

  m = 1; % [kg]

  ke = 4.8e6; % [N/m]
  ce = 5; % [N/(m/s)]
  me = 0.001; % [kg]

  k1 = 0.96e6; % [N/m]
  c1 = 10; % [N/(m/s)]

  ka = 65e6; % [N/m]
  ca = 5; % [N/(m/s)]
  ma = 0.001; % [kg]

  h = 0.2; % [m]

IFF Controller:

  Kiff = -8000/s;

Identification

Identification in open-loop.

  %% Name of the Simulink File
  mdl = 'amplified_piezo_model';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/w'],  1, 'openinput');  io_i = io_i + 1; % Base Motion
  io(io_i) = linio([mdl, '/f'],  1, 'openinput');  io_i = io_i + 1; % Actuator Inputs
  io(io_i) = linio([mdl, '/F'],  1, 'openinput');  io_i = io_i + 1; % External Force

  io(io_i) = linio([mdl, '/Fs'], 3, 'openoutput'); io_i = io_i + 1; % Force Sensors
  io(io_i) = linio([mdl, '/x1'], 1, 'openoutput'); io_i = io_i + 1; % Mass displacement

  G = linearize(mdl, io, 0);
  G.InputName  = {'w', 'f', 'F'};
  G.OutputName = {'Fs', 'x1'};

Identification in closed-loop.

  %% Name of the Simulink File
  mdl = 'amplified_piezo_model';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/w'],  1, 'input');  io_i = io_i + 1; % Base Motion
  io(io_i) = linio([mdl, '/f'],  1, 'input');  io_i = io_i + 1; % Actuator Inputs
  io(io_i) = linio([mdl, '/F'],  1, 'input');  io_i = io_i + 1; % External Force

  io(io_i) = linio([mdl, '/Fs'], 3, 'output'); io_i = io_i + 1; % Force Sensors
  io(io_i) = linio([mdl, '/x1'], 1, 'output'); io_i = io_i + 1; % Mass displacement

  Giff = linearize(mdl, io, 0);
  Giff.InputName  = {'w', 'f', 'F'};
  Giff.OutputName = {'Fs', 'x1'};

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_tf_ol_and_cl.png

Matrix of transfer functions from input to output in open loop (blue) and closed loop (red)

Root Locus

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_root_locus.png

Root Locus

Analytical Model

If we apply the Newton's second law of motion on the top mass, we obtain: \[ ms^2 x_1 = F + k_1 (w - x_1) + k_e (x_e - x_1) \]

Then, we can write that the measured force $F_s$ is equal to: \[ F_s = k_a(w - x_e) + f = -k_e (x_1 - x_e) \] which gives: \[ x_e = \frac{k_a}{k_e + k_a} w + \frac{1}{k_e + k_a} f + \frac{k_e}{k_e + k_a} x_1 \]

Re-injecting that into the previous equations gives: \[ x_1 = F \frac{1}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} + w \frac{k_1 + \frac{k_e k_a}{k_e + k_a}}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} + f \frac{\frac{k_e}{k_e + k_a}}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} \] \[ F_s = - F \frac{\frac{k_e k_a}{k_e + k_a}}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} + w \frac{k_e k_a}{k_e + k_a} \Big( \frac{ms^2}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} \Big) - f \frac{k_e}{k_e + k_a} \Big( \frac{ms^2 + k_1}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} \Big) \]

  Ga = 1/(m*s^2 + k1 + ke*ka/(ke + ka)) * ...
       [ 1 ,              k1 + ke*ka/(ke + ka)  , ke/(ke + ka) ;
        -ke*ka/(ke + ka), ke*ka/(ke + ka)*m*s^2 , -ke/(ke+ka)*(m*s^2 + k1)];
  Ga.InputName = {'F', 'w', 'f'};
  Ga.OutputName = {'x1', 'Fs'};

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/comp_simscape_analytical.png

Comparison of the Identified Simscape Dynamics (solid) and the Analytical Model (dashed)

Analytical Analysis

For Integral Force Feedback Control, the plant is: \[ \frac{F_s}{f} = \frac{k_e}{k_e + k_a} \Big( \frac{ms^2 + k_1}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} \Big) \]

As high frequency, this converge to: \[ \frac{F_s}{f} \underset{\omega\to\infty}{\longrightarrow} \frac{k_e}{k_e + k_a} \] And at low frequency: \[ \frac{F_s}{f} \underset{\omega\to 0}{\longrightarrow} \frac{k_e}{k_e + k_a} \frac{k_1}{k_1 + \frac{k_e k_a}{k_e + k_a}} \]

It has two complex conjugate zeros at: \[ z = \pm j \sqrt{\frac{k_1}{m}} \] And two complex conjugate poles at: \[ p = \pm j \sqrt{\frac{k_1 + \frac{k_e k_a}{k_e + k_a}}{m}} \]

If maximal damping is to be attained with IFF, the distance between the zero and the pole is to be maximized. Thus, we wish to maximize $p/z$, which is equivalent as to minimize $k_1$ and have $k_e \approx k_a$ (supposing $k_e + k_a \approx \text{cst}$).

  m = 1;
  k1 = 1e6;
  ka = 1e6;
  ke = 1e6;

  Giff.InputName = {'f'};
  Giff.OutputName = {'Fs'};

Rotating X-Y platform

Introduction   ignore

This analysis gave rise to a paper cite:dehaeze20_activ_dampin_rotat_platf_integ_force_feedb.

Parameters

  m = 1; % [kg]

  ke = 4.8e6; % [N/m]
  ce = 5; % [N/(m/s)]
  me = 0.001; % [kg]

  k1 = 0.96e6; % [N/m]
  c1 = 10; % [N/(m/s)]

  ka = 65e6; % [N/m]
  ca = 5; % [N/(m/s)]
  ma = 0.001; % [kg]

  h = 0.2; % [m]
  Kiff = tf(0);

Identification

Rotating speed in rad/s:

  Ws = 2*pi*[0, 1, 10, 100];
  Gs = {zeros(length(Ws), 1)};

Identification in open-loop.

  %% Name of the Simulink File
  mdl = 'amplified_piezo_xy_rotating_stage';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/fx'],  1, 'openinput');  io_i = io_i + 1;
  io(io_i) = linio([mdl, '/fy'],  1, 'openinput');  io_i = io_i + 1;

  io(io_i) = linio([mdl, '/Fs'], 1, 'openoutput'); io_i = io_i + 1;
  io(io_i) = linio([mdl, '/Fs'], 2, 'openoutput'); io_i = io_i + 1;

  for i = 1:length(Ws)
      ws = Ws(i);
      G = linearize(mdl, io, 0);
      G.InputName  = {'fx', 'fy'};
      G.OutputName = {'Fsx', 'Fsy'};
      Gs(i) = {G};
  end

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplitifed_piezo_xy_rotation_plant_iff.png

Transfer function matrix from forces to force sensors for multiple rotation speed

Root Locus

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_xy_rotation_root_locus.png

Root locus for 3 rotating speed

Analysis

The negative stiffness induced by the rotation is equal to $m \omega_0^2$. Thus, the maximum rotation speed where IFF can be applied is: \[ \omega_\text{max} = \sqrt{\frac{k_1}{m}} \approx 156\,[Hz] \]

Let's verify that.

  Ws = 2*pi*[140, 160];

Identification

  %% Name of the Simulink File
  mdl = 'amplified_piezo_xy_rotating_stage';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/fx'],  1, 'openinput');  io_i = io_i + 1;
  io(io_i) = linio([mdl, '/fy'],  1, 'openinput');  io_i = io_i + 1;

  io(io_i) = linio([mdl, '/Fs'], 1, 'openoutput'); io_i = io_i + 1;
  io(io_i) = linio([mdl, '/Fs'], 2, 'openoutput'); io_i = io_i + 1;

  for i = 1:length(Ws)
      ws = Ws(i);
      G = linearize(mdl, io, 0);
      G.InputName  = {'fx', 'fy'};
      G.OutputName = {'Fsx', 'Fsy'};
      Gs(i) = {G};
  end

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_xy_rotating_unstable_root_locus.png

Root Locus for the two considered rotation speed. For the red curve, the system is unstable.

Stewart Platform with Amplified Actuators

Initialization

  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();

  initializeSimscapeConfiguration();
  initializeDisturbances('enable', false);
  initializeLoggingConfiguration('log', 'none');

  initializeController('type', 'hac-iff');

We set the stiffness of the payload fixation:

  Kp = 1e8; % [N/m]

APA-100 Amplified Actuator

Identification

  K = tf(zeros(6));
  Kiff = tf(zeros(6));

We identify the system for the following payload masses:

  Ms = [1, 10, 50];

The nano-hexapod has the following leg's stiffness and damping.

  initializeNanoHexapod('actuator', 'amplified');

Controller Design

The loop gain for IFF is shown in Figure fig:amplified_piezo_iff_loop_gain.

The corresponding root locus is shown in Figure fig:amplified_piezo_iff_root_locus.

Finally, the damping as function of the gain is display in Figure fig:amplified_piezo_iff_damping_gain.

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_iff_loop_gain.png

Dynamics for the Integral Force Feedback for three payload masses

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_iff_root_locus.png

Root Locus for the IFF control for three payload masses

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_iff_damping_gain.png

Damping ratio of the poles as a function of the IFF gain

The following controller for the Decentralized Integral Force Feedback is used:

  Kiff = -1e4/s*eye(6);

Effect of the Low Authority Control on the Primary Plant

Introduction   ignore
Identification of the undamped plant   ignore
Identification of the damped plant   ignore
Effect of the Damping on the plant diagonal dynamics   ignore

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_iff_plant_damped_X.png

Primary plant in the task space with (dashed) and without (solid) IFF

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_iff_damped_plant_L.png

Primary plant in the space of the legs with (dashed) and without (solid) IFF
Effect of the Damping on the coupling dynamics   ignore

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_iff_damped_coupling_X.png

Coupling in the primary plant in the task with (dashed) and without (solid) IFF

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_iff_damped_coupling_L.png

Coupling in the primary plant in the space of the legs with (dashed) and without (solid) IFF

Effect of the Low Authority Control on the Sensibility to Disturbances

Introduction   ignore
Identification   ignore
Results   ignore

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_iff_disturbances.png

Norm of the transfer function from vertical disturbances to vertical position error with (dashed) and without (solid) Integral Force Feedback applied

Conclusion   ignore

Optimal Stiffnesses

Introduction   ignore

Based on the analytical analysis, we can determine the parameters of the amplified piezoelectric actuator in order to be able to add a lots of damping using IFF:

  • $k_1$ should be minimized.
  • $k_e \approx k_a \approx 10^5 - 10^6\,[N/m]$

However, this might not be realizable.

Low Authority Controller

Identification

The nano-hexapod is initialized with the following parameters:

  initializeNanoHexapod('actuator', 'amplified', ...
                        'k1', 1e4, ...
                        'ke', 1e6, ...
                        'ka', 1e6);

The obtain plan for the IFF control is shown in Figure fig:amplified_piezo_opt_stiff_iff_plant. The associated Root Locus is shown in Figure fig:amplified_piezo_opt_stiff_iff_root_locus.

Based on that, the following IFF gain is chosen:

  Kiff = -1e3/s*eye(6);

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_opt_stiff_iff_plant.png

Plant dynamics for IFF with the amplified piezoelectric stack actuator

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_opt_stiff_iff_root_locus.png

Root Locus for IFF with the amplified piezoelectric stack actuator

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_opt_stiff_gain_damping.png

Damping of the modes as a function of the IFF gain
Effect of the Low Authority Control on the Primary Plant
Introduction   ignore
Identification of the undamped plant   ignore
Identification of the damped plant   ignore
Effect of the Damping on the plant diagonal dynamics   ignore
Effect of the Low Authority Control on the Sensibility to Disturbances
Introduction   ignore
Identification   ignore
Results   ignore

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/amplified_piezo_opt_stiff_iff_dist.png

Effect of disturbance with and without IFF
Conclusion   ignore

High Authority Controller

Introduction   ignore
Controller Design
  h = 2.5;
  Kl = 5e6 * eye(6) * ...
       1/h*(s/(2*pi*40/h) + 1)/(s/(2*pi*40*h) + 1) * ...
       1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
       (s/2/pi/50 + 1)/(s/2/pi/50) * ...
       (s/2/pi/10 + 1)/(s/2/pi/10) * ...
       1/(1 + s/2/pi/200);
  Kl = 3e10 * eye(6) * ...
       1/s * ...
       (s+0.8)/s * ...
       (s+50)/(s+0.01) * ...
       (s+120)/(s+1000) * ...
       (s+150)/(s+1000);

Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system.

  load('mat/stages.mat', 'nano_hexapod');
  K = Kl*nano_hexapod.kinematics.J*diag([1, 1, 1, 1, 1, 0]);
Sensibility to Disturbances and Noise Budget
Identification   ignore

We identify the transfer function from disturbances to the position error of the sample when the HAC-LAC control is applied.

Obtained Sensibility to Disturbances   ignore
Simulations of Tomography Experiment

Let's now simulate a tomography experiment. To do so, we include all disturbances except vibrations of the translation stage.

  initializeDisturbances();
  initializeSimscapeConfiguration('gravity', false);
  initializeLoggingConfiguration('log', 'all');

And we run the simulation for all three payload Masses.

Results

Direct Velocity Feedback with Amplified Actuators

Lack of collocation.

  initializeController('type', 'hac-dvf');
  K = tf(zeros(6));
  Kdvf = tf(zeros(6));

We identify the system for the following payload masses:

  Ms = [1, 10, 50];
  initializeNanoHexapod('actuator', 'amplified', ...
                        'k1', 1e4, ...
                        'ke', 1e6, ...
                        'ka', 1e6);

APA300ML

Initialization

  initializeGround();
  initializeGranite();
  initializeTy();
  initializeRy();
  initializeRz();
  initializeMicroHexapod();
  initializeAxisc();
  initializeMirror();

  initializeSimscapeConfiguration();
  initializeDisturbances('enable', false);
  initializeLoggingConfiguration('log', 'none');

  initializeController('type', 'hac-dvf');

We set the stiffness of the payload fixation:

  Kp = 1e8; % [N/m]

Identification

  K = tf(zeros(6));
  Kdvf = tf(zeros(6));

We identify the system for the following payload masses:

  Ms = [1, 10, 50];

The nano-hexapod has the following leg's stiffness and damping.

  initializeNanoHexapod('actuator', 'amplified', 'k1', 0.4e6, 'ka', 43e6, 'ke', 1.5e6);

Controller Design

Damping as function of the gain

Finally, we use the following controller for the Decentralized Direct Velocity Feedback:

  Kdvf = 5e5*s/(1+s/2/pi/1e3)*eye(6);

Effect of the Low Authority Control on the Primary Plant

Introduction   ignore

Identification of the undamped plant   ignore

Identification of the damped plant   ignore

Effect of the Damping on the plant diagonal dynamics   ignore

Control in the leg space

We design a diagonal controller with all the same diagonal elements.

The requirements for the controller are:

  • Crossover frequency of around 100Hz
  • Stable for all the considered payload masses
  • Sufficient phase and gain margin
  • Integral action at low frequency

The design controller is as follows:

  • Lead centered around the crossover
  • An integrator below 10Hz
  • A low pass filter at 250Hz
  h = 2.0;
  Kl = 1e9 * eye(6) * ...
       1/h*(s/(2*pi*100/h) + 1)/(s/(2*pi*100*h) + 1) * ...
       1/h*(s/(2*pi*200/h) + 1)/(s/(2*pi*200*h) + 1) * ...
       (s/2/pi/10 + 1)/(s/2/pi/10) * ...
       1/(1 + s/2/pi/300);
  load('mat/stages.mat', 'nano_hexapod');
  K = Kl*nano_hexapod.kinematics.J*diag([1, 1, 1, 1, 1, 0]);

Sensibility to Disturbances and Noise Budget

Identification   ignore

We identify the transfer function from disturbances to the position error of the sample when the HAC-LAC control is applied.

Obtained Sensibility to Disturbances   ignore

Noise Budgeting   ignore

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/opt_stiff_primary_control_L_psd_dist.png

Amplitude Spectral Density of the vertical position error of the sample when the HAC-DVF control is applied due to both the ground motion and spindle vibrations

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/opt_stiff_primary_control_L_psd_tot.png

Amplitude Spectral Density of the vertical position error of the sample in Open-Loop and when the HAC-DVF control is applied

/tdehaeze/nass-simscape/media/commit/5789df621b6938798e4e5302fad25806af2f0d09/org/figs/opt_stiff_primary_control_L_cas_tot.png

Cumulative Amplitude Spectrum of the vertical position error of the sample in Open-Loop and when the HAC-DVF control is applied

Simulations of Tomography Experiment

Let's now simulate a tomography experiment. To do so, we include all disturbances except vibrations of the translation stage.

  initializeDisturbances();
  initializeSimscapeConfiguration('gravity', false);
  initializeLoggingConfiguration('log', 'all');

And we run the simulation for all three payload Masses.

Results