Add analysis on the force sensor
BIN
figs/exp_setup_schematic.pdf
Normal file
BIN
figs/force_sen_steps_time_domain.pdf
Normal file
BIN
figs/force_sen_steps_time_domain.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
figs/force_sensor_linear_relation.pdf
Normal file
BIN
figs/force_sensor_linear_relation.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
figs/force_sensor_sin_charge.pdf
Normal file
BIN
figs/force_sensor_sin_charge.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
figs/force_sensor_sin_encoder.pdf
Normal file
BIN
figs/force_sensor_sin_encoder.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
figs/force_sensor_sin_stack.pdf
Normal file
BIN
figs/force_sensor_sin_stack.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
figs/force_sensor_sin_u.pdf
Normal file
BIN
figs/force_sensor_sin_u.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
figs/piezo_sensor_model_instrumentation.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
figs/stiffness_force_sensor_bode.pdf
Normal file
BIN
figs/stiffness_force_sensor_bode.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
figs/stiffness_force_sensor_bode_zoom.pdf
Normal file
BIN
figs/stiffness_force_sensor_bode_zoom.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
figs/stiffness_force_sensor_coherence.pdf
Normal file
BIN
figs/stiffness_force_sensor_coherence.png
Normal file
After Width: | Height: | Size: 56 KiB |
534
index.html
@ -3,7 +3,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2020-10-25 dim. 09:06 -->
|
||||
<!-- 2020-10-29 jeu. 09:59 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Encoder - Test Bench</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
@ -31,37 +31,49 @@
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org62e3fd3">1. Experimental Setup</a></li>
|
||||
<li><a href="#org12a748d">2. Huddle Test</a>
|
||||
<li><a href="#org6fbc445">1. Experimental Setup</a></li>
|
||||
<li><a href="#orgdbbcb08">2. Huddle Test</a>
|
||||
<ul>
|
||||
<li><a href="#orgcc6a5f5">2.1. Load Data</a></li>
|
||||
<li><a href="#org38dca56">2.2. Time Domain Results</a></li>
|
||||
<li><a href="#orgb3db033">2.3. Frequency Domain Noise</a></li>
|
||||
<li><a href="#orge0cae84">2.1. Load Data</a></li>
|
||||
<li><a href="#orgeb6de99">2.2. Time Domain Results</a></li>
|
||||
<li><a href="#orga9c316e">2.3. Frequency Domain Noise</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org99db9f6">3. Comparison Interferometer / Encoder</a>
|
||||
<li><a href="#org3f480f8">3. Comparison Interferometer / Encoder</a>
|
||||
<ul>
|
||||
<li><a href="#org1d63b9a">3.1. Load Data</a></li>
|
||||
<li><a href="#org185e20d">3.2. Time Domain Results</a></li>
|
||||
<li><a href="#org04cd372">3.3. Difference between Encoder and Interferometer as a function of time</a></li>
|
||||
<li><a href="#org0271741">3.4. Difference between Encoder and Interferometer as a function of position</a></li>
|
||||
<li><a href="#org1144cae">3.1. Load Data</a></li>
|
||||
<li><a href="#org504ca00">3.2. Time Domain Results</a></li>
|
||||
<li><a href="#org0bb5487">3.3. Difference between Encoder and Interferometer as a function of time</a></li>
|
||||
<li><a href="#org8ffe43b">3.4. Difference between Encoder and Interferometer as a function of position</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orga08d704">4. Identification</a>
|
||||
<li><a href="#org8db94b6">4. Identification</a>
|
||||
<ul>
|
||||
<li><a href="#orgaa05248">4.1. Load Data</a></li>
|
||||
<li><a href="#org0d4f0cd">4.2. Identification</a></li>
|
||||
<li><a href="#org5dbc303">4.1. Load Data</a></li>
|
||||
<li><a href="#org7e6c771">4.2. Identification</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org34f3a3e">5. Change of Stiffness due to Sensors stack being open/closed circuit</a>
|
||||
<ul>
|
||||
<li><a href="#org74a3435">5.1. Load Data</a></li>
|
||||
<li><a href="#org3c7c26d">5.2. Transfer Functions</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org939e6d1">6. Generated Number of Charge / Voltage</a>
|
||||
<ul>
|
||||
<li><a href="#org24ebf58">6.1. Steps</a></li>
|
||||
<li><a href="#orgd891bf7">6.2. Sinus</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org62e3fd3" class="outline-2">
|
||||
<h2 id="org62e3fd3"><span class="section-number-2">1</span> Experimental Setup</h2>
|
||||
<div id="outline-container-org6fbc445" class="outline-2">
|
||||
<h2 id="org6fbc445"><span class="section-number-2">1</span> Experimental Setup</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
The experimental Setup is schematically represented in Figure <a href="#org4fd66dc">1</a>.
|
||||
The experimental Setup is schematically represented in Figure <a href="#orgd0e8875">1</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -70,21 +82,21 @@ The displacement of the mass (relative to the mechanical frame) is measured both
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org4fd66dc" class="figure">
|
||||
<div id="orgd0e8875" class="figure">
|
||||
<p><img src="figs/exp_setup_schematic.png" alt="exp_setup_schematic.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Schematic of the Experiment</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orge37bdbc" class="figure">
|
||||
<div id="orga0a129f" class="figure">
|
||||
<p><img src="figs/IMG_20201023_153905.jpg" alt="IMG_20201023_153905.jpg" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Side View of the encoder</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org168fd7f" class="figure">
|
||||
<div id="org3eb8621" class="figure">
|
||||
<p><img src="figs/IMG_20201023_153914.jpg" alt="IMG_20201023_153914.jpg" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Front View of the encoder</p>
|
||||
@ -92,8 +104,8 @@ The displacement of the mass (relative to the mechanical frame) is measured both
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org12a748d" class="outline-2">
|
||||
<h2 id="org12a748d"><span class="section-number-2">2</span> Huddle Test</h2>
|
||||
<div id="outline-container-orgdbbcb08" class="outline-2">
|
||||
<h2 id="orgdbbcb08"><span class="section-number-2">2</span> Huddle Test</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
The goal in this section is the estimate the noise of both the encoder and the intereferometer.
|
||||
@ -105,8 +117,8 @@ Ideally, a mechanical part would clamp the two together, we here suppose that th
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgcc6a5f5" class="outline-3">
|
||||
<h3 id="orgcc6a5f5"><span class="section-number-3">2.1</span> Load Data</h3>
|
||||
<div id="outline-container-orge0cae84" class="outline-3">
|
||||
<h3 id="orge0cae84"><span class="section-number-3">2.1</span> Load Data</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/int_enc_huddle_test.mat'</span>, <span class="org-string">'interferometer'</span>, <span class="org-string">'encoder'</span>, <span class="org-string">'t'</span>);
|
||||
@ -121,11 +133,11 @@ encoder = detrend(encoder, 0);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org38dca56" class="outline-3">
|
||||
<h3 id="org38dca56"><span class="section-number-3">2.2</span> Time Domain Results</h3>
|
||||
<div id="outline-container-orgeb6de99" class="outline-3">
|
||||
<h3 id="orgeb6de99"><span class="section-number-3">2.2</span> Time Domain Results</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
|
||||
<div id="org1e8928d" class="figure">
|
||||
<div id="org686e97a" class="figure">
|
||||
<p><img src="figs/huddle_test_time_domain.png" alt="huddle_test_time_domain.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Huddle test - Time domain signals</p>
|
||||
@ -137,7 +149,7 @@ encoder = detrend(encoder, 0);
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org831d12c" class="figure">
|
||||
<div id="orgb481e1f" class="figure">
|
||||
<p><img src="figs/huddle_test_time_domain_filtered.png" alt="huddle_test_time_domain_filtered.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Huddle test - Time domain signals filtered with a LPF at 10Hz</p>
|
||||
@ -145,8 +157,8 @@ encoder = detrend(encoder, 0);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb3db033" class="outline-3">
|
||||
<h3 id="orgb3db033"><span class="section-number-3">2.3</span> Frequency Domain Noise</h3>
|
||||
<div id="outline-container-orga9c316e" class="outline-3">
|
||||
<h3 id="orga9c316e"><span class="section-number-3">2.3</span> Frequency Domain Noise</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
|
||||
@ -158,7 +170,7 @@ win = hann(ceil(10<span class="org-type">/</span>Ts));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgd4d1e96" class="figure">
|
||||
<div id="org8d5409d" class="figure">
|
||||
<p><img src="figs/huddle_test_asd.png" alt="huddle_test_asd.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Amplitude Spectral Density of the signals during the Huddle test</p>
|
||||
@ -167,8 +179,8 @@ win = hann(ceil(10<span class="org-type">/</span>Ts));
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org99db9f6" class="outline-2">
|
||||
<h2 id="org99db9f6"><span class="section-number-2">3</span> Comparison Interferometer / Encoder</h2>
|
||||
<div id="outline-container-org3f480f8" class="outline-2">
|
||||
<h2 id="org3f480f8"><span class="section-number-2">3</span> Comparison Interferometer / Encoder</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
The goal here is to make sure that the interferometer and encoder measurements are coherent.
|
||||
@ -176,8 +188,8 @@ We may see non-linearity in the interferometric measurement.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1d63b9a" class="outline-3">
|
||||
<h3 id="org1d63b9a"><span class="section-number-3">3.1</span> Load Data</h3>
|
||||
<div id="outline-container-org1144cae" class="outline-3">
|
||||
<h3 id="org1144cae"><span class="section-number-3">3.1</span> Load Data</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/int_enc_comp.mat'</span>, <span class="org-string">'interferometer'</span>, <span class="org-string">'encoder'</span>, <span class="org-string">'u'</span>, <span class="org-string">'t'</span>);
|
||||
@ -193,18 +205,18 @@ u = detrend(u, 0);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org185e20d" class="outline-3">
|
||||
<h3 id="org185e20d"><span class="section-number-3">3.2</span> Time Domain Results</h3>
|
||||
<div id="outline-container-org504ca00" class="outline-3">
|
||||
<h3 id="org504ca00"><span class="section-number-3">3.2</span> Time Domain Results</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
|
||||
<div id="orgf56a137" class="figure">
|
||||
<div id="org5e28133" class="figure">
|
||||
<p><img src="figs/int_enc_one_cycle.png" alt="int_enc_one_cycle.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>One cycle measurement</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org3adb535" class="figure">
|
||||
<div id="org1d42180" class="figure">
|
||||
<p><img src="figs/int_enc_one_cycle_error.png" alt="int_enc_one_cycle_error.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Difference between the Encoder and the interferometer during one cycle</p>
|
||||
@ -212,8 +224,8 @@ u = detrend(u, 0);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org04cd372" class="outline-3">
|
||||
<h3 id="org04cd372"><span class="section-number-3">3.3</span> Difference between Encoder and Interferometer as a function of time</h3>
|
||||
<div id="outline-container-org0bb5487" class="outline-3">
|
||||
<h3 id="org0bb5487"><span class="section-number-3">3.3</span> Difference between Encoder and Interferometer as a function of time</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
|
||||
@ -234,7 +246,7 @@ d_err_mean = d_err_mean <span class="org-type">-</span> mean(d_err_mean);
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgd16ecc5" class="figure">
|
||||
<div id="org8fda1bf" class="figure">
|
||||
<p><img src="figs/int_enc_error_mean_time.png" alt="int_enc_error_mean_time.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Difference between the two measurement in the time domain, averaged for all the cycles</p>
|
||||
@ -242,8 +254,8 @@ d_err_mean = d_err_mean <span class="org-type">-</span> mean(d_err_mean);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0271741" class="outline-3">
|
||||
<h3 id="org0271741"><span class="section-number-3">3.4</span> Difference between Encoder and Interferometer as a function of position</h3>
|
||||
<div id="outline-container-org8ffe43b" class="outline-3">
|
||||
<h3 id="org8ffe43b"><span class="section-number-3">3.4</span> Difference between Encoder and Interferometer as a function of position</h3>
|
||||
<div class="outline-text-3" id="text-3-4">
|
||||
<p>
|
||||
Compute the mean of the interferometer measurement corresponding to each of the encoder measurement.
|
||||
@ -262,7 +274,7 @@ i_mean_error = (i_mean <span class="org-type">-</span> e_sorted);
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org81096af" class="figure">
|
||||
<div id="org3b4facc" class="figure">
|
||||
<p><img src="figs/int_enc_error_mean_position.png" alt="int_enc_error_mean_position.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Difference between the two measurement as a function of the measured position by the encoder, averaged for all the cycles</p>
|
||||
@ -283,7 +295,7 @@ e_sorted_mean_over_period = mean(reshape(i_mean_error(i_init<span class="org-typ
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgd460333" class="figure">
|
||||
<div id="org8f808d8" class="figure">
|
||||
<p><img src="figs/int_non_linearity_period_wavelength.png" alt="int_non_linearity_period_wavelength.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Non-Linearity of the Interferometer over the period of the wavelength</p>
|
||||
@ -292,12 +304,12 @@ e_sorted_mean_over_period = mean(reshape(i_mean_error(i_init<span class="org-typ
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga08d704" class="outline-2">
|
||||
<h2 id="orga08d704"><span class="section-number-2">4</span> Identification</h2>
|
||||
<div id="outline-container-org8db94b6" class="outline-2">
|
||||
<h2 id="org8db94b6"><span class="section-number-2">4</span> Identification</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
</div>
|
||||
<div id="outline-container-orgaa05248" class="outline-3">
|
||||
<h3 id="orgaa05248"><span class="section-number-3">4.1</span> Load Data</h3>
|
||||
<div id="outline-container-org5dbc303" class="outline-3">
|
||||
<h3 id="org5dbc303"><span class="section-number-3">4.1</span> Load Data</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'mat/int_enc_id_noise_bis.mat'</span>, <span class="org-string">'interferometer'</span>, <span class="org-string">'encoder'</span>, <span class="org-string">'u'</span>, <span class="org-string">'t'</span>);
|
||||
@ -313,8 +325,8 @@ u = detrend(u, 0);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0d4f0cd" class="outline-3">
|
||||
<h3 id="org0d4f0cd"><span class="section-number-3">4.2</span> Identification</h3>
|
||||
<div id="outline-container-org7e6c771" class="outline-3">
|
||||
<h3 id="org7e6c771"><span class="section-number-3">4.2</span> Identification</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% Sampling Time [s]</span>
|
||||
@ -332,24 +344,436 @@ win = hann(ceil(10<span class="org-type">/</span>Ts));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org0157819" class="figure">
|
||||
<div id="org002dcef" class="figure">
|
||||
<p><img src="figs/identification_dynamics_coherence.png" alt="identification_dynamics_coherence.png" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="org4b89965" class="figure">
|
||||
<div id="orgdbdd6e0" class="figure">
|
||||
<p><img src="figs/identification_dynamics_bode.png" alt="identification_dynamics_bode.png" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org34f3a3e" class="outline-2">
|
||||
<h2 id="org34f3a3e"><span class="section-number-2">5</span> Change of Stiffness due to Sensors stack being open/closed circuit</h2>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
</div>
|
||||
<div id="outline-container-org74a3435" class="outline-3">
|
||||
<h3 id="org74a3435"><span class="section-number-3">5.1</span> Load Data</h3>
|
||||
<div class="outline-text-3" id="text-5-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">oc = load(<span class="org-string">'./mat/identification_open_circuit.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'encoder'</span>, <span class="org-string">'u'</span>);
|
||||
sc = load(<span class="org-string">'./mat/identification_short_circuit.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'encoder'</span>, <span class="org-string">'u'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org3c7c26d" class="outline-3">
|
||||
<h3 id="org3c7c26d"><span class="section-number-3">5.2</span> Transfer Functions</h3>
|
||||
<div class="outline-text-3" id="text-5-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% Sampling Time [s]</span>
|
||||
win = hann(ceil(10<span class="org-type">/</span>Ts));
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">[tf_oc_est, f] = tfestimate(oc.u, oc.encoder, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
[co_oc_est, <span class="org-type">~</span>] = mscohere( oc.u, oc.encoder, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
|
||||
[tf_sc_est, <span class="org-type">~</span>] = tfestimate(sc.u, sc.encoder, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
[co_sc_est, <span class="org-type">~</span>] = mscohere( sc.u, sc.encoder, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org3137b17" class="figure">
|
||||
<p><img src="figs/stiffness_force_sensor_coherence.png" alt="stiffness_force_sensor_coherence.png" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="org0b7ba5b" class="figure">
|
||||
<p><img src="figs/stiffness_force_sensor_bode.png" alt="stiffness_force_sensor_bode.png" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org8bfdbdd" class="figure">
|
||||
<p><img src="figs/stiffness_force_sensor_bode_zoom.png" alt="stiffness_force_sensor_bode_zoom.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 16: </span>Zoom on the change of resonance</p>
|
||||
</div>
|
||||
|
||||
<div class="important" id="org98481c9">
|
||||
<p>
|
||||
The change of resonance frequency / stiffness is very small and is not important here.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org939e6d1" class="outline-2">
|
||||
<h2 id="org939e6d1"><span class="section-number-2">6</span> Generated Number of Charge / Voltage</h2>
|
||||
<div class="outline-text-2" id="text-6">
|
||||
<p>
|
||||
Two stacks are used as actuator (in parallel) and one stack is used as sensor.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The amplifier gain is 20V/V (Cedrat LA75B).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org24ebf58" class="outline-3">
|
||||
<h3 id="org24ebf58"><span class="section-number-3">6.1</span> Steps</h3>
|
||||
<div class="outline-text-3" id="text-6-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'./mat/force_sensor_steps.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'encoder'</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"><span class="org-type">figure</span>;
|
||||
tiledlayout(2, 1, <span class="org-string">'TileSpacing'</span>, <span class="org-string">'None'</span>, <span class="org-string">'Padding'</span>, <span class="org-string">'None'</span>);
|
||||
nexttile;
|
||||
plot(t, v);
|
||||
xlabel(<span class="org-string">'Time [s]'</span>); ylabel(<span class="org-string">'Measured voltage [V]'</span>);
|
||||
nexttile;
|
||||
plot(t, u);
|
||||
xlabel(<span class="org-string">'Time [s]'</span>); ylabel(<span class="org-string">'Actuator Voltage [V]'</span>);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org487995c" class="figure">
|
||||
<p><img src="figs/force_sen_steps_time_domain.png" alt="force_sen_steps_time_domain.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 17: </span>Time domain signal during the 3 actuator voltage steps</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Three steps are performed at the following time intervals:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>2.5, 23</li>
|
||||
<li>23.8, 35</li>
|
||||
<li>35.8, 50</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Fit function:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">f = @(b,x) b(1)<span class="org-type">.*</span>exp(b(2)<span class="org-type">.*</span>x) <span class="org-type">+</span> b(3);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
We are interested by the <code>b(2)</code> term, which is the time constant of the exponential.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">tau = zeros(3,1);
|
||||
V0 = zeros(3,1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">t_cur = t(2.5 <span class="org-type"><</span> t <span class="org-type">&</span> t <span class="org-type"><</span> 23);
|
||||
t_cur = t_cur <span class="org-type">-</span> t_cur(1);
|
||||
y_cur = v(2.5 <span class="org-type"><</span> t <span class="org-type">&</span> t <span class="org-type"><</span> 23);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur <span class="org-type">-</span> f(b,t_cur)); <span class="org-comment">% Residual Norm Cost Function</span>
|
||||
B0 = [0.5, <span class="org-type">-</span>0.15, 2.2]; <span class="org-comment">% Choose Appropriate Initial Estimates</span>
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); <span class="org-comment">% Estimate Parameters ‘B’</span>
|
||||
|
||||
tau<span class="org-type">(1) </span>= 1<span class="org-type">/</span>B(2);
|
||||
V0<span class="org-type">(1) </span>= B(3);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">t_cur = t(23.8 <span class="org-type"><</span> t <span class="org-type">&</span> t <span class="org-type"><</span> 35);
|
||||
t_cur = t_cur <span class="org-type">-</span> t_cur(1);
|
||||
y_cur = v(23.8 <span class="org-type"><</span> t <span class="org-type">&</span> t <span class="org-type"><</span> 35);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur <span class="org-type">-</span> f(b,t_cur)); <span class="org-comment">% Residual Norm Cost Function</span>
|
||||
B0 = [0.5, <span class="org-type">-</span>0.15, 2.2]; <span class="org-comment">% Choose Appropriate Initial Estimates</span>
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); <span class="org-comment">% Estimate Parameters ‘B’</span>
|
||||
|
||||
tau<span class="org-type">(2) </span>= 1<span class="org-type">/</span>B(2);
|
||||
V0<span class="org-type">(2) </span>= B(3);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">t_cur = t(35.8 <span class="org-type"><</span> t);
|
||||
t_cur = t_cur <span class="org-type">-</span> t_cur(1);
|
||||
y_cur = v(35.8 <span class="org-type"><</span> t);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur <span class="org-type">-</span> f(b,t_cur)); <span class="org-comment">% Residual Norm Cost Function</span>
|
||||
B0 = [0.5, <span class="org-type">-</span>0.15, 2.2]; <span class="org-comment">% Choose Appropriate Initial Estimates</span>
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); <span class="org-comment">% Estimate Parameters ‘B’</span>
|
||||
|
||||
tau<span class="org-type">(3) </span>= 1<span class="org-type">/</span>B(2);
|
||||
V0<span class="org-type">(3) </span>= B(3);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
|
||||
|
||||
<colgroup>
|
||||
<col class="org-right" />
|
||||
|
||||
<col class="org-right" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="org-right">\(tau\) [s]</th>
|
||||
<th scope="col" class="org-right">\(V_0\) [V]</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="org-right">6.47</td>
|
||||
<td class="org-right">2.26</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-right">6.76</td>
|
||||
<td class="org-right">2.26</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="org-right">6.49</td>
|
||||
<td class="org-right">2.25</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
With the capacitance being \(C = 4.4 \mu F\), the internal impedance of the Speedgoat ADC can be computed as follows:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Cp = 4.4e<span class="org-type">-</span>6; <span class="org-comment">% [F]</span>
|
||||
Rin = abs(mean(tau))<span class="org-type">/</span>Cp;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
1494100.0
|
||||
</pre>
|
||||
|
||||
|
||||
<p>
|
||||
The input impedance of the Speedgoat’s ADC should then be close to \(1.5\,M\Omega\) (specified at \(1\,M\Omega\)).
|
||||
</p>
|
||||
|
||||
<div class="important" id="org3005c4e">
|
||||
<p>
|
||||
How can we explain the voltage offset?
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<p>
|
||||
As shown in Figure <a href="#org63387ea">18</a> (taken from (<a href="#citeproc_bib_item_1">Reza and Andrew 2006</a>)), an input voltage offset is due to the input bias current \(i_n\).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org63387ea" class="figure">
|
||||
<p><img src="figs/piezo_sensor_model_instrumentation.png" alt="piezo_sensor_model_instrumentation.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 18: </span>Model of a piezoelectric transducer (left) and instrumentation amplifier (right)</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The estimated input bias current is then:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">in = mean(V0)<span class="org-type">/</span>Rin;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
1.5119e-06
|
||||
</pre>
|
||||
|
||||
|
||||
<p>
|
||||
An additional resistor in parallel with \(R_{in}\) would have two effects:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>reduce the input voltage offset
|
||||
\[ V_{off} = \frac{R_a R_{in}}{R_a + R_{in}} i_n \]</li>
|
||||
<li>increase the high pass corner frequency \(f_c\)
|
||||
\[ C_p \frac{R_{in}R_a}{R_{in} + R_a} = \tau_c = \frac{1}{f_c} \]
|
||||
\[ R_a = \frac{R_i}{f_c C_p R_i - 1} \]</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>
|
||||
If we allow the high pass corner frequency to be equals to 3Hz:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">fc = 3;
|
||||
Ra = Rin<span class="org-type">/</span>(fc<span class="org-type">*</span>C<span class="org-type">*</span>Rin <span class="org-type">-</span> 1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
79804
|
||||
</pre>
|
||||
|
||||
|
||||
<p>
|
||||
With this parallel resistance value, the voltage offset would be:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">V_offset = Ra<span class="org-type">*</span>Rin<span class="org-type">/</span>(Ra <span class="org-type">+</span> Rin) <span class="org-type">*</span> in;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
0.11454
|
||||
</pre>
|
||||
|
||||
|
||||
<p>
|
||||
Which is much more acceptable.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd891bf7" class="outline-3">
|
||||
<h3 id="orgd891bf7"><span class="section-number-3">6.2</span> Sinus</h3>
|
||||
<div class="outline-text-3" id="text-6-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'./mat/force_sensor_sin.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'encoder'</span>, <span class="org-string">'u'</span>, <span class="org-string">'v'</span>);
|
||||
|
||||
u = u(t<span class="org-type">></span>25);
|
||||
v = v(t<span class="org-type">></span>25);
|
||||
encoder = encoder(t<span class="org-type">></span>25) <span class="org-type">-</span> mean(encoder(t<span class="org-type">></span>25));
|
||||
t = t(t<span class="org-type">></span>25);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The driving voltage is a sinus at 0.5Hz centered on 3V and with an amplitude of 3V (Figure <a href="#orgf11f3a7">19</a>).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgf11f3a7" class="figure">
|
||||
<p><img src="figs/force_sensor_sin_u.png" alt="force_sensor_sin_u.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 19: </span>Driving Voltage</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The full stroke as measured by the encoder is:
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">max(encoder)<span class="org-type">-</span>min(encoder)
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
5.005e-05
|
||||
</pre>
|
||||
|
||||
|
||||
<p>
|
||||
Its signal is shown in Figure <a href="#org3cc6daf">20</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org3cc6daf" class="figure">
|
||||
<p><img src="figs/force_sensor_sin_encoder.png" alt="force_sensor_sin_encoder.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 20: </span>Encoder measurement</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The generated voltage by the stack is shown in Figure
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgd2cbe17" class="figure">
|
||||
<p><img src="figs/force_sensor_sin_stack.png" alt="force_sensor_sin_stack.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 21: </span>Voltage measured on the stack used as a sensor</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The capacitance of the stack is
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Cp = 4.4e<span class="org-type">-</span>6; <span class="org-comment">% [F]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The corresponding generated charge is then shown in Figure <a href="#org5b6dc79">22</a>.
|
||||
</p>
|
||||
|
||||
<div id="org5b6dc79" class="figure">
|
||||
<p><img src="figs/force_sensor_sin_charge.png" alt="force_sensor_sin_charge.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 22: </span>Generated Charge</p>
|
||||
</div>
|
||||
|
||||
|
||||
<p>
|
||||
The relation between the generated voltage and the measured displacement is almost linear as shown in Figure <a href="#org9b9ea94">23</a>.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">b1 = encoder<span class="org-type">\</span>(v<span class="org-type">-</span>mean(v));
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org9b9ea94" class="figure">
|
||||
<p><img src="figs/force_sensor_linear_relation.png" alt="force_sensor_linear_relation.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 23: </span>Almost linear relation between the relative displacement and the generated voltage</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
With a 16bits ADC, the resolution will then be equals to (in [nm]):
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">abs((20<span class="org-type">/</span>2<span class="org-type">^</span>16)<span class="org-type">/</span>(b1<span class="org-type">/</span>1e9))
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<pre class="example">
|
||||
3.9838
|
||||
</pre>
|
||||
|
||||
|
||||
<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>Reza, Moheimani, and Fleming Andrew. 2006. <i>Piezoelectric Transducers for Vibration Control and Damping</i>. London: Springer.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-10-25 dim. 09:06</p>
|
||||
<p class="date">Created: 2020-10-29 jeu. 09:59</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
405
index.org
@ -404,3 +404,408 @@ The period of the non-linearity seems to be $1.53 \mu m$ which corresponds to th
|
||||
#+caption:
|
||||
#+RESULTS:
|
||||
[[file:figs/identification_dynamics_bode.png]]
|
||||
|
||||
* Change of Stiffness due to Sensors stack being open/closed circuit
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
<<matlab-dir>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent :noweb yes
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
** Load Data
|
||||
#+begin_src matlab
|
||||
oc = load('./mat/identification_open_circuit.mat', 't', 'encoder', 'u');
|
||||
sc = load('./mat/identification_short_circuit.mat', 't', 'encoder', 'u');
|
||||
#+end_src
|
||||
|
||||
** Transfer Functions
|
||||
#+begin_src matlab
|
||||
Ts = 1e-4; % Sampling Time [s]
|
||||
win = hann(ceil(10/Ts));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
[tf_oc_est, f] = tfestimate(oc.u, oc.encoder, win, [], [], 1/Ts);
|
||||
[co_oc_est, ~] = mscohere( oc.u, oc.encoder, win, [], [], 1/Ts);
|
||||
|
||||
[tf_sc_est, ~] = tfestimate(sc.u, sc.encoder, win, [], [], 1/Ts);
|
||||
[co_sc_est, ~] = mscohere( sc.u, sc.encoder, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
hold on;
|
||||
plot(f, co_oc_est, '-')
|
||||
plot(f, co_sc_est, '-')
|
||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
||||
ylabel('Coherence'); xlabel('Frequency [Hz]');
|
||||
hold off;
|
||||
xlim([0.5, 5e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/stiffness_force_sensor_coherence.pdf', 'width', 'wide', 'height', 'normal');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:stiffness_force_sensor_coherence
|
||||
#+caption:
|
||||
#+RESULTS:
|
||||
[[file:figs/stiffness_force_sensor_coherence.png]]
|
||||
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plot(f, abs(tf_oc_est), '-', 'DisplayName', 'Open-Circuit')
|
||||
plot(f, abs(tf_sc_est), '-', 'DisplayName', 'Short-Circuit')
|
||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
||||
ylabel('Amplitude'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-7, 3e-4]);
|
||||
legend('location', 'southwest');
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plot(f, 180/pi*angle(tf_oc_est), '-')
|
||||
plot(f, 180/pi*angle(tf_sc_est), '-')
|
||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
|
||||
ylabel('Phase'); xlabel('Frequency [Hz]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
axis padded 'auto x'
|
||||
|
||||
linkaxes([ax1,ax2], 'x');
|
||||
xlim([0.5, 5e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/stiffness_force_sensor_bode.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:stiffness_force_sensor_bode
|
||||
#+caption:
|
||||
#+RESULTS:
|
||||
[[file:figs/stiffness_force_sensor_bode.png]]
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
xlim([180, 280]);
|
||||
exportFig('figs/stiffness_force_sensor_bode_zoom.pdf', 'width', 'small', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:stiffness_force_sensor_bode_zoom
|
||||
#+caption: Zoom on the change of resonance
|
||||
#+RESULTS:
|
||||
[[file:figs/stiffness_force_sensor_bode_zoom.png]]
|
||||
|
||||
#+begin_important
|
||||
The change of resonance frequency / stiffness is very small and is not important here.
|
||||
#+end_important
|
||||
|
||||
* Generated Number of Charge / Voltage
|
||||
** Introduction :ignore:
|
||||
Two stacks are used as actuator (in parallel) and one stack is used as sensor.
|
||||
|
||||
The amplifier gain is 20V/V (Cedrat LA75B).
|
||||
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
<<matlab-dir>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent :noweb yes
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
** Steps
|
||||
#+begin_src matlab
|
||||
load('./mat/force_sensor_steps.mat', 't', 'encoder', 'u', 'v');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
nexttile;
|
||||
plot(t, v);
|
||||
xlabel('Time [s]'); ylabel('Measured voltage [V]');
|
||||
nexttile;
|
||||
plot(t, u);
|
||||
xlabel('Time [s]'); ylabel('Actuator Voltage [V]');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/force_sen_steps_time_domain.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:force_sen_steps_time_domain
|
||||
#+caption: Time domain signal during the 3 actuator voltage steps
|
||||
#+RESULTS:
|
||||
[[file:figs/force_sen_steps_time_domain.png]]
|
||||
|
||||
Three steps are performed at the following time intervals:
|
||||
- 2.5, 23
|
||||
- 23.8, 35
|
||||
- 35.8, 50
|
||||
|
||||
Fit function:
|
||||
#+begin_src matlab
|
||||
f = @(b,x) b(1).*exp(b(2).*x) + b(3);
|
||||
#+end_src
|
||||
|
||||
We are interested by the =b(2)= term, which is the time constant of the exponential.
|
||||
|
||||
#+begin_src matlab
|
||||
tau = zeros(3,1);
|
||||
V0 = zeros(3,1);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
t_cur = t(2.5 < t & t < 23);
|
||||
t_cur = t_cur - t_cur(1);
|
||||
y_cur = v(2.5 < t & t < 23);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur - f(b,t_cur)); % Residual Norm Cost Function
|
||||
B0 = [0.5, -0.15, 2.2]; % Choose Appropriate Initial Estimates
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); % Estimate Parameters ‘B’
|
||||
|
||||
tau(1) = 1/B(2);
|
||||
V0(1) = B(3);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
t_cur = t(23.8 < t & t < 35);
|
||||
t_cur = t_cur - t_cur(1);
|
||||
y_cur = v(23.8 < t & t < 35);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur - f(b,t_cur)); % Residual Norm Cost Function
|
||||
B0 = [0.5, -0.15, 2.2]; % Choose Appropriate Initial Estimates
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); % Estimate Parameters ‘B’
|
||||
|
||||
tau(2) = 1/B(2);
|
||||
V0(2) = B(3);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
t_cur = t(35.8 < t);
|
||||
t_cur = t_cur - t_cur(1);
|
||||
y_cur = v(35.8 < t);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur - f(b,t_cur)); % Residual Norm Cost Function
|
||||
B0 = [0.5, -0.15, 2.2]; % Choose Appropriate Initial Estimates
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); % Estimate Parameters ‘B’
|
||||
|
||||
tau(3) = 1/B(2);
|
||||
V0(3) = B(3);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([abs(tau), V0], {}, {'$tau$ [s]', '$V_0$ [V]'}, ' %.2f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
| $tau$ [s] | $V_0$ [V] |
|
||||
|-----------+-----------|
|
||||
| 6.47 | 2.26 |
|
||||
| 6.76 | 2.26 |
|
||||
| 6.49 | 2.25 |
|
||||
|
||||
With the capacitance being $C = 4.4 \mu F$, the internal impedance of the Speedgoat ADC can be computed as follows:
|
||||
#+begin_src matlab
|
||||
Cp = 4.4e-6; % [F]
|
||||
Rin = abs(mean(tau))/Cp;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results value replace :exports results
|
||||
ans = Rin
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: 1494100.0
|
||||
|
||||
The input impedance of the Speedgoat's ADC should then be close to $1.5\,M\Omega$ (specified at $1\,M\Omega$).
|
||||
|
||||
#+begin_important
|
||||
How can we explain the voltage offset?
|
||||
#+end_important
|
||||
|
||||
As shown in Figure [[fig:piezo_sensor_model_instrumentation]] (taken from cite:reza06_piezoel_trans_vibrat_contr_dampin), an input voltage offset is due to the input bias current $i_n$.
|
||||
|
||||
#+name: fig:piezo_sensor_model_instrumentation
|
||||
#+caption: Model of a piezoelectric transducer (left) and instrumentation amplifier (right)
|
||||
[[file:figs/piezo_sensor_model_instrumentation.png]]
|
||||
|
||||
The estimated input bias current is then:
|
||||
#+begin_src matlab
|
||||
in = mean(V0)/Rin;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results value replace :exports results
|
||||
ans = in
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: 1.5119e-06
|
||||
|
||||
An additional resistor in parallel with $R_{in}$ would have two effects:
|
||||
- reduce the input voltage offset
|
||||
\[ V_{off} = \frac{R_a R_{in}}{R_a + R_{in}} i_n \]
|
||||
- increase the high pass corner frequency $f_c$
|
||||
\[ C_p \frac{R_{in}R_a}{R_{in} + R_a} = \tau_c = \frac{1}{f_c} \]
|
||||
\[ R_a = \frac{R_i}{f_c C_p R_i - 1} \]
|
||||
|
||||
|
||||
If we allow the high pass corner frequency to be equals to 3Hz:
|
||||
#+begin_src matlab
|
||||
fc = 3;
|
||||
Ra = Rin/(fc*C*Rin - 1);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results value replace :exports results
|
||||
ans = Ra
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: 79804
|
||||
|
||||
With this parallel resistance value, the voltage offset would be:
|
||||
#+begin_src matlab
|
||||
V_offset = Ra*Rin/(Ra + Rin) * in;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results value replace :exports results
|
||||
ans = V_offset
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: 0.11454
|
||||
|
||||
Which is much more acceptable.
|
||||
|
||||
** Sinus
|
||||
#+begin_src matlab
|
||||
load('./mat/force_sensor_sin.mat', 't', 'encoder', 'u', 'v');
|
||||
|
||||
u = u(t>25);
|
||||
v = v(t>25);
|
||||
encoder = encoder(t>25) - mean(encoder(t>25));
|
||||
t = t(t>25);
|
||||
#+end_src
|
||||
|
||||
The driving voltage is a sinus at 0.5Hz centered on 3V and with an amplitude of 3V (Figure [[fig:force_sensor_sin_u]]).
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
plot(t, u)
|
||||
xlabel('Time [s]'); ylabel('Control Voltage [V]');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/force_sensor_sin_u.pdf', 'width', 'normal', 'height', 'small');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:force_sensor_sin_u
|
||||
#+caption: Driving Voltage
|
||||
#+RESULTS:
|
||||
[[file:figs/force_sensor_sin_u.png]]
|
||||
|
||||
The full stroke as measured by the encoder is:
|
||||
#+begin_src matlab :results value replace
|
||||
max(encoder)-min(encoder)
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: 5.005e-05
|
||||
|
||||
Its signal is shown in Figure [[fig:force_sensor_sin_encoder]].
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
plot(t, encoder)
|
||||
xlabel('Time [s]'); ylabel('Encoder [m]');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/force_sensor_sin_encoder.pdf', 'width', 'normal', 'height', 'small');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:force_sensor_sin_encoder
|
||||
#+caption: Encoder measurement
|
||||
#+RESULTS:
|
||||
[[file:figs/force_sensor_sin_encoder.png]]
|
||||
|
||||
The generated voltage by the stack is shown in Figure
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
plot(t, v)
|
||||
xlabel('Time [s]'); ylabel('Force Sensor Output [V]');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/force_sensor_sin_stack.pdf', 'width', 'normal', 'height', 'small');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:force_sensor_sin_stack
|
||||
#+caption: Voltage measured on the stack used as a sensor
|
||||
#+RESULTS:
|
||||
[[file:figs/force_sensor_sin_stack.png]]
|
||||
|
||||
The capacitance of the stack is
|
||||
#+begin_src matlab
|
||||
Cp = 4.4e-6; % [F]
|
||||
#+end_src
|
||||
|
||||
The corresponding generated charge is then shown in Figure [[fig:force_sensor_sin_charge]].
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
plot(t, 1e6*Cp*(v-mean(v)))
|
||||
xlabel('Time [s]'); ylabel('Generated Charge [$\mu C$]');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/force_sensor_sin_charge.pdf', 'width', 'normal', 'height', 'small');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:force_sensor_sin_charge
|
||||
#+caption: Generated Charge
|
||||
#+RESULTS:
|
||||
[[file:figs/force_sensor_sin_charge.png]]
|
||||
|
||||
|
||||
The relation between the generated voltage and the measured displacement is almost linear as shown in Figure [[fig:force_sensor_linear_relation]].
|
||||
|
||||
#+begin_src matlab
|
||||
b1 = encoder\(v-mean(v));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
hold on;
|
||||
plot(encoder, v-mean(v), 'DisplayName', 'Measured Voltage');
|
||||
plot(encoder, encoder*b1, 'DisplayName', sprintf('Linear Fit: $U_s \\approx %.3f [V/\\mu m] \\cdot d$', 1e-6*abs(b1)));
|
||||
hold off;
|
||||
xlabel('Measured Displacement [m]'); ylabel('Generated Voltage [V]');
|
||||
legend();
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/force_sensor_linear_relation.pdf', 'width', 'normal', 'height', 'small');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:force_sensor_linear_relation
|
||||
#+caption: Almost linear relation between the relative displacement and the generated voltage
|
||||
#+RESULTS:
|
||||
[[file:figs/force_sensor_linear_relation.png]]
|
||||
|
||||
With a 16bits ADC, the resolution will then be equals to (in [nm]):
|
||||
#+begin_src matlab :results value replace
|
||||
abs((20/2^16)/(b1/1e9))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
: 3.9838
|
||||
|