Update analytical model

This commit is contained in:
2020-05-25 10:45:43 +02:00
parent 5a157db8a1
commit c211b1684f
12 changed files with 1334 additions and 879 deletions
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 166 KiB

BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
+582
View File
@@ -0,0 +1,582 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-05-25 lun. 10:45 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Amplified Piezoelectric Stack Actuator</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<script src="./js/jquery.min.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/jquery.stickytableheaders.min.js"></script>
<script src="./js/readtheorg.js"></script>
<script>MathJax = {
tex: {
tags: 'ams',
macros: {bm: ["\\boldsymbol{#1}",1],}
}
};
</script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
<a accesskey="H" href="./index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Amplified Piezoelectric Stack Actuator</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org8dcb67f">1. Simplified Model</a>
<ul>
<li><a href="#org3b87947">1.1. Parameters</a></li>
<li><a href="#org81d8607">1.2. Identification</a></li>
<li><a href="#orged55dcf">1.3. Root Locus</a></li>
<li><a href="#org02c2e3f">1.4. Analytical Model</a></li>
</ul>
</li>
<li><a href="#org7b08cc3">2. Rotating X-Y platform</a>
<ul>
<li><a href="#org4add324">2.1. Parameters</a></li>
<li><a href="#org8192181">2.2. Identification</a></li>
<li><a href="#org7675381">2.3. Root Locus</a></li>
<li><a href="#org8634d85">2.4. Analysis</a></li>
</ul>
</li>
<li><a href="#orga0a1938">3. Stewart Platform with Amplified Actuators</a>
<ul>
<li><a href="#org1eb7bf5">3.1. Initialization</a></li>
<li><a href="#org31d938a">3.2. Identification</a></li>
<li><a href="#org4dbdefd">3.3. Controller Design</a></li>
<li><a href="#orga2cff39">3.4. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#orgf448298">3.5. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li>
<li><a href="#org781f74e">3.6. Optimal Stiffnesses</a></li>
</ul>
</li>
</ul>
</div>
</div>
<p>
The presented model is based on <a class='org-ref-reference' href="#souleille18_concep_activ_mount_space_applic">souleille18_concep_activ_mount_space_applic</a>.
</p>
<p>
The model represents the amplified piezo APA100M from Cedrat-Technologies (Figure <a href="#orgb0a1ae8">1</a>).
The parameters are shown in the table below.
</p>
<div id="orgb0a1ae8" class="figure">
<p><img src="./figs/souleille18_model_piezo.png" alt="souleille18_model_piezo.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Picture of an APA100M from Cedrat Technologies. Simplified model of a one DoF payload mounted on such isolator</p>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Parameters used for the model of the APA 100M</caption>
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left">Value</th>
<th scope="col" class="org-left">Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">\(m\)</td>
<td class="org-left">\(1\,[kg]\)</td>
<td class="org-left">Payload mass</td>
</tr>
<tr>
<td class="org-left">\(k_e\)</td>
<td class="org-left">\(4.8\,[N/\mu m]\)</td>
<td class="org-left">Stiffness used to adjust the pole of the isolator</td>
</tr>
<tr>
<td class="org-left">\(k_1\)</td>
<td class="org-left">\(0.96\,[N/\mu m]\)</td>
<td class="org-left">Stiffness of the metallic suspension when the stack is removed</td>
</tr>
<tr>
<td class="org-left">\(k_a\)</td>
<td class="org-left">\(65\,[N/\mu m]\)</td>
<td class="org-left">Stiffness of the actuator</td>
</tr>
<tr>
<td class="org-left">\(c_1\)</td>
<td class="org-left">\(10\,[N/(m/s)]\)</td>
<td class="org-left">Added viscous damping</td>
</tr>
</tbody>
</table>
<div id="outline-container-org8dcb67f" class="outline-2">
<h2 id="org8dcb67f"><span class="section-number-2">1</span> Simplified Model</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-org3b87947" class="outline-3">
<h3 id="org3b87947"><span class="section-number-3">1.1</span> Parameters</h3>
<div class="outline-text-3" id="text-1-1">
<div class="org-src-container">
<pre class="src src-matlab">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]
</pre>
</div>
<p>
IFF Controller:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kiff = -8000/s;
</pre>
</div>
</div>
</div>
<div id="outline-container-org81d8607" class="outline-3">
<h3 id="org81d8607"><span class="section-number-3">1.2</span> Identification</h3>
<div class="outline-text-3" id="text-1-2">
<p>
Identification in open-loop.
</p>
<div class="org-src-container">
<pre class="src src-matlab">%% 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'};
</pre>
</div>
<p>
Identification in closed-loop.
</p>
<div class="org-src-container">
<pre class="src src-matlab">%% 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'};
</pre>
</div>
<div id="org6546639" class="figure">
<p><img src="figs/amplified_piezo_tf_ol_and_cl.png" alt="amplified_piezo_tf_ol_and_cl.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Matrix of transfer functions from input to output in open loop (blue) and closed loop (red)</p>
</div>
</div>
</div>
<div id="outline-container-orged55dcf" class="outline-3">
<h3 id="orged55dcf"><span class="section-number-3">1.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-1-3">
<div id="org8832ee2" class="figure">
<p><img src="figs/amplified_piezo_root_locus.png" alt="amplified_piezo_root_locus.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Root Locus</p>
</div>
</div>
</div>
<div id="outline-container-org02c2e3f" class="outline-3">
<h3 id="org02c2e3f"><span class="section-number-3">1.4</span> Analytical Model</h3>
<div class="outline-text-3" id="text-1-4">
<p>
If we apply the Newton&rsquo;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) \]
</p>
<p>
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 \]
</p>
<p>
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) \]
</p>
<div class="org-src-container">
<pre class="src src-matlab">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'};
</pre>
</div>
<div id="orgc2707e4" class="figure">
<p><img src="figs/comp_simscape_analytical.png" alt="comp_simscape_analytical.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Comparison of the Identified Simscape Dynamics (solid) and the Analytical Model (dashed)</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org7b08cc3" class="outline-2">
<h2 id="org7b08cc3"><span class="section-number-2">2</span> Rotating X-Y platform</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-org4add324" class="outline-3">
<h3 id="org4add324"><span class="section-number-3">2.1</span> Parameters</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-matlab">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]
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Kiff = tf(0);
</pre>
</div>
</div>
</div>
<div id="outline-container-org8192181" class="outline-3">
<h3 id="org8192181"><span class="section-number-3">2.2</span> Identification</h3>
<div class="outline-text-3" id="text-2-2">
<p>
Rotating speed in rad/s:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ws = 2*pi*[0, 1, 10, 100];
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Gs = {zeros(length(Ws), 1)};
</pre>
</div>
<p>
Identification in open-loop.
</p>
<div class="org-src-container">
<pre class="src src-matlab">%% 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
</pre>
</div>
<div id="org89aafdf" class="figure">
<p><img src="figs/amplitifed_piezo_xy_rotation_plant_iff.png" alt="amplitifed_piezo_xy_rotation_plant_iff.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Transfer function matrix from forces to force sensors for multiple rotation speed</p>
</div>
</div>
</div>
<div id="outline-container-org7675381" class="outline-3">
<h3 id="org7675381"><span class="section-number-3">2.3</span> Root Locus</h3>
<div class="outline-text-3" id="text-2-3">
<div id="org0e2ba71" class="figure">
<p><img src="figs/amplified_piezo_xy_rotation_root_locus.png" alt="amplified_piezo_xy_rotation_root_locus.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Root locus for 3 rotating speed</p>
</div>
</div>
</div>
<div id="outline-container-org8634d85" class="outline-3">
<h3 id="org8634d85"><span class="section-number-3">2.4</span> Analysis</h3>
<div class="outline-text-3" id="text-2-4">
<p>
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] \]
</p>
<p>
Let&rsquo;s verify that.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ws = 2*pi*[140, 160];
</pre>
</div>
<p>
Identification
</p>
<div class="org-src-container">
<pre class="src src-matlab">%% 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
</pre>
</div>
<div id="orgb32e2be" class="figure">
<p><img src="figs/amplified_piezo_xy_rotating_unstable_root_locus.png" alt="amplified_piezo_xy_rotating_unstable_root_locus.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Root Locus for the two considered rotation speed. For the red curve, the system is unstable.</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orga0a1938" class="outline-2">
<h2 id="orga0a1938"><span class="section-number-2">3</span> Stewart Platform with Amplified Actuators</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-org1eb7bf5" class="outline-3">
<h3 id="org1eb7bf5"><span class="section-number-3">3.1</span> Initialization</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-matlab">initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeSimscapeConfiguration();
initializeDisturbances('enable', false);
initializeLoggingConfiguration('log', 'none');
initializeController('type', 'hac-iff');
</pre>
</div>
<p>
We set the stiffness of the payload fixation:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kp = 1e8; % [N/m]
</pre>
</div>
</div>
</div>
<div id="outline-container-org31d938a" class="outline-3">
<h3 id="org31d938a"><span class="section-number-3">3.2</span> Identification</h3>
<div class="outline-text-3" id="text-3-2">
<div class="org-src-container">
<pre class="src src-matlab">K = tf(zeros(6));
Kiff = tf(zeros(6));
</pre>
</div>
<p>
We identify the system for the following payload masses:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ms = [1, 10, 50];
</pre>
</div>
<p>
The nano-hexapod has the following leg&rsquo;s stiffness and damping.
</p>
<div class="org-src-container">
<pre class="src src-matlab">initializeNanoHexapod('actuator', 'amplified');
</pre>
</div>
</div>
</div>
<div id="outline-container-org4dbdefd" class="outline-3">
<h3 id="org4dbdefd"><span class="section-number-3">3.3</span> Controller Design</h3>
<div class="outline-text-3" id="text-3-3">
<div id="org4b286db" class="figure">
<p><img src="figs/amplified_piezo_iff_loop_gain.png" alt="amplified_piezo_iff_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Dynamics for the Integral Force Feedback for three payload masses</p>
</div>
<div id="org85ffb18" class="figure">
<p><img src="figs/amplified_piezo_iff_root_locus.png" alt="amplified_piezo_iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Root Locus for the IFF control for three payload masses</p>
</div>
<p>
Damping as function of the gain
</p>
<div id="orgd336750" class="figure">
<p><img src="figs/amplified_piezo_iff_damping_gain.png" alt="amplified_piezo_iff_damping_gain.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Damping ratio of the poles as a function of the IFF gain</p>
</div>
<p>
Finally, we use the following controller for the Decentralized Direct Velocity Feedback:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kiff = -1e4/s*eye(6);
</pre>
</div>
</div>
</div>
<div id="outline-container-orga2cff39" class="outline-3">
<h3 id="orga2cff39"><span class="section-number-3">3.4</span> Effect of the Low Authority Control on the Primary Plant</h3>
<div class="outline-text-3" id="text-3-4">
<div id="orgf3eee4b" class="figure">
<p><img src="figs/amplified_piezo_iff_plant_damped_X.png" alt="amplified_piezo_iff_plant_damped_X.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Primary plant in the task space with (dashed) and without (solid) IFF</p>
</div>
<div id="orgdabfde7" class="figure">
<p><img src="figs/amplified_piezo_iff_damped_plant_L.png" alt="amplified_piezo_iff_damped_plant_L.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Primary plant in the space of the legs with (dashed) and without (solid) IFF</p>
</div>
<div id="orgf756d9c" class="figure">
<p><img src="figs/amplified_piezo_iff_damped_coupling_X.png" alt="amplified_piezo_iff_damped_coupling_X.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Coupling in the primary plant in the task with (dashed) and without (solid) IFF</p>
</div>
<div id="org1dc0d4a" class="figure">
<p><img src="figs/amplified_piezo_iff_damped_coupling_L.png" alt="amplified_piezo_iff_damped_coupling_L.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Coupling in the primary plant in the space of the legs with (dashed) and without (solid) IFF</p>
</div>
</div>
</div>
<div id="outline-container-orgf448298" class="outline-3">
<h3 id="orgf448298"><span class="section-number-3">3.5</span> Effect of the Low Authority Control on the Sensibility to Disturbances</h3>
<div class="outline-text-3" id="text-3-5">
<div id="org982cf72" class="figure">
<p><img src="figs/amplified_piezo_iff_disturbances.png" alt="amplified_piezo_iff_disturbances.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Norm of the transfer function from vertical disturbances to vertical position error with (dashed) and without (solid) Integral Force Feedback applied</p>
</div>
<div class="important">
</div>
</div>
</div>
<div id="outline-container-org781f74e" class="outline-3">
<h3 id="org781f74e"><span class="section-number-3">3.6</span> Optimal Stiffnesses</h3>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-05-25 lun. 10:45</p>
</div>
</body>
</html>
+1 -2
View File
@@ -200,7 +200,7 @@ exportFig('figs/amplified_piezo_root_locus.pdf', 'width', 'wide', 'height', 'tal
#+RESULTS: #+RESULTS:
[[file:figs/amplified_piezo_root_locus.png]] [[file:figs/amplified_piezo_root_locus.png]]
** Analytical Results ** Analytical Model
If we apply the Newton's second law of motion on the top mass, we obtain: 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) \] \[ ms^2 x_1 = F + k_1 (w - x_1) + k_e (x_e - x_1) \]
@@ -542,7 +542,6 @@ Identification
open('nass_model.slx') open('nass_model.slx')
#+end_src #+end_src
** Initialization ** Initialization
#+begin_src matlab #+begin_src matlab
initializeGround(); initializeGround();