Compare commits

..

2 Commits

10 changed files with 223 additions and 44 deletions

Binary file not shown.

BIN
figs/vionic_noise_asd.pdf Normal file

Binary file not shown.

BIN
figs/vionic_noise_asd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
figs/vionic_noise_time.pdf Normal file

Binary file not shown.

BIN
figs/vionic_noise_time.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -3,21 +3,30 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2021-01-04 lun. 11:44 --> <!-- 2021-02-02 mar. 18:24 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Encoder Renishaw Vionic - Test Bench</title> <title>Encoder Renishaw Vionic - Test Bench</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" /> <meta name="author" content="Dehaeze Thomas" />
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/> <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> <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
<script>MathJax = { <script>
MathJax = {
svg: {
scale: 1,
fontCache: "global"
},
tex: { tex: {
tags: 'ams', tags: "ams",
macros: {bm: ["\\boldsymbol{#1}",1],} multlineWidth: "%MULTLINEWIDTH",
tagSide: "right",
macros: {bm: ["\\boldsymbol{#1}",1],},
tagIndent: ".8em"
} }
}; };
</script> </script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
</head> </head>
<body> <body>
<div id="org-div-home-and-up"> <div id="org-div-home-and-up">
@ -30,15 +39,19 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org55157ef">1. Encoder Model</a></li> <li><a href="#orgd4a4664">1. Encoder Model</a></li>
<li><a href="#org8ef40ec">2. Test-Bench Description</a></li> <li><a href="#org8e70edd">2. Test-Bench Description</a></li>
<li><a href="#orgce223ed">3. Measurement procedure</a></li> <li><a href="#orge118b0f">3. Measurement procedure</a></li>
<li><a href="#org51852cb">4. Measurement Results</a></li> <li><a href="#org8e44240">4. Measurement Results</a>
<ul>
<li><a href="#org7e465e7">4.1. Noise Measurement</a></li>
</ul>
</li>
</ul> </ul>
</div> </div>
</div> </div>
<div class="note" id="org4436bab"> <div class="note" id="org4c0c9be">
<p> <p>
You can find below the document of: You can find below the document of:
</p> </p>
@ -63,14 +76,14 @@ In particular, we would like to measure:
</ul> </ul>
<div id="orgeb4726b" class="figure"> <div id="org13fff85" class="figure">
<p><img src="figs/encoder_vionic.png" alt="encoder_vionic.png" /> <p><img src="figs/encoder_vionic.png" alt="encoder_vionic.png" />
</p> </p>
<p><span class="figure-number">Figure 1: </span>Picture of the Vionic Encoder</p> <p><span class="figure-number">Figure 1: </span>Picture of the Vionic Encoder</p>
</div> </div>
<div id="outline-container-org55157ef" class="outline-2"> <div id="outline-container-orgd4a4664" class="outline-2">
<h2 id="org55157ef"><span class="section-number-2">1</span> Encoder Model</h2> <h2 id="orgd4a4664"><span class="section-number-2">1</span> Encoder Model</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
<p> <p>
The Encoder is characterized by its dynamics \(G_m(s)\) from the &ldquo;true&rdquo; displacement \(y\) to measured displacement \(y_m\). The Encoder is characterized by its dynamics \(G_m(s)\) from the &ldquo;true&rdquo; displacement \(y\) to measured displacement \(y_m\).
@ -82,52 +95,63 @@ It is also characterized by its measurement noise \(n\) that can be described by
</p> </p>
<p> <p>
The model of the encoder is shown in Figure <a href="#org2d59f14">2</a>. The model of the encoder is shown in Figure <a href="#org08a4e7a">2</a>.
</p> </p>
<div id="org2d59f14" class="figure"> <div id="org08a4e7a" class="figure">
<p><img src="figs/encoder-model-schematic.png" alt="encoder-model-schematic.png" /> <p><img src="figs/encoder-model-schematic.png" alt="encoder-model-schematic.png" />
</p> </p>
<p><span class="figure-number">Figure 2: </span>Model of the Encoder</p> <p><span class="figure-number">Figure 2: </span>Model of the Encoder</p>
</div> </div>
<table id="org476b3d6" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <table id="org20ed9a5" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Characteristics of the Vionic Encoder</caption> <caption class="t-above"><span class="table-number">Table 1:</span> Characteristics of the Vionic Encoder</caption>
<colgroup> <colgroup>
<col class="org-left" /> <col class="org-left" />
<col class="org-left" /> <col class="org-center" />
<col class="org-center" />
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
<th scope="col" class="org-left"><b>Characteristics</b></th> <th scope="col" class="org-left"><b>Characteristics</b></th>
<th scope="col" class="org-left"><b>Manual</b></th> <th scope="col" class="org-center"><b>Manual</b></th>
<th scope="col" class="org-center"><b>Specifications</b></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr>
<td class="org-left">Range</td>
<td class="org-center">Ruler length</td>
<td class="org-center">&gt; 200 [um]</td>
</tr>
<tr> <tr>
<td class="org-left">Resolution</td> <td class="org-left">Resolution</td>
<td class="org-left">2.5nm</td> <td class="org-center">2.5 [nm]</td>
<td class="org-center">&lt; 50 [nm rms]</td>
</tr> </tr>
<tr> <tr>
<td class="org-left">Sub-Divisional Error</td> <td class="org-left">Sub-Divisional Error</td>
<td class="org-left">\(< \pm 15\,nm\)</td> <td class="org-center">\(< \pm 15\,nm\)</td>
<td class="org-center">&#xa0;</td>
</tr> </tr>
<tr> <tr>
<td class="org-left">Bandwidth</td> <td class="org-left">Bandwidth</td>
<td class="org-left">&gt; 50 kHz</td> <td class="org-center">To be checked</td>
<td class="org-center">&gt; 5 [kHz]</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div id="org2068d11" class="figure">
<div id="orgb8bf3d5" class="figure">
<p><img src="./figs/vionic_expected_noise.png" alt="vionic_expected_noise.png" /> <p><img src="./figs/vionic_expected_noise.png" alt="vionic_expected_noise.png" />
</p> </p>
<p><span class="figure-number">Figure 3: </span>Expected interpolation errors for the Vionic Encoder</p> <p><span class="figure-number">Figure 3: </span>Expected interpolation errors for the Vionic Encoder</p>
@ -136,8 +160,8 @@ The model of the encoder is shown in Figure <a href="#org2d59f14">2</a>.
</div> </div>
<div id="outline-container-org8ef40ec" class="outline-2"> <div id="outline-container-org8e70edd" class="outline-2">
<h2 id="org8ef40ec"><span class="section-number-2">2</span> Test-Bench Description</h2> <h2 id="org8e70edd"><span class="section-number-2">2</span> Test-Bench Description</h2>
<div class="outline-text-2" id="text-2"> <div class="outline-text-2" id="text-2">
<p> <p>
To measure the noise \(n\) of the encoder, one can rigidly fix the head and the ruler together such that no motion should be measured. To measure the noise \(n\) of the encoder, one can rigidly fix the head and the ruler together such that no motion should be measured.
@ -151,7 +175,7 @@ An actuator should also be there so impose a displacement.
</p> </p>
<p> <p>
One idea is to use the test-bench shown in Figure <a href="#org1fd5a94">4</a>. One idea is to use the test-bench shown in Figure <a href="#orgfefda93">4</a>.
</p> </p>
<p> <p>
@ -164,7 +188,7 @@ As the interferometer has a very large bandwidth, we should be able to estimate
</p> </p>
<div id="org1fd5a94" class="figure"> <div id="orgfefda93" class="figure">
<p><img src="figs/test_bench_encoder_calibration.png" alt="test_bench_encoder_calibration.png" /> <p><img src="figs/test_bench_encoder_calibration.png" alt="test_bench_encoder_calibration.png" />
</p> </p>
<p><span class="figure-number">Figure 4: </span>Schematic of the test bench</p> <p><span class="figure-number">Figure 4: </span>Schematic of the test bench</p>
@ -172,11 +196,11 @@ As the interferometer has a very large bandwidth, we should be able to estimate
<p> <p>
To measure the noise of the sensor, we can also simply measure the output signal when the relative motion between the encoder and the ruler is null. To measure the noise of the sensor, we can also simply measure the output signal when the relative motion between the encoder and the ruler is null.
This can be done by clamping the two as done in the mounting strut tool (Figure <a href="#orgab0ed8d">5</a>). This can be done by clamping the two as done in the mounting strut tool (Figure <a href="#org742c647">5</a>).
</p> </p>
<div id="orgab0ed8d" class="figure"> <div id="org742c647" class="figure">
<p><img src="figs/test_bench_measure_noise.png" alt="test_bench_measure_noise.png" /> <p><img src="figs/test_bench_measure_noise.png" alt="test_bench_measure_noise.png" />
</p> </p>
<p><span class="figure-number">Figure 5: </span>Mounting Strut test bench as a clamping method to measure the encoder noise.</p> <p><span class="figure-number">Figure 5: </span>Mounting Strut test bench as a clamping method to measure the encoder noise.</p>
@ -184,17 +208,70 @@ This can be done by clamping the two as done in the mounting strut tool (Figure
</div> </div>
</div> </div>
<div id="outline-container-orgce223ed" class="outline-2"> <div id="outline-container-orge118b0f" class="outline-2">
<h2 id="orgce223ed"><span class="section-number-2">3</span> Measurement procedure</h2> <h2 id="orge118b0f"><span class="section-number-2">3</span> Measurement procedure</h2>
</div> </div>
<div id="outline-container-org51852cb" class="outline-2"> <div id="outline-container-org8e44240" class="outline-2">
<h2 id="org51852cb"><span class="section-number-2">4</span> Measurement Results</h2> <h2 id="org8e44240"><span class="section-number-2">4</span> Measurement Results</h2>
<div class="outline-text-2" id="text-4">
</div>
<div id="outline-container-org7e465e7" class="outline-3">
<h3 id="org7e465e7"><span class="section-number-3">4.1</span> Noise Measurement</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">'noise_meas_100s_20kHz.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'x'</span>);
x = x <span class="org-type">-</span> mean(x);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
hold on;
plot(t, 1e9<span class="org-type">*</span>x, <span class="org-string">'.'</span>, <span class="org-string">'DisplayName'</span>, <span class="org-string">'Raw'</span>);
plot(t, 1e9<span class="org-type">*</span>lsim(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>500), x, t), <span class="org-string">'DisplayName'</span>, <span class="org-string">'LPF - 500Hz'</span>)
hold off;
xlabel(<span class="org-string">'Time [s]'</span>);
ylabel(<span class="org-string">'Displacement [nm]'</span>);
legend(<span class="org-string">'location'</span>, <span class="org-string">'northeast'</span>);
</pre>
</div>
<div id="org3070d03" class="figure">
<p><img src="figs/vionic_noise_time.png" alt="vionic_noise_time.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Time domain measurement (raw data and low pass filtered data)</p>
</div>
<div id="orgd593081" class="figure">
<p><img src="figs/vionic_noise_asd.png" alt="vionic_noise_asd.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Amplitude Spectral Density of the measured signal</p>
</div>
<p>
Let&rsquo;s create a transfer function that approximate the measured noise of the encoder.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Gn_e = 1.8e<span class="org-type">-</span>11<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>5e3);
</pre>
</div>
<div id="orgd1f9fd9" class="figure">
<p><img src="figs/vionic_noise_asd_model.png" alt="vionic_noise_asd_model.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Measured ASD of the noise and modelled one</p>
</div>
</div>
</div>
</div> </div>
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2021-01-04 lun. 11:44</p> <p class="date">Created: 2021-02-02 mar. 18:24</p>
</div> </div>
</body> </body>
</html> </html>

