1642 lines
64 KiB
HTML
1642 lines
64 KiB
HTML
<?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-05-06 jeu. 21:55 -->
|
||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||
<title>Amplifier Piezoelectric Actuator APA300ML - Test Bench</title>
|
||
<meta name="author" content="Dehaeze Thomas" />
|
||
<meta name="generator" content="Org Mode" />
|
||
<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>
|
||
</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">Amplifier Piezoelectric Actuator APA300ML - Test Bench</h1>
|
||
<div id="table-of-contents">
|
||
<h2>Table of Contents</h2>
|
||
<div id="text-table-of-contents">
|
||
<ul>
|
||
<li><a href="#orgcdb0cda">1. Model of an Amplified Piezoelectric Actuator and Sensor</a></li>
|
||
<li><a href="#org8069eb2">2. Geometrical Measurements</a>
|
||
<ul>
|
||
<li><a href="#orgd3a7fb2">2.1. Measurement Setup</a></li>
|
||
<li><a href="#orge87bb25">2.2. Measurement Results</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgcd9ca5b">3. Electrical Measurements</a></li>
|
||
<li><a href="#org7dce06c">4. Stiffness measurement</a>
|
||
<ul>
|
||
<li><a href="#orgfb7c129">4.1. APA test</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgefc2541">5. Stroke measurement</a>
|
||
<ul>
|
||
<li><a href="#orgc7bcedc">5.1. Voltage applied on one stack</a></li>
|
||
<li><a href="#org61e77ad">5.2. Voltage applied on two stacks</a></li>
|
||
<li><a href="#org0159009">5.3. Voltage applied on all three stacks</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org5c99f8e">6. Test-Bench Description</a></li>
|
||
<li><a href="#org4939a9c">7. Measurement Procedure</a>
|
||
<ul>
|
||
<li><a href="#org4d889a6">7.1. Stroke Measurement</a></li>
|
||
<li><a href="#org8f16496">7.2. Stiffness Measurement</a></li>
|
||
<li><a href="#orgbcfd375">7.3. Hysteresis measurement</a></li>
|
||
<li><a href="#org3360646">7.4. Piezoelectric Actuator Constant</a></li>
|
||
<li><a href="#org2f6dc99">7.5. Piezoelectric Sensor Constant</a></li>
|
||
<li><a href="#org68e6479">7.6. Capacitance Measurement</a></li>
|
||
<li><a href="#org9fda8f5">7.7. Dynamical Behavior</a></li>
|
||
<li><a href="#org5c182fa">7.8. Compare the results obtained for all 7 APA300ML</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgee9aa72">8. Measurement Results</a></li>
|
||
<li><a href="#org2b83c2d">9. Test Bench APA300ML - Simscape Model</a>
|
||
<ul>
|
||
<li><a href="#org6bd3309">9.1. Introduction</a></li>
|
||
<li><a href="#orge2e1832">9.2. Nano Hexapod object</a>
|
||
<ul>
|
||
<li><a href="#org86f1bc1">9.2.1. APA - 2 DoF</a></li>
|
||
<li><a href="#org02d3c28">9.2.2. APA - Flexible Frame</a></li>
|
||
<li><a href="#org2d73ca0">9.2.3. APA - Fully Flexible</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org6172e50">9.3. Identification</a></li>
|
||
<li><a href="#orgd3cc35d">9.4. Compare 2-DoF with flexible</a>
|
||
<ul>
|
||
<li><a href="#org4a2a46b">9.4.1. APA - 2 DoF</a></li>
|
||
<li><a href="#org699b241">9.4.2. APA - Fully Flexible</a></li>
|
||
<li><a href="#orgadcded5">9.4.3. Comparison</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org6498944">10. Test Bench Struts - Simscape Model</a>
|
||
<ul>
|
||
<li><a href="#orgdfd164f">10.1. Introduction</a></li>
|
||
<li><a href="#org0174f92">10.2. Nano Hexapod object</a>
|
||
<ul>
|
||
<li><a href="#org83ea7c3">10.2.1. Flexible Joint - Bot</a></li>
|
||
<li><a href="#org59f9e8b">10.2.2. Flexible Joint - Top</a></li>
|
||
<li><a href="#orgf969c85">10.2.3. APA - 2 DoF</a></li>
|
||
<li><a href="#org10be291">10.2.4. APA - Flexible Frame</a></li>
|
||
<li><a href="#org6b542ad">10.2.5. APA - Fully Flexible</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org9563800">10.3. Identification</a></li>
|
||
<li><a href="#org127ad74">10.4. Compare flexible joints</a>
|
||
<ul>
|
||
<li><a href="#orgafd20df">10.4.1. Perfect</a></li>
|
||
<li><a href="#org3f45fa8">10.4.2. Top Flexible</a></li>
|
||
<li><a href="#org4c3d557">10.4.3. Bottom Flexible</a></li>
|
||
<li><a href="#orgcec8048">10.4.4. Both Flexible</a></li>
|
||
<li><a href="#orgc20c535">10.4.5. Comparison</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org28bb946">11. Resonance frequencies - APA300ML</a>
|
||
<ul>
|
||
<li><a href="#orgf0782b8">11.1. Introduction</a></li>
|
||
<li><a href="#orgf304c79">11.2. Setup</a></li>
|
||
<li><a href="#org96a2449">11.3. Bending - X</a></li>
|
||
<li><a href="#orgfbb0c6d">11.4. Bending - Y</a></li>
|
||
<li><a href="#org7eaa560">11.5. Torsion - Z</a></li>
|
||
<li><a href="#org4853ac0">11.6. Compare</a></li>
|
||
<li><a href="#orgbbf6ae6">11.7. Conclusion</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<hr>
|
||
<p>This report is also available as a <a href="./test-bench-apa300ml.pdf">pdf</a>.</p>
|
||
<hr>
|
||
|
||
<p>
|
||
The goal of this test bench is to extract all the important parameters of the Amplified Piezoelectric Actuator APA300ML.
|
||
</p>
|
||
|
||
<p>
|
||
This include:
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li>Stroke</li>
|
||
<li>Stiffness</li>
|
||
<li>Hysteresis</li>
|
||
<li>Gain from the applied voltage \(V_a\) to the generated Force \(F_a\)</li>
|
||
<li>Gain from the sensor stack strain \(\delta L\) to the generated voltage \(V_s\)</li>
|
||
<li>Dynamical behavior</li>
|
||
</ul>
|
||
|
||
|
||
<div id="org23bb53e" class="figure">
|
||
<p><img src="figs/apa300ML.png" alt="apa300ML.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 1: </span>Picture of the APA300ML</p>
|
||
</div>
|
||
|
||
<div id="outline-container-orgcdb0cda" class="outline-2">
|
||
<h2 id="orgcdb0cda"><span class="section-number-2">1</span> Model of an Amplified Piezoelectric Actuator and Sensor</h2>
|
||
<div class="outline-text-2" id="text-1">
|
||
<p>
|
||
Consider a schematic of the Amplified Piezoelectric Actuator in Figure <a href="#org0550a34">2</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org0550a34" class="figure">
|
||
<p><img src="figs/apa_model_schematic.png" alt="apa_model_schematic.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 2: </span>Amplified Piezoelectric Actuator Schematic</p>
|
||
</div>
|
||
|
||
<p>
|
||
A voltage \(V_a\) applied to the actuator stacks will induce an actuator force \(F_a\):
|
||
</p>
|
||
\begin{equation}
|
||
F_a = g_a \cdot V_a
|
||
\end{equation}
|
||
|
||
<p>
|
||
A change of length \(dl\) of the sensor stack will induce a voltage \(V_s\):
|
||
</p>
|
||
\begin{equation}
|
||
V_s = g_s \cdot dl
|
||
\end{equation}
|
||
|
||
<p>
|
||
We wish here to experimental measure \(g_a\) and \(g_s\).
|
||
</p>
|
||
|
||
<p>
|
||
The block-diagram model of the piezoelectric actuator is then as shown in Figure <a href="#org56c641c">3</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org56c641c" class="figure">
|
||
<p><img src="figs/apa-model-simscape-schematic.png" alt="apa-model-simscape-schematic.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 3: </span>Model of the APA with Simscape/Simulink</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org8069eb2" class="outline-2">
|
||
<h2 id="org8069eb2"><span class="section-number-2">2</span> Geometrical Measurements</h2>
|
||
<div class="outline-text-2" id="text-2">
|
||
<p>
|
||
The received APA are shown in Figure <a href="#org9e9e6ca">4</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org9e9e6ca" class="figure">
|
||
<p><img src="figs/IMG_20210224_143500.jpg" alt="IMG_20210224_143500.jpg" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 4: </span>Received APA</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd3a7fb2" class="outline-3">
|
||
<h3 id="orgd3a7fb2"><span class="section-number-3">2.1</span> Measurement Setup</h3>
|
||
<div class="outline-text-3" id="text-2-1">
|
||
<p>
|
||
The flatness corresponding to the two interface planes are measured as shown in Figure <a href="#org3d7cf79">5</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org3d7cf79" class="figure">
|
||
<p><img src="figs/IMG_20210224_143809.jpg" alt="IMG_20210224_143809.jpg" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 5: </span>Measurement Setup</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orge87bb25" class="outline-3">
|
||
<h3 id="orge87bb25"><span class="section-number-3">2.2</span> Measurement Results</h3>
|
||
<div class="outline-text-3" id="text-2-2">
|
||
<p>
|
||
The height (Z) measurements at the 8 locations (4 points by plane) are defined below.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa1 = 1e<span class="org-type">-</span>6<span class="org-type">*</span>[0, <span class="org-type">-</span>0.5 , 3.5 , 3.5 , 42 , 45.5, 52.5 , 46];
|
||
apa2 = 1e<span class="org-type">-</span>6<span class="org-type">*</span>[0, <span class="org-type">-</span>2.5 , <span class="org-type">-</span>3 , 0 , <span class="org-type">-</span>1.5 , 1 , <span class="org-type">-</span>2 , <span class="org-type">-</span>4];
|
||
apa3 = 1e<span class="org-type">-</span>6<span class="org-type">*</span>[0, <span class="org-type">-</span>1.5 , 15 , 17.5 , 6.5 , 6.5 , 21 , 23];
|
||
apa4 = 1e<span class="org-type">-</span>6<span class="org-type">*</span>[0, 6.5 , 14.5 , 9 , 16 , 22 , 29.5 , 21];
|
||
apa5 = 1e<span class="org-type">-</span>6<span class="org-type">*</span>[0, <span class="org-type">-</span>12.5, 16.5 , 28.5 , <span class="org-type">-</span>43 , <span class="org-type">-</span>52 , <span class="org-type">-</span>22.5, <span class="org-type">-</span>13.5];
|
||
apa6 = 1e<span class="org-type">-</span>6<span class="org-type">*</span>[0, <span class="org-type">-</span>8 , <span class="org-type">-</span>2 , 5 , <span class="org-type">-</span>57.5, <span class="org-type">-</span>62 , <span class="org-type">-</span>55.5, <span class="org-type">-</span>52.5];
|
||
apa7 = 1e<span class="org-type">-</span>6<span class="org-type">*</span>[0, 19.5 , <span class="org-type">-</span>8 , <span class="org-type">-</span>29.5, 75 , 97.5, 70 , 48];
|
||
apa7b = 1e<span class="org-type">-</span>6<span class="org-type">*</span>[0, 9 , <span class="org-type">-</span>18.5, <span class="org-type">-</span>30 , 31 , 46.5, 16.5 , 7.5];
|
||
apa = {apa1, apa2, apa3, apa4, apa5, apa6, apa7b};
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The X/Y Positions of the 8 measurement points are defined below.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">W = 20e<span class="org-type">-</span>3; <span class="org-comment">% Width [m]</span>
|
||
L = 61e<span class="org-type">-</span>3; <span class="org-comment">% Length [m]</span>
|
||
d = 1e<span class="org-type">-</span>3; <span class="org-comment">% Distance from border [m]</span>
|
||
l = 15.5e<span class="org-type">-</span>3; <span class="org-comment">% [m]</span>
|
||
|
||
pos = [[<span class="org-type">-</span>L<span class="org-type">/</span>2 <span class="org-type">+</span> d; W<span class="org-type">/</span>2 <span class="org-type">-</span> d], [<span class="org-type">-</span>L<span class="org-type">/</span>2 <span class="org-type">+</span> l <span class="org-type">-</span> d; W<span class="org-type">/</span>2 <span class="org-type">-</span> d], [<span class="org-type">-</span>L<span class="org-type">/</span>2 <span class="org-type">+</span> l <span class="org-type">-</span> d; <span class="org-type">-</span>W<span class="org-type">/</span>2 <span class="org-type">+</span> d], [<span class="org-type">-</span>L<span class="org-type">/</span>2 <span class="org-type">+</span> d; <span class="org-type">-</span>W<span class="org-type">/</span>2 <span class="org-type">+</span> d], [L<span class="org-type">/</span>2 <span class="org-type">-</span> l <span class="org-type">+</span> d; W<span class="org-type">/</span>2 <span class="org-type">-</span> d], [L<span class="org-type">/</span>2 <span class="org-type">-</span> d; W<span class="org-type">/</span>2 <span class="org-type">-</span> d], [L<span class="org-type">/</span>2 <span class="org-type">-</span> d; <span class="org-type">-</span>W<span class="org-type">/</span>2 <span class="org-type">+</span> d], [L<span class="org-type">/</span>2 <span class="org-type">-</span> l <span class="org-type">+</span> d; <span class="org-type">-</span>W<span class="org-type">/</span>2 <span class="org-type">+</span> d]];
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
Finally, the flatness is estimated by fitting a plane through the 8 points using the <code>fminsearch</code> command.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_d = zeros(1, 7);
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:7</span>
|
||
fun = @(x)max(abs(([pos; apa{<span class="org-constant">i</span>}]<span class="org-type">-</span>[0;0;x(1)])<span class="org-type">'*</span>([x(2<span class="org-type">:</span>3);1]<span class="org-type">/</span>norm([x(2<span class="org-type">:</span>3);1]))));
|
||
x0 = [0;0;0];
|
||
[x, min_d] = fminsearch(fun,x0);
|
||
apa_d(<span class="org-constant">i</span>) = min_d;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The obtained flatness are shown in Table <a href="#org26da50a">1</a>.
|
||
</p>
|
||
|
||
<table id="org26da50a" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||
<caption class="t-above"><span class="table-number">Table 1:</span> Estimated flatness</caption>
|
||
|
||
<colgroup>
|
||
<col class="org-left" />
|
||
|
||
<col class="org-right" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col" class="org-left"> </th>
|
||
<th scope="col" class="org-right"><b>Flatness</b> \([\mu m]\)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="org-left">APA 1</td>
|
||
<td class="org-right">8.9</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 2</td>
|
||
<td class="org-right">3.1</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 3</td>
|
||
<td class="org-right">9.1</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 4</td>
|
||
<td class="org-right">3.0</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 5</td>
|
||
<td class="org-right">1.9</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 6</td>
|
||
<td class="org-right">7.1</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 7</td>
|
||
<td class="org-right">18.7</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgcd9ca5b" class="outline-2">
|
||
<h2 id="orgcd9ca5b"><span class="section-number-2">3</span> Electrical Measurements</h2>
|
||
<div class="outline-text-2" id="text-3">
|
||
<div class="note" id="orgf50971c">
|
||
<p>
|
||
The capacitance of the stacks is measure with the <a href="https://www.gwinstek.com/en-global/products/detail/LCR-800">LCR-800 Meter</a> (<a href="doc/DS_LCR-800_Series_V2_E.pdf">doc</a>)
|
||
</p>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="org312cb53" class="figure">
|
||
<p><img src="figs/IMG_20210312_120337.jpg" alt="IMG_20210312_120337.jpg" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 6: </span>LCR Meter used for the measurements</p>
|
||
</div>
|
||
|
||
<p>
|
||
The excitation frequency is set to be 1kHz.
|
||
</p>
|
||
|
||
<table id="orge2be4ba" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||
<caption class="t-above"><span class="table-number">Table 2:</span> Capacitance measured with the LCR meter. The excitation signal is a sinus at 1kHz</caption>
|
||
|
||
<colgroup>
|
||
<col class="org-left" />
|
||
|
||
<col class="org-right" />
|
||
|
||
<col class="org-right" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col" class="org-left"> </th>
|
||
<th scope="col" class="org-right"><b>Sensor Stack</b></th>
|
||
<th scope="col" class="org-right"><b>Actuator Stacks</b></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="org-left">APA 1</td>
|
||
<td class="org-right">5.10</td>
|
||
<td class="org-right">10.03</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 2</td>
|
||
<td class="org-right">4.99</td>
|
||
<td class="org-right">9.85</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 3</td>
|
||
<td class="org-right">1.72</td>
|
||
<td class="org-right">5.18</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 4</td>
|
||
<td class="org-right">4.94</td>
|
||
<td class="org-right">9.82</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 5</td>
|
||
<td class="org-right">4.90</td>
|
||
<td class="org-right">9.66</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 6</td>
|
||
<td class="org-right">4.99</td>
|
||
<td class="org-right">9.91</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 7</td>
|
||
<td class="org-right">4.85</td>
|
||
<td class="org-right">9.85</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<div class="warning" id="orga0013b8">
|
||
<p>
|
||
There is clearly a problem with APA300ML number 3
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org7dce06c" class="outline-2">
|
||
<h2 id="org7dce06c"><span class="section-number-2">4</span> Stiffness measurement</h2>
|
||
<div class="outline-text-2" id="text-4">
|
||
</div>
|
||
<div id="outline-container-orgfb7c129" class="outline-3">
|
||
<h3 id="orgfb7c129"><span class="section-number-3">4.1</span> APA test</h3>
|
||
<div class="outline-text-3" id="text-4-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">load(<span class="org-string">'meas_stiff_apa_1_x.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'F'</span>, <span class="org-string">'d'</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
||
plot(t, F)
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Automatic Zero of the force</span></span>
|
||
F = F <span class="org-type">-</span> mean(F(t <span class="org-type">></span> 0.1 <span class="org-type">&</span> t <span class="org-type"><</span> 0.3));
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Start measurement at t = 0.2 s</span></span>
|
||
d = d(t <span class="org-type">></span> 0.2);
|
||
F = F(t <span class="org-type">></span> 0.2);
|
||
t = t(t <span class="org-type">></span> 0.2); t = t <span class="org-type">-</span> t(1);
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">i_l_start = find(F <span class="org-type">></span> 0.3, 1, <span class="org-string">'first'</span>);
|
||
[<span class="org-type">~</span>, i_l_stop] = max(F);
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">F_l = F(i_l_start<span class="org-type">:</span>i_l_stop);
|
||
d_l = d(i_l_start<span class="org-type">:</span>i_l_stop);
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">fit_l = polyfit(F_l, d_l, 1);
|
||
|
||
<span class="org-comment">% %% Reset displacement based on fit</span>
|
||
<span class="org-comment">% d = d - fit_l(2);</span>
|
||
<span class="org-comment">% fit_s(2) = fit_s(2) - fit_l(2);</span>
|
||
<span class="org-comment">% fit_l(2) = 0;</span>
|
||
|
||
<span class="org-comment">% %% Estimated Stroke</span>
|
||
<span class="org-comment">% F_max = fit_s(2)/(fit_l(1) - fit_s(1));</span>
|
||
<span class="org-comment">% d_max = fit_l(1)*F_max;</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">h<span class="org-type">^</span>2<span class="org-type">/</span>fit_l(1)
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-type">figure</span>;
|
||
hold on;
|
||
plot(F,d,<span class="org-string">'k'</span>)
|
||
plot(F_l, d_l)
|
||
plot(F_l, F_l<span class="org-type">*</span>fit_l(1) <span class="org-type">+</span> fit_l(2), <span class="org-string">'--'</span>)
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-orgefc2541" class="outline-2">
|
||
<h2 id="orgefc2541"><span class="section-number-2">5</span> Stroke measurement</h2>
|
||
<div class="outline-text-2" id="text-5">
|
||
<p>
|
||
We here wish to estimate the stroke of the APA.
|
||
</p>
|
||
|
||
<p>
|
||
To do so, one side of the APA is fixed, and a displacement probe is located on the other side as shown in Figure <a href="#org09b14af">7</a>.
|
||
</p>
|
||
|
||
<p>
|
||
Then, a voltage is applied on either one or two stacks using a DAC and a voltage amplifier.
|
||
</p>
|
||
|
||
<div class="note" id="orgf4733d2">
|
||
<p>
|
||
Here are the documentation of the equipment used for this test bench:
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li><b>Voltage Amplifier</b>: <a href="doc/PD200-V7-R1.pdf">PD200</a> with a gain of 20</li>
|
||
<li><b>16bits DAC</b>: <a href="doc/IO131-OEM-Datasheet.pdf">IO313 Speedgoat card</a></li>
|
||
<li><b>Displacement Probe</b>: <a href="doc/Millimar--3723046--BA--C1208-C1216-C1240--FR--2016-11-08.pdf">Millimar C1216 electronics</a> and <a href="doc/tmp3m0cvmue_7888038c-cdc8-48d8-a837-35de02760685.pdf">Millimar 1318 probe</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="org09b14af" class="figure">
|
||
<p><img src="figs/CE0EF55E-07B7-461B-8CDB-98590F68D15B.jpeg" alt="CE0EF55E-07B7-461B-8CDB-98590F68D15B.jpeg" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 7: </span>Bench to measured the APA stroke</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgc7bcedc" class="outline-3">
|
||
<h3 id="orgc7bcedc"><span class="section-number-3">5.1</span> Voltage applied on one stack</h3>
|
||
<div class="outline-text-3" id="text-5-1">
|
||
<p>
|
||
Let’s first look at the relation between the voltage applied to <b>one</b> stack to the displacement of the APA as measured by the displacement probe.
|
||
</p>
|
||
|
||
<p>
|
||
The applied voltage is shown in Figure <a href="#orge974f1d">8</a>.
|
||
</p>
|
||
|
||
|
||
<div id="orge974f1d" class="figure">
|
||
<p><img src="figs/apa_stroke_voltage_time.png" alt="apa_stroke_voltage_time.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 8: </span>Applied voltage as a function of time</p>
|
||
</div>
|
||
|
||
<p>
|
||
The obtained displacement is shown in Figure <a href="#org68bd88c">9</a>.
|
||
The displacement is set to zero at initial time when the voltage applied is -20V.
|
||
</p>
|
||
|
||
|
||
<div id="org68bd88c" class="figure">
|
||
<p><img src="figs/apa_stroke_time_1s.png" alt="apa_stroke_time_1s.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 9: </span>Displacement as a function of time for all the APA300ML</p>
|
||
</div>
|
||
|
||
<p>
|
||
Finally, the displacement is shown as a function of the applied voltage in Figure <a href="#orgcdf6335">10</a>.
|
||
We can clearly see that there is a problem with the APA 3.
|
||
Also, there is a large hysteresis.
|
||
</p>
|
||
|
||
|
||
<div id="orgcdf6335" class="figure">
|
||
<p><img src="figs/apa_d_vs_V_1s.png" alt="apa_d_vs_V_1s.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 10: </span>Displacement as a function of the applied voltage</p>
|
||
</div>
|
||
|
||
<div class="important" id="orgf52741e">
|
||
<p>
|
||
We can clearly see from Figure <a href="#orgcdf6335">10</a> that there is a problem with the APA number 3.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org61e77ad" class="outline-3">
|
||
<h3 id="org61e77ad"><span class="section-number-3">5.2</span> Voltage applied on two stacks</h3>
|
||
<div class="outline-text-3" id="text-5-2">
|
||
<p>
|
||
Now look at the relation between the voltage applied to the <b>two</b> other stacks to the displacement of the APA as measured by the displacement probe.
|
||
</p>
|
||
|
||
<p>
|
||
The obtained displacement is shown in Figure <a href="#orgeb58bcf">11</a>.
|
||
The displacement is set to zero at initial time when the voltage applied is -20V.
|
||
</p>
|
||
|
||
|
||
<div id="orgeb58bcf" class="figure">
|
||
<p><img src="figs/apa_stroke_time_2s.png" alt="apa_stroke_time_2s.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 11: </span>Displacement as a function of time for all the APA300ML</p>
|
||
</div>
|
||
|
||
<p>
|
||
Finally, the displacement is shown as a function of the applied voltage in Figure <a href="#org2d13819">12</a>.
|
||
We can clearly see that there is a problem with the APA 3.
|
||
Also, there is a large hysteresis.
|
||
</p>
|
||
|
||
|
||
<div id="org2d13819" class="figure">
|
||
<p><img src="figs/apa_d_vs_V_2s.png" alt="apa_d_vs_V_2s.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 12: </span>Displacement as a function of the applied voltage</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org0159009" class="outline-3">
|
||
<h3 id="org0159009"><span class="section-number-3">5.3</span> Voltage applied on all three stacks</h3>
|
||
<div class="outline-text-3" id="text-5-3">
|
||
<p>
|
||
Finally, we can combine the two measurements to estimate the relation between the displacement and the voltage applied to the <b>three</b> stacks (Figure <a href="#org0e0f3af">13</a>).
|
||
</p>
|
||
|
||
|
||
<div id="org0e0f3af" class="figure">
|
||
<p><img src="figs/apa_d_vs_V_3s.png" alt="apa_d_vs_V_3s.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 13: </span>Displacement as a function of the applied voltage</p>
|
||
</div>
|
||
|
||
<p>
|
||
The obtained maximum stroke for all the APA are summarized in Table <a href="#org1eebdd5">3</a>.
|
||
</p>
|
||
|
||
<table id="org1eebdd5" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||
<caption class="t-above"><span class="table-number">Table 3:</span> Measured maximum stroke</caption>
|
||
|
||
<colgroup>
|
||
<col class="org-left" />
|
||
|
||
<col class="org-right" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col" class="org-left"> </th>
|
||
<th scope="col" class="org-right"><b>Stroke</b> \([\mu m]\)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="org-left">APA 1</td>
|
||
<td class="org-right">373.2</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 2</td>
|
||
<td class="org-right">365.5</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 3</td>
|
||
<td class="org-right">181.7</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 4</td>
|
||
<td class="org-right">359.7</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 5</td>
|
||
<td class="org-right">361.5</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 6</td>
|
||
<td class="org-right">363.9</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">APA 7</td>
|
||
<td class="org-right">358.4</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org5c99f8e" class="outline-2">
|
||
<h2 id="org5c99f8e"><span class="section-number-2">6</span> Test-Bench Description</h2>
|
||
<div class="outline-text-2" id="text-6">
|
||
<div class="note" id="org8668721">
|
||
<p>
|
||
Here are the documentation of the equipment used for this test bench:
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li>Voltage Amplifier: <a href="doc/PD200-V7-R1.pdf">PD200</a></li>
|
||
<li>Amplified Piezoelectric Actuator: <a href="doc/APA300ML.pdf">APA300ML</a></li>
|
||
<li>DAC/ADC: Speedgoat <a href="doc/IO131-OEM-Datasheet.pdf">IO313</a></li>
|
||
<li>Encoder: <a href="doc/L-9517-9678-05-A_Data_sheet_VIONiC_series_en.pdf">Renishaw Vionic</a> and used <a href="doc/L-9517-9862-01-C_Data_sheet_RKLC_EN.pdf">Ruler</a></li>
|
||
<li>Interferometer: <a href="https://www.attocube.com/en/products/laser-displacement-sensor/displacement-measuring-interferometer">Attocube IDS3010</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="org9831810" class="figure">
|
||
<p><img src="figs/test_bench_apa_alone.png" alt="test_bench_apa_alone.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 14: </span>Schematic of the Test Bench</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org4939a9c" class="outline-2">
|
||
<h2 id="org4939a9c"><span class="section-number-2">7</span> Measurement Procedure</h2>
|
||
<div class="outline-text-2" id="text-7">
|
||
</div>
|
||
<div id="outline-container-org4d889a6" class="outline-3">
|
||
<h3 id="org4d889a6"><span class="section-number-3">7.1</span> Stroke Measurement</h3>
|
||
<div class="outline-text-3" id="text-7-1">
|
||
<p>
|
||
Using the PD200 amplifier, output a voltage:
|
||
\[ V_a = 65 + 85 \sin(2\pi \cdot t) \]
|
||
To have a quasi-static excitation between -20 and 150V.
|
||
</p>
|
||
|
||
<p>
|
||
As the gain of the PD200 amplifier is 20, the DAC output voltage should be:
|
||
\[ V_{dac}(t) = 3.25 + 4.25\sin(2\pi \cdot t) \]
|
||
</p>
|
||
|
||
<p>
|
||
Verify that the voltage offset of the PD200 is zero!
|
||
</p>
|
||
|
||
<p>
|
||
Measure the output vertical displacement \(d\) using the interferometer.
|
||
</p>
|
||
|
||
<p>
|
||
Then, plot \(d\) as a function of \(V_a\), and perform a linear regression.
|
||
Conclude on the obtained stroke.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org8f16496" class="outline-3">
|
||
<h3 id="org8f16496"><span class="section-number-3">7.2</span> Stiffness Measurement</h3>
|
||
<div class="outline-text-3" id="text-7-2">
|
||
<p>
|
||
Add some (known) weight \(\delta m g\) on the suspended mass and measure the deflection \(\delta d\).
|
||
This can be tested when the piezoelectric stacks are open-circuit.
|
||
</p>
|
||
|
||
<p>
|
||
As the stiffness will be around \(k \approx 10^6 N/m\), an added mass of \(m \approx 100g\) will induce a static deflection of \(\approx 1\mu m\) which should be large enough for a precise measurement using the interferometer.
|
||
</p>
|
||
|
||
<p>
|
||
Then the obtained stiffness is:
|
||
</p>
|
||
\begin{equation}
|
||
k = \frac{\delta m g}{\delta d}
|
||
\end{equation}
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgbcfd375" class="outline-3">
|
||
<h3 id="orgbcfd375"><span class="section-number-3">7.3</span> Hysteresis measurement</h3>
|
||
<div class="outline-text-3" id="text-7-3">
|
||
<p>
|
||
Supply a quasi static sinusoidal excitation \(V_a\) at different voltages.
|
||
</p>
|
||
|
||
<p>
|
||
The offset should be 65V, and the sin amplitude can range from 1V up to 85V.
|
||
</p>
|
||
|
||
<p>
|
||
For each excitation amplitude, the vertical displacement \(d\) of the mass is measured.
|
||
</p>
|
||
|
||
<p>
|
||
Then, \(d\) is plotted as a function of \(V_a\) for all the amplitudes.
|
||
</p>
|
||
|
||
|
||
<div id="orgf866df2" class="figure">
|
||
<p><img src="figs/expected_hysteresis.png" alt="expected_hysteresis.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 15: </span>Expected Hysteresis (<a class='org-ref-reference' href="#poel10_explor_activ_hard_mount_vibrat">poel10_explor_activ_hard_mount_vibrat</a>)</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org3360646" class="outline-3">
|
||
<h3 id="org3360646"><span class="section-number-3">7.4</span> Piezoelectric Actuator Constant</h3>
|
||
<div class="outline-text-3" id="text-7-4">
|
||
<p>
|
||
Using the measurement test-bench, it is rather easy the determine the static gain between the applied voltage \(V_a\) to the induced displacement \(d\).
|
||
Use a quasi static (1Hz) excitation signal \(V_a\) on the piezoelectric stack and measure the vertical displacement \(d\).
|
||
Perform a linear regression to obtain:
|
||
</p>
|
||
\begin{equation}
|
||
d = g_{d/V_a} \cdot V_a
|
||
\end{equation}
|
||
|
||
<p>
|
||
Using the Simscape model of the APA, it is possible to determine the static gain between the actuator force \(F_a\) to the induced displacement \(d\):
|
||
</p>
|
||
\begin{equation}
|
||
d = g_{d/F_a} \cdot F_a
|
||
\end{equation}
|
||
|
||
<p>
|
||
From the two gains, it is then easy to determine \(g_a\):
|
||
</p>
|
||
\begin{equation}
|
||
g_a = \frac{F_a}{V_a} = \frac{F_a}{d} \cdot \frac{d}{V_a} = \frac{g_{d/V_a}}{g_{d/F_a}}
|
||
\end{equation}
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org2f6dc99" class="outline-3">
|
||
<h3 id="org2f6dc99"><span class="section-number-3">7.5</span> Piezoelectric Sensor Constant</h3>
|
||
<div class="outline-text-3" id="text-7-5">
|
||
<p>
|
||
From a quasi static excitation of the piezoelectric stack, measure the gain from \(V_a\) to \(V_s\):
|
||
</p>
|
||
\begin{equation}
|
||
V_s = g_{V_s/V_a} V_a
|
||
\end{equation}
|
||
|
||
<p>
|
||
Note here that there is an high pass filter formed by the piezo capacitor and parallel resistor.
|
||
The excitation frequency should then be in between the cut-off frequency of this high pass filter and the first resonance.
|
||
</p>
|
||
|
||
<p>
|
||
Alternatively, the gain can be computed from the dynamical identification and taking the gain at the wanted frequency.
|
||
</p>
|
||
|
||
<p>
|
||
Using the simscape model, compute the static gain from the actuator force \(F_a\) to the strain of the sensor stack \(dl\):
|
||
</p>
|
||
\begin{equation}
|
||
dl = g_{dl/F_a} F_a
|
||
\end{equation}
|
||
|
||
<p>
|
||
Then, the static gain from the sensor stack strain \(dl\) to the general voltage \(V_s\) is:
|
||
</p>
|
||
\begin{equation}
|
||
g_s = \frac{V_s}{dl} = \frac{V_s}{V_a} \cdot \frac{V_a}{F_a} \cdot \frac{F_a}{dl} = \frac{g_{V_s/V_a}}{g_a \cdot g_{dl/F_a}}
|
||
\end{equation}
|
||
|
||
<p>
|
||
Alternatively, we could impose an external force to add strain in the APA that should be equally present in all the 3 stacks and equal to 1/5 of the vertical strain.
|
||
This external force can be some weight added, or a piezo in parallel.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org68e6479" class="outline-3">
|
||
<h3 id="org68e6479"><span class="section-number-3">7.6</span> Capacitance Measurement</h3>
|
||
<div class="outline-text-3" id="text-7-6">
|
||
<p>
|
||
Measure the capacitance of the 3 stacks individually using a precise multi-meter.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org9fda8f5" class="outline-3">
|
||
<h3 id="org9fda8f5"><span class="section-number-3">7.7</span> Dynamical Behavior</h3>
|
||
<div class="outline-text-3" id="text-7-7">
|
||
<p>
|
||
Perform a system identification from \(V_a\) to the measured displacement \(d\) by the interferometer and by the encoder, and to the generated voltage \(V_s\).
|
||
</p>
|
||
|
||
<p>
|
||
This can be performed using different excitation signals.
|
||
</p>
|
||
|
||
<p>
|
||
This can also be performed with and without the encoder fixed to the APA.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org5c182fa" class="outline-3">
|
||
<h3 id="org5c182fa"><span class="section-number-3">7.8</span> Compare the results obtained for all 7 APA300ML</h3>
|
||
<div class="outline-text-3" id="text-7-8">
|
||
<p>
|
||
Compare all the obtained parameters for all the test APA.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgee9aa72" class="outline-2">
|
||
<h2 id="orgee9aa72"><span class="section-number-2">8</span> Measurement Results</h2>
|
||
</div>
|
||
|
||
<div id="outline-container-org2b83c2d" class="outline-2">
|
||
<h2 id="org2b83c2d"><span class="section-number-2">9</span> Test Bench APA300ML - Simscape Model</h2>
|
||
<div class="outline-text-2" id="text-9">
|
||
</div>
|
||
<div id="outline-container-org6bd3309" class="outline-3">
|
||
<h3 id="org6bd3309"><span class="section-number-3">9.1</span> Introduction</h3>
|
||
</div>
|
||
<div id="outline-container-orge2e1832" class="outline-3">
|
||
<h3 id="orge2e1832"><span class="section-number-3">9.2</span> Nano Hexapod object</h3>
|
||
<div class="outline-text-3" id="text-9-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org86f1bc1" class="outline-4">
|
||
<h4 id="org86f1bc1"><span class="section-number-4">9.2.1</span> APA - 2 DoF</h4>
|
||
<div class="outline-text-4" id="text-9-2-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator = struct();
|
||
|
||
n_hexapod.actuator.type = 1;
|
||
|
||
n_hexapod.actuator.k = ones(6,1)<span class="org-type">*</span>0.35e6; <span class="org-comment">% [N/m]</span>
|
||
n_hexapod.actuator.ke = ones(6,1)<span class="org-type">*</span>1.5e6; <span class="org-comment">% [N/m]</span>
|
||
n_hexapod.actuator.ka = ones(6,1)<span class="org-type">*</span>43e6; <span class="org-comment">% [N/m]</span>
|
||
|
||
n_hexapod.actuator.c = ones(6,1)<span class="org-type">*</span>3e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
n_hexapod.actuator.ce = ones(6,1)<span class="org-type">*</span>1e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
n_hexapod.actuator.ca = ones(6,1)<span class="org-type">*</span>1e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
|
||
n_hexapod.actuator.Leq = ones(6,1)<span class="org-type">*</span>0.056; <span class="org-comment">% [m]</span>
|
||
|
||
n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org02d3c28" class="outline-4">
|
||
<h4 id="org02d3c28"><span class="section-number-4">9.2.2</span> APA - Flexible Frame</h4>
|
||
<div class="outline-text-4" id="text-9-2-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator.type = 2;
|
||
|
||
n_hexapod.actuator.K = readmatrix(<span class="org-string">'APA300ML_b_mat_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
|
||
n_hexapod.actuator.M = readmatrix(<span class="org-string">'APA300ML_b_mat_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
|
||
n_hexapod.actuator.xi = 0.01; <span class="org-comment">% Damping ratio</span>
|
||
n_hexapod.actuator.P = extractNodes(<span class="org-string">'APA300ML_b_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordinates [m]</span>
|
||
|
||
n_hexapod.actuator.ks = 235e6; <span class="org-comment">% Stiffness of one stack [N/m]</span>
|
||
n_hexapod.actuator.cs = 1e1; <span class="org-comment">% Stiffness of one stack [N/m]</span>
|
||
|
||
n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org2d73ca0" class="outline-4">
|
||
<h4 id="org2d73ca0"><span class="section-number-4">9.2.3</span> APA - Fully Flexible</h4>
|
||
<div class="outline-text-4" id="text-9-2-3">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator.type = 3;
|
||
|
||
n_hexapod.actuator.K = readmatrix(<span class="org-string">'APA300ML_full_mat_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
|
||
n_hexapod.actuator.M = readmatrix(<span class="org-string">'APA300ML_full_mat_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
|
||
n_hexapod.actuator.xi = 0.01; <span class="org-comment">% Damping ratio</span>
|
||
n_hexapod.actuator.P = extractNodes(<span class="org-string">'APA300ML_full_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordiantes [m]</span>
|
||
|
||
n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org6172e50" class="outline-3">
|
||
<h3 id="org6172e50"><span class="section-number-3">9.3</span> Identification</h3>
|
||
<div class="outline-text-3" id="text-9-3">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
||
options = linearizeOptions;
|
||
options.SampleTime = 0;
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
|
||
mdl = <span class="org-string">'test_bench_apa300ml'</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">'/Va'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Voltage</span>
|
||
io(io_i) = linio([mdl, <span class="org-string">'/Vs'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Sensor Voltage</span>
|
||
io(io_i) = linio([mdl, <span class="org-string">'/dL'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Motion Outputs</span>
|
||
io(io_i) = linio([mdl, <span class="org-string">'/z'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Vertical Motion</span>
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||
Ga = linearize(mdl, io, 0.0, options);
|
||
Ga.InputName = {<span class="org-string">'Va'</span>};
|
||
Ga.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd3cc35d" class="outline-3">
|
||
<h3 id="orgd3cc35d"><span class="section-number-3">9.4</span> Compare 2-DoF with flexible</h3>
|
||
<div class="outline-text-3" id="text-9-4">
|
||
</div>
|
||
<div id="outline-container-org4a2a46b" class="outline-4">
|
||
<h4 id="org4a2a46b"><span class="section-number-4">9.4.1</span> APA - 2 DoF</h4>
|
||
<div class="outline-text-4" id="text-9-4-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
|
||
n_hexapod.actuator = struct();
|
||
|
||
n_hexapod.actuator.type = 1;
|
||
|
||
n_hexapod.actuator.k = ones(6,1)<span class="org-type">*</span>0.35e6; <span class="org-comment">% [N/m]</span>
|
||
n_hexapod.actuator.ke = ones(6,1)<span class="org-type">*</span>1.5e6; <span class="org-comment">% [N/m]</span>
|
||
n_hexapod.actuator.ka = ones(6,1)<span class="org-type">*</span>43e6; <span class="org-comment">% [N/m]</span>
|
||
|
||
n_hexapod.actuator.c = ones(6,1)<span class="org-type">*</span>3e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
n_hexapod.actuator.ce = ones(6,1)<span class="org-type">*</span>1e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
n_hexapod.actuator.ca = ones(6,1)<span class="org-type">*</span>1e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
|
||
n_hexapod.actuator.Leq = ones(6,1)<span class="org-type">*</span>0.056; <span class="org-comment">% [m]</span>
|
||
|
||
n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*-</span>2.15; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>2.305e<span class="org-type">-</span>08; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">G_2dof = linearize(mdl, io, 0.0, options);
|
||
G_2dof.InputName = {<span class="org-string">'Va'</span>};
|
||
G_2dof.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org699b241" class="outline-4">
|
||
<h4 id="org699b241"><span class="section-number-4">9.4.2</span> APA - Fully Flexible</h4>
|
||
<div class="outline-text-4" id="text-9-4-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
|
||
n_hexapod.actuator.type = 3;
|
||
|
||
n_hexapod.actuator.K = readmatrix(<span class="org-string">'APA300ML_full_mat_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
|
||
n_hexapod.actuator.M = readmatrix(<span class="org-string">'APA300ML_full_mat_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
|
||
n_hexapod.actuator.xi = 0.01; <span class="org-comment">% Damping ratio</span>
|
||
n_hexapod.actuator.P = extractNodes(<span class="org-string">'APA300ML_full_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordiantes [m]</span>
|
||
|
||
n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">G_flex = linearize(mdl, io, 0.0, options);
|
||
G_flex.InputName = {<span class="org-string">'Va'</span>};
|
||
G_flex.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgadcded5" class="outline-4">
|
||
<h4 id="orgadcded5"><span class="section-number-4">9.4.3</span> Comparison</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org6498944" class="outline-2">
|
||
<h2 id="org6498944"><span class="section-number-2">10</span> Test Bench Struts - Simscape Model</h2>
|
||
<div class="outline-text-2" id="text-10">
|
||
</div>
|
||
<div id="outline-container-orgdfd164f" class="outline-3">
|
||
<h3 id="orgdfd164f"><span class="section-number-3">10.1</span> Introduction</h3>
|
||
</div>
|
||
<div id="outline-container-org0174f92" class="outline-3">
|
||
<h3 id="org0174f92"><span class="section-number-3">10.2</span> Nano Hexapod object</h3>
|
||
<div class="outline-text-3" id="text-10-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org83ea7c3" class="outline-4">
|
||
<h4 id="org83ea7c3"><span class="section-number-4">10.2.1</span> Flexible Joint - Bot</h4>
|
||
<div class="outline-text-4" id="text-10-2-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot = struct();
|
||
|
||
n_hexapod.flex_bot.type = 1; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
|
||
n_hexapod.flex_bot.kRx = ones(6,1)<span class="org-type">*</span>5; <span class="org-comment">% X bending stiffness [Nm/rad]</span>
|
||
n_hexapod.flex_bot.kRy = ones(6,1)<span class="org-type">*</span>5; <span class="org-comment">% Y bending stiffness [Nm/rad]</span>
|
||
n_hexapod.flex_bot.kRz = ones(6,1)<span class="org-type">*</span>260; <span class="org-comment">% Torsionnal stiffness [Nm/rad]</span>
|
||
n_hexapod.flex_bot.kz = ones(6,1)<span class="org-type">*</span>1e8; <span class="org-comment">% Axial stiffness [N/m]</span>
|
||
|
||
n_hexapod.flex_bot.cRx = ones(6,1)<span class="org-type">*</span>0.1; <span class="org-comment">% [Nm/(rad/s)]</span>
|
||
n_hexapod.flex_bot.cRy = ones(6,1)<span class="org-type">*</span>0.1; <span class="org-comment">% [Nm/(rad/s)]</span>
|
||
n_hexapod.flex_bot.cRz = ones(6,1)<span class="org-type">*</span>0.1; <span class="org-comment">% [Nm/(rad/s)]</span>
|
||
n_hexapod.flex_bot.cz = ones(6,1)<span class="org-type">*</span>1e2; <span class="org-comment">%[N/(m/s)]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org59f9e8b" class="outline-4">
|
||
<h4 id="org59f9e8b"><span class="section-number-4">10.2.2</span> Flexible Joint - Top</h4>
|
||
<div class="outline-text-4" id="text-10-2-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_top = struct();
|
||
|
||
n_hexapod.flex_top.type = 2; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
|
||
n_hexapod.flex_top.kRx = ones(6,1)<span class="org-type">*</span>5; <span class="org-comment">% X bending stiffness [Nm/rad]</span>
|
||
n_hexapod.flex_top.kRy = ones(6,1)<span class="org-type">*</span>5; <span class="org-comment">% Y bending stiffness [Nm/rad]</span>
|
||
n_hexapod.flex_top.kRz = ones(6,1)<span class="org-type">*</span>260; <span class="org-comment">% Torsionnal stiffness [Nm/rad]</span>
|
||
n_hexapod.flex_top.kz = ones(6,1)<span class="org-type">*</span>1e8; <span class="org-comment">% Axial stiffness [N/m]</span>
|
||
|
||
n_hexapod.flex_top.cRx = ones(6,1)<span class="org-type">*</span>0.1; <span class="org-comment">% [Nm/(rad/s)]</span>
|
||
n_hexapod.flex_top.cRy = ones(6,1)<span class="org-type">*</span>0.1; <span class="org-comment">% [Nm/(rad/s)]</span>
|
||
n_hexapod.flex_top.cRz = ones(6,1)<span class="org-type">*</span>0.1; <span class="org-comment">% [Nm/(rad/s)]</span>
|
||
n_hexapod.flex_top.cz = ones(6,1)<span class="org-type">*</span>1e2; <span class="org-comment">%[N/(m/s)]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgf969c85" class="outline-4">
|
||
<h4 id="orgf969c85"><span class="section-number-4">10.2.3</span> APA - 2 DoF</h4>
|
||
<div class="outline-text-4" id="text-10-2-3">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator = struct();
|
||
|
||
n_hexapod.actuator.type = 1;
|
||
|
||
n_hexapod.actuator.k = ones(6,1)<span class="org-type">*</span>0.35e6; <span class="org-comment">% [N/m]</span>
|
||
n_hexapod.actuator.ke = ones(6,1)<span class="org-type">*</span>1.5e6; <span class="org-comment">% [N/m]</span>
|
||
n_hexapod.actuator.ka = ones(6,1)<span class="org-type">*</span>43e6; <span class="org-comment">% [N/m]</span>
|
||
|
||
n_hexapod.actuator.c = ones(6,1)<span class="org-type">*</span>3e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
n_hexapod.actuator.ce = ones(6,1)<span class="org-type">*</span>1e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
n_hexapod.actuator.ca = ones(6,1)<span class="org-type">*</span>1e1; <span class="org-comment">% [N/(m/s)]</span>
|
||
|
||
n_hexapod.actuator.Leq = ones(6,1)<span class="org-type">*</span>0.056; <span class="org-comment">% [m]</span>
|
||
|
||
n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org10be291" class="outline-4">
|
||
<h4 id="org10be291"><span class="section-number-4">10.2.4</span> APA - Flexible Frame</h4>
|
||
<div class="outline-text-4" id="text-10-2-4">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator.type = 2;
|
||
|
||
n_hexapod.actuator.K = readmatrix(<span class="org-string">'APA300ML_b_mat_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
|
||
n_hexapod.actuator.M = readmatrix(<span class="org-string">'APA300ML_b_mat_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
|
||
n_hexapod.actuator.xi = 0.01; <span class="org-comment">% Damping ratio</span>
|
||
n_hexapod.actuator.P = extractNodes(<span class="org-string">'APA300ML_b_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordinates [m]</span>
|
||
|
||
n_hexapod.actuator.ks = 235e6; <span class="org-comment">% Stiffness of one stack [N/m]</span>
|
||
n_hexapod.actuator.cs = 1e1; <span class="org-comment">% Stiffness of one stack [N/m]</span>
|
||
|
||
n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org6b542ad" class="outline-4">
|
||
<h4 id="org6b542ad"><span class="section-number-4">10.2.5</span> APA - Fully Flexible</h4>
|
||
<div class="outline-text-4" id="text-10-2-5">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator.type = 3;
|
||
|
||
n_hexapod.actuator.K = readmatrix(<span class="org-string">'APA300ML_full_mat_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
|
||
n_hexapod.actuator.M = readmatrix(<span class="org-string">'APA300ML_full_mat_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
|
||
n_hexapod.actuator.xi = 0.01; <span class="org-comment">% Damping ratio</span>
|
||
n_hexapod.actuator.P = extractNodes(<span class="org-string">'APA300ML_full_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordiantes [m]</span>
|
||
|
||
n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>1; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div id="outline-container-org9563800" class="outline-3">
|
||
<h3 id="org9563800"><span class="section-number-3">10.3</span> Identification</h3>
|
||
<div class="outline-text-3" id="text-10-3">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Options for Linearized</span></span>
|
||
options = linearizeOptions;
|
||
options.SampleTime = 0;
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
|
||
mdl = <span class="org-string">'test_bench_struts'</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">'/Va'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Voltage</span>
|
||
io(io_i) = linio([mdl, <span class="org-string">'/Vs'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Sensor Voltage</span>
|
||
io(io_i) = linio([mdl, <span class="org-string">'/dL'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Relative Motion Outputs</span>
|
||
io(io_i) = linio([mdl, <span class="org-string">'/z'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Vertical Motion</span>
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Run the linearization</span></span>
|
||
Gs = linearize(mdl, io, 0.0, options);
|
||
Gs.InputName = {<span class="org-string">'Va'</span>};
|
||
Gs.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org127ad74" class="outline-3">
|
||
<h3 id="org127ad74"><span class="section-number-3">10.4</span> Compare flexible joints</h3>
|
||
<div class="outline-text-3" id="text-10-4">
|
||
</div>
|
||
<div id="outline-container-orgafd20df" class="outline-4">
|
||
<h4 id="orgafd20df"><span class="section-number-4">10.4.1</span> Perfect</h4>
|
||
<div class="outline-text-4" id="text-10-4-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot.type = 1; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
n_hexapod.flex_top.type = 2; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Gp = linearize(mdl, io, 0.0, options);
|
||
Gp.InputName = {<span class="org-string">'Va'</span>};
|
||
Gp.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org3f45fa8" class="outline-4">
|
||
<h4 id="org3f45fa8"><span class="section-number-4">10.4.2</span> Top Flexible</h4>
|
||
<div class="outline-text-4" id="text-10-4-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot.type = 1; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
n_hexapod.flex_top.type = 3; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Gt = linearize(mdl, io, 0.0, options);
|
||
Gt.InputName = {<span class="org-string">'Va'</span>};
|
||
Gt.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org4c3d557" class="outline-4">
|
||
<h4 id="org4c3d557"><span class="section-number-4">10.4.3</span> Bottom Flexible</h4>
|
||
<div class="outline-text-4" id="text-10-4-3">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot.type = 3; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
n_hexapod.flex_top.type = 2; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Gb = linearize(mdl, io, 0.0, options);
|
||
Gb.InputName = {<span class="org-string">'Va'</span>};
|
||
Gb.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgcec8048" class="outline-4">
|
||
<h4 id="orgcec8048"><span class="section-number-4">10.4.4</span> Both Flexible</h4>
|
||
<div class="outline-text-4" id="text-10-4-4">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot.type = 3; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
n_hexapod.flex_top.type = 3; <span class="org-comment">% 1: 2dof / 2: 3dof / 3: 4dof</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Gf = linearize(mdl, io, 0.0, options);
|
||
Gf.InputName = {<span class="org-string">'Va'</span>};
|
||
Gf.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgc20c535" class="outline-4">
|
||
<h4 id="orgc20c535"><span class="section-number-4">10.4.5</span> Comparison</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org28bb946" class="outline-2">
|
||
<h2 id="org28bb946"><span class="section-number-2">11</span> Resonance frequencies - APA300ML</h2>
|
||
<div class="outline-text-2" id="text-11">
|
||
</div>
|
||
<div id="outline-container-orgf0782b8" class="outline-3">
|
||
<h3 id="orgf0782b8"><span class="section-number-3">11.1</span> Introduction</h3>
|
||
<div class="outline-text-3" id="text-11-1">
|
||
<p>
|
||
Three main resonances are foreseen to be problematic for the control of the APA300ML:
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li>Mode in X-bending at 189Hz (Figure <a href="#org88f27fd">16</a>)</li>
|
||
<li>Mode in Y-bending at 285Hz (Figure <a href="#orgb3b76dd">17</a>)</li>
|
||
<li>Mode in Z-torsion at 400Hz (Figure <a href="#orgd65e692">18</a>)</li>
|
||
</ul>
|
||
|
||
|
||
<div id="org88f27fd" class="figure">
|
||
<p><img src="figs/mode_bending_x.gif" alt="mode_bending_x.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 16: </span>X-bending mode (189Hz)</p>
|
||
</div>
|
||
|
||
|
||
<div id="orgb3b76dd" class="figure">
|
||
<p><img src="figs/mode_bending_y.gif" alt="mode_bending_y.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 17: </span>Y-bending mode (285Hz)</p>
|
||
</div>
|
||
|
||
|
||
<div id="orgd65e692" class="figure">
|
||
<p><img src="figs/mode_torsion_z.gif" alt="mode_torsion_z.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 18: </span>Z-torsion mode (400Hz)</p>
|
||
</div>
|
||
|
||
<p>
|
||
These modes are present when flexible joints are fixed to the ends of the APA300ML.
|
||
</p>
|
||
|
||
<p>
|
||
In this section, we try to find the resonance frequency of these modes when one end of the APA is fixed and the other is free.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgf304c79" class="outline-3">
|
||
<h3 id="orgf304c79"><span class="section-number-3">11.2</span> Setup</h3>
|
||
<div class="outline-text-3" id="text-11-2">
|
||
<p>
|
||
The measurement setup is shown in Figure <a href="#orgeede0f9">19</a>.
|
||
A Laser vibrometer is measuring the difference of motion of two points.
|
||
The APA is excited with an instrumented hammer and the transfer function from the hammer to the measured rotation is computed.
|
||
</p>
|
||
|
||
<div class="note" id="orgc6513ac">
|
||
<ul class="org-ul">
|
||
<li>Laser Doppler Vibrometer Polytec OFV512</li>
|
||
<li>Instrumented hammer</li>
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="orgeede0f9" class="figure">
|
||
<p><img src="figs/measurement_setup_torsion.png" alt="measurement_setup_torsion.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 19: </span>Measurement setup with a Laser Doppler Vibrometer and one instrumental hammer</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org96a2449" class="outline-3">
|
||
<h3 id="org96a2449"><span class="section-number-3">11.3</span> Bending - X</h3>
|
||
<div class="outline-text-3" id="text-11-3">
|
||
<p>
|
||
The setup to measure the X-bending motion is shown in Figure <a href="#orge19538b">20</a>.
|
||
The APA is excited with an instrumented hammer having a solid metallic tip.
|
||
The impact point is on the back-side of the APA aligned with the top measurement point.
|
||
</p>
|
||
|
||
|
||
<div id="orge19538b" class="figure">
|
||
<p><img src="figs/measurement_setup_X_bending.png" alt="measurement_setup_X_bending.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 20: </span>X-Bending measurement setup</p>
|
||
</div>
|
||
|
||
<p>
|
||
The data is loaded.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">bending_X = load(<span class="org-string">'apa300ml_bending_X_top.mat'</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The config for <code>tfestimate</code> is performed:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Ts = bending_X.Track1_X_Resolution; <span class="org-comment">% Sampling frequency [Hz]</span>
|
||
win = hann(ceil(1<span class="org-type">/</span>Ts));
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The transfer function from the input force to the output “rotation” (difference between the two measured distances).
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[G_bending_X, f] = tfestimate(bending_X.Track1, bending_X.Track2, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The result is shown in Figure <a href="#orga39ba20">21</a>.
|
||
</p>
|
||
|
||
<p>
|
||
The can clearly observe a nice peak at 280Hz, and then peaks at the odd “harmonics” (third “harmonic” at 840Hz, and fifth “harmonic” at 1400Hz).
|
||
</p>
|
||
|
||
<div id="orga39ba20" class="figure">
|
||
<p><img src="figs/apa300ml_meas_freq_bending_x.png" alt="apa300ml_meas_freq_bending_x.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 21: </span>Obtained FRF for the X-bending</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgfbb0c6d" class="outline-3">
|
||
<h3 id="orgfbb0c6d"><span class="section-number-3">11.4</span> Bending - Y</h3>
|
||
<div class="outline-text-3" id="text-11-4">
|
||
<p>
|
||
The setup to measure the Y-bending is shown in Figure <a href="#org9b0f6fa">22</a>.
|
||
</p>
|
||
|
||
<p>
|
||
The impact point of the instrumented hammer is located on the back surface of the top interface (on the back of the 2 measurements points).
|
||
</p>
|
||
|
||
|
||
<div id="org9b0f6fa" class="figure">
|
||
<p><img src="figs/measurement_setup_Y_bending.png" alt="measurement_setup_Y_bending.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 22: </span>Y-Bending measurement setup</p>
|
||
</div>
|
||
|
||
<p>
|
||
The data is loaded, and the transfer function from the force to the measured rotation is computed.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">bending_Y = load(<span class="org-string">'apa300ml_bending_Y_top.mat'</span>);
|
||
[G_bending_Y, <span class="org-type">~</span>] = tfestimate(bending_Y.Track1, bending_Y.Track2, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The results are shown in Figure <a href="#org867c6c8">23</a>.
|
||
The main resonance is at 412Hz, and we also see the third “harmonic” at 1220Hz.
|
||
</p>
|
||
|
||
|
||
<div id="org867c6c8" class="figure">
|
||
<p><img src="figs/apa300ml_meas_freq_bending_y.png" alt="apa300ml_meas_freq_bending_y.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 23: </span>Obtained FRF for the Y-bending</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org7eaa560" class="outline-3">
|
||
<h3 id="org7eaa560"><span class="section-number-3">11.5</span> Torsion - Z</h3>
|
||
<div class="outline-text-3" id="text-11-5">
|
||
<p>
|
||
Finally, we measure the Z-torsion resonance as shown in Figure <a href="#orga83803f">24</a>.
|
||
</p>
|
||
|
||
<p>
|
||
The excitation is shown on the other side of the APA, on the side to excite the torsion motion.
|
||
</p>
|
||
|
||
|
||
<div id="orga83803f" class="figure">
|
||
<p><img src="figs/measurement_setup_torsion_bis.png" alt="measurement_setup_torsion_bis.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 24: </span>Z-Torsion measurement setup</p>
|
||
</div>
|
||
|
||
<p>
|
||
The data is loaded, and the transfer function computed.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">torsion = load(<span class="org-string">'apa300ml_torsion_left.mat'</span>);
|
||
[G_torsion, <span class="org-type">~</span>] = tfestimate(torsion.Track1, torsion.Track2, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The results are shown in Figure <a href="#orgd71bffd">25</a>.
|
||
We observe a first peak at 267Hz, which corresponds to the X-bending mode that was measured at 280Hz.
|
||
And then a second peak at 415Hz, which corresponds to the X-bending mode that was measured at 412Hz.
|
||
The mode in pure torsion is probably at higher frequency (peak around 1kHz?).
|
||
</p>
|
||
|
||
<div id="orgd71bffd" class="figure">
|
||
<p><img src="figs/apa300ml_meas_freq_torsion_z.png" alt="apa300ml_meas_freq_torsion_z.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 25: </span>Obtained FRF for the Z-torsion</p>
|
||
</div>
|
||
|
||
<p>
|
||
In order to verify that, the APA is excited on the top part such that the torsion mode should not be excited.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">torsion = load(<span class="org-string">'apa300ml_torsion_top.mat'</span>);
|
||
[G_torsion_top, <span class="org-type">~</span>] = tfestimate(torsion.Track1, torsion.Track2, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The two FRF are compared in Figure <a href="#org5422aaf">26</a>.
|
||
It is clear that the first two modes does not correspond to the torsional mode.
|
||
Maybe the resonance at 800Hz, or even higher resonances. It is difficult to conclude here.
|
||
</p>
|
||
|
||
<div id="org5422aaf" class="figure">
|
||
<p><img src="figs/apa300ml_meas_freq_torsion_z_comp.png" alt="apa300ml_meas_freq_torsion_z_comp.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 26: </span>Obtained FRF for the Z-torsion</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org4853ac0" class="outline-3">
|
||
<h3 id="org4853ac0"><span class="section-number-3">11.6</span> Compare</h3>
|
||
<div class="outline-text-3" id="text-11-6">
|
||
<p>
|
||
The three measurements are shown in Figure <a href="#org3db57c2">27</a>.
|
||
</p>
|
||
|
||
<div id="org3db57c2" class="figure">
|
||
<p><img src="figs/apa300ml_meas_freq_compare.png" alt="apa300ml_meas_freq_compare.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 27: </span>Obtained FRF - Comparison</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgbbf6ae6" class="outline-3">
|
||
<h3 id="orgbbf6ae6"><span class="section-number-3">11.7</span> Conclusion</h3>
|
||
<div class="outline-text-3" id="text-11-7">
|
||
<p>
|
||
When two flexible joints are fixed at each ends of the APA, the APA is mostly in a free/free condition in terms of bending/torsion (the bending/torsional stiffness of the joints being very small).
|
||
</p>
|
||
|
||
<p>
|
||
In the current tests, the APA are in a fixed/free condition.
|
||
Therefore, it is quite obvious that we measured higher resonance frequencies than what is foreseen for the struts.
|
||
It is however quite interesting that there is a factor \(\approx \sqrt{2}\) between the two (increased of the stiffness by a factor 2?).
|
||
</p>
|
||
|
||
<table id="org18a6c00" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||
<caption class="t-above"><span class="table-number">Table 4:</span> Measured frequency of the modes</caption>
|
||
|
||
<colgroup>
|
||
<col class="org-left" />
|
||
|
||
<col class="org-left" />
|
||
|
||
<col class="org-left" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col" class="org-left">Mode</th>
|
||
<th scope="col" class="org-left">Strut Mode</th>
|
||
<th scope="col" class="org-left">Measured Frequency</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="org-left">X-Bending</td>
|
||
<td class="org-left">189Hz</td>
|
||
<td class="org-left">280Hz</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">Y-Bending</td>
|
||
<td class="org-left">285Hz</td>
|
||
<td class="org-left">410Hz</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">Z-Torsion</td>
|
||
<td class="org-left">400Hz</td>
|
||
<td class="org-left">?</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<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>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:157–65.</div>
|
||
</div>
|
||
</div>
|
||
<div id="postamble" class="status">
|
||
<p class="author">Author: Dehaeze Thomas</p>
|
||
<p class="date">Created: 2021-05-06 jeu. 21:55</p>
|
||
</div>
|
||
</body>
|
||
</html>
|