diff --git a/figs/vionic_noise_asd.pdf b/figs/vionic_noise_asd.pdf index ee1ced4..a5b8ffd 100644 Binary files a/figs/vionic_noise_asd.pdf and b/figs/vionic_noise_asd.pdf differ diff --git a/figs/vionic_noise_asd.png b/figs/vionic_noise_asd.png index 981a004..94f46a2 100644 Binary files a/figs/vionic_noise_asd.png and b/figs/vionic_noise_asd.png differ diff --git a/figs/vionic_noise_asd_model.pdf b/figs/vionic_noise_asd_model.pdf index a51db0c..4421e20 100644 Binary files a/figs/vionic_noise_asd_model.pdf and b/figs/vionic_noise_asd_model.pdf differ diff --git a/figs/vionic_noise_asd_model.png b/figs/vionic_noise_asd_model.png index cd75817..3dab90b 100644 Binary files a/figs/vionic_noise_asd_model.png and b/figs/vionic_noise_asd_model.png differ diff --git a/figs/vionic_noise_raw_lpf.pdf b/figs/vionic_noise_raw_lpf.pdf new file mode 100644 index 0000000..7015bc9 Binary files /dev/null and b/figs/vionic_noise_raw_lpf.pdf differ diff --git a/figs/vionic_noise_raw_lpf.png b/figs/vionic_noise_raw_lpf.png new file mode 100644 index 0000000..6498779 Binary files /dev/null and b/figs/vionic_noise_raw_lpf.png differ diff --git a/figs/vionic_noise_time.pdf b/figs/vionic_noise_time.pdf index 30d2139..c25aa09 100644 Binary files a/figs/vionic_noise_time.pdf and b/figs/vionic_noise_time.pdf differ diff --git a/figs/vionic_noise_time.png b/figs/vionic_noise_time.png index 9120b40..dc4efd3 100644 Binary files a/figs/vionic_noise_time.png and b/figs/vionic_noise_time.png differ diff --git a/test-bench-vionic.html b/test-bench-vionic.html index 07c9380..11f4ecf 100644 --- a/test-bench-vionic.html +++ b/test-bench-vionic.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Encoder Renishaw Vionic - Test Bench @@ -39,23 +39,23 @@

Table of Contents

@@ -65,7 +65,7 @@

This report is also available as a pdf.


-
+

You can find below the document of:

@@ -90,14 +90,24 @@ In particular, we would like to measure: -
+

encoder_vionic.png

Figure 1: Picture of the Vionic Encoder

-
-

1 Encoder Model

+
    +
  • 1: 2YA275
  • +
  • 2: 2YA274
  • +
  • 3: 2YA273
  • +
  • 4: 2YA270
  • +
  • 5: 2YA272
  • +
  • 6: 2YA271
  • +
  • 7: 2YJ313
  • +
+ +
+

1 Encoder Model

The Encoder is characterized by its dynamics \(G_m(s)\) from the “true” displacement \(y\) to measured displacement \(y_m\). @@ -109,27 +119,27 @@ It is also characterized by its measurement noise \(n\) that can be described by

-The model of the encoder is shown in Figure 2. +The model of the encoder is shown in Figure 2.

-
+

encoder-model-schematic.png

Figure 2: Model of the Encoder

-We can also use a transfer function \(G_n(s)\) to shape a noise \(\tilde{n}\) with unity ASD as shown in Figure 4. +We can also use a transfer function \(G_n(s)\) to shape a noise \(\tilde{n}\) with unity ASD as shown in Figure 4.

-
+

encoder-model-schematic-with-asd.png

- +
@@ -174,7 +184,7 @@ We can also use a transfer function \(G_n(s)\) to shape a noise \(\tilde{n}\) wi
Table 1: Characteristics of the Vionic Encoder
-
+

vionic_expected_noise.png

Figure 4: Expected interpolation errors for the Vionic Encoder

@@ -183,15 +193,15 @@ We can also use a transfer function \(G_n(s)\) to shape a noise \(\tilde{n}\) wi
-
-

2 Noise Measurement

+
+

2 Noise Measurement

- +

-
-

2.1 Test Bench

+
+

2.1 Test Bench

