diff --git a/figs/comp_encoder_probe_linear_fit.pdf b/figs/comp_encoder_probe_linear_fit.pdf new file mode 100644 index 0000000..fd05db8 Binary files /dev/null and b/figs/comp_encoder_probe_linear_fit.pdf differ diff --git a/figs/comp_encoder_probe_linear_fit.png b/figs/comp_encoder_probe_linear_fit.png new file mode 100644 index 0000000..1a1e7b2 Binary files /dev/null and b/figs/comp_encoder_probe_linear_fit.png differ diff --git a/figs/comp_encoder_probe_mismatch.pdf b/figs/comp_encoder_probe_mismatch.pdf new file mode 100644 index 0000000..054e0d8 Binary files /dev/null and b/figs/comp_encoder_probe_mismatch.pdf differ diff --git a/figs/comp_encoder_probe_mismatch.png b/figs/comp_encoder_probe_mismatch.png new file mode 100644 index 0000000..9bd1677 Binary files /dev/null and b/figs/comp_encoder_probe_mismatch.png differ diff --git a/figs/comp_encoder_probe_time.pdf b/figs/comp_encoder_probe_time.pdf new file mode 100644 index 0000000..912c600 Binary files /dev/null and b/figs/comp_encoder_probe_time.pdf differ diff --git a/figs/comp_encoder_probe_time.png b/figs/comp_encoder_probe_time.png new file mode 100644 index 0000000..ebd7842 Binary files /dev/null and b/figs/comp_encoder_probe_time.png differ diff --git a/figs/comp_encoder_probe_time_zoom.pdf b/figs/comp_encoder_probe_time_zoom.pdf new file mode 100644 index 0000000..fd51d59 Binary files /dev/null and b/figs/comp_encoder_probe_time_zoom.pdf differ diff --git a/figs/comp_encoder_probe_time_zoom.png b/figs/comp_encoder_probe_time_zoom.png new file mode 100644 index 0000000..d98b1ef Binary files /dev/null and b/figs/comp_encoder_probe_time_zoom.png differ diff --git a/figs/mahr_stiffness_f_d_plot.pdf b/figs/mahr_stiffness_f_d_plot.pdf new file mode 100644 index 0000000..6014127 Binary files /dev/null and b/figs/mahr_stiffness_f_d_plot.pdf differ diff --git a/figs/mahr_stiffness_f_d_plot.png b/figs/mahr_stiffness_f_d_plot.png new file mode 100644 index 0000000..d9e2a23 Binary files /dev/null and b/figs/mahr_stiffness_f_d_plot.png differ diff --git a/figs/mahr_time_domain.pdf b/figs/mahr_time_domain.pdf new file mode 100644 index 0000000..2f15a87 Binary files /dev/null and b/figs/mahr_time_domain.pdf differ diff --git a/figs/mahr_time_domain.png b/figs/mahr_time_domain.png new file mode 100644 index 0000000..388950d Binary files /dev/null and b/figs/mahr_time_domain.png differ diff --git a/figs/setup_mahr_stiff_meas_side.jpg b/figs/setup_mahr_stiff_meas_side.jpg new file mode 100644 index 0000000..b6371cd Binary files /dev/null and b/figs/setup_mahr_stiff_meas_side.jpg differ diff --git a/figs/setup_mahr_stiff_meas_top.jpg b/figs/setup_mahr_stiff_meas_top.jpg new file mode 100644 index 0000000..8f2f084 Binary files /dev/null and b/figs/setup_mahr_stiff_meas_top.jpg differ diff --git a/test-bench-flexible-joints.html b/test-bench-flexible-joints.html index 5df7758..a5d74f9 100644 --- a/test-bench-flexible-joints.html +++ b/test-bench-flexible-joints.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Flexible Joint - Test Bench @@ -39,17 +39,27 @@

Table of Contents

@@ -57,8 +67,8 @@

This report is also available as a pdf.


-
-

1 Flexible Joints - Requirements

+
+

1 Flexible Joints - Requirements

@@ -109,8 +119,8 @@ -
-

2 Test Bench Description

+
+

2 Test Bench Description

The main characteristic of the flexible joint that we want to measure is its bending stiffness \(k_{R_x} \approx k_{R_y}\). @@ -126,23 +136,23 @@ The basic idea is to measured the angular deflection of the flexible joint as a

-
+

test-bench-schematic.png

Figure 1: Schematic of the test bench to measure the bending stiffness of the flexible joints

-
-

2.1 Flexible joint Geometry

+
+

2.1 Flexible joint Geometry

