nass-micro-station-measurem.../disturbance-ty-sr/index.org

453 lines
16 KiB
Org Mode

#+TITLE:Vibrations induced by simultaneous scans of the translation stage and of the slip-ring
:DRAWER:
#+STARTUP: overview
#+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:
* Measurement description
** Setup :ignore:
*Setup*:
All the stages are OFF except the translation stage and the Slip-Ring.
Each of the signal is amplified by voltage amplifiers with the following settings:
- Gain: 40dB
- AC/DC option: AC
- Low pass filter: 1kHz
The slip-ring is rotating at 60rpm. At the same time, scans with the translation stage are done at 1Hz with an amplitude of 600000cnt (= 3mm).
Two geophones are used to measure the motion in the vertical direction of the marble and of the sample.
** Goal :ignore:
*Goal*:
- The goal is to estimate the vibrations induced by the simultaneous scans of the spindle (here the slip-ring is used as the spindle is not fully functional yet) and of the translation stage
** Measurements :ignore:
*Measurements*:
Three measurements are done:
| Measurement File | Description |
|--------------------+------------------------------------------------------------------------------|
| =mat/data_050.mat= | Slip-Ring at 1Hz, Ty OFF |
| =mat/data_051.mat= | Slip-Ring at 1Hz, Ty ON (The current and cnt error of Ty is also registered) |
| =mat/data_052.mat= | Slip-Ring at 1Hz, Ty 1Hz 600000cnt |
Each of the measurement =mat= file contains one =data= array with 3 columns:
| Column number | Description |
|---------------+---------------------------------|
| 1 | Geophone on the marble |
| 2 | Geophone at the sample location |
| 3 | Time |
* Data Analysis
:PROPERTIES:
:header-args:matlab+: :tangle matlab/disturbance_ty_sr.m
:header-args:matlab+: :comments org :mkdirp yes
:END:
<<sec:disturbance_ty_sr>>
** ZIP file containing the data and matlab files :ignore:
#+begin_src bash :exports none :results none
if [ matlab/disturbance_ty_sr.m -nt data/disturbance_ty_sr.zip ]; then
cp matlab/disturbance_ty_sr.m disturbance_ty_sr.m;
zip data/disturbance_ty_sr \
mat/data_050.mat \
mat/data_051.mat \
mat/data_052.mat \
mat/Ty-when-Rz-1Hz-and-Ty-1Hz.csv \
mat/Ty-when-Rz-1Hz.csv \
disturbance_ty_sr.m
rm disturbance_ty_sr.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/disturbance_ty_sr.zip][here]].
#+end_note
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
addpath('../src');
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
** Load data
#+begin_src matlab
ty_of = load('mat/data_050.mat', 'data'); ty_of = ty_of.data;
ty_on = load('mat/data_051.mat', 'data'); ty_on = ty_on.data;
ty_1h = load('mat/data_052.mat', 'data'); ty_1h = ty_1h.data;
#+end_src
** Voltage to Velocity
We convert the measured voltage to velocity using the function =voltageToVelocityL22= (accessible [[file:~/MEGA/These/meas/src/index.org][here]]).
#+begin_src matlab
gain = 40; % [dB]
ty_of(:, 1) = voltageToVelocityL22(ty_of(:, 1), ty_of(:, 3), gain);
ty_on(:, 1) = voltageToVelocityL22(ty_on(:, 1), ty_on(:, 3), gain);
ty_1h(:, 1) = voltageToVelocityL22(ty_1h(:, 1), ty_1h(:, 3), gain);
ty_of(:, 2) = voltageToVelocityL22(ty_of(:, 2), ty_of(:, 3), gain);
ty_on(:, 2) = voltageToVelocityL22(ty_on(:, 2), ty_on(:, 3), gain);
ty_1h(:, 2) = voltageToVelocityL22(ty_1h(:, 2), ty_1h(:, 3), gain);
#+end_src
** Time domain plots
We plot the measured velocity of the marble (figure [[fig:ty_marble_time]]), sample (figure [[fig:ty_sample_time]]) and the relative velocity of the sample with respect to the marble (figure [[fig:ty_relative_time]]).
We also integrate the relative velocity to obtain the relative displacement (figure [[fig:ty_relative_disp_time]]).
#+begin_src matlab
figure;
hold on;
plot(ty_1h(:, 3), ty_1h(:, 1), 'DisplayName', 'Marble - Ty 1Hz');
plot(ty_on(:, 3), ty_on(:, 1), 'DisplayName', 'Marble - Ty ON');
plot(ty_of(:, 3), ty_of(:, 1), 'DisplayName', 'Marble - Ty OFF');
hold off;
xlabel('Time [s]'); ylabel('Velocity [m/s]');
xlim([0, 2]);
legend('Location', 'southwest');
#+end_src
#+NAME: fig:ty_marble_time
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/ty_marble_time.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:ty_marble_time
#+CAPTION: Velocity of the marble in the vertical direction
#+RESULTS: fig:ty_marble_time
[[file:figs/ty_marble_time.png]]
#+begin_src matlab
figure;
hold on;
plot(ty_1h(:, 3), ty_1h(:, 2), 'DisplayName', 'Sample - Ty - 1Hz');
plot(ty_on(:, 3), ty_on(:, 2), 'DisplayName', 'Sample - Ty - ON');
plot(ty_of(:, 3), ty_of(:, 2), 'DisplayName', 'Sample - Ty - OFF');
hold off;
xlabel('Time [s]'); ylabel('Velocity [m/s]');
xlim([0, 2]);
legend('Location', 'southwest');
#+end_src
#+NAME: fig:ty_sample_time
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/ty_sample_time.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:ty_sample_time
#+CAPTION: Velocity of the sample in the vertical direction
#+RESULTS: fig:ty_sample_time
[[file:figs/ty_sample_time.png]]
#+begin_src matlab
figure;
hold on;
plot(ty_1h(:, 3), ty_1h(:, 2)-ty_1h(:, 1), 'DisplayName', 'Relative Velocity - Ty - 1Hz');
plot(ty_on(:, 3), ty_on(:, 2)-ty_on(:, 1), 'DisplayName', 'Relative Velocity - Ty - ON');
plot(ty_of(:, 3), ty_of(:, 2)-ty_of(:, 1), 'DisplayName', 'Relative Velocity - Ty - OFF');
hold off;
xlabel('Time [s]'); ylabel('Velocity [m/s]');
xlim([0, 2]);
legend('Location', 'southwest');
#+end_src
#+NAME: fig:ty_relative_time
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/ty_relative_time.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:ty_relative_time
#+CAPTION: Relative velocity of the sample with respect to the marble
#+RESULTS: fig:ty_relative_time
[[file:figs/ty_relative_time.png]]
#+begin_src matlab
figure;
hold on;
plot(ty_1h(:, 3), lsim(1/s, ty_1h(:, 2)-ty_1h(:, 1), ty_1h(:, 3)), 'DisplayName', 'Relative Displacement- Ty - 1Hz');
plot(ty_on(:, 3), lsim(1/s, ty_on(:, 2)-ty_on(:, 1), ty_on(:, 3)), 'DisplayName', 'Relative Displacement- Ty - ON');
plot(ty_of(:, 3), lsim(1/s, ty_of(:, 2)-ty_of(:, 1), ty_of(:, 3)), 'DisplayName', 'Relative Displacement- Ty - OFF');
hold off;
xlabel('Time [s]'); ylabel('Displacement [m]');
xlim([0, 2]);
legend('Location', 'southwest');
#+end_src
#+NAME: fig:ty_relative_disp_time
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/ty_relative_disp_time.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:ty_relative_disp_time
#+CAPTION: Relative Displacement of the sample with respect to the marble
#+RESULTS: fig:ty_relative_disp_time
[[file:figs/ty_relative_disp_time.png]]
** Frequency Domain
We first compute some parameters that will be used for the PSD computation.
#+begin_src matlab :results none
dt = ty_of(2, 3)-ty_of(1, 3);
Fs = 1/dt; % [Hz]
win = hanning(ceil(10*Fs));
#+end_src
Then we compute the Power Spectral Density using =pwelch= function.
First for the geophone located on the marble
#+begin_src matlab
[pxof_m, f] = pwelch(ty_of(:, 1), win, [], [], Fs);
[pxon_m, ~] = pwelch(ty_on(:, 1), win, [], [], Fs);
[px1h_m, ~] = pwelch(ty_1h(:, 1), win, [], [], Fs);
#+end_src
And for the geophone located at the sample position.
#+begin_src matlab
[pxof_s, f] = pwelch(ty_of(:, 2), win, [], [], Fs);
[pxon_s, ~] = pwelch(ty_on(:, 2), win, [], [], Fs);
[px1h_s, ~] = pwelch(ty_1h(:, 2), win, [], [], Fs);
#+end_src
Finally, for the relative velocity.
#+begin_src matlab
[pxof_r, f] = pwelch(ty_of(:, 2)-ty_of(:, 1), win, [], [], Fs);
[pxon_r, ~] = pwelch(ty_on(:, 2)-ty_on(:, 1), win, [], [], Fs);
[px1h_r, ~] = pwelch(ty_1h(:, 2)-ty_1h(:, 1), win, [], [], Fs);
#+end_src
And we plot the ASD of the measured velocities:
- figure [[fig:psd_marble_compare]] for the geophone located on the marble
- figure [[fig:psd_sample_compare]] for the geophone at the sample position
- figure [[fig:psd_relative_compare]] for the relative velocity
#+begin_src matlab :results none
figure;
hold on;
plot(f, sqrt(px1h_m), 'DisplayName', 'Marble - Ty 1Hz');
plot(f, sqrt(pxon_m), 'DisplayName', 'Marble - Ty ON');
plot(f, sqrt(pxof_m), 'DisplayName', 'Marble - Ty OFF');
hold off;
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD of the measured velocity $\left[\frac{m/s}{\sqrt{Hz}}\right]$')
legend('Location', 'southwest');
xlim([1, 500]);
#+end_src
#+NAME: fig:psd_marble_compare
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_marble_compare.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:psd_marble_compare
#+CAPTION: Comparison of the ASD of the measured velocities from the Geophone on the marble
#+RESULTS: fig:psd_marble_compare
[[file:figs/psd_marble_compare.png]]
#+begin_src matlab :results none
figure;
hold on;
plot(f, sqrt(px1h_s), 'DisplayName', 'Sample - Ty 1Hz');
plot(f, sqrt(pxon_s), 'DisplayName', 'Sample - Ty ON');
plot(f, sqrt(pxof_s), 'DisplayName', 'Sample - Ty OFF');
hold off;
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD of the measured velocity $\left[\frac{m/s}{\sqrt{Hz}}\right]$')
legend('Location', 'southwest');
xlim([1, 500]);
#+end_src
#+NAME: fig:psd_sample_compare
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_sample_compare.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:psd_sample_compare
#+CAPTION: Comparison of the ASD of the measured velocities from the Geophone at the sample location
#+RESULTS: fig:psd_sample_compare
[[file:figs/psd_sample_compare.png]]
#+begin_src matlab :results none
figure;
hold on;
plot(f, sqrt(px1h_r), 'DisplayName', 'Relative - Ty 1Hz');
plot(f, sqrt(pxon_r), 'DisplayName', 'Relative - Ty ON');
plot(f, sqrt(pxof_r), 'DisplayName', 'Relative - Ty OFF');
hold off;
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD of the measured velocity $\left[\frac{m/s}{\sqrt{Hz}}\right]$')
legend('Location', 'southwest');
xlim([1, 500]);
#+end_src
#+NAME: fig:psd_relative_compare
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_relative_compare.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:psd_relative_compare
#+CAPTION: Comparison of the ASD of the relative velocity
#+RESULTS: fig:psd_relative_compare
[[file:figs/psd_relative_compare.png]]
** Ty motion and current
The position of the translation stage and current flowing in its actuator are measured using the elmo software and saved as an csv file.
*** Data pre-processing
Let's look at at the start of the csv file.
#+begin_src bash :results output
sed -n 1,30p mat/Ty-when-Rz-1Hz-and-Ty-1Hz.csv | nl -ba -
#+end_src
#+RESULTS:
#+begin_example
1 Elmo txt chart ver 2.0
2
3 [File Properties]
4 Creation Time,2019-05-13 05:33:43
5 Last Updated,2019-05-13 05:33:43
6 Resolution,0.001
7 Sampling Time,5E-05
8 Recording Time,5.461
9
10 [Chart Properties]
11 No.,Name,X Linear,X No.
12 1,Chart #1,True,0
13 2,Chart #2,True,0
14
15 [Chart Data]
16 Display No.,X No.,Y No.,X Unit,Y Unit,Color,Style,Width
17 1,1,2,sec,N/A,ff0000ff,Solid,TwoPoint
18 2,1,3,sec,N/A,ff0000ff,Solid,TwoPoint
19 2,1,4,sec,N/A,ff007f00,Solid,TwoPoint
20
21 [Signal Names]
22 1,Time (sec)
23 2,Position [cnt]
24 3,Current Command [A]
25 4,Total Current Command [A]
26
27 [Signals Data Group 1]
28 1,2,3,4,
29 0,-141044,-0.537239575086517,-0.537239575086517,
30 0.001,-143127,-0.530803752974691,-0.530803752974691,
#+end_example
The real data starts at line 29.
We then load this =cvs= file starting at line 29.
#+begin_src matlab
tye_on = csvread("mat/Ty-when-Rz-1Hz.csv", 29, 0);
tye_1h = csvread("mat/Ty-when-Rz-1Hz-and-Ty-1Hz.csv", 29, 0);
#+end_src
*** Time domain data
We plot the position of the translation stage measured by the encoders.
There is 200000 encoder count for each mm, we then divide by 200000 to obtain mm.
The result is shown on figure [[fig:ty_position_time]].
#+begin_src matlab
figure;
subplot(1, 2, 1);
plot(tye_on(:, 1), (tye_on(:, 2)-mean(tye_on(:, 2)))/200000);
xlim([0, 5]);
xlabel('Time [s]'); ylabel('Position [mm]');
legend({'Ty - ON'}, 'Location', 'northeast');
subplot(1, 2, 2);
plot(tye_1h(:, 1), (tye_1h(:, 2)-mean(tye_1h(:, 2)))/200000);
xlim([0, 5]);
xlabel('Time [s]'); ylabel('Position [mm]');
legend({'Ty - 1Hz'}, 'Location', 'northeast');
#+end_src
#+NAME: fig:ty_position_time
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/ty_position_time.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:ty_position_time
#+CAPTION: Y position of the translation stage measured by the encoders
#+RESULTS: fig:ty_position_time
[[file:figs/ty_position_time.png]]
We also plot the current as function of the time on figure [[fig:ty_current_time]].
#+begin_src matlab
figure;
subplot(1, 2, 1);
plot(tye_on(:, 1), tye_on(:, 3)-mean(tye_on(:, 3)));
xlim([0, 5]);
xlabel('Time [s]'); ylabel('Current [A]');
legend({'Ty - ON'}, 'Location', 'northeast');
subplot(1, 2, 2);
plot(tye_1h(:, 1), tye_1h(:, 3)-mean(tye_1h(:, 3)));
xlim([0, 5]);
xlabel('Time [s]'); ylabel('Current [A]');
legend({'Ty - 1Hz'}, 'Location', 'northeast');
#+end_src
#+NAME: fig:ty_current_time
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/ty_current_time.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:ty_current_time
#+CAPTION: Current going through the actuator of the translation stage
#+RESULTS: fig:ty_current_time
[[file:figs/ty_current_time.png]]
** Conclusion
#+begin_important
-
#+end_important