nass-micro-station-measurem.../static-to-dynamic/index.html

501 lines
16 KiB
HTML

<?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:30 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Static Measurements</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">Static Measurements</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org4838532">1. Measurement description</a></li>
<li><a href="#org4641bb7">2. Static measurement of the translation stage</a>
<ul>
<li><a href="#org9b77eea">2.1. Notes</a></li>
<li><a href="#org47e3834">2.2. Data Pre-processing</a></li>
<li><a href="#orgca79724">2.3. Matlab - Data Import</a></li>
<li><a href="#orga9b2e7b">2.4. Data - Plot</a></li>
<li><a href="#org0f2fcc8">2.5. Translate to time domain</a></li>
<li><a href="#org01b8405">2.6. Compute the PSD</a></li>
</ul>
</li>
<li><a href="#org43f6210">3. Static Measurement of the spindle</a></li>
</ul>
</div>
</div>
<div id="outline-container-org4838532" class="outline-2">
<h2 id="org4838532"><span class="section-number-2">1</span> Measurement description</h2>
<div class="outline-text-2" id="text-1">
<p>
<b>Setup</b>:
Each stage is statically moved of all its stroke on after the other.
A metrology element is located at the sample position and its motion is measured in translations and rotations.
For each small displacement, the stage is stopped and the motion of the sample is recorded and averaged.
</p>
<p>
The report by H-P van der Kleij on the static measurement of the ID31 station is available <a href="data/ID31_report_static_meas.pdf">here</a>.
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<tbody>
<tr>
<td class="org-left"><b>Date</b></td>
<td class="org-left">2019-01-09</td>
</tr>
<tr>
<td class="org-left"><b>Sensors</b></td>
<td class="org-left">Interferometer</td>
</tr>
<tr>
<td class="org-left"><b>Location</b></td>
<td class="org-left">Experimental Hutch</td>
</tr>
</tbody>
</table>
<p>
<b>Goal</b>:
The goal here is to analyze the static measurement on the station (guiding error of each stage) and convert them to dynamic disturbances that can be use in the model of the micro-station.
</p>
</div>
</div>
<div id="outline-container-org4641bb7" class="outline-2">
<h2 id="org4641bb7"><span class="section-number-2">2</span> Static measurement of the translation stage</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="org46aa1d0"></a>
</p>
<div class="note" id="orge3ac46c">
<p>
All the files (data and Matlab scripts) are accessible <a href="data/static_ty.zip">here</a>.
</p>
</div>
</div>
<div id="outline-container-org9b77eea" class="outline-3">
<h3 id="org9b77eea"><span class="section-number-3">2.1</span> Notes</h3>
<div class="outline-text-3" id="text-2-1">
<ul class="org-ul">
<li><b>5530</b>: Straightness Plot: Yz</li>
<li><b>Filename</b>: <code>r:\home\PDMU\PEL\Measurement_library\ID31\ID31_u_station\TY\12_12_2018\linear deviation _tyz_401_points.txt</code></li>
<li><b>Acquisition date</b>: 09/01/2019 13:49:42</li>
<li><b>Current date</b>: 08/03/2019 08:46:35</li>
<li><b>Measurement Type</b>: STRAIGHTNESS vertical</li>
<li><b>Travel Mode</b>: Bidirectional</li>
<li><b>Number of Target Positions</b>: 401</li>
<li><b>Number of total data pairs</b>: 2406</li>
<li><b>Number of total data runs</b>:6</li>
<li><b>Position Value Units</b>: millimeters</li>
<li><b>Error Value Units</b>: micrometers</li>
</ul>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Environmental Data</th>
<th scope="col" class="org-left">Min</th>
<th scope="col" class="org-left">Max</th>
<th scope="col" class="org-left">Avg</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Air Temp (C)</td>
<td class="org-left">024,57</td>
<td class="org-left">024,61</td>
<td class="org-left">024,59</td>
</tr>
<tr>
<td class="org-left">Air Prs (mm)</td>
<td class="org-left">742,56</td>
<td class="org-left">743,29</td>
<td class="org-left">742,83</td>
</tr>
<tr>
<td class="org-left">Air Hmd (%)</td>
<td class="org-left">024,00</td>
<td class="org-left">024,00</td>
<td class="org-left">024,00</td>
</tr>
<tr>
<td class="org-left">MT1 Temp (C)</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">020,00</td>
</tr>
<tr>
<td class="org-left">MT2 Temp (C)</td>
<td class="org-left">024,40</td>
<td class="org-left">024,44</td>
<td class="org-left">024,42</td>
</tr>
<tr>
<td class="org-left">MT3 Temp (C)</td>
<td class="org-left">024,32</td>
<td class="org-left">024,36</td>
<td class="org-left">024,34</td>
</tr>
</tbody>
</table>
<p>
In a very schematic way, the measurement is explained on figure <a href="#org6d44784">1</a>.
The positioning error \(d\) is measure as a function of \(x\).
Because the measurement is done in a static way, the dynamics of the station (represented by the mass-spring-damper system on the schematic) does not play a role in the measure.
</p>
<p>
The obtained data corresponds to the guiding errors.
</p>
<div id="org6d44784" class="figure">
<p><img src="./figs/guiding_error.png" alt="guiding_error.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Schematic of the measurement</p>
</div>
</div>
</div>
<div id="outline-container-org47e3834" class="outline-3">
<h3 id="org47e3834"><span class="section-number-3">2.2</span> Data Pre-processing</h3>
<div class="outline-text-3" id="text-2-2">
<div class="org-src-container">
<pre class="src src-shell">sed <span class="org-string">'s/\t/ /g;s/\,/./g'</span> <span class="org-string">"mat/linear_deviation_tyz_401_points.txt"</span> &gt; mat/data_tyz.txt
</pre>
</div>
<div class="org-src-container">
<pre class="src src-shell">head <span class="org-string">"mat/data_tyz.txt"</span>
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">Run</th>
<th scope="col" class="org-right">Pos</th>
<th scope="col" class="org-right">TargetValue</th>
<th scope="col" class="org-right">ErrorValue</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">1</td>
<td class="org-right">1</td>
<td class="org-right">-4.5E+00</td>
<td class="org-right">7.5377892E+00</td>
</tr>
<tr>
<td class="org-right">1</td>
<td class="org-right">2</td>
<td class="org-right">-4.4775E+00</td>
<td class="org-right">7.5422246E+00</td>
</tr>
<tr>
<td class="org-right">1</td>
<td class="org-right">3</td>
<td class="org-right">-4.455E+00</td>
<td class="org-right">7.5655617E+00</td>
</tr>
<tr>
<td class="org-right">1</td>
<td class="org-right">4</td>
<td class="org-right">-4.4325E+00</td>
<td class="org-right">7.5149518E+00</td>
</tr>
<tr>
<td class="org-right">1</td>
<td class="org-right">5</td>
<td class="org-right">-4.41E+00</td>
<td class="org-right">7.4886377E+00</td>
</tr>
<tr>
<td class="org-right">1</td>
<td class="org-right">6</td>
<td class="org-right">-4.3875E+00</td>
<td class="org-right">7.437007E+00</td>
</tr>
<tr>
<td class="org-right">1</td>
<td class="org-right">7</td>
<td class="org-right">-4.365E+00</td>
<td class="org-right">7.4449354E+00</td>
</tr>
<tr>
<td class="org-right">1</td>
<td class="org-right">8</td>
<td class="org-right">-4.3425E+00</td>
<td class="org-right">7.3937387E+00</td>
</tr>
<tr>
<td class="org-right">1</td>
<td class="org-right">9</td>
<td class="org-right">-4.32E+00</td>
<td class="org-right">7.3287468E+00</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orgca79724" class="outline-3">
<h3 id="orgca79724"><span class="section-number-3">2.3</span> Matlab - Data Import</h3>
<div class="outline-text-3" id="text-2-3">
<div class="org-src-container">
<pre class="src src-matlab">filename = <span class="org-string">'mat/data_tyz.txt'</span>;
fileID = fopen(filename);
data = cell2mat(textscan(fileID,<span class="org-string">'%f %f %f %f'</span>, <span class="org-string">'collectoutput'</span>, 1,<span class="org-string">'headerlines'</span>,1));
fclose(fileID);
</pre>
</div>
</div>
</div>
<div id="outline-container-orga9b2e7b" class="outline-3">
<h3 id="orga9b2e7b"><span class="section-number-3">2.4</span> Data - Plot</h3>
<div class="outline-text-3" id="text-2-4">
<p>
First, we plot the straightness error as a function of the position (figure <a href="#orgcf088c0">2</a>).
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span>=<span class="org-constant">1:data(end, 1)</span>
plot(data(data(<span class="org-type">:</span>, 1) <span class="org-type">==</span> <span class="org-constant">i</span>, 3), data(data(<span class="org-type">:</span>, 1) <span class="org-type">==</span> <span class="org-constant">i</span>, 4), <span class="org-string">'-k'</span>);
<span class="org-keyword">end</span>
hold off;
xlabel(<span class="org-string">'Target Value [mm]'</span>); ylabel(<span class="org-string">'Error Value [$\mu m$]'</span>);
</pre>
</div>
<div id="orgcf088c0" class="figure">
<p><img src="figs/raw_data_tyz.png" alt="raw_data_tyz.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Time domain Data</p>
</div>
<p>
Then, we compute mean value of each position, and we remove this mean value from the data.
The results are shown on figure <a href="#orgff37b5d">3</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">mean_pos = zeros(sum(data(<span class="org-type">:</span>, 1)<span class="org-type">==</span>1), 1);
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span>=<span class="org-constant">1:sum(data(:, 1)==1)</span>
mean_pos(<span class="org-constant">i</span>) = mean(data(data(<span class="org-type">:</span>, 2)<span class="org-type">==</span><span class="org-constant">i</span>, 4));
<span class="org-keyword">end</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span>=<span class="org-constant">1:data(end, 1)</span>
filt = data(<span class="org-type">:</span>, 1) <span class="org-type">==</span> <span class="org-constant">i</span>;
plot(data(filt, 3), data(filt, 4) <span class="org-type">-</span> mean_pos, <span class="org-string">'-k'</span>);
<span class="org-keyword">end</span>
hold off;
xlabel(<span class="org-string">'Target Value [mm]'</span>); ylabel(<span class="org-string">'Error Value [$\mu m$]'</span>);
</pre>
</div>
<div id="orgff37b5d" class="figure">
<p><img src="figs/processed_data_tyz.png" alt="processed_data_tyz.png" />
</p>
<p><span class="figure-number">Figure 3: </span>caption</p>
</div>
</div>
</div>
<div id="outline-container-org0f2fcc8" class="outline-3">
<h3 id="org0f2fcc8"><span class="section-number-3">2.5</span> Translate to time domain</h3>
<div class="outline-text-3" id="text-2-5">
<p>
We here make the assumptions that, during a scan with the translation stage, the Z motion of the translation stage will follow the guiding error measured.
</p>
<p>
We then create a time vector \(t\) from 0 to 1 second that corresponds to a typical scan, and we plot the guiding error as a function of the time on figure <a href="#org70b707b">4</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">t = linspace(0, 1, length(data(data(<span class="org-type">:</span>, 1)<span class="org-type">==</span>1, 4)));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
hold on;
plot(t, data(data(<span class="org-type">:</span>, 1) <span class="org-type">==</span> 1, 4) <span class="org-type">-</span> mean_pos, <span class="org-string">'-k'</span>);
hold off;
xlabel(<span class="org-string">'Time [s]'</span>); ylabel(<span class="org-string">'Error Value [um]'</span>);
</pre>
</div>
<div id="org70b707b" class="figure">
<p><img src="figs/time_domain_tyz.png" alt="time_domain_tyz.png" />
</p>
<p><span class="figure-number">Figure 4: </span>caption</p>
</div>
</div>
</div>
<div id="outline-container-org01b8405" class="outline-3">
<h3 id="org01b8405"><span class="section-number-3">2.6</span> Compute the PSD</h3>
<div class="outline-text-3" id="text-2-6">
<p>
We first compute some parameters that will be used for the PSD computation.
</p>
<div class="org-src-container">
<pre class="src src-matlab">dt = t(2)<span class="org-type">-</span>t(1);
Fs = 1<span class="org-type">/</span>dt; <span class="org-comment">% [Hz]</span>
win = hanning(ceil(1<span class="org-type">*</span>Fs));
</pre>
</div>
<p>
We remove the mean position from the data.
</p>
<div class="org-src-container">
<pre class="src src-matlab">x = data(data(<span class="org-type">:</span>, 1) <span class="org-type">==</span> 1, 4) <span class="org-type">-</span> mean_pos;
</pre>
</div>
<p>
And finally, we compute the power spectral density of the displacement obtained in the time domain.
</p>
<p>
The result is shown on figure <a href="#orgdac0fa8">5</a>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">[pxx, f] = pwelch(x, win, [], [], Fs);
pxx_t = zeros(length(pxx), data(end, 1));
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span>=<span class="org-constant">1:data(end, 1)</span>
x = data(data(<span class="org-type">:</span>, 1) <span class="org-type">==</span> <span class="org-constant">i</span>, 4) <span class="org-type">-</span> mean_pos;
[pxx, f] = pwelch(x, win, [], [], Fs);
pxx_t(<span class="org-type">:</span>, <span class="org-constant">i</span>) = pxx;
<span class="org-keyword">end</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
hold on;
plot(f, sqrt(mean(pxx_t, 2)), <span class="org-string">'k-'</span>);
hold off;
xlabel(<span class="org-string">'Frequency (Hz)'</span>);
ylabel(<span class="org-string">'Amplitude Spectral Density $\left[\frac{m}{\sqrt{Hz}}\right]$'</span>);
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'XScale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'YScale'</span>, <span class="org-string">'log'</span>);
</pre>
</div>
<div id="orgdac0fa8" class="figure">
<p><img src="figs/psd_tyz.png" alt="psd_tyz.png" />
</p>
<p><span class="figure-number">Figure 5: </span>PSD of the Z motion when scanning with Ty at 1Hz</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org43f6210" class="outline-2">
<h2 id="org43f6210"><span class="section-number-2">3</span> Static Measurement of the spindle</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="orga1d620b"></a>
</p>
<div class="note" id="org889557b">
<p>
All the files (data and Matlab scripts) are accessible <a href="data/spindle_static.zip">here</a>.
</p>
</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:30</p>
</div>
</body>
</html>