3849 lines
165 KiB
HTML
3849 lines
165 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-06-04 ven. 12:04 -->
|
||
<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="#org22673bd">1. Model of an Amplified Piezoelectric Actuator and Sensor</a></li>
|
||
<li><a href="#orgbc261e6">2. First Basic Measurements</a>
|
||
<ul>
|
||
<li><a href="#orgc1c09ea">2.1. Geometrical Measurements</a>
|
||
<ul>
|
||
<li><a href="#org4b5eca5">2.1.1. Measurement Setup</a></li>
|
||
<li><a href="#org3b8cde8">2.1.2. Measurement Results</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org01302b9">2.2. Electrical Measurements</a></li>
|
||
<li><a href="#orgf1f1e00">2.3. Stroke measurement</a>
|
||
<ul>
|
||
<li><a href="#org4cb4275">2.3.1. Voltage applied on one stack</a></li>
|
||
<li><a href="#org2156172">2.3.2. Voltage applied on two stacks</a></li>
|
||
<li><a href="#org0d2db49">2.3.3. Voltage applied on all three stacks</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org1e66317">2.4. Spurious resonances</a>
|
||
<ul>
|
||
<li><a href="#org97119e0">2.4.1. Introduction</a></li>
|
||
<li><a href="#org9391682">2.4.2. Setup</a></li>
|
||
<li><a href="#org3a831c5">2.4.3. Bending - X</a></li>
|
||
<li><a href="#org5a8b9a6">2.4.4. Bending - Y</a></li>
|
||
<li><a href="#orgb82af54">2.4.5. Torsion - Z</a></li>
|
||
<li><a href="#orgd66b62a">2.4.6. Compare</a></li>
|
||
<li><a href="#org76052ca">2.4.7. Conclusion</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org1387eb3">3. Dynamical measurements - APA</a>
|
||
<ul>
|
||
<li><a href="#org68e4c37">3.1. Speedgoat Setup</a>
|
||
<ul>
|
||
<li><a href="#org07544c3">3.1.1. <code>frf_setup.m</code> - Measurement Setup</a></li>
|
||
<li><a href="#orgd6aab13">3.1.2. <code>frf_save.m</code> - Save Data</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org3faf04d">3.2. Measurements on APA 1</a>
|
||
<ul>
|
||
<li><a href="#orgce96181">3.2.1. Excitation Signal</a></li>
|
||
<li><a href="#org01ff959">3.2.2. FRF Identification - Setup</a></li>
|
||
<li><a href="#orgfd75668">3.2.3. FRF Identification - Displacement</a></li>
|
||
<li><a href="#orgebc4edd">3.2.4. FRF Identification - Force Sensor</a></li>
|
||
<li><a href="#orga04645d">3.2.5. Extract Parameters (Actuator/Sensor constants)</a>
|
||
<ul>
|
||
<li><a href="#org3f8bebf">3.2.5.1. Piezoelectric Actuator Constant</a></li>
|
||
<li><a href="#org2f80a64">3.2.5.2. Piezoelectric Sensor Constant</a></li>
|
||
<li><a href="#org598123d">3.2.5.3. Results</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org5c1af51">3.2.6. Hysteresis</a></li>
|
||
<li><a href="#org44631a7">3.2.7. Estimation of the APA axial stiffness</a></li>
|
||
<li><a href="#org9664a13">3.2.8. Stiffness change due to electrical connections</a></li>
|
||
<li><a href="#org3808705">3.2.9. Effect of the resistor on the IFF Plant</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org506cc9d">3.3. Comparison of all the APA</a>
|
||
<ul>
|
||
<li><a href="#org440d72f">3.3.1. Axial Stiffnesses - Comparison</a></li>
|
||
<li><a href="#org3e64bba">3.3.2. FRF Identification - Setup</a></li>
|
||
<li><a href="#org95409ec">3.3.3. FRF Identification - DVF</a></li>
|
||
<li><a href="#orgd4e7528">3.3.4. FRF Identification - IFF</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgc08fc77">4. Dynamical measurements - Struts</a>
|
||
<ul>
|
||
<li><a href="#org00bf15c">4.1. Measurement on Strut 1</a>
|
||
<ul>
|
||
<li><a href="#orgf54bb7c">4.1.1. Without Encoder</a>
|
||
<ul>
|
||
<li><a href="#orgda0810d">4.1.1.1. FRF Identification - Setup</a></li>
|
||
<li><a href="#orge6d01ba">4.1.1.2. FRF Identification - Displacement</a></li>
|
||
<li><a href="#orgbc35002">4.1.1.3. FRF Identification - IFF</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org324a5e9">4.1.2. With Encoder</a>
|
||
<ul>
|
||
<li><a href="#org4a6c0e2">4.1.2.1. Measurement Data</a></li>
|
||
<li><a href="#org84d333a">4.1.2.2. FRF Identification - DVF</a></li>
|
||
<li><a href="#org573d710">4.1.2.3. Comparison of the Encoder and Interferometer</a></li>
|
||
<li><a href="#orge0da3dc">4.1.2.4. APA Resonances Frequency</a></li>
|
||
<li><a href="#org8029ce9">4.1.2.5. Estimated Flexible Joint axial stiffness</a></li>
|
||
<li><a href="#org4fd5b09">4.1.2.6. FRF Identification - IFF</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orga736f7e">4.2. Comparison of all the Struts</a>
|
||
<ul>
|
||
<li><a href="#orgcb6944e">4.2.1. FRF Identification - Setup</a></li>
|
||
<li><a href="#org41cefd8">4.2.2. FRF Identification - DVF</a></li>
|
||
<li><a href="#org492b68f">4.2.3. FRF Identification - DVF with interferometer</a></li>
|
||
<li><a href="#orgfd5dd6a">4.2.4. FRF Identification - IFF</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org28ac2a5">5. Test Bench APA300ML - Simscape Model</a>
|
||
<ul>
|
||
<li><a href="#org6069fc1">5.1. Introduction</a></li>
|
||
<li><a href="#org1529834">5.2. Nano Hexapod object</a>
|
||
<ul>
|
||
<li><a href="#orga116ec4">5.2.1. APA - 2 DoF</a></li>
|
||
<li><a href="#org10ce794">5.2.2. APA - Flexible Frame</a></li>
|
||
<li><a href="#orgea27c52">5.2.3. APA - Fully Flexible</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgf018826">5.3. Identification</a></li>
|
||
<li><a href="#org70a9954">5.4. Compare 2-DoF with flexible</a>
|
||
<ul>
|
||
<li><a href="#orgb042578">5.4.1. APA - 2 DoF</a></li>
|
||
<li><a href="#orga522837">5.4.2. APA - Fully Flexible</a></li>
|
||
<li><a href="#org955f432">5.4.3. Comparison</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org75c145b">6. Test Bench Struts - Simscape Model</a>
|
||
<ul>
|
||
<li><a href="#org33e46af">6.1. Introduction</a></li>
|
||
<li><a href="#org8e89838">6.2. Nano Hexapod object</a>
|
||
<ul>
|
||
<li><a href="#org2adfb29">6.2.1. Flexible Joint - Bot</a></li>
|
||
<li><a href="#orgbab2a52">6.2.2. Flexible Joint - Top</a></li>
|
||
<li><a href="#orgb940d24">6.2.3. APA - 2 DoF</a></li>
|
||
<li><a href="#org0d5ca24">6.2.4. APA - Flexible Frame</a></li>
|
||
<li><a href="#org38421c7">6.2.5. APA - Fully Flexible</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org8386920">6.3. Identification</a></li>
|
||
<li><a href="#orgfc36d66">6.4. Compare flexible joints</a>
|
||
<ul>
|
||
<li><a href="#orge4d3b0f">6.4.1. Perfect</a></li>
|
||
<li><a href="#orgbaf4ec8">6.4.2. Top Flexible</a></li>
|
||
<li><a href="#org98b1cea">6.4.3. Bottom Flexible</a></li>
|
||
<li><a href="#org4503331">6.4.4. Both Flexible</a></li>
|
||
<li><a href="#org4a1295c">6.4.5. Comparison</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org2342930">7. Function</a>
|
||
<ul>
|
||
<li><a href="#orgc7c4b95">7.1. <code>generateSweepExc</code>: Generate sweep sinus excitation</a>
|
||
<ul>
|
||
<li><a href="#orgc4bb034">Function description</a></li>
|
||
<li><a href="#org236758c">Optional Parameters</a></li>
|
||
<li><a href="#org7370e05">Sweep Sine part</a></li>
|
||
<li><a href="#org7bf90fb">Smooth Ends</a></li>
|
||
<li><a href="#orgb10708b">Combine Excitation signals</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org6320a08">7.2. <code>generateShapedNoise</code>: Generate Shaped Noise excitation</a>
|
||
<ul>
|
||
<li><a href="#org8475d04">Function description</a></li>
|
||
<li><a href="#org455379f">Optional Parameters</a></li>
|
||
<li><a href="#org9033806">Shaped Noise</a></li>
|
||
<li><a href="#orge0044cd">Smooth Ends</a></li>
|
||
<li><a href="#org6d9e07c">Combine Excitation signals</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org0e30912">7.3. <code>generateSinIncreasingAmpl</code>: Generate Sinus with increasing amplitude</a>
|
||
<ul>
|
||
<li><a href="#org367b7cb">Function description</a></li>
|
||
<li><a href="#orge543802">Optional Parameters</a></li>
|
||
<li><a href="#orge83b518">Sinus excitation</a></li>
|
||
<li><a href="#org7837dc5">Smooth Ends</a></li>
|
||
<li><a href="#orgf0f823e">Combine Excitation signals</a></li>
|
||
</ul>
|
||
</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="org55cde53" 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-org22673bd" class="outline-2">
|
||
<h2 id="org22673bd"><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="#org756a7d2">2</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org756a7d2" 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="#org862622f">3</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org862622f" 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-orgbc261e6" class="outline-2">
|
||
<h2 id="orgbc261e6"><span class="section-number-2">2</span> First Basic Measurements</h2>
|
||
<div class="outline-text-2" id="text-2">
|
||
<p>
|
||
<a id="orgf0816b0"></a>
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li>Section <a href="#org1c63505">2.1</a>:</li>
|
||
<li>Section <a href="#org7b17008">2.2</a>:</li>
|
||
<li>Section <a href="#org47e0fd9">2.3</a>:</li>
|
||
<li>Section <a href="#org81b1cc2">2.4</a>:</li>
|
||
</ul>
|
||
</div>
|
||
<div id="outline-container-orgc1c09ea" class="outline-3">
|
||
<h3 id="orgc1c09ea"><span class="section-number-3">2.1</span> Geometrical Measurements</h3>
|
||
<div class="outline-text-3" id="text-2-1">
|
||
<p>
|
||
<a id="org1c63505"></a>
|
||
</p>
|
||
<p>
|
||
The received APA are shown in Figure <a href="#org8c1141a">4</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org8c1141a" 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-org4b5eca5" class="outline-4">
|
||
<h4 id="org4b5eca5"><span class="section-number-4">2.1.1</span> Measurement Setup</h4>
|
||
<div class="outline-text-4" id="text-2-1-1">
|
||
<p>
|
||
The flatness corresponding to the two interface planes are measured as shown in Figure <a href="#org5e655e1">5</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org5e655e1" 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-org3b8cde8" class="outline-4">
|
||
<h4 id="org3b8cde8"><span class="section-number-4">2.1.2</span> Measurement Results</h4>
|
||
<div class="outline-text-4" id="text-2-1-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="#org77aa723">1</a>.
|
||
</p>
|
||
|
||
<table id="org77aa723" 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-org01302b9" class="outline-3">
|
||
<h3 id="org01302b9"><span class="section-number-3">2.2</span> Electrical Measurements</h3>
|
||
<div class="outline-text-3" id="text-2-2">
|
||
<p>
|
||
<a id="org7b17008"></a>
|
||
</p>
|
||
|
||
<div class="note" id="orgace4947">
|
||
<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="org2fc5ade" 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="orgf66f06f" 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="orgbff174c">
|
||
<p>
|
||
There is clearly a problem with APA300ML number 3
|
||
</p>
|
||
|
||
</div>
|
||
|
||
<p>
|
||
The APA number 3 has ben sent back to Cedrat, and a new APA300ML has been shipped back.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgf1f1e00" class="outline-3">
|
||
<h3 id="orgf1f1e00"><span class="section-number-3">2.3</span> Stroke measurement</h3>
|
||
<div class="outline-text-3" id="text-2-3">
|
||
<p>
|
||
<a id="org47e0fd9"></a>
|
||
</p>
|
||
<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="#org4db8bc0">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="org5dadc47">
|
||
<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="org4db8bc0" 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-org4cb4275" class="outline-4">
|
||
<h4 id="org4cb4275"><span class="section-number-4">2.3.1</span> Voltage applied on one stack</h4>
|
||
<div class="outline-text-4" id="text-2-3-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="#orge651737">8</a>.
|
||
</p>
|
||
|
||
|
||
<div id="orge651737" 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="#orgcbd945c">9</a>.
|
||
The displacement is set to zero at initial time when the voltage applied is -20V.
|
||
</p>
|
||
|
||
|
||
<div id="orgcbd945c" 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="#org1fd4be9">10</a>.
|
||
We can clearly see that there is a problem with the APA 3.
|
||
Also, there is a large hysteresis.
|
||
</p>
|
||
|
||
|
||
<div id="org1fd4be9" 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="orgaf65cb1">
|
||
<p>
|
||
We can clearly see from Figure <a href="#org1fd4be9">10</a> that there is a problem with the APA number 3.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org2156172" class="outline-4">
|
||
<h4 id="org2156172"><span class="section-number-4">2.3.2</span> Voltage applied on two stacks</h4>
|
||
<div class="outline-text-4" id="text-2-3-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="#org5508654">11</a>.
|
||
The displacement is set to zero at initial time when the voltage applied is -20V.
|
||
</p>
|
||
|
||
|
||
<div id="org5508654" 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="#org0eebba9">12</a>.
|
||
We can clearly see that there is a problem with the APA 3.
|
||
Also, there is a large hysteresis.
|
||
</p>
|
||
|
||
|
||
<div id="org0eebba9" 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-org0d2db49" class="outline-4">
|
||
<h4 id="org0d2db49"><span class="section-number-4">2.3.3</span> Voltage applied on all three stacks</h4>
|
||
<div class="outline-text-4" id="text-2-3-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="#org3e06e93">13</a>).
|
||
</p>
|
||
|
||
|
||
<div id="org3e06e93" 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="#orgbb6678b">3</a>.
|
||
</p>
|
||
|
||
<table id="orgbb6678b" 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-org1e66317" class="outline-3">
|
||
<h3 id="org1e66317"><span class="section-number-3">2.4</span> Spurious resonances</h3>
|
||
<div class="outline-text-3" id="text-2-4">
|
||
<p>
|
||
<a id="org81b1cc2"></a>
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org97119e0" class="outline-4">
|
||
<h4 id="org97119e0"><span class="section-number-4">2.4.1</span> Introduction</h4>
|
||
<div class="outline-text-4" id="text-2-4-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="#orgf7ffea6">14</a>)</li>
|
||
<li>Mode in Y-bending at 285Hz (Figure <a href="#org4156333">15</a>)</li>
|
||
<li>Mode in Z-torsion at 400Hz (Figure <a href="#org2ad0e10">16</a>)</li>
|
||
</ul>
|
||
|
||
|
||
<div id="orgf7ffea6" class="figure">
|
||
<p><img src="figs/mode_bending_x.gif" alt="mode_bending_x.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 14: </span>X-bending mode (189Hz)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org4156333" class="figure">
|
||
<p><img src="figs/mode_bending_y.gif" alt="mode_bending_y.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 15: </span>Y-bending mode (285Hz)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org2ad0e10" class="figure">
|
||
<p><img src="figs/mode_torsion_z.gif" alt="mode_torsion_z.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 16: </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-org9391682" class="outline-4">
|
||
<h4 id="org9391682"><span class="section-number-4">2.4.2</span> Setup</h4>
|
||
<div class="outline-text-4" id="text-2-4-2">
|
||
<p>
|
||
The measurement setup is shown in Figure <a href="#orgeb1b73e">17</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="org730ff87">
|
||
<ul class="org-ul">
|
||
<li>Laser Doppler Vibrometer Polytec OFV512</li>
|
||
<li>Instrumented hammer</li>
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="orgeb1b73e" class="figure">
|
||
<p><img src="figs/measurement_setup_torsion.jpg" alt="measurement_setup_torsion.jpg" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 17: </span>Measurement setup with a Laser Doppler Vibrometer and one instrumental hammer</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org3a831c5" class="outline-4">
|
||
<h4 id="org3a831c5"><span class="section-number-4">2.4.3</span> Bending - X</h4>
|
||
<div class="outline-text-4" id="text-2-4-3">
|
||
<p>
|
||
The setup to measure the X-bending motion is shown in Figure <a href="#org63b1924">18</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="org63b1924" class="figure">
|
||
<p><img src="figs/measurement_setup_X_bending.jpg" alt="measurement_setup_X_bending.jpg" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 18: </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="#orga93a004">19</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="orga93a004" 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 19: </span>Obtained FRF for the X-bending</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org5a8b9a6" class="outline-4">
|
||
<h4 id="org5a8b9a6"><span class="section-number-4">2.4.4</span> Bending - Y</h4>
|
||
<div class="outline-text-4" id="text-2-4-4">
|
||
<p>
|
||
The setup to measure the Y-bending is shown in Figure <a href="#org842df0d">20</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="org842df0d" class="figure">
|
||
<p><img src="figs/measurement_setup_Y_bending.jpg" alt="measurement_setup_Y_bending.jpg" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 20: </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="#org5d1c393">21</a>.
|
||
The main resonance is at 412Hz, and we also see the third “harmonic” at 1220Hz.
|
||
</p>
|
||
|
||
|
||
<div id="org5d1c393" 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 21: </span>Obtained FRF for the Y-bending</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgb82af54" class="outline-4">
|
||
<h4 id="orgb82af54"><span class="section-number-4">2.4.5</span> Torsion - Z</h4>
|
||
<div class="outline-text-4" id="text-2-4-5">
|
||
<p>
|
||
Finally, we measure the Z-torsion resonance as shown in Figure <a href="#org2a345c5">22</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="org2a345c5" class="figure">
|
||
<p><img src="figs/measurement_setup_torsion_bis.jpg" alt="measurement_setup_torsion_bis.jpg" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 22: </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="#org2f1b0eb">23</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="org2f1b0eb" 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 23: </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="#orga18ec06">24</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="orga18ec06" 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 24: </span>Obtained FRF for the Z-torsion</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd66b62a" class="outline-4">
|
||
<h4 id="orgd66b62a"><span class="section-number-4">2.4.6</span> Compare</h4>
|
||
<div class="outline-text-4" id="text-2-4-6">
|
||
<p>
|
||
The three measurements are shown in Figure <a href="#org0d5f1d6">25</a>.
|
||
</p>
|
||
|
||
<div id="org0d5f1d6" class="figure">
|
||
<p><img src="figs/apa300ml_meas_freq_compare.png" alt="apa300ml_meas_freq_compare.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 25: </span>Obtained FRF - Comparison</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org76052ca" class="outline-4">
|
||
<h4 id="org76052ca"><span class="section-number-4">2.4.7</span> Conclusion</h4>
|
||
<div class="outline-text-4" id="text-2-4-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="org87dba41" 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>
|
||
</div>
|
||
|
||
<div id="outline-container-org1387eb3" class="outline-2">
|
||
<h2 id="org1387eb3"><span class="section-number-2">3</span> Dynamical measurements - APA</h2>
|
||
<div class="outline-text-2" id="text-3">
|
||
<p>
|
||
<a id="orgd14bdae"></a>
|
||
</p>
|
||
<p>
|
||
In this section, a measurement test bench is used to identify the dynamics of the APA.
|
||
</p>
|
||
|
||
<p>
|
||
The bench is shown in Figure <a href="#org9258932">26</a>, and a zoom picture on the APA and encoder is shown in Figure <a href="#orgfc33a9e">27</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org9258932" class="figure">
|
||
<p><img src="figs/picture_apa_bench.png" alt="picture_apa_bench.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 26: </span>Picture of the test bench</p>
|
||
</div>
|
||
|
||
|
||
<div id="orgfc33a9e" class="figure">
|
||
<p><img src="figs/picture_apa_bench_encoder.png" alt="picture_apa_bench_encoder.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 27: </span>Zoom on the APA with the encoder</p>
|
||
</div>
|
||
|
||
<div class="note" id="org6db4e17">
|
||
<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>
|
||
|
||
<p>
|
||
The bench is schematically shown in Figure <a href="#org409f8fa">28</a> and the signal used are summarized in Table <a href="#orgf378a33">5</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org409f8fa" class="figure">
|
||
<p><img src="figs/test_bench_apa_alone.png" alt="test_bench_apa_alone.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 28: </span>Schematic of the Test Bench</p>
|
||
</div>
|
||
|
||
<table id="orgf378a33" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||
<caption class="t-above"><span class="table-number">Table 5:</span> Variables used during the measurements</caption>
|
||
|
||
<colgroup>
|
||
<col class="org-left" />
|
||
|
||
<col class="org-left" />
|
||
|
||
<col class="org-left" />
|
||
|
||
<col class="org-left" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col" class="org-left">Variable</th>
|
||
<th scope="col" class="org-left">Description</th>
|
||
<th scope="col" class="org-left">Unit</th>
|
||
<th scope="col" class="org-left">Hardware</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="org-left"><code>Va</code></td>
|
||
<td class="org-left">Output DAC voltage</td>
|
||
<td class="org-left">[V]</td>
|
||
<td class="org-left">DAC - Ch. 1 => PD200 => APA</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left"><code>Vs</code></td>
|
||
<td class="org-left">Measured stack voltage (ADC)</td>
|
||
<td class="org-left">[V]</td>
|
||
<td class="org-left">APA => ADC - Ch. 1</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left"><code>de</code></td>
|
||
<td class="org-left">Encoder Measurement</td>
|
||
<td class="org-left">[m]</td>
|
||
<td class="org-left">PEPU Ch. 1 - IO318(1) - Ch. 1</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left"><code>da</code></td>
|
||
<td class="org-left">Attocube Measurement</td>
|
||
<td class="org-left">[m]</td>
|
||
<td class="org-left">PEPU Ch. 2 - IO318(1) - Ch. 2</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left"><code>t</code></td>
|
||
<td class="org-left">Time</td>
|
||
<td class="org-left">[s]</td>
|
||
<td class="org-left"> </td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<p>
|
||
This section is structured as follows:
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li>Section <a href="#org6c93c81">3.1</a>: the Speedgoat setup is described (excitation signals, saved signals, etc.)</li>
|
||
<li>Section <a href="#orgecbdb2c">3.2</a>: the measurements are first performed on one APA.</li>
|
||
<li>Section <a href="#org15c6a41">3.3</a>: the same measurements are performed on all the APA and are compared.</li>
|
||
</ul>
|
||
</div>
|
||
<div id="outline-container-org68e4c37" class="outline-3">
|
||
<h3 id="org68e4c37"><span class="section-number-3">3.1</span> Speedgoat Setup</h3>
|
||
<div class="outline-text-3" id="text-3-1">
|
||
<p>
|
||
<a id="org6c93c81"></a>
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org07544c3" class="outline-4">
|
||
<h4 id="org07544c3"><span class="section-number-4">3.1.1</span> <code>frf_setup.m</code> - Measurement Setup</h4>
|
||
<div class="outline-text-4" id="text-3-1-1">
|
||
<p>
|
||
First is defined the sampling frequency:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Simulation configuration</span></span>
|
||
Fs = 10e3; <span class="org-comment">% Sampling Frequency [Hz]</span>
|
||
Ts = 1<span class="org-type">/</span>Fs; <span class="org-comment">% Sampling Time [s]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Data record configuration</span></span>
|
||
Trec_start = 5; <span class="org-comment">% Start time for Recording [s]</span>
|
||
Trec_dur = 100; <span class="org-comment">% Recording Duration [s]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Tsim = 2<span class="org-type">*</span>Trec_start <span class="org-type">+</span> Trec_dur; <span class="org-comment">% Simulation Time [s]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
A white noise excitation signal can be very useful in order to obtain a first idea of the plant FRF.
|
||
The gain can be gradually increased until satisfactory output is obtained.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Shaped Noise</span></span>
|
||
V_noise = generateShapedNoise(<span class="org-string">'Ts'</span>, 1<span class="org-type">/</span>Fs, ...
|
||
<span class="org-string">'V_mean'</span>, 3.25, ...
|
||
<span class="org-string">'t_start'</span>, Trec_start, ...
|
||
<span class="org-string">'exc_duration'</span>, Trec_dur, ...
|
||
<span class="org-string">'smooth_ends'</span>, <span class="org-constant">true</span>, ...
|
||
<span class="org-string">'V_exc'</span>, 0.05<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));
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org64542a1" class="figure">
|
||
<p><img src="figs/frf_meas_noise_excitation.png" alt="frf_meas_noise_excitation.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 29: </span>Example of Shaped noise excitation signal</p>
|
||
</div>
|
||
|
||
<p>
|
||
The maximum excitation voltage at resonance is 9Vrms, therefore corresponding to 0.6V of output DAC voltage.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Sweep Sine</span></span>
|
||
gc = 0.1;
|
||
xi = 0.5;
|
||
wn = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>94.3;
|
||
|
||
<span class="org-comment">% Notch filter at the resonance of the APA</span>
|
||
G_sweep = 0.2<span class="org-type">*</span>(s<span class="org-type">^</span>2 <span class="org-type">+</span> 2<span class="org-type">*</span>gc<span class="org-type">*</span>xi<span class="org-type">*</span>wn<span class="org-type">*</span>s <span class="org-type">+</span> wn<span class="org-type">^</span>2)<span class="org-type">/</span>(s<span class="org-type">^</span>2 <span class="org-type">+</span> 2<span class="org-type">*</span>xi<span class="org-type">*</span>wn<span class="org-type">*</span>s <span class="org-type">+</span> wn<span class="org-type">^</span>2);
|
||
|
||
V_sweep = generateSweepExc(<span class="org-string">'Ts'</span>, Ts, ...
|
||
<span class="org-string">'f_start'</span>, 10, ...
|
||
<span class="org-string">'f_end'</span>, 400, ...
|
||
<span class="org-string">'V_mean'</span>, 3.25, ...
|
||
<span class="org-string">'t_start'</span>, Trec_start, ...
|
||
<span class="org-string">'exc_duration'</span>, Trec_dur, ...
|
||
<span class="org-string">'sweep_type'</span>, <span class="org-string">'log'</span>, ...
|
||
<span class="org-string">'V_exc'</span>, G_sweep<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>500));
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org7542fcd" class="figure">
|
||
<p><img src="figs/frf_meas_sweep_excitation.png" alt="frf_meas_sweep_excitation.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 30: </span>Example of Sweep Sin excitation signal</p>
|
||
</div>
|
||
|
||
<p>
|
||
In order to better estimate the high frequency dynamics, a band-limited noise can be used (Figure <a href="#org83e3006">31</a>).
|
||
The frequency content of the noise can be precisely controlled.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% High Frequency Shaped Noise</span></span>
|
||
[b,a] = cheby1(10, 2, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>[300 2e3], <span class="org-string">'bandpass'</span>, <span class="org-string">'s'</span>);
|
||
wL = 0.005<span class="org-type">*</span>tf(b, a);
|
||
|
||
V_noise_hf = generateShapedNoise(<span class="org-string">'Ts'</span>, 1<span class="org-type">/</span>Fs, ...
|
||
<span class="org-string">'V_mean'</span>, 3.25, ...
|
||
<span class="org-string">'t_start'</span>, Trec_start, ...
|
||
<span class="org-string">'exc_duration'</span>, Trec_dur, ...
|
||
<span class="org-string">'smooth_ends'</span>, <span class="org-constant">true</span>, ...
|
||
<span class="org-string">'V_exc'</span>, wL);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org83e3006" class="figure">
|
||
<p><img src="figs/frf_meas_noise_hf_exc.png" alt="frf_meas_noise_hf_exc.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 31: </span>Example of band-limited noise excitation signal</p>
|
||
</div>
|
||
|
||
|
||
<p>
|
||
Then a sinus excitation can be used to estimate the hysteresis.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Sinus excitation with increasing amplitude</span></span>
|
||
V_sin = generateSinIncreasingAmpl(<span class="org-string">'Ts'</span>, 1<span class="org-type">/</span>Fs, ...
|
||
<span class="org-string">'V_mean'</span>, 3.25, ...
|
||
<span class="org-string">'sin_ampls'</span>, [0.1, 0.2, 0.4, 1, 2, 4], ...
|
||
<span class="org-string">'sin_period'</span>, 1, ...
|
||
<span class="org-string">'sin_num'</span>, 5, ...
|
||
<span class="org-string">'t_start'</span>, Trec_start, ...
|
||
<span class="org-string">'smooth_ends'</span>, <span class="org-constant">true</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org9f99320" class="figure">
|
||
<p><img src="figs/frf_meas_sin_excitation.png" alt="frf_meas_sin_excitation.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 32: </span>Example of Shaped noise excitation signal</p>
|
||
</div>
|
||
|
||
<p>
|
||
Then, we select the wanted excitation signal.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Select the excitation signal</span></span>
|
||
V_exc = timeseries(V_noise(2,<span class="org-type">:</span>), V_noise(1,<span class="org-type">:</span>));
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Save data that will be loaded in the Simulink file</span></span>
|
||
save(<span class="org-string">'./frf_data.mat'</span>, <span class="org-string">'Fs'</span>, <span class="org-string">'Ts'</span>, <span class="org-string">'Tsim'</span>, <span class="org-string">'Trec_start'</span>, <span class="org-string">'Trec_dur'</span>, <span class="org-string">'V_exc'</span>);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd6aab13" class="outline-4">
|
||
<h4 id="orgd6aab13"><span class="section-number-4">3.1.2</span> <code>frf_save.m</code> - Save Data</h4>
|
||
<div class="outline-text-4" id="text-3-1-2">
|
||
<p>
|
||
First, we get data from the Speedgoat:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">tg = slrt;
|
||
|
||
f = SimulinkRealTime.openFTP(tg);
|
||
mget(f, <span class="org-string">'data/data.dat'</span>);
|
||
close(f);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
And we load the data on the Workspace:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">data = SimulinkRealTime.utils.getFileScopeData(<span class="org-string">'data/data.dat'</span>).data;
|
||
|
||
da = data(<span class="org-type">:</span>, 1); <span class="org-comment">% Excitation Voltage (input of PD200) [V]</span>
|
||
de = data(<span class="org-type">:</span>, 2); <span class="org-comment">% Measured voltage (force sensor) [V]</span>
|
||
Vs = data(<span class="org-type">:</span>, 3); <span class="org-comment">% Measurment displacement (encoder) [m]</span>
|
||
Va = data(<span class="org-type">:</span>, 4); <span class="org-comment">% Measurement displacement (attocube) [m]</span>
|
||
t = data(<span class="org-type">:</span>, end); <span class="org-comment">% Time [s]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
And we save this to a <code>mat</code> file:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_number = 1;
|
||
|
||
save(sprintf(<span class="org-string">'mat/frf_data_%i_huddle.mat'</span>, apa_number), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org3faf04d" class="outline-3">
|
||
<h3 id="org3faf04d"><span class="section-number-3">3.2</span> Measurements on APA 1</h3>
|
||
<div class="outline-text-3" id="text-3-2">
|
||
<p>
|
||
<a id="orgecbdb2c"></a>
|
||
</p>
|
||
<p>
|
||
Measurements are first performed on only <b>one</b> APA.
|
||
Once the measurement procedure is validated, it is performed on all the other APA.
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-orgce96181" class="outline-4">
|
||
<h4 id="orgce96181"><span class="section-number-4">3.2.1</span> Excitation Signal</h4>
|
||
<div class="outline-text-4" id="text-3-2-1">
|
||
<p>
|
||
For this first measurement, a basic logarithmic sweep is used between 10Hz and 2kHz.
|
||
</p>
|
||
|
||
<p>
|
||
The data are loaded.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_sweep = load(sprintf(<span class="org-string">'mat/frf_data_%i_sweep.mat'</span>, 1), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'da'</span>, <span class="org-string">'de'</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The initial time is set to zero.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Time vector</span></span>
|
||
t = apa_sweep.t <span class="org-type">-</span> apa_sweep.t(1) ; <span class="org-comment">% Time vector [s]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The excitation signal is shown in Figure <a href="#org9c62618">33</a>.
|
||
It is a sweep sine from 10Hz up to 2kHz filtered with a notch centered with the main resonance of the system and a low pass filter.
|
||
</p>
|
||
|
||
<div id="org9c62618" class="figure">
|
||
<p><img src="figs/apa_bench_exc_sweep.png" alt="apa_bench_exc_sweep.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 33: </span>Excitation voltage</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org01ff959" class="outline-4">
|
||
<h4 id="org01ff959"><span class="section-number-4">3.2.2</span> FRF Identification - Setup</h4>
|
||
<div class="outline-text-4" id="text-3-2-2">
|
||
<p>
|
||
Let’s define the sampling time/frequency.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Sampling</span></span>
|
||
Ts = (t(end) <span class="org-type">-</span> t(1))<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1); <span class="org-comment">% Sampling Time [s]</span>
|
||
Fs = 1<span class="org-type">/</span>Ts; <span class="org-comment">% Sampling Frequency [Hz]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
Then we defined a “Hanning” windows that will be used for the spectral analysis:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">win = hanning(ceil(1<span class="org-type">*</span>Fs)); <span class="org-comment">% Hannning Windows</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
We get the frequency vector that will be the same for all the frequency domain analysis.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-comment">% Only used to have the frequency vector "f"</span>
|
||
[<span class="org-type">~</span>, f] = tfestimate(apa_sweep.Va, apa_sweep.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgfd75668" class="outline-4">
|
||
<h4 id="orgfd75668"><span class="section-number-4">3.2.3</span> FRF Identification - Displacement</h4>
|
||
<div class="outline-text-4" id="text-3-2-3">
|
||
<p>
|
||
In this section, the transfer function from the excitation voltage \(V_a\) to the encoder measured displacement \(d_e\) and interferometer measurement \(d_a\).
|
||
</p>
|
||
|
||
<p>
|
||
The coherence from \(V_a\) to \(d_e\) is computed and shown in Figure <a href="#org884fe8a">34</a>.
|
||
It is quite good from 10Hz up to 500Hz.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% TF - Encoder</span></span>
|
||
[coh_sweep, <span class="org-type">~</span>] = mscohere(apa_sweep.Va, apa_sweep.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org884fe8a" class="figure">
|
||
<p><img src="figs/apa_1_coh_dvf.png" alt="apa_1_coh_dvf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 34: </span>Coherence for the identification from \(V_a\) to \(d_e\)</p>
|
||
</div>
|
||
|
||
<p>
|
||
The transfer functions are then estimated and shown in Figure <a href="#org631b416">35</a>.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% TF - Encoder</span></span>
|
||
[dvf_sweep, <span class="org-type">~</span>] = tfestimate(apa_sweep.Va, apa_sweep.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% TF - Interferometer</span></span>
|
||
[int_sweep, <span class="org-type">~</span>] = tfestimate(apa_sweep.Va, apa_sweep.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org631b416" class="figure">
|
||
<p><img src="figs/apa_1_frf_dvf.png" alt="apa_1_frf_dvf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 35: </span>Obtained transfer functions from \(V_a\) to both \(d_e\) and \(d_a\)</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgebc4edd" class="outline-4">
|
||
<h4 id="orgebc4edd"><span class="section-number-4">3.2.4</span> FRF Identification - Force Sensor</h4>
|
||
<div class="outline-text-4" id="text-3-2-4">
|
||
<p>
|
||
Now the dynamics from excitation voltage \(V_a\) to the force sensor stack voltage \(V_s\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
The coherence is computed and shown in Figure <a href="#org0159147">36</a> and found very good from 10Hz up to 2kHz.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% TF - Encoder</span></span>
|
||
[coh_sweep, <span class="org-type">~</span>] = mscohere(apa_sweep.Va, apa_sweep.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org0159147" class="figure">
|
||
<p><img src="figs/apa_1_coh_iff.png" alt="apa_1_coh_iff.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 36: </span>Coherence for the identification from \(V_a\) to \(V_s\)</p>
|
||
</div>
|
||
|
||
<p>
|
||
The transfer function is estimated and shown in Figure <a href="#orgbbb3306">37</a>.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Transfer function estimation</span></span>
|
||
[iff_sweep, <span class="org-type">~</span>] = tfestimate(apa_sweep.Va, apa_sweep.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="orgbbb3306" class="figure">
|
||
<p><img src="figs/apa_1_frf_iff.png" alt="apa_1_frf_iff.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 37: </span>Obtained transfer functions from \(V_a\) to \(V_s\)</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orga04645d" class="outline-4">
|
||
<h4 id="orga04645d"><span class="section-number-4">3.2.5</span> Extract Parameters (Actuator/Sensor constants)</h4>
|
||
<div class="outline-text-4" id="text-3-2-5">
|
||
</div>
|
||
<div id="outline-container-org3f8bebf" class="outline-5">
|
||
<h5 id="org3f8bebf"><span class="section-number-5">3.2.5.1</span> Piezoelectric Actuator Constant</h5>
|
||
<div class="outline-text-5" id="text-3-2-5-1">
|
||
<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-org2f80a64" class="outline-5">
|
||
<h5 id="org2f80a64"><span class="section-number-5">3.2.5.2</span> Piezoelectric Sensor Constant</h5>
|
||
<div class="outline-text-5" id="text-3-2-5-2">
|
||
<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-org598123d" class="outline-5">
|
||
<h5 id="org598123d"><span class="section-number-5">3.2.5.3</span> Results</h5>
|
||
<div class="outline-text-5" id="text-3-2-5-3">
|
||
<p>
|
||
Quasi static gain between \(d\) and \(V_a\):
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">g_d_Va = mean(abs(dvf_sweep(f <span class="org-type">></span> 10 <span class="org-type">&</span> f <span class="org-type"><</span> 15)));
|
||
</pre>
|
||
</div>
|
||
|
||
<pre class="example">
|
||
g_d_Va = 1.7e-05 [m/V]
|
||
</pre>
|
||
|
||
|
||
<p>
|
||
Quasi static gain between \(V_s\) and \(V_a\):
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">g_Vs_Va = mean(abs(iff_sweep(f <span class="org-type">></span> 10 <span class="org-type">&</span> f <span class="org-type"><</span> 15)));
|
||
</pre>
|
||
</div>
|
||
|
||
<pre class="example">
|
||
g_Vs_Va = 5.7e-01 [V/V]
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org5c1af51" class="outline-4">
|
||
<h4 id="org5c1af51"><span class="section-number-4">3.2.6</span> Hysteresis</h4>
|
||
<div class="outline-text-4" id="text-3-2-6">
|
||
<p>
|
||
We here wish to visually see the amount of hysteresis present in the APA.
|
||
</p>
|
||
|
||
<p>
|
||
To do so, a quasi static sinusoidal excitation \(V_a\) at different voltages is used.
|
||
</p>
|
||
|
||
<p>
|
||
The offset is 65V, and the sin amplitude is ranging from 1V up to 80V.
|
||
</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>
|
||
|
||
<p>
|
||
We expect to obtained something like the hysteresis shown in Figure <a href="#orgcf4cf3f">38</a>.
|
||
</p>
|
||
|
||
|
||
<div id="orgcf4cf3f" class="figure">
|
||
<p><img src="figs/expected_hysteresis.png" alt="expected_hysteresis.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 38: </span>Expected Hysteresis <a class='org-ref-reference' href="#poel10_explor_activ_hard_mount_vibrat">poel10_explor_activ_hard_mount_vibrat</a></p>
|
||
</div>
|
||
|
||
<p>
|
||
The data is loaded.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_hyst = load(<span class="org-string">'frf_data_1_hysteresis.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'de'</span>);
|
||
<span class="org-comment">% Initial time set to zero</span>
|
||
apa_hyst.t = apa_hyst.t <span class="org-type">-</span> apa_hyst.t(1);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The excitation voltage amplitudes are:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">ampls = [0.1, 0.2, 0.4, 1, 2, 4]; <span class="org-comment">% Excitation voltage amplitudes</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The excitation voltage and the measured displacement are shown in Figure <a href="#org51016fc">39</a>.
|
||
</p>
|
||
|
||
<div id="org51016fc" class="figure">
|
||
<p><img src="figs/hyst_exc_signal_time.png" alt="hyst_exc_signal_time.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 39: </span>Excitation voltage and measured displacement</p>
|
||
</div>
|
||
|
||
<p>
|
||
For each amplitude, we only take the last sinus in order to reduce possible transients.
|
||
Also, it is centered on zero.
|
||
</p>
|
||
|
||
<p>
|
||
The measured displacement at a function of the output voltage are shown in Figure <a href="#orgba5e386">40</a>.
|
||
</p>
|
||
|
||
<div id="orgba5e386" class="figure">
|
||
<p><img src="figs/hyst_results_multi_ampl.png" alt="hyst_results_multi_ampl.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 40: </span>Obtained hysteresis for multiple excitation amplitudes</p>
|
||
</div>
|
||
|
||
<div class="important" id="org0d24669">
|
||
<p>
|
||
It is quite clear that hysteresis is increasing with the excitation amplitude.
|
||
</p>
|
||
|
||
<p>
|
||
Also, no hysteresis is found on the sensor stack voltage.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org44631a7" class="outline-4">
|
||
<h4 id="org44631a7"><span class="section-number-4">3.2.7</span> Estimation of the APA axial stiffness</h4>
|
||
<div class="outline-text-4" id="text-3-2-7">
|
||
<p>
|
||
In order to estimate the stiffness of the APA, a weight with known mass \(m_a\) is added on top of the suspended granite and the deflection \(d_e\) is measured using the encoder.
|
||
The APA stiffness is then:
|
||
</p>
|
||
\begin{equation}
|
||
k_{\text{apa}} = \frac{m_a g}{d}
|
||
\end{equation}
|
||
|
||
<p>
|
||
Here, a mass of 6.4 kg is used:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">added_mass = 6.4; <span class="org-comment">% Added mass [kg]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The data is loaded, and the measured displacement is shown in Figure <a href="#org76d2e8c">41</a>.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_mass = load(sprintf(<span class="org-string">'frf_data_%i_add_mass_closed_circuit.mat'</span>, 1), <span class="org-string">'t'</span>, <span class="org-string">'de'</span>);
|
||
apa_mass.de = apa_mass.de <span class="org-type">-</span> mean(apa_mass.de(apa_mass.t<span class="org-type"><</span>11));
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org76d2e8c" class="figure">
|
||
<p><img src="figs/apa_1_meas_stiffness.png" alt="apa_1_meas_stiffness.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 41: </span>Measured displacement when adding the mass and removing the mass</p>
|
||
</div>
|
||
|
||
<p>
|
||
There is some imprecision in the measurement as there are some drifts that are probably due to some creep.
|
||
</p>
|
||
|
||
<p>
|
||
The stiffness is then computed as follows:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">k = 9.8 <span class="org-type">*</span> added_mass <span class="org-type">/</span> (mean(apa_mass.de(apa_mass.t <span class="org-type">></span> 12 <span class="org-type">&</span> apa_mass.t <span class="org-type"><</span> 12.5)) <span class="org-type">-</span> mean(apa_mass.de(apa_mass.t <span class="org-type">></span> 20 <span class="org-type">&</span> apa_mass.t <span class="org-type"><</span> 20.5)));
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
And the stiffness obtained is very close to the one specified in the documentation (\(k = 1.794\,[N/\mu m]\)).
|
||
</p>
|
||
<pre class="example">
|
||
k = 1.68 [N/um]
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org9664a13" class="outline-4">
|
||
<h4 id="org9664a13"><span class="section-number-4">3.2.8</span> Stiffness change due to electrical connections</h4>
|
||
<div class="outline-text-4" id="text-3-2-8">
|
||
<p>
|
||
We wish here to see if the stiffness changes when the actuator stacks are not connected to the amplifier and the sensor stacks are not connected to the ADC.
|
||
</p>
|
||
|
||
<p>
|
||
Note here that the resistor in parallel to the sensor stack is present in both cases.
|
||
</p>
|
||
|
||
<p>
|
||
First, the data are loaded.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">add_mass_oc = load(sprintf(<span class="org-string">'frf_data_%i_add_mass_open_circuit.mat'</span>, 1), <span class="org-string">'t'</span>, <span class="org-string">'de'</span>);
|
||
add_mass_cc = load(sprintf(<span class="org-string">'frf_data_%i_add_mass_closed_circuit.mat'</span>, 1), <span class="org-string">'t'</span>, <span class="org-string">'de'</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
And the initial displacement is set to zero.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">add_mass_oc.de = add_mass_oc.de <span class="org-type">-</span> mean(add_mass_oc.de(add_mass_oc.t<span class="org-type"><</span>11));
|
||
add_mass_cc.de = add_mass_cc.de <span class="org-type">-</span> mean(add_mass_cc.de(add_mass_cc.t<span class="org-type"><</span>11));
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The measured displacements are shown in Figure <a href="#org8c87e33">42</a>.
|
||
</p>
|
||
|
||
<div id="org8c87e33" class="figure">
|
||
<p><img src="figs/apa_meas_k_time_oc_cc.png" alt="apa_meas_k_time_oc_cc.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 42: </span>Measured displacement</p>
|
||
</div>
|
||
|
||
|
||
<p>
|
||
And the stiffness is estimated in both case.
|
||
The results are shown in Table <a href="#orgdc77338">6</a>.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_k_oc = 9.8 <span class="org-type">*</span> added_mass <span class="org-type">/</span> (mean(add_mass_oc.de(add_mass_oc.t <span class="org-type">></span> 12 <span class="org-type">&</span> add_mass_oc.t <span class="org-type"><</span> 12.5)) <span class="org-type">-</span> mean(add_mass_oc.de(add_mass_oc.t <span class="org-type">></span> 20 <span class="org-type">&</span> add_mass_oc.t <span class="org-type"><</span> 20.5)));
|
||
apa_k_cc = 9.8 <span class="org-type">*</span> added_mass <span class="org-type">/</span> (mean(add_mass_cc.de(add_mass_cc.t <span class="org-type">></span> 12 <span class="org-type">&</span> add_mass_cc.t <span class="org-type"><</span> 12.5)) <span class="org-type">-</span> mean(add_mass_cc.de(add_mass_cc.t <span class="org-type">></span> 20 <span class="org-type">&</span> add_mass_cc.t <span class="org-type"><</span> 20.5)));
|
||
</pre>
|
||
</div>
|
||
|
||
<table id="orgdc77338" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||
<caption class="t-above"><span class="table-number">Table 6:</span> Measured stiffnesses on “open” and “closed” circuits</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">\(k [N/\mu m]\)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="org-left">Not connected</td>
|
||
<td class="org-right">2.3</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-left">Connected</td>
|
||
<td class="org-right">1.7</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<div class="important" id="org7a3b64f">
|
||
<p>
|
||
Clearly, connecting the actuator stacks to the amplified (basically equivalent as to short circuiting them) lowers the stiffness.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org3808705" class="outline-4">
|
||
<h4 id="org3808705"><span class="section-number-4">3.2.9</span> Effect of the resistor on the IFF Plant</h4>
|
||
<div class="outline-text-4" id="text-3-2-9">
|
||
<p>
|
||
A resistor \(R \approx 80.6\,k\Omega\) is added in parallel with the sensor stack.
|
||
This has the effect to form a high pass filter with the capacitance of the stack.
|
||
</p>
|
||
|
||
<p>
|
||
We here measured the low frequency transfer function from \(V_a\) to \(V_s\) with and without this resistor.
|
||
</p>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-comment">% With the resistor</span>
|
||
wi_k = load(<span class="org-string">'frf_data_1_sweep_lf_with_R.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'Va'</span>);
|
||
|
||
<span class="org-comment">% Without the resistor</span>
|
||
wo_k = load(<span class="org-string">'frf_data_1_sweep_lf.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'Va'</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
We use a very long “Hanning” window for the spectral analysis in order to estimate the low frequency behavior.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">win = hanning(ceil(50<span class="org-type">*</span>Fs)); <span class="org-comment">% Hannning Windows</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
And we estimate the transfer function from \(V_a\) to \(V_s\) in both cases:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[frf_wo_k, f] = tfestimate(wo_k.Va, wo_k.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[frf_wi_k, <span class="org-type">~</span>] = tfestimate(wi_k.Va, wi_k.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
With the following values of the resistor and capacitance, we obtain a first order high pass filter with a crossover frequency equal to:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">C = 5.1e<span class="org-type">-</span>6; <span class="org-comment">% Sensor Stack capacitance [F]</span>
|
||
R = 80.6e3; <span class="org-comment">% Parallel Resistor [Ohm]</span>
|
||
|
||
f0 = 1<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>R<span class="org-type">*</span>C); <span class="org-comment">% Crossover frequency of RC HPF [Hz]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<pre class="example">
|
||
f0 = 0.39 [Hz]
|
||
</pre>
|
||
|
||
|
||
<p>
|
||
The transfer function of the corresponding high pass filter is:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">G_hpf = 0.6<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>f0)<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>f0);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
Let’s compare the transfer function from actuator stack to sensor stack with and without the added resistor in Figure <a href="#org3f03edf">43</a>.
|
||
</p>
|
||
|
||
<div id="org3f03edf" class="figure">
|
||
<p><img src="figs/frf_iff_effect_R.png" alt="frf_iff_effect_R.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 43: </span>Transfer function from \(V_a\) to \(V_s\) with and without the resistor \(k\)</p>
|
||
</div>
|
||
|
||
<div class="important" id="orgb89547c">
|
||
<p>
|
||
The added resistor has indeed the expected effect.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org506cc9d" class="outline-3">
|
||
<h3 id="org506cc9d"><span class="section-number-3">3.3</span> Comparison of all the APA</h3>
|
||
<div class="outline-text-3" id="text-3-3">
|
||
<p>
|
||
<a id="org15c6a41"></a>
|
||
</p>
|
||
<p>
|
||
The same measurements that was performed in Section <a href="#orgecbdb2c">3.2</a> are now performed on all the APA and then compared.
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org440d72f" class="outline-4">
|
||
<h4 id="org440d72f"><span class="section-number-4">3.3.1</span> Axial Stiffnesses - Comparison</h4>
|
||
<div class="outline-text-4" id="text-3-3-1">
|
||
<p>
|
||
Let’s first compare the APA axial stiffnesses.
|
||
</p>
|
||
|
||
<p>
|
||
The added mass is:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">added_mass = 6.4; <span class="org-comment">% Added mass [kg]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
Here are the number of the APA that have been measured:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_nums = [1 2 4 5 6 7 8];
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The data are loaded.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_mass = {};
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
apa_mass(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'frf_data_%i_add_mass_closed_circuit.mat'</span>, apa_nums(<span class="org-constant">i</span>)), <span class="org-string">'t'</span>, <span class="org-string">'de'</span>)};
|
||
<span class="org-comment">% The initial displacement is set to zero</span>
|
||
apa_mass{<span class="org-constant">i</span>}.de = apa_mass{<span class="org-constant">i</span>}.de <span class="org-type">-</span> mean(apa_mass{<span class="org-constant">i</span>}.de(apa_mass{<span class="org-constant">i</span>}.t<span class="org-type"><</span>11));
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The raw measurements are shown in Figure <a href="#org73eb592">44</a>.
|
||
All the APA seems to have similar stiffness except the APA 7 which should have an higher stiffness.
|
||
</p>
|
||
|
||
<div class="question" id="orgab1b9ff">
|
||
<p>
|
||
It is however strange that the displacement \(d_e\) when the mass is removed is higher for the APA 7 than for the other APA.
|
||
What could cause that?
|
||
</p>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="org73eb592" class="figure">
|
||
<p><img src="figs/apa_meas_k_time.png" alt="apa_meas_k_time.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 44: </span>Raw measurements for all the APA. A mass of 6.4kg is added at arround 15s and removed at arround 22s</p>
|
||
</div>
|
||
|
||
<p>
|
||
The stiffnesses are computed for all the APA and are summarized in Table <a href="#org0dde1a5">7</a>.
|
||
</p>
|
||
|
||
<table id="org0dde1a5" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||
<caption class="t-above"><span class="table-number">Table 7:</span> Measured stiffnesses</caption>
|
||
|
||
<colgroup>
|
||
<col class="org-right" />
|
||
|
||
<col class="org-right" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th scope="col" class="org-right">APA Num</th>
|
||
<th scope="col" class="org-right">\(k [N/\mu m]\)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="org-right">1</td>
|
||
<td class="org-right">1.68</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-right">2</td>
|
||
<td class="org-right">1.69</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-right">4</td>
|
||
<td class="org-right">1.7</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-right">5</td>
|
||
<td class="org-right">1.7</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-right">6</td>
|
||
<td class="org-right">1.7</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-right">7</td>
|
||
<td class="org-right">1.93</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td class="org-right">8</td>
|
||
<td class="org-right">1.73</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<div class="important" id="org301cb54">
|
||
<p>
|
||
The APA300ML manual specifies the nominal stiffness to be \(1.8\,[N/\mu m]\) which is very close to what have been measured.
|
||
Only the APA number 7 is a little bit off.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org3e64bba" class="outline-4">
|
||
<h4 id="org3e64bba"><span class="section-number-4">3.3.2</span> FRF Identification - Setup</h4>
|
||
<div class="outline-text-4" id="text-3-3-2">
|
||
<p>
|
||
The identification is performed in three steps:
|
||
</p>
|
||
<ol class="org-ol">
|
||
<li>White noise excitation with small amplitude.
|
||
This is used to determine the main resonance of the system.</li>
|
||
<li>Sweep sine excitation with the amplitude lowered around the resonance.
|
||
The sweep sine is from 10Hz to 400Hz.</li>
|
||
<li>High frequency noise.
|
||
The noise is band-passed between 300Hz and 2kHz.</li>
|
||
</ol>
|
||
|
||
<p>
|
||
Then, the result of the second identification is used between 10Hz and 350Hz and the result of the third identification if used between 350Hz and 2kHz.
|
||
</p>
|
||
|
||
<p>
|
||
Here are the APA numbers that have been measured.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">apa_nums = [1 2 4 5 6 7 8];
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The data are loaded for both the second and third identification:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Second identification</span></span>
|
||
apa_sweep = {};
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
apa_sweep(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'frf_data_%i_sweep.mat'</span>, apa_nums(<span class="org-constant">i</span>)), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>)};
|
||
<span class="org-keyword">end</span>
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Third identification</span></span>
|
||
apa_noise_hf = {};
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
apa_noise_hf(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'frf_data_%i_noise_hf.mat'</span>, apa_nums(<span class="org-constant">i</span>)), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>)};
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The time is the same for all measurements.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Time vector</span></span>
|
||
t = apa_sweep{1}.t <span class="org-type">-</span> apa_sweep{1}.t(1) ; <span class="org-comment">% Time vector [s]</span>
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Sampling</span></span>
|
||
Ts = (t(end) <span class="org-type">-</span> t(1))<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1); <span class="org-comment">% Sampling Time [s]</span>
|
||
Fs = 1<span class="org-type">/</span>Ts; <span class="org-comment">% Sampling Frequency [Hz]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
Then we defined a “Hanning” windows that will be used for the spectral analysis:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">win = hanning(ceil(0.5<span class="org-type">*</span>Fs)); <span class="org-comment">% Hannning Windows</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
We get the frequency vector that will be the same for all the frequency domain analysis.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-comment">% Only used to have the frequency vector "f"</span>
|
||
[<span class="org-type">~</span>, f] = tfestimate(apa_sweep{1}.Va, apa_sweep{1}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org95409ec" class="outline-4">
|
||
<h4 id="org95409ec"><span class="section-number-4">3.3.3</span> FRF Identification - DVF</h4>
|
||
<div class="outline-text-4" id="text-3-3-3">
|
||
<p>
|
||
In this section, the dynamics from excitation voltage \(V_a\) to encoder measured displacement \(d_e\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
We compute the coherence for 2nd and 3rd identification:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Coherence computation</span></span>
|
||
coh_sweep = zeros(length(f), length(apa_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(apa_sweep{<span class="org-constant">i</span>}.Va, apa_sweep{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_sweep(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
|
||
coh_noise_hf = zeros(length(f), length(apa_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(apa_noise_hf{<span class="org-constant">i</span>}.Va, apa_noise_hf{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The coherence is shown in Figure <a href="#org309d1d5">45</a>.
|
||
It is clear that the Sweep sine gives good coherence up to 400Hz and that the high frequency noise excitation signal helps increasing a little bit the coherence at high frequency.
|
||
</p>
|
||
|
||
|
||
<div id="org309d1d5" class="figure">
|
||
<p><img src="figs/apa_frf_dvf_plant_coh.png" alt="apa_frf_dvf_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 45: </span>Obtained coherence for the plant from \(V_a\) to \(d_e\)</p>
|
||
</div>
|
||
|
||
|
||
<p>
|
||
Then, the transfer function from the DAC output voltage \(V_a\) to the measured displacement by the encoders is computed:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Transfer function estimation</span></span>
|
||
dvf_sweep = zeros(length(f), length(apa_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(apa_sweep{<span class="org-constant">i</span>}.Va, apa_sweep{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
dvf_sweep(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
|
||
dvf_noise_hf = zeros(length(f), length(apa_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(apa_noise_hf{<span class="org-constant">i</span>}.Va, apa_noise_hf{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
dvf_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The obtained transfer functions are shown in Figure <a href="#orgcc4fa6c">46</a>.
|
||
They are all superimposed except for the APA7.
|
||
</p>
|
||
|
||
<div class="question" id="org0a3b536">
|
||
<p>
|
||
Why is the APA7 off?
|
||
We could think that the APA7 is stiffer, but also the mass line is off.
|
||
</p>
|
||
|
||
<p>
|
||
It seems that there is a “gain” problem.
|
||
The encoder seems fine (it measured the same as the Interferometer).
|
||
Maybe it could be due to the amplifier?
|
||
</p>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="orgcc4fa6c" class="figure">
|
||
<p><img src="figs/apa_frf_dvf_plant_tf.png" alt="apa_frf_dvf_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 46: </span>Estimated FRF for the DVF plant (transfer function from \(V_a\) to the encoder \(d_e\))</p>
|
||
</div>
|
||
|
||
<p>
|
||
A zoom on the main resonance is shown in Figure <a href="#org1ae6cf0">47</a>.
|
||
It is clear that expect for the APA 7, the response around the resonances are well matching for all the APA.
|
||
</p>
|
||
|
||
<p>
|
||
It is also clear that there is not a single resonance but two resonances, a first one at 95Hz and a second one at 105Hz.
|
||
</p>
|
||
|
||
<div class="question" id="org2b04737">
|
||
<p>
|
||
Why is there a double resonance at around 94Hz?
|
||
</p>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="org1ae6cf0" class="figure">
|
||
<p><img src="figs/apa_frf_dvf_zoom_res_plant_tf.png" alt="apa_frf_dvf_zoom_res_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 47: </span>Estimated FRF for the DVF plant (transfer function from \(V_a\) to the encoder \(d_e\)) - Zoom on the main resonance</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd4e7528" class="outline-4">
|
||
<h4 id="orgd4e7528"><span class="section-number-4">3.3.4</span> FRF Identification - IFF</h4>
|
||
<div class="outline-text-4" id="text-3-3-4">
|
||
<p>
|
||
In this section, the dynamics from \(V_a\) to \(V_s\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
First the coherence is computed and shown in Figure <a href="#org6163dcb">48</a>.
|
||
The coherence is very nice from 10Hz to 2kHz.
|
||
It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered).
|
||
</p>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Coherence</span></span>
|
||
coh_sweep = zeros(length(f), length(apa_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(apa_sweep{<span class="org-constant">i</span>}.Va, apa_sweep{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_sweep(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
|
||
coh_noise_hf = zeros(length(f), length(apa_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(apa_noise_hf{<span class="org-constant">i</span>}.Va, apa_noise_hf{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org6163dcb" class="figure">
|
||
<p><img src="figs/apa_frf_iff_plant_coh.png" alt="apa_frf_iff_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 48: </span>Obtained coherence for the IFF plant</p>
|
||
</div>
|
||
|
||
<p>
|
||
Then the FRF are estimated and shown in Figure <a href="#org238d0ef">49</a>
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% FRF estimation of the transfer function from Va to Vs</span></span>
|
||
iff_sweep = zeros(length(f), length(apa_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(apa_sweep{<span class="org-constant">i</span>}.Va, apa_sweep{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
iff_sweep(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
|
||
iff_noise_hf = zeros(length(f), length(apa_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(apa_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(apa_noise_hf{<span class="org-constant">i</span>}.Va, apa_noise_hf{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
iff_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org238d0ef" class="figure">
|
||
<p><img src="figs/apa_frf_iff_plant_tf.png" alt="apa_frf_iff_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 49: </span>Identified IFF Plant</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgc08fc77" class="outline-2">
|
||
<h2 id="orgc08fc77"><span class="section-number-2">4</span> Dynamical measurements - Struts</h2>
|
||
<div class="outline-text-2" id="text-4">
|
||
<p>
|
||
<a id="org6291ce7"></a>
|
||
</p>
|
||
<p>
|
||
The same bench used in Section <a href="#orgd14bdae">3</a> is here used with the strut instead of only the APA.
|
||
</p>
|
||
|
||
<p>
|
||
The bench is shown in Figure <a href="#org8d76afa">50</a>.
|
||
Measurements are performed either when no encoder is fixed to the strut (Figure <a href="#org0007231">51</a>) or when one encoder is fixed to the strut (Figure <a href="#org8d76afa">50</a>).
|
||
</p>
|
||
|
||
|
||
<div id="org8d76afa" class="figure">
|
||
<p><img src="figs/test_bench_leg_overview.png" alt="test_bench_leg_overview.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 50: </span>Test Bench with Strut - Overview</p>
|
||
</div>
|
||
|
||
|
||
<div id="org0007231" class="figure">
|
||
<p><img src="figs/test_bench_leg_front.png" alt="test_bench_leg_front.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 51: </span>Test Bench with Strut - Zoom on the strut</p>
|
||
</div>
|
||
|
||
|
||
<div id="org4be53a8" class="figure">
|
||
<p><img src="figs/test_bench_leg_coder.png" alt="test_bench_leg_coder.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 52: </span>Test Bench with Strut - Zoom on the strut with the encoder</p>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org00bf15c" class="outline-3">
|
||
<h3 id="org00bf15c"><span class="section-number-3">4.1</span> Measurement on Strut 1</h3>
|
||
<div class="outline-text-3" id="text-4-1">
|
||
<p>
|
||
<a id="org2bb3231"></a>
|
||
</p>
|
||
<p>
|
||
Measurements are first performed on the strut 1 that contains:
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li>APA 1</li>
|
||
<li>flex 1 and flex 2</li>
|
||
</ul>
|
||
</div>
|
||
<div id="outline-container-orgf54bb7c" class="outline-4">
|
||
<h4 id="orgf54bb7c"><span class="section-number-4">4.1.1</span> Without Encoder</h4>
|
||
<div class="outline-text-4" id="text-4-1-1">
|
||
<p>
|
||
<a id="org271b9e7"></a>
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-orgda0810d" class="outline-5">
|
||
<h5 id="orgda0810d"><span class="section-number-5">4.1.1.1</span> FRF Identification - Setup</h5>
|
||
<div class="outline-text-5" id="text-4-1-1-1">
|
||
<p>
|
||
The identification is performed in three steps:
|
||
</p>
|
||
<ol class="org-ol">
|
||
<li>White noise excitation with small amplitude.
|
||
This is used to determine the main resonance of the system.</li>
|
||
<li>Sweep sine excitation with the amplitude lowered around the resonance.
|
||
The sweep sine is from 10Hz to 400Hz.</li>
|
||
<li>High frequency noise.
|
||
The noise is band-passed between 300Hz and 2kHz.</li>
|
||
</ol>
|
||
|
||
<p>
|
||
Then, the result of the second identification is used between 10Hz and 350Hz and the result of the third identification if used between 350Hz and 2kHz.
|
||
</p>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">leg_sweep = load(sprintf(<span class="org-string">'frf_data_leg_%i_sweep.mat'</span>, 1), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>);
|
||
leg_noise_hf = load(sprintf(<span class="org-string">'frf_data_leg_%i_noise_hf.mat'</span>, 1), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The time is the same for all measurements.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Time vector</span></span>
|
||
t = leg_sweep.t <span class="org-type">-</span> leg_sweep.t(1) ; <span class="org-comment">% Time vector [s]</span>
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Sampling</span></span>
|
||
Ts = (t(end) <span class="org-type">-</span> t(1))<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1); <span class="org-comment">% Sampling Time [s]</span>
|
||
Fs = 1<span class="org-type">/</span>Ts; <span class="org-comment">% Sampling Frequency [Hz]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
Then we defined a “Hanning” windows that will be used for the spectral analysis:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">win = hanning(ceil(0.5<span class="org-type">*</span>Fs)); <span class="org-comment">% Hannning Windows</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
We get the frequency vector that will be the same for all the frequency domain analysis.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-comment">% Only used to have the frequency vector "f"</span>
|
||
[<span class="org-type">~</span>, f] = tfestimate(leg_sweep.Va, leg_sweep.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orge6d01ba" class="outline-5">
|
||
<h5 id="orge6d01ba"><span class="section-number-5">4.1.1.2</span> FRF Identification - Displacement</h5>
|
||
<div class="outline-text-5" id="text-4-1-1-2">
|
||
<p>
|
||
In this section, the dynamics from the excitation voltage \(V_a\) to the interferometer \(d_a\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
We compute the coherence for 2nd and 3rd identification:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[coh_sweep, <span class="org-type">~</span>] = mscohere(leg_sweep.Va, leg_sweep.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[coh_noise_hf, <span class="org-type">~</span>] = mscohere(leg_noise_hf.Va, leg_noise_hf.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org6471953" class="figure">
|
||
<p><img src="figs/strut_1_frf_dvf_plant_coh.png" alt="strut_1_frf_dvf_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 53: </span>Obtained coherence for the plant from \(V_a\) to \(d_a\)</p>
|
||
</div>
|
||
|
||
<p>
|
||
The transfer function from \(V_a\) to the interferometer measured displacement \(d_a\) is estimated and shown in Figure <a href="#orgc5f100a">54</a>.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[dvf_sweep, <span class="org-type">~</span>] = tfestimate(leg_sweep.Va, leg_sweep.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[dvf_noise_hf, <span class="org-type">~</span>] = tfestimate(leg_noise_hf.Va, leg_noise_hf.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="orgc5f100a" class="figure">
|
||
<p><img src="figs/strut_1_frf_dvf_plant_tf.png" alt="strut_1_frf_dvf_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 54: </span>Estimated FRF for the DVF plant (transfer function from \(V_a\) to the interferometer \(d_a\))</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgbc35002" class="outline-5">
|
||
<h5 id="orgbc35002"><span class="section-number-5">4.1.1.3</span> FRF Identification - IFF</h5>
|
||
<div class="outline-text-5" id="text-4-1-1-3">
|
||
<p>
|
||
In this section, the dynamics from \(V_a\) to \(V_s\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
First the coherence is computed and shown in Figure <a href="#org812a6ea">55</a>.
|
||
The coherence is very nice from 10Hz to 2kHz.
|
||
It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered).
|
||
</p>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[coh_sweep, <span class="org-type">~</span>] = mscohere(leg_sweep.Va, leg_sweep.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[coh_noise_hf, <span class="org-type">~</span>] = mscohere(leg_noise_hf.Va, leg_noise_hf.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org812a6ea" class="figure">
|
||
<p><img src="figs/strut_1_frf_iff_plant_coh.png" alt="strut_1_frf_iff_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 55: </span>Obtained coherence for the IFF plant</p>
|
||
</div>
|
||
|
||
<p>
|
||
Then the FRF are estimated and shown in Figure <a href="#org5d8fac1">56</a>
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[iff_sweep, <span class="org-type">~</span>] = tfestimate(leg_sweep.Va, leg_sweep.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[iff_noise_hf, <span class="org-type">~</span>] = tfestimate(leg_noise_hf.Va, leg_noise_hf.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org5d8fac1" class="figure">
|
||
<p><img src="figs/strut_1_frf_iff_plant_tf.png" alt="strut_1_frf_iff_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 56: </span>Identified IFF Plant for the Strut 1</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org324a5e9" class="outline-4">
|
||
<h4 id="org324a5e9"><span class="section-number-4">4.1.2</span> With Encoder</h4>
|
||
<div class="outline-text-4" id="text-4-1-2">
|
||
<p>
|
||
<a id="org5b930a2"></a>
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org4a6c0e2" class="outline-5">
|
||
<h5 id="org4a6c0e2"><span class="section-number-5">4.1.2.1</span> Measurement Data</h5>
|
||
<div class="outline-text-5" id="text-4-1-2-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">leg_enc_sweep = load(sprintf(<span class="org-string">'frf_data_leg_coder_badly_align_%i_noise.mat'</span>, 1), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>);
|
||
leg_enc_noise_hf = load(sprintf(<span class="org-string">'frf_data_leg_coder_badly_align_%i_noise_hf.mat'</span>, 1), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org84d333a" class="outline-5">
|
||
<h5 id="org84d333a"><span class="section-number-5">4.1.2.2</span> FRF Identification - DVF</h5>
|
||
<div class="outline-text-5" id="text-4-1-2-2">
|
||
<p>
|
||
In this section, the dynamics from \(V_a\) to \(d_e\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
We compute the coherence for 2nd and 3rd identification:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[coh_enc_sweep, <span class="org-type">~</span>] = mscohere(leg_enc_sweep.Va, leg_enc_sweep.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[coh_enc_noise_hf, <span class="org-type">~</span>] = mscohere(leg_enc_noise_hf.Va, leg_enc_noise_hf.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="orgda39a5d" class="figure">
|
||
<p><img src="figs/strut_1_enc_frf_dvf_plant_coh.png" alt="strut_1_enc_frf_dvf_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 57: </span>Obtained coherence for the plant from \(V_a\) to \(d_e\)</p>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[dvf_enc_sweep, <span class="org-type">~</span>] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[dvf_enc_noise_hf, <span class="org-type">~</span>] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[dvf_int_sweep, <span class="org-type">~</span>] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[dvf_int_noise_hf, <span class="org-type">~</span>] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The obtained transfer functions are shown in Figure <a href="#org1bb80b9">58</a>.
|
||
</p>
|
||
|
||
<p>
|
||
They are all superimposed except for the APA7.
|
||
</p>
|
||
|
||
<div class="question" id="org830e8e7">
|
||
<p>
|
||
Why is the APA7 off?
|
||
We could think that the APA7 is stiffer, but also the mass line is off.
|
||
</p>
|
||
|
||
<p>
|
||
It seems that there is a “gain” problem.
|
||
The encoder seems fine (it measured the same as the Interferometer).
|
||
Maybe it could be due to the amplifier?
|
||
</p>
|
||
|
||
</div>
|
||
|
||
<div class="question" id="orge46c9ac">
|
||
<p>
|
||
Why is there a double resonance at around 94Hz?
|
||
</p>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="org1bb80b9" class="figure">
|
||
<p><img src="figs/strut_1_enc_frf_dvf_plant_tf.png" alt="strut_1_enc_frf_dvf_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 58: </span>Estimated FRF for the DVF plant (transfer function from \(V_a\) to the encoder \(d_e\))</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org573d710" class="outline-5">
|
||
<h5 id="org573d710"><span class="section-number-5">4.1.2.3</span> Comparison of the Encoder and Interferometer</h5>
|
||
<div class="outline-text-5" id="text-4-1-2-3">
|
||
<p>
|
||
The interferometer could here represent the case where the encoders are fixed to the plates and not the APA.
|
||
</p>
|
||
|
||
<p>
|
||
The dynamics from \(V_a\) to \(d_e\) and from \(V_a\) to \(d_a\) are compared in Figure <a href="#org0674ae9">59</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org0674ae9" class="figure">
|
||
<p><img src="figs/strut_1_comp_enc_int.png" alt="strut_1_comp_enc_int.png" />
|
||
</p>
|
||
</div>
|
||
|
||
<div class="important" id="org7cd944d">
|
||
<p>
|
||
It will clearly be difficult to do something (except some low frequency positioning) with the encoders fixed to the APA.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orge0da3dc" class="outline-5">
|
||
<h5 id="orge0da3dc"><span class="section-number-5">4.1.2.4</span> APA Resonances Frequency</h5>
|
||
<div class="outline-text-5" id="text-4-1-2-4">
|
||
<p>
|
||
As shown in Figure <a href="#org51471ff">60</a>, we can clearly see three spurious resonances at 197Hz, 290Hz and 376Hz.
|
||
</p>
|
||
|
||
|
||
<div id="org51471ff" class="figure">
|
||
<p><img src="figs/strut_1_spurious_resonances.png" alt="strut_1_spurious_resonances.png" />
|
||
</p>
|
||
</div>
|
||
|
||
|
||
<p>
|
||
These resonances correspond to parasitic resonances of the APA itself.
|
||
They are very close to what was estimated using the FEM:
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li>X-bending mode at ~190Hz (Figure <a href="#org0b8eb8c">61</a>)</li>
|
||
<li>Y-bending mode at ~290Hz (Figure <a href="#org4bebb45">62</a>)</li>
|
||
<li>Z-torsion mode at ~400Hz (Figure <a href="#orgd4154c5">63</a>)</li>
|
||
</ul>
|
||
|
||
|
||
<div id="org0b8eb8c" class="figure">
|
||
<p><img src="figs/mode_bending_x.gif" alt="mode_bending_x.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 61: </span>X-bending mode (189Hz)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org4bebb45" class="figure">
|
||
<p><img src="figs/mode_bending_y.gif" alt="mode_bending_y.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 62: </span>Y-bending mode (285Hz)</p>
|
||
</div>
|
||
|
||
|
||
<div id="orgd4154c5" class="figure">
|
||
<p><img src="figs/mode_torsion_z.gif" alt="mode_torsion_z.gif" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 63: </span>Z-torsion mode (400Hz)</p>
|
||
</div>
|
||
|
||
<div class="important" id="org6eda726">
|
||
<p>
|
||
The resonances are indeed due to limited stiffness of the APA.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org8029ce9" class="outline-5">
|
||
<h5 id="org8029ce9"><span class="section-number-5">4.1.2.5</span> Estimated Flexible Joint axial stiffness</h5>
|
||
</div>
|
||
<div id="outline-container-org4fd5b09" class="outline-5">
|
||
<h5 id="org4fd5b09"><span class="section-number-5">4.1.2.6</span> FRF Identification - IFF</h5>
|
||
<div class="outline-text-5" id="text-4-1-2-6">
|
||
<p>
|
||
In this section, the dynamics from \(V_a\) to \(V_s\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
First the coherence is computed and shown in Figure <a href="#org812a6ea">55</a>.
|
||
The coherence is very nice from 10Hz to 2kHz.
|
||
It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered).
|
||
</p>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[coh_enc_sweep, <span class="org-type">~</span>] = mscohere(leg_enc_sweep.Va, leg_enc_sweep.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[coh_enc_noise_hf, <span class="org-type">~</span>] = mscohere(leg_enc_noise_hf.Va, leg_enc_noise_hf.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org1b15bc0" class="figure">
|
||
<p><img src="figs/strut_1_frf_iff_plant_coh.png" alt="strut_1_frf_iff_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 64: </span>Obtained coherence for the IFF plant</p>
|
||
</div>
|
||
|
||
<p>
|
||
Then the FRF are estimated and shown in Figure <a href="#org3bbcac1">65</a>
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">[iff_enc_sweep, <span class="org-type">~</span>] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
[iff_enc_noise_hf, <span class="org-type">~</span>] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org3bbcac1" class="figure">
|
||
<p><img src="figs/strut_1_enc_frf_iff_plant_tf.png" alt="strut_1_enc_frf_iff_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 65: </span>Identified IFF Plant</p>
|
||
</div>
|
||
|
||
<p>
|
||
Let’s now compare the IFF plants whether the encoders are fixed to the APA or not (Figure <a href="#orgec08a65">66</a>).
|
||
</p>
|
||
|
||
<div id="orgec08a65" class="figure">
|
||
<p><img src="figs/strut_1_frf_iff_effect_enc.png" alt="strut_1_frf_iff_effect_enc.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 66: </span>Effect of the encoder on the IFF plant</p>
|
||
</div>
|
||
|
||
<div class="important" id="orgd6209ba">
|
||
<p>
|
||
We can see that the IFF does not change whether of not the encoder are fixed to the struts.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orga736f7e" class="outline-3">
|
||
<h3 id="orga736f7e"><span class="section-number-3">4.2</span> Comparison of all the Struts</h3>
|
||
<div class="outline-text-3" id="text-4-2">
|
||
<p>
|
||
<a id="orga48b48a"></a>
|
||
</p>
|
||
<p>
|
||
Now all struts are measured using the same procedure and test bench.
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-orgcb6944e" class="outline-4">
|
||
<h4 id="orgcb6944e"><span class="section-number-4">4.2.1</span> FRF Identification - Setup</h4>
|
||
<div class="outline-text-4" id="text-4-2-1">
|
||
<p>
|
||
The identification is performed in two steps:
|
||
</p>
|
||
<ol class="org-ol">
|
||
<li>White noise excitation with small amplitude.
|
||
This is used to estimate the low frequency dynamics.</li>
|
||
<li>High frequency noise.
|
||
The noise is band-passed between 300Hz and 2kHz.</li>
|
||
</ol>
|
||
|
||
<p>
|
||
Then, the result of the first identification is used between 10Hz and 350Hz and the result of the second identification if used between 350Hz and 2kHz.
|
||
</p>
|
||
|
||
<p>
|
||
Here are the LEG numbers that have been measured.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">leg_nums = [1 2 3 4 5];
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The data are loaded for both the first and second identification:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Second identification</span></span>
|
||
leg_noise = {};
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
leg_noise(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'frf_data_leg_coder_%i_noise.mat'</span>, leg_nums(<span class="org-constant">i</span>)), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>)};
|
||
<span class="org-keyword">end</span>
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Third identification</span></span>
|
||
leg_noise_hf = {};
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
leg_noise_hf(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'frf_data_leg_coder_%i_noise_hf.mat'</span>, leg_nums(<span class="org-constant">i</span>)), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'da'</span>)};
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The time is the same for all measurements.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Time vector</span></span>
|
||
t = leg_noise{1}.t <span class="org-type">-</span> leg_noise{1}.t(1) ; <span class="org-comment">% Time vector [s]</span>
|
||
|
||
<span class="org-matlab-cellbreak"><span class="org-comment">%% Sampling</span></span>
|
||
Ts = (t(end) <span class="org-type">-</span> t(1))<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1); <span class="org-comment">% Sampling Time [s]</span>
|
||
Fs = 1<span class="org-type">/</span>Ts; <span class="org-comment">% Sampling Frequency [Hz]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
Then we defined a “Hanning” windows that will be used for the spectral analysis:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">win = hanning(ceil(0.5<span class="org-type">*</span>Fs)); <span class="org-comment">% Hannning Windows</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
We get the frequency vector that will be the same for all the frequency domain analysis.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-comment">% Only used to have the frequency vector "f"</span>
|
||
[<span class="org-type">~</span>, f] = tfestimate(leg_noise{1}.Va, leg_noise{1}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org41cefd8" class="outline-4">
|
||
<h4 id="org41cefd8"><span class="section-number-4">4.2.2</span> FRF Identification - DVF</h4>
|
||
<div class="outline-text-4" id="text-4-2-2">
|
||
<p>
|
||
In this section, the dynamics from \(V_a\) to \(d_e\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
We compute the coherence for 2nd and 3rd identification:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Coherence computation</span></span>
|
||
coh_noise = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(leg_noise{<span class="org-constant">i</span>}.Va, leg_noise{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_noise(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
|
||
coh_noise_hf = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(leg_noise_hf{<span class="org-constant">i</span>}.Va, leg_noise_hf{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The coherence is shown in Figure <a href="#org449f15f">67</a>.
|
||
It is clear that the Noise sine gives good coherence up to 400Hz and that the high frequency noise excitation signal helps increasing a little bit the coherence at high frequency.
|
||
</p>
|
||
|
||
|
||
<div id="org449f15f" class="figure">
|
||
<p><img src="figs/struts_frf_dvf_plant_coh.png" alt="struts_frf_dvf_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 67: </span>Obtained coherence for the plant from \(V_a\) to \(d_e\)</p>
|
||
</div>
|
||
|
||
|
||
<p>
|
||
Then, the transfer function from the DAC output voltage \(V_a\) to the measured displacement by the encoders is computed:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Transfer function estimation</span></span>
|
||
dvf_noise = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(leg_noise{<span class="org-constant">i</span>}.Va, leg_noise{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
dvf_noise(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
|
||
dvf_noise_hf = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(leg_noise_hf{<span class="org-constant">i</span>}.Va, leg_noise_hf{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
dvf_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The obtained transfer functions are shown in Figure <a href="#orgc72ffdf">68</a>.
|
||
</p>
|
||
|
||
<p>
|
||
They are all superimposed except for the LEG7.
|
||
</p>
|
||
|
||
<div id="orgc72ffdf" class="figure">
|
||
<p><img src="figs/struts_frf_dvf_plant_tf.png" alt="struts_frf_dvf_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 68: </span>Estimated FRF for the DVF plant (transfer function from \(V_a\) to the encoder \(d_e\))</p>
|
||
</div>
|
||
|
||
<div class="important" id="org01c1593">
|
||
<p>
|
||
Depending on how the APA are mounted with the flexible joints, the dynamics can change a lot as shown in Figure <a href="#orgc72ffdf">68</a>.
|
||
In the future, a “pin” will be used to better align the APA with the flexible joints.
|
||
We can expect the amplitude of the spurious resonances to decrease.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org492b68f" class="outline-4">
|
||
<h4 id="org492b68f"><span class="section-number-4">4.2.3</span> FRF Identification - DVF with interferometer</h4>
|
||
<div class="outline-text-4" id="text-4-2-3">
|
||
<p>
|
||
In this section, the dynamics from \(V_a\) to \(d_a\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
We compute the coherence.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Coherence computation</span></span>
|
||
coh_noise = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(leg_noise{<span class="org-constant">i</span>}.Va, leg_noise{<span class="org-constant">i</span>}.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_noise(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
|
||
coh_noise_hf = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(leg_noise_hf{<span class="org-constant">i</span>}.Va, leg_noise_hf{<span class="org-constant">i</span>}.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The coherence is shown in Figure <a href="#org9078816">69</a>.
|
||
It is clear that the Noise sine gives good coherence up to 400Hz and that the high frequency noise excitation signal helps increasing a little bit the coherence at high frequency.
|
||
</p>
|
||
|
||
<div id="org9078816" class="figure">
|
||
<p><img src="figs/struts_frf_int_plant_coh.png" alt="struts_frf_int_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 69: </span>Obtained coherence for the plant from \(V_a\) to \(d_e\)</p>
|
||
</div>
|
||
|
||
<p>
|
||
Then, the transfer function from the DAC output voltage \(V_a\) to the measured displacement by the Attocube is computed:
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Transfer function estimation</span></span>
|
||
dvf_a_noise = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(leg_noise{<span class="org-constant">i</span>}.Va, leg_noise{<span class="org-constant">i</span>}.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
dvf_a_noise(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
|
||
dvf_a_noise_hf = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(leg_noise_hf{<span class="org-constant">i</span>}.Va, leg_noise_hf{<span class="org-constant">i</span>}.da, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
dvf_a_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<p>
|
||
The obtained transfer functions are shown in Figure <a href="#orgee609e9">70</a>.
|
||
</p>
|
||
|
||
<p>
|
||
They are all superimposed except for the LEG7.
|
||
</p>
|
||
|
||
|
||
<div id="orgee609e9" class="figure">
|
||
<p><img src="figs/struts_frf_int_plant_tf.png" alt="struts_frf_int_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 70: </span>Estimated FRF for the DVF plant (transfer function from \(V_a\) to the encoder \(d_e\))</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgfd5dd6a" class="outline-4">
|
||
<h4 id="orgfd5dd6a"><span class="section-number-4">4.2.4</span> FRF Identification - IFF</h4>
|
||
<div class="outline-text-4" id="text-4-2-4">
|
||
<p>
|
||
In this section, the dynamics from \(V_a\) to \(V_s\) is identified.
|
||
</p>
|
||
|
||
<p>
|
||
First the coherence is computed and shown in Figure <a href="#org2b92a24">71</a>.
|
||
The coherence is very nice from 10Hz to 2kHz.
|
||
It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered).
|
||
</p>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Coherence</span></span>
|
||
coh_noise = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(leg_noise{<span class="org-constant">i</span>}.Va, leg_noise{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_noise(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
|
||
coh_noise_hf = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[coh, <span class="org-type">~</span>] = mscohere(leg_noise_hf{<span class="org-constant">i</span>}.Va, leg_noise_hf{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
coh_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = coh;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org2b92a24" class="figure">
|
||
<p><img src="figs/struts_frf_iff_plant_coh.png" alt="struts_frf_iff_plant_coh.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 71: </span>Obtained coherence for the IFF plant</p>
|
||
</div>
|
||
|
||
<p>
|
||
Then the FRF are estimated and shown in Figure <a href="#org6092801">72</a>
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% FRF estimation of the transfer function from Va to Vs</span></span>
|
||
iff_noise = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(leg_noise{<span class="org-constant">i</span>}.Va, leg_noise{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
iff_noise(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
|
||
iff_noise_hf = zeros(length(f), length(leg_nums));
|
||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(leg_nums)</span>
|
||
[frf, <span class="org-type">~</span>] = tfestimate(leg_noise_hf{<span class="org-constant">i</span>}.Va, leg_noise_hf{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
|
||
iff_noise_hf(<span class="org-type">:</span>, <span class="org-constant">i</span>) = frf;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div id="org6092801" class="figure">
|
||
<p><img src="figs/struts_frf_iff_plant_tf.png" alt="struts_frf_iff_plant_tf.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 72: </span>Identified IFF Plant</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org28ac2a5" class="outline-2">
|
||
<h2 id="org28ac2a5"><span class="section-number-2">5</span> Test Bench APA300ML - Simscape Model</h2>
|
||
<div class="outline-text-2" id="text-5">
|
||
</div>
|
||
<div id="outline-container-org6069fc1" class="outline-3">
|
||
<h3 id="org6069fc1"><span class="section-number-3">5.1</span> Introduction</h3>
|
||
</div>
|
||
<div id="outline-container-org1529834" class="outline-3">
|
||
<h3 id="org1529834"><span class="section-number-3">5.2</span> Nano Hexapod object</h3>
|
||
<div class="outline-text-3" id="text-5-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orga116ec4" class="outline-4">
|
||
<h4 id="orga116ec4"><span class="section-number-4">5.2.1</span> APA - 2 DoF</h4>
|
||
<div class="outline-text-4" id="text-5-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-org10ce794" class="outline-4">
|
||
<h4 id="org10ce794"><span class="section-number-4">5.2.2</span> APA - Flexible Frame</h4>
|
||
<div class="outline-text-4" id="text-5-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-orgea27c52" class="outline-4">
|
||
<h4 id="orgea27c52"><span class="section-number-4">5.2.3</span> APA - Fully Flexible</h4>
|
||
<div class="outline-text-4" id="text-5-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-orgf018826" class="outline-3">
|
||
<h3 id="orgf018826"><span class="section-number-3">5.3</span> Identification</h3>
|
||
<div class="outline-text-3" id="text-5-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-org70a9954" class="outline-3">
|
||
<h3 id="org70a9954"><span class="section-number-3">5.4</span> Compare 2-DoF with flexible</h3>
|
||
<div class="outline-text-3" id="text-5-4">
|
||
</div>
|
||
<div id="outline-container-orgb042578" class="outline-4">
|
||
<h4 id="orgb042578"><span class="section-number-4">5.4.1</span> APA - 2 DoF</h4>
|
||
<div class="outline-text-4" id="text-5-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-orga522837" class="outline-4">
|
||
<h4 id="orga522837"><span class="section-number-4">5.4.2</span> APA - Fully Flexible</h4>
|
||
<div class="outline-text-4" id="text-5-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-org955f432" class="outline-4">
|
||
<h4 id="org955f432"><span class="section-number-4">5.4.3</span> Comparison</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org75c145b" class="outline-2">
|
||
<h2 id="org75c145b"><span class="section-number-2">6</span> Test Bench Struts - Simscape Model</h2>
|
||
<div class="outline-text-2" id="text-6">
|
||
</div>
|
||
<div id="outline-container-org33e46af" class="outline-3">
|
||
<h3 id="org33e46af"><span class="section-number-3">6.1</span> Introduction</h3>
|
||
</div>
|
||
<div id="outline-container-org8e89838" class="outline-3">
|
||
<h3 id="org8e89838"><span class="section-number-3">6.2</span> Nano Hexapod object</h3>
|
||
<div class="outline-text-3" id="text-6-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org2adfb29" class="outline-4">
|
||
<h4 id="org2adfb29"><span class="section-number-4">6.2.1</span> Flexible Joint - Bot</h4>
|
||
<div class="outline-text-4" id="text-6-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-orgbab2a52" class="outline-4">
|
||
<h4 id="orgbab2a52"><span class="section-number-4">6.2.2</span> Flexible Joint - Top</h4>
|
||
<div class="outline-text-4" id="text-6-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-orgb940d24" class="outline-4">
|
||
<h4 id="orgb940d24"><span class="section-number-4">6.2.3</span> APA - 2 DoF</h4>
|
||
<div class="outline-text-4" id="text-6-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-org0d5ca24" class="outline-4">
|
||
<h4 id="org0d5ca24"><span class="section-number-4">6.2.4</span> APA - Flexible Frame</h4>
|
||
<div class="outline-text-4" id="text-6-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-org38421c7" class="outline-4">
|
||
<h4 id="org38421c7"><span class="section-number-4">6.2.5</span> APA - Fully Flexible</h4>
|
||
<div class="outline-text-4" id="text-6-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-org8386920" class="outline-3">
|
||
<h3 id="org8386920"><span class="section-number-3">6.3</span> Identification</h3>
|
||
<div class="outline-text-3" id="text-6-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-orgfc36d66" class="outline-3">
|
||
<h3 id="orgfc36d66"><span class="section-number-3">6.4</span> Compare flexible joints</h3>
|
||
<div class="outline-text-3" id="text-6-4">
|
||
</div>
|
||
<div id="outline-container-orge4d3b0f" class="outline-4">
|
||
<h4 id="orge4d3b0f"><span class="section-number-4">6.4.1</span> Perfect</h4>
|
||
<div class="outline-text-4" id="text-6-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-orgbaf4ec8" class="outline-4">
|
||
<h4 id="orgbaf4ec8"><span class="section-number-4">6.4.2</span> Top Flexible</h4>
|
||
<div class="outline-text-4" id="text-6-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-org98b1cea" class="outline-4">
|
||
<h4 id="org98b1cea"><span class="section-number-4">6.4.3</span> Bottom Flexible</h4>
|
||
<div class="outline-text-4" id="text-6-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-org4503331" class="outline-4">
|
||
<h4 id="org4503331"><span class="section-number-4">6.4.4</span> Both Flexible</h4>
|
||
<div class="outline-text-4" id="text-6-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-org4a1295c" class="outline-4">
|
||
<h4 id="org4a1295c"><span class="section-number-4">6.4.5</span> Comparison</h4>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="outline-container-org2342930" class="outline-2">
|
||
<h2 id="org2342930"><span class="section-number-2">7</span> Function</h2>
|
||
<div class="outline-text-2" id="text-7">
|
||
</div>
|
||
<div id="outline-container-orgc7c4b95" class="outline-3">
|
||
<h3 id="orgc7c4b95"><span class="section-number-3">7.1</span> <code>generateSweepExc</code>: Generate sweep sinus excitation</h3>
|
||
<div class="outline-text-3" id="text-7-1">
|
||
<p>
|
||
<a id="org81fc720"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-orgc4bb034" class="outline-4">
|
||
<h4 id="orgc4bb034">Function description</h4>
|
||
<div class="outline-text-4" id="text-orgc4bb034">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[U_exc]</span> = <span class="org-function-name">generateSweepExc</span>(<span class="org-variable-name">args</span>)
|
||
<span class="org-comment">% generateSweepExc - Generate a Sweep Sine excitation signal</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Syntax: [U_exc] = generateSweepExc(args)</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Inputs:</span>
|
||
<span class="org-comment">% - args - Optinal arguments:</span>
|
||
<span class="org-comment">% - Ts - Sampling Time - [s]</span>
|
||
<span class="org-comment">% - f_start - Start frequency of the sweep - [Hz]</span>
|
||
<span class="org-comment">% - f_end - End frequency of the sweep - [Hz]</span>
|
||
<span class="org-comment">% - V_mean - Mean value of the excitation voltage - [V]</span>
|
||
<span class="org-comment">% - V_exc - Excitation Amplitude for the Sweep, could be numeric or TF - [V]</span>
|
||
<span class="org-comment">% - t_start - Time at which the sweep begins - [s]</span>
|
||
<span class="org-comment">% - exc_duration - Duration of the sweep - [s]</span>
|
||
<span class="org-comment">% - sweep_type - 'logarithmic' or 'linear' - [-]</span>
|
||
<span class="org-comment">% - smooth_ends - 'true' or 'false': smooth transition between 0 and V_mean - [-]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org236758c" class="outline-4">
|
||
<h4 id="org236758c">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-org236758c">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||
<span class="org-variable-name">args</span>.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e<span class="org-type">-</span>4
|
||
<span class="org-variable-name">args</span>.f_start (1,1) double {mustBeNumeric, mustBePositive} = 1
|
||
<span class="org-variable-name">args</span>.f_end (1,1) double {mustBeNumeric, mustBePositive} = 1e3
|
||
<span class="org-variable-name">args</span>.V_mean (1,1) double {mustBeNumeric} = 0
|
||
<span class="org-variable-name">args</span>.V_exc = 1
|
||
<span class="org-variable-name">args</span>.t_start (1,1) double {mustBeNumeric, mustBeNonnegative} = 5
|
||
<span class="org-variable-name">args</span>.exc_duration (1,1) double {mustBeNumeric, mustBePositive} = 10
|
||
<span class="org-variable-name">args</span>.sweep_type char {mustBeMember(args.sweep_type,{<span class="org-string">'log'</span>, <span class="org-string">'lin'</span>})} = <span class="org-string">'lin'</span>
|
||
<span class="org-variable-name">args</span>.smooth_ends logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org7370e05" class="outline-4">
|
||
<h4 id="org7370e05">Sweep Sine part</h4>
|
||
<div class="outline-text-4" id="text-org7370e05">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">t_sweep = 0<span class="org-type">:</span>args.Ts<span class="org-type">:</span>args.exc_duration;
|
||
|
||
<span class="org-keyword">if</span> strcmp(args.sweep_type, <span class="org-string">'log'</span>)
|
||
V_exc = sin(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>args.f_start <span class="org-type">*</span> args.exc_duration<span class="org-type">/</span>log(args.f_end<span class="org-type">/</span>args.f_start) <span class="org-type">*</span> (exp(log(args.f_end<span class="org-type">/</span>args.f_start)<span class="org-type">*</span>t_sweep<span class="org-type">/</span>args.exc_duration) <span class="org-type">-</span> 1));
|
||
<span class="org-keyword">elseif</span> strcmp(args.sweep_type, <span class="org-string">'lin'</span>)
|
||
V_exc = sin(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>(args.f_start <span class="org-type">+</span> (args.f_end <span class="org-type">-</span> args.f_start)<span class="org-type">/</span>2<span class="org-type">/</span>args.exc_duration<span class="org-type">*</span>t_sweep)<span class="org-type">.*</span>t_sweep);
|
||
<span class="org-keyword">else</span>
|
||
error(<span class="org-string">'sweep_type should either be equal to "log" or to "lin"'</span>);
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">if</span> isnumeric(args.V_exc)
|
||
V_sweep = args.V_mean <span class="org-type">+</span> args.V_exc<span class="org-type">*</span>V_exc;
|
||
<span class="org-keyword">elseif</span> isct(args.V_exc)
|
||
<span class="org-keyword">if</span> strcmp(args.sweep_type, <span class="org-string">'log'</span>)
|
||
V_sweep = args.V_mean <span class="org-type">+</span> abs(squeeze(freqresp(args.V_exc, args.f_start<span class="org-type">*</span>(args.f_end<span class="org-type">/</span>args.f_start)<span class="org-type">.^</span>(t_sweep<span class="org-type">/</span>args.exc_duration), <span class="org-string">'Hz'</span>)))<span class="org-type">'.*</span>V_exc;
|
||
<span class="org-keyword">elseif</span> strcmp(args.sweep_type, <span class="org-string">'lin'</span>)
|
||
V_sweep = args.V_mean <span class="org-type">+</span> abs(squeeze(freqresp(args.V_exc, args.f_start<span class="org-type">+</span>(args.f_end<span class="org-type">-</span>args.f_start)<span class="org-type">/</span>args.exc_duration<span class="org-type">*</span>t_sweep, <span class="org-string">'Hz'</span>)))<span class="org-type">'.*</span>V_exc;
|
||
<span class="org-keyword">end</span>
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org7bf90fb" class="outline-4">
|
||
<h4 id="org7bf90fb">Smooth Ends</h4>
|
||
<div class="outline-text-4" id="text-org7bf90fb">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">if</span> args.t_start <span class="org-type">></span> 0
|
||
t_smooth_start = args.Ts<span class="org-type">:</span>args.Ts<span class="org-type">:</span>args.t_start;
|
||
|
||
V_smooth_start = zeros(size(t_smooth_start));
|
||
V_smooth_end = zeros(size(t_smooth_start));
|
||
|
||
<span class="org-keyword">if</span> args.smooth_ends
|
||
Vd_max = args.V_mean<span class="org-type">/</span>(0.7<span class="org-type">*</span>args.t_start);
|
||
|
||
V_d = zeros(size(t_smooth_start));
|
||
V_d(t_smooth_start <span class="org-type"><</span> 0.2<span class="org-type">*</span>args.t_start) = t_smooth_start(t_smooth_start <span class="org-type"><</span> 0.2<span class="org-type">*</span>args.t_start)<span class="org-type">*</span>Vd_max<span class="org-type">/</span>(0.2<span class="org-type">*</span>args.t_start);
|
||
V_d(t_smooth_start <span class="org-type">></span> 0.2<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.7<span class="org-type">*</span>args.t_start) = Vd_max;
|
||
V_d(t_smooth_start <span class="org-type">></span> 0.7<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.9<span class="org-type">*</span>args.t_start) = Vd_max <span class="org-type">-</span> (t_smooth_start(t_smooth_start <span class="org-type">></span> 0.7<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.9<span class="org-type">*</span>args.t_start) <span class="org-type">-</span> 0.7<span class="org-type">*</span>args.t_start)<span class="org-type">*</span>Vd_max<span class="org-type">/</span>(0.2<span class="org-type">*</span>args.t_start);
|
||
|
||
V_smooth_start = cumtrapz(V_d)<span class="org-type">*</span>args.Ts;
|
||
|
||
V_smooth_end = args.V_mean <span class="org-type">-</span> V_smooth_start;
|
||
<span class="org-keyword">end</span>
|
||
<span class="org-keyword">else</span>
|
||
V_smooth_start = [];
|
||
V_smooth_end = [];
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgb10708b" class="outline-4">
|
||
<h4 id="orgb10708b">Combine Excitation signals</h4>
|
||
<div class="outline-text-4" id="text-orgb10708b">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">V_exc = [V_smooth_start, V_sweep, V_smooth_end];
|
||
t_exc = args.Ts<span class="org-type">*</span>[0<span class="org-type">:</span>1<span class="org-type">:</span>length(V_exc)<span class="org-type">-</span>1];
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">U_exc = [t_exc; V_exc];
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org6320a08" class="outline-3">
|
||
<h3 id="org6320a08"><span class="section-number-3">7.2</span> <code>generateShapedNoise</code>: Generate Shaped Noise excitation</h3>
|
||
<div class="outline-text-3" id="text-7-2">
|
||
<p>
|
||
<a id="org298f65f"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-org8475d04" class="outline-4">
|
||
<h4 id="org8475d04">Function description</h4>
|
||
<div class="outline-text-4" id="text-org8475d04">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[U_exc]</span> = <span class="org-function-name">generateShapedNoise</span>(<span class="org-variable-name">args</span>)
|
||
<span class="org-comment">% generateShapedNoise - Generate a Shaped Noise excitation signal</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Syntax: [U_exc] = generateShapedNoise(args)</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Inputs:</span>
|
||
<span class="org-comment">% - args - Optinal arguments:</span>
|
||
<span class="org-comment">% - Ts - Sampling Time - [s]</span>
|
||
<span class="org-comment">% - V_mean - Mean value of the excitation voltage - [V]</span>
|
||
<span class="org-comment">% - V_exc - Excitation Amplitude, could be numeric or TF - [V rms]</span>
|
||
<span class="org-comment">% - t_start - Time at which the noise begins - [s]</span>
|
||
<span class="org-comment">% - exc_duration - Duration of the noise - [s]</span>
|
||
<span class="org-comment">% - smooth_ends - 'true' or 'false': smooth transition between 0 and V_mean - [-]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org455379f" class="outline-4">
|
||
<h4 id="org455379f">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-org455379f">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||
<span class="org-variable-name">args</span>.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e<span class="org-type">-</span>4
|
||
<span class="org-variable-name">args</span>.V_mean (1,1) double {mustBeNumeric} = 0
|
||
<span class="org-variable-name">args</span>.V_exc = 1
|
||
<span class="org-variable-name">args</span>.t_start (1,1) double {mustBeNumeric, mustBePositive} = 5
|
||
<span class="org-variable-name">args</span>.exc_duration (1,1) double {mustBeNumeric, mustBePositive} = 10
|
||
<span class="org-variable-name">args</span>.smooth_ends logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org9033806" class="outline-4">
|
||
<h4 id="org9033806">Shaped Noise</h4>
|
||
<div class="outline-text-4" id="text-org9033806">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">t_noise = 0<span class="org-type">:</span>args.Ts<span class="org-type">:</span>args.exc_duration;
|
||
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">if</span> isnumeric(args.V_exc)
|
||
V_noise = args.V_mean <span class="org-type">+</span> args.V_exc<span class="org-type">*</span>sqrt(1<span class="org-type">/</span>args.Ts<span class="org-type">/</span>2)<span class="org-type">*</span>randn(length(t_noise), 1)<span class="org-type">'</span>;
|
||
<span class="org-keyword">elseif</span> isct(args.V_exc)
|
||
V_noise = args.V_mean <span class="org-type">+</span> lsim(args.V_exc, sqrt(1<span class="org-type">/</span>args.Ts<span class="org-type">/</span>2)<span class="org-type">*</span>randn(length(t_noise), 1), t_noise)<span class="org-type">'</span>;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orge0044cd" class="outline-4">
|
||
<h4 id="orge0044cd">Smooth Ends</h4>
|
||
<div class="outline-text-4" id="text-orge0044cd">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">t_smooth_start = args.Ts<span class="org-type">:</span>args.Ts<span class="org-type">:</span>args.t_start;
|
||
|
||
V_smooth_start = zeros(size(t_smooth_start));
|
||
V_smooth_end = zeros(size(t_smooth_start));
|
||
|
||
<span class="org-keyword">if</span> args.smooth_ends
|
||
Vd_max = args.V_mean<span class="org-type">/</span>(0.7<span class="org-type">*</span>args.t_start);
|
||
|
||
V_d = zeros(size(t_smooth_start));
|
||
V_d(t_smooth_start <span class="org-type"><</span> 0.2<span class="org-type">*</span>args.t_start) = t_smooth_start(t_smooth_start <span class="org-type"><</span> 0.2<span class="org-type">*</span>args.t_start)<span class="org-type">*</span>Vd_max<span class="org-type">/</span>(0.2<span class="org-type">*</span>args.t_start);
|
||
V_d(t_smooth_start <span class="org-type">></span> 0.2<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.7<span class="org-type">*</span>args.t_start) = Vd_max;
|
||
V_d(t_smooth_start <span class="org-type">></span> 0.7<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.9<span class="org-type">*</span>args.t_start) = Vd_max <span class="org-type">-</span> (t_smooth_start(t_smooth_start <span class="org-type">></span> 0.7<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.9<span class="org-type">*</span>args.t_start) <span class="org-type">-</span> 0.7<span class="org-type">*</span>args.t_start)<span class="org-type">*</span>Vd_max<span class="org-type">/</span>(0.2<span class="org-type">*</span>args.t_start);
|
||
|
||
V_smooth_start = cumtrapz(V_d)<span class="org-type">*</span>args.Ts;
|
||
|
||
V_smooth_end = args.V_mean <span class="org-type">-</span> V_smooth_start;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org6d9e07c" class="outline-4">
|
||
<h4 id="org6d9e07c">Combine Excitation signals</h4>
|
||
<div class="outline-text-4" id="text-org6d9e07c">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">V_exc = [V_smooth_start, V_noise, V_smooth_end];
|
||
t_exc = args.Ts<span class="org-type">*</span>[0<span class="org-type">:</span>1<span class="org-type">:</span>length(V_exc)<span class="org-type">-</span>1];
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">U_exc = [t_exc; V_exc];
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org0e30912" class="outline-3">
|
||
<h3 id="org0e30912"><span class="section-number-3">7.3</span> <code>generateSinIncreasingAmpl</code>: Generate Sinus with increasing amplitude</h3>
|
||
<div class="outline-text-3" id="text-7-3">
|
||
<p>
|
||
<a id="orgc5d16b1"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-org367b7cb" class="outline-4">
|
||
<h4 id="org367b7cb">Function description</h4>
|
||
<div class="outline-text-4" id="text-org367b7cb">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[U_exc]</span> = <span class="org-function-name">generateSinIncreasingAmpl</span>(<span class="org-variable-name">args</span>)
|
||
<span class="org-comment">% generateSinIncreasingAmpl - Generate Sinus with increasing amplitude</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Syntax: [U_exc] = generateSinIncreasingAmpl(args)</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Inputs:</span>
|
||
<span class="org-comment">% - args - Optinal arguments:</span>
|
||
<span class="org-comment">% - Ts - Sampling Time - [s]</span>
|
||
<span class="org-comment">% - V_mean - Mean value of the excitation voltage - [V]</span>
|
||
<span class="org-comment">% - sin_ampls - Excitation Amplitudes - [V]</span>
|
||
<span class="org-comment">% - sin_freq - Excitation Frequency - [Hz]</span>
|
||
<span class="org-comment">% - sin_num - Number of period for each amplitude - [-]</span>
|
||
<span class="org-comment">% - t_start - Time at which the excitation begins - [s]</span>
|
||
<span class="org-comment">% - smooth_ends - 'true' or 'false': smooth transition between 0 and V_mean - [-]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orge543802" class="outline-4">
|
||
<h4 id="orge543802">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-orge543802">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||
<span class="org-variable-name">args</span>.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e<span class="org-type">-</span>4
|
||
<span class="org-variable-name">args</span>.V_mean (1,1) double {mustBeNumeric} = 0
|
||
<span class="org-variable-name">args</span>.sin_ampls double {mustBeNumeric, mustBePositive} = [0.1, 0.2, 0.3]
|
||
<span class="org-variable-name">args</span>.sin_period (1,1) double {mustBeNumeric, mustBePositive} = 1
|
||
<span class="org-variable-name">args</span>.sin_num (1,1) double {mustBeNumeric, mustBePositive, mustBeInteger} = 3
|
||
<span class="org-variable-name">args</span>.t_start (1,1) double {mustBeNumeric, mustBePositive} = 5
|
||
<span class="org-variable-name">args</span>.smooth_ends logical {mustBeNumericOrLogical} = <span class="org-constant">true</span>
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orge83b518" class="outline-4">
|
||
<h4 id="orge83b518">Sinus excitation</h4>
|
||
<div class="outline-text-4" id="text-orge83b518">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">t_noise = 0<span class="org-type">:</span>args.Ts<span class="org-type">:</span>args.sin_period<span class="org-type">*</span>args.sin_num;
|
||
sin_exc = [];
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">for</span> <span class="org-variable-name">sin_ampl</span> = <span class="org-constant">args.sin_ampls</span>
|
||
sin_exc = [sin_exc, args.V_mean <span class="org-type">+</span> sin_ampl<span class="org-type">*</span>sin(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">/</span>args.sin_period<span class="org-type">*</span>t_noise)];
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org7837dc5" class="outline-4">
|
||
<h4 id="org7837dc5">Smooth Ends</h4>
|
||
<div class="outline-text-4" id="text-org7837dc5">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">t_smooth_start = args.Ts<span class="org-type">:</span>args.Ts<span class="org-type">:</span>args.t_start;
|
||
|
||
V_smooth_start = zeros(size(t_smooth_start));
|
||
V_smooth_end = zeros(size(t_smooth_start));
|
||
|
||
<span class="org-keyword">if</span> args.smooth_ends
|
||
Vd_max = args.V_mean<span class="org-type">/</span>(0.7<span class="org-type">*</span>args.t_start);
|
||
|
||
V_d = zeros(size(t_smooth_start));
|
||
V_d(t_smooth_start <span class="org-type"><</span> 0.2<span class="org-type">*</span>args.t_start) = t_smooth_start(t_smooth_start <span class="org-type"><</span> 0.2<span class="org-type">*</span>args.t_start)<span class="org-type">*</span>Vd_max<span class="org-type">/</span>(0.2<span class="org-type">*</span>args.t_start);
|
||
V_d(t_smooth_start <span class="org-type">></span> 0.2<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.7<span class="org-type">*</span>args.t_start) = Vd_max;
|
||
V_d(t_smooth_start <span class="org-type">></span> 0.7<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.9<span class="org-type">*</span>args.t_start) = Vd_max <span class="org-type">-</span> (t_smooth_start(t_smooth_start <span class="org-type">></span> 0.7<span class="org-type">*</span>args.t_start <span class="org-type">&</span> t_smooth_start <span class="org-type"><</span> 0.9<span class="org-type">*</span>args.t_start) <span class="org-type">-</span> 0.7<span class="org-type">*</span>args.t_start)<span class="org-type">*</span>Vd_max<span class="org-type">/</span>(0.2<span class="org-type">*</span>args.t_start);
|
||
|
||
V_smooth_start = cumtrapz(V_d)<span class="org-type">*</span>args.Ts;
|
||
|
||
V_smooth_end = args.V_mean <span class="org-type">-</span> V_smooth_start;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgf0f823e" class="outline-4">
|
||
<h4 id="orgf0f823e">Combine Excitation signals</h4>
|
||
<div class="outline-text-4" id="text-orgf0f823e">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">V_exc = [V_smooth_start, sin_exc, V_smooth_end];
|
||
t_exc = args.Ts<span class="org-type">*</span>[0<span class="org-type">:</span>1<span class="org-type">:</span>length(V_exc)<span class="org-type">-</span>1];
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">U_exc = [t_exc; V_exc];
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</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-06-04 ven. 12:04</p>
|
||
</div>
|
||
</body>
|
||
</html>
|