Compare commits
No commits in common. "8e95886e68254f7c55406c67a28fb79eedd9b191" and "21cd0b1471e12a7a9c7fab19f02f467912b88f58" have entirely different histories.
8e95886e68
...
21cd0b1471
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 167 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 96 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 36 KiB |
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 134 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 29 KiB |
383
index.html
383
index.html
@ -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>
|
||||||
<!-- 2020-08-20 jeu. 23:08 -->
|
<!-- 2020-07-24 ven. 15:48 -->
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
<title>Test Bench APA95ML</title>
|
<title>Test Bench APA95ML</title>
|
||||||
<meta name="generator" content="Org mode" />
|
<meta name="generator" content="Org mode" />
|
||||||
@ -27,49 +27,42 @@
|
|||||||
<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="#orgd70d66f">1. Setup</a>
|
<li><a href="#orgde2ca90">1. Setup</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org07d3c47">1.1. Parameters</a></li>
|
<li><a href="#orgc62d598">1.1. Parameters</a></li>
|
||||||
<li><a href="#orgbd4b8f3">1.2. Filter White Noise</a></li>
|
<li><a href="#org128d329">1.2. Filter White Noise</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#orgebffd67">2. Run Experiment and Save Data</a>
|
<li><a href="#orga229608">2. Run Experiment and Save Data</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org9db9f37">2.1. Load Data</a></li>
|
<li><a href="#org117998a">2.1. Load Data</a></li>
|
||||||
<li><a href="#org5b3c786">2.2. Save Data</a></li>
|
<li><a href="#org0aec1ce">2.2. Save Data</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#orge25b163">3. Huddle Test</a>
|
<li><a href="#orge436fe5">3. Huddle Test</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orgbc09977">3.1. Time Domain Data</a></li>
|
<li><a href="#orga50e600">3.1. Time Domain Data</a></li>
|
||||||
<li><a href="#org7e6bc47">3.2. PSD of Measurement Noise</a></li>
|
<li><a href="#org6637acb">3.2. PSD of Measurement Noise</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#org0348c7c">4. Transfer Function Estimation using the DAC as the driver</a>
|
<li><a href="#org1e70b14">4. Transfer Function Estimation using the DAC as the driver</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orgf0f7314">4.1. Time Domain Data</a></li>
|
<li><a href="#org627cdd4">4.1. Time Domain Data</a></li>
|
||||||
<li><a href="#orge50aef7">4.2. Comparison of the PSD with Huddle Test</a></li>
|
<li><a href="#orgb2e3ad4">4.2. Comparison of the PSD with Huddle Test</a></li>
|
||||||
<li><a href="#org870e2ef">4.3. Compute TF estimate and Coherence</a></li>
|
<li><a href="#orgd81c13d">4.3. Compute TF estimate and Coherence</a></li>
|
||||||
<li><a href="#orgb06d21d">4.4. Comparison with the FEM model</a></li>
|
<li><a href="#org7b450ca">4.4. Comparison with the FEM model</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#org563fed9">5. Transfer Function Estimation using the PI Amplifier</a>
|
<li><a href="#orgf7b3cee">5. Transfer Function Estimation using the PI Amplifier</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org9c121df">5.1. Load Data</a></li>
|
<li><a href="#orgd96ab97">5.1. Comparison of the PSD with Huddle Test</a></li>
|
||||||
<li><a href="#org990c144">5.2. Comparison of the PSD with Huddle Test</a></li>
|
<li><a href="#orgf49c967">5.2. Compute TF estimate and Coherence</a></li>
|
||||||
<li><a href="#org323b9c5">5.3. Compute TF estimate and Coherence</a></li>
|
<li><a href="#orgeb00ff9">5.3. Comparison with the FEM model</a></li>
|
||||||
<li><a href="#org6045724">5.4. Comparison with the FEM model</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#org5ef5f65">6. Transfer function from force actuator to force sensor</a>
|
<li><a href="#org0baf7a6">6. Transfer function of the PI Amplifier</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org098bbb0">6.1. System Identification</a></li>
|
<li><a href="#org94a6d47">6.1. Compute TF estimate and Coherence</a></li>
|
||||||
<li><a href="#orge0e4f46">6.2. Integral Force Feedback</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><a href="#org102cc6a">7. IFF Tests</a>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#org9e16daf">7.1. Load Data</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -77,26 +70,26 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org5c42466" class="figure">
|
<div id="orgfac2673" class="figure">
|
||||||
<p><img src="figs/setup_picture.png" alt="setup_picture.png" />
|
<p><img src="figs/setup_picture.png" alt="setup_picture.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 1: </span>Picture of the Setup</p>
|
<p><span class="figure-number">Figure 1: </span>Picture of the Setup</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgc98a0fb" class="figure">
|
<div id="orgd8fb946" class="figure">
|
||||||
<p><img src="figs/setup_zoom.png" alt="setup_zoom.png" />
|
<p><img src="figs/setup_zoom.png" alt="setup_zoom.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 2: </span>Zoom on the APA</p>
|
<p><span class="figure-number">Figure 2: </span>Zoom on the APA</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgd70d66f" class="outline-2">
|
<div id="outline-container-orgde2ca90" class="outline-2">
|
||||||
<h2 id="orgd70d66f"><span class="section-number-2">1</span> Setup</h2>
|
<h2 id="orgde2ca90"><span class="section-number-2">1</span> Setup</h2>
|
||||||
<div class="outline-text-2" id="text-1">
|
<div class="outline-text-2" id="text-1">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org07d3c47" class="outline-3">
|
<div id="outline-container-orgc62d598" class="outline-3">
|
||||||
<h3 id="org07d3c47"><span class="section-number-3">1.1</span> Parameters</h3>
|
<h3 id="orgc62d598"><span class="section-number-3">1.1</span> Parameters</h3>
|
||||||
<div class="outline-text-3" id="text-1-1">
|
<div class="outline-text-3" id="text-1-1">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">Ts = 1e-4;
|
<pre class="src src-matlab">Ts = 1e-4;
|
||||||
@ -105,8 +98,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgbd4b8f3" class="outline-3">
|
<div id="outline-container-org128d329" class="outline-3">
|
||||||
<h3 id="orgbd4b8f3"><span class="section-number-3">1.2</span> Filter White Noise</h3>
|
<h3 id="org128d329"><span class="section-number-3">1.2</span> Filter White Noise</h3>
|
||||||
<div class="outline-text-3" id="text-1-2">
|
<div class="outline-text-3" id="text-1-2">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">Glpf = 1/(1 + s/2/pi/500);
|
<pre class="src src-matlab">Glpf = 1/(1 + s/2/pi/500);
|
||||||
@ -118,13 +111,13 @@ Gz = c2d(Glpf, Ts, 'tustin');
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgebffd67" class="outline-2">
|
<div id="outline-container-orga229608" class="outline-2">
|
||||||
<h2 id="orgebffd67"><span class="section-number-2">2</span> Run Experiment and Save Data</h2>
|
<h2 id="orga229608"><span class="section-number-2">2</span> Run Experiment and Save Data</h2>
|
||||||
<div class="outline-text-2" id="text-2">
|
<div class="outline-text-2" id="text-2">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org9db9f37" class="outline-3">
|
<div id="outline-container-org117998a" class="outline-3">
|
||||||
<h3 id="org9db9f37"><span class="section-number-3">2.1</span> Load Data</h3>
|
<h3 id="org117998a"><span class="section-number-3">2.1</span> Load Data</h3>
|
||||||
<div class="outline-text-3" id="text-2-1">
|
<div class="outline-text-3" id="text-2-1">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">data = SimulinkRealTime.utils.getFileScopeData('data/apa95ml.dat').data;
|
<pre class="src src-matlab">data = SimulinkRealTime.utils.getFileScopeData('data/apa95ml.dat').data;
|
||||||
@ -133,8 +126,8 @@ Gz = c2d(Glpf, Ts, 'tustin');
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org5b3c786" class="outline-3">
|
<div id="outline-container-org0aec1ce" class="outline-3">
|
||||||
<h3 id="org5b3c786"><span class="section-number-3">2.2</span> Save Data</h3>
|
<h3 id="org0aec1ce"><span class="section-number-3">2.2</span> Save Data</h3>
|
||||||
<div class="outline-text-3" id="text-2-2">
|
<div class="outline-text-3" id="text-2-2">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">u = data(:, 1); % Input Voltage [V]
|
<pre class="src src-matlab">u = data(:, 1); % Input Voltage [V]
|
||||||
@ -151,16 +144,16 @@ t = data(:, 3); % Time [s]
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orge25b163" class="outline-2">
|
<div id="outline-container-orge436fe5" class="outline-2">
|
||||||
<h2 id="orge25b163"><span class="section-number-2">3</span> Huddle Test</h2>
|
<h2 id="orge436fe5"><span class="section-number-2">3</span> Huddle Test</h2>
|
||||||
<div class="outline-text-2" id="text-3">
|
<div class="outline-text-2" id="text-3">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgbc09977" class="outline-3">
|
<div id="outline-container-orga50e600" class="outline-3">
|
||||||
<h3 id="orgbc09977"><span class="section-number-3">3.1</span> Time Domain Data</h3>
|
<h3 id="orga50e600"><span class="section-number-3">3.1</span> Time Domain Data</h3>
|
||||||
<div class="outline-text-3" id="text-3-1">
|
<div class="outline-text-3" id="text-3-1">
|
||||||
|
|
||||||
<div id="orgfbf5913" class="figure">
|
<div id="org9f3cece" class="figure">
|
||||||
<p><img src="figs/huddle_test_time_domain.png" alt="huddle_test_time_domain.png" />
|
<p><img src="figs/huddle_test_time_domain.png" alt="huddle_test_time_domain.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 3: </span>Measurement of the Mass displacement during Huddle Test</p>
|
<p><span class="figure-number">Figure 3: </span>Measurement of the Mass displacement during Huddle Test</p>
|
||||||
@ -168,8 +161,8 @@ t = data(:, 3); % Time [s]
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org7e6bc47" class="outline-3">
|
<div id="outline-container-org6637acb" class="outline-3">
|
||||||
<h3 id="org7e6bc47"><span class="section-number-3">3.2</span> PSD of Measurement Noise</h3>
|
<h3 id="org6637acb"><span class="section-number-3">3.2</span> PSD of Measurement Noise</h3>
|
||||||
<div class="outline-text-3" id="text-3-2">
|
<div class="outline-text-3" id="text-3-2">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
||||||
@ -185,7 +178,7 @@ win = hanning(ceil(1*Fs));
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgaf72ca6" class="figure">
|
<div id="org53e3466" class="figure">
|
||||||
<p><img src="figs/huddle_test_pdf.png" alt="huddle_test_pdf.png" />
|
<p><img src="figs/huddle_test_pdf.png" alt="huddle_test_pdf.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 4: </span>Amplitude Spectral Density of the Displacement during Huddle Test</p>
|
<p><span class="figure-number">Figure 4: </span>Amplitude Spectral Density of the Displacement during Huddle Test</p>
|
||||||
@ -194,22 +187,16 @@ win = hanning(ceil(1*Fs));
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org0348c7c" class="outline-2">
|
<div id="outline-container-org1e70b14" class="outline-2">
|
||||||
<h2 id="org0348c7c"><span class="section-number-2">4</span> Transfer Function Estimation using the DAC as the driver</h2>
|
<h2 id="org1e70b14"><span class="section-number-2">4</span> Transfer Function Estimation using the DAC as the driver</h2>
|
||||||
<div class="outline-text-2" id="text-4">
|
<div class="outline-text-2" id="text-4">
|
||||||
<div class="important">
|
|
||||||
<p>
|
|
||||||
Results presented in this sections are wrong as the ADC cannot deliver enought current to the piezoelectric actuator.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgf0f7314" class="outline-3">
|
<div id="outline-container-org627cdd4" class="outline-3">
|
||||||
<h3 id="orgf0f7314"><span class="section-number-3">4.1</span> Time Domain Data</h3>
|
<h3 id="org627cdd4"><span class="section-number-3">4.1</span> Time Domain Data</h3>
|
||||||
<div class="outline-text-3" id="text-4-1">
|
<div class="outline-text-3" id="text-4-1">
|
||||||
|
|
||||||
<div id="org60f734d" class="figure">
|
<div id="orga0b06b8" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_10V_time_domain.png" alt="apa95ml_5kg_10V_time_domain.png" />
|
<p><img src="figs/apa95ml_5kg_10V_time_domain.png" alt="apa95ml_5kg_10V_time_domain.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 5: </span>Time domain signals during the test</p>
|
<p><span class="figure-number">Figure 5: </span>Time domain signals during the test</p>
|
||||||
@ -217,8 +204,8 @@ Results presented in this sections are wrong as the ADC cannot deliver enought c
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orge50aef7" class="outline-3">
|
<div id="outline-container-orgb2e3ad4" class="outline-3">
|
||||||
<h3 id="orge50aef7"><span class="section-number-3">4.2</span> Comparison of the PSD with Huddle Test</h3>
|
<h3 id="orgb2e3ad4"><span class="section-number-3">4.2</span> Comparison of the PSD with Huddle Test</h3>
|
||||||
<div class="outline-text-3" id="text-4-2">
|
<div class="outline-text-3" id="text-4-2">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
||||||
@ -235,7 +222,7 @@ win = hanning(ceil(1*Fs));
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orga45d905" class="figure">
|
<div id="org8170f8d" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_10V_pdf_comp_huddle.png" alt="apa95ml_5kg_10V_pdf_comp_huddle.png" />
|
<p><img src="figs/apa95ml_5kg_10V_pdf_comp_huddle.png" alt="apa95ml_5kg_10V_pdf_comp_huddle.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 6: </span>Comparison of the ASD for the identification test and the huddle test</p>
|
<p><span class="figure-number">Figure 6: </span>Comparison of the ASD for the identification test and the huddle test</p>
|
||||||
@ -243,8 +230,8 @@ win = hanning(ceil(1*Fs));
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org870e2ef" class="outline-3">
|
<div id="outline-container-orgd81c13d" class="outline-3">
|
||||||
<h3 id="org870e2ef"><span class="section-number-3">4.3</span> Compute TF estimate and Coherence</h3>
|
<h3 id="orgd81c13d"><span class="section-number-3">4.3</span> Compute TF estimate and Coherence</h3>
|
||||||
<div class="outline-text-3" id="text-4-3">
|
<div class="outline-text-3" id="text-4-3">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
||||||
@ -261,14 +248,14 @@ Fs = 1/Ts;
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org6abff24" class="figure">
|
<div id="orgb44ea20" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_10V_coh.png" alt="apa95ml_5kg_10V_coh.png" />
|
<p><img src="figs/apa95ml_5kg_10V_coh.png" alt="apa95ml_5kg_10V_coh.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 7: </span>Coherence</p>
|
<p><span class="figure-number">Figure 7: </span>Coherence</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org8e6794a" class="figure">
|
<div id="org0f7463c" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_10V_tf.png" alt="apa95ml_5kg_10V_tf.png" />
|
<p><img src="figs/apa95ml_5kg_10V_tf.png" alt="apa95ml_5kg_10V_tf.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 8: </span>Estimation of the transfer function from input voltage to displacement</p>
|
<p><span class="figure-number">Figure 8: </span>Estimation of the transfer function from input voltage to displacement</p>
|
||||||
@ -276,8 +263,8 @@ Fs = 1/Ts;
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgb06d21d" class="outline-3">
|
<div id="outline-container-org7b450ca" class="outline-3">
|
||||||
<h3 id="orgb06d21d"><span class="section-number-3">4.4</span> Comparison with the FEM model</h3>
|
<h3 id="org7b450ca"><span class="section-number-3">4.4</span> Comparison with the FEM model</h3>
|
||||||
<div class="outline-text-3" id="text-4-4">
|
<div class="outline-text-3" id="text-4-4">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">load('mat/fem_model_5kg.mat', 'Ghm');
|
<pre class="src src-matlab">load('mat/fem_model_5kg.mat', 'Ghm');
|
||||||
@ -285,7 +272,7 @@ Fs = 1/Ts;
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org4563de9" class="figure">
|
<div id="orgbdfdc24" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_comp_fem.png" alt="apa95ml_5kg_comp_fem.png" />
|
<p><img src="figs/apa95ml_5kg_comp_fem.png" alt="apa95ml_5kg_comp_fem.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 9: </span>Comparison of the identified transfer function and the one estimated from the FE model</p>
|
<p><span class="figure-number">Figure 9: </span>Comparison of the identified transfer function and the one estimated from the FE model</p>
|
||||||
@ -304,35 +291,14 @@ In the next section, a current amplifier is used.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org563fed9" class="outline-2">
|
<div id="outline-container-orgf7b3cee" class="outline-2">
|
||||||
<h2 id="org563fed9"><span class="section-number-2">5</span> Transfer Function Estimation using the PI Amplifier</h2>
|
<h2 id="orgf7b3cee"><span class="section-number-2">5</span> Transfer Function Estimation using the PI Amplifier</h2>
|
||||||
<div class="outline-text-2" id="text-5">
|
<div class="outline-text-2" id="text-5">
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org9c121df" class="outline-3">
|
<div id="outline-container-orgd96ab97" class="outline-3">
|
||||||
<h3 id="org9c121df"><span class="section-number-3">5.1</span> Load Data</h3>
|
<h3 id="orgd96ab97"><span class="section-number-3">5.1</span> Comparison of the PSD with Huddle Test</h3>
|
||||||
<div class="outline-text-3" id="text-5-1">
|
<div class="outline-text-3" id="text-5-1">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">ht = load('./mat/huddle_test.mat', 't', 'u', 'y');
|
|
||||||
load('./mat/apa95ml_5kg_Amp_E505.mat', 't', 'u', 'um', 'y');
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">u = 10*(u - mean(u)); % Input Voltage of Piezo [V]
|
|
||||||
um = 10*(um - mean(um)); % Monitor [V]
|
|
||||||
y = y - mean(y); % Mass displacement [m]
|
|
||||||
|
|
||||||
ht.u = 10*(ht.u - mean(ht.u));
|
|
||||||
ht.y = ht.y - mean(ht.y);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="outline-container-org990c144" class="outline-3">
|
|
||||||
<h3 id="org990c144"><span class="section-number-3">5.2</span> Comparison of the PSD with Huddle Test</h3>
|
|
||||||
<div class="outline-text-3" id="text-5-2">
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
||||||
Fs = 1/Ts;
|
Fs = 1/Ts;
|
||||||
|
|
||||||
@ -347,7 +313,7 @@ win = hanning(ceil(1*Fs));
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgf6222d7" class="figure">
|
<div id="orgbc7a9a7" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_PI_pdf_comp_huddle.png" alt="apa95ml_5kg_PI_pdf_comp_huddle.png" />
|
<p><img src="figs/apa95ml_5kg_PI_pdf_comp_huddle.png" alt="apa95ml_5kg_PI_pdf_comp_huddle.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 10: </span>Comparison of the ASD for the identification test and the huddle test</p>
|
<p><span class="figure-number">Figure 10: </span>Comparison of the ASD for the identification test and the huddle test</p>
|
||||||
@ -355,9 +321,9 @@ win = hanning(ceil(1*Fs));
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org323b9c5" class="outline-3">
|
<div id="outline-container-orgf49c967" class="outline-3">
|
||||||
<h3 id="org323b9c5"><span class="section-number-3">5.3</span> Compute TF estimate and Coherence</h3>
|
<h3 id="orgf49c967"><span class="section-number-3">5.2</span> Compute TF estimate and Coherence</h3>
|
||||||
<div class="outline-text-3" id="text-5-3">
|
<div class="outline-text-3" id="text-5-2">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
||||||
Fs = 1/Ts;
|
Fs = 1/Ts;
|
||||||
@ -374,14 +340,14 @@ Fs = 1/Ts;
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org751008e" class="figure">
|
<div id="org883cf4f" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_PI_coh.png" alt="apa95ml_5kg_PI_coh.png" />
|
<p><img src="figs/apa95ml_5kg_PI_coh.png" alt="apa95ml_5kg_PI_coh.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 11: </span>Coherence</p>
|
<p><span class="figure-number">Figure 11: </span>Coherence</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgaed957e" class="figure">
|
<div id="orgefbbeeb" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_PI_tf.png" alt="apa95ml_5kg_PI_tf.png" />
|
<p><img src="figs/apa95ml_5kg_PI_tf.png" alt="apa95ml_5kg_PI_tf.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 12: </span>Estimation of the transfer function from input voltage to displacement</p>
|
<p><span class="figure-number">Figure 12: </span>Estimation of the transfer function from input voltage to displacement</p>
|
||||||
@ -389,16 +355,16 @@ Fs = 1/Ts;
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org6045724" class="outline-3">
|
<div id="outline-container-orgeb00ff9" class="outline-3">
|
||||||
<h3 id="org6045724"><span class="section-number-3">5.4</span> Comparison with the FEM model</h3>
|
<h3 id="orgeb00ff9"><span class="section-number-3">5.3</span> Comparison with the FEM model</h3>
|
||||||
<div class="outline-text-3" id="text-5-4">
|
<div class="outline-text-3" id="text-5-3">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">load('mat/fem_model_5kg.mat', 'G');
|
<pre class="src src-matlab">load('mat/fem_model_5kg.mat', 'Ghm');
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org693de8c" class="figure">
|
<div id="orgfd1fd2d" class="figure">
|
||||||
<p><img src="figs/apa95ml_5kg_pi_comp_fem.png" alt="apa95ml_5kg_pi_comp_fem.png" />
|
<p><img src="figs/apa95ml_5kg_pi_comp_fem.png" alt="apa95ml_5kg_pi_comp_fem.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 13: </span>Comparison of the identified transfer function and the one estimated from the FE model</p>
|
<p><span class="figure-number">Figure 13: </span>Comparison of the identified transfer function and the one estimated from the FE model</p>
|
||||||
@ -406,207 +372,76 @@ Fs = 1/Ts;
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="outline-container-org0baf7a6" class="outline-2">
|
||||||
<div id="outline-container-org5ef5f65" class="outline-2">
|
<h2 id="org0baf7a6"><span class="section-number-2">6</span> Transfer function of the PI Amplifier</h2>
|
||||||
<h2 id="org5ef5f65"><span class="section-number-2">6</span> Transfer function from force actuator to force sensor</h2>
|
|
||||||
<div class="outline-text-2" id="text-6">
|
<div class="outline-text-2" id="text-6">
|
||||||
<p>
|
|
||||||
Two measurements are performed:
|
|
||||||
</p>
|
|
||||||
<ul class="org-ul">
|
|
||||||
<li>Speedgoat DAC => Voltage Amplifier (x20) => 1 Piezo Stack => … => 2 Stacks as Force Sensor (parallel) => Speedgoat ADC</li>
|
|
||||||
<li>Speedgoat DAC => Voltage Amplifier (x20) => 2 Piezo Stacks (parallel) => … => 1 Stack as Force Sensor => Speedgoat ADC</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The obtained dynamics from force actuator to force sensor are compare with the FEM model.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
The data are loaded:
|
|
||||||
</p>
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">a_ss = load('mat/apa95ml_5kg_1a_2s.mat', 't', 'u', 'y', 'v');
|
|
||||||
aa_s = load('mat/apa95ml_5kg_2a_1s.mat', 't', 'u', 'y', 'v');
|
|
||||||
load('mat/G_force_sensor_5kg.mat', 'G');
|
|
||||||
</pre>
|
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<div id="outline-container-org94a6d47" class="outline-3">
|
||||||
Let’s use the amplifier gain to obtain the true voltage applied to the actuator stack(s)
|
<h3 id="org94a6d47"><span class="section-number-3">6.1</span> Compute TF estimate and Coherence</h3>
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The parameters of the piezoelectric stacks are defined below:
|
|
||||||
</p>
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">d33 = 3e-10; % Strain constant [m/V]
|
|
||||||
n = 80; % Number of layers per stack
|
|
||||||
eT = 1.6e-8; % Permittivity under constant stress [F/m]
|
|
||||||
sD = 2e-11; % Elastic compliance under constant electric displacement [m2/N]
|
|
||||||
ka = 235e6; % Stack stiffness [N/m]
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
From the FEM, we construct the transfer function from DAC voltage to ADC voltage.
|
|
||||||
</p>
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">Gfem_aa_s = exp(-s/1e4)*20*(2*d33*n*ka)*(G(3,1)+G(3,2))*d33/(eT*sD*n);
|
|
||||||
Gfem_a_ss = exp(-s/1e4)*20*( d33*n*ka)*(G(3,1)+G(2,1))*d33/(eT*sD*n);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
<p>
|
|
||||||
The transfer function from input voltage to output voltage are computed and shown in Figure <a href="#orge80e7b7">14</a>.
|
|
||||||
</p>
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">Ts = a_ss.t(end)/(length(a_ss.t)-1);
|
|
||||||
Fs = 1/Ts;
|
|
||||||
|
|
||||||
win = hann(ceil(10/Ts));
|
|
||||||
|
|
||||||
[tf_a_ss, f] = tfestimate(a_ss.u, a_ss.v, win, [], [], 1/Ts);
|
|
||||||
[coh_a_ss, ~] = mscohere( a_ss.u, a_ss.v, win, [], [], 1/Ts);
|
|
||||||
|
|
||||||
[tf_aa_s, f] = tfestimate(aa_s.u, aa_s.v, win, [], [], 1/Ts);
|
|
||||||
[coh_aa_s, ~] = mscohere( aa_s.u, aa_s.v, win, [], [], 1/Ts);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="orge80e7b7" class="figure">
|
|
||||||
<p><img src="figs/bode_plot_force_sensor_voltage_comp_fem.png" alt="bode_plot_force_sensor_voltage_comp_fem.png" />
|
|
||||||
</p>
|
|
||||||
<p><span class="figure-number">Figure 14: </span>Comparison of the identified dynamics from voltage output to voltage input and the FEM</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="outline-container-org098bbb0" class="outline-3">
|
|
||||||
<h3 id="org098bbb0"><span class="section-number-3">6.1</span> System Identification</h3>
|
|
||||||
<div class="outline-text-3" id="text-6-1">
|
<div class="outline-text-3" id="text-6-1">
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">w_z = 2*pi*111; % Zeros frequency [rad/s]
|
<pre class="src src-matlab">Ts = t(end)/(length(t)-1);
|
||||||
w_p = 2*pi*255; % Pole frequency [rad/s]
|
Fs = 1/Ts;
|
||||||
xi_z = 0.05;
|
|
||||||
xi_p = 0.015;
|
|
||||||
G_inf = 2;
|
|
||||||
|
|
||||||
Gi = G_inf*(s^2 - 2*xi_z*w_z*s + w_z^2)/(s^2 + 2*xi_p*w_p*s + w_p^2);
|
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
<div id="org76af419" class="figure">
|
The coherence and the transfer function are estimate from the voltage input of the PI amplifier to its voltage inputs.
|
||||||
<p><img src="figs/iff_plant_identification_apa95ml.png" alt="iff_plant_identification_apa95ml.png" />
|
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 15: </span>Identification of the IFF plant</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<p>
|
||||||
<div id="outline-container-orge0e4f46" class="outline-3">
|
The coherence is very good as expected (Figure <a href="#org12654c2">14</a>).
|
||||||
<h3 id="orge0e4f46"><span class="section-number-3">6.2</span> Integral Force Feedback</h3>
|
|
||||||
<div class="outline-text-3" id="text-6-2">
|
|
||||||
|
|
||||||
<div id="org114ceb2" class="figure">
|
|
||||||
<p><img src="figs/root_locus_iff_apa95ml_identification.png" alt="root_locus_iff_apa95ml_identification.png" />
|
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 16: </span>Root Locus for IFF</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="outline-container-org102cc6a" class="outline-2">
|
<p>
|
||||||
<h2 id="org102cc6a"><span class="section-number-2">7</span> IFF Tests</h2>
|
The transfer function show a low pass filter behavior with a lot of phase drop (Figure <a href="#org23ba982">15</a>).
|
||||||
<div class="outline-text-2" id="text-7">
|
</p>
|
||||||
</div>
|
|
||||||
<div id="outline-container-org9e16daf" class="outline-3">
|
|
||||||
<h3 id="org9e16daf"><span class="section-number-3">7.1</span> Load Data</h3>
|
|
||||||
<div class="outline-text-3" id="text-7-1">
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">iff_g10 = load('./mat/apa95ml_iff_g10_res.mat', 'u', 't', 'y', 'v');
|
|
||||||
iff_g100 = load('./mat/apa95ml_iff_g100_res.mat', 'u', 't', 'y', 'v');
|
|
||||||
iff_of = load('./mat/apa95ml_iff_off_res.mat', 'u', 't', 'y', 'v');
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">Ts = 1e-4;
|
<pre class="src src-matlab">win = hann(ceil(10/Ts));
|
||||||
win = hann(ceil(10/Ts));
|
|
||||||
|
|
||||||
[tf_iff_g10, f] = tfestimate(iff_g10.u, iff_g10.y, win, [], [], 1/Ts);
|
[tf_est, f] = tfestimate(u, um, win, [], [], 1/Ts);
|
||||||
[co_iff_g10, ~] = mscohere(iff_g10.u, iff_g10.y, win, [], [], 1/Ts);
|
[co_est, ~] = mscohere( u, um, win, [], [], 1/Ts);
|
||||||
|
|
||||||
[tf_iff_g100, f] = tfestimate(iff_g100.u, iff_g100.y, win, [], [], 1/Ts);
|
|
||||||
[co_iff_g100, ~] = mscohere(iff_g100.u, iff_g100.y, win, [], [], 1/Ts);
|
|
||||||
|
|
||||||
[tf_iff_of, ~] = tfestimate(iff_of.u, iff_of.y, win, [], [], 1/Ts);
|
|
||||||
[co_iff_of, ~] = mscohere(iff_of.u, iff_of.y, win, [], [], 1/Ts);
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="org-src-container">
|
|
||||||
<pre class="src src-matlab">figure;
|
|
||||||
|
|
||||||
hold on;
|
|
||||||
plot(f, co_iff_of, '-', 'DisplayName', 'g=0')
|
|
||||||
plot(f, co_iff_g10, '-', 'DisplayName', 'g=10')
|
|
||||||
plot(f, co_iff_g100, '-', 'DisplayName', 'g=100')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
|
||||||
ylabel('Coherence'); xlabel('Frequency [Hz]');
|
|
||||||
hold off;
|
|
||||||
legend();
|
|
||||||
xlim([60, 600])
|
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org3768cef" class="figure">
|
<div id="org12654c2" class="figure">
|
||||||
<p><img src="figs/iff_first_test_coherence.png" alt="iff_first_test_coherence.png" />
|
<p><img src="figs/PI_E505_coh.png" alt="PI_E505_coh.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 17: </span>Coherence</p>
|
<p><span class="figure-number">Figure 14: </span>Coherence</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="org23ba982" class="figure">
|
||||||
|
<p><img src="figs/PI_E505_tf.png" alt="PI_E505_tf.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 15: </span>Estimation of the transfer function from input voltage to displacement</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The delay can be estimated as follow (in ms):
|
||||||
|
</p>
|
||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">figure;
|
<pre class="src src-matlab">finddelay(u, um)*(1000*Ts)
|
||||||
ax1 = subplot(2, 1, 1);
|
|
||||||
hold on;
|
|
||||||
plot(f, abs(tf_iff_of), '-', 'DisplayName', 'g=0')
|
|
||||||
plot(f, abs(tf_iff_g10), '-', 'DisplayName', 'g=10')
|
|
||||||
plot(f, abs(tf_iff_g100), '-', 'DisplayName', 'g=100')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
|
||||||
ylabel('Amplitude'); xlabel('Frequency [Hz]');
|
|
||||||
hold off;
|
|
||||||
legend();
|
|
||||||
|
|
||||||
ax2 = subplot(2, 1, 2);
|
|
||||||
hold on;
|
|
||||||
plot(f, 180/pi*angle(-tf_iff_of), '-')
|
|
||||||
plot(f, 180/pi*angle(-tf_iff_g10), '-')
|
|
||||||
plot(f, 180/pi*angle(-tf_iff_g100), '-')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
|
||||||
ylabel('Phase'); xlabel('Frequency [Hz]');
|
|
||||||
hold off;
|
|
||||||
|
|
||||||
linkaxes([ax1,ax2], 'x');
|
|
||||||
xlim([60, 600]);
|
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<pre class="example">
|
||||||
|
0.4
|
||||||
|
</pre>
|
||||||
|
|
||||||
<div id="orgf1ca4d4" class="figure">
|
|
||||||
<p><img src="figs/iff_first_test_bode_plot.png" alt="iff_first_test_bode_plot.png" />
|
<p>
|
||||||
|
This most probably corresponds to a FIR filter.
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 18: </span>Bode plot for different values of IFF gain</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</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: 2020-08-20 jeu. 23:08</p>
|
<p class="date">Created: 2020-07-24 ven. 15:48</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
294
index.org
294
index.org
@ -166,11 +166,6 @@
|
|||||||
:header-args:matlab+: :comments org :mkdirp yes
|
:header-args:matlab+: :comments org :mkdirp yes
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
** Introduction :ignore:
|
|
||||||
#+begin_important
|
|
||||||
Results presented in this sections are wrong as the ADC cannot deliver enought current to the piezoelectric actuator.
|
|
||||||
#+end_important
|
|
||||||
|
|
||||||
** Matlab Init :noexport:ignore:
|
** Matlab Init :noexport:ignore:
|
||||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||||
<<matlab-dir>>
|
<<matlab-dir>>
|
||||||
@ -358,18 +353,18 @@ In the next section, a current amplifier is used.
|
|||||||
<<matlab-init>>
|
<<matlab-init>>
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Load Data
|
** Load Data :noexport:
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
ht = load('./mat/huddle_test.mat', 't', 'u', 'y');
|
ht = load('./mat/huddle_test.mat', 't', 'u', 'y');
|
||||||
load('./mat/apa95ml_5kg_Amp_E505.mat', 't', 'u', 'um', 'y');
|
load('./mat/apa95ml_5kg_Amp_E505.mat', 't', 'u', 'um', 'y');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
u = 10*(u - mean(u)); % Input Voltage of Piezo [V]
|
u = u - mean(u);
|
||||||
um = 10*(um - mean(um)); % Monitor [V]
|
um = um - mean(um);
|
||||||
y = y - mean(y); % Mass displacement [m]
|
y = y - mean(y);
|
||||||
|
|
||||||
ht.u = 10*(ht.u - mean(ht.u));
|
ht.u = ht.u - mean(ht.u);
|
||||||
ht.y = ht.y - mean(ht.y);
|
ht.y = ht.y - mean(ht.y);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
@ -448,7 +443,7 @@ In the next section, a current amplifier is used.
|
|||||||
plot(f, abs(tf_est), 'DisplayName', 'Input Voltage')
|
plot(f, abs(tf_est), 'DisplayName', 'Input Voltage')
|
||||||
plot(f, abs(tf_um), 'DisplayName', 'Monitor Voltage')
|
plot(f, abs(tf_um), 'DisplayName', 'Monitor Voltage')
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
||||||
ylabel('Amplitude [m/V]'); xlabel('Frequency [Hz]');
|
ylabel('Amplitude'); xlabel('Frequency [Hz]');
|
||||||
hold off;
|
hold off;
|
||||||
legend('location', 'southwest')
|
legend('location', 'southwest')
|
||||||
|
|
||||||
@ -477,7 +472,7 @@ In the next section, a current amplifier is used.
|
|||||||
|
|
||||||
** Comparison with the FEM model
|
** Comparison with the FEM model
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
load('mat/fem_model_5kg.mat', 'G');
|
load('mat/fem_model_5kg.mat', 'Ghm');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
#+begin_src matlab :exports none
|
||||||
@ -485,17 +480,17 @@ In the next section, a current amplifier is used.
|
|||||||
figure;
|
figure;
|
||||||
ax1 = subplot(2, 1, 1);
|
ax1 = subplot(2, 1, 1);
|
||||||
hold on;
|
hold on;
|
||||||
plot(f, abs(tf_um), 'DisplayName', 'Identification')
|
plot(f, 1/10*170/1400*abs(tf_um), 'DisplayName', 'Identification')
|
||||||
plot(freqs, abs(squeeze(freqresp(G, freqs, 'Hz'))), 'DisplayName', 'FEM')
|
plot(freqs, abs(squeeze(freqresp(Ghm, freqs, 'Hz'))), 'DisplayName', 'FEM')
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
||||||
ylabel('Amplitude [m/V]'); xlabel('Frequency [Hz]');
|
ylabel('Amplitude'); xlabel('Frequency [Hz]');
|
||||||
legend('location', 'northeast')
|
legend('location', 'northeast')
|
||||||
hold off;
|
hold off;
|
||||||
|
|
||||||
ax2 = subplot(2, 1, 2);
|
ax2 = subplot(2, 1, 2);
|
||||||
hold on;
|
hold on;
|
||||||
plot(f, 180/pi*unwrap(angle(tf_um)))
|
plot(f, 180/pi*unwrap(angle(tf_um)))
|
||||||
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G, freqs, 'Hz')))))
|
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(Ghm, freqs, 'Hz')))))
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
||||||
ylabel('Phase'); xlabel('Frequency [Hz]');
|
ylabel('Phase'); xlabel('Frequency [Hz]');
|
||||||
hold off;
|
hold off;
|
||||||
@ -514,192 +509,7 @@ In the next section, a current amplifier is used.
|
|||||||
#+caption: Comparison of the identified transfer function and the one estimated from the FE model
|
#+caption: Comparison of the identified transfer function and the one estimated from the FE model
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/apa95ml_5kg_pi_comp_fem.png]]
|
[[file:figs/apa95ml_5kg_pi_comp_fem.png]]
|
||||||
|
* Transfer function of the PI Amplifier
|
||||||
* Transfer function from force actuator to force sensor
|
|
||||||
** Introduction :ignore:
|
|
||||||
Two measurements are performed:
|
|
||||||
- Speedgoat DAC => Voltage Amplifier (x20) => 1 Piezo Stack => ... => 2 Stacks as Force Sensor (parallel) => Speedgoat ADC
|
|
||||||
- Speedgoat DAC => Voltage Amplifier (x20) => 2 Piezo Stacks (parallel) => ... => 1 Stack as Force Sensor => Speedgoat ADC
|
|
||||||
|
|
||||||
The obtained dynamics from force actuator to force sensor are compare with the FEM model.
|
|
||||||
|
|
||||||
** Matlab Init :noexport:ignore:
|
|
||||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
|
||||||
<<matlab-dir>>
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :exports none :results silent :noweb yes
|
|
||||||
<<matlab-init>>
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Load Data :ignore:
|
|
||||||
The data are loaded:
|
|
||||||
#+begin_src matlab
|
|
||||||
a_ss = load('mat/apa95ml_5kg_1a_2s.mat', 't', 'u', 'y', 'v');
|
|
||||||
aa_s = load('mat/apa95ml_5kg_2a_1s.mat', 't', 'u', 'y', 'v');
|
|
||||||
load('mat/G_force_sensor_5kg.mat', 'G');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Adjust gain :ignore:
|
|
||||||
Let's use the amplifier gain to obtain the true voltage applied to the actuator stack(s)
|
|
||||||
|
|
||||||
The parameters of the piezoelectric stacks are defined below:
|
|
||||||
#+begin_src matlab
|
|
||||||
d33 = 3e-10; % Strain constant [m/V]
|
|
||||||
n = 80; % Number of layers per stack
|
|
||||||
eT = 1.6e-8; % Permittivity under constant stress [F/m]
|
|
||||||
sD = 2e-11; % Elastic compliance under constant electric displacement [m2/N]
|
|
||||||
ka = 235e6; % Stack stiffness [N/m]
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
From the FEM, we construct the transfer function from DAC voltage to ADC voltage.
|
|
||||||
#+begin_src matlab
|
|
||||||
Gfem_aa_s = exp(-s/1e4)*20*(2*d33*n*ka)*(G(3,1)+G(3,2))*d33/(eT*sD*n);
|
|
||||||
Gfem_a_ss = exp(-s/1e4)*20*( d33*n*ka)*(G(3,1)+G(2,1))*d33/(eT*sD*n);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
** Compute TF estimate and Coherence :ignore:
|
|
||||||
The transfer function from input voltage to output voltage are computed and shown in Figure [[fig:bode_plot_force_sensor_voltage_comp_fem]].
|
|
||||||
#+begin_src matlab
|
|
||||||
Ts = a_ss.t(end)/(length(a_ss.t)-1);
|
|
||||||
Fs = 1/Ts;
|
|
||||||
|
|
||||||
win = hann(ceil(10/Ts));
|
|
||||||
|
|
||||||
[tf_a_ss, f] = tfestimate(a_ss.u, a_ss.v, win, [], [], 1/Ts);
|
|
||||||
[coh_a_ss, ~] = mscohere( a_ss.u, a_ss.v, win, [], [], 1/Ts);
|
|
||||||
|
|
||||||
[tf_aa_s, f] = tfestimate(aa_s.u, aa_s.v, win, [], [], 1/Ts);
|
|
||||||
[coh_aa_s, ~] = mscohere( aa_s.u, aa_s.v, win, [], [], 1/Ts);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
freqs = logspace(1, 4, 1000);
|
|
||||||
|
|
||||||
figure;
|
|
||||||
ax1 = subplot(2, 1, 1);
|
|
||||||
hold on;
|
|
||||||
set(gca,'ColorOrderIndex',1)
|
|
||||||
plot(f, abs(tf_aa_s), '-')
|
|
||||||
set(gca,'ColorOrderIndex',1)
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gfem_aa_s, freqs, 'Hz'))), '--')
|
|
||||||
set(gca,'ColorOrderIndex',2)
|
|
||||||
plot(f, abs(tf_a_ss), '-')
|
|
||||||
set(gca,'ColorOrderIndex',2)
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gfem_a_ss, freqs, 'Hz'))), '--')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
|
||||||
ylabel('Amplitude'); xlabel('Frequency [Hz]');
|
|
||||||
hold off;
|
|
||||||
ylim([1e-2, 1e2]);
|
|
||||||
|
|
||||||
ax2 = subplot(2, 1, 2);
|
|
||||||
hold on;
|
|
||||||
set(gca,'ColorOrderIndex',1)
|
|
||||||
plot(f, 180/pi*angle(tf_aa_s), '-', 'DisplayName', '2 Act - 1 Sen')
|
|
||||||
set(gca,'ColorOrderIndex',1)
|
|
||||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gfem_aa_s, freqs, 'Hz'))), '--', 'DisplayName', '2 Act - 1 Sen, - FEM')
|
|
||||||
set(gca,'ColorOrderIndex',2)
|
|
||||||
plot(f, 180/pi*angle(tf_a_ss), '-', 'DisplayName', '1 Act - 2 Sen')
|
|
||||||
set(gca,'ColorOrderIndex',2)
|
|
||||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gfem_a_ss, freqs, 'Hz'))), '--', 'DisplayName', '1 Act - 2 Sen, - FEM')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
|
||||||
ylabel('Phase'); xlabel('Frequency [Hz]');
|
|
||||||
hold off;
|
|
||||||
ylim([-180, 180]);
|
|
||||||
yticks(-180:90:180);
|
|
||||||
legend('location', 'northeast')
|
|
||||||
|
|
||||||
linkaxes([ax1,ax2], 'x');
|
|
||||||
xlim([10, 5e3]);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
|
||||||
exportFig('figs/bode_plot_force_sensor_voltage_comp_fem.pdf', 'width', 'full', 'height', 'full');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: fig:bode_plot_force_sensor_voltage_comp_fem
|
|
||||||
#+caption: Comparison of the identified dynamics from voltage output to voltage input and the FEM
|
|
||||||
#+RESULTS:
|
|
||||||
[[file:figs/bode_plot_force_sensor_voltage_comp_fem.png]]
|
|
||||||
|
|
||||||
** System Identification
|
|
||||||
#+begin_src matlab
|
|
||||||
w_z = 2*pi*111; % Zeros frequency [rad/s]
|
|
||||||
w_p = 2*pi*255; % Pole frequency [rad/s]
|
|
||||||
xi_z = 0.05;
|
|
||||||
xi_p = 0.015;
|
|
||||||
G_inf = 2;
|
|
||||||
|
|
||||||
Gi = G_inf*(s^2 - 2*xi_z*w_z*s + w_z^2)/(s^2 + 2*xi_p*w_p*s + w_p^2);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
freqs = logspace(1, 4, 1000);
|
|
||||||
|
|
||||||
figure;
|
|
||||||
ax1 = subplot(2, 1, 1);
|
|
||||||
hold on;
|
|
||||||
plot(f, abs(tf_aa_s), '-')
|
|
||||||
plot(freqs, abs(squeeze(freqresp(Gi, freqs, 'Hz'))), '--')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
|
||||||
ylabel('Amplitude'); xlabel('Frequency [Hz]');
|
|
||||||
hold off;
|
|
||||||
ylim([1e-2, 1e2]);
|
|
||||||
|
|
||||||
ax2 = subplot(2, 1, 2);
|
|
||||||
hold on;
|
|
||||||
plot(f, 180/pi*angle(tf_aa_s), '-', 'DisplayName', '2 Act - 1 Sen')
|
|
||||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gi, freqs, 'Hz'))), '--', 'DisplayName', '2 Act - 1 Sen, - FEM')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
|
||||||
ylabel('Phase'); xlabel('Frequency [Hz]');
|
|
||||||
hold off;
|
|
||||||
ylim([-180, 180]);
|
|
||||||
yticks(-180:90:180);
|
|
||||||
legend('location', 'northeast')
|
|
||||||
|
|
||||||
linkaxes([ax1,ax2], 'x');
|
|
||||||
xlim([10, 5e3]);
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
|
||||||
exportFig('figs/iff_plant_identification_apa95ml.pdf', 'width', 'full', 'height', 'full');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: fig:iff_plant_identification_apa95ml
|
|
||||||
#+caption: Identification of the IFF plant
|
|
||||||
#+RESULTS:
|
|
||||||
[[file:figs/iff_plant_identification_apa95ml.png]]
|
|
||||||
|
|
||||||
|
|
||||||
** Integral Force Feedback
|
|
||||||
#+begin_src matlab :exports none
|
|
||||||
gains = logspace(0, 5, 1000);
|
|
||||||
|
|
||||||
figure;
|
|
||||||
hold on;
|
|
||||||
plot(real(pole(Gi)), imag(pole(Gi)), 'kx');
|
|
||||||
plot(real(tzero(Gi)), imag(tzero(Gi)), 'ko');
|
|
||||||
for i = 1:length(gains)
|
|
||||||
cl_poles = pole(feedback(Gi, (gains(i)/s)));
|
|
||||||
plot(real(cl_poles), imag(cl_poles), 'k.');
|
|
||||||
end
|
|
||||||
ylim([0, 1800]);
|
|
||||||
xlim([-1600,200]);
|
|
||||||
xlabel('Real Part')
|
|
||||||
ylabel('Imaginary Part')
|
|
||||||
axis square
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
|
||||||
exportFig('figs/root_locus_iff_apa95ml_identification.pdf', 'width', 'wide', 'height', 'tall');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+name: fig:root_locus_iff_apa95ml_identification
|
|
||||||
#+caption: Root Locus for IFF
|
|
||||||
#+RESULTS:
|
|
||||||
[[file:figs/root_locus_iff_apa95ml_identification.png]]
|
|
||||||
|
|
||||||
* IFF Tests
|
|
||||||
** Matlab Init :noexport:ignore:
|
** Matlab Init :noexport:ignore:
|
||||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||||
<<matlab-dir>>
|
<<matlab-dir>>
|
||||||
@ -709,81 +519,87 @@ The transfer function from input voltage to output voltage are computed and show
|
|||||||
<<matlab-init>>
|
<<matlab-init>>
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Load Data
|
** Load Data :noexport:
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
iff_g10 = load('./mat/apa95ml_iff_g10_res.mat', 'u', 't', 'y', 'v');
|
load('./mat/apa95ml_5kg_Amp_E505.mat', 't', 'u', 'um');
|
||||||
iff_g100 = load('./mat/apa95ml_iff_g100_res.mat', 'u', 't', 'y', 'v');
|
|
||||||
iff_of = load('./mat/apa95ml_iff_off_res.mat', 'u', 't', 'y', 'v');
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
** Compute TF estimate and Coherence
|
||||||
|
#+begin_src matlab
|
||||||
|
Ts = t(end)/(length(t)-1);
|
||||||
|
Fs = 1/Ts;
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
The coherence and the transfer function are estimate from the voltage input of the PI amplifier to its voltage inputs.
|
||||||
|
|
||||||
|
The coherence is very good as expected (Figure [[fig:PI_E505_coh]]).
|
||||||
|
|
||||||
|
The transfer function show a low pass filter behavior with a lot of phase drop (Figure [[fig:PI_E505_tf]]).
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
Ts = 1e-4;
|
|
||||||
win = hann(ceil(10/Ts));
|
win = hann(ceil(10/Ts));
|
||||||
|
|
||||||
[tf_iff_g10, f] = tfestimate(iff_g10.u, iff_g10.y, win, [], [], 1/Ts);
|
[tf_est, f] = tfestimate(u, um, win, [], [], 1/Ts);
|
||||||
[co_iff_g10, ~] = mscohere(iff_g10.u, iff_g10.y, win, [], [], 1/Ts);
|
[co_est, ~] = mscohere( u, um, win, [], [], 1/Ts);
|
||||||
|
|
||||||
[tf_iff_g100, f] = tfestimate(iff_g100.u, iff_g100.y, win, [], [], 1/Ts);
|
|
||||||
[co_iff_g100, ~] = mscohere(iff_g100.u, iff_g100.y, win, [], [], 1/Ts);
|
|
||||||
|
|
||||||
[tf_iff_of, ~] = tfestimate(iff_of.u, iff_of.y, win, [], [], 1/Ts);
|
|
||||||
[co_iff_of, ~] = mscohere(iff_of.u, iff_of.y, win, [], [], 1/Ts);
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab :exports none
|
||||||
figure;
|
figure;
|
||||||
|
|
||||||
hold on;
|
hold on;
|
||||||
plot(f, co_iff_of, '-', 'DisplayName', 'g=0')
|
plot(f, co_est, 'k-')
|
||||||
plot(f, co_iff_g10, '-', 'DisplayName', 'g=10')
|
|
||||||
plot(f, co_iff_g100, '-', 'DisplayName', 'g=100')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
||||||
ylabel('Coherence'); xlabel('Frequency [Hz]');
|
ylabel('Coherence'); xlabel('Frequency [Hz]');
|
||||||
hold off;
|
hold off;
|
||||||
legend();
|
xlim([10, 5e3]);
|
||||||
xlim([60, 600])
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
exportFig('figs/iff_first_test_coherence.pdf', 'width', 'wide', 'height', 'normal');
|
exportFig('figs/PI_E505_coh.pdf', 'width', 'wide', 'height', 'normal');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:iff_first_test_coherence
|
#+name: fig:PI_E505_coh
|
||||||
#+caption: Coherence
|
#+caption: Coherence
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/iff_first_test_coherence.png]]
|
[[file:figs/PI_E505_coh.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
#+begin_src matlab
|
|
||||||
figure;
|
figure;
|
||||||
ax1 = subplot(2, 1, 1);
|
ax1 = subplot(2, 1, 1);
|
||||||
hold on;
|
hold on;
|
||||||
plot(f, abs(tf_iff_of), '-', 'DisplayName', 'g=0')
|
plot(f, abs(tf_est), 'k-')
|
||||||
plot(f, abs(tf_iff_g10), '-', 'DisplayName', 'g=10')
|
|
||||||
plot(f, abs(tf_iff_g100), '-', 'DisplayName', 'g=100')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
||||||
ylabel('Amplitude'); xlabel('Frequency [Hz]');
|
ylabel('Amplitude'); xlabel('Frequency [Hz]');
|
||||||
hold off;
|
hold off;
|
||||||
legend();
|
|
||||||
|
|
||||||
ax2 = subplot(2, 1, 2);
|
ax2 = subplot(2, 1, 2);
|
||||||
hold on;
|
hold on;
|
||||||
plot(f, 180/pi*angle(-tf_iff_of), '-')
|
plot(f, 180/pi*angle(tf_est), 'k-')
|
||||||
plot(f, 180/pi*angle(-tf_iff_g10), '-')
|
set(gca, 'Xscale', 'lin'); set(gca, 'Yscale', 'lin');
|
||||||
plot(f, 180/pi*angle(-tf_iff_g100), '-')
|
|
||||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
|
||||||
ylabel('Phase'); xlabel('Frequency [Hz]');
|
ylabel('Phase'); xlabel('Frequency [Hz]');
|
||||||
hold off;
|
hold off;
|
||||||
|
ylim([-180, 180]);
|
||||||
|
yticks(-180:90:180);
|
||||||
|
|
||||||
linkaxes([ax1,ax2], 'x');
|
linkaxes([ax1,ax2], 'x');
|
||||||
xlim([60, 600]);
|
xlim([10, 5e3]);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src matlab :tangle no :exports results :results file replace
|
#+begin_src matlab :tangle no :exports results :results file replace
|
||||||
exportFig('figs/iff_first_test_bode_plot.pdf', 'width', 'full', 'height', 'full');
|
exportFig('figs/PI_E505_tf.pdf', 'width', 'full', 'height', 'full');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+name: fig:iff_first_test_bode_plot
|
#+name: fig:PI_E505_tf
|
||||||
#+caption: Bode plot for different values of IFF gain
|
#+caption: Estimation of the transfer function from input voltage to displacement
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
[[file:figs/iff_first_test_bode_plot.png]]
|
[[file:figs/PI_E505_tf.png]]
|
||||||
|
|
||||||
|
The delay can be estimated as follow (in ms):
|
||||||
|
#+begin_src matlab :results replace value
|
||||||
|
finddelay(u, um)*(1000*Ts)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
: 0.4
|
||||||
|
|
||||||
|
This most probably corresponds to a FIR filter.
|
||||||
|
Loading…
Reference in New Issue
Block a user