encoder-test-bench/test-bench-encoder.html

341 lines
12 KiB
HTML
Raw Normal View History

2020-10-23 23:05:34 +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>
2021-02-02 19:16:41 +01:00
<!-- 2021-02-02 mar. 19:16 -->
2020-10-23 23:05:34 +02:00
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Encoder - Test Bench</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
2020-11-12 10:16:50 +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-10-23 23:05:34 +02:00
</head>
<body>
2020-10-29 10:08:22 +01:00
<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-10-23 23:05:34 +02:00
<h1 class="title">Encoder - Test Bench</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
2021-02-02 19:16:41 +01:00
<li><a href="#org3c3af3a">1. Experimental Setup</a></li>
<li><a href="#orgdb3277a">2. Noise Spectral Density of the Encoder</a>
2020-10-23 23:05:34 +02:00
<ul>
2021-02-02 19:16:41 +01:00
<li><a href="#org81a5e5f">2.1. Load Data</a></li>
<li><a href="#orgbed7f20">2.2. Time Domain Results</a></li>
<li><a href="#org319de75">2.3. Frequency Domain Noise</a></li>
2020-10-23 23:05:34 +02:00
</ul>
</li>
2021-02-02 19:16:41 +01:00
<li><a href="#orgb1ca2cf">3. Dynamics from Actuator to Encoder</a>
2020-10-23 23:05:34 +02:00
<ul>
2021-02-02 19:16:41 +01:00
<li><a href="#orgfa505d1">3.1. Load Data</a></li>
<li><a href="#org3f21900">3.2. Excitation and Measured Signals</a></li>
<li><a href="#org0b79009">3.3. Identification</a></li>
2020-10-23 23:05:34 +02:00
</ul>
</li>
</ul>
</div>
</div>
<p>
In this document, we wish to study the use of an encoder in parallel with an Amplified Piezoelectric Actuator.
</p>
<p>
The document is divided into the following Sections:
</p>
<ul class="org-ul">
2021-02-02 19:16:41 +01:00
<li>Section <a href="#org4c85aef">1</a>: the test-bench used is described</li>
<li>Section <a href="#org088f993">2</a>: the noise spectral density of the encoder is estimated</li>
<li>Section <a href="#org077ed39">3</a>: the dynamics from the amplified piezoelectric actuator to the encoder measured displacement is identified</li>
</ul>
2021-02-02 19:16:41 +01:00
<div id="outline-container-org3c3af3a" class="outline-2">
<h2 id="org3c3af3a"><span class="section-number-2">1</span> Experimental Setup</h2>
2020-10-23 23:05:34 +02:00
<div class="outline-text-2" id="text-1">
<p>
2021-02-02 19:16:41 +01:00
<a id="org4c85aef"></a>
</p>
<p>
2021-02-02 19:16:41 +01:00
The experimental Setup is schematically represented in Figure <a href="#org87d981b">1</a>.
2020-10-25 09:06:14 +01:00
</p>
2021-02-02 19:16:41 +01:00
<div class="note" id="org217bb34">
2020-11-10 11:16:36 +01:00
<p>
Here are the equipment used in the test bench:
</p>
<ul class="org-ul">
<li>Renishaw Resolution Encoder with 1nm resolution (<a href="doc/L-9517-9448-05-B_Data_sheet_RESOLUTE_BiSS_en.pdf">doc</a>)</li>
<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>
</ul>
</div>
2020-10-25 09:06:14 +01:00
<p>
The mass can be vertically moved using the amplified piezoelectric actuator.
2020-11-10 11:16:36 +01:00
The displacement of the mass (relative to the mechanical frame) is measured both by the interferometer and by the encoder.
2020-10-23 23:05:34 +02:00
</p>
2021-02-02 19:16:41 +01:00
<div id="org87d981b" class="figure">
2020-10-23 23:05:34 +02:00
<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>
2021-02-02 19:16:41 +01:00
<div id="org4703eda" class="figure">
2020-10-23 23:05:34 +02:00
<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>
2021-02-02 19:16:41 +01:00
<div id="orgd6a1cee" class="figure">
2020-10-23 23:05:34 +02:00
<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>
</div>
</div>
</div>
2021-02-02 19:16:41 +01:00
<div id="outline-container-orgdb3277a" class="outline-2">
<h2 id="orgdb3277a"><span class="section-number-2">2</span> Noise Spectral Density of the Encoder</h2>
2020-10-23 23:05:34 +02:00
<div class="outline-text-2" id="text-2">
<p>
2021-02-02 19:16:41 +01:00
<a id="org088f993"></a>
</p>
<p>
2020-10-23 23:05:34 +02:00
The goal in this section is the estimate the noise of both the encoder and the intereferometer.
</p>
2020-10-25 09:06:14 +01:00
<p>
2020-11-10 11:16:36 +01:00
The actuator is not excited, thus the relative motion between the mass and the frame is as small as possible.
2020-10-25 09:06:14 +01:00
Ideally, a mechanical part would clamp the two together, we here suppose that the APA is still enough to clamp the two together.
</p>
2020-10-23 23:05:34 +02:00
</div>
2021-02-02 19:16:41 +01:00
<div id="outline-container-org81a5e5f" class="outline-3">
<h3 id="org81a5e5f"><span class="section-number-3">2.1</span> Load Data</h3>
2020-10-23 23:05:34 +02:00
<div class="outline-text-3" id="text-2-1">
2020-11-10 11:16:36 +01:00
<p>
The measurement data are loaded and the offset are removed using the <code>detrend</code> command.
</p>
2020-10-23 23:05:34 +02:00
<div class="org-src-container">
2021-02-02 19:16:41 +01:00
<pre class="src src-matlab"> load(<span class="org-string">'int_enc_huddle_test.mat'</span>, <span class="org-string">'interferometer'</span>, <span class="org-string">'encoder'</span>, <span class="org-string">'t'</span>);
2020-10-23 23:05:34 +02:00
</pre>
</div>
<div class="org-src-container">
2021-02-02 19:16:41 +01:00
<pre class="src src-matlab"> interferometer = detrend(interferometer, 0);
encoder = detrend(encoder, 0);
2020-10-23 23:05:34 +02:00
</pre>
</div>
</div>
</div>
2021-02-02 19:16:41 +01:00
<div id="outline-container-orgbed7f20" class="outline-3">
<h3 id="orgbed7f20"><span class="section-number-3">2.2</span> Time Domain Results</h3>
2020-10-23 23:05:34 +02:00
<div class="outline-text-3" id="text-2-2">
2020-11-10 11:16:36 +01:00
<p>
2021-02-02 19:16:41 +01:00
The measurement of both the encoder and interferometer are shown in Figure <a href="#orgad4a9af">4</a>.
2020-11-10 11:16:36 +01:00
</p>
2020-10-23 23:05:34 +02:00
2021-02-02 19:16:41 +01:00
<div id="orgad4a9af" class="figure">
2020-10-23 23:05:34 +02:00
<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>
</div>
2020-11-10 11:16:36 +01:00
<p>
2021-02-02 19:16:41 +01:00
The raw signals are filtered with a Low Pass filter (defined below) such that we can see the low frequency motion (Figure <a href="#orgc981fe9">5</a>).
2020-11-10 11:16:36 +01:00
</p>
2020-10-23 23:05:34 +02:00
<div class="org-src-container">
2021-02-02 19:16:41 +01:00
<pre class="src src-matlab"> G_lpf = 1<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>2<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">/</span>10);
2020-10-23 23:05:34 +02:00
</pre>
</div>
2021-02-02 19:16:41 +01:00
<div id="orgc981fe9" class="figure">
2020-10-23 23:05:34 +02:00
<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>
</div>
</div>
</div>
2021-02-02 19:16:41 +01:00
<div id="outline-container-org319de75" class="outline-3">
<h3 id="org319de75"><span class="section-number-3">2.3</span> Frequency Domain Noise</h3>
2020-10-23 23:05:34 +02:00
<div class="outline-text-3" id="text-2-3">
2020-11-10 11:16:36 +01:00
<p>
The noise of the measurement (supposing there is no motion) is now translated in the frequency domain by computed the Amplitude Spectral Density.
</p>
2020-10-23 23:05:34 +02:00
<div class="org-src-container">
2021-02-02 19:16:41 +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-10-23 23:05:34 +02:00
2021-02-02 19:16:41 +01:00
[p_i, f] = pwelch(interferometer, win, [], [], 1<span class="org-type">/</span>Ts);
[p_e, <span class="org-type">~</span>] = pwelch(encoder, win, [], [], 1<span class="org-type">/</span>Ts);
2020-10-23 23:05:34 +02:00
</pre>
</div>
2020-11-10 11:16:36 +01:00
<p>
2021-02-02 19:16:41 +01:00
The comparison of the ASD of the encoder and interferometer are shown in Figure <a href="#orgeae7d8d">6</a>.
2020-11-10 11:16:36 +01:00
</p>
2020-10-23 23:05:34 +02:00
2020-11-10 11:16:36 +01:00
<p>
It is clear that although the encoder exhibit higher frequency noise, is it more stable at low frequency as the length of the beam path in the air is much smaller and thus changed of temperature/pressure/humity of the air has much smaller effect on the measured displacement.
</p>
2021-02-02 19:16:41 +01:00
<div id="orgeae7d8d" class="figure">
2020-10-23 23:05:34 +02:00
<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>
</div>
</div>
</div>
</div>
2021-02-02 19:16:41 +01:00
<div id="outline-container-orgb1ca2cf" class="outline-2">
<h2 id="orgb1ca2cf"><span class="section-number-2">3</span> Dynamics from Actuator to Encoder</h2>
2020-10-23 23:05:34 +02:00
<div class="outline-text-2" id="text-3">
<p>
2021-02-02 19:16:41 +01:00
<a id="org077ed39"></a>
2020-11-10 11:16:36 +01:00
</p>
<p>
Now the dynamics from the force actuator to the measurement by the encoder is identified.
2020-10-23 23:05:34 +02:00
</p>
</div>
2021-02-02 19:16:41 +01:00
<div id="outline-container-orgfa505d1" class="outline-3">
<h3 id="orgfa505d1"><span class="section-number-3">3.1</span> Load Data</h3>
2020-10-23 23:05:34 +02:00
<div class="outline-text-3" id="text-3-1">
2020-11-10 11:16:36 +01:00
<p>
As usual, the measurement data are loaded.
</p>
2020-10-23 23:05:34 +02:00
<div class="org-src-container">
2021-02-02 19:16:41 +01:00
<pre class="src src-matlab"> load(<span class="org-string">'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>);
2020-10-23 23:05:34 +02:00
</pre>
</div>
2020-11-10 11:16:36 +01:00
<p>
The first 0.1 seconds are removed as it corresponds to transient behavior.
</p>
<div class="org-src-container">
2021-02-02 19:16:41 +01:00
<pre class="src src-matlab"> interferometer = interferometer(t<span class="org-type">&gt;</span>0.1);
encoder = encoder(t<span class="org-type">&gt;</span>0.1);
u = u(t<span class="org-type">&gt;</span>0.1);
t = t(t<span class="org-type">&gt;</span>0.1);
2020-11-10 11:16:36 +01:00
</pre>
</div>
<p>
Finally the offset are removed using the <code>detrend</code> command.
</p>
2020-10-23 23:05:34 +02:00
<div class="org-src-container">
2021-02-02 19:16:41 +01:00
<pre class="src src-matlab"> interferometer = detrend(interferometer, 0);
encoder = detrend(encoder, 0);
u = detrend(u, 0);
2020-10-23 23:05:34 +02:00
</pre>
</div>
</div>
</div>
2021-02-02 19:16:41 +01:00
<div id="outline-container-org3f21900" class="outline-3">
<h3 id="org3f21900"><span class="section-number-3">3.2</span> Excitation and Measured Signals</h3>
<div class="outline-text-3" id="text-3-2">
2020-11-10 11:16:36 +01:00
<p>
The excitation signal is a white noise filtered by a low pass filter to not excite too much the high frequency modes.
</p>
<p>
2021-02-02 19:16:41 +01:00
The excitation signal is shown in Figure <a href="#orgf417c0d">7</a>.
2020-11-10 11:16:36 +01:00
</p>
2021-02-02 19:16:41 +01:00
<div id="orgf417c0d" class="figure">
2020-11-10 11:16:36 +01:00
<p><img src="figs/encoder_identification_excitation_time.png" alt="encoder_identification_excitation_time.png" />
</p>
2021-02-02 19:16:41 +01:00
<p><span class="figure-number">Figure 7: </span>Excitation Voltage</p>
2020-11-10 11:16:36 +01:00
</div>
<p>
The measured motion by the interferometer and encoder is shown in Figure
</p>
2021-02-02 19:16:41 +01:00
<div id="orgb870b1e" class="figure">
2020-11-10 11:16:36 +01:00
<p><img src="figs/encoder_identification_motion.png" alt="encoder_identification_motion.png" />
</p>
2021-02-02 19:16:41 +01:00
<p><span class="figure-number">Figure 8: </span>Measured displacement by the encoder and interferometer</p>
2020-11-10 11:16:36 +01:00
</div>
</div>
</div>
2021-02-02 19:16:41 +01:00
<div id="outline-container-org0b79009" class="outline-3">
<h3 id="org0b79009"><span class="section-number-3">3.3</span> Identification</h3>
2020-11-10 11:16:36 +01:00
<div class="outline-text-3" id="text-3-3">
<p>
Now the dynamics from the voltage sent to the voltage amplitude driving the APA95ML to the measured displacement by both the encoder and interferometer are computed.
</p>
2020-10-23 23:05:34 +02:00
<div class="org-src-container">
2021-02-02 19:16:41 +01:00
<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));
2020-10-23 23:05:34 +02:00
2021-02-02 19:16:41 +01:00
[tf_i_est, f] = tfestimate(u, interferometer, win, [], [], 1<span class="org-type">/</span>Ts);
[co_i_est, <span class="org-type">~</span>] = mscohere(u, interferometer, win, [], [], 1<span class="org-type">/</span>Ts);
2020-10-23 23:05:34 +02:00
2021-02-02 19:16:41 +01:00
[tf_e_est, <span class="org-type">~</span>] = tfestimate(u, encoder, win, [], [], 1<span class="org-type">/</span>Ts);
[co_e_est, <span class="org-type">~</span>] = mscohere(u, encoder, win, [], [], 1<span class="org-type">/</span>Ts);
2020-10-23 23:05:34 +02:00
</pre>
</div>
2020-11-10 11:16:36 +01:00
<p>
2021-02-02 19:16:41 +01:00
The obtained coherence is shown in Figure <a href="#orgd2811d2">9</a>.
2020-11-10 11:16:36 +01:00
It is shown that the identification is good until 500Hz for the interferometer and until 1kHz for the encoder.
</p>
2020-10-23 23:05:34 +02:00
2021-02-02 19:16:41 +01:00
<div id="orgd2811d2" class="figure">
2020-10-23 23:05:34 +02:00
<p><img src="figs/identification_dynamics_coherence.png" alt="identification_dynamics_coherence.png" />
</p>
2021-02-02 19:16:41 +01:00
<p><span class="figure-number">Figure 9: </span>Obtained coherence for both the encoder and interferometer</p>
2020-10-23 23:05:34 +02:00
</div>
2020-11-10 11:16:36 +01:00
<p>
2021-02-02 19:16:41 +01:00
The compared dynamics as measured by the intereferometer and encoder are shown in Figure <a href="#org7032434">10</a>.
2020-11-10 11:16:36 +01:00
</p>
2020-10-23 23:05:34 +02:00
2021-02-02 19:16:41 +01:00
<div id="org7032434" class="figure">
2020-10-23 23:05:34 +02:00
<p><img src="figs/identification_dynamics_bode.png" alt="identification_dynamics_bode.png" />
</p>
2021-02-02 19:16:41 +01:00
<p><span class="figure-number">Figure 10: </span>Obtained dynamics from actuator voltage to displacement as measured by the interferometer and by the encoder</p>
2020-10-23 23:05:34 +02:00
</div>
2020-11-10 11:16:36 +01:00
<p>
The second resonance at around 900Hz most likely corresponds to the resonance of either the ruler support or the head support.
</p>
2020-10-23 23:05:34 +02:00
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
2021-02-02 19:16:41 +01:00
<p class="date">Created: 2021-02-02 mar. 19:16</p>
2020-10-23 23:05:34 +02:00
</div>
</body>
</html>