2020-05-20 15:49:43 +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-02-20 23:09:27 +01:00
<!-- 2021 - 02 - 20 sam. 23:08 -->
2020-05-20 15:49:43 +02:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< title > Amplified Piezoelectric Stack Actuator< / title >
< meta name = "generator" content = "Org mode" / >
< meta name = "author" content = "Dehaeze Thomas" / >
2021-02-20 23:09:27 +01:00
< 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 >
< script >
MathJax = {
svg: {
scale: 1,
fontCache: "global"
},
tex: {
tags: "ams",
multlineWidth: "%MULTLINEWIDTH",
tagSide: "right",
macros: {bm: ["\\boldsymbol{#1}",1],},
tagIndent: ".8em"
}
};
< / script >
< script id = "MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">< / script >
2020-05-20 15:49:43 +02:00
< / head >
< body >
< div id = "org-div-home-and-up" >
< a accesskey = "h" href = "./index.html" > UP < / a >
|
2021-02-20 23:09:27 +01:00
< a accesskey = "H" href = "../../index.html" > HOME < / a >
2020-05-20 15:49:43 +02:00
< / div > < div id = "content" >
< h1 class = "title" > Amplified Piezoelectric Stack Actuator< / h1 >
< div id = "table-of-contents" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org1bc5fe4" > 1. Simplified Model< / a >
2020-05-20 15:49:43 +02:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgf3ed177" > 1.1. Parameters< / a > < / li >
< li > < a href = "#org0a66657" > 1.2. Identification< / a > < / li >
< li > < a href = "#orga1c354d" > 1.3. Root Locus< / a > < / li >
< li > < a href = "#orge088eac" > 1.4. Analytical Model< / a > < / li >
< li > < a href = "#org4c2db1d" > 1.5. Analytical Analysis< / a > < / li >
2020-05-20 15:49:43 +02:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org7863652" > 2. Rotating X-Y platform< / a >
2020-05-20 15:49:43 +02:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org71a928c" > 2.1. Parameters< / a > < / li >
< li > < a href = "#org1590b14" > 2.2. Identification< / a > < / li >
< li > < a href = "#orgf236995" > 2.3. Root Locus< / a > < / li >
< li > < a href = "#org7d91e6b" > 2.4. Analysis< / a > < / li >
2020-05-20 15:49:43 +02:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgb00a17f" > 3. Stewart Platform with Amplified Actuators< / a >
2020-05-20 16:41:34 +02:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgf380cc9" > 3.1. Initialization< / a > < / li >
< li > < a href = "#org76128b7" > 3.2. APA-100 Amplified Actuator< / a >
2020-09-01 13:51:37 +02:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgb29b9fd" > 3.2.1. Identification< / a > < / li >
< li > < a href = "#orgce15cc5" > 3.2.2. Controller Design< / a > < / li >
< li > < a href = "#org641c18d" > 3.2.3. Effect of the Low Authority Control on the Primary Plant< / a > < / li >
< li > < a href = "#org651e695" > 3.2.4. Effect of the Low Authority Control on the Sensibility to Disturbances< / a > < / li >
2020-09-01 13:51:37 +02:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgedaa0e4" > 3.3. Optimal Stiffnesses< / a >
2020-09-01 13:51:37 +02:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org4fc2971" > 3.3.1. Low Authority Controller< / a >
2020-09-01 13:51:37 +02:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org1d50646" > 3.3.1.1. Identification< / a > < / li >
< li > < a href = "#orgf4a5e42" > 3.3.1.2. Effect of the Low Authority Control on the Primary Plant< / a > < / li >
< li > < a href = "#orgcacb9e3" > 3.3.1.3. Effect of the Low Authority Control on the Sensibility to Disturbances< / a > < / li >
2020-09-01 13:51:37 +02:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgadee53f" > 3.3.2. High Authority Controller< / a >
2020-09-01 13:51:37 +02:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org6ea1bc6" > 3.3.2.1. Controller Design< / a > < / li >
< li > < a href = "#orged3be1e" > 3.3.2.2. Sensibility to Disturbances and Noise Budget< / a > < / li >
< li > < a href = "#org7901ed6" > 3.3.2.3. Simulations of Tomography Experiment< / a > < / li >
< li > < a href = "#org408654e" > 3.3.2.4. Results< / a > < / li >
2020-09-01 13:51:37 +02:00
< / ul >
< / li >
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org34fa458" > 3.4. Direct Velocity Feedback with Amplified Actuators< / a > < / li >
2020-09-01 13:51:37 +02:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orge30c7fc" > 4. APA300ML< / a >
2020-09-01 13:51:37 +02:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orge17e289" > 4.1. Initialization< / a > < / li >
< li > < a href = "#org29c4dc3" > 4.2. Identification< / a > < / li >
< li > < a href = "#org935ae34" > 4.3. Controller Design< / a > < / li >
< li > < a href = "#orgfc3d208" > 4.4. Effect of the Low Authority Control on the Primary Plant< / a > < / li >
< li > < a href = "#org0528c8d" > 4.5. Control in the leg space< / a > < / li >
< li > < a href = "#org7a01c94" > 4.6. Sensibility to Disturbances and Noise Budget< / a > < / li >
< li > < a href = "#org7718f2d" > 4.7. Simulations of Tomography Experiment< / a > < / li >
< li > < a href = "#org813c903" > 4.8. Results< / a > < / li >
2020-05-20 16:41:34 +02:00
< / ul >
< / li >
2020-05-20 15:49:43 +02:00
< / ul >
< / div >
< / div >
< p >
2020-09-01 13:51:37 +02:00
The presented model is based on (< a href = "#citeproc_bib_item_2" > Souleille et al. 2018< / a > ).
2020-05-20 15:49:43 +02:00
< / p >
< p >
2021-02-20 23:09:27 +01:00
The model represents the amplified piezo APA100M from Cedrat-Technologies (Figure < a href = "#orgd28d9f1" > 1< / a > ).
2020-05-20 15:49:43 +02:00
The parameters are shown in the table below.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "orgd28d9f1" class = "figure" >
2020-05-20 15:49:43 +02:00
< p > < img src = "./figs/souleille18_model_piezo.png" alt = "souleille18_model_piezo.png" / >
< / p >
< p > < span class = "figure-number" > Figure 1: < / span > Picture of an APA100M from Cedrat Technologies. Simplified model of a one DoF payload mounted on such isolator< / p >
< / div >
< table border = "2" cellspacing = "0" cellpadding = "6" rules = "groups" frame = "hsides" >
< caption class = "t-above" > < span class = "table-number" > Table 1:< / span > Parameters used for the model of the APA 100M< / caption >
< colgroup >
< col class = "org-left" / >
< col class = "org-left" / >
< col class = "org-left" / >
< / colgroup >
< thead >
< tr >
< th scope = "col" class = "org-left" >   < / th >
< th scope = "col" class = "org-left" > Value< / th >
< th scope = "col" class = "org-left" > Meaning< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "org-left" > \(m\)< / td >
< td class = "org-left" > \(1\,[kg]\)< / td >
< td class = "org-left" > Payload mass< / td >
< / tr >
< tr >
< td class = "org-left" > \(k_e\)< / td >
< td class = "org-left" > \(4.8\,[N/\mu m]\)< / td >
< td class = "org-left" > Stiffness used to adjust the pole of the isolator< / td >
< / tr >
< tr >
< td class = "org-left" > \(k_1\)< / td >
< td class = "org-left" > \(0.96\,[N/\mu m]\)< / td >
< td class = "org-left" > Stiffness of the metallic suspension when the stack is removed< / td >
< / tr >
< tr >
< td class = "org-left" > \(k_a\)< / td >
< td class = "org-left" > \(65\,[N/\mu m]\)< / td >
< td class = "org-left" > Stiffness of the actuator< / td >
< / tr >
< tr >
< td class = "org-left" > \(c_1\)< / td >
< td class = "org-left" > \(10\,[N/(m/s)]\)< / td >
< td class = "org-left" > Added viscous damping< / td >
< / tr >
< / tbody >
< / table >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org1bc5fe4" class = "outline-2" >
< h2 id = "org1bc5fe4" > < span class = "section-number-2" > 1< / span > Simplified Model< / h2 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-2" id = "text-1" >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgf3ed177" class = "outline-3" >
< h3 id = "orgf3ed177" > < span class = "section-number-3" > 1.1< / span > Parameters< / h3 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-3" id = "text-1-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > m = 1; < span class = "org-comment" > % [kg]< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
ke = 4.8e6; < span class = "org-comment" > % [N/m]< / span >
ce = 5; < span class = "org-comment" > % [N/(m/s)]< / span >
me = 0.001; < span class = "org-comment" > % [kg]< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
k1 = 0.96e6; < span class = "org-comment" > % [N/m]< / span >
c1 = 10; < span class = "org-comment" > % [N/(m/s)]< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
ka = 65e6; < span class = "org-comment" > % [N/m]< / span >
ca = 5; < span class = "org-comment" > % [N/(m/s)]< / span >
ma = 0.001; < span class = "org-comment" > % [kg]< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
h = 0.2; < span class = "org-comment" > % [m]< / span >
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
< p >
IFF Controller:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Kiff = < span class = "org-type" > -< / span > 8000< span class = "org-type" > /< / span > s;
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org0a66657" class = "outline-3" >
< h3 id = "org0a66657" > < span class = "section-number-3" > 1.2< / span > Identification< / h3 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-3" id = "text-1-2" >
< p >
Identification in open-loop.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'amplified_piezo_model'< / span > ;
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
clear io; io_i = 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/w'< / span > ], 1, < span class = "org-string" > 'openinput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % Base Motion< / span >
io(io_i) = linio([mdl, < span class = "org-string" > '/f'< / span > ], 1, < span class = "org-string" > 'openinput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % Actuator Inputs< / span >
io(io_i) = linio([mdl, < span class = "org-string" > '/F'< / span > ], 1, < span class = "org-string" > 'openinput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % External Force< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
io(io_i) = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 3, < span class = "org-string" > 'openoutput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % Force Sensors< / span >
io(io_i) = linio([mdl, < span class = "org-string" > '/x1'< / span > ], 1, < span class = "org-string" > 'openoutput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % Mass displacement< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
G = linearize(mdl, io, 0);
G.InputName = {< span class = "org-string" > 'w'< / span > , < span class = "org-string" > 'f'< / span > , < span class = "org-string" > 'F'< / span > };
G.OutputName = {< span class = "org-string" > 'Fs'< / span > , < span class = "org-string" > 'x1'< / span > };
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
< p >
Identification in closed-loop.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'amplified_piezo_model'< / span > ;
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
clear io; io_i = 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/w'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % Base Motion< / span >
io(io_i) = linio([mdl, < span class = "org-string" > '/f'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % Actuator Inputs< / span >
io(io_i) = linio([mdl, < span class = "org-string" > '/F'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % External Force< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
io(io_i) = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 3, < span class = "org-string" > 'output'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % Force Sensors< / span >
io(io_i) = linio([mdl, < span class = "org-string" > '/x1'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1; < span class = "org-comment" > % Mass displacement< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
Giff = linearize(mdl, io, 0);
Giff.InputName = {< span class = "org-string" > 'w'< / span > , < span class = "org-string" > 'f'< / span > , < span class = "org-string" > 'F'< / span > };
Giff.OutputName = {< span class = "org-string" > 'Fs'< / span > , < span class = "org-string" > 'x1'< / span > };
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org089eae6" class = "figure" >
2020-05-20 15:49:43 +02:00
< p > < img src = "figs/amplified_piezo_tf_ol_and_cl.png" alt = "amplified_piezo_tf_ol_and_cl.png" / >
< / p >
< p > < span class = "figure-number" > Figure 2: < / span > Matrix of transfer functions from input to output in open loop (blue) and closed loop (red)< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orga1c354d" class = "outline-3" >
< h3 id = "orga1c354d" > < span class = "section-number-3" > 1.3< / span > Root Locus< / h3 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-3" id = "text-1-3" >
2021-02-20 23:09:27 +01:00
< div id = "org68e87fb" class = "figure" >
2020-05-20 15:49:43 +02:00
< p > < img src = "figs/amplified_piezo_root_locus.png" alt = "amplified_piezo_root_locus.png" / >
< / p >
< p > < span class = "figure-number" > Figure 3: < / span > Root Locus< / p >
< / div >
< / div >
< / div >
2020-05-25 11:13:54 +02:00
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orge088eac" class = "outline-3" >
< h3 id = "orge088eac" > < span class = "section-number-3" > 1.4< / span > Analytical Model< / h3 >
2020-05-25 11:13:54 +02:00
< div class = "outline-text-3" id = "text-1-4" >
< p >
If we apply the Newton’ s second law of motion on the top mass, we obtain:
\[ ms^2 x_1 = F + k_1 (w - x_1) + k_e (x_e - x_1) \]
< / p >
< p >
Then, we can write that the measured force \(F_s\) is equal to:
\[ F_s = k_a(w - x_e) + f = -k_e (x_1 - x_e) \]
which gives:
\[ x_e = \frac{k_a}{k_e + k_a} w + \frac{1}{k_e + k_a} f + \frac{k_e}{k_e + k_a} x_1 \]
< / p >
< p >
Re-injecting that into the previous equations gives:
\[ x_1 = F \frac{1}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} + w \frac{k_1 + \frac{k_e k_a}{k_e + k_a}}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} + f \frac{\frac{k_e}{k_e + k_a}}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} \]
\[ F_s = - F \frac{\frac{k_e k_a}{k_e + k_a}}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} + w \frac{k_e k_a}{k_e + k_a} \Big( \frac{ms^2}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} \Big) - f \frac{k_e}{k_e + k_a} \Big( \frac{ms^2 + k_1}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} \Big) \]
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Ga = 1< span class = "org-type" > /< / span > (m< span class = "org-type" > *< / span > s< span class = "org-type" > ^< / span > 2 < span class = "org-type" > +< / span > k1 < span class = "org-type" > +< / span > ke< span class = "org-type" > *< / span > ka< span class = "org-type" > /< / span > (ke < span class = "org-type" > +< / span > ka)) < span class = "org-type" > *< / span > ...
[ 1 , k1 < span class = "org-type" > +< / span > ke< span class = "org-type" > *< / span > ka< span class = "org-type" > /< / span > (ke < span class = "org-type" > +< / span > ka) , ke< span class = "org-type" > /< / span > (ke < span class = "org-type" > +< / span > ka) ;
< span class = "org-type" > -< / span > ke< span class = "org-type" > *< / span > ka< span class = "org-type" > /< / span > (ke < span class = "org-type" > +< / span > ka), ke< span class = "org-type" > *< / span > ka< span class = "org-type" > /< / span > (ke < span class = "org-type" > +< / span > ka)< span class = "org-type" > *< / span > m< span class = "org-type" > *< / span > s< span class = "org-type" > ^< / span > 2 , < span class = "org-type" > -< / span > ke< span class = "org-type" > /< / span > (ke< span class = "org-type" > +< / span > ka)< span class = "org-type" > *< / span > (m< span class = "org-type" > *< / span > s< span class = "org-type" > ^< / span > 2 < span class = "org-type" > +< / span > k1)];
Ga.InputName = {< span class = "org-string" > 'F'< / span > , < span class = "org-string" > 'w'< / span > , < span class = "org-string" > 'f'< / span > };
Ga.OutputName = {< span class = "org-string" > 'x1'< / span > , < span class = "org-string" > 'Fs'< / span > };
2020-05-25 11:13:54 +02:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org7aca3c8" class = "figure" >
2020-05-25 11:13:54 +02:00
< p > < img src = "figs/comp_simscape_analytical.png" alt = "comp_simscape_analytical.png" / >
< / p >
< p > < span class = "figure-number" > Figure 4: < / span > Comparison of the Identified Simscape Dynamics (solid) and the Analytical Model (dashed)< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org4c2db1d" class = "outline-3" >
< h3 id = "org4c2db1d" > < span class = "section-number-3" > 1.5< / span > Analytical Analysis< / h3 >
2020-05-25 11:13:54 +02:00
< div class = "outline-text-3" id = "text-1-5" >
< p >
For Integral Force Feedback Control, the plant is:
\[ \frac{F_s}{f} = \frac{k_e}{k_e + k_a} \Big( \frac{ms^2 + k_1}{ms^2 + k_1 + \frac{k_e k_a}{k_e + k_a}} \Big) \]
< / p >
< p >
As high frequency, this converge to:
\[ \frac{F_s}{f} \underset{\omega\to\infty}{\longrightarrow} \frac{k_e}{k_e + k_a} \]
And at low frequency:
\[ \frac{F_s}{f} \underset{\omega\to 0}{\longrightarrow} \frac{k_e}{k_e + k_a} \frac{k_1}{k_1 + \frac{k_e k_a}{k_e + k_a}} \]
< / p >
< p >
It has two complex conjugate zeros at:
\[ z = \pm j \sqrt{\frac{k_1}{m}} \]
And two complex conjugate poles at:
\[ p = \pm j \sqrt{\frac{k_1 + \frac{k_e k_a}{k_e + k_a}}{m}} \]
< / p >
< p >
If maximal damping is to be attained with IFF, the distance between the zero and the pole is to be maximized.
Thus, we wish to maximize \(p/z\), which is equivalent as to minimize \(k_1\) and have \(k_e \approx k_a\) (supposing \(k_e + k_a \approx \text{cst}\)).
< / p >
2020-09-01 13:51:37 +02:00
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > m = 1;
k1 = 1e6;
ka = 1e6;
ke = 1e6;
2020-09-01 13:51:37 +02:00
2021-02-20 23:09:27 +01:00
Giff.InputName = {< span class = "org-string" > 'f'< / span > };
Giff.OutputName = {< span class = "org-string" > 'Fs'< / span > };
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
2020-05-25 11:13:54 +02:00
< / div >
< / div >
2020-05-20 15:49:43 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org7863652" class = "outline-2" >
< h2 id = "org7863652" > < span class = "section-number-2" > 2< / span > Rotating X-Y platform< / h2 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-2" id = "text-2" >
2020-09-01 13:51:37 +02:00
< p >
This analysis gave rise to a paper (< a href = "#citeproc_bib_item_1" > Dehaeze and Collette 2020< / a > ).
< / p >
2020-05-20 15:49:43 +02:00
< / div >
2020-09-01 13:51:37 +02:00
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org71a928c" class = "outline-3" >
< h3 id = "org71a928c" > < span class = "section-number-3" > 2.1< / span > Parameters< / h3 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-3" id = "text-2-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > m = 1; < span class = "org-comment" > % [kg]< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
ke = 4.8e6; < span class = "org-comment" > % [N/m]< / span >
ce = 5; < span class = "org-comment" > % [N/(m/s)]< / span >
me = 0.001; < span class = "org-comment" > % [kg]< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
k1 = 0.96e6; < span class = "org-comment" > % [N/m]< / span >
c1 = 10; < span class = "org-comment" > % [N/(m/s)]< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
ka = 65e6; < span class = "org-comment" > % [N/m]< / span >
ca = 5; < span class = "org-comment" > % [N/(m/s)]< / span >
ma = 0.001; < span class = "org-comment" > % [kg]< / span >
2020-05-20 15:49:43 +02:00
2021-02-20 23:09:27 +01:00
h = 0.2; < span class = "org-comment" > % [m]< / span >
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Kiff = tf(0);
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org1590b14" class = "outline-3" >
< h3 id = "org1590b14" > < span class = "section-number-3" > 2.2< / span > Identification< / h3 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-3" id = "text-2-2" >
< p >
Rotating speed in rad/s:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Ws = 2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > [0, 1, 10, 100];
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Gs = {zeros(length(Ws), 1)};
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
< p >
Identification in open-loop.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'amplified_piezo_xy_rotating_stage'< / span > ;
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
clear io; io_i = 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/fx'< / span > ], 1, < span class = "org-string" > 'openinput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/fy'< / span > ], 1, < span class = "org-string" > 'openinput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'openoutput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 2, < span class = "org-string" > 'openoutput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1;
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:length(Ws)< / span >
ws = Ws(< span class = "org-constant" > i< / span > );
G = linearize(mdl, io, 0);
G.InputName = {< span class = "org-string" > 'fx'< / span > , < span class = "org-string" > 'fy'< / span > };
G.OutputName = {< span class = "org-string" > 'Fsx'< / span > , < span class = "org-string" > 'Fsy'< / span > };
Gs(< span class = "org-constant" > i< / span > ) = {G};
< span class = "org-keyword" > end< / span >
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orga1d1d56" class = "figure" >
2020-05-20 15:49:43 +02:00
< p > < img src = "figs/amplitifed_piezo_xy_rotation_plant_iff.png" alt = "amplitifed_piezo_xy_rotation_plant_iff.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 5: < / span > Transfer function matrix from forces to force sensors for multiple rotation speed< / p >
2020-05-20 15:49:43 +02:00
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgf236995" class = "outline-3" >
< h3 id = "orgf236995" > < span class = "section-number-3" > 2.3< / span > Root Locus< / h3 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-3" id = "text-2-3" >
2021-02-20 23:09:27 +01:00
< div id = "orga4f747e" class = "figure" >
2020-05-20 15:49:43 +02:00
< p > < img src = "figs/amplified_piezo_xy_rotation_root_locus.png" alt = "amplified_piezo_xy_rotation_root_locus.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 6: < / span > Root locus for 3 rotating speed< / p >
2020-05-20 15:49:43 +02:00
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org7d91e6b" class = "outline-3" >
< h3 id = "org7d91e6b" > < span class = "section-number-3" > 2.4< / span > Analysis< / h3 >
2020-05-20 15:49:43 +02:00
< div class = "outline-text-3" id = "text-2-4" >
< p >
The negative stiffness induced by the rotation is equal to \(m \omega_0^2\).
Thus, the maximum rotation speed where IFF can be applied is:
\[ \omega_\text{max} = \sqrt{\frac{k_1}{m}} \approx 156\,[Hz] \]
< / p >
< p >
Let’ s verify that.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Ws = 2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > [140, 160];
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
< p >
Identification
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'amplified_piezo_xy_rotating_stage'< / span > ;
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
clear io; io_i = 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/fx'< / span > ], 1, < span class = "org-string" > 'openinput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/fy'< / span > ], 1, < span class = "org-string" > 'openinput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'openoutput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1;
io(io_i) = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 2, < span class = "org-string" > 'openoutput'< / span > ); io_i = io_i < span class = "org-type" > +< / span > 1;
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:length(Ws)< / span >
ws = Ws(< span class = "org-constant" > i< / span > );
G = linearize(mdl, io, 0);
G.InputName = {< span class = "org-string" > 'fx'< / span > , < span class = "org-string" > 'fy'< / span > };
G.OutputName = {< span class = "org-string" > 'Fsx'< / span > , < span class = "org-string" > 'Fsy'< / span > };
Gs(< span class = "org-constant" > i< / span > ) = {G};
< span class = "org-keyword" > end< / span >
2020-05-20 15:49:43 +02:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orgd08023f" class = "figure" >
2020-05-20 15:49:43 +02:00
< p > < img src = "figs/amplified_piezo_xy_rotating_unstable_root_locus.png" alt = "amplified_piezo_xy_rotating_unstable_root_locus.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 7: < / span > Root Locus for the two considered rotation speed. For the red curve, the system is unstable.< / p >
2020-05-20 15:49:43 +02:00
< / div >
< / div >
< / div >
< / div >
2020-05-20 16:41:34 +02:00
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgb00a17f" class = "outline-2" >
< h2 id = "orgb00a17f" > < span class = "section-number-2" > 3< / span > Stewart Platform with Amplified Actuators< / h2 >
2020-05-20 16:41:34 +02:00
< div class = "outline-text-2" id = "text-3" >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgf380cc9" class = "outline-3" >
< h3 id = "orgf380cc9" > < span class = "section-number-3" > 3.1< / span > Initialization< / h3 >
2020-05-20 16:41:34 +02:00
< div class = "outline-text-3" id = "text-3-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeSimscapeConfiguration();
initializeDisturbances(< span class = "org-string" > 'enable'< / span > , < span class = "org-constant" > false< / span > );
initializeLoggingConfiguration(< span class = "org-string" > 'log'< / span > , < span class = "org-string" > 'none'< / span > );
initializeController(< span class = "org-string" > 'type'< / span > , < span class = "org-string" > 'hac-iff'< / span > );
2020-05-20 16:41:34 +02:00
< / pre >
< / div >
< p >
We set the stiffness of the payload fixation:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Kp = 1e8; < span class = "org-comment" > % [N/m]< / span >
2020-05-20 16:41:34 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org76128b7" class = "outline-3" >
< h3 id = "org76128b7" > < span class = "section-number-3" > 3.2< / span > APA-100 Amplified Actuator< / h3 >
2020-05-20 16:41:34 +02:00
< div class = "outline-text-3" id = "text-3-2" >
2020-09-01 13:51:37 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgb29b9fd" class = "outline-4" >
< h4 id = "orgb29b9fd" > < span class = "section-number-4" > 3.2.1< / span > Identification< / h4 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-4" id = "text-3-2-1" >
2020-05-20 16:41:34 +02:00
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K = tf(zeros(6));
Kiff = tf(zeros(6));
2020-05-20 16:41:34 +02:00
< / pre >
< / div >
< p >
We identify the system for the following payload masses:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Ms = [1, 10, 50];
2020-05-20 16:41:34 +02:00
< / pre >
< / div >
< p >
The nano-hexapod has the following leg’ s stiffness and damping.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'amplified'< / span > );
2020-05-20 16:41:34 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgce15cc5" class = "outline-4" >
< h4 id = "orgce15cc5" > < span class = "section-number-4" > 3.2.2< / span > Controller Design< / h4 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-4" id = "text-3-2-2" >
< p >
2021-02-20 23:09:27 +01:00
The loop gain for IFF is shown in Figure < a href = "#org2657515" > 8< / a > .
2020-09-01 13:51:37 +02:00
< / p >
< p >
2021-02-20 23:09:27 +01:00
The corresponding root locus is shown in Figure < a href = "#org7f5e4ff" > 9< / a > .
2020-09-01 13:51:37 +02:00
< / p >
< p >
2021-02-20 23:09:27 +01:00
Finally, the damping as function of the gain is display in Figure < a href = "#orgc7f890c" > 10< / a > .
2020-09-01 13:51:37 +02:00
< / p >
2020-05-20 16:41:34 +02:00
2021-02-20 23:09:27 +01:00
< div id = "org2657515" class = "figure" >
2020-05-20 16:41:34 +02:00
< p > < img src = "figs/amplified_piezo_iff_loop_gain.png" alt = "amplified_piezo_iff_loop_gain.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 8: < / span > Dynamics for the Integral Force Feedback for three payload masses< / p >
2020-05-20 16:41:34 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org7f5e4ff" class = "figure" >
2020-05-20 16:41:34 +02:00
< p > < img src = "figs/amplified_piezo_iff_root_locus.png" alt = "amplified_piezo_iff_root_locus.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 9: < / span > Root Locus for the IFF control for three payload masses< / p >
2020-05-20 16:41:34 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orgc7f890c" class = "figure" >
2020-05-20 16:41:34 +02:00
< p > < img src = "figs/amplified_piezo_iff_damping_gain.png" alt = "amplified_piezo_iff_damping_gain.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 10: < / span > Damping ratio of the poles as a function of the IFF gain< / p >
2020-05-20 16:41:34 +02:00
< / div >
< p >
2020-09-01 13:51:37 +02:00
The following controller for the Decentralized Integral Force Feedback is used:
2020-05-20 16:41:34 +02:00
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Kiff = < span class = "org-type" > -< / span > 1e4< span class = "org-type" > /< / span > s< span class = "org-type" > *< / span > eye(6);
2020-05-20 16:41:34 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org641c18d" class = "outline-4" >
< h4 id = "org641c18d" > < span class = "section-number-4" > 3.2.3< / span > Effect of the Low Authority Control on the Primary Plant< / h4 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-4" id = "text-3-2-3" >
2020-05-20 16:55:50 +02:00
2021-02-20 23:09:27 +01:00
< div id = "orgf19d4fe" class = "figure" >
2020-05-20 16:55:50 +02:00
< p > < img src = "figs/amplified_piezo_iff_plant_damped_X.png" alt = "amplified_piezo_iff_plant_damped_X.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 11: < / span > Primary plant in the task space with (dashed) and without (solid) IFF< / p >
2020-05-20 16:55:50 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org69aabd4" class = "figure" >
2020-05-20 16:55:50 +02:00
< p > < img src = "figs/amplified_piezo_iff_damped_plant_L.png" alt = "amplified_piezo_iff_damped_plant_L.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 12: < / span > Primary plant in the space of the legs with (dashed) and without (solid) IFF< / p >
2020-05-20 16:55:50 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orgc92d9be" class = "figure" >
2020-05-20 16:55:50 +02:00
< p > < img src = "figs/amplified_piezo_iff_damped_coupling_X.png" alt = "amplified_piezo_iff_damped_coupling_X.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 13: < / span > Coupling in the primary plant in the task with (dashed) and without (solid) IFF< / p >
2020-05-20 16:55:50 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org4bf9442" class = "figure" >
2020-05-20 16:55:50 +02:00
< p > < img src = "figs/amplified_piezo_iff_damped_coupling_L.png" alt = "amplified_piezo_iff_damped_coupling_L.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 14: < / span > Coupling in the primary plant in the space of the legs with (dashed) and without (solid) IFF< / p >
2020-05-20 16:55:50 +02:00
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org651e695" class = "outline-4" >
< h4 id = "org651e695" > < span class = "section-number-4" > 3.2.4< / span > Effect of the Low Authority Control on the Sensibility to Disturbances< / h4 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-4" id = "text-3-2-4" >
2020-05-20 16:55:50 +02:00
2021-02-20 23:09:27 +01:00
< div id = "orga39acac" class = "figure" >
2020-05-20 16:55:50 +02:00
< p > < img src = "figs/amplified_piezo_iff_disturbances.png" alt = "amplified_piezo_iff_disturbances.png" / >
< / p >
2020-05-25 11:13:54 +02:00
< p > < span class = "figure-number" > Figure 15: < / span > Norm of the transfer function from vertical disturbances to vertical position error with (dashed) and without (solid) Integral Force Feedback applied< / p >
2020-05-20 16:55:50 +02:00
< / div >
2020-09-01 13:51:37 +02:00
< / div >
< / div >
< div class = "outline-text-3" id = "text-3-2" >
2021-02-20 23:09:27 +01:00
< div class = "important" id = "org323cba0" >
2020-05-20 16:55:50 +02:00
< / div >
< / div >
2020-05-20 16:41:34 +02:00
< / div >
2020-05-25 11:13:54 +02:00
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgedaa0e4" class = "outline-3" >
< h3 id = "orgedaa0e4" > < span class = "section-number-3" > 3.3< / span > Optimal Stiffnesses< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-3-3" >
< p >
Based on the analytical analysis, we can determine the parameters of the amplified piezoelectric actuator in order to be able to add a lots of damping using IFF:
< / p >
< ul class = "org-ul" >
< li > \(k_1\) should be minimized.< / li >
< li > \(k_e \approx k_a \approx 10^5 - 10^6\,[N/m]\)< / li >
< / ul >
< p >
However, this might not be realizable.
< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org4fc2971" class = "outline-4" >
< h4 id = "org4fc2971" > < span class = "section-number-4" > 3.3.1< / span > Low Authority Controller< / h4 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-4" id = "text-3-3-1" >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org1d50646" class = "outline-5" >
< h5 id = "org1d50646" > < span class = "section-number-5" > 3.3.1.1< / span > Identification< / h5 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-5" id = "text-3-3-1-1" >
< p >
The nano-hexapod is initialized with the following parameters:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'amplified'< / span > , ...
< span class = "org-string" > 'k1'< / span > , 1e4, ...
< span class = "org-string" > 'ke'< / span > , 1e6, ...
< span class = "org-string" > 'ka'< / span > , 1e6);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< p >
2021-02-20 23:09:27 +01:00
The obtain plan for the IFF control is shown in Figure < a href = "#org82a2c28" > 16< / a > .
The associated Root Locus is shown in Figure < a href = "#org9888eb5" > 17< / a > .
2020-09-01 13:51:37 +02:00
< / p >
< p >
Based on that, the following IFF gain is chosen:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Kiff = < span class = "org-type" > -< / span > 1e3< span class = "org-type" > /< / span > s< span class = "org-type" > *< / span > eye(6);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org82a2c28" class = "figure" >
2020-09-01 13:51:37 +02:00
< p > < img src = "figs/amplified_piezo_opt_stiff_iff_plant.png" alt = "amplified_piezo_opt_stiff_iff_plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 16: < / span > Plant dynamics for IFF with the amplified piezoelectric stack actuator< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org9888eb5" class = "figure" >
2020-09-01 13:51:37 +02:00
< p > < img src = "figs/amplified_piezo_opt_stiff_iff_root_locus.png" alt = "amplified_piezo_opt_stiff_iff_root_locus.png" / >
< / p >
< p > < span class = "figure-number" > Figure 17: < / span > Root Locus for IFF with the amplified piezoelectric stack actuator< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orgeb57599" class = "figure" >
2020-09-01 13:51:37 +02:00
< p > < img src = "figs/amplified_piezo_opt_stiff_gain_damping.png" alt = "amplified_piezo_opt_stiff_gain_damping.png" / >
< / p >
< p > < span class = "figure-number" > Figure 18: < / span > Damping of the modes as a function of the IFF gain< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgf4a5e42" class = "outline-5" >
< h5 id = "orgf4a5e42" > < span class = "section-number-5" > 3.3.1.2< / span > Effect of the Low Authority Control on the Primary Plant< / h5 >
2020-09-01 13:51:37 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgcacb9e3" class = "outline-5" >
< h5 id = "orgcacb9e3" > < span class = "section-number-5" > 3.3.1.3< / span > Effect of the Low Authority Control on the Sensibility to Disturbances< / h5 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-5" id = "text-3-3-1-3" >
2021-02-20 23:09:27 +01:00
< div id = "orgdd76598" class = "figure" >
2020-09-01 13:51:37 +02:00
< p > < img src = "figs/amplified_piezo_opt_stiff_iff_dist.png" alt = "amplified_piezo_opt_stiff_iff_dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 19: < / span > Effect of disturbance with and without IFF< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div class = "important" id = "orgd924db8" >
2020-09-01 13:51:37 +02:00
< p >
< / p >
< / div >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgadee53f" class = "outline-4" >
< h4 id = "orgadee53f" > < span class = "section-number-4" > 3.3.2< / span > High Authority Controller< / h4 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-4" id = "text-3-3-2" >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org6ea1bc6" class = "outline-5" >
< h5 id = "org6ea1bc6" > < span class = "section-number-5" > 3.3.2.1< / span > Controller Design< / h5 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-5" id = "text-3-3-2-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > h = 2.5;
Kl = 5e6 < span class = "org-type" > *< / span > eye(6) < span class = "org-type" > *< / span > ...
1< span class = "org-type" > /< / span > h< 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 > 40< span class = "org-type" > /< / span > h) < 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 > 40< span class = "org-type" > *< / span > h) < span class = "org-type" > +< / span > 1) < span class = "org-type" > *< / span > ...
1< span class = "org-type" > /< / span > h< 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 > 100< span class = "org-type" > /< / span > h) < 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 > 100< span class = "org-type" > *< / span > h) < 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 > 50 < 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 > 50) < 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 > 10 < 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 > 10) < span class = "org-type" > *< / span > ...
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 > 200);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Kl = 3e10 < span class = "org-type" > *< / span > eye(6) < span class = "org-type" > *< / span > ...
1< span class = "org-type" > /< / span > s < span class = "org-type" > *< / span > ...
(s< span class = "org-type" > +< / span > 0.8)< span class = "org-type" > /< / span > s < span class = "org-type" > *< / span > ...
(s< span class = "org-type" > +< / span > 50)< span class = "org-type" > /< / span > (s< span class = "org-type" > +< / span > 0.01) < span class = "org-type" > *< / span > ...
(s< span class = "org-type" > +< / span > 120)< span class = "org-type" > /< / span > (s< span class = "org-type" > +< / span > 1000) < span class = "org-type" > *< / span > ...
(s< span class = "org-type" > +< / span > 150)< span class = "org-type" > /< / span > (s< span class = "org-type" > +< / span > 1000);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< p >
Finally, we include the Jacobian in the control and we ignore the measurement of the vertical rotation as for the real system.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > 'mat/stages.mat'< / span > , < span class = "org-string" > 'nano_hexapod'< / span > );
K = Kl< span class = "org-type" > *< / span > nano_hexapod.kinematics.J< span class = "org-type" > *< / span > diag([1, 1, 1, 1, 1, 0]);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orged3be1e" class = "outline-5" >
< h5 id = "orged3be1e" > < span class = "section-number-5" > 3.3.2.2< / span > Sensibility to Disturbances and Noise Budget< / h5 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-5" id = "text-3-3-2-2" >
< p >
We identify the transfer function from disturbances to the position error of the sample when the HAC-LAC control is applied.
< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org7901ed6" class = "outline-5" >
< h5 id = "org7901ed6" > < span class = "section-number-5" > 3.3.2.3< / span > Simulations of Tomography Experiment< / h5 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-5" id = "text-3-3-2-3" >
< p >
Let’ s now simulate a tomography experiment.
To do so, we include all disturbances except vibrations of the translation stage.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeDisturbances();
initializeSimscapeConfiguration(< span class = "org-string" > 'gravity'< / span > , < span class = "org-constant" > false< / span > );
initializeLoggingConfiguration(< span class = "org-string" > 'log'< / span > , < span class = "org-string" > 'all'< / span > );
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< p >
And we run the simulation for all three payload Masses.
< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org408654e" class = "outline-5" >
< h5 id = "org408654e" > < span class = "section-number-5" > 3.3.2.4< / span > Results< / h5 >
2020-09-01 13:51:37 +02:00
< / div >
< / div >
2020-05-25 11:13:54 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org34fa458" class = "outline-3" >
< h3 id = "org34fa458" > < span class = "section-number-3" > 3.4< / span > Direct Velocity Feedback with Amplified Actuators< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-3-4" >
< p >
Lack of collocation.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeController(< span class = "org-string" > 'type'< / span > , < span class = "org-string" > 'hac-dvf'< / span > );
K = tf(zeros(6));
Kdvf = tf(zeros(6));
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< p >
We identify the system for the following payload masses:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Ms = [1, 10, 50];
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'amplified'< / span > , ...
< span class = "org-string" > 'k1'< / span > , 1e4, ...
< span class = "org-string" > 'ke'< / span > , 1e6, ...
< span class = "org-string" > 'ka'< / span > , 1e6);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orge30c7fc" class = "outline-2" >
< h2 id = "orge30c7fc" > < span class = "section-number-2" > 4< / span > APA300ML< / h2 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-2" id = "text-4" >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orge17e289" class = "outline-3" >
< h3 id = "orge17e289" > < span class = "section-number-3" > 4.1< / span > Initialization< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-4-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeSimscapeConfiguration();
initializeDisturbances(< span class = "org-string" > 'enable'< / span > , < span class = "org-constant" > false< / span > );
initializeLoggingConfiguration(< span class = "org-string" > 'log'< / span > , < span class = "org-string" > 'none'< / span > );
initializeController(< span class = "org-string" > 'type'< / span > , < span class = "org-string" > 'hac-dvf'< / span > );
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< p >
We set the stiffness of the payload fixation:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Kp = 1e8; < span class = "org-comment" > % [N/m]< / span >
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org29c4dc3" class = "outline-3" >
< h3 id = "org29c4dc3" > < span class = "section-number-3" > 4.2< / span > Identification< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-4-2" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K = tf(zeros(6));
Kdvf = tf(zeros(6));
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< p >
We identify the system for the following payload masses:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Ms = [1, 10, 50];
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< p >
The nano-hexapod has the following leg’ s stiffness and damping.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'amplified'< / span > , < span class = "org-string" > 'k1'< / span > , 0.4e6, < span class = "org-string" > 'ka'< / span > , 43e6, < span class = "org-string" > 'ke'< / span > , 1.5e6);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org935ae34" class = "outline-3" >
< h3 id = "org935ae34" > < span class = "section-number-3" > 4.3< / span > Controller Design< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-4-3" >
< p >
Damping as function of the gain
Finally, we use the following controller for the Decentralized Direct Velocity Feedback:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > Kdvf = 5e5< span class = "org-type" > *< / span > s< 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 > 1e3)< span class = "org-type" > *< / span > eye(6);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgfc3d208" class = "outline-3" >
< h3 id = "orgfc3d208" > < span class = "section-number-3" > 4.4< / span > Effect of the Low Authority Control on the Primary Plant< / h3 >
2020-09-01 13:51:37 +02:00
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org0528c8d" class = "outline-3" >
< h3 id = "org0528c8d" > < span class = "section-number-3" > 4.5< / span > Control in the leg space< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-4-5" >
< p >
We design a diagonal controller with all the same diagonal elements.
< / p >
< p >
The requirements for the controller are:
< / p >
< ul class = "org-ul" >
< li > Crossover frequency of around 100Hz< / li >
< li > Stable for all the considered payload masses< / li >
< li > Sufficient phase and gain margin< / li >
< li > Integral action at low frequency< / li >
< / ul >
< p >
The design controller is as follows:
< / p >
< ul class = "org-ul" >
< li > Lead centered around the crossover< / li >
< li > An integrator below 10Hz< / li >
< li > A low pass filter at 250Hz< / li >
< / ul >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > h = 2.0;
Kl = 1e9 < span class = "org-type" > *< / span > eye(6) < span class = "org-type" > *< / span > ...
1< span class = "org-type" > /< / span > h< 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 > 100< span class = "org-type" > /< / span > h) < 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 > 100< span class = "org-type" > *< / span > h) < span class = "org-type" > +< / span > 1) < span class = "org-type" > *< / span > ...
1< span class = "org-type" > /< / span > h< 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 > 200< span class = "org-type" > /< / span > h) < 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 > 200< span class = "org-type" > *< / span > h) < 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 > 10 < 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 > 10) < span class = "org-type" > *< / span > ...
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 > 300);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > 'mat/stages.mat'< / span > , < span class = "org-string" > 'nano_hexapod'< / span > );
K = Kl< span class = "org-type" > *< / span > nano_hexapod.kinematics.J< span class = "org-type" > *< / span > diag([1, 1, 1, 1, 1, 0]);
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org7a01c94" class = "outline-3" >
< h3 id = "org7a01c94" > < span class = "section-number-3" > 4.6< / span > Sensibility to Disturbances and Noise Budget< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-4-6" >
< p >
We identify the transfer function from disturbances to the position error of the sample when the HAC-LAC control is applied.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "org96c6b76" class = "figure" >
2020-09-01 13:51:37 +02:00
< p > < img src = "figs/opt_stiff_primary_control_L_psd_dist.png" alt = "opt_stiff_primary_control_L_psd_dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 20: < / span > Amplitude Spectral Density of the vertical position error of the sample when the HAC-DVF control is applied due to both the ground motion and spindle vibrations< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orgce5e415" class = "figure" >
2020-09-01 13:51:37 +02:00
< p > < img src = "figs/opt_stiff_primary_control_L_psd_tot.png" alt = "opt_stiff_primary_control_L_psd_tot.png" / >
< / p >
< p > < span class = "figure-number" > Figure 21: < / span > Amplitude Spectral Density of the vertical position error of the sample in Open-Loop and when the HAC-DVF control is applied< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orgf8ef2f5" class = "figure" >
2020-09-01 13:51:37 +02:00
< p > < img src = "figs/opt_stiff_primary_control_L_cas_tot.png" alt = "opt_stiff_primary_control_L_cas_tot.png" / >
< / p >
< p > < span class = "figure-number" > Figure 22: < / span > Cumulative Amplitude Spectrum of the vertical position error of the sample in Open-Loop and when the HAC-DVF control is applied< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org7718f2d" class = "outline-3" >
< h3 id = "org7718f2d" > < span class = "section-number-3" > 4.7< / span > Simulations of Tomography Experiment< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-4-7" >
< p >
Let’ s now simulate a tomography experiment.
To do so, we include all disturbances except vibrations of the translation stage.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeDisturbances();
initializeSimscapeConfiguration(< span class = "org-string" > 'gravity'< / span > , < span class = "org-constant" > false< / span > );
initializeLoggingConfiguration(< span class = "org-string" > 'log'< / span > , < span class = "org-string" > 'all'< / span > );
2020-09-01 13:51:37 +02:00
< / pre >
< / div >
< p >
And we run the simulation for all three payload Masses.
< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org813c903" class = "outline-3" >
< h3 id = "org813c903" > < span class = "section-number-3" > 4.8< / span > Results< / h3 >
2020-09-01 13:51:37 +02:00
< div class = "outline-text-3" id = "text-4-8" >
< style > . csl-entry { text-indent : -1.5 em ; margin-left : 1.5 em ; } < / style > < h2 class = 'citeproc-org-bib-h2' > Bibliography< / h2 >
< div class = "csl-bib-body" >
< div class = "csl-entry" > < a name = "citeproc_bib_item_1" > < / a > Dehaeze, T., and C. Collette. 2020. “Active Damping of Rotating Platforms Using Integral Force Feedback.” In < i > Proceedings of the International Conference on Modal Analysis Noise and Vibration Engineering (ISMA)< / i > .< / div >
< div class = "csl-entry" > < a name = "citeproc_bib_item_2" > < / a > Souleille, Adrien, Thibault Lampert, V Lafarga, Sylvain Hellegouarch, Alan Rondineau, Gonçalo Rodrigues, and Christophe Collette. 2018. “A Concept of Active Mount for Space Applications.” < i > CEAS Space Journal< / i > 10 (2). Springer:157– 65.< / div >
< / div >
< / div >
2020-05-25 11:13:54 +02:00
< / div >
2020-05-20 16:41:34 +02:00
< / div >
2020-05-20 15:49:43 +02:00
< / div >
< div id = "postamble" class = "status" >
< p class = "author" > Author: Dehaeze Thomas< / p >
2021-02-20 23:09:27 +01:00
< p class = "date" > Created: 2021-02-20 sam. 23:08< / p >
2020-05-20 15:49:43 +02:00
< / div >
< / body >
< / html >