2020-04-07 15:26:29 +02: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-04-07 19:34:05 +02:00
<!-- 2020 - 04 - 07 mar. 19:33 -->
2020-04-07 15:26:29 +02:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > Determination of the optimal nano-hexapod’ s stiffness for reducing the effect of disturbances< / 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 >
< 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 >
< script type = "text/javascript" >
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050& dn=gpl-3.0.txt GPL-v3-or-Later
<!-- /* --> <![CDATA[/*> <!-- */
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
< / script >
< script >
MathJax = {
2020-04-07 17:10:39 +02:00
tex: {
tags: 'ams',
macros: {
2020-04-07 15:26:29 +02:00
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" >
< a accesskey = "h" href = "index.html" > UP < / a >
|
< a accesskey = "H" href = "index.html" > HOME < / a >
< / div > < div id = "content" >
< h1 class = "title" > Determination of the optimal nano-hexapod’ s stiffness for reducing the effect of disturbances< / h1 >
< div id = "table-of-contents" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
2020-04-07 15:58:26 +02:00
< li > < a href = "#org9e9f810" > 1. Disturbances< / a > < / li >
2020-04-07 15:26:29 +02:00
< li > < a href = "#orgc44cf7e" > 2. Effect of disturbances on the position error< / a >
< ul >
< li > < a href = "#org524df41" > 2.1. Initialization< / a > < / li >
< li > < a href = "#orgaf88c9f" > 2.2. Identification< / a > < / li >
2020-04-07 15:58:26 +02:00
< li > < a href = "#org78dd34d" > 2.3. Sensitivity to Stages vibration (Filtering)< / a > < / li >
< li > < a href = "#orgd4ea2f4" > 2.4. Effect of Ground motion (Transmissibility).< / a > < / li >
< li > < a href = "#org0448746" > 2.5. Direct Forces (Compliance).< / a > < / li >
2020-04-07 19:34:05 +02:00
< li > < a href = "#orga29f90b" > 2.6. Conclusion< / a > < / li >
2020-04-07 15:26:29 +02:00
< / ul >
< / li >
< li > < a href = "#org6527e58" > 3. Effect of granite stiffness< / a >
< ul >
2020-04-07 17:10:39 +02:00
< li > < a href = "#orgd3e5fe1" > 3.1. Analytical Analysis< / a >
< ul >
< li > < a href = "#orgbc34a65" > 3.1.1. Simple mass-spring-damper model< / a > < / li >
< li > < a href = "#org4ddec32" > 3.1.2. General Case< / a > < / li >
< / ul >
< / li >
2020-04-07 15:26:29 +02:00
< li > < a href = "#org9215f81" > 3.2. Soft Granite< / a > < / li >
< li > < a href = "#org8878556" > 3.3. Effect of the Granite transfer function< / a > < / li >
2020-04-07 19:34:05 +02:00
< li > < a href = "#org6362e01" > 3.4. Conclusion< / a > < / li >
2020-04-07 15:26:29 +02:00
< / ul >
< / li >
< li > < a href = "#org8a88fb0" > 4. Open Loop Budget Error< / a >
< ul >
2020-04-07 19:34:05 +02:00
< li > < a href = "#org6bd588f" > 4.1. Noise Budgeting - Theory< / a > < / li >
< li > < a href = "#orgcc86f59" > 4.2. Power Spectral Densities< / a > < / li >
< li > < a href = "#orgef96b89" > 4.3. Cumulative Amplitude Spectrum< / a > < / li >
< li > < a href = "#org2852fc6" > 4.4. Conclusion< / a > < / li >
2020-04-07 15:26:29 +02:00
< / ul >
< / li >
< li > < a href = "#org34c0f38" > 5. Closed Loop Budget Error< / a >
< ul >
2020-04-07 19:34:05 +02:00
< li > < a href = "#orgdfef0eb" > 5.1. Approximation of the effect of feedback on the motion error< / a > < / li >
< li > < a href = "#orgf2d36a1" > 5.2. Reduction thanks to feedback - Required bandwidth< / a > < / li >
2020-04-07 15:26:29 +02:00
< / ul >
< / li >
2020-04-07 19:34:05 +02:00
< li > < a href = "#orge784867" > 6. Conclusion< / a > < / li >
2020-04-07 15:26:29 +02:00
< / ul >
< / div >
< / div >
2020-04-07 15:58:26 +02:00
< p >
In this document is studied how the stiffness of the nano-hexapod will impact the effect of disturbances on the position error of the sample.
< / p >
2020-04-07 15:26:29 +02:00
2020-04-07 15:58:26 +02:00
< p >
It is divided in the following sections:
< / p >
2020-04-07 15:26:29 +02:00
< ul class = "org-ul" >
2020-04-07 15:58:26 +02:00
< li > Section < a href = "#org17d3d6a" > 1< / a > : the disturbances are listed and their Power Spectral Densities (PSD) are shown< / li >
< li > Section < a href = "#orgf9e4300" > 2< / a > : the transfer functions from disturbances to the position error of the sample are computed for a wide range of nano-hexapod stiffnesses< / li >
< li > Section < a href = "#orgd4105b6" > 3< / a > :< / li >
< li > Section < a href = "#org5d05990" > 4< / a > : from both the PSD of the disturbances and the transfer function from disturbances to sample’ s position errors, we compute the resulting PSD and Cumulative Amplitude Spectrum (CAS)< / li >
< li > Section < a href = "#orgd3503fb" > 5< / a > : from a simplistic model is computed the required control bandwidth to reduce the position error to acceptable values< / li >
2020-04-07 15:26:29 +02:00
< / ul >
2020-04-07 15:58:26 +02:00
< div id = "outline-container-org9e9f810" class = "outline-2" >
< h2 id = "org9e9f810" > < span class = "section-number-2" > 1< / span > Disturbances< / h2 >
2020-04-07 15:26:29 +02:00
< div class = "outline-text-2" id = "text-1" >
< p >
< a id = "org17d3d6a" > < / a >
< / p >
< p >
2020-04-07 15:58:26 +02:00
The main disturbances considered here are:
< / p >
< ul class = "org-ul" >
< li > \(D_w\): Ground displacement in the \(x\), \(y\) and \(z\) directions< / li >
< li > \(F_{ty}\): Forces applied by the Translation stage in the \(x\) and \(z\) directions< / li >
< li > \(F_{rz}\): Forces applied by the Spindle in the \(z\) direction< / li >
< li > \(F_d\): Direct forces applied at the center of mass of the Payload< / li >
< / ul >
< p >
The level of these disturbances has been identified form experiments which are detailed in < a href = "disturbances.html" > this< / a > document.
< / p >
< p >
The measured Amplitude Spectral Densities (ASD) of these forces are shown in Figures < a href = "#org6b4e47c" > 1< / a > and < a href = "#orgb7b8e77" > 2< / a > .
< / p >
< p >
In this study, the expected frequency content of the direct forces applied to the payload is not considered.
< / p >
< div id = "org6b4e47c" class = "figure" >
< p > < img src = "figs/opt_stiff_dist_gm.png" alt = "opt_stiff_dist_gm.png" / >
2020-04-07 15:26:29 +02:00
< / p >
2020-04-07 15:58:26 +02:00
< p > < span class = "figure-number" > Figure 1: < / span > Amplitude Spectral Density of the Ground Displacement (< a href = "./figs/opt_stiff_dist_gm.png" > png< / a > , < a href = "./figs/opt_stiff_dist_gm.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
2020-04-07 15:58:26 +02:00
< div id = "orgb7b8e77" class = "figure" >
< p > < img src = "figs/opt_stiff_dist_fty_frz.png" alt = "opt_stiff_dist_fty_frz.png" / >
< / p >
< p > < span class = "figure-number" > Figure 2: < / span > Amplitude Spectral Density of the “ parasitic” forces comming from the Translation stage and the spindle (< a href = "./figs/opt_stiff_dist_fty_frz.png" > png< / a > , < a href = "./figs/opt_stiff_dist_fty_frz.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
< / div >
< div id = "outline-container-orgc44cf7e" class = "outline-2" >
< h2 id = "orgc44cf7e" > < span class = "section-number-2" > 2< / span > Effect of disturbances on the position error< / h2 >
< div class = "outline-text-2" id = "text-2" >
< p >
< a id = "orgf9e4300" > < / a >
< / p >
2020-04-07 15:58:26 +02:00
< p >
In this section, we use the Simscape model to identify the transfer function from disturbances to the position error of the sample.
We do that for a wide range of nano-hexapod stiffnesses and we compare the obtained results.
< / p >
2020-04-07 15:26:29 +02:00
< / div >
< div id = "outline-container-org524df41" class = "outline-3" >
< h3 id = "org524df41" > < span class = "section-number-3" > 2.1< / span > Initialization< / h3 >
< div class = "outline-text-3" id = "text-2-1" >
< p >
We initialize all the stages with the default parameters.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
< / pre >
< / div >
< p >
We use a sample mass of 10kg.
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeSample(< span class = "org-string" > 'mass'< / span > , 10);
< / pre >
< / div >
2020-04-07 15:58:26 +02:00
< p >
We include gravity, and we use no controller.
< / p >
2020-04-07 15:26:29 +02:00
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeSimscapeConfiguration(< span class = "org-string" > 'gravity'< / span > , < span class = "org-constant" > true< / span > );
2020-04-07 15:58:26 +02:00
initializeController();
2020-04-07 15:26:29 +02:00
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 > );
< / pre >
< / div >
< / div >
< / div >
< div id = "outline-container-orgaf88c9f" class = "outline-3" >
< h3 id = "orgaf88c9f" > < span class = "section-number-3" > 2.2< / span > Identification< / h3 >
< div class = "outline-text-3" id = "text-2-2" >
< p >
2020-04-07 15:58:26 +02:00
The considered inputs are:
2020-04-07 15:26:29 +02:00
< / p >
< ul class = "org-ul" >
< li > < code > Dwx< / code > : Ground displacement in the \(x\) direction< / li >
< li > < code > Dwy< / code > : Ground displacement in the \(y\) direction< / li >
< li > < code > Dwz< / code > : Ground displacement in the \(z\) direction< / li >
< li > < code > Fty_x< / code > : Forces applied by the Translation stage in the \(x\) direction< / li >
< li > < code > Fty_z< / code > : Forces applied by the Translation stage in the \(z\) direction< / li >
< li > < code > Frz_z< / code > : Forces applied by the Spindle in the \(z\) direction< / li >
< li > < code > Fd< / code > : Direct forces applied at the center of mass of the Payload< / li >
< / ul >
2020-04-07 15:58:26 +02:00
< p >
The outputs are < code > Ex< / code > , < code > Ey< / code > , < code > Ez< / code > , < code > Erx< / code > , < code > Ery< / code > , < code > Erz< / code > which are the 3 positions and 3 orientations errors of the sample.
< / p >
< p >
We initialize the set of the nano-hexapod stiffnesses, and for each of them, we identify the dynamics from defined inputs to defined outputs.
< / p >
2020-04-07 15:26:29 +02:00
< div class = "org-src-container" >
< pre class = "src src-matlab" > Ks = logspace(3,9,7); < span class = "org-comment" > % [N/m]< / span >
< / pre >
< / div >
2020-04-07 15:58:26 +02:00
< / div >
< / div >
2020-04-07 15:26:29 +02:00
2020-04-07 15:58:26 +02:00
< div id = "outline-container-org78dd34d" class = "outline-3" >
< h3 id = "org78dd34d" > < span class = "section-number-3" > 2.3< / span > Sensitivity to Stages vibration (Filtering)< / h3 >
< div class = "outline-text-3" id = "text-2-3" >
< p >
The sensitivity the stage vibrations are displayed:
< / p >
< ul class = "org-ul" >
< li > Figure < a href = "#orgf55ba1b" > 3< / a > : sensitivity to vertical spindle vibrations< / li >
< li > Figure < a href = "#orgce1ac2c" > 4< / a > : sensitivity to vertical translation stage vibrations< / li >
< li > Figure < a href = "#org1a24ee2" > 5< / a > : sensitivity to horizontal (x) translation stage vibrations< / li >
< / ul >
< div id = "orgf55ba1b" class = "figure" >
< p > < img src = "figs/opt_stiff_sensitivity_Frz.png" alt = "opt_stiff_sensitivity_Frz.png" / >
< / p >
< p > < span class = "figure-number" > Figure 3: < / span > Sensitivity to Spindle vertical motion error (\(F_{rz}\)) to the vertical error position of the sample (\(E_z\)) (< a href = "./figs/opt_stiff_sensitivity_Frz.png" > png< / a > , < a href = "./figs/opt_stiff_sensitivity_Frz.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
2020-04-07 15:58:26 +02:00
< div id = "orgce1ac2c" class = "figure" >
< p > < img src = "figs/opt_stiff_sensitivity_Fty_z.png" alt = "opt_stiff_sensitivity_Fty_z.png" / >
< / p >
< p > < span class = "figure-number" > Figure 4: < / span > Sensitivity to Translation stage vertical motion error (\(F_{ty,z}\)) to the vertical error position of the sample (\(E_z\)) (< a href = "./figs/opt_stiff_sensitivity_Fty_z.png" > png< / a > , < a href = "./figs/opt_stiff_sensitivity_Fty_z.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org1a24ee2" class = "figure" >
< p > < img src = "figs/opt_stiff_sensitivity_Fty_x.png" alt = "opt_stiff_sensitivity_Fty_x.png" / >
< / p >
< p > < span class = "figure-number" > Figure 5: < / span > Sensitivity to Translation stage \(x\) motion error (\(F_{ty,x}\)) to the error position of the sample in the \(x\) direction (\(E_x\)) (< a href = "./figs/opt_stiff_sensitivity_Fty_x.png" > png< / a > , < a href = "./figs/opt_stiff_sensitivity_Fty_x.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
< / div >
2020-04-07 15:58:26 +02:00
< div id = "outline-container-orgd4ea2f4" class = "outline-3" >
< h3 id = "orgd4ea2f4" > < span class = "section-number-3" > 2.4< / span > Effect of Ground motion (Transmissibility).< / h3 >
< div class = "outline-text-3" id = "text-2-4" >
2020-04-07 15:26:29 +02:00
< p >
2020-04-07 15:58:26 +02:00
The effect of Ground motion on the position error of the sample is shown in Figure < a href = "#org212587b" > 6< / a > .
< / p >
< div id = "org212587b" class = "figure" >
< p > < img src = "figs/opt_stiff_sensitivity_Dw.png" alt = "opt_stiff_sensitivity_Dw.png" / >
2020-04-07 15:26:29 +02:00
< / p >
2020-04-07 15:58:26 +02:00
< p > < span class = "figure-number" > Figure 6: < / span > Sensitivity to Ground motion (\(D_{w}\)) to the position error of the sample (\(E_y\) and \(E_z\)) (< a href = "./figs/opt_stiff_sensitivity_Dw.png" > png< / a > , < a href = "./figs/opt_stiff_sensitivity_Dw.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
2020-04-07 15:58:26 +02:00
< / div >
< div id = "outline-container-org0448746" class = "outline-3" >
< h3 id = "org0448746" > < span class = "section-number-3" > 2.5< / span > Direct Forces (Compliance).< / h3 >
< div class = "outline-text-3" id = "text-2-5" >
< p >
The effect of direct forces/torques applied on the sample (cable forces for instance) on the position error of the sample is shown in Figure < a href = "#orga33395f" > 7< / a > .
< / p >
< div id = "orga33395f" class = "figure" >
< p > < img src = "figs/opt_stiff_sensitivity_Fd.png" alt = "opt_stiff_sensitivity_Fd.png" / >
< / p >
< p > < span class = "figure-number" > Figure 7: < / span > Sensitivity to Direct forces and torques applied to the sample (\(F_d\), \(M_d\)) to the position error of the sample (< a href = "./figs/opt_stiff_sensitivity_Fd.png" > png< / a > , < a href = "./figs/opt_stiff_sensitivity_Fd.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2020-04-07 19:34:05 +02:00
< div id = "outline-container-orga29f90b" class = "outline-3" >
< h3 id = "orga29f90b" > < span class = "section-number-3" > 2.6< / span > Conclusion< / h3 >
2020-04-07 15:58:26 +02:00
< div class = "outline-text-3" id = "text-2-6" >
< div class = "important" >
< p >
2020-04-07 17:10:39 +02:00
Reducing the nano-hexapod stiffness generally lowers the sensitivity to stages vibration but increases the sensitivity to ground motion and direct forces.
< / p >
2020-04-07 15:58:26 +02:00
2020-04-07 17:10:39 +02:00
< p >
In order to conclude on the optimal stiffness that will yield the smallest sample vibration, one has to include the level of disturbances. This is done in Section < a href = "#org5d05990" > 4< / a > .
2020-04-07 15:58:26 +02:00
< / p >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
< / div >
< / div >
< div id = "outline-container-org6527e58" class = "outline-2" >
< h2 id = "org6527e58" > < span class = "section-number-2" > 3< / span > Effect of granite stiffness< / h2 >
< div class = "outline-text-2" id = "text-3" >
< p >
< a id = "orgd4105b6" > < / a >
< / p >
2020-04-07 17:10:39 +02:00
< p >
In this section, we wish to see if a soft granite suspension could help in reducing the effect of disturbances on the position error of the sample.
< / p >
2020-04-07 15:26:29 +02:00
< / div >
< div id = "outline-container-orgd3e5fe1" class = "outline-3" >
< h3 id = "orgd3e5fe1" > < span class = "section-number-3" > 3.1< / span > Analytical Analysis< / h3 >
< div class = "outline-text-3" id = "text-3-1" >
2020-04-07 17:10:39 +02:00
< / div >
< div id = "outline-container-orgbc34a65" class = "outline-4" >
< h4 id = "orgbc34a65" > < span class = "section-number-4" > 3.1.1< / span > Simple mass-spring-damper model< / h4 >
< div class = "outline-text-4" id = "text-3-1-1" >
< p >
Let’ s consider the system shown in Figure < a href = "#org8fb9606" > 8< / a > consisting of two stacked mass-spring-damper systems.
The bottom one represents the granite, and the top one all the positioning stages.
We want the smallest stage “ deformation” \(d = x^\prime - x\) due to ground motion \(w\).
< / p >
2020-04-07 15:26:29 +02:00
< div id = "org8fb9606" class = "figure" >
< p > < img src = "figs/2dof_system_granite_stiffness.png" alt = "2dof_system_granite_stiffness.png" / >
< / p >
2020-04-07 17:10:39 +02:00
< p > < span class = "figure-number" > Figure 8: < / span > Mass Spring Damper system consisting of a granite and a positioning stage< / p >
2020-04-07 15:26:29 +02:00
< / div >
< p >
2020-04-07 15:58:26 +02:00
If we write the equation of motion of the system in Figure < a href = "#org8fb9606" > 8< / a > , we obtain:
2020-04-07 15:26:29 +02:00
< / p >
\begin{align}
m^\prime s^2 x^\prime & = (c^\prime s + k^\prime) (x - x^\prime) \\
2020-04-07 17:10:39 +02:00
ms^2 x & = (c^\prime s + k^\prime) (x^\prime - x) + (cs + k) (w - x)
2020-04-07 15:26:29 +02:00
\end{align}
< p >
If we note \(d = x^\prime - x\), we obtain:
< / p >
\begin{equation}
2020-04-07 17:10:39 +02:00
\frac{d}{w} = \frac{-m^\prime s^2 (cs + k)}{ (m^\prime s^2 + c^\prime s + k^\prime) (ms^2 + cs + k) + m^\prime s^2(c^\prime s + k^\prime)}
2020-04-07 15:26:29 +02:00
\end{equation}
< / div >
< / div >
2020-04-07 17:10:39 +02:00
< div id = "outline-container-org4ddec32" class = "outline-4" >
< h4 id = "org4ddec32" > < span class = "section-number-4" > 3.1.2< / span > General Case< / h4 >
< div class = "outline-text-4" id = "text-3-1-2" >
< p >
Let’ s now considering a general positioning stage defined by:
< / p >
< ul class = "org-ul" >
< li > \(G^\prime(s) = \frac{F}{x}\): its mechanical “ impedance” < / li >
< li > \(D^\prime(s) = \frac{d}{x}\): its “ deformation” transfer function< / li >
< / ul >
< div id = "org9702e0f" class = "figure" >
< p > < img src = "figs/general_system_granite_stiffness.png" alt = "general_system_granite_stiffness.png" / >
< / p >
< p > < span class = "figure-number" > Figure 9: < / span > Mass Spring Damper representing the granite and a general representation of positioning stages< / p >
< / div >
< p >
The equation of motion are:
< / p >
\begin{align}
ms^2 x & = (cs + k) (x - w) - F \\
F & = G^\prime(s) x \\
d & = D^\prime(s) x
\end{align}
< p >
where:
< / p >
< ul class = "org-ul" >
< li > \(F\) is the force applied by the position stages on the granite mass< / li >
< / ul >
< div class = "important" >
< p >
We can express \(d\) as a function of \(w\):
< / p >
\begin{equation}
\frac{d}{w} = \frac{D^\prime(s) (cs + k)}{ms^2 + cs + k + G^\prime(s)}
\end{equation}
< p >
This is the transfer function that we would like to minimize.
< / p >
< / div >
< p >
Let’ s verify this formula for a simple mass/spring/damper positioning stage.
In that case, we have:
< / p >
\begin{align*}
D^\prime(s) & = \frac{d}{x} = \frac{- m^\prime s^2}{m^\prime s^2 + c^\prime s + k^\prime} \\
G^\prime(s) & = \frac{F}{x} = \frac{m^\prime s^2(c^\prime s + k)}{m^\prime s^2 + c^\prime s + k^\prime}
\end{align*}
< p >
And finally:
< / p >
\begin{equation}
\frac{d}{w} = \frac{-m^\prime s^2 (cs + k)}{ (m^\prime s^2 + c^\prime s + k^\prime) (ms^2 + cs + k) + m^\prime s^2(c^\prime s + k^\prime)}
\end{equation}
< p >
which is the same as the previously derived equation.
< / p >
< / div >
< / div >
< / div >
2020-04-07 15:26:29 +02:00
< div id = "outline-container-org9215f81" class = "outline-3" >
< h3 id = "org9215f81" > < span class = "section-number-3" > 3.2< / span > Soft Granite< / h3 >
< div class = "outline-text-3" id = "text-3-2" >
< p >
2020-04-07 17:10:39 +02:00
Let’ s initialize a soft granite and see how the sensitivity to disturbances will change.
2020-04-07 15:26:29 +02:00
< / p >
< div class = "org-src-container" >
< pre class = "src src-matlab" > initializeGranite(< span class = "org-string" > 'K'< / span > , 5e5< span class = "org-type" > *< / span > ones(3,1), < span class = "org-string" > 'C'< / span > , 5e3< span class = "org-type" > *< / span > ones(3,1));
< / pre >
< / div >
2020-04-07 17:10:39 +02:00
< / div >
< / div >
2020-04-07 15:26:29 +02:00
2020-04-07 17:10:39 +02:00
< div id = "outline-container-org8878556" class = "outline-3" >
< h3 id = "org8878556" > < span class = "section-number-3" > 3.3< / span > Effect of the Granite transfer function< / h3 >
< div class = "outline-text-3" id = "text-3-3" >
< p >
From Figure < a href = "#org38146da" > 10< / a > , we can see that having a “ soft” granite suspension greatly lowers the sensitivity to ground motion.
The sensitivity is indeed lowered starting from the resonance of the granite on its soft suspension (few Hz here).
< / p >
< p >
From Figures < a href = "#orgc4c14fb" > 11< / a > and < a href = "#org533cc4b" > 12< / a > , we see that the change of granite suspension does not change a lot the sensitivity to both direct forces and stage vibrations.
< / p >
< div id = "org38146da" class = "figure" >
< p > < img src = "figs/opt_stiff_soft_granite_Dw.png" alt = "opt_stiff_soft_granite_Dw.png" / >
< / p >
< p > < span class = "figure-number" > Figure 10: < / span > Change of sensibility to Ground motion when using a stiff Granite (solid curves) and a soft Granite (dashed curves) (< a href = "./figs/opt_stiff_soft_granite_Dw.png" > png< / a > , < a href = "./figs/opt_stiff_soft_granite_Dw.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
2020-04-07 17:10:39 +02:00
< div id = "orgc4c14fb" class = "figure" >
< p > < img src = "figs/opt_stiff_soft_granite_Frz.png" alt = "opt_stiff_soft_granite_Frz.png" / >
< / p >
< p > < span class = "figure-number" > Figure 11: < / span > Change of sensibility to Spindle vibrations when using a stiff Granite (solid curves) and a soft Granite (dashed curves) (< a href = "./figs/opt_stiff_soft_granite_Frz.png" > png< / a > , < a href = "./figs/opt_stiff_soft_granite_Frz.pdf" > pdf< / a > )< / p >
< / div >
< div id = "org533cc4b" class = "figure" >
< p > < img src = "figs/opt_stiff_soft_granite_Fd.png" alt = "opt_stiff_soft_granite_Fd.png" / >
< / p >
< p > < span class = "figure-number" > Figure 12: < / span > Change of sensibility to direct forces when using a stiff Granite (solid curves) and a soft Granite (dashed curves) (< a href = "./figs/opt_stiff_soft_granite_Fd.png" > png< / a > , < a href = "./figs/opt_stiff_soft_granite_Fd.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
< / div >
2020-04-07 19:34:05 +02:00
< div id = "outline-container-org6362e01" class = "outline-3" >
< h3 id = "org6362e01" > < span class = "section-number-3" > 3.4< / span > Conclusion< / h3 >
2020-04-07 17:10:39 +02:00
< div class = "outline-text-3" id = "text-3-4" >
< div class = "important" >
< p >
Having a soft granite suspension could greatly improve the sensitivity the ground motion and thus the level of sample vibration if it is found that ground motion is the limiting factor.
< / p >
< / div >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
2020-04-07 17:10:39 +02:00
< / div >
2020-04-07 15:26:29 +02:00
< div id = "outline-container-org8a88fb0" class = "outline-2" >
< h2 id = "org8a88fb0" > < span class = "section-number-2" > 4< / span > Open Loop Budget Error< / h2 >
< div class = "outline-text-2" id = "text-4" >
< p >
< a id = "org5d05990" > < / a >
< / p >
2020-04-07 19:34:05 +02:00
< p >
Now that the frequency content of disturbances have been estimated (Section < a href = "#org17d3d6a" > 1< / a > ) and the transfer functions from disturbances to the position error of the sample have been identified (Section < a href = "#orgf9e4300" > 2< / a > ), we can compute the level of sample vibration due to the disturbances.
< / p >
< p >
We then can conclude and the nano-hexapod stiffness that will lower the sample position error.
< / p >
2020-04-07 15:26:29 +02:00
< / div >
2020-04-07 19:34:05 +02:00
< div id = "outline-container-org6bd588f" class = "outline-3" >
< h3 id = "org6bd588f" > < span class = "section-number-3" > 4.1< / span > Noise Budgeting - Theory< / h3 >
2020-04-07 15:26:29 +02:00
< div class = "outline-text-3" id = "text-4-1" >
2020-04-07 19:34:05 +02:00
< p >
Let’ s consider Figure < a href = "#org7ff50a0" > 13< / a > there \(G_d(s)\) is the transfer function from a signal \(d\) (the perturbation) to a signal \(y\) (the sample’ s position error).
< / p >
< div id = "org7ff50a0" class = "figure" >
< p > < img src = "figs/psd_change_tf.png" alt = "psd_change_tf.png" / >
< / p >
< p > < span class = "figure-number" > Figure 13: < / span > Figure caption< / p >
2020-04-07 15:26:29 +02:00
< / div >
2020-04-07 19:34:05 +02:00
< p >
We can compute the Power Spectral Density (PSD) of signal \(y\) from the PSD of \(d\) and the norm of \(G_d(s)\):
< / p >
\begin{equation}
S_{y}(\omega) = \left|G_d(j\omega)\right|^2 S_{d}(\omega) \label{eq:psd_transfer_function}
\end{equation}
< p >
If we now consider multiple disturbances \(d_1, \dots, d_n\) as shown in Figure < a href = "#orgc24bdf6" > 14< / a > , we have that:
< / p >
\begin{equation}
S_{y}(\omega) = \left|G_{d_1}(j\omega)\right|^2 S_{d_1}(\omega) + \dots + \left|G_{d_n}(j\omega)\right|^2 S_{d_n}(\omega) \label{eq:sum_psd}
\end{equation}
< p >
Sometimes, we prefer to compute the < b > Amplitude< / b > Spectral Density (ASD) which is related to the PSD by:
\[ \Gamma_y(\omega) = \sqrt{S_y(\omega)} \]
< / p >
< div id = "orgc24bdf6" class = "figure" >
< p > < img src = "figs/psd_change_tf_multiple_pert.png" alt = "psd_change_tf_multiple_pert.png" / >
< / p >
< p > < span class = "figure-number" > Figure 14: < / span > Figure caption< / p >
2020-04-07 15:26:29 +02:00
< / div >
< p >
2020-04-07 19:34:05 +02:00
The Cumulative Power Spectrum (CPS) is here defined as:
2020-04-07 15:26:29 +02:00
< / p >
2020-04-07 19:34:05 +02:00
\begin{equation}
\Phi_y(\omega) = \int_\omega^\infty S_y(\nu) d\nu
\end{equation}
2020-04-07 15:26:29 +02:00
2020-04-07 19:34:05 +02:00
< p >
And the Cumulative Amplitude Spectrum (CAS):
< / p >
\begin{equation}
\Psi(\omega) = \sqrt{\Phi(\omega)} = \sqrt{\int_\omega^\infty S_y(\nu) d\nu}
\end{equation}
2020-04-07 15:26:29 +02:00
2020-04-07 19:34:05 +02:00
< p >
The CAS evaluation for all frequency corresponds to the rms value of the considered quantity:
\[ y_{\text{rms}} = \Psi(\omega = 0) = \sqrt{\int_0^\infty S_y(\nu) d\nu} \]
< / p >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
2020-04-07 19:34:05 +02:00
< div id = "outline-container-orgcc86f59" class = "outline-3" >
< h3 id = "orgcc86f59" > < span class = "section-number-3" > 4.2< / span > Power Spectral Densities< / h3 >
< div class = "outline-text-3" id = "text-4-2" >
< p >
We compute the effect of perturbations on the motion error thanks to Eq. \eqref{eq:psd_transfer_function}.
< / p >
< p >
The result is shown in:
< / p >
< ul class = "org-ul" >
< li > Figure < a href = "#orgd3d7b28" > 15< / a > : PSD of the vertical sample’ s motion error due to vertical ground motion< / li >
< li > Figure < a href = "#orgd8e87cd" > 16< / a > : PSD of the vertical sample’ s motion error due to vertical vibrations of the Spindle< / li >
< / ul >
< div id = "orgd3d7b28" class = "figure" >
< p > < img src = "figs/opt_stiff_psd_dz_gm.png" alt = "opt_stiff_psd_dz_gm.png" / >
< / p >
< p > < span class = "figure-number" > Figure 15: < / span > Amplitude Spectral Density of the Sample vertical position error due to Ground motion for multiple nano-hexapod stiffnesses (< a href = "./figs/opt_stiff_psd_dz_gm.png" > png< / a > , < a href = "./figs/opt_stiff_psd_dz_gm.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
2020-04-07 19:34:05 +02:00
< div id = "orgd8e87cd" class = "figure" >
< p > < img src = "figs/opt_stiff_psd_dz_rz.png" alt = "opt_stiff_psd_dz_rz.png" / >
< / p >
< p > < span class = "figure-number" > Figure 16: < / span > Amplitude Spectral Density of the Sample vertical position error due to Vertical vibration of the Spindle for multiple nano-hexapod stiffnesses (< a href = "./figs/opt_stiff_psd_dz_rz.png" > png< / a > , < a href = "./figs/opt_stiff_psd_dz_rz.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
2020-04-07 19:34:05 +02:00
< p >
We compute the effect of all perturbations on the vertical position error using Eq. \eqref{eq:sum_psd} and the resulting PSD is shown in Figure < a href = "#orgdbfb5e0" > 17< / a > .
< / p >
2020-04-07 15:26:29 +02:00
2020-04-07 19:34:05 +02:00
< div id = "orgdbfb5e0" class = "figure" >
< p > < img src = "figs/opt_stiff_psd_dz_tot.png" alt = "opt_stiff_psd_dz_tot.png" / >
< / p >
< p > < span class = "figure-number" > Figure 17: < / span > Amplitude Spectral Density of the Sample vertical position error due to all considered perturbations for multiple nano-hexapod stiffnesses (< a href = "./figs/opt_stiff_psd_dz_tot.png" > png< / a > , < a href = "./figs/opt_stiff_psd_dz_tot.pdf" > pdf< / a > )< / p >
< / div >
< / div >
2020-04-07 15:26:29 +02:00
< / div >
2020-04-07 19:34:05 +02:00
< div id = "outline-container-orgef96b89" class = "outline-3" >
< h3 id = "orgef96b89" > < span class = "section-number-3" > 4.3< / span > Cumulative Amplitude Spectrum< / h3 >
< div class = "outline-text-3" id = "text-4-3" >
< p >
Similarly, the Cumulative Amplitude Spectrum of the sample vibrations are shown:
< / p >
< ul class = "org-ul" >
< li > Figure < a href = "#org488d65f" > 18< / a > : due to vertical ground motion< / li >
< li > Figure < a href = "#orge5458c6" > 19< / a > : due to vertical vibrations of the Spindle< / li >
< li > Figure < a href = "#orgf6888f0" > 20< / a > : due to all considered perturbations< / li >
< / ul >
2020-04-07 15:26:29 +02:00
< p >
2020-04-07 19:34:05 +02:00
The black dashed line corresponds to the performance objective of a sample vibration equal to \(10\ nm [rms]\).
2020-04-07 15:26:29 +02:00
< / p >
2020-04-07 19:34:05 +02:00
2020-04-07 15:26:29 +02:00
< div class = "org-src-container" >
< pre class = "src src-matlab" > freqs = dist_f.f;
< span class = "org-type" > figure< / span > ;
hold on;
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:length(Ks)< / span >
plot(freqs, sqrt(flip(< span class = "org-type" > -< / span > cumtrapz(flip(freqs), flip(dist_f.psd_gm< span class = "org-type" > .*< / span > abs(squeeze(freqresp(Gd{< span class = "org-constant" > i< / span > }(< span class = "org-string" > 'Ez'< / span > , < span class = "org-string" > 'Dwz'< / span > ), freqs, < span class = "org-string" > 'Hz'< / span > )))< span class = "org-type" > .^< / span > 2)))), < span class = "org-string" > '-'< / span > , ...
< span class = "org-string" > 'DisplayName'< / span > , sprintf(< span class = "org-string" > '$k = %.0g$ [N/m]'< / span > , Ks(< span class = "org-constant" > i< / span > )));
< span class = "org-keyword" > end< / span >
plot([freqs(1) freqs(end)], [10e< span class = "org-type" > -< / span > 9 10e< span class = "org-type" > -< / span > 9], < span class = "org-string" > 'k--'< / span > , < span class = "org-string" > 'HandleVisibility'< / span > , < span class = "org-string" > 'off'< / span > );
hold off;
< span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'xscale'< / span > , < span class = "org-string" > 'log'< / span > ); < span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'yscale'< / span > , < span class = "org-string" > 'log'< / span > );
xlabel(< span class = "org-string" > 'Frequency [Hz]'< / span > ); ylabel(< span class = "org-string" > 'CAS $E_y$ $[m]$'< / span > )
legend(< span class = "org-string" > 'Location'< / span > , < span class = "org-string" > 'northeast'< / span > );
2020-04-07 19:34:05 +02:00
xlim([1, 500]); ylim([1e< span class = "org-type" > -< / span > 10 1e< span class = "org-type" > -< / span > 6]);
2020-04-07 15:26:29 +02:00
< / pre >
< / div >
2020-04-07 19:34:05 +02:00
< div id = "org488d65f" class = "figure" >
< p > < img src = "figs/opt_stiff_cas_dz_gm.png" alt = "opt_stiff_cas_dz_gm.png" / >
< / p >
< p > < span class = "figure-number" > Figure 18: < / span > Cumulative Amplitude Spectrum of the Sample vertical position error due to Ground motion for multiple nano-hexapod stiffnesses (< a href = "./figs/opt_stiff_cas_dz_gm.png" > png< / a > , < a href = "./figs/opt_stiff_cas_dz_gm.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > freqs = dist_f.f;
< span class = "org-type" > figure< / span > ;
hold on;
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:length(Ks)< / span >
2020-04-07 19:34:05 +02:00
plot(freqs, sqrt(flip(< span class = "org-type" > -< / span > cumtrapz(flip(freqs), flip(dist_f.psd_rz< span class = "org-type" > .*< / span > abs(squeeze(freqresp(Gd{< span class = "org-constant" > i< / span > }(< span class = "org-string" > 'Ez'< / span > , < span class = "org-string" > 'Frz_z'< / span > ), freqs, < span class = "org-string" > 'Hz'< / span > )))< span class = "org-type" > .^< / span > 2)))), < span class = "org-string" > '-'< / span > , ...
2020-04-07 15:26:29 +02:00
< span class = "org-string" > 'DisplayName'< / span > , sprintf(< span class = "org-string" > '$k = %.0g$ [N/m]'< / span > , Ks(< span class = "org-constant" > i< / span > )));
< span class = "org-keyword" > end< / span >
plot([freqs(1) freqs(end)], [10e< span class = "org-type" > -< / span > 9 10e< span class = "org-type" > -< / span > 9], < span class = "org-string" > 'k--'< / span > , < span class = "org-string" > 'HandleVisibility'< / span > , < span class = "org-string" > 'off'< / span > );
hold off;
2020-04-07 19:34:05 +02:00
< span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'xscale'< / span > , < span class = "org-string" > 'log'< / span > ); < span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'yscale'< / span > , < span class = "org-string" > 'log'< / span > );
xlabel(< span class = "org-string" > 'Frequency [Hz]'< / span > ); ylabel(< span class = "org-string" > 'CAS $[m]$'< / span > )
legend(< span class = "org-string" > 'Location'< / span > , < span class = "org-string" > 'southwest'< / span > );
xlim([1, 500]); ylim([1e< span class = "org-type" > -< / span > 10 1e< span class = "org-type" > -< / span > 6]);
2020-04-07 15:26:29 +02:00
< / pre >
< / div >
2020-04-07 19:34:05 +02:00
< div id = "orge5458c6" class = "figure" >
< p > < img src = "figs/opt_stiff_cas_dz_rz.png" alt = "opt_stiff_cas_dz_rz.png" / >
< / p >
< p > < span class = "figure-number" > Figure 19: < / span > Cumulative Amplitude Spectrum of the Sample vertical position error due to Vertical vibration of the Spindle for multiple nano-hexapod stiffnesses (< a href = "./figs/opt_stiff_cas_dz_rz.png" > png< / a > , < a href = "./figs/opt_stiff_cas_dz_rz.pdf" > pdf< / a > )< / p >
2020-04-07 15:26:29 +02:00
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > freqs = dist_f.f;
< span class = "org-type" > figure< / span > ;
hold on;
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:length(Ks)< / span >
plot(freqs, sqrt(flip(< span class = "org-type" > -< / span > cumtrapz(flip(freqs), flip(psd_tot(< span class = "org-type" > :< / span > ,< span class = "org-constant" > i< / span > ))))), < span class = "org-string" > '-'< / span > , ...
< span class = "org-string" > 'DisplayName'< / span > , sprintf(< span class = "org-string" > '$k = %.0g$ [N/m]'< / span > , Ks(< span class = "org-constant" > i< / span > )));
< span class = "org-keyword" > end< / span >
plot([freqs(1) freqs(end)], [10e< span class = "org-type" > -< / span > 9 10e< span class = "org-type" > -< / span > 9], < span class = "org-string" > 'k--'< / span > , < span class = "org-string" > 'HandleVisibility'< / span > , < span class = "org-string" > 'off'< / span > );
hold off;
< span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'xscale'< / span > , < span class = "org-string" > 'log'< / span > ); < span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'yscale'< / span > , < span class = "org-string" > 'log'< / span > );
xlabel(< span class = "org-string" > 'Frequency [Hz]'< / span > ); ylabel(< span class = "org-string" > 'CAS $E_z$ $[m]$'< / span > )
legend(< span class = "org-string" > 'Location'< / span > , < span class = "org-string" > 'northeast'< / span > );
xlim([1, 500]); ylim([1e< span class = "org-type" > -< / span > 10 1e< span class = "org-type" > -< / span > 6]);
< / pre >
< / div >
2020-04-07 19:34:05 +02:00
< div id = "orgf6888f0" class = "figure" >
< p > < img src = "figs/opt_stiff_cas_dz_tot.png" alt = "opt_stiff_cas_dz_tot.png" / >
< / p >
< p > < span class = "figure-number" > Figure 20: < / span > Cumulative Amplitude Spectrum of the Sample vertical position error due to all considered perturbations for multiple nano-hexapod stiffnesses (< a href = "./figs/opt_stiff_cas_dz_tot.png" > png< / a > , < a href = "./figs/opt_stiff_cas_dz_tot.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
< div id = "outline-container-org2852fc6" class = "outline-3" >
< h3 id = "org2852fc6" > < span class = "section-number-3" > 4.4< / span > Conclusion< / h3 >
< div class = "outline-text-3" id = "text-4-4" >
< div class = "important" >
< p >
From Figure < a href = "#orgf6888f0" > 20< / a > , we can see that a soft nano-hexapod \(k< 10 ^ 6 \ [ N / m ] \ ) significantly reduces the effect of perturbations from 20Hz to 300Hz .
< / p >
< / div >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
< / div >
< div id = "outline-container-org34c0f38" class = "outline-2" >
< h2 id = "org34c0f38" > < span class = "section-number-2" > 5< / span > Closed Loop Budget Error< / h2 >
< div class = "outline-text-2" id = "text-5" >
< p >
< a id = "orgd3503fb" > < / a >
< / p >
< / div >
2020-04-07 19:34:05 +02:00
< div id = "outline-container-orgdfef0eb" class = "outline-3" >
< h3 id = "orgdfef0eb" > < span class = "section-number-3" > 5.1< / span > Approximation of the effect of feedback on the motion error< / h3 >
2020-04-07 15:26:29 +02:00
< div class = "outline-text-3" id = "text-5-1" >
2020-04-07 19:34:05 +02:00
< p >
Let’ s consider Figure < a href = "#org6308d80" > 21< / a > where a controller \(K\) is used to reduce the effect of the disturbance \(d\) on the position error \(y\).
< / p >
< div id = "org6308d80" class = "figure" >
< p > < img src = "figs/effect_feedback_disturbance_diagram.png" alt = "effect_feedback_disturbance_diagram.png" / >
< / p >
< p > < span class = "figure-number" > Figure 21: < / span > Feedback System< / p >
< / div >
< p >
The reduction of the impact of \(d\) on \(y\) thanks to feedback is described by the following equation:
< / p >
\begin{equation}
\frac{y}{d} = \frac{G_d}{1 + KG}
\end{equation}
< p >
As a first approximation, we can consider that the controller is designed in such a way that the loop gain \(KG\) is a pure integrator:
\[ L_1(s) = K_1(s) G(s) = \frac{\omega_c}{s} \]
where \(\omega_c\) is the crossover frequency.
< / p >
< p >
We may then consider another controller in such a way that the loop gain corresponds to a double integrator with a lead centered with the crossover frequency \(\omega_c\):
\[ L_2(s) = K_2(s) G(s) = \left( \frac{\omega_c}{s} \right)^2 \cdot \frac{1 + \frac{s}{\omega_c/2}}{1 + \frac{s}{2\omega_c}} \]
< / p >
< / div >
< / div >
< div id = "outline-container-orgf2d36a1" class = "outline-3" >
< h3 id = "orgf2d36a1" > < span class = "section-number-3" > 5.2< / span > Reduction thanks to feedback - Required bandwidth< / h3 >
< div class = "outline-text-3" id = "text-5-2" >
2020-04-07 15:26:29 +02:00
< div class = "org-src-container" >
< pre class = "src src-matlab" > wc = 1< span class = "org-type" > *< / span > 2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > ; < span class = "org-comment" > % [rad/s]< / span >
xic = 0.5;
S = (s< span class = "org-type" > /< / span > wc)< span class = "org-type" > /< / span > (1 < span class = "org-type" > +< / span > s< span class = "org-type" > /< / span > wc);
bodeFig({S}, logspace(< span class = "org-type" > -< / span > 1,2,1000))
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > wc = [1, 5, 10, 20, 50, 100, 200];
S1 = {zeros(length(wc), 1)};
S2 = {zeros(length(wc), 1)};
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > j< / span > < / span > = < span class = "org-constant" > 1:length(wc)< / span >
L = (2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > wc(< span class = "org-constant" > j< / span > ))< span class = "org-type" > /< / span > s; < span class = "org-comment" > % Simple integrator< / span >
S1{< span class = "org-constant" > j< / span > } = 1< span class = "org-type" > /< / span > (1 < span class = "org-type" > +< / span > L);
L = ((2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > wc(< span class = "org-constant" > j< / span > ))< span class = "org-type" > /< / span > s)< span class = "org-type" > ^< / span > 2< 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 > wc(< span class = "org-constant" > j< / span > )< span class = "org-type" > /< / span > 2))< 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 > wc(< span class = "org-constant" > j< / span > )< span class = "org-type" > *< / span > 2));
S2{< span class = "org-constant" > j< / span > } = 1< span class = "org-type" > /< / span > (1 < span class = "org-type" > +< / span > L);
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > freqs = dist_f.f;
< span class = "org-type" > figure< / span > ;
hold on;
< span class = "org-constant" > i< / span > = 6;
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > j< / span > < / span > = < span class = "org-constant" > 1:length(wc)< / span >
< span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > ,< span class = "org-string" > 'ColorOrderIndex'< / span > ,< span class = "org-constant" > j< / span > );
plot(freqs, sqrt(flip(< span class = "org-type" > -< / span > cumtrapz(flip(freqs), flip(abs(squeeze(freqresp(S1{< span class = "org-constant" > j< / span > }, freqs, < span class = "org-string" > 'Hz'< / span > )))< span class = "org-type" > .^< / span > 2< span class = "org-type" > .*< / span > psd_tot(< span class = "org-type" > :< / span > ,< span class = "org-constant" > i< / span > ))))), < span class = "org-string" > '-'< / span > , ...
< span class = "org-string" > 'DisplayName'< / span > , sprintf(< span class = "org-string" > '$\\omega_c = %.0f$ [Hz]'< / span > , wc(< span class = "org-constant" > j< / span > )));
< span class = "org-keyword" > end< / span >
plot(freqs, sqrt(flip(< span class = "org-type" > -< / span > cumtrapz(flip(freqs), flip(psd_tot(< span class = "org-type" > :< / span > ,< span class = "org-constant" > i< / span > ))))), < span class = "org-string" > 'k-'< / span > , ...
< span class = "org-string" > 'DisplayName'< / span > , < span class = "org-string" > 'Open-Loop'< / span > );
plot([freqs(1) freqs(end)], [10e< span class = "org-type" > -< / span > 9 10e< span class = "org-type" > -< / span > 9], < span class = "org-string" > 'k--'< / span > , < span class = "org-string" > 'HandleVisibility'< / span > , < span class = "org-string" > 'off'< / span > );
hold off;
< span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'xscale'< / span > , < span class = "org-string" > 'log'< / span > ); < span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'yscale'< / span > , < span class = "org-string" > 'log'< / span > );
xlabel(< span class = "org-string" > 'Frequency [Hz]'< / span > ); ylabel(< span class = "org-string" > 'CAS $E_y$ $[m]$'< / span > )
legend(< span class = "org-string" > 'Location'< / span > , < span class = "org-string" > 'northeast'< / span > );
xlim([0.5, 500]); ylim([1e< span class = "org-type" > -< / span > 10 1e< span class = "org-type" > -< / span > 6]);
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > wc = logspace(0, 3, 100);
Dz1_rms = zeros(length(Ks), length(wc));
Dz2_rms = zeros(length(Ks), length(wc));
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:length(Ks)< / span >
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > j< / span > < / span > = < span class = "org-constant" > 1:length(wc)< / span >
L = (2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > wc(< span class = "org-constant" > j< / span > ))< span class = "org-type" > /< / span > s;
Dz1_rms(< span class = "org-constant" > i< / span > , < span class = "org-constant" > j< / span > ) = sqrt(trapz(freqs, abs(squeeze(freqresp(1< span class = "org-type" > /< / span > (1 < span class = "org-type" > +< / span > L), freqs, < span class = "org-string" > 'Hz'< / span > )))< span class = "org-type" > .^< / span > 2< span class = "org-type" > .*< / span > psd_tot(< span class = "org-type" > :< / span > ,< span class = "org-constant" > i< / span > )));
L = ((2< span class = "org-type" > *< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > *< / span > wc(< span class = "org-constant" > j< / span > ))< span class = "org-type" > /< / span > s)< span class = "org-type" > ^< / span > 2< 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 > wc(< span class = "org-constant" > j< / span > )< span class = "org-type" > /< / span > 2))< 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 > wc(< span class = "org-constant" > j< / span > )< span class = "org-type" > *< / span > 2));
Dz2_rms(< span class = "org-constant" > i< / span > , < span class = "org-constant" > j< / span > ) = sqrt(trapz(freqs, abs(squeeze(freqresp(1< span class = "org-type" > /< / span > (1 < span class = "org-type" > +< / span > L), freqs, < span class = "org-string" > 'Hz'< / span > )))< span class = "org-type" > .^< / span > 2< span class = "org-type" > .*< / span > psd_tot(< span class = "org-type" > :< / span > ,< span class = "org-constant" > i< / span > )));
< span class = "org-keyword" > end< / span >
< span class = "org-keyword" > end< / span >
< / pre >
< / div >
< div class = "org-src-container" >
< pre class = "src src-matlab" > freqs = dist_f.f;
< span class = "org-type" > figure< / span > ;
hold on;
< span class = "org-keyword" > for< / span > < span class = "org-variable-name" > < span class = "org-constant" > i< / span > < / span > = < span class = "org-constant" > 1:length(Ks)< / span >
< span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > ,< span class = "org-string" > 'ColorOrderIndex'< / span > ,< span class = "org-constant" > i< / span > );
plot(wc, Dz1_rms(< span class = "org-constant" > i< / span > , < span class = "org-type" > :< / span > ), < span class = "org-string" > '-'< / span > , ...
< span class = "org-string" > 'DisplayName'< / span > , sprintf(< span class = "org-string" > '$k = %.0g$ [N/m]'< / span > , Ks(< span class = "org-constant" > i< / span > )))
< span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > ,< span class = "org-string" > 'ColorOrderIndex'< / span > ,< span class = "org-constant" > i< / span > );
plot(wc, Dz2_rms(< span class = "org-constant" > i< / span > , < span class = "org-type" > :< / span > ), < span class = "org-string" > '--'< / span > , ...
< span class = "org-string" > 'HandleVisibility'< / span > , < span class = "org-string" > 'off'< / span > )
< span class = "org-keyword" > end< / span >
hold off;
< span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'xscale'< / span > , < span class = "org-string" > 'log'< / span > ); < span class = "org-type" > set< / span > (< span class = "org-variable-name" > gca< / span > , < span class = "org-string" > 'yscale'< / span > , < span class = "org-string" > 'log'< / span > );
xlabel(< span class = "org-string" > 'Control Bandwidth [Hz]'< / span > ); ylabel(< span class = "org-string" > '$E_z\ [m, rms]$'< / span > )
legend(< span class = "org-string" > 'Location'< / span > , < span class = "org-string" > 'southwest'< / span > );
xlim([1, 500]);
< / pre >
< / div >
< / div >
< / div >
< / div >
2020-04-07 19:34:05 +02:00
< div id = "outline-container-orge784867" class = "outline-2" >
< h2 id = "orge784867" > < span class = "section-number-2" > 6< / span > Conclusion< / h2 >
2020-04-07 15:26:29 +02:00
< / div >
< / div >
< div id = "postamble" class = "status" >
< p class = "author" > Author: Dehaeze Thomas< / p >
2020-04-07 19:34:05 +02:00
< p class = "date" > Created: 2020-04-07 mar. 19:33< / p >
2020-04-07 15:26:29 +02:00
< / div >
< / body >
< / html >