Analysis of IFF closed loop measurements

This commit is contained in:
Thomas Dehaeze 2021-06-10 17:52:16 +02:00
parent 21abe53df0
commit 597ec7551f
15 changed files with 625 additions and 72 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

@ -1 +1 @@
Subproject commit ef7d7a54d507b329d9bf23f1a3495ed7d5618a2d
Subproject commit 571dfbffb4be7f2cf1c061feff1e6140aa2c808c

View File

@ -3,7 +3,7 @@
"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-09 mer. 18:13 -->
<!-- 2021-06-10 jeu. 17:52 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Nano-Hexapod - Test Bench</title>
<meta name="author" content="Dehaeze Thomas" />
@ -39,33 +39,47 @@
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgd5a3ff2">1. Encoders fixed to the Struts</a>
<li><a href="#org8cdd071">1. Encoders fixed to the Struts</a>
<ul>
<li><a href="#orgaaf36d1">1.1. Introduction</a></li>
<li><a href="#org4eac0e4">1.2. Identification of the dynamics</a>
<li><a href="#org3d72b93">1.1. Introduction</a></li>
<li><a href="#orgcb16db3">1.2. Identification of the dynamics</a>
<ul>
<li><a href="#orge7631cb">1.2.1. Load Data</a></li>
<li><a href="#org3d8f0db">1.2.2. Spectral Analysis - Setup</a></li>
<li><a href="#orgfe475e0">1.2.3. DVF Plant</a></li>
<li><a href="#org9c55cb0">1.2.4. IFF Plant</a></li>
<li><a href="#org7810966">1.2.1. Load Data</a></li>
<li><a href="#orge39bc92">1.2.2. Spectral Analysis - Setup</a></li>
<li><a href="#orge971c61">1.2.3. DVF Plant</a></li>
<li><a href="#orgfe174fa">1.2.4. IFF Plant</a></li>
</ul>
</li>
<li><a href="#orgb32a800">1.3. Comparison with the Simscape Model</a>
<li><a href="#orgaa25438">1.3. Comparison with the Simscape Model</a>
<ul>
<li><a href="#org49d6b51">1.3.1. Dynamics from Actuator to Force Sensors</a></li>
<li><a href="#org68f8e6c">1.3.2. Dynamics from Actuator to Encoder</a></li>
<li><a href="#org8c6e670">1.3.1. Dynamics from Actuator to Force Sensors</a></li>
<li><a href="#orgb40c194">1.3.2. Dynamics from Actuator to Encoder</a></li>
</ul>
</li>
<li><a href="#orge6221eb">1.4. Integral Force Feedback</a>
<li><a href="#org07b83f4">1.4. Integral Force Feedback</a>
<ul>
<li><a href="#org1ccd985">1.4.1. Root Locus and Decentralized Loop gain</a></li>
<li><a href="#orgd6bc33c">1.4.2. Multiple Gains - Simulation</a></li>
<li><a href="#orgcbdb9eb">1.4.3. Experimental Results</a></li>
<li><a href="#org32df075">1.4.1. Root Locus and Decentralized Loop gain</a></li>
<li><a href="#orge5e9cea">1.4.2. Multiple Gains - Simulation</a></li>
<li><a href="#orga581915">1.4.3. Experimental Results - Gains</a>
<ul>
<li><a href="#org7089ea1">1.4.3.1. Load Data</a></li>
<li><a href="#org54efadb">1.4.3.2. Spectral Analysis - Setup</a></li>
<li><a href="#org5262511">1.4.3.3. DVF Plant</a></li>
<li><a href="#org47db15b">1.4.3.4. Experimental Results - Comparison of the un-damped and fully damped system</a></li>
</ul>
</li>
<li><a href="#orgd48530e">1.4.4. Experimental Results - Damped Plant with Optimal gain</a>
<ul>
<li><a href="#orgf0af7da">1.4.4.1. Load Data</a></li>
<li><a href="#org1ce1b15">1.4.4.2. Spectral Analysis - Setup</a></li>
<li><a href="#orgac97ace">1.4.4.3. DVF Plant</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org16300e1">2. Encoders fixed to the plates</a></li>
</ul>
</li>
<li><a href="#orgba38b08">2. Encoders fixed to the plates</a></li>
</ul>
</div>
</div>
@ -74,10 +88,10 @@
<hr>
<p>
In this document, the dynamics of the nano-hexapod shown in Figure <a href="#orgcaac3cd">1</a> is identified.
In this document, the dynamics of the nano-hexapod shown in Figure <a href="#org67868f6">1</a> is identified.
</p>
<div class="note" id="org64d5e50">
<div class="note" id="org61a7813">
<p>
Here are the documentation of the equipment used for this test bench:
</p>
@ -92,27 +106,27 @@ Here are the documentation of the equipment used for this test bench:
</div>
<div id="orgcaac3cd" class="figure">
<div id="org67868f6" class="figure">
<p><img src="figs/IMG_20210608_152917.jpg" alt="IMG_20210608_152917.jpg" />
</p>
<p><span class="figure-number">Figure 1: </span>Nano-Hexapod</p>
</div>
<div id="org6004b44" class="figure">
<div id="org492c735" class="figure">
<p><img src="figs/IMG_20210608_154722.jpg" alt="IMG_20210608_154722.jpg" />
</p>
<p><span class="figure-number">Figure 2: </span>Nano-Hexapod and the control electronics</p>
</div>
<div id="orgc32dab5" class="figure">
<div id="orgab57ea9" class="figure">
<p><img src="figs/nano_hexapod_signals.png" alt="nano_hexapod_signals.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Block diagram of the system with named signals</p>
</div>
<table id="orgcb52f65" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org3c0425e" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> List of signals</caption>
<colgroup>
@ -229,12 +243,12 @@ Here are the documentation of the equipment used for this test bench:
</tbody>
</table>
<div id="outline-container-orgd5a3ff2" class="outline-2">
<h2 id="orgd5a3ff2"><span class="section-number-2">1</span> Encoders fixed to the Struts</h2>
<div id="outline-container-org8cdd071" class="outline-2">
<h2 id="org8cdd071"><span class="section-number-2">1</span> Encoders fixed to the Struts</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-orgaaf36d1" class="outline-3">
<h3 id="orgaaf36d1"><span class="section-number-3">1.1</span> Introduction</h3>
<div id="outline-container-org3d72b93" class="outline-3">
<h3 id="org3d72b93"><span class="section-number-3">1.1</span> Introduction</h3>
<div class="outline-text-3" id="text-1-1">
<p>
In this section, the encoders are fixed to the struts.
@ -242,12 +256,12 @@ In this section, the encoders are fixed to the struts.
</div>
</div>
<div id="outline-container-org4eac0e4" class="outline-3">
<h3 id="org4eac0e4"><span class="section-number-3">1.2</span> Identification of the dynamics</h3>
<div id="outline-container-orgcb16db3" class="outline-3">
<h3 id="orgcb16db3"><span class="section-number-3">1.2</span> Identification of the dynamics</h3>
<div class="outline-text-3" id="text-1-2">
</div>
<div id="outline-container-orge7631cb" class="outline-4">
<h4 id="orge7631cb"><span class="section-number-4">1.2.1</span> Load Data</h4>
<div id="outline-container-org7810966" class="outline-4">
<h4 id="org7810966"><span class="section-number-4">1.2.1</span> Load Data</h4>
<div class="outline-text-4" id="text-1-2-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Load Identification Data</span></span>
@ -262,8 +276,8 @@ meas_data_lf = {};
</div>
</div>
<div id="outline-container-org3d8f0db" class="outline-4">
<h4 id="org3d8f0db"><span class="section-number-4">1.2.2</span> Spectral Analysis - Setup</h4>
<div id="outline-container-orge39bc92" class="outline-4">
<h4 id="orge39bc92"><span class="section-number-4">1.2.2</span> Spectral Analysis - Setup</h4>
<div class="outline-text-4" id="text-1-2-2">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Setup useful variables</span></span>
@ -286,11 +300,11 @@ i_hf = f <span class="org-type">&gt;</span> 250; <span class="org-comment">% Poi
</div>
</div>
<div id="outline-container-orgfe475e0" class="outline-4">
<h4 id="orgfe475e0"><span class="section-number-4">1.2.3</span> DVF Plant</h4>
<div id="outline-container-orge971c61" class="outline-4">
<h4 id="orge971c61"><span class="section-number-4">1.2.3</span> DVF Plant</h4>
<div class="outline-text-4" id="text-1-2-3">
<p>
First, let&rsquo;s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#org7027095">4</a>).
First, let&rsquo;s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#orgc8a5209">4</a>).
</p>
<div class="org-src-container">
@ -306,14 +320,14 @@ coh_dvf_hf = zeros(length(f), 6, 6);
</div>
<div id="org7027095" class="figure">
<div id="orgc8a5209" class="figure">
<p><img src="figs/enc_struts_dvf_coh.png" alt="enc_struts_dvf_coh.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Obtained coherence for the DVF plant</p>
</div>
<p>
Then the 6x6 transfer function matrix is estimated (Figure <a href="#orgeda62ff">5</a>).
Then the 6x6 transfer function matrix is estimated (Figure <a href="#orgb9f3fd5">5</a>).
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% DVF Plant (transfer function from u to dLm)</span></span>
@ -328,7 +342,7 @@ G_dvf_hf = zeros(length(f), 6, 6);
</div>
<div id="orgeda62ff" class="figure">
<div id="orgb9f3fd5" class="figure">
<p><img src="figs/enc_struts_dvf_frf.png" alt="enc_struts_dvf_frf.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Measured FRF for the DVF plant</p>
@ -337,11 +351,11 @@ G_dvf_hf = zeros(length(f), 6, 6);
</div>
<div id="outline-container-org9c55cb0" class="outline-4">
<h4 id="org9c55cb0"><span class="section-number-4">1.2.4</span> IFF Plant</h4>
<div id="outline-container-orgfe174fa" class="outline-4">
<h4 id="orgfe174fa"><span class="section-number-4">1.2.4</span> IFF Plant</h4>
<div class="outline-text-4" id="text-1-2-4">
<p>
First, let&rsquo;s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#orga958a00">6</a>).
First, let&rsquo;s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#orgb8bd5d5">6</a>).
</p>
<div class="org-src-container">
@ -358,14 +372,14 @@ coh_iff_hf = zeros(length(f), 6, 6);
</div>
<div id="orga958a00" class="figure">
<div id="orgb8bd5d5" class="figure">
<p><img src="figs/enc_struts_iff_coh.png" alt="enc_struts_iff_coh.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Obtained coherence for the IFF plant</p>
</div>
<p>
Then the 6x6 transfer function matrix is estimated (Figure <a href="#orgaa3ad1c">7</a>).
Then the 6x6 transfer function matrix is estimated (Figure <a href="#org7d9a20b">7</a>).
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% IFF Plant</span></span>
@ -380,7 +394,7 @@ G_iff_hf = zeros(length(f), 6, 6);
</div>
<div id="orgaa3ad1c" class="figure">
<div id="org7d9a20b" class="figure">
<p><img src="figs/enc_struts_iff_frf.png" alt="enc_struts_iff_frf.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Measured FRF for the IFF plant</p>
@ -389,16 +403,16 @@ G_iff_hf = zeros(length(f), 6, 6);
</div>
</div>
<div id="outline-container-orgb32a800" class="outline-3">
<h3 id="orgb32a800"><span class="section-number-3">1.3</span> Comparison with the Simscape Model</h3>
<div id="outline-container-orgaa25438" class="outline-3">
<h3 id="orgaa25438"><span class="section-number-3">1.3</span> Comparison with the Simscape Model</h3>
<div class="outline-text-3" id="text-1-3">
<p>
In this section, the measured dynamics is compared with the dynamics estimated from the Simscape model.
</p>
</div>
<div id="outline-container-org49d6b51" class="outline-4">
<h4 id="org49d6b51"><span class="section-number-4">1.3.1</span> Dynamics from Actuator to Force Sensors</h4>
<div id="outline-container-org8c6e670" class="outline-4">
<h4 id="org8c6e670"><span class="section-number-4">1.3.1</span> Dynamics from Actuator to Force Sensors</h4>
<div class="outline-text-4" id="text-1-3-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Initialize Nano-Hexapod</span></span>
@ -420,14 +434,14 @@ Giff = exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts)<sp
</div>
<div id="orgb002d1f" class="figure">
<div id="orgf514a0e" class="figure">
<p><img src="figs/enc_struts_iff_comp_simscape.png" alt="enc_struts_iff_comp_simscape.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Diagonal elements of the IFF Plant</p>
</div>
<div id="orgef9afdd" class="figure">
<div id="org5cb4798" class="figure">
<p><img src="figs/enc_struts_iff_comp_offdiag_simscape.png" alt="enc_struts_iff_comp_offdiag_simscape.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Off diagonal elements of the IFF Plant</p>
@ -435,8 +449,8 @@ Giff = exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts)<sp
</div>
</div>
<div id="outline-container-org68f8e6c" class="outline-4">
<h4 id="org68f8e6c"><span class="section-number-4">1.3.2</span> Dynamics from Actuator to Encoder</h4>
<div id="outline-container-orgb40c194" class="outline-4">
<h4 id="orgb40c194"><span class="section-number-4">1.3.2</span> Dynamics from Actuator to Encoder</h4>
<div class="outline-text-4" id="text-1-3-2">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Initialization of the Nano-Hexapod</span></span>
@ -458,14 +472,14 @@ Gdvf = exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts)<sp
</div>
<div id="org8001ef8" class="figure">
<div id="org0adec37" class="figure">
<p><img src="figs/enc_struts_dvf_comp_simscape.png" alt="enc_struts_dvf_comp_simscape.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Diagonal elements of the DVF Plant</p>
</div>
<div id="org8a8dc6a" class="figure">
<div id="org97225e9" class="figure">
<p><img src="figs/enc_struts_dvf_comp_offdiag_simscape.png" alt="enc_struts_dvf_comp_offdiag_simscape.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Off diagonal elements of the DVF Plant</p>
@ -474,12 +488,12 @@ Gdvf = exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts)<sp
</div>
</div>
<div id="outline-container-orge6221eb" class="outline-3">
<h3 id="orge6221eb"><span class="section-number-3">1.4</span> Integral Force Feedback</h3>
<div id="outline-container-org07b83f4" class="outline-3">
<h3 id="org07b83f4"><span class="section-number-3">1.4</span> Integral Force Feedback</h3>
<div class="outline-text-3" id="text-1-4">
</div>
<div id="outline-container-org1ccd985" class="outline-4">
<h4 id="org1ccd985"><span class="section-number-4">1.4.1</span> Root Locus and Decentralized Loop gain</h4>
<div id="outline-container-org32df075" class="outline-4">
<h4 id="org32df075"><span class="section-number-4">1.4.1</span> Root Locus and Decentralized Loop gain</h4>
<div class="outline-text-4" id="text-1-4-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% IFF Controller</span></span>
@ -491,7 +505,7 @@ Kiff_g1 = (1<span class="org-type">/</span>(s <span class="org-type">+</span> 2<
</div>
<div id="org9d7fb85" class="figure">
<div id="org605753e" class="figure">
<p><img src="figs/enc_struts_iff_root_locus.png" alt="enc_struts_iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Root Locus for the IFF control strategy</p>
@ -507,7 +521,7 @@ Kiff = g<span class="org-type">*</span>Kiff_g1;
</div>
<div id="org879ceab" class="figure">
<div id="orgc1b7b46" class="figure">
<p><img src="figs/enc_struts_iff_opt_loop_gain.png" alt="enc_struts_iff_opt_loop_gain.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Bode plot of the &ldquo;decentralized loop gain&rdquo; \(G_\text{iff}(i,i) \times K_\text{iff}(i,i)\)</p>
@ -515,12 +529,12 @@ Kiff = g<span class="org-type">*</span>Kiff_g1;
</div>
</div>
<div id="outline-container-orgd6bc33c" class="outline-4">
<h4 id="orgd6bc33c"><span class="section-number-4">1.4.2</span> Multiple Gains - Simulation</h4>
<div id="outline-container-orge5e9cea" class="outline-4">
<h4 id="orge5e9cea"><span class="section-number-4">1.4.2</span> Multiple Gains - Simulation</h4>
<div class="outline-text-4" id="text-1-4-2">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Tested IFF gains</span></span>
iff_gains = [4, 10, 20, 40, 100, 200, 400, 1000];
iff_gains = [4, 10, 20, 40, 100, 200, 400];
</pre>
</div>
@ -552,7 +566,7 @@ io(io_i) = linio([mdl, <span class="org-string">'/D'</span>], 1, <span class="o
</div>
<div id="orgb5b5f55" class="figure">
<div id="orgb361d62" class="figure">
<p><img src="figs/enc_struts_iff_gains_effect_dvf_plant.png" alt="enc_struts_iff_gains_effect_dvf_plant.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Effect of the IFF gain \(g\) on the transfer function from \(\bm{\tau}\) to \(d\bm{\mathcal{L}}_m\)</p>
@ -560,19 +574,200 @@ io(io_i) = linio([mdl, <span class="org-string">'/D'</span>], 1, <span class="o
</div>
</div>
<div id="outline-container-orgcbdb9eb" class="outline-4">
<h4 id="orgcbdb9eb"><span class="section-number-4">1.4.3</span> Experimental Results</h4>
<div id="outline-container-orga581915" class="outline-4">
<h4 id="orga581915"><span class="section-number-4">1.4.3</span> Experimental Results - Gains</h4>
<div class="outline-text-4" id="text-1-4-3">
<p>
Let&rsquo;s look at the damping introduced by IFF as a function of the IFF gain and compare that with the results obtained using the Simscape model.
</p>
</div>
<div id="outline-container-org7089ea1" class="outline-5">
<h5 id="org7089ea1"><span class="section-number-5">1.4.3.1</span> Load Data</h5>
<div class="outline-text-5" id="text-1-4-3-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Load Identification Data</span></span>
meas_iff_gains = {};
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(iff_gains)</span>
meas_iff_gains(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'mat/iff_strut_1_noise_g_%i.mat'</span>, iff_gains(<span class="org-constant">i</span>)), <span class="org-string">'t'</span>, <span class="org-string">'Vexc'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'u'</span>)};
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org16300e1" class="outline-2">
<h2 id="org16300e1"><span class="section-number-2">2</span> Encoders fixed to the plates</h2>
<div id="outline-container-org54efadb" class="outline-5">
<h5 id="org54efadb"><span class="section-number-5">1.4.3.2</span> Spectral Analysis - Setup</h5>
<div class="outline-text-5" id="text-1-4-3-2">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Setup useful variables</span></span>
<span class="org-comment">% Sampling Time [s]</span>
Ts = (meas_iff_gains{1}.t(end) <span class="org-type">-</span> (meas_iff_gains{1}.t(1)))<span class="org-type">/</span>(length(meas_iff_gains{1}.t)<span class="org-type">-</span>1);
<span class="org-comment">% Sampling Frequency [Hz]</span>
Fs = 1<span class="org-type">/</span>Ts;
<span class="org-comment">% Hannning Windows</span>
win = hanning(ceil(1<span class="org-type">*</span>Fs));
<span class="org-comment">% And we get the frequency vector</span>
[<span class="org-type">~</span>, f] = tfestimate(meas_iff_gains{1}.Vexc, meas_iff_gains{1}.de, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
</div>
</div>
<div id="outline-container-org5262511" class="outline-5">
<h5 id="org5262511"><span class="section-number-5">1.4.3.3</span> DVF Plant</h5>
<div class="outline-text-5" id="text-1-4-3-3">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% DVF Plant (transfer function from u to dLm)</span></span>
G_iff_gains = {};
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(iff_gains)</span>
G_iff_gains{<span class="org-constant">i</span>} = tfestimate(meas_iff_gains{<span class="org-constant">i</span>}.Vexc, meas_iff_gains{<span class="org-constant">i</span>}.de(<span class="org-type">:</span>,1), win, [], [], 1<span class="org-type">/</span>Ts);
<span class="org-keyword">end</span>
</pre>
</div>
<div id="orgecf391c" class="figure">
<p><img src="figs/comp_iff_gains_dvf_plant.png" alt="comp_iff_gains_dvf_plant.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Transfer function from \(u\) to \(d\mathcal{L}_m\) for multiple values of the IFF gain</p>
</div>
<div id="orgf79da15" class="figure">
<p><img src="figs/comp_iff_gains_dvf_plant_zoom.png" alt="comp_iff_gains_dvf_plant_zoom.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Transfer function from \(u\) to \(d\mathcal{L}_m\) for multiple values of the IFF gain (Zoom)</p>
</div>
<div class="important" id="orgbb44640">
<p>
The IFF control strategy is very effective for the damping of the suspension modes.
It however does not damp the modes at 200Hz, 300Hz and 400Hz (flexible modes of the APA).
This is very logical.
</p>
<p>
Also, the experimental results and the models obtained from the Simscape model are in agreement.
</p>
</div>
</div>
</div>
<div id="outline-container-org47db15b" class="outline-5">
<h5 id="org47db15b"><span class="section-number-5">1.4.3.4</span> Experimental Results - Comparison of the un-damped and fully damped system</h5>
<div class="outline-text-5" id="text-1-4-3-4">
<div id="org4f580a8" class="figure">
<p><img src="figs/comp_undamped_opt_iff_gain_diagonal.png" alt="comp_undamped_opt_iff_gain_diagonal.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Comparison of the diagonal elements of the tranfer function from \(\bm{u}\) to \(d\bm{\mathcal{L}}_m\) without active damping and with optimal IFF gain</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgd48530e" class="outline-4">
<h4 id="orgd48530e"><span class="section-number-4">1.4.4</span> Experimental Results - Damped Plant with Optimal gain</h4>
<div class="outline-text-4" id="text-1-4-4">
<p>
Let&rsquo;s now look at the \(6 \times 6\) damped plant with the optimal gain \(g = 400\).
</p>
</div>
<div id="outline-container-orgf0af7da" class="outline-5">
<h5 id="orgf0af7da"><span class="section-number-5">1.4.4.1</span> Load Data</h5>
<div class="outline-text-5" id="text-1-4-4-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Load Identification Data</span></span>
meas_iff_struts = {};
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:6</span>
meas_iff_struts(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'mat/iff_strut_%i_noise_g_400.mat'</span>, <span class="org-constant">i</span>), <span class="org-string">'t'</span>, <span class="org-string">'Vexc'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>, <span class="org-string">'u'</span>)};
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org1ce1b15" class="outline-5">
<h5 id="org1ce1b15"><span class="section-number-5">1.4.4.2</span> Spectral Analysis - Setup</h5>
<div class="outline-text-5" id="text-1-4-4-2">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Setup useful variables</span></span>
<span class="org-comment">% Sampling Time [s]</span>
Ts = (meas_iff_struts{1}.t(end) <span class="org-type">-</span> (meas_iff_struts{1}.t(1)))<span class="org-type">/</span>(length(meas_iff_struts{1}.t)<span class="org-type">-</span>1);
<span class="org-comment">% Sampling Frequency [Hz]</span>
Fs = 1<span class="org-type">/</span>Ts;
<span class="org-comment">% Hannning Windows</span>
win = hanning(ceil(1<span class="org-type">*</span>Fs));
<span class="org-comment">% And we get the frequency vector</span>
[<span class="org-type">~</span>, f] = tfestimate(meas_iff_struts{1}.Vexc, meas_iff_struts{1}.de, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgac97ace" class="outline-5">
<h5 id="orgac97ace"><span class="section-number-5">1.4.4.3</span> DVF Plant</h5>
<div class="outline-text-5" id="text-1-4-4-3">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% DVF Plant (transfer function from u to dLm)</span></span>
G_iff_opt = {};
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:6</span>
G_iff_opt{<span class="org-constant">i</span>} = tfestimate(meas_iff_struts{<span class="org-constant">i</span>}.Vexc, meas_iff_struts{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
<span class="org-keyword">end</span>
</pre>
</div>
<div id="org50d06b6" class="figure">
<p><img src="figs/damped_iff_plant_comp_diagonal.png" alt="damped_iff_plant_comp_diagonal.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Comparison of the diagonal elements of the transfer functions from \(\bm{u}\) to \(d\bm{\mathcal{L}}_m\) with active damping (IFF) applied with an optimal gain \(g = 400\)</p>
</div>
<div id="orgc9f6f9f" class="figure">
<p><img src="figs/damped_iff_plant_comp_off_diagonal.png" alt="damped_iff_plant_comp_off_diagonal.png" />
</p>
<p><span class="figure-number">Figure 19: </span>Comparison of the off-diagonal elements of the transfer functions from \(\bm{u}\) to \(d\bm{\mathcal{L}}_m\) with active damping (IFF) applied with an optimal gain \(g = 400\)</p>
</div>
<div class="important" id="org067c4cc">
<p>
With the IFF control strategy applied and the optimal gain used, the suspension modes are very well dapmed.
Remains the undamped flexible modes of the APA, and the modes of the plates.
</p>
<p>
The Simscape model and the experimental results are in very good agreement.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-orgba38b08" class="outline-2">
<h2 id="orgba38b08"><span class="section-number-2">2</span> Encoders fixed to the plates</h2>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2021-06-09 mer. 18:13</p>
<p class="date">Created: 2021-06-10 jeu. 17:52</p>
</div>
</body>
</html>

View File

@ -1011,7 +1011,7 @@ exportFig('figs/enc_struts_iff_opt_loop_gain.pdf', 'width', 'wide', 'height', 't
*** Multiple Gains - Simulation
#+begin_src matlab
%% Tested IFF gains
iff_gains = [4, 10, 20, 40, 100, 200, 400, 1000];
iff_gains = [4, 10, 20, 40, 100, 200, 400];
#+end_src
#+begin_src matlab
@ -1081,7 +1081,365 @@ exportFig('figs/enc_struts_iff_gains_effect_dvf_plant.pdf', 'width', 'wide', 'he
#+RESULTS:
[[file:figs/enc_struts_iff_gains_effect_dvf_plant.png]]
*** Experimental Results
*** Experimental Results - Gains
**** Introduction :ignore:
Let's look at the damping introduced by IFF as a function of the IFF gain and compare that with the results obtained using the Simscape model.
**** Load Data
#+begin_src matlab
%% Load Identification Data
meas_iff_gains = {};
for i = 1:length(iff_gains)
meas_iff_gains(i) = {load(sprintf('mat/iff_strut_1_noise_g_%i.mat', iff_gains(i)), 't', 'Vexc', 'Vs', 'de', 'u')};
end
#+end_src
**** Spectral Analysis - Setup
#+begin_src matlab
%% Setup useful variables
% Sampling Time [s]
Ts = (meas_iff_gains{1}.t(end) - (meas_iff_gains{1}.t(1)))/(length(meas_iff_gains{1}.t)-1);
% Sampling Frequency [Hz]
Fs = 1/Ts;
% Hannning Windows
win = hanning(ceil(1*Fs));
% And we get the frequency vector
[~, f] = tfestimate(meas_iff_gains{1}.Vexc, meas_iff_gains{1}.de, win, [], [], 1/Ts);
#+end_src
**** DVF Plant
#+begin_src matlab
%% DVF Plant (transfer function from u to dLm)
G_iff_gains = {};
for i = 1:length(iff_gains)
G_iff_gains{i} = tfestimate(meas_iff_gains{i}.Vexc, meas_iff_gains{i}.de(:,1), win, [], [], 1/Ts);
end
#+end_src
#+begin_src matlab :exports none
%% Bode plot of the transfer function from u to dLm for tested values of the IFF gain
freqs = 2*logspace(1, 3, 1000);
figure;
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
for i = 1:length(iff_gains)
plot(f, abs(G_iff_gains{i}), '-', ...
'DisplayName', sprintf('$g_{iff} = %.0f$', iff_gains(i)));
end
set(gca,'ColorOrderIndex',1)
for i = 1:length(iff_gains)
plot(freqs, abs(squeeze(freqresp(Gd_iff{i}(1,1), freqs, 'Hz'))), '--', ...
'HandleVisibility', 'off');
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/V]'); set(gca, 'XTickLabel',[]);
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
ax2 = nexttile;
hold on;
for i =1:length(iff_gains)
plot(f, 180/pi*angle(G_iff_gains{i}), '-');
end
set(gca,'ColorOrderIndex',1)
for i = 1:length(iff_gains)
plot(freqs, 180/pi*angle(squeeze(freqresp(Gd_iff{i}(1,1), freqs, 'Hz'))), '--');
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
linkaxes([ax1,ax2],'x');
xlim([freqs(1), freqs(end)]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/comp_iff_gains_dvf_plant.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:comp_iff_gains_dvf_plant
#+caption: Transfer function from $u$ to $d\mathcal{L}_m$ for multiple values of the IFF gain
#+RESULTS:
[[file:figs/comp_iff_gains_dvf_plant.png]]
#+begin_src matlab :exports none
xlim([20, 200]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/comp_iff_gains_dvf_plant_zoom.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:comp_iff_gains_dvf_plant_zoom
#+caption: Transfer function from $u$ to $d\mathcal{L}_m$ for multiple values of the IFF gain (Zoom)
#+RESULTS:
[[file:figs/comp_iff_gains_dvf_plant_zoom.png]]
#+begin_important
The IFF control strategy is very effective for the damping of the suspension modes.
It however does not damp the modes at 200Hz, 300Hz and 400Hz (flexible modes of the APA).
This is very logical.
Also, the experimental results and the models obtained from the Simscape model are in agreement.
#+end_important
**** Experimental Results - Comparison of the un-damped and fully damped system
#+begin_src matlab :exports none
%% Bode plot for the transfer function from u to dLm
freqs = 2*logspace(1, 3, 1000);
figure;
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
% Un Damped measurement
set(gca,'ColorOrderIndex',1)
plot(f(i_lf), abs(G_dvf_lf(i_lf,1, 1)), ...
'DisplayName', 'Un-Damped')
set(gca,'ColorOrderIndex',1)
plot(f(i_hf), abs(G_dvf_hf(i_hf,1, 1)), ...
'HandleVisibility', 'off');
for i = 2:6
set(gca,'ColorOrderIndex',1)
plot(f(i_lf), abs(G_dvf_lf(i_lf,i, i)), ...
'HandleVisibility', 'off');
set(gca,'ColorOrderIndex',1)
plot(f(i_hf), abs(G_dvf_hf(i_hf,i, i)), ...
'HandleVisibility', 'off');
end
% IFF Damped measurement
set(gca,'ColorOrderIndex',2)
plot(f, abs(G_iff_opt{1}(:,1)), ...
'DisplayName', 'Optimal gain')
for i = 2:6
set(gca,'ColorOrderIndex',2)
plot(f, abs(G_iff_opt{i}(:,i)), ...
'HandleVisibility', 'off');
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/V_{exc}$ [m/V]'); set(gca, 'XTickLabel',[]);
ylim([1e-9, 1e-3]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 3);
ax2 = nexttile;
hold on;
for i =1:6
set(gca,'ColorOrderIndex',1)
plot(f(i_lf), 180/pi*angle(G_dvf_lf(i_lf,i, i)));
set(gca,'ColorOrderIndex',1)
plot(f(i_hf), 180/pi*angle(G_dvf_hf(i_hf,i, i)));
set(gca,'ColorOrderIndex',2)
plot(f, 180/pi*angle(G_iff_opt{i}(:,i)));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:90:360);
linkaxes([ax1,ax2],'x');
xlim([20, 2e3]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/comp_undamped_opt_iff_gain_diagonal.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:comp_undamped_opt_iff_gain_diagonal
#+caption: Comparison of the diagonal elements of the tranfer function from $\bm{u}$ to $d\bm{\mathcal{L}}_m$ without active damping and with optimal IFF gain
#+RESULTS:
[[file:figs/comp_undamped_opt_iff_gain_diagonal.png]]
*** Experimental Results - Damped Plant with Optimal gain
**** Introduction :ignore:
Let's now look at the $6 \times 6$ damped plant with the optimal gain $g = 400$.
**** Load Data
#+begin_src matlab
%% Load Identification Data
meas_iff_struts = {};
for i = 1:6
meas_iff_struts(i) = {load(sprintf('mat/iff_strut_%i_noise_g_400.mat', i), 't', 'Vexc', 'Vs', 'de', 'u')};
end
#+end_src
**** Spectral Analysis - Setup
#+begin_src matlab
%% Setup useful variables
% Sampling Time [s]
Ts = (meas_iff_struts{1}.t(end) - (meas_iff_struts{1}.t(1)))/(length(meas_iff_struts{1}.t)-1);
% Sampling Frequency [Hz]
Fs = 1/Ts;
% Hannning Windows
win = hanning(ceil(1*Fs));
% And we get the frequency vector
[~, f] = tfestimate(meas_iff_struts{1}.Vexc, meas_iff_struts{1}.de, win, [], [], 1/Ts);
#+end_src
**** DVF Plant
#+begin_src matlab
%% DVF Plant (transfer function from u to dLm)
G_iff_opt = {};
for i = 1:6
G_iff_opt{i} = tfestimate(meas_iff_struts{i}.Vexc, meas_iff_struts{i}.de, win, [], [], 1/Ts);
end
#+end_src
#+begin_src matlab :exports none
%% Bode plot for the transfer function from u to dLm
freqs = 2*logspace(1, 3, 1000);
figure;
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
% Diagonal Elements FRF
plot(f, abs(G_iff_opt{1}(:,1)), 'color', [0,0,0,0.2], ...
'DisplayName', '$d\mathcal{L}_{m,i}/u_i$ - FRF')
for i = 2:6
plot(f, abs(G_iff_opt{i}(:,i)), 'color', [0,0,0,0.2], ...
'HandleVisibility', 'off');
end
% Diagonal Elements Model
set(gca,'ColorOrderIndex',2)
plot(freqs, abs(squeeze(freqresp(Gd_iff{end}(1,1), freqs, 'Hz'))), '-', ...
'DisplayName', '$d\mathcal{L}_{m,i}/u_i$ - Model')
for i = 2:6
set(gca,'ColorOrderIndex',2)
plot(freqs, abs(squeeze(freqresp(Gd_iff{end}(i,i), freqs, 'Hz'))), '-', ...
'HandleVisibility', 'off');
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/V_{exc}$ [m/V]'); set(gca, 'XTickLabel',[]);
ylim([1e-9, 1e-3]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 3);
ax2 = nexttile;
hold on;
for i =1:6
plot(f, 180/pi*angle(G_iff_opt{i}(:,i)), 'color', [0,0,0,0.2]);
set(gca,'ColorOrderIndex',2)
plot(freqs, 180/pi*angle(squeeze(freqresp(Gd_iff{end}(i,i), freqs, 'Hz'))));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:90:360);
linkaxes([ax1,ax2],'x');
xlim([20, 2e3]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/damped_iff_plant_comp_diagonal.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:damped_iff_plant_comp_diagonal
#+caption: Comparison of the diagonal elements of the transfer functions from $\bm{u}$ to $d\bm{\mathcal{L}}_m$ with active damping (IFF) applied with an optimal gain $g = 400$
#+RESULTS:
[[file:figs/damped_iff_plant_comp_diagonal.png]]
#+begin_src matlab :exports none
%% Bode plot for the transfer function from u to dLm
freqs = 2*logspace(1, 3, 1000);
figure;
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
% Off diagonal FRF
plot(f, abs(G_iff_opt{1}(:,2)), 'color', [0,0,0,0.2], ...
'DisplayName', '$d\mathcal{L}_{m,i}/u_j$ - FRF')
for i = 1:5
for j = i+1:6
plot(f, abs(G_iff_opt{i}(:,j)), 'color', [0, 0, 0, 0.2], ...
'HandleVisibility', 'off');
end
end
% Off diagonal Model
set(gca,'ColorOrderIndex',2)
plot(freqs, abs(squeeze(freqresp(Gd_iff{end}(1,2), freqs, 'Hz'))), '-', ...
'DisplayName', '$d\mathcal{L}_{m,i}/u_j$ - Model')
for i = 1:5
for j = i+1:6
set(gca,'ColorOrderIndex',2)
plot(freqs, abs(squeeze(freqresp(Gd_iff{end}(i,j), freqs, 'Hz'))), ...
'HandleVisibility', 'off');
end
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/V_{exc}$ [m/V]'); set(gca, 'XTickLabel',[]);
ylim([1e-9, 1e-3]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 3);
ax2 = nexttile;
hold on;
% Off diagonal FRF
for i = 1:5
for j = i+1:6
plot(f, 180/pi*angle(G_iff_opt{i}(:,j)), 'color', [0, 0, 0, 0.2]);
end
end
% Off diagonal Model
for i = 1:5
for j = i+1:6
set(gca,'ColorOrderIndex',2)
plot(freqs, 180/pi*angle(squeeze(freqresp(Gd_iff{end}(i,j), freqs, 'Hz'))));
end
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:90:360);
linkaxes([ax1,ax2],'x');
xlim([20, 2e3]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/damped_iff_plant_comp_off_diagonal.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:damped_iff_plant_comp_off_diagonal
#+caption: Comparison of the off-diagonal elements of the transfer functions from $\bm{u}$ to $d\bm{\mathcal{L}}_m$ with active damping (IFF) applied with an optimal gain $g = 400$
#+RESULTS:
[[file:figs/damped_iff_plant_comp_off_diagonal.png]]
#+begin_important
With the IFF control strategy applied and the optimal gain used, the suspension modes are very well dapmed.
Remains the undamped flexible modes of the APA, and the modes of the plates.
The Simscape model and the experimental results are in very good agreement.
#+end_important
* Encoders fixed to the plates
** Introduction :ignore:

Binary file not shown.