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:15:02 +02:00
<!-- 2021 - 06 - 08 mar. 22:15 -->
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:15:02 +02:00
< li > < a href = "#orge60a691" > 1. Encoders fixed to the Struts< / a >
2021-06-08 22:14:48 +02:00
< ul >
2021-06-08 22:15:02 +02:00
< li > < a href = "#org7010817" > 1.1. Introduction< / a > < / li >
< li > < a href = "#orga8cffa3" > 1.2. Load Data< / a > < / li >
< li > < a href = "#org46d9ef0" > 1.3. Spectral Analysis - Setup< / a > < / li >
< li > < a href = "#org8d17470" > 1.4. DVF Plant< / a > < / li >
< li > < a href = "#org22119eb" > 1.5. IFF Plant< / a > < / li >
< li > < a href = "#org9f943b4" > 1.6. Jacobian< / a >
< ul >
< li > < a href = "#org31b15c3" > 1.6.1. DVF Plant< / a > < / li >
< li > < a href = "#org6b0e225" > 1.6.2. IFF Plant< / a > < / li >
< / ul >
< / li >
2021-06-08 22:14:48 +02:00
< / 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:15:02 +02:00
< div class = "note" id = "org6b76075" >
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
2021-06-08 22:15:02 +02:00
< div id = "org6594005" class = "figure" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
< div id = "org0571a2e" class = "figure" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
< div id = "outline-container-orge60a691" class = "outline-2" >
< h2 id = "orge60a691" > < span class = "section-number-2" > 1< / span > Encoders fixed to the Struts< / h2 >
< div class = "outline-text-2" id = "text-1" >
2021-06-08 22:14:48 +02:00
< / div >
2021-06-08 22:15:02 +02:00
< div id = "outline-container-org7010817" class = "outline-3" >
< h3 id = "org7010817" > < span class = "section-number-3" > 1.1< / span > Introduction< / h3 >
2021-06-08 22:14:48 +02:00
< / div >
2021-06-08 22:15:02 +02:00
< div id = "outline-container-orga8cffa3" class = "outline-3" >
< h3 id = "orga8cffa3" > < span class = "section-number-3" > 1.2< / span > Load Data< / h3 >
< div class = "outline-text-3" id = "text-1-2" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
< div id = "outline-container-org46d9ef0" class = "outline-3" >
< h3 id = "org46d9ef0" > < span class = "section-number-3" > 1.3< / span > Spectral Analysis - Setup< / h3 >
< div class = "outline-text-3" id = "text-1-3" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
< div id = "outline-container-org8d17470" class = "outline-3" >
< h3 id = "org8d17470" > < span class = "section-number-3" > 1.4< / span > DVF Plant< / h3 >
< div class = "outline-text-3" id = "text-1-4" >
2021-06-08 22:14:48 +02:00
< p >
2021-06-08 22:15:02 +02:00
First, let’ s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure < a href = "#org67e2048" > 3< / a > ).
2021-06-08 22:14:48 +02:00
< / 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 >
2021-06-08 22:15:02 +02:00
< div id = "org67e2048" class = "figure" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
Then the 6x6 transfer function matrix is estimated (Figure < a href = "#org4e87d8b" > 4< / a > ).
2021-06-08 22:14:48 +02:00
< / 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 >
2021-06-08 22:15:02 +02:00
< div id = "org4e87d8b" class = "figure" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
< div id = "outline-container-org22119eb" class = "outline-3" >
< h3 id = "org22119eb" > < span class = "section-number-3" > 1.5< / span > IFF Plant< / h3 >
< div class = "outline-text-3" id = "text-1-5" >
2021-06-08 22:14:48 +02:00
< p >
2021-06-08 22:15:02 +02:00
First, let’ s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure < a href = "#org38ac16f" > 5< / a > ).
2021-06-08 22:14:48 +02:00
< / 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 >
2021-06-08 22:15:02 +02:00
< div id = "org38ac16f" class = "figure" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
Then the 6x6 transfer function matrix is estimated (Figure < a href = "#org0b97d99" > 6< / a > ).
2021-06-08 22:14:48 +02:00
< / 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 >
2021-06-08 22:15:02 +02:00
< div id = "org0b97d99" class = "figure" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
< div id = "outline-container-org9f943b4" class = "outline-3" >
< h3 id = "org9f943b4" > < span class = "section-number-3" > 1.6< / span > Jacobian< / h3 >
< div class = "outline-text-3" id = "text-1-6" >
2021-06-08 22:14:48 +02:00
< 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 >
2021-06-08 22:15:02 +02:00
< / div >
< div id = "outline-container-org31b15c3" class = "outline-4" >
< h4 id = "org31b15c3" > < span class = "section-number-4" > 1.6.1< / span > DVF Plant< / h4 >
< div class = "outline-text-4" id = "text-1-6-1" >
2021-06-08 22:14:48 +02:00
< div class = "org-src-container" >
2021-06-08 22:15:02 +02:00
< pre class = "src src-matlab" > G_dvf_J_lf = permute(pagemtimes(inv(J), pagemtimes(permute(G_dvf_lf, [2 3 1]), inv(J< span class = "org-type" > '< / span > ))), [3 1 2]);
G_dvf_J_hf = permute(pagemtimes(inv(J), pagemtimes(permute(G_dvf_hf, [2 3 1]), inv(J< span class = "org-type" > '< / span > ))), [3 1 2]);
2021-06-08 22:14:48 +02:00
< / pre >
< / div >
2021-06-08 22:15:02 +02:00
< / div >
< / div >
2021-06-08 22:14:48 +02:00
2021-06-08 22:15:02 +02:00
< div id = "outline-container-org6b0e225" class = "outline-4" >
< h4 id = "org6b0e225" > < span class = "section-number-4" > 1.6.2< / span > IFF Plant< / h4 >
< div class = "outline-text-4" id = "text-1-6-2" >
< div class = "org-src-container" >
< pre class = "src src-matlab" > G_iff_J_lf = permute(pagemtimes(inv(J), pagemtimes(permute(G_iff_lf, [2 3 1]), inv(J< span class = "org-type" > '< / span > ))), [3 1 2]);
G_iff_J_hf = permute(pagemtimes(inv(J), pagemtimes(permute(G_iff_hf, [2 3 1]), inv(J< span class = "org-type" > '< / span > ))), [3 1 2]);
< / pre >
< / div >
< / div >
2021-06-08 22:14:48 +02:00
< / 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:15:02 +02:00
< p class = "date" > Created: 2021-06-08 mar. 22:15< / p >
2021-06-07 19:00:29 +02:00
< / div >
< / body >
< / html >