4384 lines
187 KiB
HTML
4384 lines
187 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-07 lun. 18:42 -->
|
||
<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="#org45ff9b7">1. Model of an Amplified Piezoelectric Actuator and Sensor</a></li>
|
||
<li><a href="#orge42ea26">2. First Basic Measurements</a>
|
||
<ul>
|
||
<li><a href="#org2bbe9d7">2.1. Geometrical Measurements</a>
|
||
<ul>
|
||
<li><a href="#org7b0a6a5">2.1.1. Measurement Setup</a></li>
|
||
<li><a href="#org0d80e25">2.1.2. Measurement Results</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgb64d870">2.2. Electrical Measurements</a></li>
|
||
<li><a href="#orgd8a9dab">2.3. Stroke measurement</a>
|
||
<ul>
|
||
<li><a href="#orgeb068bb">2.3.1. Voltage applied on one stack</a></li>
|
||
<li><a href="#org801ceb4">2.3.2. Voltage applied on two stacks</a></li>
|
||
<li><a href="#org9c7defd">2.3.3. Voltage applied on all three stacks</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org8201030">2.4. Spurious resonances</a>
|
||
<ul>
|
||
<li><a href="#org05a1e67">2.4.1. Introduction</a></li>
|
||
<li><a href="#org066974f">2.4.2. Setup</a></li>
|
||
<li><a href="#org5bdd221">2.4.3. Bending - X</a></li>
|
||
<li><a href="#org0eb1d5c">2.4.4. Bending - Y</a></li>
|
||
<li><a href="#org4e89ffe">2.4.5. Torsion - Z</a></li>
|
||
<li><a href="#org18469e9">2.4.6. Compare</a></li>
|
||
<li><a href="#org1bddc15">2.4.7. Conclusion</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orge34e6ae">3. Dynamical measurements - APA</a>
|
||
<ul>
|
||
<li><a href="#orge55f1e0">3.1. Speedgoat Setup</a>
|
||
<ul>
|
||
<li><a href="#org1cb0445">3.1.1. <code>frf_setup.m</code> - Measurement Setup</a></li>
|
||
<li><a href="#org662f322">3.1.2. <code>frf_save.m</code> - Save Data</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgff61afe">3.2. Measurements on APA 1</a>
|
||
<ul>
|
||
<li><a href="#org0c121bb">3.2.1. Excitation Signal</a></li>
|
||
<li><a href="#orgaca41b2">3.2.2. FRF Identification - Setup</a></li>
|
||
<li><a href="#org60c5553">3.2.3. FRF Identification - Displacement</a></li>
|
||
<li><a href="#orgd82aaa0">3.2.4. FRF Identification - Force Sensor</a></li>
|
||
<li><a href="#orgf565b66">3.2.5. Hysteresis</a></li>
|
||
<li><a href="#org4c8f7de">3.2.6. Estimation of the APA axial stiffness</a></li>
|
||
<li><a href="#orgdd3b84f">3.2.7. Stiffness change due to electrical connections</a></li>
|
||
<li><a href="#org11ec6ba">3.2.8. Effect of the resistor on the IFF Plant</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgb88d48f">3.3. Comparison of all the APA</a>
|
||
<ul>
|
||
<li><a href="#org25eedf9">3.3.1. Axial Stiffnesses - Comparison</a></li>
|
||
<li><a href="#org9909928">3.3.2. FRF Identification - Setup</a></li>
|
||
<li><a href="#org2ec1b4a">3.3.3. FRF Identification - DVF</a></li>
|
||
<li><a href="#org392c96d">3.3.4. FRF Identification - IFF</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgf9996ba">4. Dynamical measurements - Struts</a>
|
||
<ul>
|
||
<li><a href="#orga57d4da">4.1. Measurement on Strut 1</a>
|
||
<ul>
|
||
<li><a href="#org9a60bea">4.1.1. Without Encoder</a>
|
||
<ul>
|
||
<li><a href="#orgfe73b0a">4.1.1.1. FRF Identification - Setup</a></li>
|
||
<li><a href="#orge8e6b38">4.1.1.2. FRF Identification - Displacement</a></li>
|
||
<li><a href="#org788ecd9">4.1.1.3. FRF Identification - IFF</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org2b6f40d">4.1.2. With Encoder</a>
|
||
<ul>
|
||
<li><a href="#orga38e0b7">4.1.2.1. Measurement Data</a></li>
|
||
<li><a href="#orgce9219d">4.1.2.2. FRF Identification - DVF</a></li>
|
||
<li><a href="#org285cce2">4.1.2.3. Comparison of the Encoder and Interferometer</a></li>
|
||
<li><a href="#org377fd3d">4.1.2.4. APA Resonances Frequency</a></li>
|
||
<li><a href="#org30dbdde">4.1.2.5. Estimated Flexible Joint axial stiffness</a></li>
|
||
<li><a href="#org9921a06">4.1.2.6. FRF Identification - IFF</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgbe8f55f">4.2. Comparison of all the Struts</a>
|
||
<ul>
|
||
<li><a href="#org23b81c6">4.2.1. FRF Identification - Setup</a></li>
|
||
<li><a href="#org23808b3">4.2.2. FRF Identification - DVF</a></li>
|
||
<li><a href="#org67ab117">4.2.3. FRF Identification - DVF with interferometer</a></li>
|
||
<li><a href="#org5504ed7">4.2.4. FRF Identification - IFF</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org68dbf65">5. Test Bench APA300ML - Simscape Model</a>
|
||
<ul>
|
||
<li><a href="#orga0c30a2">5.1. Introduction</a></li>
|
||
<li><a href="#orgb07d953">5.2. First Identification</a></li>
|
||
<li><a href="#org9b0e1d7">5.3. Identify Sensor/Actuator constants and compare with measured FRF</a>
|
||
<ul>
|
||
<li><a href="#org63f9c2b">5.3.1. How to identify these constants?</a>
|
||
<ul>
|
||
<li><a href="#org318c56a">5.3.1.1. Piezoelectric Actuator Constant</a></li>
|
||
<li><a href="#org349f168">5.3.1.2. Piezoelectric Sensor Constant</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org81e9990">5.3.2. Identification Data</a></li>
|
||
<li><a href="#orgfdc554b">5.3.3. 2DoF APA</a>
|
||
<ul>
|
||
<li><a href="#org32f7dc8">5.3.3.1. 2DoF APA</a></li>
|
||
<li><a href="#orgea0c877">5.3.3.2. Identification without actuator or sensor constants</a></li>
|
||
<li><a href="#org1ddf1a6">5.3.3.3. Actuator Constant</a></li>
|
||
<li><a href="#orgd50f62e">5.3.3.4. Sensor Constant</a></li>
|
||
<li><a href="#orgd73f8df">5.3.3.5. Comparison</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgc1a2c68">5.3.4. Flexible APA</a>
|
||
<ul>
|
||
<li><a href="#org8cbedfb">5.3.4.1. Flexible APA</a></li>
|
||
<li><a href="#orgdc5fbcd">5.3.4.2. Identification without actuator or sensor constants</a></li>
|
||
<li><a href="#org8e59668">5.3.4.3. Actuator Constant</a></li>
|
||
<li><a href="#org9d8c201">5.3.4.4. Sensor Constant</a></li>
|
||
<li><a href="#orgfb038cd">5.3.4.5. Comparison</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org1a9f953">5.4. Compare 2-DoF with flexible</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org775c361">6. Test Bench Struts - Simscape Model</a>
|
||
<ul>
|
||
<li><a href="#orge8ef694">6.1. Introduction</a></li>
|
||
<li><a href="#org231b6f9">6.2. First Identification</a></li>
|
||
<li><a href="#org1b3669c">6.3. Effect of flexible joints</a></li>
|
||
<li><a href="#org87c3950">6.4. Integral Force Feedback</a>
|
||
<ul>
|
||
<li><a href="#org90d414c">6.4.1. Initialize the system</a></li>
|
||
<li><a href="#org591d954">6.4.2. Plant Identification</a></li>
|
||
<li><a href="#org3ff5498">6.4.3. Root Locus</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org40c7260">7. Function</a>
|
||
<ul>
|
||
<li><a href="#org43aec14">7.1. <code>initializeBotFlexibleJoint</code> - Initialize Flexible Joint</a>
|
||
<ul>
|
||
<li><a href="#org64ba6e7">Function description</a></li>
|
||
<li><a href="#org46ecfe2">Optional Parameters</a></li>
|
||
<li><a href="#org86fdbcc">Initialize the structure</a></li>
|
||
<li><a href="#org2f488a6">Set the Joint’s type</a></li>
|
||
<li><a href="#orge38a4da">Set parameters</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org01e3d85">7.2. <code>initializeTopFlexibleJoint</code> - Initialize Flexible Joint</a>
|
||
<ul>
|
||
<li><a href="#org48c7146">Function description</a></li>
|
||
<li><a href="#org0e94625">Optional Parameters</a></li>
|
||
<li><a href="#orgfdfb9e0">Initialize the structure</a></li>
|
||
<li><a href="#org5c18e2e">Set the Joint’s type</a></li>
|
||
<li><a href="#org417dc16">Set parameters</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orgbc6b222">7.3. <code>initializeAPA</code> - Initialize APA</a>
|
||
<ul>
|
||
<li><a href="#org56ea289">Function description</a></li>
|
||
<li><a href="#org5770aae">Optional Parameters</a></li>
|
||
<li><a href="#org01625cc">Initialize Structure</a></li>
|
||
<li><a href="#orge4e4b61">Type</a></li>
|
||
<li><a href="#org481c03c">Actuator/Sensor Constants</a></li>
|
||
<li><a href="#org7f72aef">2DoF parameters</a></li>
|
||
<li><a href="#orgc70d616">Flexible frame and fully flexible</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org284d55c">7.4. <code>generateSweepExc</code>: Generate sweep sinus excitation</a>
|
||
<ul>
|
||
<li><a href="#orgca69a5c">Function description</a></li>
|
||
<li><a href="#org0ca3633">Optional Parameters</a></li>
|
||
<li><a href="#org74c56d9">Sweep Sine part</a></li>
|
||
<li><a href="#org682577a">Smooth Ends</a></li>
|
||
<li><a href="#orgf360e11">Combine Excitation signals</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#orga491d48">7.5. <code>generateShapedNoise</code>: Generate Shaped Noise excitation</a>
|
||
<ul>
|
||
<li><a href="#org0891d6e">Function description</a></li>
|
||
<li><a href="#orgfb39e43">Optional Parameters</a></li>
|
||
<li><a href="#orgd420b2f">Shaped Noise</a></li>
|
||
<li><a href="#org98a287f">Smooth Ends</a></li>
|
||
<li><a href="#org9c19166">Combine Excitation signals</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#org2034782">7.6. <code>generateSinIncreasingAmpl</code>: Generate Sinus with increasing amplitude</a>
|
||
<ul>
|
||
<li><a href="#orgd080133">Function description</a></li>
|
||
<li><a href="#org3500f46">Optional Parameters</a></li>
|
||
<li><a href="#org4ff8a78">Sinus excitation</a></li>
|
||
<li><a href="#org7298c9b">Smooth Ends</a></li>
|
||
<li><a href="#org77dedfe">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="org26f073c" 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-org45ff9b7" class="outline-2">
|
||
<h2 id="org45ff9b7"><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="#orgb6560bb">2</a>.
|
||
</p>
|
||
|
||
|
||
<div id="orgb6560bb" 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="#orgb8434de">3</a>.
|
||
</p>
|
||
|
||
|
||
<div id="orgb8434de" 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-orge42ea26" class="outline-2">
|
||
<h2 id="orge42ea26"><span class="section-number-2">2</span> First Basic Measurements</h2>
|
||
<div class="outline-text-2" id="text-2">
|
||
<p>
|
||
<a id="org196c410"></a>
|
||
</p>
|
||
<ul class="org-ul">
|
||
<li>Section <a href="#org9d2c7b4">2.1</a>:</li>
|
||
<li>Section <a href="#org1cb3a45">2.2</a>:</li>
|
||
<li>Section <a href="#org775933d">2.3</a>:</li>
|
||
<li>Section <a href="#org5136d31">2.4</a>:</li>
|
||
</ul>
|
||
</div>
|
||
<div id="outline-container-org2bbe9d7" class="outline-3">
|
||
<h3 id="org2bbe9d7"><span class="section-number-3">2.1</span> Geometrical Measurements</h3>
|
||
<div class="outline-text-3" id="text-2-1">
|
||
<p>
|
||
<a id="org9d2c7b4"></a>
|
||
</p>
|
||
<p>
|
||
The received APA are shown in Figure <a href="#org1b71d17">4</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org1b71d17" 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-org7b0a6a5" class="outline-4">
|
||
<h4 id="org7b0a6a5"><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="#org15e34ed">5</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org15e34ed" 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-org0d80e25" class="outline-4">
|
||
<h4 id="org0d80e25"><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="#org713ec4f">1</a>.
|
||
</p>
|
||
|
||
<table id="org713ec4f" 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-orgb64d870" class="outline-3">
|
||
<h3 id="orgb64d870"><span class="section-number-3">2.2</span> Electrical Measurements</h3>
|
||
<div class="outline-text-3" id="text-2-2">
|
||
<p>
|
||
<a id="org1cb3a45"></a>
|
||
</p>
|
||
|
||
<div class="note" id="org4d0523c">
|
||
<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="org55c05f1" 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="orgdc9bbee" 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="org4dfbded">
|
||
<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-orgd8a9dab" class="outline-3">
|
||
<h3 id="orgd8a9dab"><span class="section-number-3">2.3</span> Stroke measurement</h3>
|
||
<div class="outline-text-3" id="text-2-3">
|
||
<p>
|
||
<a id="org775933d"></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="#org29e7402">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="org19c8a17">
|
||
<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="org29e7402" 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-orgeb068bb" class="outline-4">
|
||
<h4 id="orgeb068bb"><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="#org2182ff3">8</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org2182ff3" 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="#org913313f">9</a>.
|
||
The displacement is set to zero at initial time when the voltage applied is -20V.
|
||
</p>
|
||
|
||
|
||
<div id="org913313f" 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="#org40909ab">10</a>.
|
||
We can clearly see that there is a problem with the APA 3.
|
||
Also, there is a large hysteresis.
|
||
</p>
|
||
|
||
|
||
<div id="org40909ab" 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="org62be2fe">
|
||
<p>
|
||
We can clearly see from Figure <a href="#org40909ab">10</a> that there is a problem with the APA number 3.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org801ceb4" class="outline-4">
|
||
<h4 id="org801ceb4"><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="#org2242d44">11</a>.
|
||
The displacement is set to zero at initial time when the voltage applied is -20V.
|
||
</p>
|
||
|
||
|
||
<div id="org2242d44" 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="#org8ecb8f3">12</a>.
|
||
We can clearly see that there is a problem with the APA 3.
|
||
Also, there is a large hysteresis.
|
||
</p>
|
||
|
||
|
||
<div id="org8ecb8f3" 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-org9c7defd" class="outline-4">
|
||
<h4 id="org9c7defd"><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="#org6867114">13</a>).
|
||
</p>
|
||
|
||
|
||
<div id="org6867114" 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="#org2286ff1">3</a>.
|
||
</p>
|
||
|
||
<table id="org2286ff1" 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-org8201030" class="outline-3">
|
||
<h3 id="org8201030"><span class="section-number-3">2.4</span> Spurious resonances</h3>
|
||
<div class="outline-text-3" id="text-2-4">
|
||
<p>
|
||
<a id="org5136d31"></a>
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org05a1e67" class="outline-4">
|
||
<h4 id="org05a1e67"><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="#org462cdb5">14</a>)</li>
|
||
<li>Mode in Y-bending at 285Hz (Figure <a href="#org28e5c70">15</a>)</li>
|
||
<li>Mode in Z-torsion at 400Hz (Figure <a href="#org113017e">16</a>)</li>
|
||
</ul>
|
||
|
||
|
||
<div id="org462cdb5" 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="org28e5c70" 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="org113017e" 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-org066974f" class="outline-4">
|
||
<h4 id="org066974f"><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="#orged6e979">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="org814875e">
|
||
<ul class="org-ul">
|
||
<li>Laser Doppler Vibrometer Polytec OFV512</li>
|
||
<li>Instrumented hammer</li>
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="orged6e979" 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-org5bdd221" class="outline-4">
|
||
<h4 id="org5bdd221"><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="#orgfedcbcb">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="orgfedcbcb" 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="#org9bbe3ca">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="org9bbe3ca" 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-org0eb1d5c" class="outline-4">
|
||
<h4 id="org0eb1d5c"><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="#org04bb7a3">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="org04bb7a3" 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="#org6a65beb">21</a>.
|
||
The main resonance is at 412Hz, and we also see the third “harmonic” at 1220Hz.
|
||
</p>
|
||
|
||
|
||
<div id="org6a65beb" 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-org4e89ffe" class="outline-4">
|
||
<h4 id="org4e89ffe"><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="#org2022c1d">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="org2022c1d" 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="#org4f0ffe0">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="org4f0ffe0" 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="#orgc0456ad">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="orgc0456ad" 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-org18469e9" class="outline-4">
|
||
<h4 id="org18469e9"><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="#orga219879">25</a>.
|
||
</p>
|
||
|
||
<div id="orga219879" 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-org1bddc15" class="outline-4">
|
||
<h4 id="org1bddc15"><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="org1c182e9" 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-orge34e6ae" class="outline-2">
|
||
<h2 id="orge34e6ae"><span class="section-number-2">3</span> Dynamical measurements - APA</h2>
|
||
<div class="outline-text-2" id="text-3">
|
||
<p>
|
||
<a id="orgf2d81ee"></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="#org4ffa03e">26</a>, and a zoom picture on the APA and encoder is shown in Figure <a href="#orgaf1c5e2">27</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org4ffa03e" 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="orgaf1c5e2" 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="org203a0e9">
|
||
<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="#orga9c5619">28</a> and the signal used are summarized in Table <a href="#org57c5c41">5</a>.
|
||
</p>
|
||
|
||
|
||
<div id="orga9c5619" 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="org57c5c41" 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="#org6f270cd">3.1</a>: the Speedgoat setup is described (excitation signals, saved signals, etc.)</li>
|
||
<li>Section <a href="#org372a2a9">3.2</a>: the measurements are first performed on one APA.</li>
|
||
<li>Section <a href="#org0d60334">3.3</a>: the same measurements are performed on all the APA and are compared.</li>
|
||
</ul>
|
||
</div>
|
||
<div id="outline-container-orge55f1e0" class="outline-3">
|
||
<h3 id="orge55f1e0"><span class="section-number-3">3.1</span> Speedgoat Setup</h3>
|
||
<div class="outline-text-3" id="text-3-1">
|
||
<p>
|
||
<a id="org6f270cd"></a>
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org1cb0445" class="outline-4">
|
||
<h4 id="org1cb0445"><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="org710529d" 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="orga729bb3" 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="#org5492207">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="org5492207" 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="orgbe64f4a" 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-org662f322" class="outline-4">
|
||
<h4 id="org662f322"><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-orgff61afe" class="outline-3">
|
||
<h3 id="orgff61afe"><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="org372a2a9"></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-org0c121bb" class="outline-4">
|
||
<h4 id="org0c121bb"><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="#orgb4ee874">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="orgb4ee874" 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-orgaca41b2" class="outline-4">
|
||
<h4 id="orgaca41b2"><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-org60c5553" class="outline-4">
|
||
<h4 id="org60c5553"><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="#org945d8b1">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="org945d8b1" 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="#orgfa9e63f">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="orgfa9e63f" 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 class="important" id="org87c109d">
|
||
<p>
|
||
It seems that using the interferometer, we have a lot more time delay than when using the encoder.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd82aaa0" class="outline-4">
|
||
<h4 id="orgd82aaa0"><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="#orgf975e0c">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="orgf975e0c" 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="#orga60de3d">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="orga60de3d" 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-orgf565b66" class="outline-4">
|
||
<h4 id="orgf565b66"><span class="section-number-4">3.2.5</span> Hysteresis</h4>
|
||
<div class="outline-text-4" id="text-3-2-5">
|
||
<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="#org656377d">38</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org656377d" 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="#org9035bb9">39</a>.
|
||
</p>
|
||
|
||
<div id="org9035bb9" 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="#orgeae2aaf">40</a>.
|
||
</p>
|
||
|
||
<div id="orgeae2aaf" 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="orgd76b458">
|
||
<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-org4c8f7de" class="outline-4">
|
||
<h4 id="org4c8f7de"><span class="section-number-4">3.2.6</span> Estimation of the APA axial stiffness</h4>
|
||
<div class="outline-text-4" id="text-3-2-6">
|
||
<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="#org1455ad8">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="org1455ad8" 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-orgdd3b84f" class="outline-4">
|
||
<h4 id="orgdd3b84f"><span class="section-number-4">3.2.7</span> Stiffness change due to electrical connections</h4>
|
||
<div class="outline-text-4" id="text-3-2-7">
|
||
<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="#orga2ded5a">42</a>.
|
||
</p>
|
||
|
||
<div id="orga2ded5a" 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="#org1dd5c6c">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="org1dd5c6c" 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="orgbd19d44">
|
||
<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-org11ec6ba" class="outline-4">
|
||
<h4 id="org11ec6ba"><span class="section-number-4">3.2.8</span> Effect of the resistor on the IFF Plant</h4>
|
||
<div class="outline-text-4" id="text-3-2-8">
|
||
<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="#org5bcff3f">43</a>.
|
||
</p>
|
||
|
||
<div id="org5bcff3f" 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="orgd3ac40d">
|
||
<p>
|
||
The added resistor has indeed the expected effect.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgb88d48f" class="outline-3">
|
||
<h3 id="orgb88d48f"><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="org0d60334"></a>
|
||
</p>
|
||
<p>
|
||
The same measurements that was performed in Section <a href="#org372a2a9">3.2</a> are now performed on all the APA and then compared.
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org25eedf9" class="outline-4">
|
||
<h4 id="org25eedf9"><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="#org3aa5393">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="org8d05f74">
|
||
<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="org3aa5393" 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="#org4a86689">7</a>.
|
||
</p>
|
||
|
||
<table id="org4a86689" 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="orgce98143">
|
||
<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-org9909928" class="outline-4">
|
||
<h4 id="org9909928"><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-org2ec1b4a" class="outline-4">
|
||
<h4 id="org2ec1b4a"><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="#orgc8bc6d8">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="orgc8bc6d8" 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="#orge93a1f2">46</a>.
|
||
They are all superimposed except for the APA7.
|
||
</p>
|
||
|
||
<div class="question" id="orgd39255e">
|
||
<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="orge93a1f2" 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="#orgfa9c426">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="org8826460">
|
||
<p>
|
||
Why is there a double resonance at around 94Hz?
|
||
</p>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="orgfa9c426" 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-org392c96d" class="outline-4">
|
||
<h4 id="org392c96d"><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="#org00ba08f">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="org00ba08f" 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="#org66ee42e">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="org66ee42e" 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-orgf9996ba" class="outline-2">
|
||
<h2 id="orgf9996ba"><span class="section-number-2">4</span> Dynamical measurements - Struts</h2>
|
||
<div class="outline-text-2" id="text-4">
|
||
<p>
|
||
<a id="org8ccce4f"></a>
|
||
</p>
|
||
<p>
|
||
The same bench used in Section <a href="#orgf2d81ee">3</a> is here used with the strut instead of only the APA.
|
||
</p>
|
||
|
||
<p>
|
||
The bench is shown in Figure <a href="#orgff1942d">50</a>.
|
||
Measurements are performed either when no encoder is fixed to the strut (Figure <a href="#org4975527">51</a>) or when one encoder is fixed to the strut (Figure <a href="#orgff1942d">50</a>).
|
||
</p>
|
||
|
||
|
||
<div id="orgff1942d" 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="org4975527" 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="org969bfe0" 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-orga57d4da" class="outline-3">
|
||
<h3 id="orga57d4da"><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="org261dd04"></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-org9a60bea" class="outline-4">
|
||
<h4 id="org9a60bea"><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="org9e81ae7"></a>
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-orgfe73b0a" class="outline-5">
|
||
<h5 id="orgfe73b0a"><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-orge8e6b38" class="outline-5">
|
||
<h5 id="orge8e6b38"><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="orgc407484" 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="#org769fb0b">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="org769fb0b" 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-org788ecd9" class="outline-5">
|
||
<h5 id="org788ecd9"><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="#org8207c77">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="org8207c77" 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="#org94bffab">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="org94bffab" 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-org2b6f40d" class="outline-4">
|
||
<h4 id="org2b6f40d"><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="orgd910842"></a>
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-orga38e0b7" class="outline-5">
|
||
<h5 id="orga38e0b7"><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-orgce9219d" class="outline-5">
|
||
<h5 id="orgce9219d"><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="org1d3f2bf" 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="#org8f01304">58</a>.
|
||
</p>
|
||
|
||
<p>
|
||
They are all superimposed except for the APA7.
|
||
</p>
|
||
|
||
<div class="question" id="org340e4f3">
|
||
<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="org2c1b3f1">
|
||
<p>
|
||
Why is there a double resonance at around 94Hz?
|
||
</p>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="org8f01304" 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-org285cce2" class="outline-5">
|
||
<h5 id="org285cce2"><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="#org31768c5">59</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org31768c5" class="figure">
|
||
<p><img src="figs/strut_1_comp_enc_int.png" alt="strut_1_comp_enc_int.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 59: </span>Comparison of the transfer functions from excitation voltage \(V_a\) to either the encoder \(d_e\) or the interferometer \(d_a\)</p>
|
||
</div>
|
||
|
||
<div class="important" id="orgdc84761">
|
||
<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-org377fd3d" class="outline-5">
|
||
<h5 id="org377fd3d"><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="#org615e6aa">60</a>, we can clearly see three spurious resonances at 197Hz, 290Hz and 376Hz.
|
||
</p>
|
||
|
||
|
||
<div id="org615e6aa" class="figure">
|
||
<p><img src="figs/strut_1_spurious_resonances.png" alt="strut_1_spurious_resonances.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 60: </span>Magnitude of the transfer function from excitation voltage \(V_a\) to encoder measurement \(d_e\). The frequency of the resonances are noted.</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 around 190Hz (Figure <a href="#orgd6fa4d6">61</a>)</li>
|
||
<li>Y-bending mode at around 290Hz (Figure <a href="#orgf96c913">62</a>)</li>
|
||
<li>Z-torsion mode at around 400Hz (Figure <a href="#org825ee69">63</a>)</li>
|
||
</ul>
|
||
|
||
|
||
<div id="orgd6fa4d6" 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="orgf96c913" 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="org825ee69" 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="org66a62cf">
|
||
<p>
|
||
The resonances are indeed due to limited stiffness of the APA.
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org30dbdde" class="outline-5">
|
||
<h5 id="org30dbdde"><span class="section-number-5">4.1.2.5</span> Estimated Flexible Joint axial stiffness</h5>
|
||
</div>
|
||
<div id="outline-container-org9921a06" class="outline-5">
|
||
<h5 id="org9921a06"><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="#org8207c77">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="org701bc85" 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="#orgcf4a825">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="orgcf4a825" 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="#org42f04d7">66</a>).
|
||
</p>
|
||
|
||
<div id="org42f04d7" 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="orgfd826ac">
|
||
<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-orgbe8f55f" class="outline-3">
|
||
<h3 id="orgbe8f55f"><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="orga77f31c"></a>
|
||
</p>
|
||
<p>
|
||
Now all struts are measured using the same procedure and test bench.
|
||
</p>
|
||
</div>
|
||
<div id="outline-container-org23b81c6" class="outline-4">
|
||
<h4 id="org23b81c6"><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-org23808b3" class="outline-4">
|
||
<h4 id="org23808b3"><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="#orgbdb1633">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="orgbdb1633" 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="#orge7c424c">68</a>.
|
||
</p>
|
||
|
||
<p>
|
||
They are all superimposed except for the LEG7.
|
||
</p>
|
||
|
||
<div id="orge7c424c" 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="org7412fcf">
|
||
<p>
|
||
Depending on how the APA are mounted with the flexible joints, the dynamics can change a lot as shown in Figure <a href="#orge7c424c">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-org67ab117" class="outline-4">
|
||
<h4 id="org67ab117"><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="#org48818a7">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="org48818a7" 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="#org6a5a818">70</a>.
|
||
</p>
|
||
|
||
<p>
|
||
They are all superimposed except for the LEG7.
|
||
</p>
|
||
|
||
|
||
<div id="org6a5a818" 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-org5504ed7" class="outline-4">
|
||
<h4 id="org5504ed7"><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="#org37747a8">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="org37747a8" 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="#org8fe6475">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="org8fe6475" 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-org68dbf65" class="outline-2">
|
||
<h2 id="org68dbf65"><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-orga0c30a2" class="outline-3">
|
||
<h3 id="orga0c30a2"><span class="section-number-3">5.1</span> Introduction</h3>
|
||
<div class="outline-text-3" id="text-5-1">
|
||
<p>
|
||
A simscape model (Figure <a href="#org91eb129">73</a>) of the measurement bench is used.
|
||
</p>
|
||
|
||
|
||
<div id="org91eb129" class="figure">
|
||
<p><img src="figs/model_bench_apa.png" alt="model_bench_apa.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 73: </span>Screenshot of the Simscape model</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgb07d953" class="outline-3">
|
||
<h3 id="orgb07d953"><span class="section-number-3">5.2</span> First Identification</h3>
|
||
<div class="outline-text-3" id="text-5-2">
|
||
<p>
|
||
The APA is first initialized with default parameters and the transfer function from excitation voltage \(V_a\) (before the amplification of 20 due to the PD200 amplifier) to the sensor stack voltage \(V_s\), encoder \(d_L\) and interferometer \(z\) is identified.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
n_hexapod.actuator = initializeAPA(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
<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>
|
||
|
||
<p>
|
||
The obtain dynamics are shown in Figure <a href="#org273ea78">74</a> and <a href="#org5e31b99">75</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org273ea78" class="figure">
|
||
<p><img src="figs/apa_model_bench_bode_vs.png" alt="apa_model_bench_bode_vs.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 74: </span>Bode plot of the transfer function from \(V_a\) to \(V_s\)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org5e31b99" class="figure">
|
||
<p><img src="figs/apa_model_bench_bode_dl_z.png" alt="apa_model_bench_bode_dl_z.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 75: </span>Bode plot of the transfer function from \(V_a\) to \(d_L\) and to \(z\)</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div id="outline-container-org9b0e1d7" class="outline-3">
|
||
<h3 id="org9b0e1d7"><span class="section-number-3">5.3</span> Identify Sensor/Actuator constants and compare with measured FRF</h3>
|
||
<div class="outline-text-3" id="text-5-3">
|
||
</div>
|
||
<div id="outline-container-org63f9c2b" class="outline-4">
|
||
<h4 id="org63f9c2b"><span class="section-number-4">5.3.1</span> How to identify these constants?</h4>
|
||
<div class="outline-text-4" id="text-5-3-1">
|
||
</div>
|
||
<div id="outline-container-org318c56a" class="outline-5">
|
||
<h5 id="org318c56a"><span class="section-number-5">5.3.1.1</span> Piezoelectric Actuator Constant</h5>
|
||
<div class="outline-text-5" id="text-5-3-1-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\).
|
||
</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-org349f168" class="outline-5">
|
||
<h5 id="org349f168"><span class="section-number-5">5.3.1.2</span> Piezoelectric Sensor Constant</h5>
|
||
<div class="outline-text-5" id="text-5-3-1-2">
|
||
<p>
|
||
Similarly, it is easy to determine the gain from the excitation voltage \(V_a\) to the voltage generated by the sensor stack \(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.
|
||
</p>
|
||
|
||
<p>
|
||
The gain can be computed from the dynamical identification and taking the gain at the wanted frequency (above the first resonance).
|
||
</p>
|
||
|
||
<p>
|
||
Using the simscape model, compute the gain at the same frequency 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 “sensor” constant 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}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org81e9990" class="outline-4">
|
||
<h4 id="org81e9990"><span class="section-number-4">5.3.2</span> Identification Data</h4>
|
||
<div class="outline-text-4" id="text-5-3-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">leg_sweep = load(sprintf(<span class="org-string">'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">'de'</span>, <span class="org-string">'da'</span>);
|
||
leg_noise_hf = load(sprintf(<span class="org-string">'frf_data_%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 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 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 class="org-src-container">
|
||
<pre class="src src-matlab">freqs = 2<span class="org-type">*</span>logspace(0, 3, 1000);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgfdc554b" class="outline-4">
|
||
<h4 id="orgfdc554b"><span class="section-number-4">5.3.3</span> 2DoF APA</h4>
|
||
<div class="outline-text-4" id="text-5-3-3">
|
||
</div>
|
||
<div id="outline-container-org32f7dc8" class="outline-5">
|
||
<h5 id="org32f7dc8"><span class="section-number-5">5.3.3.1</span> 2DoF APA</h5>
|
||
<div class="outline-text-5" id="text-5-3-3-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator = initializeAPA(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>, <span class="org-string">'ga'</span>, 1, <span class="org-string">'gs'</span>, 1);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgea0c877" class="outline-5">
|
||
<h5 id="orgea0c877"><span class="section-number-5">5.3.3.2</span> Identification without actuator or sensor constants</h5>
|
||
<div class="outline-text-5" id="text-5-3-3-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><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">%% Identification</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-org1ddf1a6" class="outline-5">
|
||
<h5 id="org1ddf1a6"><span class="section-number-5">5.3.3.3</span> Actuator Constant</h5>
|
||
<div class="outline-text-5" id="text-5-3-3-3">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">ga = <span class="org-type">-</span>mean(abs(dvf_sweep(f<span class="org-type">></span>10 <span class="org-type">&</span> f<span class="org-type"><</span>20)))<span class="org-type">./</span>dcgain(Gs(<span class="org-string">'dL'</span>, <span class="org-string">'Va'</span>)); <span class="org-comment">% [N/V]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<pre class="example">
|
||
ga = -46.4 [N/V]
|
||
</pre>
|
||
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>ga; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd50f62e" class="outline-5">
|
||
<h5 id="orgd50f62e"><span class="section-number-5">5.3.3.4</span> Sensor Constant</h5>
|
||
<div class="outline-text-5" id="text-5-3-3-4">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">gs = <span class="org-type">-</span>mean(abs(iff_sweep(f<span class="org-type">></span>400 <span class="org-type">&</span> f<span class="org-type"><</span>500)))<span class="org-type">./</span>(ga<span class="org-type">*</span>abs(squeeze(freqresp(Gs(<span class="org-string">'Vs'</span>, <span class="org-string">'Va'</span>), 1e3, <span class="org-string">'Hz'</span>)))); <span class="org-comment">% [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<pre class="example">
|
||
gs = 0.098 [V/m]
|
||
</pre>
|
||
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>gs; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd73f8df" class="outline-5">
|
||
<h5 id="orgd73f8df"><span class="section-number-5">5.3.3.5</span> Comparison</h5>
|
||
<div class="outline-text-5" id="text-5-3-3-5">
|
||
<p>
|
||
Identify the dynamics with included constants.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Gs = linearize(mdl, io, 0.0, options);
|
||
Gs = Gs<span class="org-type">*</span>exp(<span class="org-type">-</span>Ts<span class="org-type">*</span>s);
|
||
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 id="orgad4fec7" class="figure">
|
||
<p><img src="figs/apa_act_constant_comp.png" alt="apa_act_constant_comp.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 76: </span>Comparison of the experimental data and Simscape model (\(V_a\) to \(d_e\))</p>
|
||
</div>
|
||
|
||
|
||
<div id="org1690e01" class="figure">
|
||
<p><img src="figs/apa_sens_constant_comp.png" alt="apa_sens_constant_comp.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 77: </span>Comparison of the experimental data and Simscape model (\(V_a\) to \(V_s\))</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgc1a2c68" class="outline-4">
|
||
<h4 id="orgc1a2c68"><span class="section-number-4">5.3.4</span> Flexible APA</h4>
|
||
<div class="outline-text-4" id="text-5-3-4">
|
||
</div>
|
||
<div id="outline-container-org8cbedfb" class="outline-5">
|
||
<h5 id="org8cbedfb"><span class="section-number-5">5.3.4.1</span> Flexible APA</h5>
|
||
<div class="outline-text-5" id="text-5-3-4-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator = initializeAPA(<span class="org-string">'type'</span>, <span class="org-string">'flexible'</span>, <span class="org-string">'ga'</span>, 1, <span class="org-string">'gs'</span>, 1);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgdc5fbcd" class="outline-5">
|
||
<h5 id="orgdc5fbcd"><span class="section-number-5">5.3.4.2</span> Identification without actuator or sensor constants</h5>
|
||
<div class="outline-text-5" id="text-5-3-4-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">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-org8e59668" class="outline-5">
|
||
<h5 id="org8e59668"><span class="section-number-5">5.3.4.3</span> Actuator Constant</h5>
|
||
<div class="outline-text-5" id="text-5-3-4-3">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">ga = <span class="org-type">-</span>mean(abs(dvf_sweep(f<span class="org-type">></span>10 <span class="org-type">&</span> f<span class="org-type"><</span>20)))<span class="org-type">./</span>dcgain(Gs(<span class="org-string">'dL'</span>, <span class="org-string">'Va'</span>)); <span class="org-comment">% [N/V]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<pre class="example">
|
||
ga = 23.4 [N/V]
|
||
</pre>
|
||
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator.Ga = ones(6,1)<span class="org-type">*</span>ga; <span class="org-comment">% Actuator gain [N/V]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org9d8c201" class="outline-5">
|
||
<h5 id="org9d8c201"><span class="section-number-5">5.3.4.4</span> Sensor Constant</h5>
|
||
<div class="outline-text-5" id="text-5-3-4-4">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">gs = <span class="org-type">-</span>mean(abs(iff_sweep(f<span class="org-type">></span>400 <span class="org-type">&</span> f<span class="org-type"><</span>500)))<span class="org-type">./</span>(ga<span class="org-type">*</span>abs(squeeze(freqresp(Gs(<span class="org-string">'Vs'</span>, <span class="org-string">'Va'</span>), 1e3, <span class="org-string">'Hz'</span>)))); <span class="org-comment">% [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
|
||
<pre class="example">
|
||
gs = -4674824.519 [V/m]
|
||
</pre>
|
||
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator.Gs = ones(6,1)<span class="org-type">*</span>gs; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgfb038cd" class="outline-5">
|
||
<h5 id="orgfb038cd"><span class="section-number-5">5.3.4.5</span> Comparison</h5>
|
||
<div class="outline-text-5" id="text-5-3-4-5">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Gs = linearize(mdl, io, 0.0, options);
|
||
Gs = Gs<span class="org-type">*</span>exp(<span class="org-type">-</span>Ts<span class="org-type">*</span>s);
|
||
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 id="orge006427" class="figure">
|
||
<p><img src="figs/apa_act_constant_comp_flex.png" alt="apa_act_constant_comp_flex.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 78: </span>Comparison of the experimental data and Simscape model (\(V_a\) to \(d_e\))</p>
|
||
</div>
|
||
|
||
|
||
<div id="org3ec005f" class="figure">
|
||
<p><img src="figs/apa_sens_constant_comp_flex.png" alt="apa_sens_constant_comp_flex.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 79: </span>Comparison of the experimental data and Simscape model (\(V_a\) to \(V_s\))</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org1a9f953" class="outline-3">
|
||
<h3 id="org1a9f953"><span class="section-number-3">5.4</span> Compare 2-DoF with flexible</h3>
|
||
<div class="outline-text-3" id="text-5-4">
|
||
<p>
|
||
APA - 2 DoF
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator = initializeAPA(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
|
||
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>
|
||
|
||
<p>
|
||
APA - Fully Flexible
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.actuator = initializeAPA(<span class="org-string">'type'</span>, <span class="org-string">'flexible'</span>);
|
||
|
||
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>
|
||
|
||
<p>
|
||
Comparison
|
||
</p>
|
||
|
||
<div id="org2e0f8c7" class="figure">
|
||
<p><img src="figs/apa_effect_joint_comp_vs.png" alt="apa_effect_joint_comp_vs.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 80: </span>Effect of the joint’s flexibility on the transfer function from \(V_a\) to \(V_s\)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org88800f9" class="figure">
|
||
<p><img src="figs/apa_effect_joint_comp_dl.png" alt="apa_effect_joint_comp_dl.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 81: </span>Effect of the joint’s flexibility on the transfer function from \(V_a\) to \(d_L\) (encoder)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org33a40bf" class="figure">
|
||
<p><img src="figs/apa_effect_joint_comp_z.png" alt="apa_effect_joint_comp_z.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 82: </span>Effect of the joint’s flexibility on the transfer function from \(V_a\) to \(z\) (interferometer)</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org775c361" class="outline-2">
|
||
<h2 id="org775c361"><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-orge8ef694" class="outline-3">
|
||
<h3 id="orge8ef694"><span class="section-number-3">6.1</span> Introduction</h3>
|
||
</div>
|
||
<div id="outline-container-org231b6f9" class="outline-3">
|
||
<h3 id="org231b6f9"><span class="section-number-3">6.2</span> First Identification</h3>
|
||
<div class="outline-text-3" id="text-6-2">
|
||
<p>
|
||
The object containing all the data is created.
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
n_hexapod.flex_bot = initializeBotFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
n_hexapod.flex_top = initializeTopFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
n_hexapod.actuator = initializeAPA(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><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>
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><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 id="orgcb738e0" class="figure">
|
||
<p><img src="figs/strut_bench_model_iff_bode.png" alt="strut_bench_model_iff_bode.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 83: </span>Identified transfer function from \(V_a\) to \(V_s\)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org886ffa6" class="figure">
|
||
<p><img src="figs/strut_bench_model_dvf_bode.png" alt="strut_bench_model_dvf_bode.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 84: </span>Identified transfer function from \(V_a\) to \(d_L\)</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org1b3669c" class="outline-3">
|
||
<h3 id="org1b3669c"><span class="section-number-3">6.3</span> Effect of flexible joints</h3>
|
||
<div class="outline-text-3" id="text-6-3">
|
||
<p>
|
||
Perfect
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot = initializeBotFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
n_hexapod.flex_top = initializeTopFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'3dof'</span>);
|
||
|
||
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>
|
||
|
||
<p>
|
||
Top Flexible
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot = initializeBotFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
n_hexapod.flex_top = initializeTopFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'4dof'</span>);
|
||
|
||
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>
|
||
|
||
<p>
|
||
Bottom Flexible
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot = initializeBotFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'4dof'</span>);
|
||
n_hexapod.flex_top = initializeTopFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'3dof'</span>);
|
||
|
||
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>
|
||
|
||
<p>
|
||
Both Flexible
|
||
</p>
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod.flex_bot = initializeBotFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'4dof'</span>);
|
||
n_hexapod.flex_top = initializeTopFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'4dof'</span>);
|
||
|
||
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>
|
||
|
||
<p>
|
||
Comparison in Figures <a href="#org31b1c24">85</a>, <a href="#org9ec66a9">86</a> and <a href="#org2c9c9b1">87</a>.
|
||
</p>
|
||
|
||
|
||
<div id="org31b1c24" class="figure">
|
||
<p><img src="figs/strut_effect_joint_comp_vs.png" alt="strut_effect_joint_comp_vs.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 85: </span>Effect of the joint’s flexibility on the transfer function from \(V_a\) to \(V_s\)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org9ec66a9" class="figure">
|
||
<p><img src="figs/strut_effect_joint_comp_dl.png" alt="strut_effect_joint_comp_dl.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 86: </span>Effect of the joint’s flexibility on the transfer function from \(V_a\) to \(d_L\) (encoder)</p>
|
||
</div>
|
||
|
||
|
||
<div id="org2c9c9b1" class="figure">
|
||
<p><img src="figs/strut_effect_joint_comp_z.png" alt="strut_effect_joint_comp_z.png" />
|
||
</p>
|
||
<p><span class="figure-number">Figure 87: </span>Effect of the joint’s flexibility on the transfer function from \(V_a\) to \(z\) (interferometer)</p>
|
||
</div>
|
||
|
||
<div class="important" id="orgd4448b5">
|
||
<p>
|
||
Imperfection of the flexible joints has the largest impact on the transfer function from \(V_a\) to \(d_L\).
|
||
However, it has relatively small impact on the transfer functions from \(V_a\) to \(V_s\) and to \(z\).
|
||
</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org87c3950" class="outline-3">
|
||
<h3 id="org87c3950"><span class="section-number-3">6.4</span> Integral Force Feedback</h3>
|
||
<div class="outline-text-3" id="text-6-4">
|
||
</div>
|
||
<div id="outline-container-org90d414c" class="outline-4">
|
||
<h4 id="org90d414c"><span class="section-number-4">6.4.1</span> Initialize the system</h4>
|
||
<div class="outline-text-4" id="text-6-4-1">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">n_hexapod = struct();
|
||
n_hexapod.flex_bot = initializeBotFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
n_hexapod.flex_top = initializeTopFlexibleJoint(<span class="org-string">'type'</span>, <span class="org-string">'3dof'</span>);
|
||
n_hexapod.actuator = initializeAPA(<span class="org-string">'type'</span>, <span class="org-string">'2dof'</span>);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org591d954" class="outline-4">
|
||
<h4 id="org591d954"><span class="section-number-4">6.4.2</span> Plant Identification</h4>
|
||
<div class="outline-text-4" id="text-6-4-2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">G = linearize(mdl, io, 0.0, options);
|
||
G.InputName = {<span class="org-string">'Va'</span>};
|
||
G.OutputName = {<span class="org-string">'Vs'</span>, <span class="org-string">'dL'</span>, <span class="org-string">'z'</span>};
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">Giff = G(<span class="org-string">'Vs'</span>, <span class="org-string">'Va'</span>);
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org3ff5498" class="outline-4">
|
||
<h4 id="org3ff5498"><span class="section-number-4">6.4.3</span> Root Locus</h4>
|
||
<div class="outline-text-4" id="text-6-4-3">
|
||
\begin{equation}
|
||
K_{\text{IFF}} = \frac{g}{s + \omega_c}
|
||
\end{equation}
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">wc = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>20;
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org40c7260" class="outline-2">
|
||
<h2 id="org40c7260"><span class="section-number-2">7</span> Function</h2>
|
||
<div class="outline-text-2" id="text-7">
|
||
</div>
|
||
<div id="outline-container-org43aec14" class="outline-3">
|
||
<h3 id="org43aec14"><span class="section-number-3">7.1</span> <code>initializeBotFlexibleJoint</code> - Initialize Flexible Joint</h3>
|
||
<div class="outline-text-3" id="text-7-1">
|
||
<p>
|
||
<a id="org421db23"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-org64ba6e7" class="outline-4">
|
||
<h4 id="org64ba6e7">Function description</h4>
|
||
<div class="outline-text-4" id="text-org64ba6e7">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[flex_bot]</span> = <span class="org-function-name">initializeBotFlexibleJoint</span>(<span class="org-variable-name">args</span>)
|
||
<span class="org-comment">% initializeBotFlexibleJoint -</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Syntax: [flex_bot] = initializeBotFlexibleJoint(args)</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Inputs:</span>
|
||
<span class="org-comment">% - args -</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Outputs:</span>
|
||
<span class="org-comment">% - flex_bot -</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org46ecfe2" class="outline-4">
|
||
<h4 id="org46ecfe2">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-org46ecfe2">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||
<span class="org-variable-name">args</span>.type char {mustBeMember(args.type,{<span class="org-string">'2dof'</span>, <span class="org-string">'3dof'</span>, <span class="org-string">'4dof'</span>})} = <span class="org-string">'2dof'</span>
|
||
|
||
<span class="org-variable-name">args</span>.kRx (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>5
|
||
<span class="org-variable-name">args</span>.kRy (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>5
|
||
<span class="org-variable-name">args</span>.kRz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>260
|
||
<span class="org-variable-name">args</span>.kz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>1e8
|
||
|
||
<span class="org-variable-name">args</span>.cRx (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>0.1
|
||
<span class="org-variable-name">args</span>.cRy (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>0.1
|
||
<span class="org-variable-name">args</span>.cRz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>0.1
|
||
<span class="org-variable-name">args</span>.cz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>1e2
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org86fdbcc" class="outline-4">
|
||
<h4 id="org86fdbcc">Initialize the structure</h4>
|
||
<div class="outline-text-4" id="text-org86fdbcc">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">flex_bot = struct();
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org2f488a6" class="outline-4">
|
||
<h4 id="org2f488a6">Set the Joint’s type</h4>
|
||
<div class="outline-text-4" id="text-org2f488a6">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'2dof'</span>
|
||
flex_bot.type = 1;
|
||
<span class="org-keyword">case</span> <span class="org-string">'3dof'</span>
|
||
flex_bot.type = 2;
|
||
<span class="org-keyword">case</span> <span class="org-string">'4dof'</span>
|
||
flex_bot.type = 3;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orge38a4da" class="outline-4">
|
||
<h4 id="orge38a4da">Set parameters</h4>
|
||
<div class="outline-text-4" id="text-orge38a4da">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">flex_bot.kRx = args.kRx;
|
||
flex_bot.kRy = args.kRy;
|
||
flex_bot.kRz = args.kRz;
|
||
flex_bot.kz = args.kz;
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">flex_bot.cRx = args.cRx;
|
||
flex_bot.cRy = args.cRy;
|
||
flex_bot.cRz = args.cRz;
|
||
flex_bot.cz = args.cz;
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org01e3d85" class="outline-3">
|
||
<h3 id="org01e3d85"><span class="section-number-3">7.2</span> <code>initializeTopFlexibleJoint</code> - Initialize Flexible Joint</h3>
|
||
<div class="outline-text-3" id="text-7-2">
|
||
<p>
|
||
<a id="orgebb041e"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-org48c7146" class="outline-4">
|
||
<h4 id="org48c7146">Function description</h4>
|
||
<div class="outline-text-4" id="text-org48c7146">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[flex_top]</span> = <span class="org-function-name">initializeTopFlexibleJoint</span>(<span class="org-variable-name">args</span>)
|
||
<span class="org-comment">% initializeTopFlexibleJoint -</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Syntax: [flex_top] = initializeTopFlexibleJoint(args)</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Inputs:</span>
|
||
<span class="org-comment">% - args -</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Outputs:</span>
|
||
<span class="org-comment">% - flex_top -</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org0e94625" class="outline-4">
|
||
<h4 id="org0e94625">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-org0e94625">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||
<span class="org-variable-name">args</span>.type char {mustBeMember(args.type,{<span class="org-string">'2dof'</span>, <span class="org-string">'3dof'</span>, <span class="org-string">'4dof'</span>})} = <span class="org-string">'2dof'</span>
|
||
|
||
<span class="org-variable-name">args</span>.kRx (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>5
|
||
<span class="org-variable-name">args</span>.kRy (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>5
|
||
<span class="org-variable-name">args</span>.kRz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>260
|
||
<span class="org-variable-name">args</span>.kz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>1e8
|
||
|
||
<span class="org-variable-name">args</span>.cRx (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>0.1
|
||
<span class="org-variable-name">args</span>.cRy (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>0.1
|
||
<span class="org-variable-name">args</span>.cRz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>0.1
|
||
<span class="org-variable-name">args</span>.cz (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>1e2
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgfdfb9e0" class="outline-4">
|
||
<h4 id="orgfdfb9e0">Initialize the structure</h4>
|
||
<div class="outline-text-4" id="text-orgfdfb9e0">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">flex_top = struct();
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org5c18e2e" class="outline-4">
|
||
<h4 id="org5c18e2e">Set the Joint’s type</h4>
|
||
<div class="outline-text-4" id="text-org5c18e2e">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'2dof'</span>
|
||
flex_top.type = 1;
|
||
<span class="org-keyword">case</span> <span class="org-string">'3dof'</span>
|
||
flex_top.type = 2;
|
||
<span class="org-keyword">case</span> <span class="org-string">'4dof'</span>
|
||
flex_top.type = 3;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org417dc16" class="outline-4">
|
||
<h4 id="org417dc16">Set parameters</h4>
|
||
<div class="outline-text-4" id="text-org417dc16">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">flex_top.kRx = args.kRx;
|
||
flex_top.kRy = args.kRy;
|
||
flex_top.kRz = args.kRz;
|
||
flex_top.kz = args.kz;
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">flex_top.cRx = args.cRx;
|
||
flex_top.cRy = args.cRy;
|
||
flex_top.cRz = args.cRz;
|
||
flex_top.cz = args.cz;
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgbc6b222" class="outline-3">
|
||
<h3 id="orgbc6b222"><span class="section-number-3">7.3</span> <code>initializeAPA</code> - Initialize APA</h3>
|
||
<div class="outline-text-3" id="text-7-3">
|
||
<p>
|
||
<a id="org67a611d"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-org56ea289" class="outline-4">
|
||
<h4 id="org56ea289">Function description</h4>
|
||
<div class="outline-text-4" id="text-org56ea289">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">function</span> <span class="org-variable-name">[actuator]</span> = <span class="org-function-name">initializeAPA</span>(<span class="org-variable-name">args</span>)
|
||
<span class="org-comment">% initializeAPA -</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Syntax: [actuator] = initializeAPA(args)</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Inputs:</span>
|
||
<span class="org-comment">% - args -</span>
|
||
<span class="org-comment">%</span>
|
||
<span class="org-comment">% Outputs:</span>
|
||
<span class="org-comment">% - actuator -</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org5770aae" class="outline-4">
|
||
<h4 id="org5770aae">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-org5770aae">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">arguments</span>
|
||
<span class="org-variable-name">args</span>.type char {mustBeMember(args.type,{<span class="org-string">'2dof'</span>, <span class="org-string">'flexible frame'</span>, <span class="org-string">'flexible'</span>})} = <span class="org-string">'2dof'</span>
|
||
|
||
<span class="org-variable-name">args</span>.Ga (1,1) double {mustBeNumeric} = 0
|
||
<span class="org-variable-name">args</span>.Gs (1,1) double {mustBeNumeric} = 0
|
||
|
||
<span class="org-comment">% For 2DoF</span>
|
||
<span class="org-variable-name">args</span>.k (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>0.35e6
|
||
<span class="org-variable-name">args</span>.ke (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>1.5e6
|
||
<span class="org-variable-name">args</span>.ka (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>43e6
|
||
|
||
<span class="org-variable-name">args</span>.c (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>3e1
|
||
<span class="org-variable-name">args</span>.ce (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>2e1
|
||
<span class="org-variable-name">args</span>.ca (6,1) double {mustBeNumeric, mustBePositive} = ones(6,1)<span class="org-type">*</span>2e1
|
||
|
||
<span class="org-variable-name">args</span>.Leq (6,1) double {mustBeNumeric} = ones(6,1)<span class="org-type">*</span>0.056
|
||
|
||
<span class="org-comment">% Force Flexible APA</span>
|
||
<span class="org-variable-name">args</span>.xi (1,1) double {mustBeNumeric, mustBePositive} = 0.5
|
||
|
||
<span class="org-comment">% For Flexible Frame</span>
|
||
<span class="org-variable-name">args</span>.ks (1,1) double {mustBeNumeric, mustBePositive} = 235e6
|
||
<span class="org-variable-name">args</span>.cs (1,1) double {mustBeNumeric, mustBePositive} = 1e1
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org01625cc" class="outline-4">
|
||
<h4 id="org01625cc">Initialize Structure</h4>
|
||
<div class="outline-text-4" id="text-org01625cc">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">actuator = struct();
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orge4e4b61" class="outline-4">
|
||
<h4 id="orge4e4b61">Type</h4>
|
||
<div class="outline-text-4" id="text-orge4e4b61">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'2dof'</span>
|
||
actuator.type = 1;
|
||
<span class="org-keyword">case</span> <span class="org-string">'flexible frame'</span>
|
||
actuator.type = 2;
|
||
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
|
||
actuator.type = 3;
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org481c03c" class="outline-4">
|
||
<h4 id="org481c03c">Actuator/Sensor Constants</h4>
|
||
<div class="outline-text-4" id="text-org481c03c">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">if</span> args.Ga <span class="org-type">==</span> 0
|
||
<span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'2dof'</span>
|
||
actuator.Ga = <span class="org-type">-</span>46.4;
|
||
<span class="org-keyword">case</span> <span class="org-string">'flexible frame'</span>
|
||
actuator.Ga = 1; <span class="org-comment">% TODO</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
|
||
actuator.Ga = 23.4;
|
||
<span class="org-keyword">end</span>
|
||
<span class="org-keyword">else</span>
|
||
actuator.Ga = args.Ga; <span class="org-comment">% Actuator gain [N/V]</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> args.Gs <span class="org-type">==</span> 0
|
||
<span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'2dof'</span>
|
||
actuator.Gs = 0.098;
|
||
<span class="org-keyword">case</span> <span class="org-string">'flexible frame'</span>
|
||
actuator.Gs = 1; <span class="org-comment">% TODO</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
|
||
actuator.Gs = <span class="org-type">-</span>4674824;
|
||
<span class="org-keyword">end</span>
|
||
<span class="org-keyword">else</span>
|
||
actuator.Gs = args.Gs; <span class="org-comment">% Sensor gain [V/m]</span>
|
||
<span class="org-keyword">end</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org7f72aef" class="outline-4">
|
||
<h4 id="org7f72aef">2DoF parameters</h4>
|
||
<div class="outline-text-4" id="text-org7f72aef">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab">actuator.k = args.k; <span class="org-comment">% [N/m]</span>
|
||
actuator.ke = args.ke; <span class="org-comment">% [N/m]</span>
|
||
actuator.ka = args.ka; <span class="org-comment">% [N/m]</span>
|
||
|
||
actuator.c = args.c; <span class="org-comment">% [N/(m/s)]</span>
|
||
actuator.ce = args.ce; <span class="org-comment">% [N/(m/s)]</span>
|
||
actuator.ca = args.ca; <span class="org-comment">% [N/(m/s)]</span>
|
||
|
||
actuator.Leq = args.Leq; <span class="org-comment">% [m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-orgc70d616" class="outline-4">
|
||
<h4 id="orgc70d616">Flexible frame and fully flexible</h4>
|
||
<div class="outline-text-4" id="text-orgc70d616">
|
||
<div class="org-src-container">
|
||
<pre class="src src-matlab"><span class="org-keyword">switch</span> <span class="org-constant">args.type</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'flexible frame'</span>
|
||
actuator.K = readmatrix(<span class="org-string">'APA300ML_b_mat_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
|
||
actuator.M = readmatrix(<span class="org-string">'APA300ML_b_mat_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
|
||
actuator.P = extractNodes(<span class="org-string">'APA300ML_b_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordinates [m]</span>
|
||
<span class="org-keyword">case</span> <span class="org-string">'flexible'</span>
|
||
actuator.K = readmatrix(<span class="org-string">'full_APA300ML_K.CSV'</span>); <span class="org-comment">% Stiffness Matrix</span>
|
||
actuator.M = readmatrix(<span class="org-string">'full_APA300ML_M.CSV'</span>); <span class="org-comment">% Mass Matrix</span>
|
||
actuator.P = extractNodes(<span class="org-string">'full_APA300ML_out_nodes_3D.txt'</span>); <span class="org-comment">% Node coordiantes [m]</span>
|
||
<span class="org-keyword">end</span>
|
||
|
||
actuator.xi = args.xi; <span class="org-comment">% Damping ratio</span>
|
||
|
||
actuator.ks = args.ks; <span class="org-comment">% Stiffness of one stack [N/m]</span>
|
||
actuator.cs = args.cs; <span class="org-comment">% Damping of one stack [N/m]</span>
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outline-container-org284d55c" class="outline-3">
|
||
<h3 id="org284d55c"><span class="section-number-3">7.4</span> <code>generateSweepExc</code>: Generate sweep sinus excitation</h3>
|
||
<div class="outline-text-3" id="text-7-4">
|
||
<p>
|
||
<a id="orgbbb9bd4"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-orgca69a5c" class="outline-4">
|
||
<h4 id="orgca69a5c">Function description</h4>
|
||
<div class="outline-text-4" id="text-orgca69a5c">
|
||
<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-org0ca3633" class="outline-4">
|
||
<h4 id="org0ca3633">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-org0ca3633">
|
||
<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-org74c56d9" class="outline-4">
|
||
<h4 id="org74c56d9">Sweep Sine part</h4>
|
||
<div class="outline-text-4" id="text-org74c56d9">
|
||
<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-org682577a" class="outline-4">
|
||
<h4 id="org682577a">Smooth Ends</h4>
|
||
<div class="outline-text-4" id="text-org682577a">
|
||
<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-orgf360e11" class="outline-4">
|
||
<h4 id="orgf360e11">Combine Excitation signals</h4>
|
||
<div class="outline-text-4" id="text-orgf360e11">
|
||
<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-orga491d48" class="outline-3">
|
||
<h3 id="orga491d48"><span class="section-number-3">7.5</span> <code>generateShapedNoise</code>: Generate Shaped Noise excitation</h3>
|
||
<div class="outline-text-3" id="text-7-5">
|
||
<p>
|
||
<a id="org9cee915"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-org0891d6e" class="outline-4">
|
||
<h4 id="org0891d6e">Function description</h4>
|
||
<div class="outline-text-4" id="text-org0891d6e">
|
||
<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-orgfb39e43" class="outline-4">
|
||
<h4 id="orgfb39e43">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-orgfb39e43">
|
||
<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-orgd420b2f" class="outline-4">
|
||
<h4 id="orgd420b2f">Shaped Noise</h4>
|
||
<div class="outline-text-4" id="text-orgd420b2f">
|
||
<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-org98a287f" class="outline-4">
|
||
<h4 id="org98a287f">Smooth Ends</h4>
|
||
<div class="outline-text-4" id="text-org98a287f">
|
||
<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-org9c19166" class="outline-4">
|
||
<h4 id="org9c19166">Combine Excitation signals</h4>
|
||
<div class="outline-text-4" id="text-org9c19166">
|
||
<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-org2034782" class="outline-3">
|
||
<h3 id="org2034782"><span class="section-number-3">7.6</span> <code>generateSinIncreasingAmpl</code>: Generate Sinus with increasing amplitude</h3>
|
||
<div class="outline-text-3" id="text-7-6">
|
||
<p>
|
||
<a id="org2866af5"></a>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="outline-container-orgd080133" class="outline-4">
|
||
<h4 id="orgd080133">Function description</h4>
|
||
<div class="outline-text-4" id="text-orgd080133">
|
||
<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-org3500f46" class="outline-4">
|
||
<h4 id="org3500f46">Optional Parameters</h4>
|
||
<div class="outline-text-4" id="text-org3500f46">
|
||
<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-org4ff8a78" class="outline-4">
|
||
<h4 id="org4ff8a78">Sinus excitation</h4>
|
||
<div class="outline-text-4" id="text-org4ff8a78">
|
||
<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-org7298c9b" class="outline-4">
|
||
<h4 id="org7298c9b">Smooth Ends</h4>
|
||
<div class="outline-text-4" id="text-org7298c9b">
|
||
<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-org77dedfe" class="outline-4">
|
||
<h4 id="org77dedfe">Combine Excitation signals</h4>
|
||
<div class="outline-text-4" id="text-org77dedfe">
|
||
<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-07 lun. 18:42</p>
|
||
</div>
|
||
</body>
|
||
</html>
|