To measure the noise \(n\) of the encoder, one can rigidly fix the head and the ruler together such that no motion should be measured. @@ -200,63 +210,84 @@ Then, the measured signal \(y_m\) corresponds to the noise \(n\).

-
-

2.2 Results

+
+

2.2 Results

First we load the data.

-
load('noise_meas_100s_20kHz.mat', 't', 'x');
-x = x - mean(x);
+
%% Load Data
+enc1 = load('noise_meas_100s_20kHz_1.mat', 't', 'x');
+enc2 = load('noise_meas_100s_20kHz_2.mat', 't', 'x');
+enc3 = load('noise_meas_100s_20kHz_3.mat', 't', 'x');
+enc4 = load('noise_meas_100s_20kHz_4.mat', 't', 'x');
+enc6 = load('noise_meas_100s_20kHz_6.mat', 't', 'x');
+enc7 = load('noise_meas_100s_20kHz_7.mat', 't', 'x');
 

-The time domain data are shown in Figure 4. +The raw measured data as well as the low pass filtered data (using a first order low pass filter with a cut-off at 10Hz) are shown in Figure 5.

+ +
+

vionic_noise_raw_lpf.png +

+

Figure 5: Time domain measurement (raw data and low pass filtered data with first order 10Hz LPF)

+
+

-vionic_noise_time.png -The amplitude spectral density is computed and shown in Figure 5. +The time domain data for all the encoders are compared in Figure 6.

+
+

vionic_noise_time.png +

+

Figure 6: Comparison of the time domain measurement

+
-
+

+The amplitude spectral density is computed and shown in Figure 7. +

+ +

vionic_noise_asd.png

-

Figure 5: Amplitude Spectral Density of the measured signal

+

Figure 7: Amplitude Spectral Density of the measured signal

Let’s create a transfer function that approximate the measured noise of the encoder.

-
Gn_e = 1.8e-11/(1 + s/2/pi/5e3);
+
Gn_e = 1.8e-11/(1 + s/2/pi/1e4);
 

-The amplitude of the transfer function and the measured ASD are shown in Figure 6. +The amplitude of the transfer function and the measured ASD are shown in Figure 8.

-
+

vionic_noise_asd_model.png

-

Figure 6: Measured ASD of the noise and modelled one

+

Figure 8: Measured ASD of the noise and modelled one

-
-

3 Linearity Measurement

+ +
+

3 Linearity Measurement

- +

-
-

3.1 Test Bench

+
+

3.1 Test Bench

In order to measure the linearity, we have to compare the measured displacement with a reference sensor with a known linearity. @@ -265,7 +296,7 @@ An actuator should also be there so impose a displacement.

-One idea is to use the test-bench shown in Figure 7. +One idea is to use the test-bench shown in Figure 9.

@@ -278,38 +309,38 @@ As the interferometer has a very large bandwidth, we should be able to estimate

-
+

test_bench_encoder_calibration.png

-

Figure 7: Schematic of the test bench

+

Figure 9: Schematic of the test bench

-
-

3.2 Results

+
+

3.2 Results

-
-

4 Dynamical Measurement

+
+

4 Dynamical Measurement

- +

-
-

4.1 Test Bench

+
+

4.1 Test Bench

-
-

4.2 Results

+
+

4.2 Results

Author: Dehaeze Thomas

-

Created: 2021-02-02 mar. 18:46

+

Created: 2021-02-03 mer. 11:20