114
index.org
View File

@ -94,12 +94,13 @@ The model of the encoder is shown in Figure [[fig:encoder-model-schematic]].
#+caption: Characteristics of the Vionic Encoder #+caption: Characteristics of the Vionic Encoder
#+attr_latex: :environment tabularx :width \linewidth :align lXX #+attr_latex: :environment tabularx :width \linewidth :align lXX
#+attr_latex: :center t :booktabs t :float t #+attr_latex: :center t :booktabs t :float t
| *Characteristics* | *Manual* | | <l> | <c> | <c> |
|----------------------+----------------| | *Characteristics* | *Manual* | *Specifications* |
| Resolution | 2.5nm | |----------------------+----------------+------------------|
| Sub-Divisional Error | $< \pm 15\,nm$ | | Range | Ruler length | > 200 [um] |
| Bandwidth | > 50 kHz | | Resolution | 2.5 [nm] | < 50 [nm rms] |
| Sub-Divisional Error | $< \pm 15\,nm$ | |
| Bandwidth | To be checked | > 5 [kHz] |
#+name: fig:vionic_expected_noise #+name: fig:vionic_expected_noise
#+caption: Expected interpolation errors for the Vionic Encoder #+caption: Expected interpolation errors for the Vionic Encoder
@ -136,3 +137,104 @@ This can be done by clamping the two as done in the mounting strut tool (Figure
* Measurement procedure * Measurement procedure
* Measurement Results * Measurement Results
** Noise Measurement
*** 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
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
addpath('./matlab/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
*** Analysis :ignore:
#+begin_src matlab
load('noise_meas_100s_20kHz.mat', 't', 'x');
x = x - mean(x);
#+end_src
#+begin_src matlab
figure;
hold on;
plot(t, 1e9*x, '.', 'DisplayName', 'Raw');
plot(t, 1e9*lsim(1/(1 + s/2/pi/500), x, t), 'DisplayName', 'LPF - 500Hz')
hold off;
xlabel('Time [s]');
ylabel('Displacement [nm]');
legend('location', 'northeast');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/vionic_noise_time.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:vionic_noise_time
#+caption: Time domain measurement (raw data and low pass filtered data)
#+RESULTS:
[[file:figs/vionic_noise_time.png]]
#+begin_src matlab :exports none
% Compute sampling Frequency
Ts = (t(end) - t(1))/(length(t)-1);
Fs = 1/Ts;
#+end_src
#+begin_src matlab :exports none
% Hannning Windows
win = hanning(ceil(0.5*Fs));
[pxx, f] = pwelch(x, win, [], [], Fs);
#+end_src
#+begin_src matlab :exports none
figure;
plot(f, sqrt(pxx));
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]');
xlim([1, Fs/2]);
ylim([1e-11, 1e-9]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/vionic_noise_asd.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:vionic_noise_asd
#+caption: Amplitude Spectral Density of the measured signal
#+RESULTS:
[[file:figs/vionic_noise_asd.png]]
Let's create a transfer function that approximate the measured noise of the encoder.
#+begin_src matlab
Gn_e = 1.8e-11/(1 + s/2/pi/5e3);
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(f, sqrt(pxx));
plot(f, abs(squeeze(freqresp(Gn_e, f, 'Hz'))), 'k--');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]');
xlim([1, Fs/2]);
ylim([1e-11, 1e-9]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/vionic_noise_asd_model.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:vionic_noise_asd_model
#+caption: Measured ASD of the noise and modelled one
#+RESULTS:
[[file:figs/vionic_noise_asd_model.png]]