test-bench-apa/index.html

1653 lines
56 KiB
HTML
Raw Normal View History

2020-07-17 11:56:08 +02:00
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
2020-11-24 13:56:38 +01:00
<!-- 2020-11-24 mar. 13:54 -->
2020-07-17 11:56:08 +02:00
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
2020-11-24 09:25:05 +01:00
<title>Test Bench - Amplified Piezoelectric Actuator</title>
2020-07-17 11:56:08 +02:00
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
2020-11-12 10:36:40 +01:00
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
2020-11-24 09:25:05 +01:00
<script>MathJax = {
tex: {
tags: 'ams',
macros: {bm: ["\\boldsymbol{#1}",1],}
}
};
</script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
2020-07-17 11:56:08 +02:00
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="../index.html"> UP </a>
|
<a accesskey="H" href="../index.html"> HOME </a>
</div><div id="content">
2020-11-24 09:25:05 +01:00
<h1 class="title">Test Bench - Amplified Piezoelectric Actuator</h1>
2020-07-17 11:56:08 +02:00
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
2020-11-24 13:56:38 +01:00
<li><a href="#org692da4d">1. Experimental Setup</a></li>
<li><a href="#orgf5c6cd7">2. Estimation of electrical/mechanical relationships</a>
2020-07-20 11:27:55 +02:00
<ul>
2020-11-24 13:56:38 +01:00
<li><a href="#orgd8c7c0b">2.1. Estimation from Data-sheet</a></li>
<li><a href="#org901da31">2.2. Estimation from Piezoelectric parameters</a></li>
<li><a href="#org616104b">2.3. Estimation from Experiment</a>
<ul>
<li><a href="#orgcb3d952">2.3.1. From actuator voltage \(V_a\) to actuator force \(F_a\)</a></li>
<li><a href="#org138110f">2.3.2. From stack strain \(\Delta h\) to generated voltage \(V_s\)</a></li>
</ul>
</li>
<li><a href="#org7cf58ef">2.4. Conclusion</a></li>
2020-07-20 11:27:55 +02:00
</ul>
</li>
2020-11-24 13:56:38 +01:00
<li><a href="#org36bf85c">3. Simscape model of the test-bench</a>
2020-07-20 11:27:55 +02:00
<ul>
2020-11-24 13:56:38 +01:00
<li><a href="#orgca28e7b">3.1. Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates</a></li>
<li><a href="#orga49ef8e">3.2. Simscape Model</a></li>
<li><a href="#orgf1f3f75">3.3. Dynamics from Actuator Voltage to Vertical Mass Displacement</a></li>
<li><a href="#orgd4a750c">3.4. Dynamics from Actuator Voltage to Force Sensor Voltage</a></li>
<li><a href="#org1ac4d3c">3.5. Save Data for further use</a></li>
2020-07-20 11:27:55 +02:00
</ul>
</li>
2020-11-24 13:56:38 +01:00
<li><a href="#org9de639d">4. Huddle Test</a>
2020-07-20 11:27:55 +02:00
<ul>
2020-11-24 13:56:38 +01:00
<li><a href="#orgaf93c0c">4.1. Time Domain Data</a></li>
<li><a href="#org22ccdcf">4.2. PSD of Measurement Noise</a></li>
2020-07-20 11:27:55 +02:00
</ul>
</li>
2020-11-24 13:56:38 +01:00
<li><a href="#org914a7da">5. Identification of the dynamics from actuator to displacement</a>
2020-07-20 11:27:55 +02:00
<ul>
2020-11-24 13:56:38 +01:00
<li><a href="#orga1aace1">5.1. Load Data</a></li>
<li><a href="#org1284757">5.2. Comparison of the PSD with Huddle Test</a></li>
<li><a href="#org89453e3">5.3. Compute TF estimate and Coherence</a></li>
2020-11-24 09:25:05 +01:00
</ul>
</li>
2020-11-24 13:56:38 +01:00
<li><a href="#orgfff18d2">6. Identification of the dynamics from actuator to force sensor</a>
2020-11-24 09:25:05 +01:00
<ul>
2020-11-24 13:56:38 +01:00
<li><a href="#orgfa2171a">6.1. System Identification</a></li>
<li><a href="#org633e9f1">6.2. Integral Force Feedback</a></li>
2020-11-24 09:25:05 +01:00
</ul>
</li>
2020-11-24 13:56:38 +01:00
<li><a href="#org1bf58e2">7. Integral Force Feedback</a>
2020-11-24 09:25:05 +01:00
<ul>
2020-11-24 13:56:38 +01:00
<li><a href="#org25092d8">7.1. First tests with few gains</a></li>
<li><a href="#org67fa466">7.2. Second test with many Gains</a></li>
2020-07-20 11:27:55 +02:00
</ul>
</li>
2020-07-17 11:56:08 +02:00
</ul>
</div>
</div>
2020-11-24 09:25:05 +01:00
<ul class="org-ul">
2020-11-24 13:56:38 +01:00
<li>Section <a href="#org2c6bb95">1</a>:</li>
<li>Section <a href="#orgb81d61b">3</a>:</li>
2020-11-24 09:25:05 +01:00
<li>Section [[]]:</li>
<li>Section [[]]:</li>
<li>Section [[]]:</li>
</ul>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org692da4d" class="outline-2">
<h2 id="org692da4d"><span class="section-number-2">1</span> Experimental Setup</h2>
2020-11-24 09:25:05 +01:00
<div class="outline-text-2" id="text-1">
<p>
2020-11-24 13:56:38 +01:00
<a id="org2c6bb95"></a>
2020-11-24 09:25:05 +01:00
</p>
<p>
2020-11-24 13:56:38 +01:00
A schematic of the test-bench is shown in Figure <a href="#org57478f1">1</a>.
2020-11-24 09:25:05 +01:00
</p>
<p>
A mass can be vertically moved using the amplified piezoelectric actuator (APA95ML).
The displacement of the mass (relative to the mechanical frame) is measured by the interferometer.
</p>
<p>
2020-11-24 13:56:38 +01:00
The APA95ML has three stacks that can be used as actuator or as sensors.
</p>
<p>
Pictures of the test bench are shown in Figure <a href="#org4bf2105">2</a> and <a href="#org809b25b">3</a>.
</p>
<div id="org57478f1" class="figure">
<p><img src="figs/test_bench_apa_schematic.png" alt="test_bench_apa_schematic.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Schematic of the Setup</p>
</div>
<div id="org4bf2105" class="figure">
<p><img src="figs/setup_picture.png" alt="setup_picture.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Picture of the Setup</p>
</div>
<div id="org809b25b" class="figure">
<p><img src="figs/setup_zoom.png" alt="setup_zoom.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Zoom on the APA</p>
</div>
<div class="note" id="org79ca795">
<p>
Here are the equipment used in the test bench:
</p>
<ul class="org-ul">
<li>Attocube interferometer (<a href="doc/IDS3010.pdf">doc</a>)</li>
<li>Cedrat Amplified Piezoelectric Actuator APA95ML (<a href="doc/APA95ML.pdf">doc</a>)</li>
<li>Voltage Amplifier LA75B (<a href="doc/LA75B.pdf">doc</a>)</li>
<li>Speedgoat IO131 with 16bits ADC and DAC (<a href="doc/IO130 IO131 OEM Datasheet.pdf">doc</a>)</li>
<li>Low Noise Voltage Preamplifier from Ametek (<a href="doc/model_5113.pdf">doc</a>)</li>
</ul>
</div>
</div>
</div>
<div id="outline-container-orgf5c6cd7" class="outline-2">
<h2 id="orgf5c6cd7"><span class="section-number-2">2</span> Estimation of electrical/mechanical relationships</h2>
<div class="outline-text-2" id="text-2">
<p>
In order to correctly model the piezoelectric actuator, we need to determine:
</p>
<ol class="org-ol">
<li>\(g_a\): the ratio of the generated force \(F_a\) to the supply voltage \(V_a\) across the piezoelectric stack</li>
<li>\(g_s\): the ratio of the generated voltage \(V_s\) across the piezoelectric stack when subject to a strain \(\Delta h\)</li>
</ol>
<p>
We estimate \(g_a\) and \(g_s\) using different approaches:
</p>
<ol class="org-ol">
<li>Section <a href="#org640a15c">2.1</a>: \(g_a\) is estimated from the datasheet of the piezoelectric stack</li>
<li>Section <a href="#orgeeaae90">2.2</a>: \(g_a\) and \(g_s\) are estimated using the piezoelectric constants</li>
<li>Section <a href="#org5a92750">2.3</a>: \(g_a\) and \(g_s\) are estimated experimentally</li>
</ol>
</div>
<div id="outline-container-orgd8c7c0b" class="outline-3">
<h3 id="orgd8c7c0b"><span class="section-number-3">2.1</span> Estimation from Data-sheet</h3>
<div class="outline-text-3" id="text-2-1">
<p>
<a id="org640a15c"></a>
</p>
<p>
The stack parameters taken from the data-sheet are shown in Table <a href="#orgf2c9009">1</a>.
</p>
<table id="orgf2c9009" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Stack Parameters</caption>
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Parameter</th>
<th scope="col" class="org-left">Unit</th>
<th scope="col" class="org-right">Value</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Nominal Stroke</td>
<td class="org-left">\(\mu m\)</td>
<td class="org-right">20</td>
</tr>
<tr>
<td class="org-left">Blocked force</td>
<td class="org-left">\(N\)</td>
<td class="org-right">4700</td>
</tr>
<tr>
<td class="org-left">Stiffness</td>
<td class="org-left">\(N/\mu m\)</td>
<td class="org-right">235</td>
</tr>
<tr>
<td class="org-left">Voltage Range</td>
<td class="org-left">\(V\)</td>
<td class="org-right">-20..150</td>
</tr>
<tr>
<td class="org-left">Capacitance</td>
<td class="org-left">\(\mu F\)</td>
<td class="org-right">4.4</td>
</tr>
<tr>
<td class="org-left">Length</td>
<td class="org-left">\(mm\)</td>
<td class="org-right">20</td>
</tr>
<tr>
<td class="org-left">Stack Area</td>
<td class="org-left">\(mm^2\)</td>
<td class="org-right">10x10</td>
</tr>
</tbody>
</table>
<p>
Let&rsquo;s compute the generated force
</p>
<p>
The stroke is \(L_{\max} = 20\mu m\) for a voltage range of \(V_{\max} = 170 V\).
Furthermore, the stiffness is \(k_a = 235 \cdot 10^6 N/m\).
</p>
<p>
The relation between the applied voltage and the generated force can be estimated as follows:
</p>
\begin{equation}
g_a = k_a \frac{L_{\max}}{V_{\max}}
\end{equation}
<div class="org-src-container">
<pre class="src src-matlab">ka = 235e6; <span class="org-comment">% [N/m]</span>
Lmax = 20e<span class="org-type">-</span>6; <span class="org-comment">% [m]</span>
Vmax = 170; <span class="org-comment">% [V]</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">ka<span class="org-type">*</span>Lmax<span class="org-type">/</span>Vmax <span class="org-comment">% [N/V]</span>
</pre>
</div>
<pre class="example">
27.647
</pre>
<p>
From the parameters of the stack, it seems not possible to estimate the relation between the strain and the generated voltage.
</p>
</div>
</div>
<div id="outline-container-org901da31" class="outline-3">
<h3 id="org901da31"><span class="section-number-3">2.2</span> Estimation from Piezoelectric parameters</h3>
<div class="outline-text-3" id="text-2-2">
<p>
<a id="orgeeaae90"></a>
</p>
<p>
In order to make the conversion from applied voltage to generated force or from the strain to the generated voltage, we need to defined some parameters corresponding to the piezoelectric material:
</p>
<div class="org-src-container">
<pre class="src src-matlab">d33 = 300e<span class="org-type">-</span>12; <span class="org-comment">% Strain constant [m/V]</span>
n = 80; <span class="org-comment">% Number of layers per stack</span>
ka = 235e6; <span class="org-comment">% Stack stiffness [N/m]</span>
</pre>
</div>
<p>
The ratio of the developed force to applied voltage is:
</p>
\begin{equation}
\label{org8300de8}
F_a = g_a V_a, \quad g_a = d_{33} n k_a
\end{equation}
<p>
where:
</p>
<ul class="org-ul">
<li>\(F_a\): developed force in [N]</li>
<li>\(n\): number of layers of the actuator stack</li>
<li>\(d_{33}\): strain constant in [m/V]</li>
<li>\(k_a\): actuator stack stiffness in [N/m]</li>
<li>\(V_a\): applied voltage in [V]</li>
</ul>
<p>
If we take the numerical values, we obtain:
</p>
<div class="org-src-container">
<pre class="src src-matlab">ga = d33<span class="org-type">*</span>n<span class="org-type">*</span>ka; <span class="org-comment">% [N/V]</span>
</pre>
</div>
<pre class="example">
ga = 5.6 [N/V]
</pre>
<p>
From (<a href="#citeproc_bib_item_1">Fleming and Leang 2014</a>) (page 123), the relation between relative displacement of the sensor stack and generated voltage is:
</p>
\begin{equation}
\label{org312083f}
V_s = \frac{d_{33}}{\epsilon^T s^D n} \Delta h
\end{equation}
<p>
where:
</p>
<ul class="org-ul">
<li>\(V_s\): measured voltage in [V]</li>
<li>\(d_{33}\): strain constant in [m/V]</li>
<li>\(\epsilon^T\): permittivity under constant stress in [F/m]</li>
<li>\(s^D\): elastic compliance under constant electric displacement in [m^2/N]</li>
<li>\(n\): number of layers of the sensor stack</li>
<li>\(\Delta h\): relative displacement in [m]</li>
</ul>
<p>
If we take the numerical values, we obtain:
</p>
<div class="org-src-container">
<pre class="src src-matlab">d33 = 300e<span class="org-type">-</span>12; <span class="org-comment">% Strain constant [m/V]</span>
n = 80; <span class="org-comment">% Number of layers per stack</span>
eT = 5.3e<span class="org-type">-</span>9; <span class="org-comment">% Permittivity under constant stress [F/m]</span>
sD = 2e<span class="org-type">-</span>11; <span class="org-comment">% Compliance under constant electric displacement [m2/N]</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">gs = d33<span class="org-type">/</span>(eT<span class="org-type">*</span>sD<span class="org-type">*</span>n); <span class="org-comment">% [V/m]</span>
</pre>
</div>
<pre class="example">
gs = 35.4 [V/um]
</pre>
</div>
</div>
<div id="outline-container-org616104b" class="outline-3">
<h3 id="org616104b"><span class="section-number-3">2.3</span> Estimation from Experiment</h3>
<div class="outline-text-3" id="text-2-3">
<p>
<a id="org5a92750"></a>
</p>
<p>
The idea here is to obtain the parameters \(g_a\) and \(g_s\) from the comparison of an experimental identification and the identification using Simscape.
</p>
<p>
Using the experimental identification, we can easily obtain the gain from the applied voltage to the generated displacement, but not to the generated force.
However, from the Simscape model, we can easily have the link from the generated force to the displacement, them we can computed \(g_a\).
</p>
<p>
Similarly, it is fairly easy to experimentally obtain the gain from the stack displacement to the generated voltage across the stack.
To link that to the strain of the sensor stack, the simscape model is used.
</p>
</div>
<div id="outline-container-orgcb3d952" class="outline-4">
<h4 id="orgcb3d952"><span class="section-number-4">2.3.1</span> From actuator voltage \(V_a\) to actuator force \(F_a\)</h4>
<div class="outline-text-4" id="text-2-3-1">
<p>
The data from the identification test is loaded.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'apa95ml_5kg_Amp_E505.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'um'</span>, <span class="org-string">'y'</span>);
<span class="org-comment">% Any offset value is removed:</span>
um = detrend(um, 0); <span class="org-comment">% Amplifier Input Voltage [V]</span>
y = detrend(y , 0); <span class="org-comment">% Mass displacement [m]</span>
</pre>
</div>
<p>
Now we add a factor 10 to take into account the gain of the voltage amplifier and thus obtain the voltage across the piezoelectric stack.
</p>
<div class="org-src-container">
<pre class="src src-matlab">um = 10<span class="org-type">*</span>um; <span class="org-comment">% Stack Actuator Input Voltage [V]</span>
</pre>
</div>
<p>
Then, the transfer function from the stack voltage to the vertical displacement is computed.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ts = t(end)<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1);
Fs = 1<span class="org-type">/</span>Ts;
win = hanning(ceil(1<span class="org-type">*</span>Fs));
[tf_est, f] = tfestimate(um, y, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
<p>
The gain from input voltage of the stack to the vertical displacement is determined:
</p>
<div class="org-src-container">
<pre class="src src-matlab">g_d_Va = 4e<span class="org-type">-</span>7; <span class="org-comment">% [m/V]</span>
</pre>
</div>
<div id="orgf3201ac" class="figure">
<p><img src="figs/gain_Va_to_d.png" alt="gain_Va_to_d.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Transfer function from actuator stack voltage \(V_a\) to vertical displacement of the mass \(d\)</p>
</div>
<p>
Then, the transfer function from forces applied by the stack actuator to the vertical displacement of the mass is identified from the Simscape model.
</p>
<div class="org-src-container">
<pre class="src src-matlab">m = 5.5;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'piezo_amplified_3d'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Fa'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Force [N]</span>
io(io_i) = linio([mdl, <span class="org-string">'/y'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Vertical Displacement [m]</span>
Gd = linearize(mdl, io);
</pre>
</div>
<p>
The DC gain the the identified dynamics
</p>
<div class="org-src-container">
<pre class="src src-matlab">g_d_Fa = abs(dcgain(Gd)); <span class="org-comment">% [m/N]</span>
</pre>
</div>
<pre class="example">
G_d_Fa = 1.2e-08 [m/N]
</pre>
<p>
And finally, the gain \(g_a\) from the the actuator voltage \(V_a\) to the generated force \(F_a\) can be computed:
</p>
\begin{equation}
g_a = \frac{F_a}{V_a} = \frac{F_a}{d} \frac{d}{V_a}
\end{equation}
<div class="org-src-container">
<pre class="src src-matlab">ga = g_d_Va<span class="org-type">/</span>g_d_Fa;
</pre>
</div>
<pre class="example">
ga = 33.7 [N/V]
</pre>
<p>
The obtained comparison between the Simscape model and the identified dynamics is shown in Figure <a href="#orgc727518">5</a>.
</p>
<div id="orgc727518" class="figure">
<p><img src="figs/compare_Gd_id_simscape.png" alt="compare_Gd_id_simscape.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Comparison of the identified transfer function between actuator voltage \(V_a\) and vertical mass displacement \(d\)</p>
</div>
</div>
</div>
<div id="outline-container-org138110f" class="outline-4">
<h4 id="org138110f"><span class="section-number-4">2.3.2</span> From stack strain \(\Delta h\) to generated voltage \(V_s\)</h4>
<div class="outline-text-4" id="text-2-3-2">
<p>
Now, the gain from the stack strain \(\Delta h\) to the generated voltage \(V_s\) is estimated.
</p>
<p>
We can determine the gain from actuator voltage \(V_a\) to sensor voltage \(V_s\) thanks to the identification.
Using the simscape model, we can have the transfer function from the actuator voltage \(V_a\) (using the previously estimated gain \(g_a\)) to the sensor stack strain \(\Delta h\).
</p>
<p>
Finally, using these two values, we can compute the gain \(g_s\) from the stack strain \(\Delta h\) to the generated Voltage \(V_s\).
</p>
<p>
Identification data is loaded.
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'apa95ml_5kg_2a_1s.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'u'</span>, <span class="org-string">'v'</span>);
u = detrend(u, 0); <span class="org-comment">% Input Voltage of the Amplifier [V]</span>
v = detrend(v, 0); <span class="org-comment">% Voltage accross the stack sensor [V]</span>
</pre>
</div>
<p>
Here, an amplifier with a gain of 20 is used.
</p>
<div class="org-src-container">
<pre class="src src-matlab">u = 20<span class="org-type">*</span>u; <span class="org-comment">% Input Voltage of the Amplifier [V]</span>
</pre>
</div>
<p>
Then, the transfer function from \(V_a\) to \(V_s\) is identified and its DC gain is estimated (Figure <a href="#org6245a69">6</a>).
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ts = t(end)<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1);
Fs = 1<span class="org-type">/</span>Ts;
win = hann(ceil(10<span class="org-type">/</span>Ts));
[tf_est, f] = tfestimate(u, v, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">g_Vs_Va = 0.022; <span class="org-comment">% [V/V]</span>
</pre>
</div>
<div id="org6245a69" class="figure">
<p><img src="figs/gain_Va_to_Vs.png" alt="gain_Va_to_Vs.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Transfer function from actuator stack voltage \(V_a\) to sensor stack voltage \(V_s\)</p>
</div>
<p>
Now the transfer function from the actuator stack voltage to the sensor stack strain is estimated using the Simscape model.
</p>
<div class="org-src-container">
<pre class="src src-matlab">m = 5.5;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'piezo_amplified_3d'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Va'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Voltage [V]</span>
io(io_i) = linio([mdl, <span class="org-string">'/dL'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Sensor Stack displacement [m]</span>
Gf = linearize(mdl, io);
</pre>
</div>
<p>
The gain from the actuator stack voltage to the sensor stack strain is estimated below.
2020-11-24 09:25:05 +01:00
</p>
2020-11-24 13:56:38 +01:00
<div class="org-src-container">
<pre class="src src-matlab">G_dh_Va = abs(dcgain(Gf));
</pre>
</div>
2020-11-24 09:25:05 +01:00
2020-11-24 13:56:38 +01:00
<pre class="example">
G_dh_Va = 6.2e-09 [m/V]
</pre>
2020-11-24 09:25:05 +01:00
2020-11-24 13:56:38 +01:00
<p>
And finally, the gain \(g_s\) from the sensor stack strain to the generated voltage can be estimated:
2020-11-24 09:25:05 +01:00
</p>
2020-11-24 13:56:38 +01:00
\begin{equation}
g_s = \frac{V_s}{\Delta h} = \frac{V_s}{V_a} \frac{V_a}{\Delta h}
\end{equation}
<div class="org-src-container">
<pre class="src src-matlab">gs = g_Vs_Va<span class="org-type">/</span>G_dh_Va; <span class="org-comment">% [V/m]</span>
</pre>
2020-11-24 09:25:05 +01:00
</div>
2020-11-24 13:56:38 +01:00
<pre class="example">
gs = 3.5 [V/um]
</pre>
2020-07-20 13:17:34 +02:00
2020-11-24 13:56:38 +01:00
<div id="org6b6b451" class="figure">
<p><img src="figs/compare_Gf_id_simscape.png" alt="compare_Gf_id_simscape.png" />
2020-07-20 13:17:34 +02:00
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 7: </span>Comparison of the identified transfer function between actuator voltage \(V_a\) and sensor stack voltage</p>
</div>
</div>
</div>
2020-07-20 13:17:34 +02:00
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org7cf58ef" class="outline-3">
<h3 id="org7cf58ef"><span class="section-number-3">2.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-4">
<p>
2020-11-24 13:56:38 +01:00
The obtained parameters \(g_a\) and \(g_s\) are not consistent between the different methods.
</p>
2020-11-24 09:25:05 +01:00
2020-11-24 13:56:38 +01:00
<p>
The one using the experimental data are saved and further used.
</p>
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'./matlab/mat/apa95ml_params.mat'</span>, <span class="org-string">'ga'</span>, <span class="org-string">'gs'</span>);
</pre>
</div>
2020-11-24 09:25:05 +01:00
</div>
</div>
2020-07-20 11:27:55 +02:00
</div>
2020-07-17 11:56:08 +02:00
2020-11-24 13:56:38 +01:00
<div id="outline-container-org36bf85c" class="outline-2">
<h2 id="org36bf85c"><span class="section-number-2">3</span> Simscape model of the test-bench</h2>
<div class="outline-text-2" id="text-3">
2020-11-24 09:25:05 +01:00
<p>
2020-11-24 13:56:38 +01:00
<a id="orgb81d61b"></a>
2020-11-24 09:25:05 +01:00
</p>
<p>
The idea here is to model the test-bench using Simscape.
</p>
<p>
Whereas the suspended mass and metrology frame can be considered as rigid bodies in the frequency range of interest, the Amplified Piezoelectric Actuator (APA) is flexible.
</p>
<p>
2020-11-24 13:56:38 +01:00
To model the APA, a Finite Element Model (FEM) is used (Figure <a href="#orgbdafa32">8</a>) and imported into Simscape.
2020-11-24 09:25:05 +01:00
</p>
2020-11-24 13:56:38 +01:00
<div id="orgbdafa32" class="figure">
<p><img src="figs/APA95ML_FEM.png" alt="APA95ML_FEM.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Finite Element Model of the APA95ML</p>
2020-11-24 09:25:05 +01:00
</div>
2020-11-24 13:56:38 +01:00
</div>
<div id="outline-container-orgca28e7b" class="outline-3">
<h3 id="orgca28e7b"><span class="section-number-3">3.1</span> Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates</h3>
<div class="outline-text-3" id="text-3-1">
2020-11-24 09:25:05 +01:00
<p>
We first extract the stiffness and mass matrices.
</p>
<div class="org-src-container">
2020-11-24 13:56:38 +01:00
<pre class="src src-matlab">K = readmatrix(<span class="org-string">'APA95ML_K.CSV'</span>);
M = readmatrix(<span class="org-string">'APA95ML_M.CSV'</span>);
2020-11-24 09:25:05 +01:00
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
2020-11-24 13:56:38 +01:00
<caption class="t-above"><span class="table-number">Table 2:</span> First 10x10 elements of the Stiffness matrix</caption>
2020-11-24 09:25:05 +01:00
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">300000000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-1000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-30000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-40.0</td>
<td class="org-right">70000.0</td>
<td class="org-right">300.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">20000000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-30.0</td>
<td class="org-right">-5000.0</td>
<td class="org-right">5</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-1000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">50000000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-7000.0</td>
<td class="org-right">800000.0</td>
<td class="org-right">-20.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">300.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">3000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">5000000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">400.0</td>
<td class="org-right">-40000.0</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-30000.0</td>
<td class="org-right">-7000.0</td>
<td class="org-right">100000000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-200.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-60.0</td>
<td class="org-right">70.0</td>
<td class="org-right">3000.0</td>
<td class="org-right">3000.0</td>
<td class="org-right">-8000000.0</td>
<td class="org-right">-30.0</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-40.0</td>
<td class="org-right">800000.0</td>
<td class="org-right">-200.0</td>
<td class="org-right">20000.0</td>
<td class="org-right">-0.4</td>
<td class="org-right">4</td>
<td class="org-right">30.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">40000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">7</td>
<td class="org-right">-300.0</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">70000.0</td>
<td class="org-right">-20.0</td>
<td class="org-right">-60.0</td>
<td class="org-right">-0.4</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">3000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">1</td>
<td class="org-right">-6000.0</td>
<td class="org-right">10.0</td>
<td class="org-right">8</td>
<td class="org-right">-0.1</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
<td class="org-right">300.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">300.0</td>
<td class="org-right">70.0</td>
<td class="org-right">4</td>
<td class="org-right">1</td>
<td class="org-right">40000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-10.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-10.0</td>
<td class="org-right">30.0</td>
<td class="org-right">0.1</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">20000000.0</td>
<td class="org-right">3000.0</td>
<td class="org-right">3000.0</td>
<td class="org-right">30.0</td>
<td class="org-right">-6000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-10.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">300000000.0</td>
<td class="org-right">2000.0</td>
<td class="org-right">9000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-100.0</td>
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-30.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">5000000.0</td>
<td class="org-right">3000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">40000.0</td>
<td class="org-right">10.0</td>
<td class="org-right">-10.0</td>
<td class="org-right">2000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">50000000.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-3000.0</td>
<td class="org-right">-800000.0</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-5000.0</td>
<td class="org-right">400.0</td>
<td class="org-right">-8000000.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">7</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">8</td>
<td class="org-right">30.0</td>
<td class="org-right">9000.0</td>
<td class="org-right">-3000.0</td>
<td class="org-right">100000000.0</td>
<td class="org-right">100.0</td>
</tr>
<tr>
<td class="org-right">5</td>
<td class="org-right">-40000.0</td>
<td class="org-right">-30.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-300.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-0.1</td>
<td class="org-right">0.1</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-100.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-800000.0</td>
<td class="org-right">100.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">20000.0</td>
</tr>
</tbody>
</table>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
2020-11-24 13:56:38 +01:00
<caption class="t-above"><span class="table-number">Table 3:</span> First 10x10 elements of the Mass matrix</caption>
2020-11-24 09:25:05 +01:00
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">0.03</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">7e-08</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">2e-06</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-3e-09</td>
<td class="org-right">-0.0002</td>
<td class="org-right">-6e-08</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-0.001</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">8e-07</td>
<td class="org-right">6e-07</td>
<td class="org-right">-8e-09</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">7e-08</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.02</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-1e-06</td>
<td class="org-right">9e-05</td>
<td class="org-right">-3e-09</td>
<td class="org-right">-4e-09</td>
<td class="org-right">-1e-06</td>
<td class="org-right">-0.0006</td>
<td class="org-right">-4e-08</td>
<td class="org-right">5e-06</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">2e-06</td>
<td class="org-right">-1e-06</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.02</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-3e-08</td>
<td class="org-right">-4e-08</td>
<td class="org-right">1e-08</td>
<td class="org-right">1e-07</td>
<td class="org-right">-2e-07</td>
<td class="org-right">0.0003</td>
<td class="org-right">1e-09</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-3e-09</td>
<td class="org-right">9e-05</td>
<td class="org-right">-3e-08</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">1e-06</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-3e-11</td>
<td class="org-right">-3e-13</td>
<td class="org-right">-7e-09</td>
<td class="org-right">-5e-06</td>
<td class="org-right">-3e-10</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">3e-08</td>
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-0.0002</td>
<td class="org-right">-3e-09</td>
<td class="org-right">-4e-08</td>
<td class="org-right">-3e-11</td>
<td class="org-right">2e-06</td>
<td class="org-right">6e-10</td>
<td class="org-right">2e-06</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-7e-09</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-2e-09</td>
<td class="org-right">7e-11</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-6e-08</td>
<td class="org-right">-4e-09</td>
<td class="org-right">1e-08</td>
<td class="org-right">-3e-13</td>
<td class="org-right">6e-10</td>
<td class="org-right">1e-06</td>
<td class="org-right">1e-08</td>
<td class="org-right">3e-09</td>
<td class="org-right">-2e-09</td>
<td class="org-right">2e-13</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
<td class="org-right">-0.001</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-1e-06</td>
<td class="org-right">1e-07</td>
<td class="org-right">-7e-09</td>
<td class="org-right">2e-06</td>
<td class="org-right">1e-08</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.03</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">4e-08</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-2e-06</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">8e-09</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">8e-07</td>
<td class="org-right">-0.0006</td>
<td class="org-right">-2e-07</td>
<td class="org-right">-5e-06</td>
<td class="org-right">-7e-09</td>
<td class="org-right">3e-09</td>
<td class="org-right">4e-08</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.02</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-9e-07</td>
<td class="org-right">-9e-05</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">6e-07</td>
<td class="org-right">-4e-08</td>
<td class="org-right">0.0003</td>
<td class="org-right">-3e-10</td>
<td class="org-right">-2e-09</td>
<td class="org-right">-2e-09</td>
<td class="org-right">-2e-06</td>
<td class="org-right">-9e-07</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.02</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">2e-08</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">-8e-09</td>
<td class="org-right">5e-06</td>
<td class="org-right">1e-09</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">3e-08</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">7e-11</td>
<td class="org-right">2e-13</td>
<td class="org-right">8e-09</td>
<td class="org-right">-9e-05</td>
<td class="org-right">2e-08</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">1e-06</td>
</tr>
</tbody>
</table>
<p>
Then, we extract the coordinates of the interface nodes.
2020-07-20 11:27:55 +02:00
</p>
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">[int_xyz, int_i, n_xyz, n_i, nodes] = extractNodes(<span class="org-string">'APA95ML_out_nodes_3D.txt'</span>);
</pre>
2020-07-17 11:56:08 +02:00
</div>
2020-11-24 09:25:05 +01:00
2020-11-24 13:56:38 +01:00
<p>
The interface nodes are shown in Figure <a href="#org7dd0e69">9</a> and their coordinates are listed in Table <a href="#orgc8e88d6">4</a>.
</p>
2020-11-24 09:25:05 +01:00
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-left">Total number of Nodes</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">7</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
<td class="org-left">Number of interface Nodes</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">7</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
<td class="org-left">Number of Modes</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">6</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
<td class="org-left">Size of M and K matrices</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">48</td>
2020-11-24 09:25:05 +01:00
</tr>
</tbody>
</table>
2020-11-24 13:56:38 +01:00
<table id="orgc8e88d6" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 4:</span> Coordinates of the interface nodes</caption>
2020-11-24 09:25:05 +01:00
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">Node i</th>
<th scope="col" class="org-right">Node Number</th>
<th scope="col" class="org-right">x [m]</th>
<th scope="col" class="org-right">y [m]</th>
<th scope="col" class="org-right">z [m]</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">1.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">40467.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">0.029997</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
<td class="org-right">2.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">40469.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">-0.029997</td>
2020-11-24 09:25:05 +01:00
</tr>
<tr>
<td class="org-right">3.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">40470.0</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">-0.035</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">4.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">40475.0</td>
<td class="org-right">-0.015</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">5.0</td>
2020-11-24 13:56:38 +01:00
<td class="org-right">40476.0</td>
<td class="org-right">-0.005</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">6.0</td>
<td class="org-right">40477.0</td>
<td class="org-right">0.015</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
2020-11-24 13:56:38 +01:00
<td class="org-right">7.0</td>
<td class="org-right">40478.0</td>
<td class="org-right">0.035</td>
2020-11-24 09:25:05 +01:00
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
</tbody>
</table>
2020-11-24 13:56:38 +01:00
<div id="org7dd0e69" class="figure">
<p><img src="figs/APA95ML_nodes_1.png" alt="APA95ML_nodes_1.png" />
2020-11-24 09:25:05 +01:00
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 9: </span>Interface Nodes chosen for the APA95ML</p>
2020-07-20 11:27:55 +02:00
</div>
2020-07-17 11:56:08 +02:00
2020-11-24 09:25:05 +01:00
<p>
2020-11-24 13:56:38 +01:00
Using <code>K</code>, <code>M</code> and <code>int_xyz</code>, we can use the <code>Reduced Order Flexible Solid</code> simscape block.
2020-11-24 09:25:05 +01:00
</p>
</div>
</div>
2020-07-20 11:27:55 +02:00
2020-11-24 13:56:38 +01:00
<div id="outline-container-orga49ef8e" class="outline-3">
<h3 id="orga49ef8e"><span class="section-number-3">3.2</span> Simscape Model</h3>
<div class="outline-text-3" id="text-3-2">
2020-11-24 09:25:05 +01:00
<p>
The flexible element is imported using the <code>Reduced Order Flexible Solid</code> Simscape block.
</p>
<p>
To model the actuator, an <code>Internal Force</code> block is added between the nodes 3 and 12.
A <code>Relative Motion Sensor</code> block is added between the nodes 1 and 2 to measure the displacement and the amplified piezo.
</p>
<p>
One mass is fixed at one end of the piezo-electric stack actuator, the other end is fixed to the world frame.
</p>
<div class="org-src-container">
<pre class="src src-matlab">m = 5;
</pre>
</div>
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-orgf1f3f75" class="outline-3">
<h3 id="orgf1f3f75"><span class="section-number-3">3.3</span> Dynamics from Actuator Voltage to Vertical Mass Displacement</h3>
<div class="outline-text-3" id="text-3-3">
2020-11-24 09:25:05 +01:00
<p>
2020-11-24 13:56:38 +01:00
The identified dynamics is shown in Figure <a href="#orgd2ca2ca">10</a>.
2020-07-20 11:27:55 +02:00
</p>
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'piezo_amplified_3d'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Va'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Actuator Voltage [V]</span>
io(io_i) = linio([mdl, <span class="org-string">'/y'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Vertical Displacement [m]</span>
Ghm = <span class="org-type">-</span>linearize(mdl, io);
</pre>
2020-07-20 11:27:55 +02:00
</div>
2020-11-24 09:25:05 +01:00
2020-11-24 13:56:38 +01:00
<div id="orgd2ca2ca" class="figure">
2020-11-24 09:25:05 +01:00
<p><img src="figs/dynamics_act_disp_comp_mass.png" alt="dynamics_act_disp_comp_mass.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 10: </span>Dynamics from \(F\) to \(d\) without a payload and with a 5kg payload</p>
2020-07-20 11:27:55 +02:00
</div>
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-orgd4a750c" class="outline-3">
<h3 id="orgd4a750c"><span class="section-number-3">3.4</span> Dynamics from Actuator Voltage to Force Sensor Voltage</h3>
<div class="outline-text-3" id="text-3-4">
<p>
2020-11-24 13:56:38 +01:00
The obtained dynamics is shown in Figure <a href="#orgb135de4">11</a>.
2020-11-24 09:25:05 +01:00
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Name of the Simulink File</span></span>
mdl = <span class="org-string">'piezo_amplified_3d'</span>;
<span class="org-matlab-cellbreak"><span class="org-comment">%% Input/Output definition</span></span>
clear io; io_i = 1;
io(io_i) = linio([mdl, <span class="org-string">'/Va'</span>], 1, <span class="org-string">'openinput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Voltage Actuator [V]</span>
io(io_i) = linio([mdl, <span class="org-string">'/Vs'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-type">+</span> 1; <span class="org-comment">% Sensor Voltage [V]</span>
Gfm = linearize(mdl, io);
</pre>
</div>
2020-11-24 13:56:38 +01:00
<div id="orgb135de4" class="figure">
2020-11-24 09:25:05 +01:00
<p><img src="figs/dynamics_force_force_sensor_comp_mass.png" alt="dynamics_force_force_sensor_comp_mass.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 11: </span>Dynamics from \(F\) to \(F_m\) for \(m=0\) and \(m = 10kg\)</p>
2020-08-20 23:08:38 +02:00
</div>
2020-11-24 09:25:05 +01:00
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org1ac4d3c" class="outline-3">
<h3 id="org1ac4d3c"><span class="section-number-3">3.5</span> Save Data for further use</h3>
<div class="outline-text-3" id="text-3-5">
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<pre class="src src-matlab">save(<span class="org-string">'matlab/mat/fem_simscape_models.mat'</span>, <span class="org-string">'Ghm'</span>, <span class="org-string">'Gfm'</span>)
2020-08-20 23:08:38 +02:00
</pre>
</div>
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<pre class="src src-matlab">save(<span class="org-string">'mat/fem_simscape_models.mat'</span>, <span class="org-string">'Ghm'</span>, <span class="org-string">'Gfm'</span>)
</pre>
</div>
</div>
</div>
</div>
2020-08-20 23:08:38 +02:00
2020-11-24 13:56:38 +01:00
<div id="outline-container-org9de639d" class="outline-2">
<h2 id="org9de639d"><span class="section-number-2">4</span> Huddle Test</h2>
2020-11-24 09:25:05 +01:00
<div class="outline-text-2" id="text-4">
<p>
2020-11-24 13:56:38 +01:00
<a id="org9acdf87"></a>
2020-07-24 11:34:18 +02:00
</p>
2020-11-24 09:25:05 +01:00
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-orgaf93c0c" class="outline-3">
<h3 id="orgaf93c0c"><span class="section-number-3">4.1</span> Time Domain Data</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-4-1">
2020-11-24 13:56:38 +01:00
<div id="orgd048822" class="figure">
2020-11-24 09:25:05 +01:00
<p><img src="figs/huddle_test_time_domain.png" alt="huddle_test_time_domain.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 12: </span>Measurement of the Mass displacement during Huddle Test</p>
</div>
</div>
2020-07-24 11:34:18 +02:00
</div>
2020-07-24 13:06:02 +02:00
2020-11-24 13:56:38 +01:00
<div id="outline-container-org22ccdcf" class="outline-3">
<h3 id="org22ccdcf"><span class="section-number-3">4.2</span> PSD of Measurement Noise</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-4-2">
<div class="org-src-container">
<pre class="src src-matlab">Ts = t(end)<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1);
Fs = 1<span class="org-type">/</span>Ts;
win = hanning(ceil(1<span class="org-type">*</span>Fs));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">[pxx, f] = pwelch(y(1000<span class="org-type">:</span>end), win, [], [], Fs);
</pre>
</div>
2020-11-24 13:56:38 +01:00
<div id="orgd309d3e" class="figure">
2020-11-24 09:25:05 +01:00
<p><img src="figs/huddle_test_pdf.png" alt="huddle_test_pdf.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 13: </span>Amplitude Spectral Density of the Displacement during Huddle Test</p>
2020-11-24 09:25:05 +01:00
</div>
</div>
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org914a7da" class="outline-2">
<h2 id="org914a7da"><span class="section-number-2">5</span> Identification of the dynamics from actuator to displacement</h2>
2020-11-24 09:25:05 +01:00
<div class="outline-text-2" id="text-5">
<p>
2020-11-24 13:56:38 +01:00
<a id="org8cacbcf"></a>
2020-11-24 09:25:05 +01:00
</p>
<ul class="org-ul">
<li class="off"><code>[&#xa0;]</code> List of equipment</li>
<li class="off"><code>[&#xa0;]</code> Schematic</li>
<li class="off"><code>[&#xa0;]</code> Problem of matching between the models? (there is a factor 10)</li>
</ul>
<p>
E505 with gain of 10.
</p>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-orga1aace1" class="outline-3">
<h3 id="orga1aace1"><span class="section-number-3">5.1</span> Load Data</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-5-1">
<p>
The data from the &ldquo;noise test&rdquo; and the identification test are loaded.
</p>
<div class="org-src-container">
<pre class="src src-matlab">ht = load(<span class="org-string">'huddle_test.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'u'</span>, <span class="org-string">'y'</span>);
load(<span class="org-string">'apa95ml_5kg_Amp_E505.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'um'</span>, <span class="org-string">'y'</span>);
</pre>
</div>
<p>
Any offset value is removed:
</p>
<div class="org-src-container">
<pre class="src src-matlab">um = detrend(um, 0); <span class="org-comment">% Input Voltage [V]</span>
y = detrend(y , 0); <span class="org-comment">% Mass displacement [m]</span>
ht.u = detrend(ht.u, 0);
ht.y = detrend(ht.y, 0);
</pre>
</div>
<p>
Now we add a factor 10 to take into account the gain of the voltage amplifier.
</p>
<div class="org-src-container">
<pre class="src src-matlab">um = 10<span class="org-type">*</span>um;
ht.u = 10<span class="org-type">*</span>ht.u;
</pre>
</div>
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org1284757" class="outline-3">
<h3 id="org1284757"><span class="section-number-3">5.2</span> Comparison of the PSD with Huddle Test</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-5-2">
<div class="org-src-container">
<pre class="src src-matlab">Ts = t(end)<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1);
Fs = 1<span class="org-type">/</span>Ts;
win = hanning(ceil(1<span class="org-type">*</span>Fs));
</pre>
</div>
2020-07-24 13:06:02 +02:00
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<pre class="src src-matlab">[pxx, f] = pwelch(y, win, [], [], Fs);
[pht, <span class="org-type">~</span>] = pwelch(ht.y, win, [], [], Fs);
2020-07-24 13:06:02 +02:00
</pre>
</div>
2020-11-24 13:56:38 +01:00
<div id="org87d1b81" class="figure">
2020-11-24 09:25:05 +01:00
<p><img src="figs/apa95ml_5kg_PI_pdf_comp_huddle.png" alt="apa95ml_5kg_PI_pdf_comp_huddle.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 14: </span>Comparison of the ASD for the identification test and the huddle test</p>
2020-11-24 09:25:05 +01:00
</div>
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org89453e3" class="outline-3">
<h3 id="org89453e3"><span class="section-number-3">5.3</span> Compute TF estimate and Coherence</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-5-3">
<div class="org-src-container">
<pre class="src src-matlab">[tf_est, f] = tfestimate(um, <span class="org-type">-</span>y, win, [], [], 1<span class="org-type">/</span>Ts);
[co_est, <span class="org-type">~</span>] = mscohere( um, <span class="org-type">-</span>y, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
2020-11-24 13:56:38 +01:00
<div id="org69f52ac" class="figure">
2020-11-24 09:25:05 +01:00
<p><img src="figs/apa95ml_5kg_PI_coh.png" alt="apa95ml_5kg_PI_coh.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 15: </span>Coherence</p>
2020-11-24 09:25:05 +01:00
</div>
<p>
Comparison with the FEM model
</p>
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/fem_simscape_models.mat'</span>, <span class="org-string">'Ghm'</span>);
</pre>
</div>
2020-11-24 13:56:38 +01:00
<div id="orgac63fe3" class="figure">
<p><img src="figs/apa95ml_5kg_pi_comp_fem.png" alt="apa95ml_5kg_pi_comp_fem.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 16: </span>Comparison of the identified transfer function and the one estimated from the FE model</p>
2020-07-24 11:34:18 +02:00
</div>
</div>
</div>
</div>
2020-08-20 23:08:38 +02:00
2020-11-24 13:56:38 +01:00
<div id="outline-container-orgfff18d2" class="outline-2">
<h2 id="orgfff18d2"><span class="section-number-2">6</span> Identification of the dynamics from actuator to force sensor</h2>
2020-11-24 09:25:05 +01:00
<div class="outline-text-2" id="text-6">
<p>
2020-11-24 13:56:38 +01:00
<a id="org2eda6f2"></a>
</p>
2020-08-20 23:08:38 +02:00
<p>
Two measurements are performed:
</p>
<ul class="org-ul">
<li>Speedgoat DAC =&gt; Voltage Amplifier (x20) =&gt; 1 Piezo Stack =&gt; &#x2026; =&gt; 2 Stacks as Force Sensor (parallel) =&gt; Speedgoat ADC</li>
<li>Speedgoat DAC =&gt; Voltage Amplifier (x20) =&gt; 2 Piezo Stacks (parallel) =&gt; &#x2026; =&gt; 1 Stack as Force Sensor =&gt; 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>
2020-07-24 11:34:18 +02:00
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<pre class="src src-matlab">load(<span class="org-string">'apa95ml_5kg_2a_1s.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'u'</span>, <span class="org-string">'v'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">u = detrend(u, 0);
v = detrend(v, 0);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">u = 20<span class="org-type">*</span>u;
</pre>
</div>
<p>
2020-08-20 23:08:38 +02:00
Let&rsquo;s use the amplifier gain to obtain the true voltage applied to the actuator stack(s)
</p>
<p>
2020-08-20 23:08:38 +02:00
The parameters of the piezoelectric stacks are defined below:
</p>
2020-08-20 23:08:38 +02:00
<div class="org-src-container">
2020-11-03 10:11:21 +01:00
<pre class="src src-matlab">d33 = 3e<span class="org-type">-</span>10; <span class="org-comment">% Strain constant [m/V]</span>
n = 80; <span class="org-comment">% Number of layers per stack</span>
eT = 1.6e<span class="org-type">-</span>8; <span class="org-comment">% Permittivity under constant stress [F/m]</span>
sD = 2e<span class="org-type">-</span>11; <span class="org-comment">% Elastic compliance under constant electric displacement [m2/N]</span>
ka = 235e6; <span class="org-comment">% Stack stiffness [N/m]</span>
2020-08-20 23:08:38 +02:00
</pre>
</div>
<p>
2020-08-20 23:08:38 +02:00
From the FEM, we construct the transfer function from DAC voltage to ADC voltage.
</p>
<div class="org-src-container">
2020-11-03 10:11:21 +01:00
<pre class="src src-matlab">Gfem_aa_s = exp(<span class="org-type">-</span>s<span class="org-type">/</span>1e4)<span class="org-type">*</span>20<span class="org-type">*</span>(2<span class="org-type">*</span>d33<span class="org-type">*</span>n<span class="org-type">*</span>ka)<span class="org-type">*</span>(G(3,1)<span class="org-type">+</span>G(3,2))<span class="org-type">*</span>d33<span class="org-type">/</span>(eT<span class="org-type">*</span>sD<span class="org-type">*</span>n);
Gfem_a_ss = exp(<span class="org-type">-</span>s<span class="org-type">/</span>1e4)<span class="org-type">*</span>20<span class="org-type">*</span>( d33<span class="org-type">*</span>n<span class="org-type">*</span>ka)<span class="org-type">*</span>(G(3,1)<span class="org-type">+</span>G(2,1))<span class="org-type">*</span>d33<span class="org-type">/</span>(eT<span class="org-type">*</span>sD<span class="org-type">*</span>n);
2020-08-20 23:08:38 +02:00
</pre>
</div>
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">Gfem_aa_s = exp(<span class="org-type">-</span>s<span class="org-type">/</span>1e4)<span class="org-type">*</span>20<span class="org-type">*</span>(2<span class="org-type">*</span>d33<span class="org-type">*</span>n<span class="org-type">*</span>ka)<span class="org-type">*</span>Gfm<span class="org-type">*</span>d33<span class="org-type">/</span>(eT<span class="org-type">*</span>sD<span class="org-type">*</span>n);
Gfem_a_ss = exp(<span class="org-type">-</span>s<span class="org-type">/</span>1e4)<span class="org-type">*</span>20<span class="org-type">*</span>( d33<span class="org-type">*</span>n<span class="org-type">*</span>ka)<span class="org-type">*</span>Gfm<span class="org-type">*</span>d33<span class="org-type">/</span>(eT<span class="org-type">*</span>sD<span class="org-type">*</span>n);
</pre>
</div>
2020-08-20 23:08:38 +02:00
<p>
2020-11-24 13:56:38 +01:00
The transfer function from input voltage to output voltage are computed and shown in Figure <a href="#org157bd9b">17</a>.
2020-08-20 23:08:38 +02:00
</p>
2020-11-24 09:25:05 +01:00
2020-08-20 23:08:38 +02:00
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<pre class="src src-matlab">Ts = t(end)<span class="org-type">/</span>(length(t)<span class="org-type">-</span>1);
2020-11-03 10:11:21 +01:00
Fs = 1<span class="org-type">/</span>Ts;
2020-11-03 10:11:21 +01:00
win = hann(ceil(10<span class="org-type">/</span>Ts));
2020-08-20 23:08:38 +02:00
2020-11-24 09:25:05 +01:00
[tf_est, f] = tfestimate(u, v, win, [], [], 1<span class="org-type">/</span>Ts);
[coh, <span class="org-type">~</span>] = mscohere( u, v, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
2020-08-20 23:08:38 +02:00
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/fem_simscape_models.mat'</span>, <span class="org-string">'Gfm'</span>);
</pre>
</div>
2020-11-24 13:56:38 +01:00
<div id="org157bd9b" class="figure">
2020-08-20 23:08:38 +02:00
<p><img src="figs/bode_plot_force_sensor_voltage_comp_fem.png" alt="bode_plot_force_sensor_voltage_comp_fem.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 17: </span>Comparison of the identified dynamics from voltage output to voltage input and the FEM</p>
2020-08-20 23:08:38 +02:00
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-orgfa2171a" class="outline-3">
<h3 id="orgfa2171a"><span class="section-number-3">6.1</span> System Identification</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-6-1">
2020-08-20 23:08:38 +02:00
<div class="org-src-container">
2020-11-03 10:11:21 +01:00
<pre class="src src-matlab">w_z = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>111; <span class="org-comment">% Zeros frequency [rad/s]</span>
w_p = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>255; <span class="org-comment">% Pole frequency [rad/s]</span>
2020-08-20 23:08:38 +02:00
xi_z = 0.05;
xi_p = 0.015;
2020-11-24 09:25:05 +01:00
G_inf = 0.1;
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
Gi = G_inf<span class="org-type">*</span>(s<span class="org-type">^</span>2 <span class="org-type">-</span> 2<span class="org-type">*</span>xi_z<span class="org-type">*</span>w_z<span class="org-type">*</span>s <span class="org-type">+</span> w_z<span class="org-type">^</span>2)<span class="org-type">/</span>(s<span class="org-type">^</span>2 <span class="org-type">+</span> 2<span class="org-type">*</span>xi_p<span class="org-type">*</span>w_p<span class="org-type">*</span>s <span class="org-type">+</span> w_p<span class="org-type">^</span>2);
2020-08-20 23:08:38 +02:00
</pre>
</div>
2020-11-24 13:56:38 +01:00
<div id="orgf552545" class="figure">
2020-08-20 23:08:38 +02:00
<p><img src="figs/iff_plant_identification_apa95ml.png" alt="iff_plant_identification_apa95ml.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 18: </span>Identification of the IFF plant</p>
2020-08-20 23:08:38 +02:00
</div>
</div>
</div>
2020-08-20 23:08:38 +02:00
2020-11-24 13:56:38 +01:00
<div id="outline-container-org633e9f1" class="outline-3">
<h3 id="org633e9f1"><span class="section-number-3">6.2</span> Integral Force Feedback</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-6-2">
2020-08-20 23:08:38 +02:00
2020-11-24 13:56:38 +01:00
<div id="orgca6756f" class="figure">
2020-08-20 23:08:38 +02:00
<p><img src="figs/root_locus_iff_apa95ml_identification.png" alt="root_locus_iff_apa95ml_identification.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 19: </span>Root Locus for IFF</p>
2020-08-20 23:08:38 +02:00
</div>
</div>
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org1bf58e2" class="outline-2">
<h2 id="org1bf58e2"><span class="section-number-2">7</span> Integral Force Feedback</h2>
2020-11-24 09:25:05 +01:00
<div class="outline-text-2" id="text-7">
<p>
2020-11-24 13:56:38 +01:00
<a id="org6db5225"></a>
</p>
2020-11-24 09:25:05 +01:00
2020-11-24 13:56:38 +01:00
<div id="org86a6667" class="figure">
2020-11-24 09:25:05 +01:00
<p><img src="figs/test_bench_apa_schematic_iff.png" alt="test_bench_apa_schematic_iff.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 20: </span>Schematic of the test bench using IFF</p>
2020-08-20 23:08:38 +02:00
</div>
2020-11-24 09:25:05 +01:00
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org25092d8" class="outline-3">
<h3 id="org25092d8"><span class="section-number-3">7.1</span> First tests with few gains</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-7-1">
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<pre class="src src-matlab">iff_g10 = load(<span class="org-string">'apa95ml_iff_g10_res.mat'</span>, <span class="org-string">'u'</span>, <span class="org-string">'t'</span>, <span class="org-string">'y'</span>, <span class="org-string">'v'</span>);
iff_g100 = load(<span class="org-string">'apa95ml_iff_g100_res.mat'</span>, <span class="org-string">'u'</span>, <span class="org-string">'t'</span>, <span class="org-string">'y'</span>, <span class="org-string">'v'</span>);
2020-11-24 09:25:05 +01:00
iff_of = load(<span class="org-string">'apa95ml_iff_off_res.mat'</span>, <span class="org-string">'u'</span>, <span class="org-string">'t'</span>, <span class="org-string">'y'</span>, <span class="org-string">'v'</span>);
</pre>
</div>
2020-08-20 23:08:38 +02:00
<div class="org-src-container">
2020-11-03 10:11:21 +01:00
<pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
win = hann(ceil(10<span class="org-type">/</span>Ts));
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
[tf_iff_g10, f] = tfestimate(iff_g10.u, iff_g10.y, win, [], [], 1<span class="org-type">/</span>Ts);
[co_iff_g10, <span class="org-type">~</span>] = mscohere(iff_g10.u, iff_g10.y, win, [], [], 1<span class="org-type">/</span>Ts);
2020-08-20 23:08:38 +02:00
2020-11-24 09:25:05 +01:00
[tf_iff_g100, <span class="org-type">~</span>] = tfestimate(iff_g100.u, iff_g100.y, win, [], [], 1<span class="org-type">/</span>Ts);
2020-11-03 10:11:21 +01:00
[co_iff_g100, <span class="org-type">~</span>] = mscohere(iff_g100.u, iff_g100.y, win, [], [], 1<span class="org-type">/</span>Ts);
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
[tf_iff_of, <span class="org-type">~</span>] = tfestimate(iff_of.u, iff_of.y, win, [], [], 1<span class="org-type">/</span>Ts);
[co_iff_of, <span class="org-type">~</span>] = mscohere(iff_of.u, iff_of.y, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
2020-08-20 23:08:38 +02:00
</div>
2020-07-24 15:48:22 +02:00
2020-08-21 15:26:45 +02:00
2020-11-24 13:56:38 +01:00
<div id="org2da6c81" class="figure">
2020-08-21 15:26:45 +02:00
<p><img src="figs/iff_first_test_coherence.png" alt="iff_first_test_coherence.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 21: </span>Coherence</p>
2020-08-21 15:26:45 +02:00
</div>
2020-11-24 13:56:38 +01:00
<div id="org407e7b6" class="figure">
2020-08-21 15:26:45 +02:00
<p><img src="figs/iff_first_test_bode_plot.png" alt="iff_first_test_bode_plot.png" />
</p>
2020-11-24 13:56:38 +01:00
<p><span class="figure-number">Figure 22: </span>Bode plot for different values of IFF gain</p>
2020-08-21 15:26:45 +02:00
</div>
</div>
</div>
2020-11-24 13:56:38 +01:00
<div id="outline-container-org67fa466" class="outline-3">
<h3 id="org67fa466"><span class="section-number-3">7.2</span> Second test with many Gains</h3>
2020-11-24 09:25:05 +01:00
<div class="outline-text-3" id="text-7-2">
2020-08-20 23:08:38 +02:00
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'apa95ml_iff_test.mat'</span>, <span class="org-string">'results'</span>);
2020-08-20 23:08:38 +02:00
</pre>
</div>
2020-07-24 15:48:22 +02:00
2020-08-21 15:26:45 +02:00
<div class="org-src-container">
2020-11-03 10:11:21 +01:00
<pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
win = hann(ceil(10<span class="org-type">/</span>Ts));
2020-08-21 15:26:45 +02:00
</pre>
</div>
2020-08-20 23:08:38 +02:00
2020-08-21 15:26:45 +02:00
<div class="org-src-container">
<pre class="src src-matlab">tf_iff = {zeros(1, length(results))};
co_iff = {zeros(1, length(results))};
g_iff = [0, 1, 5, 10, 50, 100];
2020-11-03 10:11:21 +01:00
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span>=<span class="org-constant">1:length(results)</span>
[tf_est, f] = tfestimate(results{<span class="org-constant">i</span>}.u, results{<span class="org-constant">i</span>}.y, win, [], [], 1<span class="org-type">/</span>Ts);
[co_est, <span class="org-type">~</span>] = mscohere(results{<span class="org-constant">i</span>}.u, results{<span class="org-constant">i</span>}.y, win, [], [], 1<span class="org-type">/</span>Ts);
2020-08-21 15:26:45 +02:00
2020-11-03 10:11:21 +01:00
tf_iff(<span class="org-constant">i</span>) = {tf_est};
co_iff(<span class="org-constant">i</span>) = {co_est};
<span class="org-keyword">end</span>
2020-08-21 15:26:45 +02:00
</pre>
2020-08-20 23:08:38 +02:00
</div>
2020-11-24 13:56:38 +01:00
<div id="orgfa8bc3c" class="figure">
2020-08-21 15:26:45 +02:00
<p><img src="figs/iff_results_bode_plots.png" alt="iff_results_bode_plots.png" />
</p>
</div>
2020-08-20 23:08:38 +02:00
<div class="org-src-container">
2020-08-21 15:26:45 +02:00
<pre class="src src-matlab">G_id = {zeros(1,length(results))};
2020-11-03 10:11:21 +01:00
f_start = 70; <span class="org-comment">% [Hz]</span>
f_end = 500; <span class="org-comment">% [Hz]</span>
2020-08-21 15:26:45 +02:00
2020-11-03 10:11:21 +01:00
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(results)</span>
tf_id = tf_iff{<span class="org-constant">i</span>}(sum(f<span class="org-type">&lt;</span>f_start)<span class="org-type">:</span>length(f)<span class="org-type">-</span>sum(f<span class="org-type">&gt;</span>f_end));
f_id = f(sum(f<span class="org-type">&lt;</span>f_start)<span class="org-type">:</span>length(f)<span class="org-type">-</span>sum(f<span class="org-type">&gt;</span>f_end));
2020-08-21 15:26:45 +02:00
2020-11-03 10:11:21 +01:00
gfr = idfrd(tf_id, 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>f_id, Ts);
G_id(<span class="org-constant">i</span>) = {procest(gfr,<span class="org-string">'P2UDZ'</span>)};
<span class="org-keyword">end</span>
2020-08-20 23:08:38 +02:00
</pre>
</div>
2020-11-24 13:56:38 +01:00
<div id="org62b4b70" class="figure">
2020-08-21 15:26:45 +02:00
<p><img src="figs/iff_results_bode_plots_identification.png" alt="iff_results_bode_plots_identification.png" />
</p>
</div>
2020-11-24 13:56:38 +01:00
<div id="org49a571f" class="figure">
2020-08-21 15:26:45 +02:00
<p><img src="figs/iff_results_root_locus.png" alt="iff_results_root_locus.png" />
2020-08-20 23:08:38 +02:00
</p>
</div>
2020-11-24 09:25:05 +01:00
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><h2 class='citeproc-org-bib-h2'>Bibliography</h2>
<div class="csl-bib-body">
<div class="csl-entry"><a name="citeproc_bib_item_1"></a>Fleming, Andrew J., and Kam K. Leang. 2014. <i>Design, Modeling and Control of Nanopositioning Systems</i>. Advances in Industrial Control. Springer International Publishing. <a href="https://doi.org/10.1007/978-3-319-06617-2">https://doi.org/10.1007/978-3-319-06617-2</a>.</div>
</div>
</div>
</div>
</div>
2020-07-17 11:56:08 +02:00
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
2020-11-24 13:56:38 +01:00
<p class="date">Created: 2020-11-24 mar. 13:54</p>
2020-07-17 11:56:08 +02:00
</div>
</body>
</html>