2020-02-25 18:10:20 +01:00
<?xml version="1.0" encoding="utf-8"?>
<?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-03-13 17:40:22 +01:00
<!-- 2020 - 03 - 13 ven. 17:39 -->
2020-02-25 18:10:20 +01:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > Active Damping with an uni-axial model< / title >
< meta name = "generator" content = "Org mode" / >
< meta name = "author" content = "Dehaeze Thomas" / >
< style type = "text/css" >
<!-- /* --> <![CDATA[/*> <!-- */
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
< / style >
2020-02-25 18:21:17 +01:00
< link rel = "stylesheet" type = "text/css" href = "./css/htmlize.css" / >
< link rel = "stylesheet" type = "text/css" href = "./css/readtheorg.css" / >
< link rel = "stylesheet" type = "text/css" href = "./css/zenburn.css" / >
< 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/jquery.stickytableheaders.min.js" > < / script >
< script type = "text/javascript" src = "./js/readtheorg.js" > < / script >
2020-02-25 18:10:20 +01:00
< script type = "text/javascript" >
2020-03-13 17:40:22 +01:00
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050& dn=gpl-3.0.txt GPL-v3-or-Later
2020-02-25 18:10:20 +01:00
<!-- /* --> <![CDATA[/*> <!-- */
2020-03-13 17:40:22 +01:00
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
2020-02-25 18:10:20 +01:00
< / script >
< script >
MathJax = {
tex: { macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
};
< / script >
< script type = "text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">< / script >
< / head >
< body >
< div id = "org-div-home-and-up" >
2020-02-25 18:21:17 +01:00
< a accesskey = "h" href = "./index.html" > UP < / a >
2020-02-25 18:10:20 +01:00
|
2020-02-25 18:21:17 +01:00
< a accesskey = "H" href = "./index.html" > HOME < / a >
2020-02-25 18:10:20 +01:00
< / div > < div id = "content" >
< h1 class = "title" > Active Damping with an uni-axial model< / h1 >
< div id = "table-of-contents" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
< li > < a href = "#org7b64a90" > 1. Undamped System< / a >
< ul >
< li > < a href = "#org7409841" > 1.1. Init< / a > < / li >
< li > < a href = "#org7514f31" > 1.2. Identification< / a > < / li >
2020-03-13 17:40:22 +01:00
< li > < a href = "#org380e20f" > 1.3. Sensitivity to disturbances< / a > < / li >
2020-02-25 18:10:20 +01:00
< li > < a href = "#orgdda82c0" > 1.4. Undamped Plant< / a > < / li >
< / ul >
< / li >
< li > < a href = "#org5a3389e" > 2. Integral Force Feedback< / a >
< ul >
2020-03-13 17:40:22 +01:00
< li > < a href = "#orgbaae6a1" > 2.1. One degree-of-freedom example< / a >
2020-02-25 18:10:20 +01:00
< ul >
2020-03-13 17:40:22 +01:00
< li > < a href = "#orgc436f05" > 2.1.1. Equations< / a > < / li >
< li > < a href = "#org238893b" > 2.1.2. Matlab Example< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2020-03-13 17:40:22 +01:00
< li > < a href = "#org824be47" > 2.2. Control Design< / a > < / li >
< li > < a href = "#orgfdd4556" > 2.3. Identification of the damped plant< / a > < / li >
< li > < a href = "#org4802ab9" > 2.4. Sensitivity to disturbances< / a > < / li >
< li > < a href = "#org2cbe422" > 2.5. Damped Plant< / a > < / li >
< li > < a href = "#orgdade398" > 2.6. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
< li > < a href = "#orgc4ca1b5" > 3. Relative Motion Control< / a >
< ul >
2020-03-13 17:40:22 +01:00
< li > < a href = "#org39a3687" > 3.1. One degree-of-freedom example< / a >
2020-02-25 18:10:20 +01:00
< ul >
2020-03-13 17:40:22 +01:00
< li > < a href = "#org994b142" > 3.1.1. Equations< / a > < / li >
< li > < a href = "#org6a1f411" > 3.1.2. Matlab Example< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2020-03-13 17:40:22 +01:00
< li > < a href = "#org13a97a7" > 3.2. Control Design< / a > < / li >
< li > < a href = "#orge00b37b" > 3.3. Identification of the damped plant< / a > < / li >
< li > < a href = "#orgcd3874b" > 3.4. Sensitivity to disturbances< / a > < / li >
< li > < a href = "#orgfcc3787" > 3.5. Damped Plant< / a > < / li >
< li > < a href = "#org37ceb38" > 3.6. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
< li > < a href = "#org3cc03b0" > 4. Direct Velocity Feedback< / a >
< ul >
2020-03-13 17:40:22 +01:00
< li > < a href = "#org20ee26e" > 4.1. One degree-of-freedom example< / a >
2020-02-25 18:10:20 +01:00
< ul >
2020-03-13 17:40:22 +01:00
< li > < a href = "#org0d2ea8d" > 4.1.1. Equations< / a > < / li >
< li > < a href = "#orgaddbb82" > 4.1.2. Matlab Example< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2020-03-13 17:40:22 +01:00
< li > < a href = "#orgf1bd80b" > 4.2. Control Design< / a > < / li >
< li > < a href = "#org54ebde8" > 4.3. Identification of the damped plant< / a > < / li >
< li > < a href = "#org454c0c8" > 4.4. Sensitivity to disturbances< / a > < / li >
< li > < a href = "#org5f21dd1" > 4.5. Damped Plant< / a > < / li >
< li > < a href = "#org53572a3" > 4.6. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
< li > < a href = "#org21441bc" > 5. Comparison< / a >
< ul >
< li > < a href = "#orgbe907b4" > 5.1. Load the plants< / a > < / li >
< li > < a href = "#orgde6308d" > 5.2. Sensitivity to Disturbance< / a > < / li >
2020-03-13 17:40:22 +01:00
< li > < a href = "#orga1cf9f2" > 5.3. Damped Plant< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2020-03-13 17:40:22 +01:00
< li > < a href = "#org4d89cbd" > 6. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / div >
< / div >
< p >
First, in section < a href = "#orgbf3f2ef" > 1< / a > , we will looked at the undamped system.
< / p >
< p >
Then, we will compare three active damping techniques:
< / p >
< ul class = "org-ul" >
< li > In section < a href = "#org5797b2c" > 2< / a > : the integral force feedback is used< / li >
< li > In section < a href = "#org8dc40dc" > 3< / a > : the relative motion control is used< / li >
< li > In section < a href = "#orge3322d7" > 4< / a > : the direct velocity feedback is used< / li >
< / ul >
< p >
For each of the active damping technique, we will:
< / p >
< ul class = "org-ul" >
< li > Compare the sensitivity from disturbances< / li >
< li > Look at the damped plant< / li >
< / ul >
< p >
The disturbances are:
< / p >
< ul class = "org-ul" >
< li > Ground motion< / li >
< li > Direct forces< / li >
< li > Motion errors of all the stages< / li >
< / ul >
< div id = "outline-container-org7b64a90" class = "outline-2" >
< h2 id = "org7b64a90" > < span class = "section-number-2" > 1< / span > Undamped System< / h2 >
< div class = "outline-text-2" id = "text-1" >
< p >
< a id = "orgbf3f2ef" > < / a >
< / p >
< div class = "note" >
< p >
All the files (data and Matlab scripts) are accessible < a href = "data/undamped_system.zip" > here< / a > .
< / p >
< / div >
< p >
We first look at the undamped system.
The performance of this undamped system will be compared with the damped system using various techniques.
< / p >
< / div >
< div id = "outline-container-org7409841" class = "outline-3" >
< h3 id = "org7409841" > < span class = "section-number-3" > 1.1< / span > Init< / h3 >
< div class = "outline-text-3" id = "text-1-1" >
< p >
We initialize all the stages with the default parameters.
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeReferences();
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
< / pre >
< / div >
< p >
All the controllers are set to 0.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > K = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_iff = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_rmc = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_dvf = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-org7514f31" class = "outline-3" >
< h3 id = "org7514f31" > < span class = "section-number-3" > 1.2< / span > Identification< / h3 >
< div class = "outline-text-3" id = "text-1-2" >
< p >
We identify the various transfer functions of the system
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > G = identifyPlant();
< / pre >
< / div >
< p >
And we save it for further analysis.
< / p >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/active_damping_uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org380e20f" class = "outline-3" >
< h3 id = "org380e20f" > < span class = "section-number-3" > 1.3< / span > Sensitivity to disturbances< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-1-3" >
< p >
The sensitivity to disturbances are shown on figure < a href = "#orgcf7fa15" > 1< / a > .
< / p >
< div id = "orgcf7fa15" class = "figure" >
< p > < img src = "figs/sensitivity_dist_undamped.png" alt = "sensitivity_dist_undamped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 1: < / span > Undamped sensitivity to disturbances (< a href = "./figs/sensitivity_dist_undamped.png" > png< / a > , < a href = "./figs/sensitivity_dist_undamped.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org5f406f3" class = "figure" >
< p > < img src = "figs/sensitivity_dist_stages.png" alt = "sensitivity_dist_stages.png" / >
< / p >
< p > < span class = "figure-number" > Figure 2: < / span > Sensitivity to force disturbances in various stages (< a href = "./figs/sensitivity_dist_stages.png" > png< / a > , < a href = "./figs/sensitivity_dist_stages.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
< div id = "outline-container-orgdda82c0" class = "outline-3" >
< h3 id = "orgdda82c0" > < span class = "section-number-3" > 1.4< / span > Undamped Plant< / h3 >
< div class = "outline-text-3" id = "text-1-4" >
< p >
The “ plant” (transfer function from forces applied by the nano-hexapod to the measured displacement of the sample with respect to the granite) bode plot is shown on figure < a href = "#orgcf7fa15" > 1< / a > .
< / p >
< div id = "orgae47083" class = "figure" >
< p > < img src = "figs/plant_undamped.png" alt = "plant_undamped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 3: < / span > Transfer Function from cartesian forces to displacement for the undamped plant (< a href = "./figs/plant_undamped.png" > png< / a > , < a href = "./figs/plant_undamped.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
< / div >
< div id = "outline-container-org5a3389e" class = "outline-2" >
< h2 id = "org5a3389e" > < span class = "section-number-2" > 2< / span > Integral Force Feedback< / h2 >
< div class = "outline-text-2" id = "text-2" >
< p >
< a id = "org5797b2c" > < / a >
< / p >
< div class = "note" >
< p >
All the files (data and Matlab scripts) are accessible < a href = "data/iff.zip" > here< / a > .
< / p >
< / div >
< p >
Integral Force Feedback is applied.
In section < a href = "#org7f37ded" > 2.1< / a > , IFF is applied on a uni-axial system to understand its behavior.
Then, it is applied on the simscape model.
< / p >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orgbaae6a1" class = "outline-3" >
< h3 id = "orgbaae6a1" > < span class = "section-number-3" > 2.1< / span > One degree-of-freedom example< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-1" >
< p >
< a id = "org7f37ded" > < / a >
< / p >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orgc436f05" class = "outline-4" >
< h4 id = "orgc436f05" > < span class = "section-number-4" > 2.1.1< / span > Equations< / h4 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-4" id = "text-2-1-1" >
< div id = "org1acdc30" class = "figure" >
< p > < img src = "figs/iff_1dof.png" alt = "iff_1dof.png" / >
< / p >
< p > < span class = "figure-number" > Figure 4: < / span > Integral Force Feedback applied to a 1dof system< / p >
< / div >
< p >
The dynamic of the system is described by the following equation:
< / p >
\begin{equation}
ms^2x = F_d - kx - csx + kw + csw + F
\end{equation}
< p >
The measured force \(F_m\) is:
< / p >
\begin{align}
F_m & = F - kx - csx + kw + csw \\
& = ms^2 x - F_d
\end{align}
< p >
The Integral Force Feedback controller is \(K = -\frac{g}{s}\), and thus the applied force by this controller is:
< / p >
\begin{equation}
F_{\text{IFF}} = -\frac{g}{s} F_m = -\frac{g}{s} (ms^2 x - F_d)
\end{equation}
< p >
Once the IFF is applied, the new dynamics of the system is:
< / p >
\begin{equation}
ms^2x = F_d + F - kx - csx + kw + csw - \frac{g}{s} (ms^2x - F_d)
\end{equation}
< p >
And finally:
< / p >
\begin{equation}
x = F_d \frac{1 + \frac{g}{s}}{ms^2 + (mg + c)s + k} + F \frac{1}{ms^2 + (mg + c)s + k} + w \frac{k + cs}{ms^2 + (mg + c)s + k}
\end{equation}
< p >
We can see that this:
< / p >
< ul class = "org-ul" >
< li > adds damping to the system by a value \(mg\)< / li >
< li > lower the compliance as low frequency by a factor: \(1 + g/s\)< / li >
< / ul >
< p >
If we want critical damping:
< / p >
\begin{equation}
\xi = \frac{1}{2} \frac{c + gm}{\sqrt{km}} = \frac{1}{2}
\end{equation}
< p >
This is attainable if we have:
< / p >
\begin{equation}
g = \frac{\sqrt{km} - c}{m}
\end{equation}
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org238893b" class = "outline-4" >
< h4 id = "org238893b" > < span class = "section-number-4" > 2.1.2< / span > Matlab Example< / h4 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-4" id = "text-2-1-2" >
< p >
Let define the system parameters.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > m = 50; < span class = "org-comment" > % [kg]< / span >
k = 1e6; < span class = "org-comment" > % [N/m]< / span >
c = 1e3; < span class = "org-comment" > % [N/(m/s)]< / span >
< / pre >
< / div >
< p >
The state space model of the system is defined below.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > A = [< span class = "org-type" > -< / span > c< span class = "org-type" > /< / span > m < span class = "org-type" > -< / span > k< span class = "org-type" > /< / span > m;
1 0];
B = [1< span class = "org-type" > /< / span > m 1< span class = "org-type" > /< / span > m < span class = "org-type" > -< / span > 1;
0 0 0];
C = [ 0 1;
< span class = "org-type" > -< / span > c < span class = "org-type" > -< / span > k];
D = [0 0 0;
1 0 0];
sys = ss(A, B, C, D);
sys.InputName = {< span class = "org-string" > 'F'< / span > , < span class = "org-string" > 'Fd'< / span > , < span class = "org-string" > 'wddot'< / span > };
sys.OutputName = {< span class = "org-string" > 'd'< / span > , < span class = "org-string" > 'Fm'< / span > };
sys.StateName = {< span class = "org-string" > 'ddot'< / span > , < span class = "org-string" > 'd'< / span > };
< / pre >
< / div >
< p >
The controller \(K_\text{IFF}\) is:
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > Kiff = < span class = "org-type" > -< / span > ((sqrt(k< span class = "org-type" > *< / span > m)< span class = "org-type" > -< / span > c)< span class = "org-type" > /< / span > m)< span class = "org-type" > /< / span > s;
Kiff.InputName = {< span class = "org-string" > 'Fm'< / span > };
Kiff.OutputName = {< span class = "org-string" > 'F'< / span > };
< / pre >
< / div >
< p >
And the closed loop system is computed below.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > sys_iff = feedback(sys, Kiff, < span class = "org-string" > 'name'< / span > , < span class = "org-type" > +< / span > 1);
< / pre >
< / div >
< div id = "org92c6747" class = "figure" >
< p > < img src = "figs/iff_1dof_sensitivitiy.png" alt = "iff_1dof_sensitivitiy.png" / >
< / p >
< p > < span class = "figure-number" > Figure 5: < / span > Sensitivity to disturbance when IFF is applied on the 1dof system (< a href = "./figs/iff_1dof_sensitivitiy.png" > png< / a > , < a href = "./figs/iff_1dof_sensitivitiy.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org824be47" class = "outline-3" >
< h3 id = "org824be47" > < span class = "section-number-3" > 2.2< / span > Control Design< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-2" >
< p >
Let’ s load the undamped plant:
< / p >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/active_damping_uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Let’ s look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor (figure < a href = "#org644e078" > 6< / a > ).
< / p >
< div id = "org644e078" class = "figure" >
< p > < img src = "figs/iff_plant.png" alt = "iff_plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 6: < / span > Transfer function from forces applied in the legs to force sensor (< a href = "./figs/iff_plant.png" > png< / a > , < a href = "./figs/iff_plant.pdf" > pdf< / a > )< / p >
< / div >
< p >
The controller for each pair of actuator/sensor is:
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > K_iff = < span class = "org-type" > -< / span > 1000< span class = "org-type" > /< / span > s;
< / pre >
< / div >
< p >
The corresponding loop gains are shown in figure < a href = "#org36e3a94" > 7< / a > .
< / p >
< div id = "org36e3a94" class = "figure" >
< p > < img src = "figs/iff_open_loop.png" alt = "iff_open_loop.png" / >
< / p >
< p > < span class = "figure-number" > Figure 7: < / span > Loop Gain for the Integral Force Feedback (< a href = "./figs/iff_open_loop.png" > png< / a > , < a href = "./figs/iff_open_loop.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orgfdd4556" class = "outline-3" >
< h3 id = "orgfdd4556" > < span class = "section-number-3" > 2.3< / span > Identification of the damped plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-3" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeReferences();
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
< / pre >
< / div >
< p >
All the controllers are set to 0.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > K = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_iff = < span class = "org-type" > -< / span > K_iff< span class = "org-type" > *< / span > eye(6);
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_rmc = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_dvf = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
We identify the system dynamics now that the IFF controller is ON.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > G_iff = identifyPlant();
< / pre >
< / div >
< p >
And we save the damped plant for further analysis
< / p >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/active_damping_uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G_iff'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org4802ab9" class = "outline-3" >
< h3 id = "org4802ab9" > < span class = "section-number-3" > 2.4< / span > Sensitivity to disturbances< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-4" >
< p >
As shown on figure < a href = "#org38217ee" > 8< / a > :
< / p >
< ul class = "org-ul" >
< li > The top platform of the nano-hexapod how behaves as a “ free-mass” .< / li >
< li > The transfer function from direct forces \(F_s\) to the relative displacement \(D\) is equivalent to the one of an isolated mass.< / li >
< li > The transfer function from ground motion \(D_g\) to the relative displacement \(D\) tends to the transfer function from \(D_g\) to the displacement of the granite (the sample is being isolated thanks to IFF).
However, as the goal is to make the relative displacement \(D\) as small as possible (e.g. to make the sample motion follows the granite motion), this is not a good thing.< / li >
< / ul >
< div id = "org38217ee" class = "figure" >
< p > < img src = "figs/sensitivity_dist_iff.png" alt = "sensitivity_dist_iff.png" / >
< / p >
< p > < span class = "figure-number" > Figure 8: < / span > Sensitivity to disturbance once the IFF controller is applied to the system (< a href = "./figs/sensitivity_dist_iff.png" > png< / a > , < a href = "./figs/sensitivity_dist_iff.pdf" > pdf< / a > )< / p >
< / div >
< div class = "warning" >
< p >
The order of the models are very high and thus the plots may be wrong.
For instance, the plots are not the same when using < code > minreal< / code > .
< / p >
< / div >
< div id = "orga9bd11d" class = "figure" >
< p > < img src = "figs/sensitivity_dist_stages_iff.png" alt = "sensitivity_dist_stages_iff.png" / >
< / p >
< p > < span class = "figure-number" > Figure 9: < / span > Sensitivity to force disturbances in various stages when IFF is applied (< a href = "./figs/sensitivity_dist_stages_iff.png" > png< / a > , < a href = "./figs/sensitivity_dist_stages_iff.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org2cbe422" class = "outline-3" >
< h3 id = "org2cbe422" > < span class = "section-number-3" > 2.5< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-5" >
< p >
Now, look at the new damped plant to control.
< / p >
< p >
It damps the plant (resonance of the nano hexapod as well as other resonances) as shown in figure < a href = "#orgd7333dd" > 10< / a > .
< / p >
< div id = "orgd7333dd" class = "figure" >
< p > < img src = "figs/plant_iff_damped.png" alt = "plant_iff_damped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 10: < / span > Damped Plant after IFF is applied (< a href = "./figs/plant_iff_damped.png" > png< / a > , < a href = "./figs/plant_iff_damped.pdf" > pdf< / a > )< / p >
< / div >
< p >
However, it increases coupling at low frequency (figure < a href = "#org8017b2f" > 11< / a > ).
< / p >
< div id = "org8017b2f" class = "figure" >
< p > < img src = "figs/plant_iff_coupling.png" alt = "plant_iff_coupling.png" / >
< / p >
< p > < span class = "figure-number" > Figure 11: < / span > Coupling induced by IFF (< a href = "./figs/plant_iff_coupling.png" > png< / a > , < a href = "./figs/plant_iff_coupling.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orgdade398" class = "outline-3" >
< h3 id = "orgdade398" > < span class = "section-number-3" > 2.6< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-6" >
< div class = "important" >
< p >
Integral Force Feedback:
< / p >
< ul class = "org-ul" >
< li > Robust (guaranteed stability)< / li >
< li > Acceptable Damping< / li >
< li > Increase the sensitivity to disturbances at low frequencies< / li >
< / ul >
< / div >
< / div >
< / div >
< / div >
< div id = "outline-container-orgc4ca1b5" class = "outline-2" >
< h2 id = "orgc4ca1b5" > < span class = "section-number-2" > 3< / span > Relative Motion Control< / h2 >
< div class = "outline-text-2" id = "text-3" >
< p >
< a id = "org8dc40dc" > < / a >
< / p >
< div class = "note" >
< p >
All the files (data and Matlab scripts) are accessible < a href = "data/rmc.zip" > here< / a > .
< / p >
< / div >
< p >
In the Relative Motion Control (RMC), a derivative feedback is applied between the measured actuator displacement to the actuator force input.
< / p >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org39a3687" class = "outline-3" >
< h3 id = "org39a3687" > < span class = "section-number-3" > 3.1< / span > One degree-of-freedom example< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-1" >
< p >
< a id = "org6f16e09" > < / a >
< / p >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org994b142" class = "outline-4" >
< h4 id = "org994b142" > < span class = "section-number-4" > 3.1.1< / span > Equations< / h4 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-4" id = "text-3-1-1" >
< div id = "org64900ec" class = "figure" >
< p > < img src = "figs/rmc_1dof.png" alt = "rmc_1dof.png" / >
< / p >
< p > < span class = "figure-number" > Figure 12: < / span > Relative Motion Control applied to a 1dof system< / p >
< / div >
< p >
The dynamic of the system is:
< / p >
\begin{equation}
ms^2x = F_d - kx - csx + kw + csw + F
\end{equation}
< p >
In terms of the stage deformation \(d = x - w\):
< / p >
\begin{equation}
(ms^2 + cs + k) d = -ms^2 w + F_d + F
\end{equation}
< p >
The relative motion control law is:
< / p >
\begin{equation}
K = -g s
\end{equation}
< p >
Thus, the applied force is:
< / p >
\begin{equation}
F = -g s d
\end{equation}
< p >
And the new dynamics will be:
< / p >
\begin{equation}
d = w \frac{-ms^2}{ms^2 + (c + g)s + k} + F_d \frac{1}{ms^2 + (c + g)s + k} + F \frac{1}{ms^2 + (c + g)s + k}
\end{equation}
< p >
And thus damping is added.
< / p >
< p >
If critical damping is wanted:
< / p >
\begin{equation}
\xi = \frac{1}{2}\frac{c + g}{\sqrt{km}} = \frac{1}{2}
\end{equation}
< p >
This corresponds to a gain:
< / p >
\begin{equation}
g = \sqrt{km} - c
\end{equation}
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org6a1f411" class = "outline-4" >
< h4 id = "org6a1f411" > < span class = "section-number-4" > 3.1.2< / span > Matlab Example< / h4 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-4" id = "text-3-1-2" >
< p >
Let define the system parameters.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > m = 50; < span class = "org-comment" > % [kg]< / span >
k = 1e6; < span class = "org-comment" > % [N/m]< / span >
c = 1e3; < span class = "org-comment" > % [N/(m/s)]< / span >
< / pre >
< / div >
< p >
The state space model of the system is defined below.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > A = [< span class = "org-type" > -< / span > c< span class = "org-type" > /< / span > m < span class = "org-type" > -< / span > k< span class = "org-type" > /< / span > m;
1 0];
B = [1< span class = "org-type" > /< / span > m 1< span class = "org-type" > /< / span > m < span class = "org-type" > -< / span > 1;
0 0 0];
C = [ 0 1;
< span class = "org-type" > -< / span > c < span class = "org-type" > -< / span > k];
D = [0 0 0;
1 0 0];
sys = ss(A, B, C, D);
sys.InputName = {< span class = "org-string" > 'F'< / span > , < span class = "org-string" > 'Fd'< / span > , < span class = "org-string" > 'wddot'< / span > };
sys.OutputName = {< span class = "org-string" > 'd'< / span > , < span class = "org-string" > 'Fm'< / span > };
sys.StateName = {< span class = "org-string" > 'ddot'< / span > , < span class = "org-string" > 'd'< / span > };
< / pre >
< / div >
< p >
The controller \(K_\text{RMC}\) is:
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > Krmc = < span class = "org-type" > -< / span > (sqrt(k< span class = "org-type" > *< / span > m)< span class = "org-type" > -< / span > c)< span class = "org-type" > *< / span > s;
Krmc.InputName = {< span class = "org-string" > 'd'< / span > };
Krmc.OutputName = {< span class = "org-string" > 'F'< / span > };
< / pre >
< / div >
< p >
And the closed loop system is computed below.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > sys_rmc = feedback(sys, Krmc, < span class = "org-string" > 'name'< / span > , < span class = "org-type" > +< / span > 1);
< / pre >
< / div >
< div id = "orgaedc5af" class = "figure" >
< p > < img src = "figs/rmc_1dof_sensitivitiy.png" alt = "rmc_1dof_sensitivitiy.png" / >
< / p >
< p > < span class = "figure-number" > Figure 13: < / span > Sensitivity to disturbance when RMC is applied on the 1dof system (< a href = "./figs/rmc_1dof_sensitivitiy.png" > png< / a > , < a href = "./figs/rmc_1dof_sensitivitiy.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org13a97a7" class = "outline-3" >
< h3 id = "org13a97a7" > < span class = "section-number-3" > 3.2< / span > Control Design< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-2" >
< p >
Let’ s load the undamped plant:
< / p >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/active_damping_uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Let’ s look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor (figure < a href = "#orga93b3b1" > 14< / a > ).
< / p >
< div id = "orga93b3b1" class = "figure" >
< p > < img src = "figs/rmc_plant.png" alt = "rmc_plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 14: < / span > Transfer function from forces applied in the legs to leg displacement sensor (< a href = "./figs/rmc_plant.png" > png< / a > , < a href = "./figs/rmc_plant.pdf" > pdf< / a > )< / p >
< / div >
< p >
The Relative Motion Controller is defined below.
A Low pass Filter is added to make the controller transfer function proper.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > K_rmc = s< span class = "org-type" > *< / span > 50000< 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 > 10000);
< / pre >
< / div >
< p >
The obtained loop gains are shown in figure < a href = "#orga5b8f12" > 15< / a > .
< / p >
< div id = "orga5b8f12" class = "figure" >
< p > < img src = "figs/rmc_open_loop.png" alt = "rmc_open_loop.png" / >
< / p >
< p > < span class = "figure-number" > Figure 15: < / span > Loop Gain for the Integral Force Feedback (< a href = "./figs/rmc_open_loop.png" > png< / a > , < a href = "./figs/rmc_open_loop.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orge00b37b" class = "outline-3" >
< h3 id = "orge00b37b" > < span class = "section-number-3" > 3.3< / span > Identification of the damped plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-3" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeReferences();
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
< / pre >
< / div >
< p >
And initialize the controllers.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > K = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_iff = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_rmc = < span class = "org-type" > -< / span > K_rmc< span class = "org-type" > *< / span > eye(6);
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_dvf = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
We identify the system dynamics now that the RMC controller is ON.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > G_rmc = identifyPlant();
< / pre >
< / div >
< p >
And we save the damped plant for further analysis.
< / p >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/active_damping_uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orgcd3874b" class = "outline-3" >
< h3 id = "orgcd3874b" > < span class = "section-number-3" > 3.4< / span > Sensitivity to disturbances< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-4" >
< p >
As shown in figure < a href = "#org58aec78" > 16< / a > , RMC control succeed in lowering the sensitivity to disturbances near resonance of the system.
< / p >
< div id = "org58aec78" class = "figure" >
< p > < img src = "figs/sensitivity_dist_rmc.png" alt = "sensitivity_dist_rmc.png" / >
< / p >
< p > < span class = "figure-number" > Figure 16: < / span > Sensitivity to disturbance once the RMC controller is applied to the system (< a href = "./figs/sensitivity_dist_rmc.png" > png< / a > , < a href = "./figs/sensitivity_dist_rmc.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org72cd54b" class = "figure" >
< p > < img src = "figs/sensitivity_dist_stages_rmc.png" alt = "sensitivity_dist_stages_rmc.png" / >
< / p >
< p > < span class = "figure-number" > Figure 17: < / span > Sensitivity to force disturbances in various stages when RMC is applied (< a href = "./figs/sensitivity_dist_stages_rmc.png" > png< / a > , < a href = "./figs/sensitivity_dist_stages_rmc.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orgfcc3787" class = "outline-3" >
< h3 id = "orgfcc3787" > < span class = "section-number-3" > 3.5< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-5" >
< div id = "org2267bd4" class = "figure" >
< p > < img src = "figs/plant_rmc_damped.png" alt = "plant_rmc_damped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 18: < / span > Damped Plant after RMC is applied (< a href = "./figs/plant_rmc_damped.png" > png< / a > , < a href = "./figs/plant_rmc_damped.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org37ceb38" class = "outline-3" >
< h3 id = "org37ceb38" > < span class = "section-number-3" > 3.6< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-6" >
< div class = "important" >
< p >
Relative Motion Control:
< / p >
< ul class = "org-ul" >
< li > < / li >
< / ul >
< / div >
< / div >
< / div >
< / div >
< div id = "outline-container-org3cc03b0" class = "outline-2" >
< h2 id = "org3cc03b0" > < span class = "section-number-2" > 4< / span > Direct Velocity Feedback< / h2 >
< div class = "outline-text-2" id = "text-4" >
< p >
< a id = "orge3322d7" > < / a >
< / p >
< div class = "note" >
< p >
All the files (data and Matlab scripts) are accessible < a href = "data/dvf.zip" > here< / a > .
< / p >
< / div >
< p >
In the Relative Motion Control (RMC), a feedback is applied between the measured velocity of the platform to the actuator force input.
< / p >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org20ee26e" class = "outline-3" >
< h3 id = "org20ee26e" > < span class = "section-number-3" > 4.1< / span > One degree-of-freedom example< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-1" >
< p >
< a id = "org3a699cb" > < / a >
< / p >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org0d2ea8d" class = "outline-4" >
< h4 id = "org0d2ea8d" > < span class = "section-number-4" > 4.1.1< / span > Equations< / h4 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-4" id = "text-4-1-1" >
< div id = "org93ae6e4" class = "figure" >
< p > < img src = "figs/dvf_1dof.png" alt = "dvf_1dof.png" / >
< / p >
< p > < span class = "figure-number" > Figure 19: < / span > Direct Velocity Feedback applied to a 1dof system< / p >
< / div >
< p >
The dynamic of the system is:
< / p >
\begin{equation}
ms^2x = F_d - kx - csx + kw + csw + F
\end{equation}
< p >
In terms of the stage deformation \(d = x - w\):
< / p >
\begin{equation}
(ms^2 + cs + k) d = -ms^2 w + F_d + F
\end{equation}
< p >
The direct velocity feedback law shown in figure < a href = "#org93ae6e4" > 19< / a > is:
< / p >
\begin{equation}
K = -g
\end{equation}
< p >
Thus, the applied force is:
< / p >
\begin{equation}
F = -g \dot{x}
\end{equation}
< p >
And the new dynamics will be:
< / p >
\begin{equation}
d = w \frac{-ms^2 - gs}{ms^2 + (c + g)s + k} + F_d \frac{1}{ms^2 + (c + g)s + k} + F \frac{1}{ms^2 + (c + g)s + k}
\end{equation}
< p >
And thus damping is added.
< / p >
< p >
If critical damping is wanted:
< / p >
\begin{equation}
\xi = \frac{1}{2}\frac{c + g}{\sqrt{km}} = \frac{1}{2}
\end{equation}
< p >
This corresponds to a gain:
< / p >
\begin{equation}
g = \sqrt{km} - c
\end{equation}
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orgaddbb82" class = "outline-4" >
< h4 id = "orgaddbb82" > < span class = "section-number-4" > 4.1.2< / span > Matlab Example< / h4 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-4" id = "text-4-1-2" >
< p >
Let define the system parameters.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > m = 50; < span class = "org-comment" > % [kg]< / span >
k = 1e6; < span class = "org-comment" > % [N/m]< / span >
c = 1e3; < span class = "org-comment" > % [N/(m/s)]< / span >
< / pre >
< / div >
< p >
The state space model of the system is defined below.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > A = [< span class = "org-type" > -< / span > c< span class = "org-type" > /< / span > m < span class = "org-type" > -< / span > k< span class = "org-type" > /< / span > m;
1 0];
B = [1< span class = "org-type" > /< / span > m 1< span class = "org-type" > /< / span > m < span class = "org-type" > -< / span > 1;
0 0 0];
C = [1 0;
0 1;
0 0];
D = [0 0 0;
0 0 0;
0 0 1];
sys = ss(A, B, C, D);
sys.InputName = {< span class = "org-string" > 'F'< / span > , < span class = "org-string" > 'Fd'< / span > , < span class = "org-string" > 'wddot'< / span > };
sys.OutputName = {< span class = "org-string" > 'ddot'< / span > , < span class = "org-string" > 'd'< / span > , < span class = "org-string" > 'wddot'< / span > };
sys.StateName = {< span class = "org-string" > 'ddot'< / span > , < span class = "org-string" > 'd'< / span > };
< / pre >
< / div >
< p >
Because we need \(\dot{x}\) for feedback, we compute it from the outputs
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > G_xdot = [1, 0, 1< span class = "org-type" > /< / span > s;
0, 1, 0];
G_xdot.InputName = {< span class = "org-string" > 'ddot'< / span > , < span class = "org-string" > 'd'< / span > , < span class = "org-string" > 'wddot'< / span > };
G_xdot.OutputName = {< span class = "org-string" > 'xdot'< / span > , < span class = "org-string" > 'd'< / span > };
< / pre >
< / div >
< p >
Finally, the system is described by < code > sys< / code > as defined below.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > sys = series(sys, G_xdot, [1 2 3], [1 2 3]);
< / pre >
< / div >
< p >
The controller \(K_\text{DVF}\) is:
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > Kdvf = tf(< span class = "org-type" > -< / span > (sqrt(k< span class = "org-type" > *< / span > m)< span class = "org-type" > -< / span > c));
Kdvf.InputName = {< span class = "org-string" > 'xdot'< / span > };
Kdvf.OutputName = {< span class = "org-string" > 'F'< / span > };
< / pre >
< / div >
< p >
And the closed loop system is computed below.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > sys_dvf = feedback(sys, Kdvf, < span class = "org-string" > 'name'< / span > , < span class = "org-type" > +< / span > 1);
< / pre >
< / div >
< p >
The obtained sensitivity to disturbances is shown in figure < a href = "#org1c3277a" > 20< / a > .
< / p >
< div id = "org1c3277a" class = "figure" >
< p > < img src = "figs/dvf_1dof_sensitivitiy.png" alt = "dvf_1dof_sensitivitiy.png" / >
< / p >
< p > < span class = "figure-number" > Figure 20: < / span > Sensitivity to disturbance when DVF is applied on the 1dof system (< a href = "./figs/dvf_1dof_sensitivitiy.png" > png< / a > , < a href = "./figs/dvf_1dof_sensitivitiy.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orgf1bd80b" class = "outline-3" >
< h3 id = "orgf1bd80b" > < span class = "section-number-3" > 4.2< / span > Control Design< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-2" >
< p >
Let’ s load the undamped plant:
< / p >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/active_damping_uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Let’ s look at the transfer function from actuator forces in the nano-hexapod to the measured velocity of the nano-hexapod platform in the direction of the corresponding actuator for all 6 pairs of actuator/sensor (figure < a href = "#org0e1d7de" > 21< / a > ).
< / p >
< div id = "org0e1d7de" class = "figure" >
< p > < img src = "figs/dvf_plant.png" alt = "dvf_plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 21: < / span > Transfer function from forces applied in the legs to leg velocity sensor (< a href = "./figs/dvf_plant.png" > png< / a > , < a href = "./figs/dvf_plant.pdf" > pdf< / a > )< / p >
< / div >
< p >
The controller is defined below and the obtained loop gain is shown in figure < a href = "#org1e696e9" > 22< / a > .
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > K_dvf = tf(3e4);
< / pre >
< / div >
< div id = "org1e696e9" class = "figure" >
< p > < img src = "figs/dvf_open_loop_gain.png" alt = "dvf_open_loop_gain.png" / >
< / p >
< p > < span class = "figure-number" > Figure 22: < / span > Loop Gain for DVF (< a href = "./figs/dvf_open_loop_gain.png" > png< / a > , < a href = "./figs/dvf_open_loop_gain.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org54ebde8" class = "outline-3" >
< h3 id = "org54ebde8" > < span class = "section-number-3" > 4.3< / span > Identification of the damped plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-3" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeReferences();
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
< / pre >
< / div >
< p >
And initialize the controllers.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > K = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_iff = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_rmc = tf(zeros(6));
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
K_dvf = < span class = "org-type" > -< / span > K_dvf< span class = "org-type" > *< / span > eye(6);
2020-03-13 17:40:22 +01:00
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
We identify the system dynamics now that the RMC controller is ON.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > G_dvf = identifyPlant();
< / pre >
< / div >
< p >
And we save the damped plant for further analysis.
< / p >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/active_damping_uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org454c0c8" class = "outline-3" >
< h3 id = "org454c0c8" > < span class = "section-number-3" > 4.4< / span > Sensitivity to disturbances< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-4" >
< div id = "org2558226" class = "figure" >
< p > < img src = "figs/sensitivity_dist_dvf.png" alt = "sensitivity_dist_dvf.png" / >
< / p >
< p > < span class = "figure-number" > Figure 23: < / span > Sensitivity to disturbance once the DVF controller is applied to the system (< a href = "./figs/sensitivity_dist_dvf.png" > png< / a > , < a href = "./figs/sensitivity_dist_dvf.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org649f2c8" class = "figure" >
< p > < img src = "figs/sensitivity_dist_stages_dvf.png" alt = "sensitivity_dist_stages_dvf.png" / >
< / p >
< p > < span class = "figure-number" > Figure 24: < / span > Sensitivity to force disturbances in various stages when DVF is applied (< a href = "./figs/sensitivity_dist_stages_dvf.png" > png< / a > , < a href = "./figs/sensitivity_dist_stages_dvf.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org5f21dd1" class = "outline-3" >
< h3 id = "org5f21dd1" > < span class = "section-number-3" > 4.5< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-5" >
< div id = "org2fa3671" class = "figure" >
< p > < img src = "figs/plant_dvf_damped.png" alt = "plant_dvf_damped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 25: < / span > Damped Plant after DVF is applied (< a href = "./figs/plant_dvf_damped.png" > png< / a > , < a href = "./figs/plant_dvf_damped.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org53572a3" class = "outline-3" >
< h3 id = "org53572a3" > < span class = "section-number-3" > 4.6< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-6" >
< div class = "important" >
< p >
Direct Velocity Feedback:
< / p >
< / div >
< / div >
< / div >
< / div >
< div id = "outline-container-org21441bc" class = "outline-2" >
< h2 id = "org21441bc" > < span class = "section-number-2" > 5< / span > Comparison< / h2 >
< div class = "outline-text-2" id = "text-5" >
< p >
< a id = "org2dcea31" > < / a >
< / p >
< / div >
< div id = "outline-container-orgbe907b4" class = "outline-3" >
< h3 id = "orgbe907b4" > < span class = "section-number-3" > 5.1< / span > Load the plants< / h3 >
< div class = "outline-text-3" id = "text-5-1" >
< div class = "org-src-container" >
2020-03-13 17:40:22 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/active_damping_uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > , < span class = "org-string" > 'G_iff'< / span > , < span class = "org-string" > 'G_rmc'< / span > , < span class = "org-string" > 'G_dvf'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-orgde6308d" class = "outline-3" >
< h3 id = "orgde6308d" > < span class = "section-number-3" > 5.2< / span > Sensitivity to Disturbance< / h3 >
< div class = "outline-text-3" id = "text-5-2" >
< div id = "orgfde858b" class = "figure" >
< p > < img src = "figs/sensitivity_comp_ground_motion_z.png" alt = "sensitivity_comp_ground_motion_z.png" / >
< / p >
< p > < span class = "figure-number" > Figure 26: < / span > caption (< a href = "./figs/sensitivity_comp_ground_motion_z.png" > png< / a > , < a href = "./figs/sensitivity_comp_ground_motion_z.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org8aab19c" class = "figure" >
< p > < img src = "figs/sensitivity_comp_direct_forces_z.png" alt = "sensitivity_comp_direct_forces_z.png" / >
< / p >
< p > < span class = "figure-number" > Figure 27: < / span > caption (< a href = "./figs/sensitivity_comp_direct_forces_z.png" > png< / a > , < a href = "./figs/sensitivity_comp_direct_forces_z.pdf" > pdf< / a > )< / p >
< / div >
< div id = "orgfffe60e" class = "figure" >
< p > < img src = "figs/sensitivity_comp_spindle_z.png" alt = "sensitivity_comp_spindle_z.png" / >
< / p >
< p > < span class = "figure-number" > Figure 28: < / span > caption (< a href = "./figs/sensitivity_comp_spindle_z.png" > png< / a > , < a href = "./figs/sensitivity_comp_spindle_z.pdf" > pdf< / a > )< / p >
< / div >
< div id = "orga94d0ef" class = "figure" >
< p > < img src = "figs/sensitivity_comp_ty_z.png" alt = "sensitivity_comp_ty_z.png" / >
< / p >
< p > < span class = "figure-number" > Figure 29: < / span > caption (< a href = "./figs/sensitivity_comp_ty_z.png" > png< / a > , < a href = "./figs/sensitivity_comp_ty_z.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org94a317f" class = "figure" >
< p > < img src = "figs/sensitivity_comp_ty_x.png" alt = "sensitivity_comp_ty_x.png" / >
< / p >
< p > < span class = "figure-number" > Figure 30: < / span > caption (< a href = "./figs/sensitivity_comp_ty_x.png" > png< / a > , < a href = "./figs/sensitivity_comp_ty_x.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-orga1cf9f2" class = "outline-3" >
< h3 id = "orga1cf9f2" > < span class = "section-number-3" > 5.3< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-3" >
< div id = "org043ecf3" class = "figure" >
< p > < img src = "figs/plant_comp_damping_z.png" alt = "plant_comp_damping_z.png" / >
< / p >
< p > < span class = "figure-number" > Figure 31: < / span > Plant for the \(z\) direction for different active damping technique used (< a href = "./figs/plant_comp_damping_z.png" > png< / a > , < a href = "./figs/plant_comp_damping_z.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org20c1ba1" class = "figure" >
< p > < img src = "figs/plant_comp_damping_x.png" alt = "plant_comp_damping_x.png" / >
< / p >
< p > < span class = "figure-number" > Figure 32: < / span > Plant for the \(x\) direction for different active damping technique used (< a href = "./figs/plant_comp_damping_x.png" > png< / a > , < a href = "./figs/plant_comp_damping_x.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org22f4195" class = "figure" >
< p > < img src = "figs/plant_comp_damping_coupling.png" alt = "plant_comp_damping_coupling.png" / >
< / p >
< p > < span class = "figure-number" > Figure 33: < / span > Comparison of one off-diagonal plant for different damping technique applied (< a href = "./figs/plant_comp_damping_coupling.png" > png< / a > , < a href = "./figs/plant_comp_damping_coupling.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
< / div >
2020-03-13 17:40:22 +01:00
< div id = "outline-container-org4d89cbd" class = "outline-2" >
< h2 id = "org4d89cbd" > < span class = "section-number-2" > 6< / span > Conclusion< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-6" >
< p >
< a id = "org58549a4" > < / a >
< / p >
< / div >
< / div >
< / div >
< div id = "postamble" class = "status" >
< p class = "author" > Author: Dehaeze Thomas< / p >
2020-03-13 17:40:22 +01:00
< p class = "date" > Created: 2020-03-13 ven. 17:39< / p >
2020-02-25 18:10:20 +01:00
< / div >
< / body >
< / html >