Analysis of IFF closed loop measurements
This commit is contained in:
parent
21abe53df0
commit
597ec7551f
BIN
figs/comp_iff_gains_dvf_plant.pdf
Normal file
BIN
figs/comp_iff_gains_dvf_plant.pdf
Normal file
Binary file not shown.
BIN
figs/comp_iff_gains_dvf_plant.png
Normal file
BIN
figs/comp_iff_gains_dvf_plant.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 182 KiB |
BIN
figs/comp_iff_gains_dvf_plant_zoom.pdf
Normal file
BIN
figs/comp_iff_gains_dvf_plant_zoom.pdf
Normal file
Binary file not shown.
BIN
figs/comp_iff_gains_dvf_plant_zoom.png
Normal file
BIN
figs/comp_iff_gains_dvf_plant_zoom.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 155 KiB |
BIN
figs/comp_undamped_opt_iff_gain_diagonal.pdf
Normal file
BIN
figs/comp_undamped_opt_iff_gain_diagonal.pdf
Normal file
Binary file not shown.
BIN
figs/comp_undamped_opt_iff_gain_diagonal.png
Normal file
BIN
figs/comp_undamped_opt_iff_gain_diagonal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 179 KiB |
BIN
figs/damped_iff_plant_comp_diagonal.pdf
Normal file
BIN
figs/damped_iff_plant_comp_diagonal.pdf
Normal file
Binary file not shown.
BIN
figs/damped_iff_plant_comp_diagonal.png
Normal file
BIN
figs/damped_iff_plant_comp_diagonal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 160 KiB |
BIN
figs/damped_iff_plant_comp_off_diagonal.pdf
Normal file
BIN
figs/damped_iff_plant_comp_off_diagonal.pdf
Normal file
Binary file not shown.
BIN
figs/damped_iff_plant_comp_off_diagonal.png
Normal file
BIN
figs/damped_iff_plant_comp_off_diagonal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 241 KiB |
BIN
matlab/iff_measure.slx.r2019b
Normal file
BIN
matlab/iff_measure.slx.r2019b
Normal file
Binary file not shown.
@ -1 +1 @@
|
|||||||
Subproject commit ef7d7a54d507b329d9bf23f1a3495ed7d5618a2d
|
Subproject commit 571dfbffb4be7f2cf1c061feff1e6140aa2c808c
|
@ -3,7 +3,7 @@
|
|||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- 2021-06-09 mer. 18:13 -->
|
<!-- 2021-06-10 jeu. 17:52 -->
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
<title>Nano-Hexapod - Test Bench</title>
|
<title>Nano-Hexapod - Test Bench</title>
|
||||||
<meta name="author" content="Dehaeze Thomas" />
|
<meta name="author" content="Dehaeze Thomas" />
|
||||||
@ -39,33 +39,47 @@
|
|||||||
<h2>Table of Contents</h2>
|
<h2>Table of Contents</h2>
|
||||||
<div id="text-table-of-contents">
|
<div id="text-table-of-contents">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orgd5a3ff2">1. Encoders fixed to the Struts</a>
|
<li><a href="#org8cdd071">1. Encoders fixed to the Struts</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orgaaf36d1">1.1. Introduction</a></li>
|
<li><a href="#org3d72b93">1.1. Introduction</a></li>
|
||||||
<li><a href="#org4eac0e4">1.2. Identification of the dynamics</a>
|
<li><a href="#orgcb16db3">1.2. Identification of the dynamics</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orge7631cb">1.2.1. Load Data</a></li>
|
<li><a href="#org7810966">1.2.1. Load Data</a></li>
|
||||||
<li><a href="#org3d8f0db">1.2.2. Spectral Analysis - Setup</a></li>
|
<li><a href="#orge39bc92">1.2.2. Spectral Analysis - Setup</a></li>
|
||||||
<li><a href="#orgfe475e0">1.2.3. DVF Plant</a></li>
|
<li><a href="#orge971c61">1.2.3. DVF Plant</a></li>
|
||||||
<li><a href="#org9c55cb0">1.2.4. IFF Plant</a></li>
|
<li><a href="#orgfe174fa">1.2.4. IFF Plant</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</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>
|
<ul>
|
||||||
<li><a href="#org49d6b51">1.3.1. Dynamics from Actuator to Force Sensors</a></li>
|
<li><a href="#org8c6e670">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="#orgb40c194">1.3.2. Dynamics from Actuator to Encoder</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#orge6221eb">1.4. Integral Force Feedback</a>
|
<li><a href="#org07b83f4">1.4. Integral Force Feedback</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org1ccd985">1.4.1. Root Locus and Decentralized Loop gain</a></li>
|
<li><a href="#org32df075">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="#orge5e9cea">1.4.2. Multiple Gains - Simulation</a></li>
|
||||||
<li><a href="#orgcbdb9eb">1.4.3. Experimental Results</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>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</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>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -74,10 +88,10 @@
|
|||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<p>
|
<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>
|
</p>
|
||||||
|
|
||||||
<div class="note" id="org64d5e50">
|
<div class="note" id="org61a7813">
|
||||||
<p>
|
<p>
|
||||||
Here are the documentation of the equipment used for this test bench:
|
Here are the documentation of the equipment used for this test bench:
|
||||||
</p>
|
</p>
|
||||||
@ -92,27 +106,27 @@ Here are the documentation of the equipment used for this test bench:
|
|||||||
</div>
|
</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><img src="figs/IMG_20210608_152917.jpg" alt="IMG_20210608_152917.jpg" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 1: </span>Nano-Hexapod</p>
|
<p><span class="figure-number">Figure 1: </span>Nano-Hexapod</p>
|
||||||
</div>
|
</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><img src="figs/IMG_20210608_154722.jpg" alt="IMG_20210608_154722.jpg" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 2: </span>Nano-Hexapod and the control electronics</p>
|
<p><span class="figure-number">Figure 2: </span>Nano-Hexapod and the control electronics</p>
|
||||||
</div>
|
</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><img src="figs/nano_hexapod_signals.png" alt="nano_hexapod_signals.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 3: </span>Block diagram of the system with named signals</p>
|
<p><span class="figure-number">Figure 3: </span>Block diagram of the system with named signals</p>
|
||||||
</div>
|
</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>
|
<caption class="t-above"><span class="table-number">Table 1:</span> List of signals</caption>
|
||||||
|
|
||||||
<colgroup>
|
<colgroup>
|
||||||
@ -229,12 +243,12 @@ Here are the documentation of the equipment used for this test bench:
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div id="outline-container-orgd5a3ff2" class="outline-2">
|
<div id="outline-container-org8cdd071" class="outline-2">
|
||||||
<h2 id="orgd5a3ff2"><span class="section-number-2">1</span> Encoders fixed to the Struts</h2>
|
<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 class="outline-text-2" id="text-1">
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-orgaaf36d1" class="outline-3">
|
<div id="outline-container-org3d72b93" class="outline-3">
|
||||||
<h3 id="orgaaf36d1"><span class="section-number-3">1.1</span> Introduction</h3>
|
<h3 id="org3d72b93"><span class="section-number-3">1.1</span> Introduction</h3>
|
||||||
<div class="outline-text-3" id="text-1-1">
|
<div class="outline-text-3" id="text-1-1">
|
||||||
<p>
|
<p>
|
||||||
In this section, the encoders are fixed to the struts.
|
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>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org4eac0e4" class="outline-3">
|
<div id="outline-container-orgcb16db3" class="outline-3">
|
||||||
<h3 id="org4eac0e4"><span class="section-number-3">1.2</span> Identification of the dynamics</h3>
|
<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 class="outline-text-3" id="text-1-2">
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-orge7631cb" class="outline-4">
|
<div id="outline-container-org7810966" class="outline-4">
|
||||||
<h4 id="orge7631cb"><span class="section-number-4">1.2.1</span> Load Data</h4>
|
<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="outline-text-4" id="text-1-2-1">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Load Identification Data</span></span>
|
<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>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org3d8f0db" class="outline-4">
|
<div id="outline-container-orge39bc92" class="outline-4">
|
||||||
<h4 id="org3d8f0db"><span class="section-number-4">1.2.2</span> Spectral Analysis - Setup</h4>
|
<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="outline-text-4" id="text-1-2-2">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Setup useful variables</span></span>
|
<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">></span> 250; <span class="org-comment">% Poi
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgfe475e0" class="outline-4">
|
<div id="outline-container-orge971c61" class="outline-4">
|
||||||
<h4 id="orgfe475e0"><span class="section-number-4">1.2.3</span> DVF Plant</h4>
|
<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">
|
<div class="outline-text-4" id="text-1-2-3">
|
||||||
<p>
|
<p>
|
||||||
First, let’s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#org7027095">4</a>).
|
First, let’s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#orgc8a5209">4</a>).
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
@ -306,14 +320,14 @@ coh_dvf_hf = zeros(length(f), 6, 6);
|
|||||||
</div>
|
</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><img src="figs/enc_struts_dvf_coh.png" alt="enc_struts_dvf_coh.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 4: </span>Obtained coherence for the DVF plant</p>
|
<p><span class="figure-number">Figure 4: </span>Obtained coherence for the DVF plant</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<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>
|
</p>
|
||||||
<div class="org-src-container">
|
<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>
|
<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>
|
||||||
|
|
||||||
|
|
||||||
<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><img src="figs/enc_struts_dvf_frf.png" alt="enc_struts_dvf_frf.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 5: </span>Measured FRF for the DVF plant</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>
|
||||||
|
|
||||||
|
|
||||||
<div id="outline-container-org9c55cb0" class="outline-4">
|
<div id="outline-container-orgfe174fa" class="outline-4">
|
||||||
<h4 id="org9c55cb0"><span class="section-number-4">1.2.4</span> IFF Plant</h4>
|
<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">
|
<div class="outline-text-4" id="text-1-2-4">
|
||||||
<p>
|
<p>
|
||||||
First, let’s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#orga958a00">6</a>).
|
First, let’s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#orgb8bd5d5">6</a>).
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
@ -358,14 +372,14 @@ coh_iff_hf = zeros(length(f), 6, 6);
|
|||||||
</div>
|
</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><img src="figs/enc_struts_iff_coh.png" alt="enc_struts_iff_coh.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 6: </span>Obtained coherence for the IFF plant</p>
|
<p><span class="figure-number">Figure 6: </span>Obtained coherence for the IFF plant</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<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>
|
</p>
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% IFF Plant</span></span>
|
<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>
|
||||||
|
|
||||||
|
|
||||||
<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><img src="figs/enc_struts_iff_frf.png" alt="enc_struts_iff_frf.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 7: </span>Measured FRF for the IFF plant</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>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgb32a800" class="outline-3">
|
<div id="outline-container-orgaa25438" class="outline-3">
|
||||||
<h3 id="orgb32a800"><span class="section-number-3">1.3</span> Comparison with the Simscape Model</h3>
|
<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">
|
<div class="outline-text-3" id="text-1-3">
|
||||||
<p>
|
<p>
|
||||||
In this section, the measured dynamics is compared with the dynamics estimated from the Simscape model.
|
In this section, the measured dynamics is compared with the dynamics estimated from the Simscape model.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org49d6b51" class="outline-4">
|
<div id="outline-container-org8c6e670" class="outline-4">
|
||||||
<h4 id="org49d6b51"><span class="section-number-4">1.3.1</span> Dynamics from Actuator to Force Sensors</h4>
|
<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="outline-text-4" id="text-1-3-1">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Initialize Nano-Hexapod</span></span>
|
<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>
|
||||||
|
|
||||||
|
|
||||||
<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><img src="figs/enc_struts_iff_comp_simscape.png" alt="enc_struts_iff_comp_simscape.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 8: </span>Diagonal elements of the IFF Plant</p>
|
<p><span class="figure-number">Figure 8: </span>Diagonal elements of the IFF Plant</p>
|
||||||
</div>
|
</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><img src="figs/enc_struts_iff_comp_offdiag_simscape.png" alt="enc_struts_iff_comp_offdiag_simscape.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 9: </span>Off diagonal elements of the IFF Plant</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>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org68f8e6c" class="outline-4">
|
<div id="outline-container-orgb40c194" class="outline-4">
|
||||||
<h4 id="org68f8e6c"><span class="section-number-4">1.3.2</span> Dynamics from Actuator to Encoder</h4>
|
<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="outline-text-4" id="text-1-3-2">
|
||||||
<div class="org-src-container">
|
<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>
|
<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>
|
||||||
|
|
||||||
|
|
||||||
<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><img src="figs/enc_struts_dvf_comp_simscape.png" alt="enc_struts_dvf_comp_simscape.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 10: </span>Diagonal elements of the DVF Plant</p>
|
<p><span class="figure-number">Figure 10: </span>Diagonal elements of the DVF Plant</p>
|
||||||
</div>
|
</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><img src="figs/enc_struts_dvf_comp_offdiag_simscape.png" alt="enc_struts_dvf_comp_offdiag_simscape.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 11: </span>Off diagonal elements of the DVF Plant</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>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orge6221eb" class="outline-3">
|
<div id="outline-container-org07b83f4" class="outline-3">
|
||||||
<h3 id="orge6221eb"><span class="section-number-3">1.4</span> Integral Force Feedback</h3>
|
<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 class="outline-text-3" id="text-1-4">
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org1ccd985" class="outline-4">
|
<div id="outline-container-org32df075" class="outline-4">
|
||||||
<h4 id="org1ccd985"><span class="section-number-4">1.4.1</span> Root Locus and Decentralized Loop gain</h4>
|
<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="outline-text-4" id="text-1-4-1">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% IFF Controller</span></span>
|
<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>
|
||||||
|
|
||||||
|
|
||||||
<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><img src="figs/enc_struts_iff_root_locus.png" alt="enc_struts_iff_root_locus.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 12: </span>Root Locus for the IFF control strategy</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>
|
||||||
|
|
||||||
|
|
||||||
<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><img src="figs/enc_struts_iff_opt_loop_gain.png" alt="enc_struts_iff_opt_loop_gain.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 13: </span>Bode plot of the “decentralized loop gain” \(G_\text{iff}(i,i) \times K_\text{iff}(i,i)\)</p>
|
<p><span class="figure-number">Figure 13: </span>Bode plot of the “decentralized loop gain” \(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>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgd6bc33c" class="outline-4">
|
<div id="outline-container-orge5e9cea" class="outline-4">
|
||||||
<h4 id="orgd6bc33c"><span class="section-number-4">1.4.2</span> Multiple Gains - Simulation</h4>
|
<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="outline-text-4" id="text-1-4-2">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Tested IFF gains</span></span>
|
<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>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -552,7 +566,7 @@ io(io_i) = linio([mdl, <span class="org-string">'/D'</span>], 1, <span class="o
|
|||||||
</div>
|
</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><img src="figs/enc_struts_iff_gains_effect_dvf_plant.png" alt="enc_struts_iff_gains_effect_dvf_plant.png" />
|
||||||
</p>
|
</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>
|
<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>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgcbdb9eb" class="outline-4">
|
<div id="outline-container-orga581915" class="outline-4">
|
||||||
<h4 id="orgcbdb9eb"><span class="section-number-4">1.4.3</span> Experimental Results</h4>
|
<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’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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org16300e1" class="outline-2">
|
<div id="outline-container-org54efadb" class="outline-5">
|
||||||
<h2 id="org16300e1"><span class="section-number-2">2</span> Encoders fixed to the plates</h2>
|
<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’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>
|
</div>
|
||||||
<div id="postamble" class="status">
|
<div id="postamble" class="status">
|
||||||
<p class="author">Author: Dehaeze Thomas</p>
|
<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>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1011,7 +1011,7 @@ exportFig('figs/enc_struts_iff_opt_loop_gain.pdf', 'width', 'wide', 'height', 't
|
|||||||
*** Multiple Gains - Simulation
|
*** Multiple Gains - Simulation
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
%% Tested IFF gains
|
%% Tested IFF gains
|
||||||
iff_gains = [4, 10, 20, 40, 100, 200, 400, 1000];
|
iff_gains = [4, 10, 20, 40, 100, 200, 400];
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
@ -1081,7 +1081,365 @@ exportFig('figs/enc_struts_iff_gains_effect_dvf_plant.pdf', 'width', 'wide', 'he
|
|||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/enc_struts_iff_gains_effect_dvf_plant.png]]
|
[[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
|
* Encoders fixed to the plates
|
||||||
** Introduction :ignore:
|
** Introduction :ignore:
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user