"Huddle test" + calibration analysis
BIN
figs/IMG_20210309_145242.jpg
Normal file
After Width: | Height: | Size: 360 KiB |
BIN
figs/IMG_20210309_145333.jpg
Normal file
After Width: | Height: | Size: 217 KiB |
BIN
figs/calibrated_force_dit.pdf
Normal file
BIN
figs/calibrated_force_dit.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
figs/force_calibration_time.pdf
Normal file
BIN
figs/force_calibration_time.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
figs/force_meas_error.pdf
Normal file
BIN
figs/force_meas_error.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
figs/force_meas_error_percentage.pdf
Normal file
BIN
figs/force_meas_error_percentage.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
figs/force_noise_asd.pdf
Normal file
BIN
figs/force_noise_asd.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
figs/force_noise_time.pdf
Normal file
BIN
figs/force_noise_time.png
Normal file
After Width: | Height: | Size: 20 KiB |
@ -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
|
||||
|