Update filenames + gitignore
This commit is contained in:
parent
ad4a6ee31e
commit
ed500ed6f5
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,3 +1,10 @@
|
||||
auto/
|
||||
*.tex
|
||||
*.bbl
|
||||
*.synctex.gz
|
||||
.auctex-auto/
|
||||
_minted*
|
||||
|
||||
# Windows default autosave extension
|
||||
*.asv
|
||||
*rtw/
|
||||
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 123 KiB |
BIN
figs/int_enc_error_mean_time.pdf
Normal file
BIN
figs/int_enc_error_mean_time.pdf
Normal file
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 19 KiB |
BIN
figs/time_domain_comp_bubble_aluminium.pdf
Normal file
BIN
figs/time_domain_comp_bubble_aluminium.pdf
Normal file
Binary file not shown.
BIN
figs/time_domain_comp_bubble_aluminium.png
Normal file
BIN
figs/time_domain_comp_bubble_aluminium.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
543
index.html
543
index.html
@ -1,543 +0,0 @@
|
||||
<?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-12 jeu. 10:17 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Attocube - Test Bench</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<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>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>
|
||||
</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">
|
||||
<h1 class="title">Attocube - Test Bench</h1>
|
||||
<div id="table-of-contents">
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org91ed2af">1. Estimation of the Spectral Density of the Attocube Noise</a>
|
||||
<ul>
|
||||
<li><a href="#org7ed0442">1.1. Long and Slow measurement</a></li>
|
||||
<li><a href="#org84a3a7f">1.2. Short and Fast measurement</a></li>
|
||||
<li><a href="#org8263623">1.3. Obtained Amplitude Spectral Density of the measured displacement</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgfbcdb24">2. Effect of the “bubble sheet” and “Aluminium tube”</a>
|
||||
<ul>
|
||||
<li><a href="#org2c0e0f6">2.1. Aluminium Tube and Bubble Sheet</a></li>
|
||||
<li><a href="#orgab2ff04">2.2. Only Aluminium Tube</a></li>
|
||||
<li><a href="#org5e0cbb8">2.3. Nothing</a></li>
|
||||
<li><a href="#org0161dc2">2.4. Comparison</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org45e7337">3. Measurement of the Attocube’s non-linearity</a>
|
||||
<ul>
|
||||
<li><a href="#orgf2cd3af">3.1. Load Data</a></li>
|
||||
<li><a href="#org9caccde">3.2. Time Domain Results</a></li>
|
||||
<li><a href="#orgb15ec0f">3.3. Difference between Encoder and Interferometer as a function of time</a></li>
|
||||
<li><a href="#orga0c30bc">3.4. Difference between Encoder and Interferometer as a function of position</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
In this document, few caracteristics of the Attocube Displacement Measuring Interferometer IDS3010 (<a href="https://www.attocube.com/en/products/laser-displacement-sensor/displacement-measuring-interferometer">link</a>) are studied:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Section <a href="#org45bc653">1</a>: the ASD noise of the measured displacement is estimated</li>
|
||||
<li>Section <a href="#orgf93a547">2</a>: the effect of two air protections on the stability of the measurement is studied</li>
|
||||
<li>Section <a href="#org421bcba">3</a>: the cyclic non-linearity of the attocube is estimated using a encoder</li>
|
||||
</ul>
|
||||
|
||||
<div id="outline-container-org91ed2af" class="outline-2">
|
||||
<h2 id="org91ed2af"><span class="section-number-2">1</span> Estimation of the Spectral Density of the Attocube Noise</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
<a id="org45bc653"></a>
|
||||
</p>
|
||||
|
||||
<div id="orgeea45a0" class="figure">
|
||||
<p><img src="figs/test-bench-schematic.png" alt="test-bench-schematic.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Test Bench Schematic</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org1945c4e" class="figure">
|
||||
<p><img src="figs/IMG-7865.JPG" alt="IMG-7865.JPG" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Picture of the test bench. The Attocube and mirror are covered by a “bubble sheet”</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org7ed0442" class="outline-3">
|
||||
<h3 id="org7ed0442"><span class="section-number-3">1.1</span> Long and Slow measurement</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
The first measurement was made during ~17 hours with a sampling time of \(T_s = 0.1\,s\).
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'long_test_plastic.mat'</span>, <span class="org-string">'x'</span>, <span class="org-string">'t'</span>)
|
||||
Ts = 0.1; <span class="org-comment">% [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgabef257" class="figure">
|
||||
<p><img src="figs/long_meas_time_domain_full.png" alt="long_meas_time_domain_full.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Long measurement time domain data</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Let’s fit the data with a step response to a first order low pass filter (Figure <a href="#org3effe27">4</a>).
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">f = @(b,x) b(1)<span class="org-type">*</span>(1 <span class="org-type">-</span> exp(<span class="org-type">-</span>x<span class="org-type">/</span>b(2)));
|
||||
|
||||
y_cur = x(t <span class="org-type"><</span> 17.5<span class="org-type">*</span>60<span class="org-type">*</span>60);
|
||||
t_cur = t(t <span class="org-type"><</span> 17.5<span class="org-type">*</span>60<span class="org-type">*</span>60);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur <span class="org-type">-</span> f(b,t_cur)); <span class="org-comment">% Residual Norm Cost Function</span>
|
||||
B0 = [400e<span class="org-type">-</span>9, 2<span class="org-type">*</span>60<span class="org-type">*</span>60]; <span class="org-comment">% Choose Appropriate Initial Estimates</span>
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); <span class="org-comment">% Estimate Parameters ‘B’</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The corresponding time constant is (in [h]):
|
||||
</p>
|
||||
<pre class="example">
|
||||
2.0658
|
||||
</pre>
|
||||
|
||||
|
||||
|
||||
<div id="org3effe27" class="figure">
|
||||
<p><img src="figs/long_meas_time_domain_fit.png" alt="long_meas_time_domain_fit.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Fit of the measurement data with a step response of a first order low pass filter</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
We can see in Figure <a href="#orgabef257">3</a> that there is a transient period where the measured displacement experiences some drifts.
|
||||
This is probably due to thermal effects.
|
||||
We only select the data between <code>t1</code> and <code>t2</code>.
|
||||
The obtained displacement is shown in Figure <a href="#orgdb1e675">5</a>.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">t1 = 10.5; t2 = 17.5; <span class="org-comment">% [h]</span>
|
||||
|
||||
x = x(t <span class="org-type">></span> t1<span class="org-type">*</span>60<span class="org-type">*</span>60 <span class="org-type">&</span> t <span class="org-type"><</span> t2<span class="org-type">*</span>60<span class="org-type">*</span>60);
|
||||
x = x <span class="org-type">-</span> mean(x);
|
||||
t = t(t <span class="org-type">></span> t1<span class="org-type">*</span>60<span class="org-type">*</span>60 <span class="org-type">&</span> t <span class="org-type"><</span> t2<span class="org-type">*</span>60<span class="org-type">*</span>60);
|
||||
t = t <span class="org-type">-</span> t(1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgdb1e675" class="figure">
|
||||
<p><img src="figs/long_meas_time_domain_zoom.png" alt="long_meas_time_domain_zoom.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Kept data (removed slow drifts during the first hours)</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The Power Spectral Density of the measured displacement is computed
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">win = hann(ceil(length(x)<span class="org-type">/</span>20));
|
||||
[p_1, f_1] = pwelch(x, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
As a low pass filter was used in the measurement process, we multiply the PSD by the square of the inverse of the filter’s norm.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>);
|
||||
p_1 = p_1<span class="org-type">./</span>abs(squeeze(freqresp(G_lpf, f_1, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Only frequencies below 2Hz are taken into account (high frequency noise will be measured afterwards).
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">p_1 = p_1(f_1 <span class="org-type"><</span> 2);
|
||||
f_1 = f_1(f_1 <span class="org-type"><</span> 2);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org84a3a7f" class="outline-3">
|
||||
<h3 id="org84a3a7f"><span class="section-number-3">1.2</span> Short and Fast measurement</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
<p>
|
||||
An second measurement is done in order to estimate the high frequency noise of the interferometer.
|
||||
The measurement is done with a sampling time of \(T_s = 0.1\,ms\) and a duration of ~100s.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'short_test_plastic.mat'</span>)
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">x = detrend(x, 0);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The time domain measurement is shown in Figure <a href="#orgb156e4e">6</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgb156e4e" class="figure">
|
||||
<p><img src="figs/short_meas_time_domain.png" alt="short_meas_time_domain.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Time domain measurement with the high sampling rate</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The Power Spectral Density of the measured displacement is computed
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">win = hann(ceil(length(x)<span class="org-type">/</span>20));
|
||||
[p_2, f_2] = pwelch(x, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8263623" class="outline-3">
|
||||
<h3 id="org8263623"><span class="section-number-3">1.3</span> Obtained Amplitude Spectral Density of the measured displacement</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<p>
|
||||
The computed ASD of the two measurements are combined in Figure <a href="#org72c2457">7</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org72c2457" class="figure">
|
||||
<p><img src="figs/psd_combined.png" alt="psd_combined.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Obtained Amplitude Spectral Density of the measured displacement</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgfbcdb24" class="outline-2">
|
||||
<h2 id="orgfbcdb24"><span class="section-number-2">2</span> Effect of the “bubble sheet” and “Aluminium tube”</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
<a id="orgf93a547"></a>
|
||||
</p>
|
||||
|
||||
<div id="org5a9ad77" class="figure">
|
||||
<p><img src="figs/IMG-7864.JPG" alt="IMG-7864.JPG" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Aluminium tube used to protect the beam path from disturbances</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org2c0e0f6" class="outline-3">
|
||||
<h3 id="org2c0e0f6"><span class="section-number-3">2.1</span> Aluminium Tube and Bubble Sheet</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">'short_test_plastic.mat'</span>);
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">x = detrend(x, 0);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">win = hann(ceil(length(x)<span class="org-type">/</span>10));
|
||||
[p_1, f_1] = pwelch(x, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgab2ff04" class="outline-3">
|
||||
<h3 id="orgab2ff04"><span class="section-number-3">2.2</span> Only Aluminium Tube</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'short_test_alu_tube.mat'</span>);
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">x = detrend(x, 0);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The time domain measurement is shown in Figure <a href="#orgb156e4e">6</a>.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">win = hann(ceil(length(x)<span class="org-type">/</span>10));
|
||||
[p_2, f_2] = pwelch(x, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5e0cbb8" class="outline-3">
|
||||
<h3 id="org5e0cbb8"><span class="section-number-3">2.3</span> Nothing</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'short_test_without_material.mat'</span>);
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">x = detrend(x, 0);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The time domain measurement is shown in Figure <a href="#orgb156e4e">6</a>.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">win = hann(ceil(length(x)<span class="org-type">/</span>10));
|
||||
[p_3, f_3] = pwelch(x, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0161dc2" class="outline-3">
|
||||
<h3 id="org0161dc2"><span class="section-number-3">2.4</span> Comparison</h3>
|
||||
<div class="outline-text-3" id="text-2-4">
|
||||
|
||||
<div id="orgcaa0ad4" class="figure">
|
||||
<p><img src="figs/asd_noise_comp_bubble_aluminium.png" alt="asd_noise_comp_bubble_aluminium.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Comparison of the noise ASD with and without bubble sheet</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org45e7337" class="outline-2">
|
||||
<h2 id="org45e7337"><span class="section-number-2">3</span> Measurement of the Attocube’s non-linearity</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
<a id="org421bcba"></a>
|
||||
</p>
|
||||
<p>
|
||||
The measurement setup is shown in Figure <a href="#org1b67344">10</a>.
|
||||
</p>
|
||||
|
||||
<div class="note" id="org1f1e587">
|
||||
<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>
|
||||
|
||||
|
||||
<div id="org1b67344" class="figure">
|
||||
<p><img src="figs/exp_setup_schematic.png" alt="exp_setup_schematic.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Schematic of the Experiment</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
A DAC and voltage amplified are used to move the mass with the Amplified Piezoelectric Actuator (APA95ML).
|
||||
The encoder and the attocube are measure ring the same motion.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
As will be shown shortly, this measurement permitted to measure the period non-linearity of the Attocube.
|
||||
</p>
|
||||
</div>
|
||||
<div id="outline-container-orgf2cd3af" class="outline-3">
|
||||
<h3 id="orgf2cd3af"><span class="section-number-3">3.1</span> Load Data</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
The measurement data are loaded and the offset are removed using the <code>detrend</code> command.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'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>);
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% Sampling Time [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">interferometer = detrend(interferometer, 0);
|
||||
encoder = detrend(encoder, 0);
|
||||
u = detrend(u, 0);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org9caccde" class="outline-3">
|
||||
<h3 id="org9caccde"><span class="section-number-3">3.2</span> Time Domain Results</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<p>
|
||||
One period of the displacement of the mass as measured by the encoder and interferometer are shown in Figure <a href="#orgadbe636">11</a>.
|
||||
It consist of the sinusoidal motion at 0.5Hz with an amplitude of approximately \(70\mu m\).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The frequency of the motion is chosen such that no resonance in the system is excited.
|
||||
This should improve the coherence between the measurements made by the encoder and interferometer.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgadbe636" class="figure">
|
||||
<p><img src="figs/int_enc_one_cycle.png" alt="int_enc_one_cycle.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>One cycle measurement</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The difference between the two measurements during the same period is shown in Figure <a href="#org448b33f">12</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org448b33f" 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 12: </span>Difference between the Encoder and the interferometer during one cycle</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb15ec0f" class="outline-3">
|
||||
<h3 id="orgb15ec0f"><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">
|
||||
<p>
|
||||
The data is filtered using a second order low pass filter with a cut-off frequency \(\omega_0\) as defined below.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5; <span class="org-comment">% [rad/s]</span>
|
||||
xi = 0.7;
|
||||
|
||||
G_lpf = 1<span class="org-type">/</span>(1 <span class="org-type">+</span> 2<span class="org-type">*</span>xi<span class="org-type">/</span>w0<span class="org-type">*</span>s <span class="org-type">+</span> s<span class="org-type">^</span>2<span class="org-type">/</span>w0<span class="org-type">^</span>2);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
After filtering, the data is “re-shaped” such that we can superimpose all the measured periods as shown in Figure <a href="#org99397ec">13</a>.
|
||||
This gives an idea of the measurement error as given by the Attocube during a \(70 \mu m\) motion.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">d_err_mean = reshape(lsim(G_lpf, encoder <span class="org-type">-</span> interferometer, t), [2<span class="org-type">/</span>Ts floor(Ts<span class="org-type">/</span>2<span class="org-type">*</span>length(encoder))]);
|
||||
d_err_mean = d_err_mean <span class="org-type">-</span> mean(d_err_mean);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org99397ec" 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 13: </span>Difference between the two measurement in the time domain, averaged for all the cycles</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga0c30bc" class="outline-3">
|
||||
<h3 id="orga0c30bc"><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>
|
||||
Figure <a href="#org99397ec">13</a> gives the measurement error as a function of time.
|
||||
We here wish the compute this measurement error as a function of the position (as measured by the encoer).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To do so, all the attocube measurements corresponding to each position measured by the Encoder (resolution of \(1nm\)) are averaged.
|
||||
Figure <a href="#org0eccff0">14</a> is obtained where we clearly see an error with a period comparable to the motion range and a much smaller period corresponding to the non-linear period errors that we wish the estimate.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">[e_sorted, <span class="org-type">~</span>, e_ind] = unique(encoder);
|
||||
|
||||
i_mean = zeros(length(e_sorted), 1);
|
||||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(e_sorted)</span>
|
||||
i_mean(<span class="org-constant">i</span>) = mean(interferometer(e_ind <span class="org-type">==</span> <span class="org-constant">i</span>));
|
||||
<span class="org-keyword">end</span>
|
||||
|
||||
i_mean_error = (i_mean <span class="org-type">-</span> e_sorted);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org0eccff0" 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 14: </span>Difference between the two measurement as a function of the measured position by the encoder, averaged for all the cycles</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The period of the non-linearity seems to be equal to \(765 nm\) which corresponds to half the wavelength of the Laser (\(1.53 \mu m\)).
|
||||
For the motion range done here, the non-linearity is measured over ~18 periods which permits to do some averaging.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">win_length = 1530<span class="org-type">/</span>2; <span class="org-comment">% length of the windows (corresponds to 765 nm)</span>
|
||||
num_avg = floor(length(e_sorted)<span class="org-type">/</span>win_length); <span class="org-comment">% number of averaging</span>
|
||||
|
||||
i_init = ceil((length(e_sorted) <span class="org-type">-</span> win_length<span class="org-type">*</span>num_avg)<span class="org-type">/</span>2); <span class="org-comment">% does not start at the extremity</span>
|
||||
|
||||
e_sorted_mean_over_period = mean(reshape(i_mean_error(i_init<span class="org-type">:</span>i_init<span class="org-type">+</span>win_length<span class="org-type">*</span>num_avg<span class="org-type">-</span>1), [win_length num_avg]), 2);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The obtained periodic non-linearity is shown in Figure <a href="#orge856c17">15</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orge856c17" 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 15: </span>Non-Linearity of the Interferometer over the period of the wavelength</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2020-11-12 jeu. 10:17</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
1
index.html
Symbolic link
1
index.html
Symbolic link
@ -0,0 +1 @@
|
||||
test-bench-attocube.html
|
521
test-bench-attocube.html
Normal file
521
test-bench-attocube.html
Normal file
@ -0,0 +1,521 @@
|
||||
<?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-05-12 mer. 13:32 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Attocube - Test Bench</title>
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
<meta name="generator" content="Org Mode" />
|
||||
<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>
|
||||
MathJax = {
|
||||
svg: {
|
||||
scale: 1,
|
||||
fontCache: "global"
|
||||
},
|
||||
tex: {
|
||||
tags: "ams",
|
||||
multlineWidth: "%MULTLINEWIDTH",
|
||||
tagSide: "right",
|
||||
macros: {bm: ["\\boldsymbol{#1}",1],},
|
||||
tagIndent: ".8em"
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script id="MathJax-script" async
|
||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
|
||||
</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">
|
||||
<h1 class="title">Attocube - Test Bench</h1>
|
||||
<div id="table-of-contents">
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#orgad0ac54">1. Estimation of the Spectral Density of the Attocube Noise</a>
|
||||
<ul>
|
||||
<li><a href="#org757fb16">1.1. Long and Slow measurement</a></li>
|
||||
<li><a href="#orgb6208e7">1.2. Short and Fast measurement</a></li>
|
||||
<li><a href="#org3bd5ef2">1.3. Obtained Amplitude Spectral Density of the measured displacement</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org4a27f63">2. Effect of the “bubble sheet” and “Aluminium tube”</a></li>
|
||||
<li><a href="#org1df7d3a">3. Measurement of the Attocube’s non-linearity</a>
|
||||
<ul>
|
||||
<li><a href="#orgcff7a2a">3.1. Load Data</a></li>
|
||||
<li><a href="#orgf79eda1">3.2. Time Domain Results</a></li>
|
||||
<li><a href="#org46f4beb">3.3. Difference between Encoder and Interferometer as a function of time</a></li>
|
||||
<li><a href="#org044dbe7">3.4. Difference between Encoder and Interferometer as a function of position</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<p>This report is also available as a <a href="./test-bench-attocube.pdf">pdf</a>.</p>
|
||||
<hr>
|
||||
|
||||
<p>
|
||||
In this document, few caracteristics of the Attocube Displacement Measuring Interferometer IDS3010 (<a href="https://www.attocube.com/en/products/laser-displacement-sensor/displacement-measuring-interferometer">link</a>) are studied:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Section <a href="#org8ac57f2">1</a>: the ASD noise of the measured displacement is estimated</li>
|
||||
<li>Section <a href="#org5a54545">2</a>: the effect of two air protections on the stability of the measurement is studied</li>
|
||||
<li>Section <a href="#org477e3cc">3</a>: the cyclic non-linearity of the attocube is estimated using a encoder</li>
|
||||
</ul>
|
||||
|
||||
<div id="outline-container-orgad0ac54" class="outline-2">
|
||||
<h2 id="orgad0ac54"><span class="section-number-2">1</span> Estimation of the Spectral Density of the Attocube Noise</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
<a id="org8ac57f2"></a>
|
||||
</p>
|
||||
|
||||
<div id="org68c205b" class="figure">
|
||||
<p><img src="figs/test-bench-schematic.png" alt="test-bench-schematic.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Test Bench Schematic</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org4669be2" class="figure">
|
||||
<p><img src="figs/IMG-7865.JPG" alt="IMG-7865.JPG" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Picture of the test bench. The Attocube and mirror are covered by a “bubble sheet”</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-org757fb16" class="outline-3">
|
||||
<h3 id="org757fb16"><span class="section-number-3">1.1</span> Long and Slow measurement</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
The first measurement was made during ~17 hours with a sampling time of \(T_s = 0.1\,s\).
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> load(<span class="org-string">'long_test_plastic.mat'</span>, <span class="org-string">'x'</span>, <span class="org-string">'t'</span>)
|
||||
Ts = 0.1; <span class="org-comment">% [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgc4044aa" class="figure">
|
||||
<p><img src="figs/long_meas_time_domain_full.png" alt="long_meas_time_domain_full.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Long measurement time domain data</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Let’s fit the data with a step response to a first order low pass filter (Figure <a href="#org6d464f2">4</a>).
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> f = @(b,x) b(1)<span class="org-type">*</span>(1 <span class="org-type">-</span> exp(<span class="org-type">-</span>x<span class="org-type">/</span>b(2)));
|
||||
|
||||
y_cur = x(t <span class="org-type"><</span> 17.5<span class="org-type">*</span>60<span class="org-type">*</span>60);
|
||||
t_cur = t(t <span class="org-type"><</span> 17.5<span class="org-type">*</span>60<span class="org-type">*</span>60);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur <span class="org-type">-</span> f(b,t_cur)); <span class="org-comment">% Residual Norm Cost Function</span>
|
||||
B0 = [400e<span class="org-type">-</span>9, 2<span class="org-type">*</span>60<span class="org-type">*</span>60]; <span class="org-comment">% Choose Appropriate Initial Estimates</span>
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); <span class="org-comment">% Estimate Parameters ‘B’</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The corresponding time constant is (in [h]):
|
||||
</p>
|
||||
<pre class="example">
|
||||
2.0658
|
||||
</pre>
|
||||
|
||||
|
||||
|
||||
<div id="org6d464f2" class="figure">
|
||||
<p><img src="figs/long_meas_time_domain_fit.png" alt="long_meas_time_domain_fit.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Fit of the measurement data with a step response of a first order low pass filter</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
We can see in Figure <a href="#orgc4044aa">3</a> that there is a transient period where the measured displacement experiences some drifts.
|
||||
This is probably due to thermal effects.
|
||||
We only select the data between <code>t1</code> and <code>t2</code>.
|
||||
The obtained displacement is shown in Figure <a href="#org551a453">5</a>.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> t1 = 10.5; t2 = 17.5; <span class="org-comment">% [h]</span>
|
||||
|
||||
x = x(t <span class="org-type">></span> t1<span class="org-type">*</span>60<span class="org-type">*</span>60 <span class="org-type">&</span> t <span class="org-type"><</span> t2<span class="org-type">*</span>60<span class="org-type">*</span>60);
|
||||
x = x <span class="org-type">-</span> mean(x);
|
||||
t = t(t <span class="org-type">></span> t1<span class="org-type">*</span>60<span class="org-type">*</span>60 <span class="org-type">&</span> t <span class="org-type"><</span> t2<span class="org-type">*</span>60<span class="org-type">*</span>60);
|
||||
t = t <span class="org-type">-</span> t(1);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org551a453" class="figure">
|
||||
<p><img src="figs/long_meas_time_domain_zoom.png" alt="long_meas_time_domain_zoom.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Kept data (removed slow drifts during the first hours)</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The Power Spectral Density of the measured displacement is computed
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> win = hann(ceil(length(x)<span class="org-type">/</span>20));
|
||||
[p_1, f_1] = pwelch(x, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
As a low pass filter was used in the measurement process, we multiply the PSD by the square of the inverse of the filter’s norm.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<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>);
|
||||
p_1 = p_1<span class="org-type">./</span>abs(squeeze(freqresp(G_lpf, f_1, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Only frequencies below 2Hz are taken into account (high frequency noise will be measured afterwards).
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> p_1 = p_1(f_1 <span class="org-type"><</span> 2);
|
||||
f_1 = f_1(f_1 <span class="org-type"><</span> 2);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb6208e7" class="outline-3">
|
||||
<h3 id="orgb6208e7"><span class="section-number-3">1.2</span> Short and Fast measurement</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
<p>
|
||||
An second measurement is done in order to estimate the high frequency noise of the interferometer.
|
||||
The measurement is done with a sampling time of \(T_s = 0.1\,ms\) and a duration of ~100s.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> load(<span class="org-string">'short_test_plastic.mat'</span>)
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> x = detrend(x, 0);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The time domain measurement is shown in Figure <a href="#orgc1ba734">6</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgc1ba734" class="figure">
|
||||
<p><img src="figs/short_meas_time_domain.png" alt="short_meas_time_domain.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Time domain measurement with the high sampling rate</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The Power Spectral Density of the measured displacement is computed
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> win = hann(ceil(length(x)<span class="org-type">/</span>20));
|
||||
[p_2, f_2] = pwelch(x, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org3bd5ef2" class="outline-3">
|
||||
<h3 id="org3bd5ef2"><span class="section-number-3">1.3</span> Obtained Amplitude Spectral Density of the measured displacement</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<p>
|
||||
The computed ASD of the two measurements are combined in Figure <a href="#org7f818d7">7</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org7f818d7" class="figure">
|
||||
<p><img src="figs/psd_combined.png" alt="psd_combined.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Obtained Amplitude Spectral Density of the measured displacement</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4a27f63" class="outline-2">
|
||||
<h2 id="org4a27f63"><span class="section-number-2">2</span> Effect of the “bubble sheet” and “Aluminium tube”</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
<a id="org5a54545"></a>
|
||||
</p>
|
||||
|
||||
<div id="org95d7372" class="figure">
|
||||
<p><img src="figs/IMG-7864.JPG" alt="IMG-7864.JPG" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Aluminium tube used to protect the beam path from disturbances</p>
|
||||
</div>
|
||||
<p>
|
||||
Measurements corresponding to the used of both the aluminium tube and the “bubble sheet ”are loaded and PSD is computed.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> load(<span class="org-string">'short_test_plastic.mat'</span>);
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% [s]</span>
|
||||
|
||||
t_1 = t;
|
||||
x_1 = detrend(x, 0);
|
||||
|
||||
[p_1, f_1] = pwelch(x_1, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
<p>
|
||||
Then, the measurement corresponding to the use of the aluminium tube only are loaded and the PSD is computed.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> load(<span class="org-string">'short_test_alu_tube.mat'</span>);
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% [s]</span>
|
||||
|
||||
t_2 = t;
|
||||
x_2 = detrend(x, 0);
|
||||
|
||||
[p_2, f_2] = pwelch(x_2, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
<p>
|
||||
Finally, the measurements when neither using the aluminium tube nor the “bubble sheet” are used.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> load(<span class="org-string">'short_test_without_material.mat'</span>);
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% [s]</span>
|
||||
|
||||
t_3 = t;
|
||||
x_3 = detrend(x, 0);
|
||||
|
||||
[p_3, f_3] = pwelch(x_3, win, [], [], 1<span class="org-type">/</span>Ts);
|
||||
</pre>
|
||||
</div>
|
||||
<p>
|
||||
The time domain signals are compared in Figure <a href="#org58f5584">9</a> and the power spectral densities are compared in Figure <a href="#orgcc1019d">10</a>.
|
||||
</p>
|
||||
|
||||
<div id="org58f5584" class="figure">
|
||||
<p><img src="figs/time_domain_comp_bubble_aluminium.png" alt="time_domain_comp_bubble_aluminium.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Time domain signals</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgcc1019d" class="figure">
|
||||
<p><img src="figs/asd_noise_comp_bubble_aluminium.png" alt="asd_noise_comp_bubble_aluminium.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Comparison of the noise ASD with and without bubble sheet</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1df7d3a" class="outline-2">
|
||||
<h2 id="org1df7d3a"><span class="section-number-2">3</span> Measurement of the Attocube’s non-linearity</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
<a id="org477e3cc"></a>
|
||||
</p>
|
||||
<p>
|
||||
The measurement setup is shown in Figure <a href="#orgce55d14">11</a>.
|
||||
</p>
|
||||
|
||||
<div class="note" id="org6167c44">
|
||||
<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>
|
||||
|
||||
|
||||
<div id="orgce55d14" class="figure">
|
||||
<p><img src="figs/exp_setup_schematic.png" alt="exp_setup_schematic.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Schematic of the Experiment</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
A DAC and voltage amplified are used to move the mass with the Amplified Piezoelectric Actuator (APA95ML).
|
||||
The encoder and the attocube are measure ring the same motion.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
As will be shown shortly, this measurement permitted to measure the period non-linearity of the Attocube.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgcff7a2a" class="outline-3">
|
||||
<h3 id="orgcff7a2a"><span class="section-number-3">3.1</span> Load Data</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
The measurement data are loaded and the offset are removed using the <code>detrend</code> command.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> load(<span class="org-string">'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>);
|
||||
Ts = 1e<span class="org-type">-</span>4; <span class="org-comment">% Sampling Time [s]</span>
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> interferometer = detrend(interferometer, 0);
|
||||
encoder = detrend(encoder, 0);
|
||||
u = detrend(u, 0);
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgf79eda1" class="outline-3">
|
||||
<h3 id="orgf79eda1"><span class="section-number-3">3.2</span> Time Domain Results</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<p>
|
||||
One period of the displacement of the mass as measured by the encoder and interferometer are shown in Figure <a href="#org0f63236">12</a>.
|
||||
It consist of the sinusoidal motion at 0.5Hz with an amplitude of approximately \(70\mu m\).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The frequency of the motion is chosen such that no resonance in the system is excited.
|
||||
This should improve the coherence between the measurements made by the encoder and interferometer.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org0f63236" class="figure">
|
||||
<p><img src="figs/int_enc_one_cycle.png" alt="int_enc_one_cycle.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 12: </span>One cycle measurement</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The difference between the two measurements during the same period is shown in Figure <a href="#org62cb585">13</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org62cb585" 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 13: </span>Difference between the Encoder and the interferometer during one cycle</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org46f4beb" class="outline-3">
|
||||
<h3 id="org46f4beb"><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">
|
||||
<p>
|
||||
The data is filtered using a second order low pass filter with a cut-off frequency \(\omega_0\) as defined below.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> w0 = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5; <span class="org-comment">% [rad/s]</span>
|
||||
xi = 0.7;
|
||||
|
||||
G_lpf = 1<span class="org-type">/</span>(1 <span class="org-type">+</span> 2<span class="org-type">*</span>xi<span class="org-type">/</span>w0<span class="org-type">*</span>s <span class="org-type">+</span> s<span class="org-type">^</span>2<span class="org-type">/</span>w0<span class="org-type">^</span>2);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
After filtering, the data is “re-shaped” such that we can superimpose all the measured periods as shown in Figure <a href="#org3caa2df">14</a>.
|
||||
This gives an idea of the measurement error as given by the Attocube during a \(70 \mu m\) motion.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> d_err_mean = reshape(lsim(G_lpf, encoder <span class="org-type">-</span> interferometer, t), [2<span class="org-type">/</span>Ts floor(Ts<span class="org-type">/</span>2<span class="org-type">*</span>length(encoder))]);
|
||||
d_err_mean = d_err_mean <span class="org-type">-</span> mean(d_err_mean);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org3caa2df" 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 14: </span>Difference between the two measurement in the time domain, averaged for all the cycles</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org044dbe7" class="outline-3">
|
||||
<h3 id="org044dbe7"><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>
|
||||
Figure <a href="#org3caa2df">14</a> gives the measurement error as a function of time.
|
||||
We here wish the compute this measurement error as a function of the position (as measured by the encoer).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
To do so, all the attocube measurements corresponding to each position measured by the Encoder (resolution of \(1nm\)) are averaged.
|
||||
Figure <a href="#org706801f">15</a> is obtained where we clearly see an error with a period comparable to the motion range and a much smaller period corresponding to the non-linear period errors that we wish the estimate.
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> [e_sorted, <span class="org-type">~</span>, e_ind] = unique(encoder);
|
||||
|
||||
i_mean = zeros(length(e_sorted), 1);
|
||||
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(e_sorted)</span>
|
||||
i_mean(<span class="org-constant">i</span>) = mean(interferometer(e_ind <span class="org-type">==</span> <span class="org-constant">i</span>));
|
||||
<span class="org-keyword">end</span>
|
||||
|
||||
i_mean_error = (i_mean <span class="org-type">-</span> e_sorted);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org706801f" 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 15: </span>Difference between the two measurement as a function of the measured position by the encoder, averaged for all the cycles</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The period of the non-linearity seems to be equal to \(765 nm\) which corresponds to half the wavelength of the Laser (\(1.53 \mu m\)).
|
||||
For the motion range done here, the non-linearity is measured over ~18 periods which permits to do some averaging.
|
||||
</p>
|
||||
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"> win_length = 1530<span class="org-type">/</span>2; <span class="org-comment">% length of the windows (corresponds to 765 nm)</span>
|
||||
num_avg = floor(length(e_sorted)<span class="org-type">/</span>win_length); <span class="org-comment">% number of averaging</span>
|
||||
|
||||
i_init = ceil((length(e_sorted) <span class="org-type">-</span> win_length<span class="org-type">*</span>num_avg)<span class="org-type">/</span>2); <span class="org-comment">% does not start at the extremity</span>
|
||||
|
||||
e_sorted_mean_over_period = mean(reshape(i_mean_error(i_init<span class="org-type">:</span>i_init<span class="org-type">+</span>win_length<span class="org-type">*</span>num_avg<span class="org-type">-</span>1), [win_length num_avg]), 2);
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The obtained periodic non-linearity is shown in Figure <a href="#orgfc3683a">16</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgfc3683a" 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 16: </span>Non-Linearity of the Interferometer over the period of the wavelength</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2021-05-12 mer. 13:32</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -10,6 +10,13 @@
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
|
||||
#+HTML_HEAD: <script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
|
||||
|
||||
#+BIND: org-latex-image-default-option "scale=1"
|
||||
#+BIND: org-latex-image-default-width ""
|
||||
|
||||
#+LaTeX_CLASS: scrreprt
|
||||
#+LaTeX_CLASS_OPTIONS: [a4paper, 10pt, DIV=12, parskip=full]
|
||||
#+LaTeX_HEADER_EXTRA: \input{preamble.tex}
|
||||
|
||||
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||
#+PROPERTY: header-args:matlab+ :comments org
|
||||
#+PROPERTY: header-args:matlab+ :exports both
|
||||
@ -20,6 +27,12 @@
|
||||
#+PROPERTY: header-args:matlab+ :output-dir figs
|
||||
:END:
|
||||
|
||||
#+begin_export html
|
||||
<hr>
|
||||
<p>This report is also available as a <a href="./test-bench-attocube.pdf">pdf</a>.</p>
|
||||
<hr>
|
||||
#+end_export
|
||||
|
||||
* Introduction :ignore:
|
||||
|
||||
In this document, few caracteristics of the Attocube Displacement Measuring Interferometer IDS3010 ([[https://www.attocube.com/en/products/laser-displacement-sensor/displacement-measuring-interferometer][link]]) are studied:
|
||||
@ -41,6 +54,7 @@ In this document, few caracteristics of the Attocube Displacement Measuring Inte
|
||||
#+name: fig:test-bench-picture
|
||||
#+caption: Picture of the test bench. The Attocube and mirror are covered by a "bubble sheet"
|
||||
#+ATTR_ORG: :width 600px
|
||||
#+ATTR_LATEX: :width \linewidth
|
||||
[[file:figs/IMG-7865.JPG]]
|
||||
|
||||
** Matlab Init :noexport:ignore:
|
||||
@ -237,10 +251,11 @@ The computed ASD of the two measurements are combined in Figure [[fig:psd_combin
|
||||
<<sec:effect_air_protection>>
|
||||
** Introduction :ignore:
|
||||
|
||||
#+name: fig:picture-test-bench-aluminium-tube
|
||||
#+caption: Aluminium tube used to protect the beam path from disturbances
|
||||
#+name: fig:picture-test-bench-aluminium-tube
|
||||
#+caption: Aluminium tube used to protect the beam path from disturbances
|
||||
#+ATTR_ORG: :width 600px
|
||||
[[file:figs/IMG-7864.JPG]]
|
||||
#+ATTR_LATEX: :width \linewidth
|
||||
[[file:figs/IMG-7864.JPG]]
|
||||
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
@ -259,81 +274,74 @@ The computed ASD of the two measurements are combined in Figure [[fig:psd_combin
|
||||
addpath('./mat/');
|
||||
#+end_src
|
||||
|
||||
** Aluminium Tube and Bubble Sheet
|
||||
** Aluminium Tube and Bubble Sheet :ignore:
|
||||
Measurements corresponding to the used of both the aluminium tube and the "bubble sheet "are loaded and PSD is computed.
|
||||
#+begin_src matlab
|
||||
load('short_test_plastic.mat');
|
||||
Ts = 1e-4; % [s]
|
||||
|
||||
t_1 = t;
|
||||
x_1 = detrend(x, 0);
|
||||
|
||||
[p_1, f_1] = pwelch(x_1, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
x = detrend(x, 0);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
plot(t, 1e9*x)
|
||||
xlabel('Time [s]'); ylabel('Displacement [nm]');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
win = hann(ceil(length(x)/10));
|
||||
[p_1, f_1] = pwelch(x, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
** Only Aluminium Tube
|
||||
** Only Aluminium Tube :ignore:
|
||||
Then, the measurement corresponding to the use of the aluminium tube only are loaded and the PSD is computed.
|
||||
#+begin_src matlab
|
||||
load('short_test_alu_tube.mat');
|
||||
Ts = 1e-4; % [s]
|
||||
|
||||
t_2 = t;
|
||||
x_2 = detrend(x, 0);
|
||||
|
||||
[p_2, f_2] = pwelch(x_2, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
x = detrend(x, 0);
|
||||
#+end_src
|
||||
|
||||
The time domain measurement is shown in Figure [[fig:short_meas_time_domain]].
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
plot(t, 1e9*x)
|
||||
xlabel('Time [s]'); ylabel('Displacement [nm]');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
win = hann(ceil(length(x)/10));
|
||||
[p_2, f_2] = pwelch(x, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
** Nothing
|
||||
** Nothing :ignore:
|
||||
Finally, the measurements when neither using the aluminium tube nor the "bubble sheet" are used.
|
||||
#+begin_src matlab
|
||||
load('short_test_without_material.mat');
|
||||
Ts = 1e-4; % [s]
|
||||
|
||||
t_3 = t;
|
||||
x_3 = detrend(x, 0);
|
||||
|
||||
[p_3, f_3] = pwelch(x_3, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
x = detrend(x, 0);
|
||||
#+end_src
|
||||
|
||||
The time domain measurement is shown in Figure [[fig:short_meas_time_domain]].
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
plot(t, 1e9*x)
|
||||
xlabel('Time [s]'); ylabel('Displacement [nm]');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
win = hann(ceil(length(x)/10));
|
||||
[p_3, f_3] = pwelch(x, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
** Comparison
|
||||
** Comparison :ignore:
|
||||
The time domain signals are compared in Figure [[fig:time_domain_comp_bubble_aluminium]] and the power spectral densities are compared in Figure [[fig:asd_noise_comp_bubble_aluminium]].
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
hold on;
|
||||
plot(f_1(8:end), sqrt(p_1(8:end)), '-', ...
|
||||
'DisplayName', 'Alunimium + Bubble');
|
||||
plot(t_3, 1e9*x_3, 'DisplayName', 'Nothing');
|
||||
plot(t_2, 1e9*x_2, 'DisplayName', 'Alunimium');
|
||||
plot(t_1, 1e9*x_1, 'DisplayName', 'Alunimium + Bubble');
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Displacement [nm]')
|
||||
legend('location', 'southeast');
|
||||
ylim([-20, 20]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/time_domain_comp_bubble_aluminium.pdf', 'width', 'wide', 'height', 'normal');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:time_domain_comp_bubble_aluminium
|
||||
#+caption: Time domain signals
|
||||
#+RESULTS:
|
||||
[[file:figs/time_domain_comp_bubble_aluminium.png]]
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
hold on;
|
||||
plot(f_3(8:end), sqrt(p_3(8:end)), '-', ...
|
||||
'DisplayName', 'Nothing');
|
||||
plot(f_2(8:end), sqrt(p_2(8:end)), '-', ...
|
||||
'DisplayName', 'Aluminium');
|
||||
plot(f_3(8:end), sqrt(p_3(8:end)), '-', ...
|
||||
'DisplayName', 'nothing');
|
||||
plot(f_1(8:end), sqrt(p_1(8:end)), '-', ...
|
||||
'DisplayName', 'Alunimium + Bubble');
|
||||
hold off;
|
||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
||||
ylabel('ASD [$m/\sqrt{Hz}$]'); xlabel('Frequency [Hz]');
|
||||
@ -355,6 +363,7 @@ The time domain measurement is shown in Figure [[fig:short_meas_time_domain]].
|
||||
:header-args:matlab+: :tangle matlab/attocube_non_linearity.m
|
||||
:END:
|
||||
<<sec:attocube_non_linearity>>
|
||||
|
||||
** Introduction :ignore:
|
||||
The measurement setup is shown in Figure [[fig:exp_setup_schematic]].
|
||||
|
||||
@ -484,7 +493,7 @@ This gives an idea of the measurement error as given by the Attocube during a $7
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/int_enc_error_mean_time.pdf', 'width', 'wide', 'height', 'normal', 'pdf', false);
|
||||
exportFig('figs/int_enc_error_mean_time.pdf', 'width', 'wide', 'height', 'normal', 'simplify', true);
|
||||
#+end_src
|
||||
|
||||
#+name: fig:int_enc_error_mean_time
|
BIN
test-bench-attocube.pdf
Normal file
BIN
test-bench-attocube.pdf
Normal file
Binary file not shown.
360
test-bench-attocube.tex
Normal file
360
test-bench-attocube.tex
Normal file
@ -0,0 +1,360 @@
|
||||
% Created 2020-12-10 jeu. 18:27
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full]{scrreprt}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{grffile}
|
||||
\usepackage{longtable}
|
||||
\usepackage{wrapfig}
|
||||
\usepackage{rotating}
|
||||
\usepackage[normalem]{ulem}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{textcomp}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{capt-of}
|
||||
\usepackage{hyperref}
|
||||
\usepackage[most]{tcolorbox}
|
||||
\usepackage{bm}
|
||||
\usepackage{booktabs}
|
||||
\usepackage{tabularx}
|
||||
\usepackage{array}
|
||||
\usepackage{siunitx}
|
||||
\input{preamble.tex}
|
||||
\author{Dehaeze Thomas}
|
||||
\date{\today}
|
||||
\title{Attocube - Test Bench}
|
||||
\hypersetup{
|
||||
pdfauthor={Dehaeze Thomas},
|
||||
pdftitle={Attocube - Test Bench},
|
||||
pdfkeywords={},
|
||||
pdfsubject={},
|
||||
pdfcreator={Emacs 27.1 (Org mode 9.5)},
|
||||
pdflang={English}}
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
\tableofcontents
|
||||
|
||||
|
||||
In this document, few caracteristics of the Attocube Displacement Measuring Interferometer IDS3010 (\href{https://www.attocube.com/en/products/laser-displacement-sensor/displacement-measuring-interferometer}{link}) are studied:
|
||||
\begin{itemize}
|
||||
\item Section \ref{sec:attocube_asd_noise}: the ASD noise of the measured displacement is estimated
|
||||
\item Section \ref{sec:effect_air_protection}: the effect of two air protections on the stability of the measurement is studied
|
||||
\item Section \ref{sec:attocube_non_linearity}: the cyclic non-linearity of the attocube is estimated using a encoder
|
||||
\end{itemize}
|
||||
|
||||
\chapter{Estimation of the Spectral Density of the Attocube Noise}
|
||||
\label{sec:orgdeffe75}
|
||||
\label{sec:attocube_asd_noise}
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test-bench-schematic.png}
|
||||
\caption{\label{fig:test-bench-schematic}Test Bench Schematic}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1,width=\linewidth]{figs/IMG-7865.JPG}
|
||||
\caption{\label{fig:test-bench-picture}Picture of the test bench. The Attocube and mirror are covered by a ``bubble sheet''}
|
||||
\end{figure}
|
||||
\section{Long and Slow measurement}
|
||||
\label{sec:orgee32cb3}
|
||||
The first measurement was made during \textasciitilde{}17 hours with a sampling time of \(T_s = 0.1\,s\).
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
load('long_test_plastic.mat', 'x', 't')
|
||||
Ts = 0.1; % [s]
|
||||
\end{minted}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/long_meas_time_domain_full.png}
|
||||
\caption{\label{fig:long_meas_time_domain_full}Long measurement time domain data}
|
||||
\end{figure}
|
||||
|
||||
Let's fit the data with a step response to a first order low pass filter (Figure \ref{fig:long_meas_time_domain_fit}).
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
f = @(b,x) b(1)*(1 - exp(-x/b(2)));
|
||||
|
||||
y_cur = x(t < 17.5*60*60);
|
||||
t_cur = t(t < 17.5*60*60);
|
||||
|
||||
nrmrsd = @(b) norm(y_cur - f(b,t_cur)); % Residual Norm Cost Function
|
||||
B0 = [400e-9, 2*60*60]; % Choose Appropriate Initial Estimates
|
||||
[B,rnrm] = fminsearch(nrmrsd, B0); % Estimate Parameters ‘B’
|
||||
\end{minted}
|
||||
|
||||
The corresponding time constant is (in [h]):
|
||||
\begin{verbatim}
|
||||
2.0658
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/long_meas_time_domain_fit.png}
|
||||
\caption{\label{fig:long_meas_time_domain_fit}Fit of the measurement data with a step response of a first order low pass filter}
|
||||
\end{figure}
|
||||
|
||||
We can see in Figure \ref{fig:long_meas_time_domain_full} that there is a transient period where the measured displacement experiences some drifts.
|
||||
This is probably due to thermal effects.
|
||||
We only select the data between \texttt{t1} and \texttt{t2}.
|
||||
The obtained displacement is shown in Figure \ref{fig:long_meas_time_domain_zoom}.
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
t1 = 10.5; t2 = 17.5; % [h]
|
||||
|
||||
x = x(t > t1*60*60 & t < t2*60*60);
|
||||
x = x - mean(x);
|
||||
t = t(t > t1*60*60 & t < t2*60*60);
|
||||
t = t - t(1);
|
||||
\end{minted}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/long_meas_time_domain_zoom.png}
|
||||
\caption{\label{fig:long_meas_time_domain_zoom}Kept data (removed slow drifts during the first hours)}
|
||||
\end{figure}
|
||||
|
||||
The Power Spectral Density of the measured displacement is computed
|
||||
\begin{minted}[]{matlab}
|
||||
win = hann(ceil(length(x)/20));
|
||||
[p_1, f_1] = pwelch(x, win, [], [], 1/Ts);
|
||||
\end{minted}
|
||||
|
||||
As a low pass filter was used in the measurement process, we multiply the PSD by the square of the inverse of the filter's norm.
|
||||
\begin{minted}[]{matlab}
|
||||
G_lpf = 1/(1 + s/2/pi);
|
||||
p_1 = p_1./abs(squeeze(freqresp(G_lpf, f_1, 'Hz'))).^2;
|
||||
\end{minted}
|
||||
|
||||
Only frequencies below 2Hz are taken into account (high frequency noise will be measured afterwards).
|
||||
\begin{minted}[]{matlab}
|
||||
p_1 = p_1(f_1 < 2);
|
||||
f_1 = f_1(f_1 < 2);
|
||||
\end{minted}
|
||||
|
||||
\section{Short and Fast measurement}
|
||||
\label{sec:org48317cd}
|
||||
An second measurement is done in order to estimate the high frequency noise of the interferometer.
|
||||
The measurement is done with a sampling time of \(T_s = 0.1\,ms\) and a duration of \textasciitilde{}100s.
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
load('short_test_plastic.mat')
|
||||
Ts = 1e-4; % [s]
|
||||
\end{minted}
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
x = detrend(x, 0);
|
||||
\end{minted}
|
||||
|
||||
The time domain measurement is shown in Figure \ref{fig:short_meas_time_domain}.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/short_meas_time_domain.png}
|
||||
\caption{\label{fig:short_meas_time_domain}Time domain measurement with the high sampling rate}
|
||||
\end{figure}
|
||||
|
||||
The Power Spectral Density of the measured displacement is computed
|
||||
\begin{minted}[]{matlab}
|
||||
win = hann(ceil(length(x)/20));
|
||||
[p_2, f_2] = pwelch(x, win, [], [], 1/Ts);
|
||||
\end{minted}
|
||||
|
||||
\section{Obtained Amplitude Spectral Density of the measured displacement}
|
||||
\label{sec:orgdffca76}
|
||||
|
||||
The computed ASD of the two measurements are combined in Figure \ref{fig:psd_combined}.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/psd_combined.png}
|
||||
\caption{\label{fig:psd_combined}Obtained Amplitude Spectral Density of the measured displacement}
|
||||
\end{figure}
|
||||
|
||||
\chapter{Effect of the ``bubble sheet'' and ``Aluminium tube''}
|
||||
\label{sec:org7c7f561}
|
||||
\label{sec:effect_air_protection}
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1,width=\linewidth]{figs/IMG-7864.JPG}
|
||||
\caption{\label{fig:picture-test-bench-aluminium-tube}Aluminium tube used to protect the beam path from disturbances}
|
||||
\end{figure}
|
||||
Measurements corresponding to the used of both the aluminium tube and the ``bubble sheet ''are loaded and PSD is computed.
|
||||
\begin{minted}[]{matlab}
|
||||
load('short_test_plastic.mat');
|
||||
Ts = 1e-4; % [s]
|
||||
|
||||
t_1 = t;
|
||||
x_1 = detrend(x, 0);
|
||||
|
||||
[p_1, f_1] = pwelch(x_1, win, [], [], 1/Ts);
|
||||
\end{minted}
|
||||
Then, the measurement corresponding to the use of the aluminium tube only are loaded and the PSD is computed.
|
||||
\begin{minted}[]{matlab}
|
||||
load('short_test_alu_tube.mat');
|
||||
Ts = 1e-4; % [s]
|
||||
|
||||
t_2 = t;
|
||||
x_2 = detrend(x, 0);
|
||||
|
||||
[p_2, f_2] = pwelch(x_2, win, [], [], 1/Ts);
|
||||
\end{minted}
|
||||
Finally, the measurements when neither using the aluminium tube nor the ``bubble sheet'' are used.
|
||||
\begin{minted}[]{matlab}
|
||||
load('short_test_without_material.mat');
|
||||
Ts = 1e-4; % [s]
|
||||
|
||||
t_3 = t;
|
||||
x_3 = detrend(x, 0);
|
||||
|
||||
[p_3, f_3] = pwelch(x_3, win, [], [], 1/Ts);
|
||||
\end{minted}
|
||||
The time domain signals are compared in Figure \ref{fig:time_domain_comp_bubble_aluminium} and the power spectral densities are compared in Figure \ref{fig:asd_noise_comp_bubble_aluminium}.
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/time_domain_comp_bubble_aluminium.png}
|
||||
\caption{\label{fig:time_domain_comp_bubble_aluminium}Time domain signals}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/asd_noise_comp_bubble_aluminium.png}
|
||||
\caption{\label{fig:asd_noise_comp_bubble_aluminium}Comparison of the noise ASD with and without bubble sheet}
|
||||
\end{figure}
|
||||
|
||||
\chapter{Measurement of the Attocube's non-linearity}
|
||||
\label{sec:org3e242a7}
|
||||
\label{sec:attocube_non_linearity}
|
||||
The measurement setup is shown in Figure \ref{fig:exp_setup_schematic}.
|
||||
|
||||
\begin{note}
|
||||
Here are the equipment used in the test bench:
|
||||
\begin{itemize}
|
||||
\item Renishaw Resolution Encoder with 1nm resolution (\href{doc/L-9517-9448-05-B\_Data\_sheet\_RESOLUTE\_BiSS\_en.pdf}{doc})
|
||||
\item Attocube interferometer (\href{doc/IDS3010.pdf}{doc})
|
||||
\item Cedrat Amplified Piezoelectric Actuator APA95ML (\href{doc/APA95ML.pdf}{doc})
|
||||
\item Voltage Amplifier LA75B (\href{doc/LA75B.pdf}{doc})
|
||||
\item Speedgoat IO131 with 16bits ADC and DAC (\href{doc/IO130 IO131 OEM Datasheet.pdf}{doc})
|
||||
\end{itemize}
|
||||
\end{note}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/exp_setup_schematic.png}
|
||||
\caption{\label{fig:exp_setup_schematic}Schematic of the Experiment}
|
||||
\end{figure}
|
||||
|
||||
A DAC and voltage amplified are used to move the mass with the Amplified Piezoelectric Actuator (APA95ML).
|
||||
The encoder and the attocube are measure ring the same motion.
|
||||
|
||||
As will be shown shortly, this measurement permitted to measure the period non-linearity of the Attocube.
|
||||
|
||||
\section{Load Data}
|
||||
\label{sec:orga1094f1}
|
||||
The measurement data are loaded and the offset are removed using the \texttt{detrend} command.
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
load('int_enc_comp.mat', 'interferometer', 'encoder', 'u', 't');
|
||||
Ts = 1e-4; % Sampling Time [s]
|
||||
\end{minted}
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
interferometer = detrend(interferometer, 0);
|
||||
encoder = detrend(encoder, 0);
|
||||
u = detrend(u, 0);
|
||||
\end{minted}
|
||||
|
||||
\section{Time Domain Results}
|
||||
\label{sec:org8c99670}
|
||||
One period of the displacement of the mass as measured by the encoder and interferometer are shown in Figure \ref{fig:int_enc_one_cycle}.
|
||||
It consist of the sinusoidal motion at 0.5Hz with an amplitude of approximately \(70\mu m\).
|
||||
|
||||
The frequency of the motion is chosen such that no resonance in the system is excited.
|
||||
This should improve the coherence between the measurements made by the encoder and interferometer.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/int_enc_one_cycle.png}
|
||||
\caption{\label{fig:int_enc_one_cycle}One cycle measurement}
|
||||
\end{figure}
|
||||
|
||||
The difference between the two measurements during the same period is shown in Figure \ref{fig:int_enc_one_cycle_error}.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/int_enc_one_cycle_error.png}
|
||||
\caption{\label{fig:int_enc_one_cycle_error}Difference between the Encoder and the interferometer during one cycle}
|
||||
\end{figure}
|
||||
|
||||
\section{Difference between Encoder and Interferometer as a function of time}
|
||||
\label{sec:org3c86e57}
|
||||
The data is filtered using a second order low pass filter with a cut-off frequency \(\omega_0\) as defined below.
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
w0 = 2*pi*5; % [rad/s]
|
||||
xi = 0.7;
|
||||
|
||||
G_lpf = 1/(1 + 2*xi/w0*s + s^2/w0^2);
|
||||
\end{minted}
|
||||
|
||||
After filtering, the data is ``re-shaped'' such that we can superimpose all the measured periods as shown in Figure \ref{fig:int_enc_error_mean_time}.
|
||||
This gives an idea of the measurement error as given by the Attocube during a \(70 \mu m\) motion.
|
||||
\begin{minted}[]{matlab}
|
||||
d_err_mean = reshape(lsim(G_lpf, encoder - interferometer, t), [2/Ts floor(Ts/2*length(encoder))]);
|
||||
d_err_mean = d_err_mean - mean(d_err_mean);
|
||||
\end{minted}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/int_enc_error_mean_time.png}
|
||||
\caption{\label{fig:int_enc_error_mean_time}Difference between the two measurement in the time domain, averaged for all the cycles}
|
||||
\end{figure}
|
||||
|
||||
\section{Difference between Encoder and Interferometer as a function of position}
|
||||
\label{sec:orgbdfe98f}
|
||||
Figure \ref{fig:int_enc_error_mean_time} gives the measurement error as a function of time.
|
||||
We here wish the compute this measurement error as a function of the position (as measured by the encoer).
|
||||
|
||||
To do so, all the attocube measurements corresponding to each position measured by the Encoder (resolution of \(1nm\)) are averaged.
|
||||
Figure \ref{fig:int_enc_error_mean_position} is obtained where we clearly see an error with a period comparable to the motion range and a much smaller period corresponding to the non-linear period errors that we wish the estimate.
|
||||
\begin{minted}[]{matlab}
|
||||
[e_sorted, ~, e_ind] = unique(encoder);
|
||||
|
||||
i_mean = zeros(length(e_sorted), 1);
|
||||
for i = 1:length(e_sorted)
|
||||
i_mean(i) = mean(interferometer(e_ind == i));
|
||||
end
|
||||
|
||||
i_mean_error = (i_mean - e_sorted);
|
||||
\end{minted}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/int_enc_error_mean_position.png}
|
||||
\caption{\label{fig:int_enc_error_mean_position}Difference between the two measurement as a function of the measured position by the encoder, averaged for all the cycles}
|
||||
\end{figure}
|
||||
|
||||
The period of the non-linearity seems to be equal to \(765 nm\) which corresponds to half the wavelength of the Laser (\(1.53 \mu m\)).
|
||||
For the motion range done here, the non-linearity is measured over \textasciitilde{}18 periods which permits to do some averaging.
|
||||
|
||||
\begin{minted}[]{matlab}
|
||||
win_length = 1530/2; % length of the windows (corresponds to 765 nm)
|
||||
num_avg = floor(length(e_sorted)/win_length); % number of averaging
|
||||
|
||||
i_init = ceil((length(e_sorted) - win_length*num_avg)/2); % does not start at the extremity
|
||||
|
||||
e_sorted_mean_over_period = mean(reshape(i_mean_error(i_init:i_init+win_length*num_avg-1), [win_length num_avg]), 2);
|
||||
\end{minted}
|
||||
|
||||
The obtained periodic non-linearity is shown in Figure \ref{fig:int_non_linearity_period_wavelength}.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/int_non_linearity_period_wavelength.png}
|
||||
\caption{\label{fig:int_non_linearity_period_wavelength}Non-Linearity of the Interferometer over the period of the wavelength}
|
||||
\end{figure}
|
||||
\end{document}
|
Loading…
Reference in New Issue
Block a user