"Huddle test" + calibration analysis

This commit is contained in:
Thomas Dehaeze 2021-03-10 11:43:00 +01:00
parent 02b86e883e
commit 0fd8fddc34
17 changed files with 743 additions and 195 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
figs/force_meas_error.pdf Normal file

Binary file not shown.

BIN
figs/force_meas_error.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
figs/force_noise_asd.pdf Normal file

Binary file not shown.

BIN
figs/force_noise_asd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
figs/force_noise_time.pdf Normal file

Binary file not shown.

BIN
figs/force_noise_time.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because it is too large Load Diff

View File

@ -601,9 +601,10 @@ Another measurement bench allowing better accuracy will be developed.
<<sec:test_meas_probe>>
*** Introduction :ignore:
- *Load Cells*: [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]] (and [[file:doc/FRE_DS_XFL212R_FR_A3.pdf][XFL212R]])
#+begin_note
- *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
*** Setup :ignore:
The measurement setup is made such that the probe measured the translation table displacement.
@ -748,6 +749,7 @@ However, there is some time delay of tens of milliseconds that could induce some
:header-args:matlab+: :tangle ./matlab/probe_stiffness.m
:END:
<<sec:meas_probe_stiffness>>
*** Introduction :ignore:
#+begin_note
@ -867,6 +869,313 @@ exportFig('figs/mahr_stiffness_f_d_plot.pdf', 'width', 'wide', 'height', 'normal
The Millimar 1318 probe has a stiffness of $\approx 0.04\,[N/mm]$.
#+end_summary
** Force Sensor Calibration
*** Introduction :ignore:
#+begin_note
*Load Cells*:
- [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]]
- [[file:doc/FRE_DS_XFL212R_FR_A3.pdf][XFL212R]]
#+end_note
There are both specified to have $\pm 1 \%$ of non-linearity over the full range.
The XFL212R has a spherical interface while the FC2231 has a flat surface.
Therefore, we should have a nice point contact when using the two force sensors as shown in Figure [[fig:force_sensor_calibration_setup]].
#+name: fig:force_sensor_calibration_setup
#+caption: Zoom on the two force sensors in contact
#+attr_latex: :width 0.8\linewidth
[[file:figs/IMG_20210309_145333.jpg]]
The two force sensors are therefore measuring the exact same force, and we can compare the two measurements.
*** 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>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
addpath('./matlab/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
*** Analysis :ignore:
Let's load the measured force of both sensors.
#+begin_src matlab
%% Load measurement data
load('calibration_force_sensor.mat', 't', 'F', 'Fc')
#+end_src
We remove any offset such that they are both measuring no force when not in contact.
#+begin_src matlab
%% Remove offset
F = F - mean(F( t > 0.5 & t < 1.0));
Fc = Fc - mean(Fc(t > 0.5 & t < 1.0));
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(t, F, 'DisplayName', 'FC2231');
plot(t, Fc, 'DisplayName', 'XFL212R');
hold off;
xlabel('Time [s]'); ylabel('Measured Force [N]');
xlim([0,15]); ylim([0,55]);
legend('location', 'southeast');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/force_calibration_time.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:force_calibration_time
#+caption: Measured force using both sensors as a function of time
#+RESULTS:
[[file:figs/force_calibration_time.png]]
Let's select only the first part from the moment they are in contact until the maximum force is reached.
#+begin_src matlab
%% Only get the first part until maximum force
F = F( t > 1.55 & t < 4.65);
Fc = Fc(t > 1.55 & t < 4.65);
#+end_src
Then, let's make a linear fit between the two measured forces.
#+begin_src matlab
%% Make a line fit
fit_F = polyfit(Fc, F, 1);
#+end_src
The two forces are plotted against each other as well as the linear fit in Figure [[fig:calibrated_force_dit]].
#+begin_src matlab :exports none
figure;
hold on;
plot(Fc, F, '-', 'DisplayName', 'Raw Data');
plot(Fc([1,end]), Fc([1,end])*fit_F(1) + fit_F(2), '--', 'DisplayName', 'Line Fit');
hold off;
xlabel('XFL212R [N]'); ylabel('FC2231 [N]');
xlim([0,50]); ylim([0,50]);
legend('location', 'southeast');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/calibrated_force_dit.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:calibrated_force_dit
#+caption: Measured two forces and linear fit
#+RESULTS:
[[file:figs/calibrated_force_dit.png]]
The measurement error between the two sensors is shown in Figure [[fig:force_meas_error]].
It is below 0.1N for the full measurement range.
#+begin_src matlab :exports none
figure;
hold on;
plot(Fc, F - (Fc*fit_F(1) + fit_F(2)), 'k-');
hold off;
xlim([0,50]); ylim([-0.12, 0.12]);
xlabel('Measured Force [N]');
ylabel('Error [N]')
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/force_meas_error.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:force_meas_error
#+caption: Error in Newtons
#+RESULTS:
[[file:figs/force_meas_error.png]]
The same error is shown in percentage in Figure [[fig:force_meas_error_percentage]].
The error is less than 1% when the measured force is above 5N.
#+begin_src matlab :exports none
figure;
plot(Fc, 100*(F - (Fc*fit_F(1) + fit_F(2)))./Fc, 'k-');
xlim([0,50]); ylim([-4, 1]);
xlabel('Measured Force [N]');
ylabel('Error [\%]')
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/force_meas_error_percentage.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:force_meas_error_percentage
#+caption: Error in percentage
#+RESULTS:
[[file:figs/force_meas_error_percentage.png]]
** Force Sensor Noise
*** Introduction :ignore:
The objective of this measurement is to estimate the noise of the force sensor [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]].
To do so, we don't apply any force to the sensor, and we measure its output for 100s.
*** 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>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
addpath('./matlab/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
*** Analysis :ignore:
Let's load the measurement data.
#+begin_src matlab
%% Load measurement data
load('force_sensor_noise_meas.mat', 't', 'F');
Ts = t(2) - t(1);
#+end_src
The measured force is shown in Figure [[fig:force_noise_time]].
#+begin_src matlab :exports none
%% Take last 100s
F = F(t > t(end)-100);
t = t(t > t(end)-100);
%% Remove force offset and reset time
F = F - mean(F);
t = t - t(1);
#+end_src
#+begin_src matlab :exports none
figure;
plot(t, F)
xlabel('Time [s]');
ylabel('Force [N]');
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/force_noise_time.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:force_noise_time
#+caption: Measured force
#+RESULTS:
[[file:figs/force_noise_time.png]]
Let's now compute the Amplitude Spectral Density of the measured force.
#+begin_src matlab
%% Compute Spectral Density of Measured Force
% Hanning window
win = hanning(ceil(1/Ts));
% Power Spectral Density
[pxx, f] = pwelch(F, win, [], [], 1/Ts);
#+end_src
The results is shown in Figure [[fig:force_noise_asd]].
#+begin_src matlab :exports none
figure;
hold on;
plot(f, sqrt(pxx));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD [$N/\sqrt{Hz}$]');
xlim([1, 1/Ts/2]); ylim([4e-5, 1e-3]);
#+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/force_noise_asd.pdf', 'width', 'wide', 'height', 'normal');
#+end_src
#+name: fig:force_noise_asd
#+caption: Amplitude Spectral Density of the meaured force
#+RESULTS:
[[file:figs/force_noise_asd.png]]
** TODO Force Sensor Stiffness
*** Introduction :ignore:
The objective of this measurement is to estimate the stiffness of the force sensor [[file:doc/A700000007147087.pdf][FC2231-0000-0010-L]].
To do so, a very stiff element is fixed in front of the force sensor as shown in Figure [[fig:setup_meas_force_sensor_stiffness]].
Then, we apply a force on the stiff element through the force sensor.
We measure the deflection of the force sensor using an encoder.
Then, having the force and the deflection, we should be able to estimate the stiffness of the force sensor supposing the stiffness of the other elements are much larger.
#+name: fig:setup_meas_force_sensor_stiffness
#+caption: Bench used to measured the stiffness of the force sensor
#+attr_latex: :width 0.6\linewidth
[[file:figs/IMG_20210309_145242.jpg]]
From the documentation, the deflection of the sensor at the maximum load (50N) is 0.05mm, the stiffness is therefore foreseen to be around $1\,N/\mu m$.
*** 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>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
addpath('./matlab/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
*** Analysis :ignore:
Let's load the measured force as well as the measured displacement.
#+begin_src matlab
%% Load measurement data
load('force_sensor_stiff_meas.mat', 't', 'F', 'd')
#+end_src
#+begin_src matlab
%% Select important part of data
F = F( t > 1.55 & t < 4.65);
d = d( t > 1.55 & t < 4.65);
#+end_src
#+begin_src matlab
%% Linear fit
fit_k = polyfit(F, d, 1);
#+end_src
#+begin_src matlab
%% Force Sensor Stiffness
fit_k(1)
#+end_src
* Bending Stiffness Measurement
:PROPERTIES:
:header-args:matlab+: :tangle ./matlab/bending_stiff_meas.m

Binary file not shown.