100 KiB
Amplified Piezoelectric Stack Actuator
- Introduction
- Simplified Model
- Rotating X-Y platform
- Stewart Platform with Amplified Actuators
- Initialization
- APA-100 Amplified Actuator
- Optimal Stiffnesses
- Direct Velocity Feedback with Amplified Actuators
- APA300ML
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.
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 |
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'};
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'};
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
Root Locus
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
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.
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
Effect of the Damping on the coupling dynamics ignore
Effect of the Low Authority Control on the Sensibility to Disturbances
Introduction ignore
Identification ignore
Results ignore
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);
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
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
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.