2021-06-07 19:00:29 +02:00
<?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en" >
< head >
2021-06-08 22:14:48 +02:00
<!-- 2021 - 06 - 08 mar. 21:51 -->
2021-06-07 19:00:29 +02:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< title > Nano-Hexapod - Test Bench< / title >
< meta name = "author" content = "Dehaeze Thomas" / >
< meta name = "generator" content = "Org Mode" / >
< link rel = "stylesheet" type = "text/css" href = "https://research.tdehaeze.xyz/css/style.css" / >
< script type = "text/javascript" src = "https://research.tdehaeze.xyz/js/script.js" > < / script >
< / head >
< body >
< div id = "org-div-home-and-up" >
< a accesskey = "h" href = "../index.html" > UP < / a >
|
< a accesskey = "H" href = "../index.html" > HOME < / a >
< / div > < div id = "content" >
< h1 class = "title" > Nano-Hexapod - Test Bench< / h1 >
< div id = "table-of-contents" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
2021-06-08 22:14:48 +02:00
< li > < a href = "#org401a850" > 1. Test-Bench Description< / a > < / li >
< li > < a href = "#org32d67fc" > 2. Encoders fixed to the Struts< / a >
< ul >
< li > < a href = "#org332ecf2" > 2.1. Introduction< / a > < / li >
< li > < a href = "#orgf904215" > 2.2. Load Data< / a > < / li >
< li > < a href = "#org3689d6b" > 2.3. Spectral Analysis - Setup< / a > < / li >
< li > < a href = "#org9ac5c69" > 2.4. DVF Plant< / a > < / li >
< li > < a href = "#org4f1737c" > 2.5. IFF Plant< / a > < / li >
< li > < a href = "#org4238e67" > 2.6. Jacobian< / a > < / li >
< / ul >
< / li >
2021-06-07 19:00:29 +02:00
< / ul >
< / div >
< / div >
< hr >
< p > This report is also available as a < a href = "./test-bench-nano-hexapod.pdf" > pdf< / a > .< / p >
< hr >
2021-06-08 22:14:48 +02:00
< div id = "outline-container-org401a850" class = "outline-2" >
< h2 id = "org401a850" > < span class = "section-number-2" > 1< / span > Test-Bench Description< / h2 >
2021-06-07 19:00:29 +02:00
< div class = "outline-text-2" id = "text-1" >
2021-06-08 22:14:48 +02:00
< div class = "note" id = "orgdb43d80" >
2021-06-07 19:00:29 +02:00
< p >
Here are the documentation of the equipment used for this test bench:
< / p >
< ul class = "org-ul" >
< li > Voltage Amplifier: PiezoDrive < a href = "doc/PD200-V7-R1.pdf" > PD200< / a > < / li >
< li > Amplified Piezoelectric Actuator: Cedrat < a href = "doc/APA300ML.pdf" > APA300ML< / a > < / li >
< li > DAC/ADC: Speedgoat < a href = "doc/IO131-OEM-Datasheet.pdf" > IO313< / a > < / li >
< li > Encoder: Renishaw < a href = "doc/L-9517-9678-05-A_Data_sheet_VIONiC_series_en.pdf" > Vionic< / a > and used < a href = "doc/L-9517-9862-01-C_Data_sheet_RKLC_EN.pdf" > Ruler< / a > < / li >
< li > Interferometers: Attocube< / li >
< / ul >
< / div >
2021-06-08 22:14:48 +02:00
< div id = "org00dd2c1" class = "figure" >
< p > < img src = "figs/IMG_20210608_152917.jpg" alt = "IMG_20210608_152917.jpg" / >
< / p >
< p > < span class = "figure-number" > Figure 1: < / span > Nano-Hexapod< / p >
< / div >
< div id = "org0f5d79a" class = "figure" >
< p > < img src = "figs/IMG_20210608_154722.jpg" alt = "IMG_20210608_154722.jpg" / >
< / p >
< p > < span class = "figure-number" > Figure 2: < / span > Nano-Hexapod and the control electronics< / p >
< / div >
< / div >
< / div >
< div id = "outline-container-org32d67fc" class = "outline-2" >
< h2 id = "org32d67fc" > < span class = "section-number-2" > 2< / span > Encoders fixed to the Struts< / h2 >
< div class = "outline-text-2" id = "text-2" >
< / div >
< div id = "outline-container-org332ecf2" class = "outline-3" >
< h3 id = "org332ecf2" > < span class = "section-number-3" > 2.1< / span > Introduction< / h3 >
< / div >
< div id = "outline-container-orgf904215" class = "outline-3" >
< h3 id = "orgf904215" > < span class = "section-number-3" > 2.2< / span > Load Data< / h3 >
< div class = "outline-text-3" id = "text-2-2" >
< div class = "org-src-container" >
< pre class = "src src-matlab" > meas_data_lf = {};
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:6< / span >
meas_data_lf(< span class = "org-constant" > i< / span > ) = {load(sprintf(< span class = "org-string" > 'mat/frf_data_exc_strut_%i_noise_lf.mat'< / span > , < span class = "org-constant" > i< / span > ), < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'Va'< / span > , < span class = "org-string" > 'Vs'< / span > , < span class = "org-string" > 'de'< / span > )};
meas_data_hf(< span class = "org-constant" > i< / span > ) = {load(sprintf(< span class = "org-string" > 'mat/frf_data_exc_strut_%i_noise_hf.mat'< / span > , < span class = "org-constant" > i< / span > ), < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'Va'< / span > , < span class = "org-string" > 'Vs'< / span > , < span class = "org-string" > 'de'< / span > )};
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-org3689d6b" class = "outline-3" >
< h3 id = "org3689d6b" > < span class = "section-number-3" > 2.3< / span > Spectral Analysis - Setup< / h3 >
< div class = "outline-text-3" id = "text-2-3" >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-comment" > % Sampling Time [s]< / span >
Ts = (meas_data_lf{1}.t(end) < span class = "org-type" > -< / span > (meas_data_lf{1}.t(1)))< span class = "org-type" > /< / span > (length(meas_data_lf{1}.t)< span class = "org-type" > -< / span > 1);
< span class = "org-comment" > % Sampling Frequency [Hz]< / span >
Fs = 1< span class = "org-type" > /< / span > Ts;
< span class = "org-comment" > % Hannning Windows< / span >
win = hanning(ceil(1< span class = "org-type" > *< / span > Fs));
< / pre >
< / div >
< p >
And we get the frequency vector.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > [< span class = "org-type" > ~< / span > , f] = tfestimate(meas_data_lf{1}.Va, meas_data_lf{1}.de, win, [], [], 1< span class = "org-type" > /< / span > Ts);
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > i_lf = f < span class = "org-type" > < < / span > 250; < span class = "org-comment" > % Points for low frequency excitation< / span >
i_hf = f < span class = "org-type" > > < / span > 250; < span class = "org-comment" > % Points for high frequency excitation< / span >
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-org9ac5c69" class = "outline-3" >
< h3 id = "org9ac5c69" > < span class = "section-number-3" > 2.4< / span > DVF Plant< / h3 >
< div class = "outline-text-3" id = "text-2-4" >
< p >
First, let’ s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure < a href = "#orga941078" > 3< / a > ).
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Coherence< / span > < / span >
coh_dvf_lf = zeros(length(f), 6, 6);
coh_dvf_hf = zeros(length(f), 6, 6);
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:6< / span >
coh_dvf_lf(< span class = "org-type" > :< / span > , < span class = "org-type" > :< / span > , < span class = "org-constant" > i< / span > ) = mscohere(meas_data_lf{< span class = "org-constant" > i< / span > }.Va, meas_data_lf{< span class = "org-constant" > i< / span > }.de, win, [], [], 1< span class = "org-type" > /< / span > Ts);
coh_dvf_hf(< span class = "org-type" > :< / span > , < span class = "org-type" > :< / span > , < span class = "org-constant" > i< / span > ) = mscohere(meas_data_hf{< span class = "org-constant" > i< / span > }.Va, meas_data_hf{< span class = "org-constant" > i< / span > }.de, win, [], [], 1< span class = "org-type" > /< / span > Ts);
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< div id = "orga941078" class = "figure" >
< p > < img src = "figs/enc_struts_dvf_coh.png" alt = "enc_struts_dvf_coh.png" / >
< / p >
< p > < span class = "figure-number" > Figure 3: < / span > Obtained coherence for the DVF plant< / p >
< / div >
< p >
Then the 6x6 transfer function matrix is estimated (Figure < a href = "#org9c350f6" > 4< / a > ).
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% DVF Plant< / span > < / span >
G_dvf_lf = zeros(length(f), 6, 6);
G_dvf_hf = zeros(length(f), 6, 6);
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:6< / span >
G_dvf_lf(< span class = "org-type" > :< / span > , < span class = "org-type" > :< / span > , < span class = "org-constant" > i< / span > ) = tfestimate(meas_data_lf{< span class = "org-constant" > i< / span > }.Va, meas_data_lf{< span class = "org-constant" > i< / span > }.de, win, [], [], 1< span class = "org-type" > /< / span > Ts);
G_dvf_hf(< span class = "org-type" > :< / span > , < span class = "org-type" > :< / span > , < span class = "org-constant" > i< / span > ) = tfestimate(meas_data_hf{< span class = "org-constant" > i< / span > }.Va, meas_data_hf{< span class = "org-constant" > i< / span > }.de, win, [], [], 1< span class = "org-type" > /< / span > Ts);
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< div id = "org9c350f6" class = "figure" >
< p > < img src = "figs/enc_struts_dvf_frf.png" alt = "enc_struts_dvf_frf.png" / >
< / p >
< p > < span class = "figure-number" > Figure 4: < / span > Measured FRF for the DVF plant< / p >
< / div >
< / div >
< / div >
< div id = "outline-container-org4f1737c" class = "outline-3" >
< h3 id = "org4f1737c" > < span class = "section-number-3" > 2.5< / span > IFF Plant< / h3 >
< div class = "outline-text-3" id = "text-2-5" >
< p >
First, let’ s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure < a href = "#org2a3d572" > 5< / a > ).
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Coherence< / span > < / span >
coh_iff_lf = zeros(length(f), 6, 6);
coh_iff_hf = zeros(length(f), 6, 6);
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:6< / span >
coh_iff_lf(< span class = "org-type" > :< / span > , < span class = "org-type" > :< / span > , < span class = "org-constant" > i< / span > ) = mscohere(meas_data_lf{< span class = "org-constant" > i< / span > }.Va, meas_data_lf{< span class = "org-constant" > i< / span > }.Vs, win, [], [], 1< span class = "org-type" > /< / span > Ts);
coh_iff_hf(< span class = "org-type" > :< / span > , < span class = "org-type" > :< / span > , < span class = "org-constant" > i< / span > ) = mscohere(meas_data_hf{< span class = "org-constant" > i< / span > }.Va, meas_data_hf{< span class = "org-constant" > i< / span > }.Vs, win, [], [], 1< span class = "org-type" > /< / span > Ts);
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< div id = "org2a3d572" class = "figure" >
< p > < img src = "figs/enc_struts_iff_coh.png" alt = "enc_struts_iff_coh.png" / >
< / p >
< p > < span class = "figure-number" > Figure 5: < / span > Obtained coherence for the IFF plant< / p >
< / div >
< p >
Then the 6x6 transfer function matrix is estimated (Figure < a href = "#orgaacf7b8" > 6< / a > ).
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% IFF Plant< / span > < / span >
G_iff_lf = zeros(length(f), 6, 6);
G_iff_hf = zeros(length(f), 6, 6);
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:6< / span >
G_iff_lf(< span class = "org-type" > :< / span > , < span class = "org-type" > :< / span > , < span class = "org-constant" > i< / span > ) = tfestimate(meas_data_lf{< span class = "org-constant" > i< / span > }.Va, meas_data_lf{< span class = "org-constant" > i< / span > }.Vs, win, [], [], 1< span class = "org-type" > /< / span > Ts);
G_iff_hf(< span class = "org-type" > :< / span > , < span class = "org-type" > :< / span > , < span class = "org-constant" > i< / span > ) = tfestimate(meas_data_hf{< span class = "org-constant" > i< / span > }.Va, meas_data_hf{< span class = "org-constant" > i< / span > }.Vs, win, [], [], 1< span class = "org-type" > /< / span > Ts);
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< div id = "orgaacf7b8" class = "figure" >
< p > < img src = "figs/enc_struts_iff_frf.png" alt = "enc_struts_iff_frf.png" / >
< / p >
< p > < span class = "figure-number" > Figure 6: < / span > Measured FRF for the IFF plant< / p >
< / div >
< / div >
< / div >
< div id = "outline-container-org4238e67" class = "outline-3" >
< h3 id = "org4238e67" > < span class = "section-number-3" > 2.6< / span > Jacobian< / h3 >
< div class = "outline-text-3" id = "text-2-6" >
< div class = "org-src-container" >
< pre class = "src src-matlab" > load(< span class = "org-string" > 'jacobian.mat'< / span > , < span class = "org-string" > 'J'< / span > );
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > G_dvf_J_lf = G_dvf_lf(i_lf, < span class = "org-constant" > i< / span > , < span class = "org-constant" > j< / span > )
< / pre >
< / div >
< p >
#+end_src< / p >
< / div >
2021-06-07 19:00:29 +02:00
< / div >
< / div >
< / div >
< div id = "postamble" class = "status" >
< p class = "author" > Author: Dehaeze Thomas< / p >
2021-06-08 22:14:48 +02:00
< p class = "date" > Created: 2021-06-08 mar. 21:51< / p >
2021-06-07 19:00:29 +02:00
< / div >
< / body >
< / html >