diff --git a/test-bench-vionic.org b/test-bench-vionic.org index 756e01f..bb6fed7 100644 --- a/test-bench-vionic.org +++ b/test-bench-vionic.org @@ -16,7 +16,6 @@ #+LaTeX_CLASS: scrreprt #+LaTeX_CLASS_OPTIONS: [a4paper, 10pt, DIV=12, parskip=full] #+LaTeX_HEADER_EXTRA: \input{preamble.tex} -#+EXPORT_FILE_NAME: test-bench-vionic.tex #+PROPERTY: header-args:matlab :session *MATLAB* #+PROPERTY: header-args:matlab+ :comments org @@ -175,20 +174,60 @@ addpath('./mat/'); ** Results First we load the data. #+begin_src matlab -load('noise_meas_100s_20kHz.mat', 't', 'x'); -x = x - mean(x); +%% Load Data +enc1 = load('noise_meas_100s_20kHz_1.mat', 't', 'x'); +enc2 = load('noise_meas_100s_20kHz_2.mat', 't', 'x'); +enc3 = load('noise_meas_100s_20kHz_3.mat', 't', 'x'); +enc4 = load('noise_meas_100s_20kHz_4.mat', 't', 'x'); +enc6 = load('noise_meas_100s_20kHz_6.mat', 't', 'x'); +enc7 = load('noise_meas_100s_20kHz_7.mat', 't', 'x'); #+end_src -The time domain data are shown in Figure [[fig:vionic_noise_time]]. +#+begin_src matlab :exports none +%% Remove initial offset +enc1.x = enc1.x - mean(enc1.x(1:1000)); +enc2.x = enc2.x - mean(enc2.x(1:1000)); +enc3.x = enc3.x - mean(enc3.x(1:1000)); +enc4.x = enc4.x - mean(enc4.x(1:1000)); +enc6.x = enc6.x - mean(enc6.x(1:1000)); +enc7.x = enc7.x - mean(enc7.x(1:1000)); +#+end_src + +The raw measured data as well as the low pass filtered data (using a first order low pass filter with a cut-off at 10Hz) are shown in Figure [[fig:vionic_noise_raw_lpf]]. #+begin_src matlab :exports none figure; hold on; -plot(t, 1e9*x, '.', 'DisplayName', 'Raw'); -plot(t, 1e9*lsim(1/(1 + s/2/pi/500), x, t), 'DisplayName', 'LPF - 500Hz') +plot(enc1.t, 1e9*enc1.x, '.', 'DisplayName', 'Enc 1 - Raw'); +plot(enc1.t, 1e9*lsim(1/(1 + s/2/pi/10), enc1.x, enc1.t), '-', 'DisplayName', 'Enc 1 - LPF'); hold off; xlabel('Time [s]'); ylabel('Displacement [nm]'); -legend('location', 'northeast'); +legend('location', 'northwest'); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace +exportFig('figs/vionic_noise_raw_lpf.pdf', 'width', 'wide', 'height', 'normal'); +#+end_src + +#+name: fig:vionic_noise_raw_lpf +#+caption: Time domain measurement (raw data and low pass filtered data with first order 10Hz LPF) +#+RESULTS: +[[file:figs/vionic_noise_raw_lpf.png]] + +The time domain data for all the encoders are compared in Figure [[fig:vionic_noise_time]]. +#+begin_src matlab :exports none +figure; +hold on; +plot(enc1.t, 1e9*lsim(1/(1 + s/2/pi/10), enc1.x, enc1.t), '.', 'DisplayName', 'Enc 1'); +plot(enc2.t, 1e9*lsim(1/(1 + s/2/pi/10), enc2.x, enc2.t), '.', 'DisplayName', 'Enc 2'); +plot(enc3.t, 1e9*lsim(1/(1 + s/2/pi/10), enc3.x, enc3.t), '.', 'DisplayName', 'Enc 3'); +plot(enc4.t, 1e9*lsim(1/(1 + s/2/pi/10), enc4.x, enc4.t), '.', 'DisplayName', 'Enc 4'); +plot(enc6.t, 1e9*lsim(1/(1 + s/2/pi/10), enc6.x, enc6.t), '.', 'DisplayName', 'Enc 6'); +plot(enc7.t, 1e9*lsim(1/(1 + s/2/pi/10), enc7.x, enc7.t), '.', 'DisplayName', 'Enc 7'); +hold off; +xlabel('Time [s]'); +ylabel('Displacement [nm]'); +legend('location', 'northwest'); #+end_src #+begin_src matlab :tangle no :exports results :results file replace @@ -196,31 +235,41 @@ exportFig('figs/vionic_noise_time.pdf', 'width', 'wide', 'height', 'normal'); #+end_src #+name: fig:vionic_noise_time -#+caption: Time domain measurement (raw data and low pass filtered data) +#+caption: Comparison of the time domain measurement #+RESULTS: [[file:figs/vionic_noise_time.png]] -The amplitude spectral density is computed and shown in Figure [[fig:vionic_noise_asd]]. +The amplitude spectral density is computed and shown in Figure [[fig:vionic_noise_asd]]. #+begin_src matlab :exports none % Compute sampling Frequency -Ts = (t(end) - t(1))/(length(t)-1); +Ts = (enc1.t(end) - enc1.t(1))/(length(enc1.t)-1); Fs = 1/Ts; -#+end_src -#+begin_src matlab :exports none % Hannning Windows -win = hanning(ceil(0.5*Fs)); +win = hanning(ceil(0.5/Ts)); -[pxx, f] = pwelch(x, win, [], [], Fs); +[p1, f] = pwelch(enc1.x, win, [], [], Fs); +[p2, ~] = pwelch(enc2.x, win, [], [], Fs); +[p3, ~] = pwelch(enc3.x, win, [], [], Fs); +[p4, ~] = pwelch(enc4.x, win, [], [], Fs); +[p6, ~] = pwelch(enc6.x, win, [], [], Fs); +[p7, ~] = pwelch(enc7.x, win, [], [], Fs); #+end_src #+begin_src matlab :exports none figure; -plot(f, sqrt(pxx)); +hold on; +plot(f, sqrt(p1), 'DisplayName', 'Enc 1'); +plot(f, sqrt(p2), 'DisplayName', 'Enc 2'); +plot(f, sqrt(p3), 'DisplayName', 'Enc 3'); +plot(f, sqrt(p4), 'DisplayName', 'Enc 4'); +plot(f, sqrt(p6), 'DisplayName', 'Enc 6'); +plot(f, sqrt(p7), 'DisplayName', 'Enc 7'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]'); -xlim([1, Fs/2]); -ylim([1e-11, 1e-9]); +xlim([10, Fs/2]); +ylim([1e-11, 1e-10]); +legend('location', 'northeast'); #+end_src #+begin_src matlab :tangle no :exports results :results file replace @@ -234,7 +283,7 @@ exportFig('figs/vionic_noise_asd.pdf', 'width', 'wide', 'height', 'normal'); Let's create a transfer function that approximate the measured noise of the encoder. #+begin_src matlab -Gn_e = 1.8e-11/(1 + s/2/pi/5e3); +Gn_e = 1.8e-11/(1 + s/2/pi/1e4); #+end_src The amplitude of the transfer function and the measured ASD are shown in Figure [[fig:vionic_noise_asd_model]]. @@ -242,13 +291,19 @@ The amplitude of the transfer function and the measured ASD are shown in Figure #+begin_src matlab :exports none figure; hold on; -plot(f, sqrt(pxx)); -plot(f, abs(squeeze(freqresp(Gn_e, f, 'Hz'))), 'k--'); +plot(f, sqrt(p1), 'color', [0, 0, 0, 0.5], 'DisplayName', '$\Gamma_n(\omega)$'); +plot(f, sqrt(p2), 'color', [0, 0, 0, 0.5], 'HandleVisibility', 'off'); +plot(f, sqrt(p3), 'color', [0, 0, 0, 0.5], 'HandleVisibility', 'off'); +plot(f, sqrt(p4), 'color', [0, 0, 0, 0.5], 'HandleVisibility', 'off'); +plot(f, sqrt(p6), 'color', [0, 0, 0, 0.5], 'HandleVisibility', 'off'); +plot(f, sqrt(p7), 'color', [0, 0, 0, 0.5], 'HandleVisibility', 'off'); +plot(f, abs(squeeze(freqresp(Gn_e, f, 'Hz'))), 'r-', 'DisplayName', '$|G_n(j\omega)|$'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]'); -xlim([1, Fs/2]); -ylim([1e-11, 1e-9]); +xlim([10, Fs/2]); +ylim([1e-11, 1e-10]); +legend('location', 'northeast'); #+end_src #+begin_src matlab :tangle no :exports results :results file replace @@ -259,6 +314,7 @@ exportFig('figs/vionic_noise_asd_model.pdf', 'width', 'wide', 'height', 'normal' #+caption: Measured ASD of the noise and modelled one #+RESULTS: [[file:figs/vionic_noise_asd_model.png]] + * Linearity Measurement <> ** Test Bench