2020-07-17 11:56:08 +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 >
2020-11-12 09:18:40 +01:00
<!-- 2020 - 11 - 12 jeu. 09:18 -->
2020-07-17 11:56:08 +02:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
2020-07-20 12:55:13 +02:00
< title > Test Bench APA95ML< / title >
2020-07-17 11:56:08 +02:00
< meta name = "generator" content = "Org mode" / >
< meta name = "author" content = "Dehaeze Thomas" / >
2020-07-20 11:27:55 +02:00
< link rel = "stylesheet" type = "text/css" href = "./css/htmlize.css" / >
< link rel = "stylesheet" type = "text/css" href = "./css/readtheorg.css" / >
2020-11-12 09:18:40 +01:00
< link rel = "stylesheet" type = "text/css" href = "./css/custom.css" / >
2020-07-20 11:27:55 +02:00
< script type = "text/javascript" src = "./js/jquery.min.js" > < / script >
< script type = "text/javascript" src = "./js/bootstrap.min.js" > < / script >
< script type = "text/javascript" src = "./js/readtheorg.js" > < / script >
2020-07-17 11:56:08 +02:00
< / 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" >
2020-07-20 12:55:13 +02:00
< h1 class = "title" > Test Bench APA95ML< / h1 >
2020-07-17 11:56:08 +02:00
< div id = "table-of-contents" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
2020-11-12 09:18:40 +01:00
< li > < a href = "#orge1ce8ff" > 1. Setup< / a >
2020-07-20 11:27:55 +02:00
< ul >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org4f8d088" > 1.1. Parameters< / a > < / li >
< li > < a href = "#org92bcdf4" > 1.2. Filter White Noise< / a > < / li >
2020-07-20 11:27:55 +02:00
< / ul >
< / li >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org17a026f" > 2. Run Experiment and Save Data< / a >
2020-07-20 11:27:55 +02:00
< ul >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org1b14494" > 2.1. Load Data< / a > < / li >
< li > < a href = "#org59026b4" > 2.2. Save Data< / a > < / li >
2020-07-20 11:27:55 +02:00
< / ul >
< / li >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org1758121" > 3. Huddle Test< / a >
2020-07-20 11:27:55 +02:00
< ul >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org7fcc745" > 3.1. Time Domain Data< / a > < / li >
< li > < a href = "#org67ec115" > 3.2. PSD of Measurement Noise< / a > < / li >
2020-07-20 11:27:55 +02:00
< / ul >
< / li >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org3be6abe" > 4. Transfer Function Estimation using the PI Amplifier< / a >
2020-07-20 11:27:55 +02:00
< ul >
2020-11-12 09:18:40 +01:00
< li > < a href = "#orgd263f64" > 4.1. Load Data< / a > < / li >
< li > < a href = "#orga450ffc" > 4.2. Comparison of the PSD with Huddle Test< / a > < / li >
< li > < a href = "#orgc964fb2" > 4.3. Compute TF estimate and Coherence< / a > < / li >
< li > < a href = "#orge2ba96a" > 4.4. Comparison with the FEM model< / a > < / li >
2020-07-23 09:43:42 +02:00
< / ul >
< / li >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org1988c0d" > 5. Transfer function from force actuator to force sensor< / a >
2020-07-23 09:43:42 +02:00
< ul >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org037188e" > 5.1. System Identification< / a > < / li >
< li > < a href = "#org0a38226" > 5.2. Integral Force Feedback< / a > < / li >
2020-07-24 11:34:18 +02:00
< / ul >
< / li >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org5df0163" > 6. IFF Tests< / a >
2020-07-24 11:34:18 +02:00
< ul >
2020-11-12 09:18:40 +01:00
< li > < a href = "#org26f64e8" > 6.1. First tests with few gains< / a > < / li >
< li > < a href = "#orgda4dc48" > 6.2. Second test with many Gains< / a > < / li >
2020-07-20 11:27:55 +02:00
< / ul >
< / li >
2020-07-17 11:56:08 +02:00
< / ul >
< / div >
< / div >
2020-07-20 13:17:34 +02:00
2020-11-12 09:18:40 +01:00
< div id = "orgf655a68" class = "figure" >
2020-07-20 13:17:34 +02:00
< p > < img src = "figs/setup_picture.png" alt = "setup_picture.png" / >
< / p >
< p > < span class = "figure-number" > Figure 1: < / span > Picture of the Setup< / p >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "org9083f49" class = "figure" >
2020-07-20 13:17:34 +02:00
< p > < img src = "figs/setup_zoom.png" alt = "setup_zoom.png" / >
< / p >
< p > < span class = "figure-number" > Figure 2: < / span > Zoom on the APA< / p >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-orge1ce8ff" class = "outline-2" >
< h2 id = "orge1ce8ff" > < span class = "section-number-2" > 1< / span > Setup< / h2 >
2020-07-17 11:56:08 +02:00
< div class = "outline-text-2" id = "text-1" >
2020-07-20 11:27:55 +02:00
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org4f8d088" class = "outline-3" >
< h3 id = "org4f8d088" > < span class = "section-number-3" > 1.1< / span > Parameters< / h3 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-3" id = "text-1-1" >
2020-07-17 11:56:08 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Ts = 1e< span class = "org-type" > -< / span > 4;
2020-07-17 11:56:08 +02:00
< / pre >
< / div >
< / div >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org92bcdf4" class = "outline-3" >
< h3 id = "org92bcdf4" > < span class = "section-number-3" > 1.2< / span > Filter White Noise< / h3 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-3" id = "text-1-2" >
2020-07-17 11:56:08 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Glpf = 1< span class = "org-type" > /< / span > (1 < span class = "org-type" > +< / span > s< span class = "org-type" > /< / span > 2< span class = "org-type" > /< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > /< / span > 500);
2020-07-17 11:56:08 +02:00
2020-11-03 10:11:21 +01:00
Gz = c2d(Glpf, Ts, < span class = "org-string" > 'tustin'< / span > );
2020-07-17 11:56:08 +02:00
< / pre >
< / div >
< / div >
< / div >
2020-07-20 11:27:55 +02:00
< / div >
2020-07-17 11:56:08 +02:00
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org17a026f" class = "outline-2" >
< h2 id = "org17a026f" > < span class = "section-number-2" > 2< / span > Run Experiment and Save Data< / h2 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-2" id = "text-2" >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org1b14494" class = "outline-3" >
< h3 id = "org1b14494" > < span class = "section-number-3" > 2.1< / span > Load Data< / h3 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-3" id = "text-2-1" >
2020-07-17 11:56:08 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > data = SimulinkRealTime.utils.getFileScopeData(< span class = "org-string" > 'data/apa95ml.dat'< / span > ).data;
2020-07-17 11:56:08 +02:00
< / pre >
< / div >
< / div >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org59026b4" class = "outline-3" >
< h3 id = "org59026b4" > < span class = "section-number-3" > 2.2< / span > Save Data< / h3 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-3" id = "text-2-2" >
2020-07-17 11:56:08 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > u = data(< span class = "org-type" > :< / span > , 1); < span class = "org-comment" > % Input Voltage [V]< / span >
y = data(< span class = "org-type" > :< / span > , 2); < span class = "org-comment" > % Output Displacement [m]< / span >
t = data(< span class = "org-type" > :< / span > , 3); < span class = "org-comment" > % Time [s]< / span >
2020-07-20 11:27:55 +02:00
< / pre >
< / div >
2020-07-17 11:56:08 +02:00
2020-07-20 11:27:55 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/huddle_test.mat'< / span > , < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'u'< / span > , < span class = "org-string" > 'y'< / span > , < span class = "org-string" > 'Glpf'< / span > );
2020-07-20 11:27:55 +02:00
< / pre >
< / div >
< / div >
< / div >
< / div >
2020-07-17 11:56:08 +02:00
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org1758121" class = "outline-2" >
< h2 id = "org1758121" > < span class = "section-number-2" > 3< / span > Huddle Test< / h2 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-2" id = "text-3" >
< / div >
2020-07-17 11:56:08 +02:00
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org7fcc745" class = "outline-3" >
< h3 id = "org7fcc745" > < span class = "section-number-3" > 3.1< / span > Time Domain Data< / h3 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-3" id = "text-3-1" >
2020-11-12 09:18:40 +01:00
< div id = "orge79b739" class = "figure" >
2020-07-20 11:27:55 +02:00
< p > < img src = "figs/huddle_test_time_domain.png" alt = "huddle_test_time_domain.png" / >
< / p >
2020-07-20 13:17:34 +02:00
< p > < span class = "figure-number" > Figure 3: < / span > Measurement of the Mass displacement during Huddle Test< / p >
2020-07-17 11:56:08 +02:00
< / div >
< / div >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org67ec115" class = "outline-3" >
< h3 id = "org67ec115" > < span class = "section-number-3" > 3.2< / span > PSD of Measurement Noise< / h3 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-3" id = "text-3-2" >
2020-07-17 11:56:08 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Ts = t(end)< span class = "org-type" > /< / span > (length(t)< span class = "org-type" > -< / span > 1);
Fs = 1< span class = "org-type" > /< / span > Ts;
2020-07-20 11:27:55 +02:00
2020-11-03 10:11:21 +01:00
win = hanning(ceil(1< span class = "org-type" > *< / span > Fs));
2020-07-20 11:27:55 +02:00
< / pre >
< / div >
2020-07-17 11:56:08 +02:00
2020-07-20 11:27:55 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > [pxx, f] = pwelch(y(1000< span class = "org-type" > :< / span > end), win, [], [], Fs);
2020-07-17 11:56:08 +02:00
< / pre >
< / div >
2020-07-20 11:27:55 +02:00
2020-11-12 09:18:40 +01:00
< div id = "org8f41c21" class = "figure" >
2020-07-20 11:27:55 +02:00
< p > < img src = "figs/huddle_test_pdf.png" alt = "huddle_test_pdf.png" / >
< / p >
2020-07-20 13:17:34 +02:00
< p > < span class = "figure-number" > Figure 4: < / span > Amplitude Spectral Density of the Displacement during Huddle Test< / p >
2020-07-20 11:27:55 +02:00
< / div >
< / div >
< / div >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org3be6abe" class = "outline-2" >
< h2 id = "org3be6abe" > < span class = "section-number-2" > 4< / span > Transfer Function Estimation using the PI Amplifier< / h2 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-2" id = "text-4" >
2020-08-20 23:08:38 +02:00
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-orgd263f64" class = "outline-3" >
< h3 id = "orgd263f64" > < span class = "section-number-3" > 4.1< / span > Load Data< / h3 >
2020-07-20 11:27:55 +02:00
< div class = "outline-text-3" id = "text-4-1" >
2020-07-23 09:43:42 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > ht = load(< span class = "org-string" > './mat/huddle_test.mat'< / span > , < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'u'< / span > , < span class = "org-string" > 'y'< / span > );
load(< span class = "org-string" > './mat/apa95ml_5kg_Amp_E505.mat'< / span > , < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'u'< / span > , < span class = "org-string" > 'um'< / span > , < span class = "org-string" > 'y'< / span > );
2020-08-20 23:08:38 +02:00
< / pre >
< / div >
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > u = 10< span class = "org-type" > *< / span > (u < span class = "org-type" > -< / span > mean(u)); < span class = "org-comment" > % Input Voltage of Piezo [V]< / span >
um = 10< span class = "org-type" > *< / span > (um < span class = "org-type" > -< / span > mean(um)); < span class = "org-comment" > % Monitor [V]< / span >
y = y < span class = "org-type" > -< / span > mean(y); < span class = "org-comment" > % Mass displacement [m]< / span >
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
ht.u = 10< span class = "org-type" > *< / span > (ht.u < span class = "org-type" > -< / span > mean(ht.u));
ht.y = ht.y < span class = "org-type" > -< / span > mean(ht.y);
2020-08-20 23:08:38 +02:00
< / pre >
< / div >
< / div >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-orga450ffc" class = "outline-3" >
< h3 id = "orga450ffc" > < span class = "section-number-3" > 4.2< / span > Comparison of the PSD with Huddle Test< / h3 >
< div class = "outline-text-3" id = "text-4-2" >
2020-08-20 23:08:38 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Ts = t(end)< span class = "org-type" > /< / span > (length(t)< span class = "org-type" > -< / span > 1);
Fs = 1< span class = "org-type" > /< / span > Ts;
2020-07-24 13:16:28 +02:00
2020-11-03 10:11:21 +01:00
win = hanning(ceil(1< span class = "org-type" > *< / span > Fs));
2020-07-24 11:34:18 +02:00
< / pre >
< / div >
2020-07-24 13:16:28 +02:00
< div class = "org-src-container" >
< pre class = "src src-matlab" > [pxx, f] = pwelch(y, win, [], [], Fs);
2020-11-03 10:11:21 +01:00
[pht, < span class = "org-type" > ~< / span > ] = pwelch(ht.y, win, [], [], Fs);
2020-07-24 13:16:28 +02:00
< / pre >
< / div >
2020-07-24 11:34:18 +02:00
2020-11-12 09:18:40 +01:00
< div id = "orge6cd415" class = "figure" >
2020-07-24 13:16:28 +02:00
< p > < img src = "figs/apa95ml_5kg_PI_pdf_comp_huddle.png" alt = "apa95ml_5kg_PI_pdf_comp_huddle.png" / >
2020-07-24 11:34:18 +02:00
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 5: < / span > Comparison of the ASD for the identification test and the huddle test< / p >
2020-07-24 13:16:28 +02:00
< / div >
< / div >
< / div >
2020-07-24 11:34:18 +02:00
2020-11-12 09:18:40 +01:00
< div id = "outline-container-orgc964fb2" class = "outline-3" >
< h3 id = "orgc964fb2" > < span class = "section-number-3" > 4.3< / span > Compute TF estimate and Coherence< / h3 >
< div class = "outline-text-3" id = "text-4-3" >
2020-07-24 11:34:18 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Ts = t(end)< span class = "org-type" > /< / span > (length(t)< span class = "org-type" > -< / span > 1);
Fs = 1< span class = "org-type" > /< / span > Ts;
2020-07-24 13:16:28 +02:00
< / pre >
< / div >
2020-07-24 11:34:18 +02:00
2020-07-24 13:16:28 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > win = hann(ceil(1< span class = "org-type" > /< / span > Ts));
2020-07-24 13:16:28 +02:00
2020-11-03 10:11:21 +01:00
[tf_est, f] = tfestimate(u, < span class = "org-type" > -< / span > y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
[tf_um , < span class = "org-type" > ~< / span > ] = tfestimate(um, < span class = "org-type" > -< / span > y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
[co_est, < span class = "org-type" > ~< / span > ] = mscohere( um, < span class = "org-type" > -< / span > y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
2020-07-24 11:34:18 +02:00
< / pre >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "orgc5081fd" class = "figure" >
2020-07-24 13:16:28 +02:00
< p > < img src = "figs/apa95ml_5kg_PI_coh.png" alt = "apa95ml_5kg_PI_coh.png" / >
2020-07-24 11:34:18 +02:00
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 6: < / span > Coherence< / p >
2020-07-24 11:34:18 +02:00
< / div >
2020-11-12 09:18:40 +01:00
< div id = "orgef956d1" class = "figure" >
2020-07-24 13:16:28 +02:00
< p > < img src = "figs/apa95ml_5kg_PI_tf.png" alt = "apa95ml_5kg_PI_tf.png" / >
2020-07-24 11:34:18 +02:00
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 7: < / span > Estimation of the transfer function from input voltage to displacement< / p >
2020-07-24 13:16:28 +02:00
< / div >
< / div >
2020-07-24 11:34:18 +02:00
< / div >
2020-07-24 13:06:02 +02:00
2020-11-12 09:18:40 +01:00
< div id = "outline-container-orge2ba96a" class = "outline-3" >
< h3 id = "orge2ba96a" > < span class = "section-number-3" > 4.4< / span > Comparison with the FEM model< / h3 >
< div class = "outline-text-3" id = "text-4-4" >
2020-07-24 13:06:02 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > 'mat/fem_model_5kg.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-07-24 13:06:02 +02:00
< / pre >
< / div >
2020-07-24 13:16:28 +02:00
2020-11-12 09:18:40 +01:00
< div id = "org5df5018" class = "figure" >
2020-07-24 13:16:28 +02:00
< p > < img src = "figs/apa95ml_5kg_pi_comp_fem.png" alt = "apa95ml_5kg_pi_comp_fem.png" / >
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 8: < / span > Comparison of the identified transfer function and the one estimated from the FE model< / p >
2020-07-24 11:34:18 +02:00
< / div >
< / div >
< / div >
2020-07-24 13:16:28 +02:00
< / div >
2020-08-20 23:08:38 +02:00
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org1988c0d" class = "outline-2" >
< h2 id = "org1988c0d" > < span class = "section-number-2" > 5< / span > Transfer function from force actuator to force sensor< / h2 >
< div class = "outline-text-2" id = "text-5" >
2020-08-20 23:08:38 +02:00
< p >
Two measurements are performed:
< / p >
< ul class = "org-ul" >
< li > Speedgoat DAC => Voltage Amplifier (x20) => 1 Piezo Stack => … => 2 Stacks as Force Sensor (parallel) => Speedgoat ADC< / li >
< li > Speedgoat DAC => Voltage Amplifier (x20) => 2 Piezo Stacks (parallel) => … => 1 Stack as Force Sensor => Speedgoat ADC< / li >
< / ul >
< p >
The obtained dynamics from force actuator to force sensor are compare with the FEM model.
< / p >
< p >
The data are loaded:
< / p >
2020-07-24 11:34:18 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > a_ss = load(< span class = "org-string" > 'mat/apa95ml_5kg_1a_2s.mat'< / span > , < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'u'< / span > , < span class = "org-string" > 'y'< / span > , < span class = "org-string" > 'v'< / span > );
aa_s = load(< span class = "org-string" > 'mat/apa95ml_5kg_2a_1s.mat'< / span > , < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'u'< / span > , < span class = "org-string" > 'y'< / span > , < span class = "org-string" > 'v'< / span > );
load(< span class = "org-string" > 'mat/G_force_sensor_5kg.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-07-23 09:43:42 +02:00
< / pre >
< / div >
2020-07-24 13:16:28 +02:00
< p >
2020-08-20 23:08:38 +02:00
Let’ s use the amplifier gain to obtain the true voltage applied to the actuator stack(s)
2020-07-24 13:16:28 +02:00
< / p >
2020-07-23 09:43:42 +02:00
2020-07-24 13:16:28 +02:00
< p >
2020-08-20 23:08:38 +02:00
The parameters of the piezoelectric stacks are defined below:
2020-07-23 09:43:42 +02:00
< / p >
2020-08-20 23:08:38 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > d33 = 3e< span class = "org-type" > -< / span > 10; < span class = "org-comment" > % Strain constant [m/V]< / span >
n = 80; < span class = "org-comment" > % Number of layers per stack< / span >
eT = 1.6e< span class = "org-type" > -< / span > 8; < span class = "org-comment" > % Permittivity under constant stress [F/m]< / span >
sD = 2e< span class = "org-type" > -< / span > 11; < span class = "org-comment" > % Elastic compliance under constant electric displacement [m2/N]< / span >
ka = 235e6; < span class = "org-comment" > % Stack stiffness [N/m]< / span >
2020-08-20 23:08:38 +02:00
< / pre >
< / div >
2020-07-23 09:43:42 +02:00
2020-07-24 13:16:28 +02:00
< p >
2020-08-20 23:08:38 +02:00
From the FEM, we construct the transfer function from DAC voltage to ADC voltage.
2020-07-24 13:16:28 +02:00
< / p >
2020-07-23 09:43:42 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Gfem_aa_s = exp(< span class = "org-type" > -< / span > s< span class = "org-type" > /< / span > 1e4)< span class = "org-type" > *< / span > 20< span class = "org-type" > *< / span > (2< span class = "org-type" > *< / span > d33< span class = "org-type" > *< / span > n< span class = "org-type" > *< / span > ka)< span class = "org-type" > *< / span > (G(3,1)< span class = "org-type" > +< / span > G(3,2))< span class = "org-type" > *< / span > d33< span class = "org-type" > /< / span > (eT< span class = "org-type" > *< / span > sD< span class = "org-type" > *< / span > n);
Gfem_a_ss = exp(< span class = "org-type" > -< / span > s< span class = "org-type" > /< / span > 1e4)< span class = "org-type" > *< / span > 20< span class = "org-type" > *< / span > ( d33< span class = "org-type" > *< / span > n< span class = "org-type" > *< / span > ka)< span class = "org-type" > *< / span > (G(3,1)< span class = "org-type" > +< / span > G(2,1))< span class = "org-type" > *< / span > d33< span class = "org-type" > /< / span > (eT< span class = "org-type" > *< / span > sD< span class = "org-type" > *< / span > n);
2020-08-20 23:08:38 +02:00
< / pre >
< / div >
< p >
2020-11-12 09:18:40 +01:00
The transfer function from input voltage to output voltage are computed and shown in Figure < a href = "#orge6ce288" > 9< / a > .
2020-08-20 23:08:38 +02:00
< / p >
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Ts = a_ss.t(end)< span class = "org-type" > /< / span > (length(a_ss.t)< span class = "org-type" > -< / span > 1);
Fs = 1< span class = "org-type" > /< / span > Ts;
2020-07-23 09:43:42 +02:00
2020-11-03 10:11:21 +01:00
win = hann(ceil(10< span class = "org-type" > /< / span > Ts));
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
[tf_a_ss, f] = tfestimate(a_ss.u, a_ss.v, win, [], [], 1< span class = "org-type" > /< / span > Ts);
[coh_a_ss, < span class = "org-type" > ~< / span > ] = mscohere( a_ss.u, a_ss.v, win, [], [], 1< span class = "org-type" > /< / span > Ts);
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
[tf_aa_s, f] = tfestimate(aa_s.u, aa_s.v, win, [], [], 1< span class = "org-type" > /< / span > Ts);
[coh_aa_s, < span class = "org-type" > ~< / span > ] = mscohere( aa_s.u, aa_s.v, win, [], [], 1< span class = "org-type" > /< / span > Ts);
2020-07-23 09:43:42 +02:00
< / pre >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "orge6ce288" class = "figure" >
2020-08-20 23:08:38 +02:00
< p > < img src = "figs/bode_plot_force_sensor_voltage_comp_fem.png" alt = "bode_plot_force_sensor_voltage_comp_fem.png" / >
2020-07-23 09:43:42 +02:00
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 9: < / span > Comparison of the identified dynamics from voltage output to voltage input and the FEM< / p >
2020-08-20 23:08:38 +02:00
< / div >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org037188e" class = "outline-3" >
< h3 id = "org037188e" > < span class = "section-number-3" > 5.1< / span > System Identification< / h3 >
< div class = "outline-text-3" id = "text-5-1" >
2020-08-20 23:08:38 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > w_z = 2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > 111; < span class = "org-comment" > % Zeros frequency [rad/s]< / span >
w_p = 2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > 255; < span class = "org-comment" > % Pole frequency [rad/s]< / span >
2020-08-20 23:08:38 +02:00
xi_z = 0.05;
xi_p = 0.015;
G_inf = 2;
2020-11-03 10:11:21 +01:00
Gi = G_inf< span class = "org-type" > *< / span > (s< span class = "org-type" > ^< / span > 2 < span class = "org-type" > -< / span > 2< span class = "org-type" > *< / span > xi_z< span class = "org-type" > *< / span > w_z< span class = "org-type" > *< / span > s < span class = "org-type" > +< / span > w_z< span class = "org-type" > ^< / span > 2)< span class = "org-type" > /< / span > (s< span class = "org-type" > ^< / span > 2 < span class = "org-type" > +< / span > 2< span class = "org-type" > *< / span > xi_p< span class = "org-type" > *< / span > w_p< span class = "org-type" > *< / span > s < span class = "org-type" > +< / span > w_p< span class = "org-type" > ^< / span > 2);
2020-08-20 23:08:38 +02:00
< / pre >
2020-07-23 09:43:42 +02:00
< / div >
2020-11-12 09:18:40 +01:00
< div id = "orged1dc40" class = "figure" >
2020-08-20 23:08:38 +02:00
< p > < img src = "figs/iff_plant_identification_apa95ml.png" alt = "iff_plant_identification_apa95ml.png" / >
2020-07-23 09:43:42 +02:00
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 10: < / span > Identification of the IFF plant< / p >
2020-08-20 23:08:38 +02:00
< / div >
< / div >
2020-07-23 09:43:42 +02:00
< / div >
2020-08-20 23:08:38 +02:00
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org0a38226" class = "outline-3" >
< h3 id = "org0a38226" > < span class = "section-number-3" > 5.2< / span > Integral Force Feedback< / h3 >
< div class = "outline-text-3" id = "text-5-2" >
2020-08-20 23:08:38 +02:00
2020-11-12 09:18:40 +01:00
< div id = "org86c0c5b" class = "figure" >
2020-08-20 23:08:38 +02:00
< p > < img src = "figs/root_locus_iff_apa95ml_identification.png" alt = "root_locus_iff_apa95ml_identification.png" / >
2020-07-24 13:16:28 +02:00
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 11: < / span > Root Locus for IFF< / p >
2020-08-20 23:08:38 +02:00
< / div >
< / div >
< / div >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org5df0163" class = "outline-2" >
< h2 id = "org5df0163" > < span class = "section-number-2" > 6< / span > IFF Tests< / h2 >
< div class = "outline-text-2" id = "text-6" >
2020-08-20 23:08:38 +02:00
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-org26f64e8" class = "outline-3" >
< h3 id = "org26f64e8" > < span class = "section-number-3" > 6.1< / span > First tests with few gains< / h3 >
< div class = "outline-text-3" id = "text-6-1" >
2020-07-23 09:43:42 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > iff_g10 = load(< span class = "org-string" > './mat/apa95ml_iff_g10_res.mat'< / span > , < span class = "org-string" > 'u'< / span > , < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'y'< / span > , < span class = "org-string" > 'v'< / span > );
iff_g100 = load(< span class = "org-string" > './mat/apa95ml_iff_g100_res.mat'< / span > , < span class = "org-string" > 'u'< / span > , < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'y'< / span > , < span class = "org-string" > 'v'< / span > );
iff_of = load(< span class = "org-string" > './mat/apa95ml_iff_off_res.mat'< / span > , < span class = "org-string" > 'u'< / span > , < span class = "org-string" > 't'< / span > , < span class = "org-string" > 'y'< / span > , < span class = "org-string" > 'v'< / span > );
2020-07-23 09:43:42 +02:00
< / pre >
< / div >
2020-08-20 23:08:38 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Ts = 1e< span class = "org-type" > -< / span > 4;
win = hann(ceil(10< span class = "org-type" > /< / span > Ts));
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
[tf_iff_g10, f] = tfestimate(iff_g10.u, iff_g10.y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
[co_iff_g10, < span class = "org-type" > ~< / span > ] = mscohere(iff_g10.u, iff_g10.y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
[tf_iff_g100, f] = tfestimate(iff_g100.u, iff_g100.y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
[co_iff_g100, < span class = "org-type" > ~< / span > ] = mscohere(iff_g100.u, iff_g100.y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
2020-08-20 23:08:38 +02:00
2020-11-03 10:11:21 +01:00
[tf_iff_of, < span class = "org-type" > ~< / span > ] = tfestimate(iff_of.u, iff_of.y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
[co_iff_of, < span class = "org-type" > ~< / span > ] = mscohere(iff_of.u, iff_of.y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
2020-07-24 13:16:28 +02:00
< / pre >
2020-08-20 23:08:38 +02:00
< / div >
2020-07-24 15:48:22 +02:00
2020-08-21 15:26:45 +02:00
2020-11-12 09:18:40 +01:00
< div id = "org01c9bde" class = "figure" >
2020-08-21 15:26:45 +02:00
< p > < img src = "figs/iff_first_test_coherence.png" alt = "iff_first_test_coherence.png" / >
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 12: < / span > Coherence< / p >
2020-08-21 15:26:45 +02:00
< / div >
2020-11-12 09:18:40 +01:00
< div id = "orgdcd9122" class = "figure" >
2020-08-21 15:26:45 +02:00
< p > < img src = "figs/iff_first_test_bode_plot.png" alt = "iff_first_test_bode_plot.png" / >
< / p >
2020-11-12 09:18:40 +01:00
< p > < span class = "figure-number" > Figure 13: < / span > Bode plot for different values of IFF gain< / p >
2020-08-21 15:26:45 +02:00
< / div >
< / div >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "outline-container-orgda4dc48" class = "outline-3" >
< h3 id = "orgda4dc48" > < span class = "section-number-3" > 6.2< / span > Second test with many Gains< / h3 >
< div class = "outline-text-3" id = "text-6-2" >
2020-08-20 23:08:38 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/apa95ml_iff_test.mat'< / span > , < span class = "org-string" > 'results'< / span > );
2020-08-20 23:08:38 +02:00
< / pre >
< / div >
2020-07-24 15:48:22 +02:00
2020-08-21 15:26:45 +02:00
< div class = "org-src-container" >
2020-11-03 10:11:21 +01:00
< pre class = "src src-matlab" > Ts = 1e< span class = "org-type" > -< / span > 4;
win = hann(ceil(10< span class = "org-type" > /< / span > Ts));
2020-08-21 15:26:45 +02:00
< / pre >
< / div >
2020-08-20 23:08:38 +02:00
2020-08-21 15:26:45 +02:00
< div class = "org-src-container" >
< pre class = "src src-matlab" > tf_iff = {zeros(1, length(results))};
co_iff = {zeros(1, length(results))};
g_iff = [0, 1, 5, 10, 50, 100];
2020-11-03 10:11:21 +01:00
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > =< span class = "org-constant" > 1:length(results)< / span >
[tf_est, f] = tfestimate(results{< span class = "org-constant" > i< / span > }.u, results{< span class = "org-constant" > i< / span > }.y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
[co_est, < span class = "org-type" > ~< / span > ] = mscohere(results{< span class = "org-constant" > i< / span > }.u, results{< span class = "org-constant" > i< / span > }.y, win, [], [], 1< span class = "org-type" > /< / span > Ts);
2020-08-21 15:26:45 +02:00
2020-11-03 10:11:21 +01:00
tf_iff(< span class = "org-constant" > i< / span > ) = {tf_est};
co_iff(< span class = "org-constant" > i< / span > ) = {co_est};
< span class = "org-keyword" > end< / span >
2020-08-21 15:26:45 +02:00
< / pre >
2020-08-20 23:08:38 +02:00
< / div >
2020-11-12 09:18:40 +01:00
< div id = "org52a1b9d" class = "figure" >
2020-08-21 15:26:45 +02:00
< p > < img src = "figs/iff_results_bode_plots.png" alt = "iff_results_bode_plots.png" / >
< / p >
< / div >
2020-08-20 23:08:38 +02:00
< div class = "org-src-container" >
2020-08-21 15:26:45 +02:00
< pre class = "src src-matlab" > G_id = {zeros(1,length(results))};
2020-11-03 10:11:21 +01:00
f_start = 70; < span class = "org-comment" > % [Hz]< / span >
f_end = 500; < span class = "org-comment" > % [Hz]< / span >
2020-08-21 15:26:45 +02:00
2020-11-03 10:11:21 +01:00
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:length(results)< / span >
tf_id = tf_iff{< span class = "org-constant" > i< / span > }(sum(f< span class = "org-type" > < < / span > f_start)< span class = "org-type" > :< / span > length(f)< span class = "org-type" > -< / span > sum(f< span class = "org-type" > > < / span > f_end));
f_id = f(sum(f< span class = "org-type" > < < / span > f_start)< span class = "org-type" > :< / span > length(f)< span class = "org-type" > -< / span > sum(f< span class = "org-type" > > < / span > f_end));
2020-08-21 15:26:45 +02:00
2020-11-03 10:11:21 +01:00
gfr = idfrd(tf_id, 2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > f_id, Ts);
G_id(< span class = "org-constant" > i< / span > ) = {procest(gfr,< span class = "org-string" > 'P2UDZ'< / span > )};
< span class = "org-keyword" > end< / span >
2020-08-20 23:08:38 +02:00
< / pre >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "orga4ab0d0" class = "figure" >
2020-08-21 15:26:45 +02:00
< p > < img src = "figs/iff_results_bode_plots_identification.png" alt = "iff_results_bode_plots_identification.png" / >
< / p >
< / div >
2020-11-12 09:18:40 +01:00
< div id = "org9a011df" class = "figure" >
2020-08-21 15:26:45 +02:00
< p > < img src = "figs/iff_results_root_locus.png" alt = "iff_results_root_locus.png" / >
2020-08-20 23:08:38 +02:00
< / p >
< / div >
2020-07-23 09:43:42 +02:00
< / div >
< / div >
< / div >
2020-07-17 11:56:08 +02:00
< / div >
< div id = "postamble" class = "status" >
< p class = "author" > Author: Dehaeze Thomas< / p >
2020-11-12 09:18:40 +01:00
< p class = "date" > Created: 2020-11-12 jeu. 09:18< / p >
2020-07-17 11:56:08 +02:00
< / div >
< / body >
< / html >