test-bench-apa/index.html

1490 lines
51 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 09:25:05 +01:00
<!-- 2020-11-24 mar. 09:17 -->
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 09:25:05 +01:00
<li><a href="#orgc4c0530">1. Experimental Setup</a></li>
<li><a href="#org183be58">2. Simscape model of the test-bench</a>
2020-07-20 11:27:55 +02:00
<ul>
2020-11-24 09:25:05 +01:00
<li><a href="#org20fb5bc">2.1. Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates</a></li>
<li><a href="#orgab92d82">2.2. Piezoelectric parameters</a></li>
<li><a href="#org1e19572">2.3. Simscape Model</a></li>
<li><a href="#org11529ce">2.4. Dynamics from Actuator Voltage to Vertical Mass Displacement</a></li>
<li><a href="#org5ec7542">2.5. Dynamics from Actuator Voltage to Force Sensor Voltage</a></li>
<li><a href="#org79c3481">2.6. Save Data for further use</a></li>
2020-07-20 11:27:55 +02:00
</ul>
</li>
2020-11-24 09:25:05 +01:00
<li><a href="#org617c8e4">3. Estimation of piezoelectric parameters</a>
2020-07-20 11:27:55 +02:00
<ul>
2020-11-24 09:25:05 +01:00
<li><a href="#org5acfd7d">3.1. From actuator voltage to vertical displacement</a></li>
<li><a href="#orgf69a05f">3.2. From actuator voltage to sensor Voltage</a></li>
2020-07-20 11:27:55 +02:00
</ul>
</li>
2020-11-24 09:25:05 +01:00
<li><a href="#org6fea521">4. Huddle Test</a>
2020-07-20 11:27:55 +02:00
<ul>
2020-11-24 09:25:05 +01:00
<li><a href="#orgb90293f">4.1. Time Domain Data</a></li>
<li><a href="#org39a275e">4.2. PSD of Measurement Noise</a></li>
2020-07-20 11:27:55 +02:00
</ul>
</li>
2020-11-24 09:25:05 +01:00
<li><a href="#orga75cae8">5. Identification of the dynamics from actuator to displacement</a>
2020-07-20 11:27:55 +02:00
<ul>
2020-11-24 09:25:05 +01:00
<li><a href="#orgbb817fa">5.1. Load Data</a></li>
<li><a href="#org25be4e7">5.2. Comparison of the PSD with Huddle Test</a></li>
<li><a href="#orge752956">5.3. Compute TF estimate and Coherence</a></li>
</ul>
</li>
<li><a href="#org118320d">6. Identification of the dynamics from actuator to force sensor</a>
<ul>
<li><a href="#org0fa0dae">6.1. System Identification</a></li>
<li><a href="#orgc707675">6.2. Integral Force Feedback</a></li>
</ul>
</li>
<li><a href="#org151d290">7. Integral Force Feedback</a>
<ul>
<li><a href="#org306bfe8">7.1. First tests with few gains</a></li>
<li><a href="#orgf61b4aa">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">
<li>Section <a href="#org372a242">1</a>:</li>
<li>Section <a href="#orgd221e9c">2</a>:</li>
<li>Section [[]]:</li>
<li>Section [[]]:</li>
<li>Section [[]]:</li>
</ul>
<div id="outline-container-orgc4c0530" class="outline-2">
<h2 id="orgc4c0530"><span class="section-number-2">1</span> Experimental Setup</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org372a242"></a>
</p>
<p>
A schematic of the test-bench is shown in Figure <a href="#org32052ab">1</a>.
</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>
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="#org2dd750f">2</a> and <a href="#org741bee2">3</a>.
</p>
<div id="org32052ab" 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>
2020-07-20 13:17:34 +02:00
2020-11-24 09:25:05 +01:00
<div id="org2dd750f" class="figure">
2020-07-20 13:17:34 +02:00
<p><img src="figs/setup_picture.png" alt="setup_picture.png" />
</p>
2020-11-24 09:25:05 +01:00
<p><span class="figure-number">Figure 2: </span>Picture of the Setup</p>
2020-07-20 13:17:34 +02:00
</div>
2020-11-24 09:25:05 +01:00
<div id="org741bee2" class="figure">
2020-07-20 13:17:34 +02:00
<p><img src="figs/setup_zoom.png" alt="setup_zoom.png" />
</p>
2020-11-24 09:25:05 +01:00
<p><span class="figure-number">Figure 3: </span>Zoom on the APA</p>
2020-07-20 13:17:34 +02:00
</div>
2020-11-24 09:25:05 +01:00
<div class="note" id="orgdcaab8f">
<p>
2020-11-24 09:25:05 +01:00
Here are the equipment used in the test bench:
</p>
2020-11-24 09:25:05 +01:00
<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>
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
<div id="outline-container-org183be58" class="outline-2">
<h2 id="org183be58"><span class="section-number-2">2</span> Simscape model of the test-bench</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orgd221e9c"></a>
</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>
To model the APA, a Finite Element Model (FEM) is used and imported into Simscape.
</p>
</div>
<div id="outline-container-org20fb5bc" class="outline-3">
<h3 id="org20fb5bc"><span class="section-number-3">2.1</span> Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates</h3>
<div class="outline-text-3" id="text-2-1">
<p>
We first extract the stiffness and mass matrices.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K = extractMatrix(<span class="org-string">'APA95ML_K.txt'</span>);
M = extractMatrix(<span class="org-string">'APA95ML_M.txt'</span>);
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> First 10x10 elements of the Stiffness matrix</caption>
<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>
<td class="org-right">-30000.0</td>
<td class="org-right">8000.0</td>
<td class="org-right">-200.0</td>
<td class="org-right">-30.0</td>
<td class="org-right">-60000.0</td>
<td class="org-right">20000000.0</td>
<td class="org-right">-4000.0</td>
<td class="org-right">500.0</td>
<td class="org-right">8</td>
</tr>
<tr>
<td class="org-right">-30000.0</td>
<td class="org-right">100000000.0</td>
<td class="org-right">400.0</td>
<td class="org-right">30.0</td>
<td class="org-right">200.0</td>
<td class="org-right">-1</td>
<td class="org-right">4000.0</td>
<td class="org-right">-8000000.0</td>
<td class="org-right">800.0</td>
<td class="org-right">7</td>
</tr>
<tr>
<td class="org-right">8000.0</td>
<td class="org-right">400.0</td>
<td class="org-right">50000000.0</td>
<td class="org-right">-800000.0</td>
<td class="org-right">-300.0</td>
<td class="org-right">-40.0</td>
<td class="org-right">300.0</td>
<td class="org-right">100.0</td>
<td class="org-right">5000000.0</td>
<td class="org-right">40000.0</td>
</tr>
<tr>
<td class="org-right">-200.0</td>
<td class="org-right">30.0</td>
<td class="org-right">-800000.0</td>
<td class="org-right">20000.0</td>
<td class="org-right">5</td>
<td class="org-right">1</td>
<td class="org-right">-10.0</td>
<td class="org-right">-2</td>
<td class="org-right">-40000.0</td>
<td class="org-right">-300.0</td>
</tr>
<tr>
<td class="org-right">-30.0</td>
<td class="org-right">200.0</td>
<td class="org-right">-300.0</td>
<td class="org-right">5</td>
<td class="org-right">40000.0</td>
<td class="org-right">0.3</td>
<td class="org-right">-4</td>
<td class="org-right">-10.0</td>
<td class="org-right">40.0</td>
<td class="org-right">0.4</td>
</tr>
<tr>
<td class="org-right">-60000.0</td>
<td class="org-right">-1</td>
<td class="org-right">-40.0</td>
<td class="org-right">1</td>
<td class="org-right">0.3</td>
<td class="org-right">3000.0</td>
<td class="org-right">7000.0</td>
<td class="org-right">0.8</td>
<td class="org-right">-1</td>
<td class="org-right">0.0003</td>
</tr>
<tr>
<td class="org-right">20000000.0</td>
<td class="org-right">4000.0</td>
<td class="org-right">300.0</td>
<td class="org-right">-10.0</td>
<td class="org-right">-4</td>
<td class="org-right">7000.0</td>
<td class="org-right">300000000.0</td>
<td class="org-right">20000.0</td>
<td class="org-right">3000.0</td>
<td class="org-right">80.0</td>
</tr>
<tr>
<td class="org-right">-4000.0</td>
<td class="org-right">-8000000.0</td>
<td class="org-right">100.0</td>
<td class="org-right">-2</td>
<td class="org-right">-10.0</td>
<td class="org-right">0.8</td>
<td class="org-right">20000.0</td>
<td class="org-right">100000000.0</td>
<td class="org-right">-4000.0</td>
<td class="org-right">-100.0</td>
</tr>
<tr>
<td class="org-right">500.0</td>
<td class="org-right">800.0</td>
<td class="org-right">5000000.0</td>
<td class="org-right">-40000.0</td>
<td class="org-right">40.0</td>
<td class="org-right">-1</td>
<td class="org-right">3000.0</td>
<td class="org-right">-4000.0</td>
<td class="org-right">50000000.0</td>
<td class="org-right">800000.0</td>
</tr>
<tr>
<td class="org-right">8</td>
<td class="org-right">7</td>
<td class="org-right">40000.0</td>
<td class="org-right">-300.0</td>
<td class="org-right">0.4</td>
<td class="org-right">0.0003</td>
<td class="org-right">80.0</td>
<td class="org-right">-100.0</td>
<td class="org-right">800000.0</td>
<td class="org-right">20000.0</td>
</tr>
</tbody>
</table>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> First 10x10 elements of the Mass matrix</caption>
<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>
<td class="org-right">2e-06</td>
<td class="org-right">-2e-07</td>
<td class="org-right">1e-08</td>
<td class="org-right">2e-08</td>
<td class="org-right">0.0002</td>
<td class="org-right">-0.001</td>
<td class="org-right">2e-07</td>
<td class="org-right">-8e-08</td>
<td class="org-right">-9e-10</td>
</tr>
<tr>
<td class="org-right">2e-06</td>
<td class="org-right">0.02</td>
<td class="org-right">-5e-07</td>
<td class="org-right">7e-09</td>
<td class="org-right">3e-08</td>
<td class="org-right">2e-08</td>
<td class="org-right">-3e-07</td>
<td class="org-right">0.0003</td>
<td class="org-right">-1e-08</td>
<td class="org-right">1e-10</td>
</tr>
<tr>
<td class="org-right">-2e-07</td>
<td class="org-right">-5e-07</td>
<td class="org-right">0.02</td>
<td class="org-right">-9e-05</td>
<td class="org-right">4e-09</td>
<td class="org-right">-1e-08</td>
<td class="org-right">2e-07</td>
<td class="org-right">-2e-08</td>
<td class="org-right">-0.0006</td>
<td class="org-right">-5e-06</td>
</tr>
<tr>
<td class="org-right">1e-08</td>
<td class="org-right">7e-09</td>
<td class="org-right">-9e-05</td>
<td class="org-right">1e-06</td>
<td class="org-right">6e-11</td>
<td class="org-right">4e-10</td>
<td class="org-right">-1e-09</td>
<td class="org-right">3e-11</td>
<td class="org-right">5e-06</td>
<td class="org-right">3e-08</td>
</tr>
<tr>
<td class="org-right">2e-08</td>
<td class="org-right">3e-08</td>
<td class="org-right">4e-09</td>
<td class="org-right">6e-11</td>
<td class="org-right">1e-06</td>
<td class="org-right">2e-10</td>
<td class="org-right">-2e-09</td>
<td class="org-right">2e-10</td>
<td class="org-right">-7e-09</td>
<td class="org-right">-4e-11</td>
</tr>
<tr>
<td class="org-right">0.0002</td>
<td class="org-right">2e-08</td>
<td class="org-right">-1e-08</td>
<td class="org-right">4e-10</td>
<td class="org-right">2e-10</td>
<td class="org-right">2e-06</td>
<td class="org-right">-2e-06</td>
<td class="org-right">-1e-09</td>
<td class="org-right">-7e-10</td>
<td class="org-right">-9e-12</td>
</tr>
<tr>
<td class="org-right">-0.001</td>
<td class="org-right">-3e-07</td>
<td class="org-right">2e-07</td>
<td class="org-right">-1e-09</td>
<td class="org-right">-2e-09</td>
<td class="org-right">-2e-06</td>
<td class="org-right">0.03</td>
<td class="org-right">-2e-06</td>
<td class="org-right">-1e-07</td>
<td class="org-right">-5e-09</td>
</tr>
<tr>
<td class="org-right">2e-07</td>
<td class="org-right">0.0003</td>
<td class="org-right">-2e-08</td>
<td class="org-right">3e-11</td>
<td class="org-right">2e-10</td>
<td class="org-right">-1e-09</td>
<td class="org-right">-2e-06</td>
<td class="org-right">0.02</td>
<td class="org-right">-8e-07</td>
<td class="org-right">-1e-08</td>
</tr>
<tr>
<td class="org-right">-8e-08</td>
<td class="org-right">-1e-08</td>
<td class="org-right">-0.0006</td>
<td class="org-right">5e-06</td>
<td class="org-right">-7e-09</td>
<td class="org-right">-7e-10</td>
<td class="org-right">-1e-07</td>
<td class="org-right">-8e-07</td>
<td class="org-right">0.02</td>
<td class="org-right">9e-05</td>
</tr>
<tr>
<td class="org-right">-9e-10</td>
<td class="org-right">1e-10</td>
<td class="org-right">-5e-06</td>
<td class="org-right">3e-08</td>
<td class="org-right">-4e-11</td>
<td class="org-right">-9e-12</td>
<td class="org-right">-5e-09</td>
<td class="org-right">-1e-08</td>
<td class="org-right">9e-05</td>
<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
<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>
<td class="org-right">168959</td>
</tr>
<tr>
<td class="org-left">Number of interface Nodes</td>
<td class="org-right">13</td>
</tr>
<tr>
<td class="org-left">Number of Modes</td>
<td class="org-right">30</td>
</tr>
<tr>
<td class="org-left">Size of M and K matrices</td>
<td class="org-right">108</td>
</tr>
</tbody>
</table>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 3:</span> Coordinates of the interface nodes</caption>
<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>
<td class="org-right">168947.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.03</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">2.0</td>
<td class="org-right">168949.0</td>
<td class="org-right">0.0</td>
<td class="org-right">-0.03</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">3.0</td>
<td class="org-right">168950.0</td>
<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>
<td class="org-right">168951.0</td>
<td class="org-right">-0.028</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">5.0</td>
<td class="org-right">168952.0</td>
<td class="org-right">-0.021</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">6.0</td>
<td class="org-right">168953.0</td>
<td class="org-right">-0.014</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">7.0</td>
<td class="org-right">168954.0</td>
<td class="org-right">-0.007</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">8.0</td>
<td class="org-right">168955.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">9.0</td>
<td class="org-right">168956.0</td>
<td class="org-right">0.007</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">10.0</td>
<td class="org-right">168957.0</td>
<td class="org-right">0.014</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">11.0</td>
<td class="org-right">168958.0</td>
<td class="org-right">0.021</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
<tr>
<td class="org-right">12.0</td>
<td class="org-right">168959.0</td>
<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">13.0</td>
<td class="org-right">168960.0</td>
<td class="org-right">0.028</td>
<td class="org-right">0.0</td>
<td class="org-right">0.0</td>
</tr>
</tbody>
</table>
<p>
Using <code>K</code>, <code>M</code> and <code>int_xyz</code>, we can use the <code>Reduced Order Flexible Solid</code> simscape block.
</p>
2020-07-17 11:56:08 +02:00
</div>
</div>
2020-11-24 09:25:05 +01:00
<div id="outline-container-orgab92d82" class="outline-3">
<h3 id="orgab92d82"><span class="section-number-3">2.2</span> Piezoelectric parameters</h3>
<div class="outline-text-3" id="text-2-2">
<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>
2020-07-17 11:56:08 +02:00
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<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 = 1.6e<span class="org-type">-</span>8; <span class="org-comment">% Permittivity under constant stress [F/m]</span>
sD = 1e<span class="org-type">-</span>11; <span class="org-comment">% Compliance under constant electric displacement [m2/N]</span>
ka = 235e6; <span class="org-comment">% Stack stiffness [N/m]</span>
C = 5e<span class="org-type">-</span>6; <span class="org-comment">% Stack capactiance [F]</span>
</pre>
</div>
2020-07-20 11:27:55 +02:00
2020-11-24 09:25:05 +01:00
<p>
The ratio of the developed force to applied voltage is:
</p>
\begin{equation}
\label{org1eea105}
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">d33<span class="org-type">*</span>n<span class="org-type">*</span>ka <span class="org-comment">% [N/V]</span>
2020-07-20 11:27:55 +02:00
</pre>
</div>
2020-07-17 11:56:08 +02:00
2020-11-24 09:25:05 +01:00
<pre class="example">
5.64
</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{org7e93246}
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>
2020-07-20 11:27:55 +02:00
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<pre class="src src-matlab">1e<span class="org-type">-</span>6<span class="org-type">*</span>d33<span class="org-type">/</span>(eT<span class="org-type">*</span>sD<span class="org-type">*</span>n) <span class="org-comment">% [V/um]</span>
2020-07-17 11:56:08 +02:00
</pre>
</div>
2020-07-20 11:27:55 +02:00
2020-11-24 09:25:05 +01:00
<pre class="example">
23.438
</pre>
</div>
</div>
2020-07-20 11:27:55 +02:00
2020-11-24 09:25:05 +01:00
<div id="outline-container-org1e19572" class="outline-3">
<h3 id="org1e19572"><span class="section-number-3">2.3</span> Simscape Model</h3>
<div class="outline-text-3" id="text-2-3">
<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>
<ul class="org-ul">
<li class="off"><code>[&#xa0;]</code> Add schematic of the model with interface nodes</li>
</ul>
<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>
<div id="outline-container-org11529ce" class="outline-3">
<h3 id="org11529ce"><span class="section-number-3">2.4</span> Dynamics from Actuator Voltage to Vertical Mass Displacement</h3>
<div class="outline-text-3" id="text-2-4">
<p>
The identified dynamics is shown in Figure <a href="#org053599a">4</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
<div id="org053599a" class="figure">
<p><img src="figs/dynamics_act_disp_comp_mass.png" alt="dynamics_act_disp_comp_mass.png" />
</p>
<p><span class="figure-number">Figure 4: </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 09:25:05 +01:00
<div id="outline-container-org5ec7542" class="outline-3">
<h3 id="org5ec7542"><span class="section-number-3">2.5</span> Dynamics from Actuator Voltage to Force Sensor Voltage</h3>
<div class="outline-text-3" id="text-2-5">
<p>
2020-11-24 09:25:05 +01:00
The obtained dynamics is shown in Figure <a href="#org7c4ec16">5</a>.
</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>
<div id="org7c4ec16" class="figure">
<p><img src="figs/dynamics_force_force_sensor_comp_mass.png" alt="dynamics_force_force_sensor_comp_mass.png" />
</p>
2020-11-24 09:25:05 +01:00
<p><span class="figure-number">Figure 5: </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>
<div id="outline-container-org79c3481" class="outline-3">
<h3 id="org79c3481"><span class="section-number-3">2.6</span> Save Data for further use</h3>
<div class="outline-text-3" id="text-2-6">
<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 09:25:05 +01:00
<div id="outline-container-org617c8e4" class="outline-2">
<h2 id="org617c8e4"><span class="section-number-2">3</span> Estimation of piezoelectric parameters</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-org5acfd7d" class="outline-3">
<h3 id="org5acfd7d"><span class="section-number-3">3.1</span> From actuator voltage to vertical displacement</h3>
<div class="outline-text-3" id="text-3-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">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>);
2020-08-20 23:08:38 +02:00
</pre>
</div>
2020-11-24 09:25:05 +01:00
<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">% Amplifier Input Voltage [V]</span>
y = detrend(y , 0); <span class="org-comment">% Mass displacement [m]</span>
</pre>
2020-08-20 23:08:38 +02:00
</div>
2020-11-24 09:25:05 +01:00
<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; <span class="org-comment">% Stack Actuator Input Voltage [V]</span>
</pre>
2020-08-20 23:08:38 +02:00
</div>
<div class="org-src-container">
2020-11-03 10:11:21 +01:00
<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;
2020-11-03 10:11:21 +01:00
win = hanning(ceil(1<span class="org-type">*</span>Fs));
2020-07-24 11:34:18 +02:00
</pre>
</div>
<div class="org-src-container">
2020-11-24 09:25:05 +01:00
<pre class="src src-matlab">[tf_est, f] = tfestimate(um, y, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
2020-07-24 11:34:18 +02:00
2020-11-24 09:25:05 +01:00
<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">gD = 4e<span class="org-type">-</span>7; <span class="org-comment">% [m/V]</span>
</pre>
</div>
2020-07-24 11:34:18 +02:00
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">K = extractMatrix(<span class="org-string">'APA95ML_K.txt'</span>);
M = extractMatrix(<span class="org-string">'APA95ML_M.txt'</span>);
[int_xyz, int_i, n_xyz, n_i, nodes] = extractNodes(<span class="org-string">'APA95ML_out_nodes_3D.txt'</span>);
</pre>
</div>
<p>
Define parameters just for the simulation. Should not change any results
2020-07-24 11:34:18 +02:00
</p>
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">d33 = 1; <span class="org-comment">% Strain constant [m/V]</span>
n = 1; <span class="org-comment">% Number of layers per stack</span>
eT = 1; <span class="org-comment">% Permittivity under constant stress [F/m]</span>
sD = 1; <span class="org-comment">% Compliance under constant electric displacement [m2/N]</span>
ka = 1; <span class="org-comment">% Stack stiffness [N/m]</span>
C = 1; <span class="org-comment">% Stack capactiance [F]</span>
</pre>
</div>
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">m = 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>
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">gF = abs(dcgain(Gd)); <span class="org-comment">% [m/N]</span>
<span class="org-constant">ans</span> = gF
</pre>
</div>
<pre class="example">
6.1695e-09
</pre>
<p>
\[ g_a = g_D/g_F \]
in [N/V]
</p>
<div class="org-src-container">
<pre class="src src-matlab">ga = gD<span class="org-type">/</span>gF
<span class="org-constant">ans</span> = ga
</pre>
</div>
<pre class="example">
64.835
</pre>
<div class="org-src-container">
<pre class="src src-matlab">na = 2; ns = 1; d33 = 300e<span class="org-type">-</span>12; n = 80; ka = 235e6; gL = 1.7;
na<span class="org-type">/</span>(na<span class="org-type">+</span>ns)<span class="org-type">*</span>gL<span class="org-type">*</span>d33<span class="org-type">*</span>n<span class="org-type">*</span>ka
</pre>
</div>
<pre class="example">
6.392
</pre>
<ul class="org-ul">
<li class="off"><code>[&#xa0;]</code> Why is there a factor 10 with the &ldquo;theoretical estimation?&rdquo;</li>
</ul>
</div>
</div>
<div id="outline-container-orgf69a05f" class="outline-3">
<h3 id="orgf69a05f"><span class="section-number-3">3.2</span> From actuator voltage to sensor Voltage</h3>
<div class="outline-text-3" id="text-3-2">
<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>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">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>
<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>
2020-07-24 11:34:18 +02:00
<div class="org-src-container">
2020-11-03 10:11:21 +01:00
<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;
2020-11-24 09:25:05 +01:00
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>
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">gV = 0.022; <span class="org-comment">% [V/V]</span>
</pre>
</div>
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">m = 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">'/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);
2020-07-24 11:34:18 +02:00
</pre>
</div>
2020-11-24 09:25:05 +01:00
<p>
\(g_F\) in [m/N]
</p>
<div class="org-src-container">
<pre class="src src-matlab">gF = abs(dcgain(Gf));
<span class="org-constant">ans</span> = gF
</pre>
</div>
2020-07-24 11:34:18 +02:00
2020-11-24 09:25:05 +01:00
<pre class="example">
2.1546e-10
</pre>
<p>
Finally, we compute the gain from strain of the sensor stack to its generated voltage:
\[ g_S = \frac{g_V}{g_F g_a} \]
Gs in [V/m]
2020-07-24 11:34:18 +02:00
</p>
2020-11-24 09:25:05 +01:00
<div class="org-src-container">
<pre class="src src-matlab">gS = gV<span class="org-type">/</span>gF<span class="org-type">/</span>ga;
<span class="org-constant">ans</span> = gS
</pre>
</div>
<pre class="example">
15749000.0
</pre>
<div class="org-src-container">
<pre class="src src-matlab">d33 = 300e<span class="org-type">-</span>12; eT = 5.3e<span class="org-type">-</span>9; sD = 2e<span class="org-type">-</span>11; n = 80;
d33<span class="org-type">/</span>(eT<span class="org-type">*</span>sD<span class="org-type">*</span>n)
</pre>
2020-07-24 11:34:18 +02:00
</div>
2020-11-24 09:25:05 +01:00
<pre class="example">
35377000.0
</pre>
</div>
</div>
</div>
2020-07-24 11:34:18 +02:00
2020-11-24 09:25:05 +01:00
<div id="outline-container-org6fea521" class="outline-2">
<h2 id="org6fea521"><span class="section-number-2">4</span> Huddle Test</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="orgd056af6"></a>
2020-07-24 11:34:18 +02:00
</p>
2020-11-24 09:25:05 +01:00
</div>
<div id="outline-container-orgb90293f" class="outline-3">
<h3 id="orgb90293f"><span class="section-number-3">4.1</span> Time Domain Data</h3>
<div class="outline-text-3" id="text-4-1">
<div id="org27ab62f" class="figure">
<p><img src="figs/huddle_test_time_domain.png" alt="huddle_test_time_domain.png" />
</p>
<p><span class="figure-number">Figure 6: </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 09:25:05 +01:00
<div id="outline-container-org39a275e" class="outline-3">
<h3 id="org39a275e"><span class="section-number-3">4.2</span> PSD of Measurement Noise</h3>
<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>
<div id="orgeed9e1c" class="figure">
<p><img src="figs/huddle_test_pdf.png" alt="huddle_test_pdf.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Amplitude Spectral Density of the Displacement during Huddle Test</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orga75cae8" class="outline-2">
<h2 id="orga75cae8"><span class="section-number-2">5</span> Identification of the dynamics from actuator to displacement</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="org82aef55"></a>
</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>
<div id="outline-container-orgbb817fa" class="outline-3">
<h3 id="orgbb817fa"><span class="section-number-3">5.1</span> Load Data</h3>
<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>
<div id="outline-container-org25be4e7" class="outline-3">
<h3 id="org25be4e7"><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)<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 09:25:05 +01:00
<div id="org75c4ea8" class="figure">
<p><img src="figs/apa95ml_5kg_PI_pdf_comp_huddle.png" alt="apa95ml_5kg_PI_pdf_comp_huddle.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Comparison of the ASD for the identification test and the huddle test</p>
</div>
</div>
</div>
<div id="outline-container-orge752956" class="outline-3">
<h3 id="orge752956"><span class="section-number-3">5.3</span> Compute TF estimate and Coherence</h3>
<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>
<div id="org7730d40" class="figure">
<p><img src="figs/apa95ml_5kg_PI_coh.png" alt="apa95ml_5kg_PI_coh.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Coherence</p>
</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>
<div id="orgc4a77f0" class="figure">
<p><img src="figs/apa95ml_5kg_pi_comp_fem.png" alt="apa95ml_5kg_pi_comp_fem.png" />
</p>
2020-11-24 09:25:05 +01:00
<p><span class="figure-number">Figure 10: </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 09:25:05 +01:00
<div id="outline-container-org118320d" class="outline-2">
<h2 id="org118320d"><span class="section-number-2">6</span> Identification of the dynamics from actuator to force sensor</h2>
<div class="outline-text-2" id="text-6">
<p>
2020-11-24 09:25:05 +01:00
<a id="org855bdfa"></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 09:25:05 +01:00
The transfer function from input voltage to output voltage are computed and shown in Figure <a href="#org3414f15">11</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 09:25:05 +01:00
<div id="org3414f15" 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 09:25:05 +01:00
<p><span class="figure-number">Figure 11: </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 09:25:05 +01:00
<div id="outline-container-org0fa0dae" class="outline-3">
<h3 id="org0fa0dae"><span class="section-number-3">6.1</span> System Identification</h3>
<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 09:25:05 +01:00
<div id="orge087601" 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 09:25:05 +01:00
<p><span class="figure-number">Figure 12: </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 09:25:05 +01:00
<div id="outline-container-orgc707675" class="outline-3">
<h3 id="orgc707675"><span class="section-number-3">6.2</span> Integral Force Feedback</h3>
<div class="outline-text-3" id="text-6-2">
2020-08-20 23:08:38 +02:00
2020-11-24 09:25:05 +01:00
<div id="org07270d6" 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 09:25:05 +01:00
<p><span class="figure-number">Figure 13: </span>Root Locus for IFF</p>
2020-08-20 23:08:38 +02:00
</div>
</div>
</div>
</div>
2020-11-24 09:25:05 +01:00
<div id="outline-container-org151d290" class="outline-2">
<h2 id="org151d290"><span class="section-number-2">7</span> Integral Force Feedback</h2>
<div class="outline-text-2" id="text-7">
<p>
2020-11-24 09:25:05 +01:00
<a id="orgd3e21e7"></a>
</p>
2020-11-24 09:25:05 +01:00
<div id="org9ca42af" class="figure">
<p><img src="figs/test_bench_apa_schematic_iff.png" alt="test_bench_apa_schematic_iff.png" />
</p>
<p><span class="figure-number">Figure 14: </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>
<div id="outline-container-org306bfe8" class="outline-3">
<h3 id="org306bfe8"><span class="section-number-3">7.1</span> First tests with few gains</h3>
<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 09:25:05 +01:00
<div id="org0c8c94b" 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 09:25:05 +01:00
<p><span class="figure-number">Figure 15: </span>Coherence</p>
2020-08-21 15:26:45 +02:00
</div>
2020-11-24 09:25:05 +01:00
<div id="orgd136205" 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 09:25:05 +01:00
<p><span class="figure-number">Figure 16: </span>Bode plot for different values of IFF gain</p>
2020-08-21 15:26:45 +02:00
</div>
</div>
</div>
2020-11-24 09:25:05 +01:00
<div id="outline-container-orgf61b4aa" class="outline-3">
<h3 id="orgf61b4aa"><span class="section-number-3">7.2</span> Second test with many Gains</h3>
<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 09:25:05 +01:00
<div id="orgbe0cb01" 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 09:25:05 +01:00
<div id="org0f603c5" 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 09:25:05 +01:00
<div id="org20e0d4b" 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 09:25:05 +01:00
<p class="date">Created: 2020-11-24 mar. 09:17</p>
2020-07-17 11:56:08 +02:00
</div>
</body>
</html>