Reworked analysis on the static measurements

This commit is contained in:
Thomas Dehaeze 2019-05-14 10:04:13 +02:00
parent a93e8fe4ae
commit dd4855e6e9
17 changed files with 5069 additions and 77 deletions

View File

@ -10,23 +10,3 @@ Every stage is powered on.
|--------------+----------------------------| |--------------+----------------------------|
| data_001.mat | nothing is turning | | data_001.mat | nothing is turning |
| data_002.mat | spindle is turning at 1rpm | | data_002.mat | spindle is turning at 1rpm |
* Mesures Dynamiques Rotation Slip-Ring
All the stages are OFF
One geophone on the marble (Col 1)
One geophone at the sample location (Col 2)
Voltage amplifier setup:
60dB
AC
1kHz
LPF added at the input of the voltage amplifiers
Goal:
- Identifify the vibration induced by the rotation of the Slip-Ring and Spindle
- meas24: All OFF
- meas25: 6RPM: only the slip-ring is ON and rotating (spindle OFF)
- meas26: 6RPMZ; Slip-ring and Spindle ON

View File

@ -75,6 +75,8 @@ The station is identified again.
* Measurements of perturbations * Measurements of perturbations
- [[file:slip-ring-spindle-vibrations/index.org][Measurement of the vibrations induced by the rotation of the slip-ring and spindle]] - [[file:slip-ring-spindle-vibrations/index.org][Measurement of the vibrations induced by the rotation of the slip-ring and spindle]]
- [[file:slip-ring-electrical-noise/index.org][Measurement of the electrical noise induced by the slip-ring]] - [[file:slip-ring-electrical-noise/index.org][Measurement of the electrical noise induced by the slip-ring]]
- [[file:ground-motion/index.org][Ground motion measurements]]
- [[file:static-to-dynamic/index.org][Static guiding errors]]
** Noise coming from the control loop of each stage ** Noise coming from the control loop of each stage
[[file:2018-10-15%20-%20Marc/index.org][Link to the analysis]] [[file:2018-10-15%20-%20Marc/index.org][Link to the analysis]]
@ -113,19 +115,6 @@ The goal is to estimate the guiding errors of each stage.
*** Results *** Results
** Ground motion measurements
[[file:Ground%20Motion/index.org][Link to the analysis]]
*** Notes
| *Date* | 2014-10 |
| *Sensors* | Geophone |
| *Location* | ID31 Floor |
*** Goal
The objective is to obtain the Power Spectral Density of the ground motion at the ID31 floor.
*** Results
** Spindle Measurements ** Spindle Measurements
[[file:Spindle/index.org][Link to the analysis]] [[file:Spindle/index.org][Link to the analysis]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

View File

@ -1,7 +1,60 @@
#+TITLE:Static Measurements #+TITLE:Static Measurements
#+SETUPFILE: ../config.org :DRAWER:
#+STARTUP: overview
* Notes #+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas
#+HTML_LINK_HOME: ../index.html
#+HTML_LINK_UP: ../index.html
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/zenburn.css"/>
#+HTML_HEAD: <script type="text/javascript" src="../js/jquery.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="../js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="../js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="../js/readtheorg.js"></script>
#+HTML_MATHJAX: align: center tagside: right font: TeX
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :results none
#+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:shell :eval no-export
:END:
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.
The report by H-P van der Kleij on the static measurement of the ID31 station is available [[file:data/ID31_report_static_meas.pdf][here]].
* Static measurement of the translation stage
:PROPERTIES:
:header-args:matlab+: :tangle matlab/static_ty.m
:header-args:matlab+: :comments org :mkdirp yes
:END:
<<sec:static_ty>>
#+begin_src bash :exports none :results none
if [ matlab/static_ty.m -nt data/static_ty.zip ]; then
cp matlab/static_ty.m static_ty.m;
zip data/static_ty \
mat/data_tyz.txt \
static_ty.m
rm static_ty.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/static_ty.zip][here]].
#+end_note
** Notes
- *5530*: Straightness Plot: Yz - *5530*: Straightness Plot: Yz
- *Filename*: =r:\home\PDMU\PEL\Measurement_library\ID31\ID31_u_station\TY\12_12_2018\linear deviation _tyz_401_points.txt= - *Filename*: =r:\home\PDMU\PEL\Measurement_library\ID31\ID31_u_station\TY\12_12_2018\linear deviation _tyz_401_points.txt=
- *Acquisition date*: 09/01/2019 13:49:42 - *Acquisition date*: 09/01/2019 13:49:42
@ -23,13 +76,23 @@
| MT2 Temp (C) | 024,40 | 024,44 | 024,42 | | MT2 Temp (C) | 024,40 | 024,44 | 024,42 |
| MT3 Temp (C) | 024,32 | 024,36 | 024,34 | | MT3 Temp (C) | 024,32 | 024,36 | 024,34 |
* Data Pre-processing In a very schematic way, the measurement is explained on figure [[fig:guiding_error]].
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.
The obtained data corresponds to the guiding errors.
#+name: fig:guiding_error
#+caption: Schematic of the measurement
[[file:./figs/guiding_error.png]]
** Data Pre-processing
#+begin_src shell :results silent #+begin_src shell :results silent
sed 's/\t/ /g;s/\,/./g' "data/linear deviation _tyz_401_points.txt" > data/data.txt sed 's/\t/ /g;s/\,/./g' "mat/linear_deviation_tyz_401_points.txt" > mat/data_tyz.txt
#+end_src #+end_src
#+begin_src shell :exports both :post addhdr(*this*) #+begin_src shell :exports both :post addhdr(*this*)
head "data/data.txt" head "mat/data_tyz.txt"
#+end_src #+end_src
#+RESULTS: #+RESULTS:
@ -45,38 +108,50 @@
| 1 | 8 | -4.3425E+00 | 7.3937387E+00 | | 1 | 8 | -4.3425E+00 | 7.3937387E+00 |
| 1 | 9 | -4.32E+00 | 7.3287468E+00 | | 1 | 9 | -4.32E+00 | 7.3287468E+00 |
* Matlab - Data Import ** Matlab Init :noexport:ignore:
#+begin_src matlab :results silent #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
filename = 'data/data.txt'; <<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
** Matlab - Data Import
#+begin_src matlab :tangle no
filename = 'mat/data_tyz.txt';
fileID = fopen(filename); fileID = fopen(filename);
data = cell2mat(textscan(fileID,'%f %f %f %f', 'collectoutput', 1,'headerlines',1)); data = cell2mat(textscan(fileID,'%f %f %f %f', 'collectoutput', 1,'headerlines',1));
fclose(fileID); fclose(fileID);
#+end_src #+end_src
* Data - Plot ** Data - Plot
#+begin_src matlab :results silent
First, we plot the straightness error as a function of the position (figure [[fig:raw_data_tyz]]).
#+begin_src matlab
figure; figure;
hold on; hold on;
for i=1:data(end, 1) for i=1:data(end, 1)
plot(data(data(:, 1) == i, 3), data(data(:, 1) == i, 4), '-k'); plot(data(data(:, 1) == i, 3), data(data(:, 1) == i, 4), '-k');
end end
hold off; hold off;
xlabel('Target Value [mm]'); ylabel('Error Value [um]'); xlabel('Target Value [mm]'); ylabel('Error Value [$\mu m$]');
#+end_src #+end_src
#+NAME: fig:raw_data #+NAME: fig:raw_data_tyz
#+HEADER: :tangle no :exports results :results raw :noweb yes #+HEADER: :tangle no :exports results :results raw :noweb yes
#+begin_src matlab :var filepath="figs/raw_data.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/raw_data_tyz.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+NAME: fig:raw_data #+NAME: fig:raw_data_tyz
#+CAPTION: Time domain Data #+CAPTION: Time domain Data
#+RESULTS: fig:raw_data #+RESULTS: fig:raw_data_tyz
[[file:figs/raw_data.png]] [[file:figs/raw_data_tyz.png]]
Then, we compute mean value of each position, and we remove this mean value from the data.
Compute mean value of each position The results are shown on figure [[fig:processed_data_tyz]].
#+begin_src matlab :results silent #+begin_src matlab :results silent
mean_pos = zeros(sum(data(:, 1)==1), 1); mean_pos = zeros(sum(data(:, 1)==1), 1);
for i=1:sum(data(:, 1)==1) for i=1:sum(data(:, 1)==1)
@ -92,21 +167,25 @@ Compute mean value of each position
plot(data(filt, 3), data(filt, 4) - mean_pos, '-k'); plot(data(filt, 3), data(filt, 4) - mean_pos, '-k');
end end
hold off; hold off;
xlabel('Target Value [mm]'); ylabel('Error Value [um]'); xlabel('Target Value [mm]'); ylabel('Error Value [$\mu m$]');
#+end_src #+end_src
#+NAME: fig:processed_data #+NAME: fig:processed_data_tyz
#+HEADER: :tangle no :exports results :results raw :noweb yes #+HEADER: :tangle no :exports results :results raw :noweb yes
#+begin_src matlab :var filepath="figs/processed_data.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/processed_data_tyz.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+NAME: fig:processed_data #+NAME: fig:processed_data_tyz
#+CAPTION: caption #+CAPTION: caption
#+RESULTS: fig:processed_data #+RESULTS: fig:processed_data_tyz
[[file:figs/processed_data.png]] [[file:figs/processed_data_tyz.png]]
** Translate to time domain
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.
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 [[fig:time_domain_tyz]].
* Translate to time domain
#+begin_src matlab :results none #+begin_src matlab :results none
t = linspace(0, 1, length(data(data(:, 1)==1, 4))); t = linspace(0, 1, length(data(data(:, 1)==1, 4)));
#+end_src #+end_src
@ -119,30 +198,44 @@ Compute mean value of each position
xlabel('Time [s]'); ylabel('Error Value [um]'); xlabel('Time [s]'); ylabel('Error Value [um]');
#+end_src #+end_src
#+NAME: fig:time_domain #+NAME: fig:time_domain_tyz
#+HEADER: :tangle no :exports results :results raw :noweb yes #+HEADER: :tangle no :exports results :results raw :noweb yes
#+begin_src matlab :var filepath="figs/time_domain.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/time_domain_tyz.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+NAME: fig:time_domain #+NAME: fig:time_domain_tyz
#+CAPTION: caption #+CAPTION: caption
#+RESULTS: fig:time_domain #+RESULTS: fig:time_domain_tyz
[[file:figs/time_domain.png]] [[file:figs/time_domain_tyz.png]]
* Compute the PSD ** Compute the PSD
#+begin_src matlab :results none
n_av = 5;
Fs = 1/t(2);
We first compute some parameters that will be used for the PSD computation.
#+begin_src matlab
dt = t(2)-t(1);
Fs = 1/dt; % [Hz]
win = hanning(ceil(1*Fs));
#+end_src
We remove the mean position from the data.
#+begin_src matlab
x = data(data(:, 1) == 1, 4) - mean_pos; x = data(data(:, 1) == 1, 4) - mean_pos;
[pxx, f] = pwelch(x, hanning(ceil(length(x)/n_av)), [], [], Fs); #+end_src
And finally, we compute the power spectral density of the displacement obtained in the time domain.
The result is shown on figure [[fig:psd_tyz]].
#+begin_src matlab :results none
[pxx, f] = pwelch(x, win, [], [], Fs);
pxx_t = zeros(length(pxx), data(end, 1)); pxx_t = zeros(length(pxx), data(end, 1));
for i=1:data(end, 1) for i=1:data(end, 1)
x = data(data(:, 1) == i, 4) - mean_pos; x = data(data(:, 1) == i, 4) - mean_pos;
[pxx, f] = pwelch(x, hanning(ceil(length(x)/n_av)), [], [], Fs); [pxx, f] = pwelch(x, win, [], [], Fs);
pxx_t(:, i) = pxx; pxx_t(:, i) = pxx;
end end
#+end_src #+end_src
@ -150,21 +243,41 @@ Compute mean value of each position
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
plot(f, mean(pxx_t, 2)); plot(f, sqrt(mean(pxx_t, 2)), 'k-');
hold off; hold off;
xlabel('Frequency (Hz)'); xlabel('Frequency (Hz)');
ylabel('PSD ($m^2/Hz$)'); ylabel('Amplitude Spectral Density $\left[\frac{m}{\sqrt{Hz}}\right]$');
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
legend({'PSD - x', 'PSD - y', 'PSD - z'});
#+end_src #+end_src
#+NAME: fig:psd #+NAME: fig:psd_tyz
#+HEADER: :tangle no :exports results :results raw :noweb yes #+HEADER: :tangle no :exports results :results raw :noweb yes
#+begin_src matlab :var filepath="figs/psd.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png") #+begin_src matlab :var filepath="figs/psd_tyz.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>> <<plt-matlab>>
#+end_src #+end_src
#+NAME: fig:psd #+NAME: fig:psd_tyz
#+CAPTION: PSD of the Z motion when scanning with Ty at 1Hz #+CAPTION: PSD of the Z motion when scanning with Ty at 1Hz
#+RESULTS: fig:psd #+RESULTS: fig:psd_tyz
[[file:figs/psd.png]] [[file:figs/psd_tyz.png]]
* TODO Static Measurement of the spindle
:PROPERTIES:
:header-args:matlab+: :tangle matlab/spindle_static.m
:header-args:matlab+: :comments org :mkdirp yes
:END:
<<sec:spindle_static>>
#+begin_src bash :exports none :results none
if [ matlab/spindle_static.m -nt data/spindle_static.zip ]; then
cp matlab/spindle_static.m spindle_static.m;
zip data/spindle_static \
mat/data.mat \
spindle_static.m
rm spindle_static.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/spindle_static.zip][here]].
#+end_note

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,96 @@
%% Clear Workspace and Close figures
clear; close all; clc;
%% Intialize Laplace variable
s = zpk('s');
% Data - Plot
% First, we plot the straightness error as a function of the position (figure [[fig:raw_data_tyz]]).
figure;
hold on;
for i=1:data(end, 1)
plot(data(data(:, 1) == i, 3), data(data(:, 1) == i, 4), '-k');
end
hold off;
xlabel('Target Value [mm]'); ylabel('Error Value [$\mu m$]');
% #+NAME: fig:raw_data_tyz
% #+CAPTION: Time domain Data
% #+RESULTS: fig:raw_data_tyz
% [[file:figs/raw_data_tyz.png]]
% Then, we compute mean value of each position, and we remove this mean value from the data.
% The results are shown on figure [[fig:processed_data_tyz]].
mean_pos = zeros(sum(data(:, 1)==1), 1);
for i=1:sum(data(:, 1)==1)
mean_pos(i) = mean(data(data(:, 2)==i, 4));
end
figure;
hold on;
for i=1:data(end, 1)
filt = data(:, 1) == i;
plot(data(filt, 3), data(filt, 4) - mean_pos, '-k');
end
hold off;
xlabel('Target Value [mm]'); ylabel('Error Value [$\mu m$]');
% Translate to time domain
% 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.
% 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 [[fig:time_domain_tyz]].
t = linspace(0, 1, length(data(data(:, 1)==1, 4)));
figure;
hold on;
plot(t, data(data(:, 1) == 1, 4) - mean_pos, '-k');
hold off;
xlabel('Time [s]'); ylabel('Error Value [um]');
% Compute the PSD
% We first compute some parameters that will be used for the PSD computation.
dt = t(2)-t(1);
Fs = 1/dt; % [Hz]
win = hanning(ceil(1*Fs));
% We remove the mean position from the data.
x = data(data(:, 1) == 1, 4) - mean_pos;
% And finally, we compute the power spectral density of the displacement obtained in the time domain.
% The result is shown on figure [[fig:psd_tyz]].
[pxx, f] = pwelch(x, win, [], [], Fs);
pxx_t = zeros(length(pxx), data(end, 1));
for i=1:data(end, 1)
x = data(data(:, 1) == i, 4) - mean_pos;
[pxx, f] = pwelch(x, win, [], [], Fs);
pxx_t(:, i) = pxx;
end
figure;
hold on;
plot(f, sqrt(mean(pxx_t, 2)), 'k-');
hold off;
xlabel('Frequency (Hz)');
ylabel('Amplitude Spectral Density $\left[\frac{m}{\sqrt{Hz}}\right]$');
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');