nass-simscape/docs/amplified_piezoelectric_stack.html

1059 lines
46 KiB
HTML
Raw Permalink Normal View History

2020-05-20 15:49:43 +02:00
<?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>
2021-02-20 23:09:27 +01:00
<!-- 2021-02-20 sam. 23:08 -->
2020-05-20 15:49:43 +02:00
<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" />
2021-02-20 23:09:27 +01:00
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
<script>
MathJax = {
svg: {
scale: 1,
fontCache: "global"
},
tex: {
tags: "ams",
multlineWidth: "%MULTLINEWIDTH",
tagSide: "right",
macros: {bm: ["\\boldsymbol{#1}",1],},
tagIndent: ".8em"
}
};
</script>
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
2020-05-20 15:49:43 +02:00
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="./index.html"> UP </a>
|
2021-02-20 23:09:27 +01:00
<a accesskey="H" href="../../index.html"> HOME </a>
2020-05-20 15:49:43 +02:00
</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>
2021-02-20 23:09:27 +01:00
<li><a href="#org1bc5fe4">1. Simplified Model</a>
2020-05-20 15:49:43 +02:00
<ul>
2021-02-20 23:09:27 +01:00
<li><a href="#orgf3ed177">1.1. Parameters</a></li>
<li><a href="#org0a66657">1.2. Identification</a></li>
<li><a href="#orga1c354d">1.3. Root Locus</a></li>
<li><a href="#orge088eac">1.4. Analytical Model</a></li>
<li><a href="#org4c2db1d">1.5. Analytical Analysis</a></li>
2020-05-20 15:49:43 +02:00
</ul>
</li>
2021-02-20 23:09:27 +01:00
<li><a href="#org7863652">2. Rotating X-Y platform</a>
2020-05-20 15:49:43 +02:00
<ul>
2021-02-20 23:09:27 +01:00
<li><a href="#org71a928c">2.1. Parameters</a></li>
<li><a href="#org1590b14">2.2. Identification</a></li>
<li><a href="#orgf236995">2.3. Root Locus</a></li>
<li><a href="#org7d91e6b">2.4. Analysis</a></li>
2020-05-20 15:49:43 +02:00
</ul>
</li>
2021-02-20 23:09:27 +01:00
<li><a href="#orgb00a17f">3. Stewart Platform with Amplified Actuators</a>
2020-05-20 16:41:34 +02:00
<ul>
2021-02-20 23:09:27 +01:00
<li><a href="#orgf380cc9">3.1. Initialization</a></li>
<li><a href="#org76128b7">3.2. APA-100 Amplified Actuator</a>
2020-09-01 13:51:37 +02:00
<ul>
2021-02-20 23:09:27 +01:00
<li><a href="#orgb29b9fd">3.2.1. Identification</a></li>
<li><a href="#orgce15cc5">3.2.2. Controller Design</a></li>
<li><a href="#org641c18d">3.2.3. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#org651e695">3.2.4. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li>
2020-09-01 13:51:37 +02:00
</ul>
</li>
2021-02-20 23:09:27 +01:00
<li><a href="#orgedaa0e4">3.3. Optimal Stiffnesses</a>
2020-09-01 13:51:37 +02:00
<ul>
2021-02-20 23:09:27 +01:00
<li><a href="#org4fc2971">3.3.1. Low Authority Controller</a>
2020-09-01 13:51:37 +02:00
<ul>
2021-02-20 23:09:27 +01:00
<li><a href="#org1d50646">3.3.1.1. Identification</a></li>
<li><a href="#orgf4a5e42">3.3.1.2. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#orgcacb9e3">3.3.1.3. Effect of the Low Authority Control on the Sensibility to Disturbances</a></li>
2020-09-01 13:51:37 +02:00
</ul>
</li>
2021-02-20 23:09:27 +01:00
<li><a href="#orgadee53f">3.3.2. High Authority Controller</a>
2020-09-01 13:51:37 +02:00
<ul>
2021-02-20 23:09:27 +01:00
<li><a href="#org6ea1bc6">3.3.2.1. Controller Design</a></li>
<li><a href="#orged3be1e">3.3.2.2. Sensibility to Disturbances and Noise Budget</a></li>
<li><a href="#org7901ed6">3.3.2.3. Simulations of Tomography Experiment</a></li>
<li><a href="#org408654e">3.3.2.4. Results</a></li>
2020-09-01 13:51:37 +02:00
</ul>
</li>
</ul>
</li>
2021-02-20 23:09:27 +01:00
<li><a href="#org34fa458">3.4. Direct Velocity Feedback with Amplified Actuators</a></li>
2020-09-01 13:51:37 +02:00
</ul>
</li>
2021-02-20 23:09:27 +01:00
<li><a href="#orge30c7fc">4. APA300ML</a>
2020-09-01 13:51:37 +02:00
<ul>
2021-02-20 23:09:27 +01:00
<li><a href="#orge17e289">4.1. Initialization</a></li>
<li><a href="#org29c4dc3">4.2. Identification</a></li>
<li><a href="#org935ae34">4.3. Controller Design</a></li>
<li><a href="#orgfc3d208">4.4. Effect of the Low Authority Control on the Primary Plant</a></li>
<li><a href="#org0528c8d">4.5. Control in the leg space</a></li>
<li><a href="#org7a01c94">4.6. Sensibility to Disturbances and Noise Budget</a></li>
<li><a href="#org7718f2d">4.7. Simulations of Tomography Experiment</a></li>
<li><a href="#org813c903">4.8. Results</a></li>
2020-05-20 16:41:34 +02:00
</ul>
</li>
2020-05-20 15:49:43 +02:00
</ul>
</div>
</div>
<p>
2020-09-01 13:51:37 +02:00
The presented model is based on (<a href="#citeproc_bib_item_2">Souleille et al. 2018</a>).
2020-05-20 15:49:43 +02:00
</p>
<p>
2021-02-20 23:09:27 +01:00
The model represents the amplified piezo APA100M from Cedrat-Technologies (Figure <a href="#orgd28d9f1">1</a>).
2020-05-20 15:49:43 +02:00
The parameters are shown in the table below.
</p>
2021-02-20 23:09:27 +01:00
<div id="orgd28d9f1" class="figure">
2020-05-20 15:49:43 +02:00
<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>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org1bc5fe4" class="outline-2">
<h2 id="org1bc5fe4"><span class="section-number-2">1</span> Simplified Model</h2>
2020-05-20 15:49:43 +02:00
<div class="outline-text-2" id="text-1">
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgf3ed177" class="outline-3">
<h3 id="orgf3ed177"><span class="section-number-3">1.1</span> Parameters</h3>
2020-05-20 15:49:43 +02:00
<div class="outline-text-3" id="text-1-1">
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> m = 1; <span class="org-comment">% [kg]</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
ke = 4.8e6; <span class="org-comment">% [N/m]</span>
ce = 5; <span class="org-comment">% [N/(m/s)]</span>
me = 0.001; <span class="org-comment">% [kg]</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
k1 = 0.96e6; <span class="org-comment">% [N/m]</span>
c1 = 10; <span class="org-comment">% [N/(m/s)]</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
ka = 65e6; <span class="org-comment">% [N/m]</span>
ca = 5; <span class="org-comment">% [N/(m/s)]</span>
ma = 0.001; <span class="org-comment">% [kg]</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
h = 0.2; <span class="org-comment">% [m]</span>
2020-05-20 15:49:43 +02:00
</pre>
</div>
<p>
IFF Controller:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Kiff = <span class="org-type">-</span>8000<span class="org-type">/</span>s;
2020-05-20 15:49:43 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org0a66657" class="outline-3">
<h3 id="org0a66657"><span class="section-number-3">1.2</span> Identification</h3>
2020-05-20 15:49:43 +02:00
<div class="outline-text-3" id="text-1-2">
<p>
Identification in open-loop.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> <span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'amplified_piezo_model'</span>;
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/w'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Base Motion</span>
io(io_i) = linio([mdl, <span class="org-string">'/f'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/F'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% External Force</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
io(io_i) = linio([mdl, <span class="org-string">'/Fs'</span>], 3, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span>
io(io_i) = linio([mdl, <span class="org-string">'/x1'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Mass displacement</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
G = linearize(mdl, io, 0);
G.InputName = {<span class="org-string">'w'</span>, <span class="org-string">'f'</span>, <span class="org-string">'F'</span>};
G.OutputName = {<span class="org-string">'Fs'</span>, <span class="org-string">'x1'</span>};
2020-05-20 15:49:43 +02:00
</pre>
</div>
<p>
Identification in closed-loop.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> <span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'amplified_piezo_model'</span>;
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/w'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Base Motion</span>
io(io_i) = linio([mdl, <span class="org-string">'/f'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Inputs</span>
io(io_i) = linio([mdl, <span class="org-string">'/F'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% External Force</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
io(io_i) = linio([mdl, <span class="org-string">'/Fs'</span>], 3, <span class="org-string">'output'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Force Sensors</span>
io(io_i) = linio([mdl, <span class="org-string">'/x1'</span>], 1, <span class="org-string">'output'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Mass displacement</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
Giff = linearize(mdl, io, 0);
Giff.InputName = {<span class="org-string">'w'</span>, <span class="org-string">'f'</span>, <span class="org-string">'F'</span>};
Giff.OutputName = {<span class="org-string">'Fs'</span>, <span class="org-string">'x1'</span>};
2020-05-20 15:49:43 +02:00
</pre>
</div>
2021-02-20 23:09:27 +01:00
<div id="org089eae6" class="figure">
2020-05-20 15:49:43 +02:00
<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>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orga1c354d" class="outline-3">
<h3 id="orga1c354d"><span class="section-number-3">1.3</span> Root Locus</h3>
2020-05-20 15:49:43 +02:00
<div class="outline-text-3" id="text-1-3">
2021-02-20 23:09:27 +01:00
<div id="org68e87fb" class="figure">
2020-05-20 15:49:43 +02:00
<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>
2020-05-25 11:13:54 +02:00
2021-02-20 23:09:27 +01:00
<div id="outline-container-orge088eac" class="outline-3">
<h3 id="orge088eac"><span class="section-number-3">1.4</span> Analytical Model</h3>
2020-05-25 11:13:54 +02:00
<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">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Ga = 1<span class="org-type">/</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> k1 <span class="org-type">+</span> ke<span class="org-type">*</span>ka<span class="org-type">/</span>(ke <span class="org-type">+</span> ka)) <span class="org-type">*</span> ...
[ 1 , k1 <span class="org-type">+</span> ke<span class="org-type">*</span>ka<span class="org-type">/</span>(ke <span class="org-type">+</span> ka) , ke<span class="org-type">/</span>(ke <span class="org-type">+</span> ka) ;
<span class="org-type">-</span>ke<span class="org-type">*</span>ka<span class="org-type">/</span>(ke <span class="org-type">+</span> ka), ke<span class="org-type">*</span>ka<span class="org-type">/</span>(ke <span class="org-type">+</span> ka)<span class="org-type">*</span>m<span class="org-type">*</span>s<span class="org-type">^</span>2 , <span class="org-type">-</span>ke<span class="org-type">/</span>(ke<span class="org-type">+</span>ka)<span class="org-type">*</span>(m<span class="org-type">*</span>s<span class="org-type">^</span>2 <span class="org-type">+</span> k1)];
Ga.InputName = {<span class="org-string">'F'</span>, <span class="org-string">'w'</span>, <span class="org-string">'f'</span>};
Ga.OutputName = {<span class="org-string">'x1'</span>, <span class="org-string">'Fs'</span>};
2020-05-25 11:13:54 +02:00
</pre>
</div>
2021-02-20 23:09:27 +01:00
<div id="org7aca3c8" class="figure">
2020-05-25 11:13:54 +02:00
<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>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org4c2db1d" class="outline-3">
<h3 id="org4c2db1d"><span class="section-number-3">1.5</span> Analytical Analysis</h3>
2020-05-25 11:13:54 +02:00
<div class="outline-text-3" id="text-1-5">
<p>
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) \]
</p>
<p>
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}} \]
</p>
<p>
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}} \]
</p>
<p>
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}\)).
</p>
2020-09-01 13:51:37 +02:00
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> m = 1;
k1 = 1e6;
ka = 1e6;
ke = 1e6;
2020-09-01 13:51:37 +02:00
2021-02-20 23:09:27 +01:00
Giff.InputName = {<span class="org-string">'f'</span>};
Giff.OutputName = {<span class="org-string">'Fs'</span>};
2020-09-01 13:51:37 +02:00
</pre>
</div>
2020-05-25 11:13:54 +02:00
</div>
</div>
2020-05-20 15:49:43 +02:00
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org7863652" class="outline-2">
<h2 id="org7863652"><span class="section-number-2">2</span> Rotating X-Y platform</h2>
2020-05-20 15:49:43 +02:00
<div class="outline-text-2" id="text-2">
2020-09-01 13:51:37 +02:00
<p>
This analysis gave rise to a paper (<a href="#citeproc_bib_item_1">Dehaeze and Collette 2020</a>).
</p>
2020-05-20 15:49:43 +02:00
</div>
2020-09-01 13:51:37 +02:00
2021-02-20 23:09:27 +01:00
<div id="outline-container-org71a928c" class="outline-3">
<h3 id="org71a928c"><span class="section-number-3">2.1</span> Parameters</h3>
2020-05-20 15:49:43 +02:00
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> m = 1; <span class="org-comment">% [kg]</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
ke = 4.8e6; <span class="org-comment">% [N/m]</span>
ce = 5; <span class="org-comment">% [N/(m/s)]</span>
me = 0.001; <span class="org-comment">% [kg]</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
k1 = 0.96e6; <span class="org-comment">% [N/m]</span>
c1 = 10; <span class="org-comment">% [N/(m/s)]</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
ka = 65e6; <span class="org-comment">% [N/m]</span>
ca = 5; <span class="org-comment">% [N/(m/s)]</span>
ma = 0.001; <span class="org-comment">% [kg]</span>
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
h = 0.2; <span class="org-comment">% [m]</span>
2020-05-20 15:49:43 +02:00
</pre>
</div>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Kiff = tf(0);
2020-05-20 15:49:43 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org1590b14" class="outline-3">
<h3 id="org1590b14"><span class="section-number-3">2.2</span> Identification</h3>
2020-05-20 15:49:43 +02:00
<div class="outline-text-3" id="text-2-2">
<p>
Rotating speed in rad/s:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Ws = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>[0, 1, 10, 100];
2020-05-20 15:49:43 +02:00
</pre>
</div>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Gs = {zeros(length(Ws), 1)};
2020-05-20 15:49:43 +02:00
</pre>
</div>
<p>
Identification in open-loop.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> <span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'amplified_piezo_xy_rotating_stage'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/fx'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/fy'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Fs'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Fs'</span>], 2, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ws)</span>
ws = Ws(<span class="org-constant">i</span>);
G = linearize(mdl, io, 0);
G.InputName = {<span class="org-string">'fx'</span>, <span class="org-string">'fy'</span>};
G.OutputName = {<span class="org-string">'Fsx'</span>, <span class="org-string">'Fsy'</span>};
Gs(<span class="org-constant">i</span>) = {G};
<span class="org-keyword">end</span>
2020-05-20 15:49:43 +02:00
</pre>
</div>
2021-02-20 23:09:27 +01:00
<div id="orga1d1d56" class="figure">
2020-05-20 15:49:43 +02:00
<p><img src="figs/amplitifed_piezo_xy_rotation_plant_iff.png" alt="amplitifed_piezo_xy_rotation_plant_iff.png" />
</p>
2020-05-25 11:13:54 +02:00
<p><span class="figure-number">Figure 5: </span>Transfer function matrix from forces to force sensors for multiple rotation speed</p>
2020-05-20 15:49:43 +02:00
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgf236995" class="outline-3">
<h3 id="orgf236995"><span class="section-number-3">2.3</span> Root Locus</h3>
2020-05-20 15:49:43 +02:00
<div class="outline-text-3" id="text-2-3">
2021-02-20 23:09:27 +01:00
<div id="orga4f747e" class="figure">
2020-05-20 15:49:43 +02:00
<p><img src="figs/amplified_piezo_xy_rotation_root_locus.png" alt="amplified_piezo_xy_rotation_root_locus.png" />
</p>
2020-05-25 11:13:54 +02:00
<p><span class="figure-number">Figure 6: </span>Root locus for 3 rotating speed</p>
2020-05-20 15:49:43 +02:00
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org7d91e6b" class="outline-3">
<h3 id="org7d91e6b"><span class="section-number-3">2.4</span> Analysis</h3>
2020-05-20 15:49:43 +02:00
<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">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Ws = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>[140, 160];
2020-05-20 15:49:43 +02:00
</pre>
</div>
<p>
Identification
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> <span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'amplified_piezo_xy_rotating_stage'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/fx'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/fy'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Fs'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
io(io_i) = linio([mdl, <span class="org-string">'/Fs'</span>], 2, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ws)</span>
ws = Ws(<span class="org-constant">i</span>);
G = linearize(mdl, io, 0);
G.InputName = {<span class="org-string">'fx'</span>, <span class="org-string">'fy'</span>};
G.OutputName = {<span class="org-string">'Fsx'</span>, <span class="org-string">'Fsy'</span>};
Gs(<span class="org-constant">i</span>) = {G};
<span class="org-keyword">end</span>
2020-05-20 15:49:43 +02:00
</pre>
</div>
2021-02-20 23:09:27 +01:00
<div id="orgd08023f" class="figure">
2020-05-20 15:49:43 +02:00
<p><img src="figs/amplified_piezo_xy_rotating_unstable_root_locus.png" alt="amplified_piezo_xy_rotating_unstable_root_locus.png" />
</p>
2020-05-25 11:13:54 +02:00
<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>
2020-05-20 15:49:43 +02:00
</div>
</div>
</div>
</div>
2020-05-20 16:41:34 +02:00
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgb00a17f" class="outline-2">
<h2 id="orgb00a17f"><span class="section-number-2">3</span> Stewart Platform with Amplified Actuators</h2>
2020-05-20 16:41:34 +02:00
<div class="outline-text-2" id="text-3">
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgf380cc9" class="outline-3">
<h3 id="orgf380cc9"><span class="section-number-3">3.1</span> Initialization</h3>
2020-05-20 16:41:34 +02:00
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeSimscapeConfiguration();
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-iff'</span>);
2020-05-20 16:41:34 +02:00
</pre>
</div>
<p>
We set the stiffness of the payload fixation:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Kp = 1e8; <span class="org-comment">% [N/m]</span>
2020-05-20 16:41:34 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org76128b7" class="outline-3">
<h3 id="org76128b7"><span class="section-number-3">3.2</span> APA-100 Amplified Actuator</h3>
2020-05-20 16:41:34 +02:00
<div class="outline-text-3" id="text-3-2">
2020-09-01 13:51:37 +02:00
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgb29b9fd" class="outline-4">
<h4 id="orgb29b9fd"><span class="section-number-4">3.2.1</span> Identification</h4>
2020-09-01 13:51:37 +02:00
<div class="outline-text-4" id="text-3-2-1">
2020-05-20 16:41:34 +02:00
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> K = tf(zeros(6));
Kiff = tf(zeros(6));
2020-05-20 16:41:34 +02:00
</pre>
</div>
<p>
We identify the system for the following payload masses:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Ms = [1, 10, 50];
2020-05-20 16:41:34 +02:00
</pre>
</div>
<p>
The nano-hexapod has the following leg&rsquo;s stiffness and damping.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'amplified'</span>);
2020-05-20 16:41:34 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgce15cc5" class="outline-4">
<h4 id="orgce15cc5"><span class="section-number-4">3.2.2</span> Controller Design</h4>
2020-09-01 13:51:37 +02:00
<div class="outline-text-4" id="text-3-2-2">
<p>
2021-02-20 23:09:27 +01:00
The loop gain for IFF is shown in Figure <a href="#org2657515">8</a>.
2020-09-01 13:51:37 +02:00
</p>
<p>
2021-02-20 23:09:27 +01:00
The corresponding root locus is shown in Figure <a href="#org7f5e4ff">9</a>.
2020-09-01 13:51:37 +02:00
</p>
<p>
2021-02-20 23:09:27 +01:00
Finally, the damping as function of the gain is display in Figure <a href="#orgc7f890c">10</a>.
2020-09-01 13:51:37 +02:00
</p>
2020-05-20 16:41:34 +02:00
2021-02-20 23:09:27 +01:00
<div id="org2657515" class="figure">
2020-05-20 16:41:34 +02:00
<p><img src="figs/amplified_piezo_iff_loop_gain.png" alt="amplified_piezo_iff_loop_gain.png" />
</p>
2020-05-25 11:13:54 +02:00
<p><span class="figure-number">Figure 8: </span>Dynamics for the Integral Force Feedback for three payload masses</p>
2020-05-20 16:41:34 +02:00
</div>
2021-02-20 23:09:27 +01:00
<div id="org7f5e4ff" class="figure">
2020-05-20 16:41:34 +02:00
<p><img src="figs/amplified_piezo_iff_root_locus.png" alt="amplified_piezo_iff_root_locus.png" />
</p>
2020-05-25 11:13:54 +02:00
<p><span class="figure-number">Figure 9: </span>Root Locus for the IFF control for three payload masses</p>
2020-05-20 16:41:34 +02:00
</div>
2021-02-20 23:09:27 +01:00
<div id="orgc7f890c" class="figure">
2020-05-20 16:41:34 +02:00
<p><img src="figs/amplified_piezo_iff_damping_gain.png" alt="amplified_piezo_iff_damping_gain.png" />
</p>
2020-05-25 11:13:54 +02:00
<p><span class="figure-number">Figure 10: </span>Damping ratio of the poles as a function of the IFF gain</p>
2020-05-20 16:41:34 +02:00
</div>
<p>
2020-09-01 13:51:37 +02:00
The following controller for the Decentralized Integral Force Feedback is used:
2020-05-20 16:41:34 +02:00
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Kiff = <span class="org-type">-</span>1e4<span class="org-type">/</span>s<span class="org-type">*</span>eye(6);
2020-05-20 16:41:34 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org641c18d" class="outline-4">
<h4 id="org641c18d"><span class="section-number-4">3.2.3</span> Effect of the Low Authority Control on the Primary Plant</h4>
2020-09-01 13:51:37 +02:00
<div class="outline-text-4" id="text-3-2-3">
2021-02-20 23:09:27 +01:00
<div id="orgf19d4fe" class="figure">
<p><img src="figs/amplified_piezo_iff_plant_damped_X.png" alt="amplified_piezo_iff_plant_damped_X.png" />
</p>
2020-05-25 11:13:54 +02:00
<p><span class="figure-number">Figure 11: </span>Primary plant in the task space with (dashed) and without (solid) IFF</p>
</div>
2021-02-20 23:09:27 +01:00
<div id="org69aabd4" class="figure">
<p><img src="figs/amplified_piezo_iff_damped_plant_L.png" alt="amplified_piezo_iff_damped_plant_L.png" />
</p>
2020-05-25 11:13:54 +02:00
<p><span class="figure-number">Figure 12: </span>Primary plant in the space of the legs with (dashed) and without (solid) IFF</p>
</div>
2021-02-20 23:09:27 +01:00
<div id="orgc92d9be" class="figure">
<p><img src="figs/amplified_piezo_iff_damped_coupling_X.png" alt="amplified_piezo_iff_damped_coupling_X.png" />
</p>
2020-05-25 11:13:54 +02:00
<p><span class="figure-number">Figure 13: </span>Coupling in the primary plant in the task with (dashed) and without (solid) IFF</p>
</div>
2021-02-20 23:09:27 +01:00
<div id="org4bf9442" class="figure">
<p><img src="figs/amplified_piezo_iff_damped_coupling_L.png" alt="amplified_piezo_iff_damped_coupling_L.png" />
</p>
2020-05-25 11:13:54 +02:00
<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>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org651e695" class="outline-4">
<h4 id="org651e695"><span class="section-number-4">3.2.4</span> Effect of the Low Authority Control on the Sensibility to Disturbances</h4>
2020-09-01 13:51:37 +02:00
<div class="outline-text-4" id="text-3-2-4">
2021-02-20 23:09:27 +01:00
<div id="orga39acac" class="figure">
<p><img src="figs/amplified_piezo_iff_disturbances.png" alt="amplified_piezo_iff_disturbances.png" />
</p>
2020-05-25 11:13:54 +02:00
<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>
2020-09-01 13:51:37 +02:00
</div>
</div>
<div class="outline-text-3" id="text-3-2">
2021-02-20 23:09:27 +01:00
<div class="important" id="org323cba0">
</div>
</div>
2020-05-20 16:41:34 +02:00
</div>
2020-05-25 11:13:54 +02:00
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgedaa0e4" class="outline-3">
<h3 id="orgedaa0e4"><span class="section-number-3">3.3</span> Optimal Stiffnesses</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-3-3">
<p>
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:
</p>
<ul class="org-ul">
<li>\(k_1\) should be minimized.</li>
<li>\(k_e \approx k_a \approx 10^5 - 10^6\,[N/m]\)</li>
</ul>
<p>
However, this might not be realizable.
</p>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org4fc2971" class="outline-4">
<h4 id="org4fc2971"><span class="section-number-4">3.3.1</span> Low Authority Controller</h4>
2020-09-01 13:51:37 +02:00
<div class="outline-text-4" id="text-3-3-1">
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org1d50646" class="outline-5">
<h5 id="org1d50646"><span class="section-number-5">3.3.1.1</span> Identification</h5>
2020-09-01 13:51:37 +02:00
<div class="outline-text-5" id="text-3-3-1-1">
<p>
The nano-hexapod is initialized with the following parameters:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'amplified'</span>, ...
<span class="org-string">'k1'</span>, 1e4, ...
<span class="org-string">'ke'</span>, 1e6, ...
<span class="org-string">'ka'</span>, 1e6);
2020-09-01 13:51:37 +02:00
</pre>
</div>
<p>
2021-02-20 23:09:27 +01:00
The obtain plan for the IFF control is shown in Figure <a href="#org82a2c28">16</a>.
The associated Root Locus is shown in Figure <a href="#org9888eb5">17</a>.
2020-09-01 13:51:37 +02:00
</p>
<p>
Based on that, the following IFF gain is chosen:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Kiff = <span class="org-type">-</span>1e3<span class="org-type">/</span>s<span class="org-type">*</span>eye(6);
2020-09-01 13:51:37 +02:00
</pre>
</div>
2021-02-20 23:09:27 +01:00
<div id="org82a2c28" class="figure">
2020-09-01 13:51:37 +02:00
<p><img src="figs/amplified_piezo_opt_stiff_iff_plant.png" alt="amplified_piezo_opt_stiff_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Plant dynamics for IFF with the amplified piezoelectric stack actuator</p>
</div>
2021-02-20 23:09:27 +01:00
<div id="org9888eb5" class="figure">
2020-09-01 13:51:37 +02:00
<p><img src="figs/amplified_piezo_opt_stiff_iff_root_locus.png" alt="amplified_piezo_opt_stiff_iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Root Locus for IFF with the amplified piezoelectric stack actuator</p>
</div>
2021-02-20 23:09:27 +01:00
<div id="orgeb57599" class="figure">
2020-09-01 13:51:37 +02:00
<p><img src="figs/amplified_piezo_opt_stiff_gain_damping.png" alt="amplified_piezo_opt_stiff_gain_damping.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Damping of the modes as a function of the IFF gain</p>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgf4a5e42" class="outline-5">
<h5 id="orgf4a5e42"><span class="section-number-5">3.3.1.2</span> Effect of the Low Authority Control on the Primary Plant</h5>
2020-09-01 13:51:37 +02:00
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgcacb9e3" class="outline-5">
<h5 id="orgcacb9e3"><span class="section-number-5">3.3.1.3</span> Effect of the Low Authority Control on the Sensibility to Disturbances</h5>
2020-09-01 13:51:37 +02:00
<div class="outline-text-5" id="text-3-3-1-3">
2021-02-20 23:09:27 +01:00
<div id="orgdd76598" class="figure">
2020-09-01 13:51:37 +02:00
<p><img src="figs/amplified_piezo_opt_stiff_iff_dist.png" alt="amplified_piezo_opt_stiff_iff_dist.png" />
</p>
<p><span class="figure-number">Figure 19: </span>Effect of disturbance with and without IFF</p>
</div>
2021-02-20 23:09:27 +01:00
<div class="important" id="orgd924db8">
2020-09-01 13:51:37 +02:00
<p>
</p>
</div>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgadee53f" class="outline-4">
<h4 id="orgadee53f"><span class="section-number-4">3.3.2</span> High Authority Controller</h4>
2020-09-01 13:51:37 +02:00
<div class="outline-text-4" id="text-3-3-2">
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org6ea1bc6" class="outline-5">
<h5 id="org6ea1bc6"><span class="section-number-5">3.3.2.1</span> Controller Design</h5>
2020-09-01 13:51:37 +02:00
<div class="outline-text-5" id="text-3-3-2-1">
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> h = 2.5;
Kl = 5e6 <span class="org-type">*</span> eye(6) <span class="org-type">*</span> ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>40<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>40<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ...
(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>50 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>50) <span class="org-type">*</span> ...
(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10) <span class="org-type">*</span> ...
1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>200);
2020-09-01 13:51:37 +02:00
</pre>
</div>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Kl = 3e10 <span class="org-type">*</span> eye(6) <span class="org-type">*</span> ...
1<span class="org-type">/</span>s <span class="org-type">*</span> ...
(s<span class="org-type">+</span>0.8)<span class="org-type">/</span>s <span class="org-type">*</span> ...
(s<span class="org-type">+</span>50)<span class="org-type">/</span>(s<span class="org-type">+</span>0.01) <span class="org-type">*</span> ...
(s<span class="org-type">+</span>120)<span class="org-type">/</span>(s<span class="org-type">+</span>1000) <span class="org-type">*</span> ...
(s<span class="org-type">+</span>150)<span class="org-type">/</span>(s<span class="org-type">+</span>1000);
2020-09-01 13:51:37 +02:00
</pre>
</div>
<p>
Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> load(<span class="org-string">'mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>);
K = Kl<span class="org-type">*</span>nano_hexapod.kinematics.J<span class="org-type">*</span>diag([1, 1, 1, 1, 1, 0]);
2020-09-01 13:51:37 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orged3be1e" class="outline-5">
<h5 id="orged3be1e"><span class="section-number-5">3.3.2.2</span> Sensibility to Disturbances and Noise Budget</h5>
2020-09-01 13:51:37 +02:00
<div class="outline-text-5" id="text-3-3-2-2">
<p>
We identify the transfer function from disturbances to the position error of the sample when the HAC-LAC control is applied.
</p>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org7901ed6" class="outline-5">
<h5 id="org7901ed6"><span class="section-number-5">3.3.2.3</span> Simulations of Tomography Experiment</h5>
2020-09-01 13:51:37 +02:00
<div class="outline-text-5" id="text-3-3-2-3">
<p>
Let&rsquo;s now simulate a tomography experiment.
To do so, we include all disturbances except vibrations of the translation stage.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeDisturbances();
initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">false</span>);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
2020-09-01 13:51:37 +02:00
</pre>
</div>
<p>
And we run the simulation for all three payload Masses.
</p>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org408654e" class="outline-5">
<h5 id="org408654e"><span class="section-number-5">3.3.2.4</span> Results</h5>
2020-09-01 13:51:37 +02:00
</div>
</div>
2020-05-25 11:13:54 +02:00
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org34fa458" class="outline-3">
<h3 id="org34fa458"><span class="section-number-3">3.4</span> Direct Velocity Feedback with Amplified Actuators</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-3-4">
<p>
Lack of collocation.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>);
K = tf(zeros(6));
Kdvf = tf(zeros(6));
2020-09-01 13:51:37 +02:00
</pre>
</div>
<p>
We identify the system for the following payload masses:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Ms = [1, 10, 50];
2020-09-01 13:51:37 +02:00
</pre>
</div>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'amplified'</span>, ...
<span class="org-string">'k1'</span>, 1e4, ...
<span class="org-string">'ke'</span>, 1e6, ...
<span class="org-string">'ka'</span>, 1e6);
2020-09-01 13:51:37 +02:00
</pre>
</div>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orge30c7fc" class="outline-2">
<h2 id="orge30c7fc"><span class="section-number-2">4</span> APA300ML</h2>
2020-09-01 13:51:37 +02:00
<div class="outline-text-2" id="text-4">
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orge17e289" class="outline-3">
<h3 id="orge17e289"><span class="section-number-3">4.1</span> Initialization</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeSimscapeConfiguration();
initializeDisturbances(<span class="org-string">'enable'</span>, <span class="org-constant">false</span>);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'none'</span>);
initializeController(<span class="org-string">'type'</span>, <span class="org-string">'hac-dvf'</span>);
2020-09-01 13:51:37 +02:00
</pre>
</div>
<p>
We set the stiffness of the payload fixation:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Kp = 1e8; <span class="org-comment">% [N/m]</span>
2020-09-01 13:51:37 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org29c4dc3" class="outline-3">
<h3 id="org29c4dc3"><span class="section-number-3">4.2</span> Identification</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-4-2">
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> K = tf(zeros(6));
Kdvf = tf(zeros(6));
2020-09-01 13:51:37 +02:00
</pre>
</div>
<p>
We identify the system for the following payload masses:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Ms = [1, 10, 50];
2020-09-01 13:51:37 +02:00
</pre>
</div>
<p>
The nano-hexapod has the following leg&rsquo;s stiffness and damping.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeNanoHexapod(<span class="org-string">'actuator'</span>, <span class="org-string">'amplified'</span>, <span class="org-string">'k1'</span>, 0.4e6, <span class="org-string">'ka'</span>, 43e6, <span class="org-string">'ke'</span>, 1.5e6);
2020-09-01 13:51:37 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org935ae34" class="outline-3">
<h3 id="org935ae34"><span class="section-number-3">4.3</span> Controller Design</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-4-3">
<p>
Damping as function of the gain
Finally, we use the following controller for the Decentralized Direct Velocity Feedback:
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> Kdvf = 5e5<span class="org-type">*</span>s<span class="org-type">/</span>(1<span class="org-type">+</span>s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>1e3)<span class="org-type">*</span>eye(6);
2020-09-01 13:51:37 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-orgfc3d208" class="outline-3">
<h3 id="orgfc3d208"><span class="section-number-3">4.4</span> Effect of the Low Authority Control on the Primary Plant</h3>
2020-09-01 13:51:37 +02:00
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org0528c8d" class="outline-3">
<h3 id="org0528c8d"><span class="section-number-3">4.5</span> Control in the leg space</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-4-5">
<p>
We design a diagonal controller with all the same diagonal elements.
</p>
<p>
The requirements for the controller are:
</p>
<ul class="org-ul">
<li>Crossover frequency of around 100Hz</li>
<li>Stable for all the considered payload masses</li>
<li>Sufficient phase and gain margin</li>
<li>Integral action at low frequency</li>
</ul>
<p>
The design controller is as follows:
</p>
<ul class="org-ul">
<li>Lead centered around the crossover</li>
<li>An integrator below 10Hz</li>
<li>A low pass filter at 250Hz</li>
</ul>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> h = 2.0;
Kl = 1e9 <span class="org-type">*</span> eye(6) <span class="org-type">*</span> ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>100<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ...
1<span class="org-type">/</span>h<span class="org-type">*</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>200<span class="org-type">/</span>h) <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>200<span class="org-type">*</span>h) <span class="org-type">+</span> 1) <span class="org-type">*</span> ...
(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10 <span class="org-type">+</span> 1)<span class="org-type">/</span>(s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10) <span class="org-type">*</span> ...
1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>300);
2020-09-01 13:51:37 +02:00
</pre>
</div>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> load(<span class="org-string">'mat/stages.mat'</span>, <span class="org-string">'nano_hexapod'</span>);
K = Kl<span class="org-type">*</span>nano_hexapod.kinematics.J<span class="org-type">*</span>diag([1, 1, 1, 1, 1, 0]);
2020-09-01 13:51:37 +02:00
</pre>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org7a01c94" class="outline-3">
<h3 id="org7a01c94"><span class="section-number-3">4.6</span> Sensibility to Disturbances and Noise Budget</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-4-6">
<p>
We identify the transfer function from disturbances to the position error of the sample when the HAC-LAC control is applied.
</p>
2021-02-20 23:09:27 +01:00
<div id="org96c6b76" class="figure">
2020-09-01 13:51:37 +02:00
<p><img src="figs/opt_stiff_primary_control_L_psd_dist.png" alt="opt_stiff_primary_control_L_psd_dist.png" />
</p>
<p><span class="figure-number">Figure 20: </span>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</p>
</div>
2021-02-20 23:09:27 +01:00
<div id="orgce5e415" class="figure">
2020-09-01 13:51:37 +02:00
<p><img src="figs/opt_stiff_primary_control_L_psd_tot.png" alt="opt_stiff_primary_control_L_psd_tot.png" />
</p>
<p><span class="figure-number">Figure 21: </span>Amplitude Spectral Density of the vertical position error of the sample in Open-Loop and when the HAC-DVF control is applied</p>
</div>
2021-02-20 23:09:27 +01:00
<div id="orgf8ef2f5" class="figure">
2020-09-01 13:51:37 +02:00
<p><img src="figs/opt_stiff_primary_control_L_cas_tot.png" alt="opt_stiff_primary_control_L_cas_tot.png" />
</p>
<p><span class="figure-number">Figure 22: </span>Cumulative Amplitude Spectrum of the vertical position error of the sample in Open-Loop and when the HAC-DVF control is applied</p>
</div>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org7718f2d" class="outline-3">
<h3 id="org7718f2d"><span class="section-number-3">4.7</span> Simulations of Tomography Experiment</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-4-7">
<p>
Let&rsquo;s now simulate a tomography experiment.
To do so, we include all disturbances except vibrations of the translation stage.
</p>
<div class="org-src-container">
2021-02-20 23:09:27 +01:00
<pre class="src src-matlab"> initializeDisturbances();
initializeSimscapeConfiguration(<span class="org-string">'gravity'</span>, <span class="org-constant">false</span>);
initializeLoggingConfiguration(<span class="org-string">'log'</span>, <span class="org-string">'all'</span>);
2020-09-01 13:51:37 +02:00
</pre>
</div>
<p>
And we run the simulation for all three payload Masses.
</p>
</div>
</div>
2021-02-20 23:09:27 +01:00
<div id="outline-container-org813c903" class="outline-3">
<h3 id="org813c903"><span class="section-number-3">4.8</span> Results</h3>
2020-09-01 13:51:37 +02:00
<div class="outline-text-3" id="text-4-8">
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><h2 class='citeproc-org-bib-h2'>Bibliography</h2>
<div class="csl-bib-body">
<div class="csl-entry"><a name="citeproc_bib_item_1"></a>Dehaeze, T., and C. Collette. 2020. “Active Damping of Rotating Platforms Using Integral Force Feedback.” In <i>Proceedings of the International Conference on Modal Analysis Noise and Vibration Engineering (ISMA)</i>.</div>
<div class="csl-entry"><a name="citeproc_bib_item_2"></a>Souleille, Adrien, Thibault Lampert, V Lafarga, Sylvain Hellegouarch, Alan Rondineau, Gonçalo Rodrigues, and Christophe Collette. 2018. “A Concept of Active Mount for Space Applications.” <i>CEAS Space Journal</i> 10 (2). Springer:15765.</div>
</div>
</div>
2020-05-25 11:13:54 +02:00
</div>
2020-05-20 16:41:34 +02:00
</div>
2020-05-20 15:49:43 +02:00
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
2021-02-20 23:09:27 +01:00
<p class="date">Created: 2021-02-20 sam. 23:08</p>
2020-05-20 15:49:43 +02:00
</div>
</body>
</html>