-The flexible joint used for the Nano-Hexapod is shown in Figure 2. +The flexible joint used for the Nano-Hexapod is shown in Figure 2. Its bending stiffness is foreseen to be \(k_{R_y}\approx 20\,\frac{Nm}{rad}\) and its stroke \(\theta_{y,\text{max}}\approx 20\,mrad\).

-
+

flexible_joint_geometry.png

Figure 2: Geometry of the flexible joint

@@ -164,8 +174,8 @@ Let’s define the parameters on Matlab.
-
-

2.2 Required external applied force

+
+

2.2 Required external applied force

The bending \(\theta_y\) of the flexible joint due to the force \(F_x\) is: @@ -197,8 +207,8 @@ The measurement range of the force sensor should then be higher than \(20\,N\).

-
-

2.3 Required actuator stroke and sensors range

+
+

2.3 Required actuator stroke and sensors range

The flexible joint is designed to allow a bending motion of \(\pm 20\,mrad\). @@ -223,8 +233,8 @@ The measurement range of the displacement sensor should also be higher than \(0.

-
-

2.4 First try with the APA95ML

+
+

2.4 First try with the APA95ML

The APA95ML as a stroke of \(100\,\mu m\) and the encoder in parallel can easily measure the required stroke. @@ -252,21 +262,22 @@ And the tested angular range is:

-
-

2.5 Test Bench

+
+

2.5 Test Bench

-
+

test-bench-schematic.png

Figure 3: Schematic of the test bench to measure the bending stiffness of the flexible joints

-
+
@@ -274,13 +285,150 @@ And the tested angular range is:
-
-

3 Experimental measurement

+
+

3 Agreement between the probe and the encoder

+
+
+
+

3.1 Results

+
+
+
load('meas_probe_against_encoder.mat', 't', 'd', 'dp', 'F')
+
+
+ + +
+

comp_encoder_probe_time.png +

+

Figure 4: Time domain measurement

+
+ + +
+

comp_encoder_probe_time_zoom.png +

+

Figure 5: Time domain measurement (Zoom)

+
+ +
+
finddelay(d, dp)
+
+
+ +
+316
+
+ + +
+
Ts*finddelay(d, dp)
+
+
+ +
+0.0158
+
+ + + +
+

comp_encoder_probe_mismatch.png +

+

Figure 6: Measurement mismatch, with and without delay compensation

+
+ + +
+

comp_encoder_probe_linear_fit.png +

+

Figure 7: Measured displacement by the probe as a function of the measured displacement by the encoder

+
+
+
+
+ +
+

4 Measurement of the Millimar 1318 probe stiffness

+
+
+ + +
+ + +
+

setup_mahr_stiff_meas_side.jpg +

+

Figure 8: Setup - Side View

+
+ + +
+

setup_mahr_stiff_meas_top.jpg +

+

Figure 9: Setup - Top View

+
+
+ +
+

4.1 Results

+
+
+
load('meas_stiff_probe.mat', 't', 'd', 'dp', 'F')
+
+
+ +

+The time domain measured force and displacement are shown in Figure 10. +

+ + +
+

mahr_time_domain.png +

+

Figure 10: Time domain measurements

+
+ + +

+Now we can estimate the stiffness with a linear fit. +

+ +
+Stiffness is 0.039 [N/mm]
+
+ + +

+This is very close to the 0.04 [N/mm] written in the Millimar 1318 probe datasheet. +

+ +

+And compare the linear fit with the raw measurement data (Figure 11). +

+ + +
+

mahr_stiffness_f_d_plot.png +

+
+
+
+
+ +
+

5 Experimental measurement

Author: Dehaeze Thomas

-

Created: 2021-02-02 mar. 19:12

+

Created: 2021-02-16 mar. 19:15

diff --git a/test-bench-flexible-joints.org b/test-bench-flexible-joints.org index 289fcf3..26c1a57 100644 --- a/test-bench-flexible-joints.org +++ b/test-bench-flexible-joints.org @@ -185,4 +185,268 @@ And the tested angular range is: - *Displacement Probe*: [[file:doc/Millimar--3723046--BA--C1208-C1216-C1240--FR--2016-11-08.pdf][Millimar C1216 electronics]] and [[file:doc/tmp3m0cvmue_7888038c-cdc8-48d8-a837-35de02760685.pdf][Millimar 1318 probe]] #+end_note +* Agreement between the probe and the encoder +** Introduction :ignore: +** Setup +The measurement setup is made such that the probe measured the translation table displacement. +It should then measure the same displacement as the encoder. +Using this setup, we should be able to compare the probe and the encoder. + +** Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) +<> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes +<> +#+end_src + +#+begin_src matlab :tangle no +addpath('./matlab/mat/'); +addpath('./matlab/'); +#+end_src + +#+begin_src matlab :eval no +addpath('./mat/'); +#+end_src + +** Results +Let's load the measurements. + +#+begin_src matlab +load('meas_probe_against_encoder.mat', 't', 'd', 'dp', 'F') +#+end_src + +#+begin_src matlab :exports none +%% Sampling time [s] +Ts = (t(end) - t(1))/(length(t)-1); + +%% Remove first second +t = t(ceil(1/Ts):end); +d = -d(ceil(1/Ts):end); +dp = -dp(ceil(1/Ts):end); +F = F(ceil(1/Ts):end); +#+end_src + +The time domain measured displacement by the probe and by the encoder is shown in Figure [[fig:comp_encoder_probe_time]]. + +#+begin_src matlab :exports none +%% Time Domain plots +figure; +hold on; +plot(t, d, 'DisplayName', 'Encoder'); +plot(t, dp, 'DisplayName', 'Probe'); +hold off; +xlabel('Time [s]'); ylabel('Displacement [m]'); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace +exportFig('figs/comp_encoder_probe_time.pdf', 'width', 'wide', 'height', 'normal'); +#+end_src + +#+name: fig:comp_encoder_probe_time +#+caption: Time domain measurement +#+RESULTS: +[[file:figs/comp_encoder_probe_time.png]] + +If we zoom, we see that there is some delay between the encoder and the probe (Figure [[fig:comp_encoder_probe_time_zoom]]). + +#+begin_src matlab :exports none +%% Zoom +figure; +hold on; +plot(t, d, 'DisplayName', 'Encoder'); +plot(t, dp, 'DisplayName', 'Probe'); +hold off; +xlabel('Time [s]'); ylabel('Displacement [m]'); +xlim([7.7, 7.9]) +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace +exportFig('figs/comp_encoder_probe_time_zoom.pdf', 'width', 'wide', 'height', 'normal'); +#+end_src + +#+name: fig:comp_encoder_probe_time_zoom +#+caption: Time domain measurement (Zoom) +#+RESULTS: +[[file:figs/comp_encoder_probe_time_zoom.png]] + +This delay is estimated using the =finddelay= command. + +#+begin_src matlab :results value replace :exports results :tangle no +sprintf('The time delay is approximately %.1f [ms]', 1e3*Ts*finddelay(d, dp)) +#+end_src + +#+RESULTS: +: The time delay is approximately 15.8 [ms] + +The measured mismatch between the encoder and the probe with and without compensating for the time delay are shown in Figure [[fig:comp_encoder_probe_mismatch]]. + +#+begin_src matlab :exports none +figure; +hold on; +plot(t, d-dp, 'DisplayName', 'Raw Mismatch'); +plot(t(1:end-finddelay(d, dp)), d(1:end-finddelay(d, dp))-dp(finddelay(d, dp)+1:end), 'DisplayName', 'Removed Delay'); +hold off; +xlabel('Time [s]'); ylabel('Measurement Missmatch [m]'); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace +exportFig('figs/comp_encoder_probe_mismatch.pdf', 'width', 'wide', 'height', 'normal'); +#+end_src + +#+name: fig:comp_encoder_probe_mismatch +#+caption: Measurement mismatch, with and without delay compensation +#+RESULTS: +[[file:figs/comp_encoder_probe_mismatch.png]] + +Finally, the displacement of the probe is shown as a function of the displacement of the encoder and a linear fit is made (Figure [[fig:comp_encoder_probe_linear_fit]]). + +#+begin_src matlab :exports none +figure; +hold on; +plot(1e3*d, 1e3*dp, 'DisplayName', 'Raw data'); +plot(1e3*d, 1e3*d*(d\dp), 'DisplayName', sprintf('Linear fit: $\\alpha = %.5f$', (d\dp))); +hold on; +xlabel('Encoder [mm]'); ylabel('Probe [mm]'); +legend('location', 'southeast') +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace +exportFig('figs/comp_encoder_probe_linear_fit.pdf', 'width', 'normal', 'height', 'normal'); +#+end_src + +#+name: fig:comp_encoder_probe_linear_fit +#+caption: Measured displacement by the probe as a function of the measured displacement by the encoder +#+RESULTS: +[[file:figs/comp_encoder_probe_linear_fit.png]] + +#+begin_important +From the measurement, it is shown that the probe is well calibrated. +However, there is some time delay of tens of milliseconds that could induce some measurement errors. +#+end_important + +* Measurement of the Millimar 1318 probe stiffness +** Introduction :ignore: + +#+begin_note +- *Translation Stage*: [[file:doc/V-408-Datasheet.pdf][V-408]] +- *Load Cell*: [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]] +- *Encoder*: [[file:doc/L-9517-9448-05-B_Data_sheet_RESOLUTE_BiSS_en.pdf][Renishaw Resolute 1nm]] +- *Displacement Probe*: [[file:doc/Millimar--3723046--BA--C1208-C1216-C1240--FR--2016-11-08.pdf][Millimar C1216 electronics]] and [[file:doc/tmp3m0cvmue_7888038c-cdc8-48d8-a837-35de02760685.pdf][Millimar 1318 probe]] +#+end_note + +#+name: fig:setup_mahr_stiff_meas_side +#+caption: Setup - Side View +#+attr_latex: :width \linewidth +[[file:figs/setup_mahr_stiff_meas_side.jpg]] + +#+name: fig:setup_mahr_stiff_meas_top +#+caption: Setup - Top View +#+attr_latex: :width \linewidth +[[file:figs/setup_mahr_stiff_meas_top.jpg]] + +** Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) +<> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes +<> +#+end_src + +#+begin_src matlab :tangle no +addpath('./matlab/mat/'); +addpath('./matlab/'); +#+end_src + +#+begin_src matlab :eval no +addpath('./mat/'); +#+end_src + +** Results +Let's load the measurement results. +#+begin_src matlab +load('meas_stiff_probe.mat', 't', 'd', 'dp', 'F') +#+end_src + +#+begin_src matlab :exports none +%% Sampling time [s] +Ts = (t(end) - t(1))/(length(t)-1); + +%% Remove first second +t = t(ceil(1/Ts):end); +d = d(ceil(1/Ts):end); +dp = dp(ceil(1/Ts):end); +F = F(ceil(1/Ts):end); + + +%% Remove Offset +t = t - t(1); +F = F - mean(F(1:ceil(1/Ts))); +#+end_src + +The time domain measured force and displacement are shown in Figure [[fig:mahr_time_domain]]. + +#+begin_src matlab :exports none +%% Time Domain plots +figure; +tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None'); + +ax1 = nexttile; +plot(t, F); +ylabel('Force [N]'); set(gca, 'XTickLabel',[]); + +ax2 = nexttile; +plot(t, d); +xlabel('Time [s]'); ylabel('Displacement [m]'); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace +exportFig('figs/mahr_time_domain.pdf', 'width', 'wide', 'height', 'tall'); +#+end_src + +#+name: fig:mahr_time_domain +#+caption: Time domain measurements +#+RESULTS: +[[file:figs/mahr_time_domain.png]] + + +Now we can estimate the stiffness with a linear fit. + +#+begin_src matlab :results value replace :exports results :tangle no +sprintf('Stiffness is %.3f [N/mm]', abs(1e-3*(d\F))) +#+end_src + +#+RESULTS: +: Stiffness is 0.039 [N/mm] + +This is very close to the 0.04 [N/mm] written in the [[file:doc/tmp3m0cvmue_7888038c-cdc8-48d8-a837-35de02760685.pdf][Millimar 1318 probe datasheet]]. + +And compare the linear fit with the raw measurement data (Figure [[fig:mahr_stiffness_f_d_plot]]). + +#+begin_src matlab :exports none +figure; +hold on; +plot(F, d, 'DisplayName', 'Raw data'); +plot(F, F/(d\F), 'DisplayName', 'Linear fit'); +hold off; +xlabel('Measured Force [N]'); +ylabel('Measured Displacement [m]'); +legend('location', 'southeast'); +#+end_src + +#+begin_src matlab :tangle no :exports results :results file replace +exportFig('figs/mahr_stiffness_f_d_plot.pdf', 'width', 'wide', 'height', 'normal'); +#+end_src + +#+name: fig:mahr_stiffness_f_d_plot +#+caption: Measured displacement as a function of the measured force. Raw data and linear fit +#+RESULTS: +[[file:figs/mahr_stiffness_f_d_plot.png]] + +#+begin_summary +The Millimar 1318 probe has a stiffness of $\approx 0.04\,[N/mm]$. +#+end_summary + * Experimental measurement diff --git a/test-bench-flexible-joints.pdf b/test-bench-flexible-joints.pdf index d02327a..5e85d02 100644 Binary files a/test-bench-flexible-joints.pdf and b/test-bench-flexible-joints.pdf differ