453 lines
16 KiB
Org Mode
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:~/Cloud/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
|