Amplified Piezoelectric Stack Actuator
+Table of Contents
+ ++The presented model is based on souleille18_concep_activ_mount_space_applic. +
+ ++The model represents the amplified piezo APA100M from Cedrat-Technologies (Figure 1). +The parameters are shown in the table below. +
+ + ++
+Figure 1: 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 | +
1 Simplified Model
+1.1 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; ++
1.2 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'}; ++
+
+Figure 2: Matrix of transfer functions from input to output in open loop (blue) and closed loop (red)
+1.3 Root Locus
++
+Figure 3: Root Locus
+2 Rotating X-Y platform
+2.1 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); ++
2.2 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 ++
+
+Figure 4: Transfer function matrix from forces to force sensors for multiple rotation speed
+2.3 Root Locus
++
+Figure 5: Root locus for 3 rotating speed
+2.4 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 ++
+
+Figure 6: Root Locus for the two considered rotation speed. For the red curve, the system is unstable.
+