Initial Commit
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
figs/*.svg
|
145
css/htmlize.css
Normal file
@ -0,0 +1,145 @@
|
||||
.org-bold { /* bold */ font-weight: bold; }
|
||||
.org-bold-italic { /* bold-italic */ font-weight: bold; font-style: italic; }
|
||||
.org-buffer-menu-buffer { /* buffer-menu-buffer */ font-weight: bold; }
|
||||
.org-builtin { /* font-lock-builtin-face */ color: #7a378b; }
|
||||
.org-button { /* button */ text-decoration: underline; }
|
||||
.org-calendar-today { /* calendar-today */ text-decoration: underline; }
|
||||
.org-change-log-acknowledgement { /* change-log-acknowledgement */ color: #b22222; }
|
||||
.org-change-log-conditionals { /* change-log-conditionals */ color: #a0522d; }
|
||||
.org-change-log-date { /* change-log-date */ color: #8b2252; }
|
||||
.org-change-log-email { /* change-log-email */ color: #a0522d; }
|
||||
.org-change-log-file { /* change-log-file */ color: #0000ff; }
|
||||
.org-change-log-function { /* change-log-function */ color: #a0522d; }
|
||||
.org-change-log-list { /* change-log-list */ color: #a020f0; }
|
||||
.org-change-log-name { /* change-log-name */ color: #008b8b; }
|
||||
.org-comint-highlight-input { /* comint-highlight-input */ font-weight: bold; }
|
||||
.org-comint-highlight-prompt { /* comint-highlight-prompt */ color: #00008b; }
|
||||
.org-comment { /* font-lock-comment-face */ color: #999988; font-style: italic; }
|
||||
.org-comment-delimiter { /* font-lock-comment-delimiter-face */ color: #999988; font-style: italic; }
|
||||
.org-completions-annotations { /* completions-annotations */ font-style: italic; }
|
||||
.org-completions-common-part { /* completions-common-part */ color: #000000; background-color: #ffffff; }
|
||||
.org-completions-first-difference { /* completions-first-difference */ font-weight: bold; }
|
||||
.org-constant { /* font-lock-constant-face */ color: #008b8b; }
|
||||
.org-diary { /* diary */ color: #ff0000; }
|
||||
.org-diff-context { /* diff-context */ color: #7f7f7f; }
|
||||
.org-diff-file-header { /* diff-file-header */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-function { /* diff-function */ background-color: #cccccc; }
|
||||
.org-diff-header { /* diff-header */ background-color: #cccccc; }
|
||||
.org-diff-hunk-header { /* diff-hunk-header */ background-color: #cccccc; }
|
||||
.org-diff-index { /* diff-index */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-nonexistent { /* diff-nonexistent */ background-color: #b3b3b3; font-weight: bold; }
|
||||
.org-diff-refine-change { /* diff-refine-change */ background-color: #d9d9d9; }
|
||||
.org-dired-directory { /* dired-directory */ color: #0000ff; }
|
||||
.org-dired-flagged { /* dired-flagged */ color: #ff0000; font-weight: bold; }
|
||||
.org-dired-header { /* dired-header */ color: #228b22; }
|
||||
.org-dired-ignored { /* dired-ignored */ color: #7f7f7f; }
|
||||
.org-dired-mark { /* dired-mark */ color: #008b8b; }
|
||||
.org-dired-marked { /* dired-marked */ color: #ff0000; font-weight: bold; }
|
||||
.org-dired-perm-write { /* dired-perm-write */ color: #b22222; }
|
||||
.org-dired-symlink { /* dired-symlink */ color: #a020f0; }
|
||||
.org-dired-warning { /* dired-warning */ color: #ff0000; font-weight: bold; }
|
||||
.org-doc { /* font-lock-doc-face */ color: #8b2252; }
|
||||
.org-escape-glyph { /* escape-glyph */ color: #a52a2a; }
|
||||
.org-file-name-shadow { /* file-name-shadow */ color: #7f7f7f; }
|
||||
.org-flyspell-duplicate { /* flyspell-duplicate */ color: #cdad00; font-weight: bold; text-decoration: underline; }
|
||||
.org-flyspell-incorrect { /* flyspell-incorrect */ color: #ff4500; font-weight: bold; text-decoration: underline; }
|
||||
.org-fringe { /* fringe */ background-color: #f2f2f2; }
|
||||
.org-function-name { /* font-lock-function-name-face */ color: teal; }
|
||||
.org-header-line { /* header-line */ color: #333333; background-color: #e5e5e5; }
|
||||
.org-help-argument-name { /* help-argument-name */ font-style: italic; }
|
||||
.org-highlight { /* highlight */ background-color: #b4eeb4; }
|
||||
.org-holiday { /* holiday */ background-color: #ffc0cb; }
|
||||
.org-isearch { /* isearch */ color: #b0e2ff; background-color: #cd00cd; }
|
||||
.org-isearch-fail { /* isearch-fail */ background-color: #ffc1c1; }
|
||||
.org-italic { /* italic */ font-style: italic; }
|
||||
.org-keyword { /* font-lock-keyword-face */ color: #0086b3; }
|
||||
.org-lazy-highlight { /* lazy-highlight */ background-color: #afeeee; }
|
||||
.org-link { /* link */ color: #0000ff; text-decoration: underline; }
|
||||
.org-link-visited { /* link-visited */ color: #8b008b; text-decoration: underline; }
|
||||
.org-log-edit-header { /* log-edit-header */ color: #a020f0; }
|
||||
.org-log-edit-summary { /* log-edit-summary */ color: #0000ff; }
|
||||
.org-log-edit-unknown-header { /* log-edit-unknown-header */ color: #b22222; }
|
||||
.org-match { /* match */ background-color: #ffff00; }
|
||||
.org-next-error { /* next-error */ background-color: #eedc82; }
|
||||
.org-nobreak-space { /* nobreak-space */ color: #a52a2a; text-decoration: underline; }
|
||||
.org-org-archived { /* org-archived */ color: #7f7f7f; }
|
||||
.org-org-block { /* org-block */ color: #7f7f7f; }
|
||||
.org-org-block-begin-line { /* org-block-begin-line */ color: #b22222; }
|
||||
.org-org-block-end-line { /* org-block-end-line */ color: #b22222; }
|
||||
.org-org-checkbox { /* org-checkbox */ font-weight: bold; }
|
||||
.org-org-checkbox-statistics-done { /* org-checkbox-statistics-done */ color: #228b22; font-weight: bold; }
|
||||
.org-org-checkbox-statistics-todo { /* org-checkbox-statistics-todo */ color: #ff0000; font-weight: bold; }
|
||||
.org-org-clock-overlay { /* org-clock-overlay */ background-color: #ffff00; }
|
||||
.org-org-code { /* org-code */ color: #7f7f7f; }
|
||||
.org-org-column { /* org-column */ background-color: #e5e5e5; }
|
||||
.org-org-column-title { /* org-column-title */ background-color: #e5e5e5; font-weight: bold; text-decoration: underline; }
|
||||
.org-org-date { /* org-date */ color: #a020f0; text-decoration: underline; }
|
||||
.org-org-document-info { /* org-document-info */ color: #191970; }
|
||||
.org-org-document-info-keyword { /* org-document-info-keyword */ color: #7f7f7f; }
|
||||
.org-org-document-title { /* org-document-title */ color: #191970; font-size: 144%; font-weight: bold; }
|
||||
.org-org-done { /* org-done */ color: #228b22; font-weight: bold; }
|
||||
.org-org-drawer { /* org-drawer */ color: #0000ff; }
|
||||
.org-org-ellipsis { /* org-ellipsis */ color: #b8860b; text-decoration: underline; }
|
||||
.org-org-footnote { /* org-footnote */ color: #a020f0; text-decoration: underline; }
|
||||
.org-org-formula { /* org-formula */ color: #b22222; }
|
||||
.org-org-headline-done { /* org-headline-done */ color: #bc8f8f; }
|
||||
.org-org-hide { /* org-hide */ color: #ffffff; }
|
||||
.org-org-latex-and-export-specials { /* org-latex-and-export-specials */ color: #8b4513; }
|
||||
.org-org-level-1 { /* org-level-1 */ color: #0000ff; }
|
||||
.org-org-level-2 { /* org-level-2 */ color: #a0522d; }
|
||||
.org-org-level-3 { /* org-level-3 */ color: #a020f0; }
|
||||
.org-org-level-4 { /* org-level-4 */ color: #b22222; }
|
||||
.org-org-level-5 { /* org-level-5 */ color: #228b22; }
|
||||
.org-org-level-6 { /* org-level-6 */ color: #008b8b; }
|
||||
.org-org-level-7 { /* org-level-7 */ color: #7a378b; }
|
||||
.org-org-level-8 { /* org-level-8 */ color: #8b2252; }
|
||||
.org-org-link { /* org-link */ color: #0000ff; text-decoration: underline; }
|
||||
.org-org-meta-line { /* org-meta-line */ color: #b22222; }
|
||||
.org-org-mode-line-clock { /* org-mode-line-clock */ color: #000000; background-color: #bfbfbf; }
|
||||
.org-org-mode-line-clock-overrun { /* org-mode-line-clock-overrun */ color: #000000; background-color: #ff0000; }
|
||||
.org-org-quote { /* org-quote */ color: #7f7f7f; }
|
||||
.org-org-scheduled { /* org-scheduled */ color: #006400; }
|
||||
.org-org-scheduled-previously { /* org-scheduled-previously */ color: #b22222; }
|
||||
.org-org-scheduled-today { /* org-scheduled-today */ color: #006400; }
|
||||
.org-org-sexp-date { /* org-sexp-date */ color: #a020f0; }
|
||||
.org-org-special-keyword { /* org-special-keyword */ color: #a020f0; }
|
||||
.org-org-table { /* org-table */ color: #0000ff; }
|
||||
.org-org-tag { /* org-tag */ font-weight: bold; }
|
||||
.org-org-target { /* org-target */ text-decoration: underline; }
|
||||
.org-org-time-grid { /* org-time-grid */ color: #b8860b; }
|
||||
.org-org-todo { /* org-todo */ color: #ff0000; font-weight: bold; }
|
||||
.org-org-upcoming-deadline { /* org-upcoming-deadline */ color: #b22222; }
|
||||
.org-org-verbatim { /* org-verbatim */ color: #7f7f7f; }
|
||||
.org-org-verse { /* org-verse */ color: #7f7f7f; }
|
||||
.org-org-warning { /* org-warning */ color: #ff0000; font-weight: bold; }
|
||||
.org-outline-1 { /* outline-1 */ color: #0000ff; }
|
||||
.org-outline-2 { /* outline-2 */ color: #a0522d; }
|
||||
.org-outline-3 { /* outline-3 */ color: #a020f0; }
|
||||
.org-outline-4 { /* outline-4 */ color: #b22222; }
|
||||
.org-outline-5 { /* outline-5 */ color: #228b22; }
|
||||
.org-outline-6 { /* outline-6 */ color: #008b8b; }
|
||||
.org-outline-7 { /* outline-7 */ color: #7a378b; }
|
||||
.org-outline-8 { /* outline-8 */ color: #8b2252; }
|
||||
.org-preprocessor { /* font-lock-preprocessor-face */ color: #7a378b; }
|
||||
.org-query-replace { /* query-replace */ color: #b0e2ff; background-color: #cd00cd; }
|
||||
.org-regexp-grouping-backslash { /* font-lock-regexp-grouping-backslash */ font-weight: bold; }
|
||||
.org-regexp-grouping-construct { /* font-lock-regexp-grouping-construct */ font-weight: bold; }
|
||||
.org-region { /* region */ background-color: #eedc82; }
|
||||
.org-secondary-selection { /* secondary-selection */ background-color: #ffff00; }
|
||||
.org-shadow { /* shadow */ color: #7f7f7f; }
|
||||
.org-show-paren-match { /* show-paren-match */ background-color: #40e0d0; }
|
||||
.org-show-paren-mismatch { /* show-paren-mismatch */ color: #ffffff; background-color: #a020f0; }
|
||||
.org-string { /* font-lock-string-face */ color: #dd1144; }
|
||||
.org-tool-bar { /* tool-bar */ color: #000000; background-color: #bfbfbf; }
|
||||
.org-tooltip { /* tooltip */ color: #000000; background-color: #ffffe0; }
|
||||
.org-trailing-whitespace { /* trailing-whitespace */ background-color: #ff0000; }
|
||||
.org-type { /* font-lock-type-face */ color: #228b22; }
|
||||
.org-underline { /* underline */ text-decoration: underline; }
|
||||
.org-variable-name { /* font-lock-variable-name-face */ color: teal; }
|
||||
.org-warning { /* font-lock-warning-face */ color: #ff0000; font-weight: bold; }
|
||||
.org-widget-button { /* widget-button */ font-weight: bold; }
|
||||
.org-widget-button-pressed { /* widget-button-pressed */ color: #ff0000; }
|
||||
.org-widget-documentation { /* widget-documentation */ color: #006400; }
|
||||
.org-widget-field { /* widget-field */ background-color: #d9d9d9; }
|
||||
.org-widget-inactive { /* widget-inactive */ color: #7f7f7f; }
|
||||
.org-widget-single-line-field { /* widget-single-line-field */ background-color: #d9d9d9; }
|
1108
css/readtheorg.css
Normal file
BIN
figs/accelerometers_ty_overview.jpg
Normal file
After Width: | Height: | Size: 814 KiB |
BIN
figs/classical_feedback_small.pdf
Normal file
BIN
figs/classical_feedback_small.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
figs/control-schematic-nass.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
figs/dist_effect_relative_motion.png
Normal file
After Width: | Height: | Size: 146 KiB |
BIN
figs/dist_effect_relative_motion_cas.png
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
figs/exp_scans_rz_dist.png
Normal file
After Width: | Height: | Size: 111 KiB |
BIN
figs/h-infinity-2-blocs-constrains.pdf
Normal file
BIN
figs/h-infinity-2-blocs-constrains.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
figs/hammer_z.gif
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
figs/identification_comp_top_stages.png
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
figs/mode1.gif
Normal file
After Width: | Height: | Size: 447 KiB |
BIN
figs/mode6.gif
Normal file
After Width: | Height: | Size: 412 KiB |
BIN
figs/oomen18_next_gen_loop_gain.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
figs/psd_lti_system.pdf
Normal file
BIN
figs/psd_lti_system.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
figs/psd_sum.pdf
Normal file
BIN
figs/psd_sum.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
955
index.html
Normal file
@ -0,0 +1,955 @@
|
||||
<?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-24 ven. 10:04 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Design of the Nano-Hexapod and associated Control Architectures - Summary</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="Thomas Dehaeze" />
|
||||
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
<script src="./js/jquery.min.js"></script>
|
||||
<script src="./js/bootstrap.min.js"></script>
|
||||
<script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
<script src="./js/readtheorg.js"></script>
|
||||
<script>MathJax = {
|
||||
tex: {
|
||||
tags: 'ams',
|
||||
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">
|
||||
<a accesskey="h" href="./index.html"> UP </a>
|
||||
|
|
||||
<a accesskey="H" href="./index.html"> HOME </a>
|
||||
</div><div id="content">
|
||||
<h1 class="title">Design of the Nano-Hexapod and associated Control Architectures - Summary</h1>
|
||||
<div id="table-of-contents">
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents">
|
||||
<ul>
|
||||
<li><a href="#org1ebb312">1. Feedback Systems and Noise budgeting</a>
|
||||
<ul>
|
||||
<li><a href="#orged00ed8">1.1. Simple Feedback System</a></li>
|
||||
<li><a href="#orgd80b3a4">1.2. Noise Budgeting</a>
|
||||
<ul>
|
||||
<li><a href="#org285ec41">1.2.1. Power Spectral Density</a></li>
|
||||
<li><a href="#orgb3cea28">1.2.2. Cumulative Power Spectrum</a></li>
|
||||
<li><a href="#org001444e">1.2.3. Modification of a signal’s PSD when going through an LTI system</a></li>
|
||||
<li><a href="#orgcd51b86">1.2.4. PSD of combined signals</a></li>
|
||||
<li><a href="#org0b1c110">1.2.5. Dynamic Noise Budgeting</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orge932373">1.3. Trade off Robustness / Performance</a></li>
|
||||
<li><a href="#org88cd5c7">1.4. Sensibility Transfer Function and Control Bandwidth</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org37081e4">2. Identification of the Micro-Station Dynamics</a>
|
||||
<ul>
|
||||
<li><a href="#org1040ffe">2.1. Setup</a></li>
|
||||
<li><a href="#orge73fc2d">2.2. Results</a></li>
|
||||
<li><a href="#orgb5b5707">2.3. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org21d6a3a">3. Identification of the Disturbances</a>
|
||||
<ul>
|
||||
<li><a href="#org921aacd">3.1. Ground Motion</a></li>
|
||||
<li><a href="#org29a5b53">3.2. Stage Vibration - Effect of Control systems</a></li>
|
||||
<li><a href="#org950642c">3.3. Stage Vibration - Effect of Motion</a></li>
|
||||
<li><a href="#orga751b95">3.4. Sum of all disturbances</a></li>
|
||||
<li><a href="#org8e40e87">3.5. Better measurement of the effect of disturbances</a></li>
|
||||
<li><a href="#orgd53103b">3.6. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgb432a56">4. Multi Body Model</a>
|
||||
<ul>
|
||||
<li><a href="#orgc845b32">4.1. Validity of the model</a></li>
|
||||
<li><a href="#org2ab00ff">4.2. Wanted position of the sample and position error</a></li>
|
||||
<li><a href="#org617d1bd">4.3. Simulation of Experiments</a></li>
|
||||
<li><a href="#orgd6a204b">4.4. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org4d9c449">5. Optimal Nano-Hexapod Design</a>
|
||||
<ul>
|
||||
<li><a href="#orgcff3ffb">5.1. Optimal Stiffness to reduce the effect of disturbances</a></li>
|
||||
<li><a href="#org41cb1f2">5.2. Optimal Stiffness</a></li>
|
||||
<li><a href="#orgfcd339f">5.3. Sensors to be included</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org4e424bf">6. Robust Control Architecture</a>
|
||||
<ul>
|
||||
<li><a href="#org8d95a62">6.1. Simulation of Tomography Experiments</a></li>
|
||||
<li><a href="#org1fe589e">6.2. Conclusion</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The overall objective is to design a nano-hexapod an the associated control architecture that allows the stabilization of samples down to \(\approx 10nm\) in presence of disturbances and system variability.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
To understand the design challenges of such system, a short introduction to Feedback control is provided in Section <a href="#org9c267f2">1</a>.
|
||||
The mathematical tools (Power Spectral Density, Noise Budgeting, …) that will be used throughout this study are also introduced.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
To be able to develop both the nano-hexapod and the control architecture in an optimal way, we need a good estimation of:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>the micro-station dynamics (Section <a href="#org60b06bf">2</a>)</li>
|
||||
<li>the frequency content of the important source of disturbances in play such as vibration of stages and ground motion (Section <a href="#org683f554">3</a>)</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>
|
||||
We then develop a model of the system that must represent all the important physical effects in play.
|
||||
Such model is presented in Section <a href="#org16c52a1">4</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
A modular model of the nano-hexapod is then included in the system.
|
||||
The effects of the nano-hexapod characteristics on the dynamics are then studied.
|
||||
Based on that, an optimal choice of the nano-hexapod stiffness is made (Section <a href="#orgc167d0d">5</a>).
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
Finally, using the optimally designed nano-hexapod, a robust control architecture is developed.
|
||||
Simulations are performed to show that this design gives acceptable performance and the required robustness (Section <a href="#org032166c">6</a>).
|
||||
</p>
|
||||
|
||||
<div id="outline-container-org1ebb312" class="outline-2">
|
||||
<h2 id="org1ebb312"><span class="section-number-2">1</span> Feedback Systems and Noise budgeting</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
<p>
|
||||
<a id="org9c267f2"></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orged00ed8" class="outline-3">
|
||||
<h3 id="orged00ed8"><span class="section-number-3">1.1</span> Simple Feedback System</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
We usually analyze dynamical systems in the frequency domain using the Laplace transform.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org72718b6" class="figure">
|
||||
<p><img src="figs/classical_feedback_small.png" alt="classical_feedback_small.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Figure caption</p>
|
||||
</div>
|
||||
|
||||
<ul class="org-ul">
|
||||
<li>\(y\) is the relative position of the sample with respect to the granite</li>
|
||||
<li>\(d\) is the disturbances affecting \(y\) (ground motion, vibration of stages)</li>
|
||||
<li>\(n\) is the noise of the sensor measuring \(y\)</li>
|
||||
<li>\(r\) is the reference signal, corresponding to the wanted \(y\)</li>
|
||||
<li>we note \(\epsilon = r - y\) the position error</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
\[ \epsilon = \frac{1}{1 + GK} r + \frac{GK}{1 + GK} n - \frac{G_d}{1 + GK} d \]
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We usually note:
|
||||
</p>
|
||||
\begin{align}
|
||||
S &= \frac{1}{1 + GK} \\
|
||||
T &= \frac{GK}{1 + GK}
|
||||
\end{align}
|
||||
|
||||
<p>
|
||||
\(S\) is called the sensibility transfer function and \(T\) the transmissibility transfer function.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
And we have:
|
||||
\[ \epsilon = S r + T n - G_d S d \]
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thus, we usually want \(|S|\) small such that the effect of disturbances are reduced down to acceptable levels and such that the system is able to follow the change of reference with only small tracking errors.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
However, when \(|S|\) is small, \(|T| \approx 1\) and all the sensor noise is transmitted to the position error.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org074a6bd" class="figure">
|
||||
<p><img src="figs/h-infinity-2-blocs-constrains.png" alt="h-infinity-2-blocs-constrains.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Figure caption</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The nano-hexapod characteristics will change both \(G\) and \(G_d\).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd80b3a4" class="outline-3">
|
||||
<h3 id="orgd80b3a4"><span class="section-number-3">1.2</span> Noise Budgeting</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
</div>
|
||||
<div id="outline-container-org285ec41" class="outline-4">
|
||||
<h4 id="org285ec41"><span class="section-number-4">1.2.1</span> Power Spectral Density</h4>
|
||||
<div class="outline-text-4" id="text-1-2-1">
|
||||
<p>
|
||||
The <b>Power Spectral Density</b> (PSD) \(S_{xx}(f)\) of the time domain \(x(t)\) (in \([m]\)) can be computed using the following equation:
|
||||
\[ S_{xx}(f) = \frac{1}{f_s} \sum_{m=-\infty}^{\infty} R_{xx}(m) e^{-j 2 \pi m f / f_s} \ \left[\frac{m^2}{\text{Hz}}\right] \]
|
||||
where
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>\(f_s\) is the sampling frequency in \([Hz]\)</li>
|
||||
<li>\(R_{xx}\) is the autocorrelation</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>
|
||||
The PSD \(S_{xx}(f)\) represents the distribution of the (average) signal power over frequency.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thus, the total power in the signal can be obtained by integrating these infinitesimal contributions, the Root Mean Square (RMS) value of the signal \(x(t)\) is then:
|
||||
</p>
|
||||
\begin{equation}
|
||||
x_{\text{rms}} = \sqrt{\int_{0}^{\infty} S_{xx}(f) df} \ [m,\text{rms}]
|
||||
\end{equation}
|
||||
|
||||
<p>
|
||||
One can also integrate the infinitesimal power \(S_{xx}(f)df\) over a finite frequency band to obtain the power of the signal \(x\) in that frequency band:
|
||||
</p>
|
||||
\begin{equation}
|
||||
P_{f_1,f_2} = \int_{f_1}^{f_2} S_{xx}(f) df \quad [m^2]
|
||||
\end{equation}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb3cea28" class="outline-4">
|
||||
<h4 id="orgb3cea28"><span class="section-number-4">1.2.2</span> Cumulative Power Spectrum</h4>
|
||||
<div class="outline-text-4" id="text-1-2-2">
|
||||
<p>
|
||||
The <b>Cumulative Power Spectrum</b> is the cumulative integral of the Power Spectral Density starting from \(0\ \text{Hz}\) with increasing frequency:
|
||||
</p>
|
||||
\begin{equation}
|
||||
CPS_x(f) = \int_0^f S_{xx}(\nu) d\nu \quad [\text{unit}^2]
|
||||
\end{equation}
|
||||
<p>
|
||||
The Cumulative Power Spectrum taken at frequency \(f\) thus represent the power in the signal in the frequency band \(0\) to \(f\).
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
An alternative definition of the Cumulative Power Spectrum can be used where the PSD is integrated from \(f\) to \(\infty\):
|
||||
</p>
|
||||
\begin{equation}
|
||||
CPS_x(f) = \int_f^\infty S_{xx}(\nu) d\nu \quad [\text{unit}^2]
|
||||
\end{equation}
|
||||
<p>
|
||||
And thus \(CPS_x(f)\) represents the power in the signal \(x\) for frequencies above \(f\).
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
The Cumulative Power Spectrum can be used to determine in which frequency band the effect of disturbances should be reduced and the approximated required control bandwidth in order to obtained some specified vibration amplitude.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org001444e" class="outline-4">
|
||||
<h4 id="org001444e"><span class="section-number-4">1.2.3</span> Modification of a signal’s PSD when going through an LTI system</h4>
|
||||
<div class="outline-text-4" id="text-1-2-3">
|
||||
<p>
|
||||
Let’s consider a signal \(u\) with a PSD \(S_{uu}\) going through a LTI system \(G(s)\) that outputs a signal \(y\) with a PSD (Figure <a href="#orgd2d6a31">3</a>).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orgd2d6a31" class="figure">
|
||||
<p><img src="figs/psd_lti_system.png" alt="psd_lti_system.png" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The Power Spectral Density of the output signal \(y\) can be computed using:
|
||||
</p>
|
||||
\begin{equation}
|
||||
S_{yy}(\omega) = \left|G(j\omega)\right|^2 S_{uu}(\omega)
|
||||
\end{equation}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgcd51b86" class="outline-4">
|
||||
<h4 id="orgcd51b86"><span class="section-number-4">1.2.4</span> PSD of combined signals</h4>
|
||||
<div class="outline-text-4" id="text-1-2-4">
|
||||
<p>
|
||||
Let’s consider a signal \(y\) that is the sum of two <b>uncorrelated</b> signals \(u\) and \(v\).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We have that the PSD of \(y\) is equal to sum of the PSD and \(u\) and the PSD of \(v\):
|
||||
\[ S_{yy} = S_{uu} + S_{vv} \]
|
||||
</p>
|
||||
|
||||
|
||||
<div class="figure">
|
||||
<p><img src="figs/psd_sum.png" alt="psd_sum.png" />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0b1c110" class="outline-4">
|
||||
<h4 id="org0b1c110"><span class="section-number-4">1.2.5</span> Dynamic Noise Budgeting</h4>
|
||||
<div class="outline-text-4" id="text-1-2-5">
|
||||
<p>
|
||||
Let’s consider the Feedback architecture,
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The position error \(\epsilon\) is equal to:
|
||||
\[ \epsilon = S r + T n - G_d S d \]
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If we suppose that the signals \(r\), \(n\) and \(d\) are <b>uncorrelated</b>, the PSD of \(\epsilon\) is:
|
||||
\[ S_{\epsilon \epsilon}(\omega) = |S(j\omega)|^2 S_{rr}(\omega) + |T(j\omega)|^2 S_{nn}(\omega) + |G_d(j\omega) S(j\omega)|^2 S_{dd}(\omega) \]
|
||||
</p>
|
||||
|
||||
<p>
|
||||
And the RMS residual motion is equal to:
|
||||
</p>
|
||||
\begin{align*}
|
||||
\epsilon_\text{rms} &= \sqrt{ \int_0^\infty S_{\epsilon\epsilon}(\omega) d\omega} \\
|
||||
&= \sqrt{ \int_0^\infty |S(j\omega)|^2 S_{rr}(\omega) + |T(j\omega)|^2 S_{nn}(\omega) + |G_d(j\omega) S(j\omega)|^2 S_{dd}(\omega) d\omega }
|
||||
\end{align*}
|
||||
|
||||
<p>
|
||||
To estimate the PSD of the position error \(\epsilon\) and thus the RMS residual motion, we need:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>The Power Spectral Densities of the signals affecting the system:
|
||||
<ul class="org-ul">
|
||||
<li>\(S_{rr}\)</li>
|
||||
<li>\(S_{nn}\)</li>
|
||||
<li>\(S_{dd}\)</li>
|
||||
</ul></li>
|
||||
<li>The dynamics of the system \(G\), \(G_d\) and the controller \(K\) (or alternatively \(S\), \(T\) and \(G_d\))</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge932373" class="outline-3">
|
||||
<h3 id="orge932373"><span class="section-number-3">1.3</span> Trade off Robustness / Performance</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<p>
|
||||
If we want high level of performance, the experimental conditions should be carefully controlled.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org02be852" class="figure">
|
||||
<p><img src="figs/oomen18_next_gen_loop_gain.png" alt="oomen18_next_gen_loop_gain.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Envisaged developments in motion systems. In traditional motion systems, the control bandwidth takes place in the rigid-body region. In the next generation systemes, flexible dynamics are foreseen to occur within the control bandwidth. <a class='org-ref-reference' href="#oomen18_advan_motion_contr_precis_mechat">oomen18_advan_motion_contr_precis_mechat</a></p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Limitation of feedback control:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>bandwidth is limited at a frequency where the behavior of the system is not known</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Predictible system.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For instance, ASML, everything is calibrated (wafer, some size, mass, etc…)
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Here, the main difficulty is that we want a very high performance system that is robust to change of:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Micro Station Configuration: position of the stages, change of on stage</li>
|
||||
<li>Payload mass and dynamics</li>
|
||||
<li>Spindle’s rotation speed</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org88cd5c7" class="outline-3">
|
||||
<h3 id="org88cd5c7"><span class="section-number-3">1.4</span> Sensibility Transfer Function and Control Bandwidth</h3>
|
||||
<div class="outline-text-3" id="text-1-4">
|
||||
<p>
|
||||
When applying feedback in a system, it is much more convenient to look at things in the frequency domain.
|
||||
</p>
|
||||
|
||||
|
||||
<ul class="org-ul">
|
||||
<li class="off"><code>[ ]</code> Add a</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
we will generally decrease the effect of the disturbances
|
||||
</p>
|
||||
|
||||
<ul class="org-ul">
|
||||
<li class="off"><code>[ ]</code> Find the citation where it is said that the bandwidth is the consequence of the wanted disturbance rejection at some lower frequency</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org37081e4" class="outline-2">
|
||||
<h2 id="org37081e4"><span class="section-number-2">2</span> Identification of the Micro-Station Dynamics</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
<p>
|
||||
<a id="org60b06bf"></a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://tdehaeze.github.io/meas-analysis/">https://tdehaeze.github.io/meas-analysis/</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Modal Analysis: <a href="https://tdehaeze.github.io/meas-analysis/modal-analysis/index.html">https://tdehaeze.github.io/meas-analysis/modal-analysis/index.html</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The obtained dynamics will allows us to compare the dynamics of the model.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1040ffe" class="outline-3">
|
||||
<h3 id="org1040ffe"><span class="section-number-3">2.1</span> Setup</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<p>
|
||||
In order to perform to <b>Modal Analysis</b> and to obtain first a response model, the following devices were used:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>An <b>acquisition system</b> (OROS) with 24bits ADCs</li>
|
||||
<li>3 tri-axis <b>Accelerometers</b></li>
|
||||
<li>An <b>Instrumented Hammer</b></li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
The measurement thus consists of:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Exciting the structure at the same location with the Hammer (Figure <a href="#org761e505">7</a>)</li>
|
||||
<li>Move the accelerometers to measure all the DOF of the structure.
|
||||
The position of the accelerometers are:
|
||||
<ul class="org-ul">
|
||||
<li>4 on the first granite</li>
|
||||
<li>4 on the second granite</li>
|
||||
<li>4 on top of the translation stage (figure <a href="#orge21b7ae">6</a>)</li>
|
||||
<li>4 on top of the tilt stage</li>
|
||||
<li>3 on top of the spindle</li>
|
||||
<li>4 on top of the hexapod</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
In total, 69 degrees of freedom are measured (23 tri axis accelerometers).
|
||||
</p>
|
||||
|
||||
|
||||
<div id="orge21b7ae" class="figure">
|
||||
<p><img src="figs/accelerometers_ty_overview.jpg" alt="accelerometers_ty_overview.jpg" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Figure caption</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="org761e505" class="figure">
|
||||
<p><img src="figs/hammer_z.gif" alt="hammer_z.gif" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Figure caption</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge73fc2d" class="outline-3">
|
||||
<h3 id="orge73fc2d"><span class="section-number-3">2.2</span> Results</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<p>
|
||||
From the measurements, we obtain
|
||||
</p>
|
||||
|
||||
<ul class="org-ul">
|
||||
<li>Reduction of the</li>
|
||||
<li>solid body assumption</li>
|
||||
<li>verification of the assumption => ok</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<div id="orgf558065" class="figure">
|
||||
<p><img src="figs/mode1.gif" alt="mode1.gif" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Figure caption</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orga787f68" class="figure">
|
||||
<p><img src="figs/mode6.gif" alt="mode6.gif" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Figure caption</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb5b5707" class="outline-3">
|
||||
<h3 id="orgb5b5707"><span class="section-number-3">2.3</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<p>
|
||||
The reduction of the number of degrees of freedom from 69 (23 accelerometers with each 3DOF) to 36 (6 solid bodies with 6 DOF) seems to work well.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This confirms the fact that the stages are indeed behaving as a solid body in the frequency band of interest. This valid the fact that a multi-body model can be used to represent the dynamics of the micro-station.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org21d6a3a" class="outline-2">
|
||||
<h2 id="org21d6a3a"><span class="section-number-2">3</span> Identification of the Disturbances</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
<p>
|
||||
<a id="org683f554"></a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://tdehaeze.github.io/meas-analysis/">https://tdehaeze.github.io/meas-analysis/</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Open Loop Noise budget: <a href="https://tdehaeze.github.io/nass-simscape/disturbances.html">https://tdehaeze.github.io/nass-simscape/disturbances.html</a>
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
Static Guiding errors:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>measured at the PEL</li>
|
||||
<li>low frequency errors, will thus be compensated</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
The problem are on the high frequency disturbances
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org921aacd" class="outline-3">
|
||||
<h3 id="org921aacd"><span class="section-number-3">3.1</span> Ground Motion</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<p>
|
||||
<a id="orgd691c23"></a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="outline-container-org29a5b53" class="outline-3">
|
||||
<h3 id="org29a5b53"><span class="section-number-3">3.2</span> Stage Vibration - Effect of Control systems</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<p>
|
||||
<a id="org72b8b7c"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Control system of each stage has been tested
|
||||
<a href="https://tdehaeze.github.io/meas-analysis/disturbance-control-system/index.html">https://tdehaeze.github.io/meas-analysis/disturbance-control-system/index.html</a>
|
||||
<a href="https://tdehaeze.github.io/meas-analysis/2018-10-15%20-%20Marc/index.html">https://tdehaeze.github.io/meas-analysis/2018-10-15%20-%20Marc/index.html</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
25Hz vertical motion when the <b>Spindle</b> is turned on (even when not rotating).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org950642c" class="outline-3">
|
||||
<h3 id="org950642c"><span class="section-number-3">3.3</span> Stage Vibration - Effect of Motion</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<p>
|
||||
<a id="org42b129f"></a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We consider:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>The rotation of the Spindle</li>
|
||||
<li>The translation of the Translation Stage</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orga751b95" class="outline-3">
|
||||
<h3 id="orga751b95"><span class="section-number-3">3.4</span> Sum of all disturbances</h3>
|
||||
<div class="outline-text-3" id="text-3-4">
|
||||
|
||||
<div id="org9004051" class="figure">
|
||||
<p><img src="figs/dist_effect_relative_motion.png" alt="dist_effect_relative_motion.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Amplitude Spectral Density fo the motion error due to disturbances</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="org91e3918" class="figure">
|
||||
<p><img src="figs/dist_effect_relative_motion_cas.png" alt="dist_effect_relative_motion_cas.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>Cumulative Amplitude Spectrum of the motion error due to disturbances</p>
|
||||
</div>
|
||||
|
||||
|
||||
<p>
|
||||
Expected required bandwidth
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8e40e87" class="outline-3">
|
||||
<h3 id="org8e40e87"><span class="section-number-3">3.5</span> Better measurement of the effect of disturbances</h3>
|
||||
<div class="outline-text-3" id="text-3-5">
|
||||
<p>
|
||||
Here, the measurement were made with inertial sensors.
|
||||
However, we are interested in the relative motion of the sample with respect to the granite and not the absolute motion.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
The best measurement of the disturbances would be to have the metrology already functioning.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
We could perform a measurement using the X-ray.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Detector Requirement:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Sample frequency above \(400Hz\)</li>
|
||||
<li>Resolution of \(\approx 20nm\)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd53103b" class="outline-3">
|
||||
<h3 id="orgd53103b"><span class="section-number-3">3.6</span> Conclusion</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgb432a56" class="outline-2">
|
||||
<h2 id="orgb432a56"><span class="section-number-2">4</span> Multi Body Model</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
<p>
|
||||
<a id="org16c52a1"></a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://tdehaeze.github.io/nass-simscape/">https://tdehaeze.github.io/nass-simscape/</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Multi-Body model
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgc845b32" class="outline-3">
|
||||
<h3 id="orgc845b32"><span class="section-number-3">4.1</span> Validity of the model</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<p>
|
||||
The mass/inertia of each stage is automatically computed from the geometry and the density of the materials.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The stiffness of each joint is first set to measured values or stiffness from data sheets.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Then, the values of the stiffness and damping of each joint is manually tuned until the obtained dynamics is sufficiently close to the measured dynamics.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
We could, from the measurement, automatically extract the stiffness and damping values, we this would have required a lot of work and having a perfect match is not required here.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Comparison model - measurements : <a href="https://tdehaeze.github.io/nass-simscape/identification.html">https://tdehaeze.github.io/nass-simscape/identification.html</a>
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org3c5be1f" class="figure">
|
||||
<p><img src="figs/identification_comp_top_stages.png" alt="identification_comp_top_stages.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 12: </span>Figure caption</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org2ab00ff" class="outline-3">
|
||||
<h3 id="org2ab00ff"><span class="section-number-3">4.2</span> Wanted position of the sample and position error</h3>
|
||||
<div class="outline-text-3" id="text-4-2">
|
||||
<p>
|
||||
From the reference position of each stage, we can compute the wanted pose of the sample with respect to the granite.
|
||||
This is done with multiple transformation matrices.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Then, from the measurement of the metrology corresponding to the position of the sample with respect to the granite, we can compute the position error of the sample expressed in a frame fixed to the nano-hexapod.
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org877f850" class="figure">
|
||||
<p><img src="figs/control-schematic-nass.png" alt="control-schematic-nass.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 13: </span>Figure caption</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Measurement of the sample’s position - conversion of positioning error in the frame of the Nano-hexapod for control: <a href="https://tdehaeze.github.io/nass-simscape/positioning_error.html">https://tdehaeze.github.io/nass-simscape/positioning_error.html</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org617d1bd" class="outline-3">
|
||||
<h3 id="org617d1bd"><span class="section-number-3">4.3</span> Simulation of Experiments</h3>
|
||||
<div class="outline-text-3" id="text-4-3">
|
||||
<p>
|
||||
Now that the
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>dynamics of the model is tuned</li>
|
||||
<li>disturbances are included in the model</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
We can perform simulation of experiments.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="https://tdehaeze.github.io/nass-simscape/experiments.html">https://tdehaeze.github.io/nass-simscape/experiments.html</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="#org317cc58">14</a>
|
||||
</p>
|
||||
|
||||
|
||||
<div id="org317cc58" class="figure">
|
||||
<p><img src="figs/exp_scans_rz_dist.png" alt="exp_scans_rz_dist.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 14: </span>Position error of the Sample with respect to the granite during a Tomography Experiment with included disturbances</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgd6a204b" class="outline-3">
|
||||
<h3 id="orgd6a204b"><span class="section-number-3">4.4</span> Conclusion</h3>
|
||||
<div class="outline-text-3" id="text-4-4">
|
||||
<div class="important">
|
||||
<p>
|
||||
Possible to study many effects.
|
||||
Extraction of transfer function like \(G\) and \(G_d\).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Simulation of experiments to validate performance.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org4d9c449" class="outline-2">
|
||||
<h2 id="org4d9c449"><span class="section-number-2">5</span> Optimal Nano-Hexapod Design</h2>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
<p>
|
||||
<a id="orgc167d0d"></a>
|
||||
</p>
|
||||
<p>
|
||||
As explain before, the nano-hexapod properties (mass, stiffness, architecture, …) will influence:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>the plant dynamics \(G\)</li>
|
||||
<li>the effect of disturbances \(G_d\)</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
We which here to choose the nano-hexapod properties such that:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>has an easy</li>
|
||||
<li>minimize the</li>
|
||||
<li>minimize \(|G_d|\)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgcff3ffb" class="outline-3">
|
||||
<h3 id="orgcff3ffb"><span class="section-number-3">5.1</span> Optimal Stiffness to reduce the effect of disturbances</h3>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org41cb1f2" class="outline-3">
|
||||
<h3 id="org41cb1f2"><span class="section-number-3">5.2</span> Optimal Stiffness</h3>
|
||||
<div class="outline-text-3" id="text-5-2">
|
||||
<p>
|
||||
The goal is to design a system that is <b>robust</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thus, we have to identify the sources of uncertainty and try to minimize them.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Uncertainty in the system can be caused by:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Effect of Support Compliance: <a href="https://tdehaeze.github.io/nass-simscape/uncertainty_support.html">https://tdehaeze.github.io/nass-simscape/uncertainty_support.html</a></li>
|
||||
<li>Effect of Payload Dynamics: <a href="https://tdehaeze.github.io/nass-simscape/uncertainty_payload.html">https://tdehaeze.github.io/nass-simscape/uncertainty_payload.html</a></li>
|
||||
<li>Effect of experimental condition (micro-station pose, spindle rotation): <a href="https://tdehaeze.github.io/nass-simscape/uncertainty_experiment.html">https://tdehaeze.github.io/nass-simscape/uncertainty_experiment.html</a></li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
All these uncertainty will limit the maximum attainable bandwidth.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Fortunately, the nano-hexapod stiffness have an influence on the dynamical uncertainty induced by the above effects.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Determination of the optimal stiffness based on all the effects:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li><a href="https://tdehaeze.github.io/nass-simscape/uncertainty_optimal_stiffness.html">https://tdehaeze.github.io/nass-simscape/uncertainty_optimal_stiffness.html</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="conclusion">
|
||||
<p>
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p>
|
||||
The main performance limitation are payload variability
|
||||
</p>
|
||||
<div class="question">
|
||||
<p>
|
||||
Main problem: heavy samples with small stiffness.
|
||||
The first resonance frequency of the sample will limit the performance.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p>
|
||||
The nano-hexapod stiffness will also change the sensibility to disturbances.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Effect of Nano-hexapod stiffness on the Sensibility to disturbances: <a href="https://tdehaeze.github.io/nass-simscape/optimal_stiffness_disturbances.html">https://tdehaeze.github.io/nass-simscape/optimal_stiffness_disturbances.html</a>
|
||||
</p>
|
||||
|
||||
<div class="conclusion">
|
||||
<p>
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgfcd339f" class="outline-3">
|
||||
<h3 id="orgfcd339f"><span class="section-number-3">5.3</span> Sensors to be included</h3>
|
||||
<div class="outline-text-3" id="text-5-3">
|
||||
<p>
|
||||
Ways to damp:
|
||||
</p>
|
||||
<ul class="org-ul">
|
||||
<li>Force Sensor</li>
|
||||
<li>Relative Velocity Sensors</li>
|
||||
<li>Inertial Sensor</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
<a href="https://tdehaeze.github.io/rotating-frame/index.html">https://tdehaeze.github.io/rotating-frame/index.html</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Sensors to be included:
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org4e424bf" class="outline-2">
|
||||
<h2 id="org4e424bf"><span class="section-number-2">6</span> Robust Control Architecture</h2>
|
||||
<div class="outline-text-2" id="text-6">
|
||||
<p>
|
||||
<a id="org032166c"></a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://tdehaeze.github.io/nass-simscape/optimal_stiffness_control.html">https://tdehaeze.github.io/nass-simscape/optimal_stiffness_control.html</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org8d95a62" class="outline-3">
|
||||
<h3 id="org8d95a62"><span class="section-number-3">6.1</span> Simulation of Tomography Experiments</h3>
|
||||
<div class="outline-text-3" id="text-6-1">
|
||||
<p>
|
||||
<a id="org43e5a22"></a>
|
||||
</p>
|
||||
|
||||
<ul class="org-ul">
|
||||
<li>Make several animations
|
||||
<ul class="org-ul">
|
||||
<li class="off"><code>[ ]</code> One of a tomography experiment where we see all the station rotating</li>
|
||||
<li class="off"><code>[ ]</code> A zoom on at the nano-meter level to see how the wanted position is moving</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org1fe589e" class="outline-3">
|
||||
<h3 id="org1fe589e"><span class="section-number-3">6.2</span> Conclusion</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="date">Date: 04-2020</p>
|
||||
<p class="author">Author: Thomas Dehaeze</p>
|
||||
<p class="date">Created: 2020-04-24 ven. 10:04</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
553
index.org
Normal file
@ -0,0 +1,553 @@
|
||||
#+TITLE: Design of the Nano-Hexapod and associated Control Architectures - Summary
|
||||
:DRAWER:
|
||||
#+HTML_LINK_HOME: ./index.html
|
||||
#+HTML_LINK_UP: ./index.html
|
||||
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
|
||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
|
||||
#+HTML_HEAD: <script src="./js/jquery.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/bootstrap.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/jquery.stickytableheaders.min.js"></script>
|
||||
#+HTML_HEAD: <script src="./js/readtheorg.js"></script>
|
||||
|
||||
#+STARTUP: overview
|
||||
#+DATE: 04-2020
|
||||
|
||||
#+LATEX_CLASS: cleanreport
|
||||
#+LATEX_CLASS_OPTIONS: [conf, hangsection, secbreak]
|
||||
|
||||
#+LATEX_HEADER: \newcommand{\authorFirstName}{Thomas}
|
||||
#+LATEX_HEADER: \newcommand{\authorLastName}{Dehaeze}
|
||||
#+LATEX_HEADER: \newcommand{\authorEmail}{dehaeze.thomas@gmail.com}
|
||||
|
||||
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/tikz/org/}{config.tex}")
|
||||
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
|
||||
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
|
||||
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
|
||||
#+PROPERTY: header-args:latex+ :results file raw replace
|
||||
#+PROPERTY: header-args:latex+ :buffer no
|
||||
#+PROPERTY: header-args:latex+ :eval no-export
|
||||
#+PROPERTY: header-args:latex+ :exports results
|
||||
#+PROPERTY: header-args:latex+ :mkdirp yes
|
||||
#+PROPERTY: header-args:latex+ :output-dir figs
|
||||
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
|
||||
:END:
|
||||
|
||||
* Introduction :ignore:
|
||||
The overall objective is to design a nano-hexapod an the associated control architecture that allows the stabilization of samples down to $\approx 10nm$ in presence of disturbances and system variability.
|
||||
|
||||
|
||||
To understand the design challenges of such system, a short introduction to Feedback control is provided in Section [[sec:feedback]].
|
||||
The mathematical tools (Power Spectral Density, Noise Budgeting, ...) that will be used throughout this study are also introduced.
|
||||
|
||||
|
||||
To be able to develop both the nano-hexapod and the control architecture in an optimal way, we need a good estimation of:
|
||||
- the micro-station dynamics (Section [[sec:micro_station_dynamics]])
|
||||
- the frequency content of the important source of disturbances in play such as vibration of stages and ground motion (Section [[sec:identification_disturbances]])
|
||||
|
||||
|
||||
We then develop a model of the system that must represent all the important physical effects in play.
|
||||
Such model is presented in Section [[sec:multi_body_model]].
|
||||
|
||||
|
||||
A modular model of the nano-hexapod is then included in the system.
|
||||
The effects of the nano-hexapod characteristics on the dynamics are then studied.
|
||||
Based on that, an optimal choice of the nano-hexapod stiffness is made (Section [[sec:nano_hexapod_design]]).
|
||||
|
||||
|
||||
Finally, using the optimally designed nano-hexapod, a robust control architecture is developed.
|
||||
Simulations are performed to show that this design gives acceptable performance and the required robustness (Section [[sec:robust_control_architecture]]).
|
||||
|
||||
* Feedback Systems and Noise budgeting
|
||||
<<sec:feedback>>
|
||||
|
||||
** Simple Feedback System
|
||||
We usually analyze dynamical systems in the frequency domain using the Laplace transform.
|
||||
|
||||
#+begin_src latex :file classical_feedback_small.pdf
|
||||
\begin{tikzpicture}
|
||||
\node[addb={+}{}{}{}{-}] (addfb) at (0, 0){};
|
||||
\node[block, right=0.6 of addfb] (K){$K$};
|
||||
\node[block, right=0.6 of K] (G){$G$};
|
||||
\node[addb={+}{}{}{}{}, right=0.6 of G] (adddy){};
|
||||
\node[addb={+}{}{}{}{}, below right=0.6 and 0.6 of adddy] (addn) {};
|
||||
\node[block, above=0.7 of adddy] (Gd){$G_d$};
|
||||
|
||||
\draw[<-] (addfb.west) -- ++(-0.6, 0) node[above right]{$r$};
|
||||
\draw[->] (addfb.east) -- (K.west);
|
||||
\draw[->] (K.east) -- (G.west) node[above left]{$u$};
|
||||
\draw[->] (G.east) -- (adddy.west);
|
||||
\draw[<-] (addn.east) -- ++(0.6, 0) coordinate[](endpos) node[above left]{$n$};
|
||||
\draw[->] (adddy.east) -- (G-|endpos) node[above left]{$y$};
|
||||
\draw[->] (adddy-|addn) node[branch]{} -- (addn.north);
|
||||
\draw[->] (addn.west) -| (addfb.south) node[below right]{$y_m$};
|
||||
\draw[<-] (adddy.north) -- (Gd.south);
|
||||
\draw[<-] (Gd.north) -- ++(0, 0.7) node[below right]{$d$};
|
||||
\end{tikzpicture}
|
||||
#+end_src
|
||||
|
||||
#+name: fig:classical_feedback_small
|
||||
#+caption: Figure caption
|
||||
#+RESULTS:
|
||||
[[file:figs/classical_feedback_small.png]]
|
||||
|
||||
- $y$ is the relative position of the sample with respect to the granite
|
||||
- $d$ is the disturbances affecting $y$ (ground motion, vibration of stages)
|
||||
- $n$ is the noise of the sensor measuring $y$
|
||||
- $r$ is the reference signal, corresponding to the wanted $y$
|
||||
- we note $\epsilon = r - y$ the position error
|
||||
|
||||
\[ \epsilon = \frac{1}{1 + GK} r + \frac{GK}{1 + GK} n - \frac{G_d}{1 + GK} d \]
|
||||
|
||||
We usually note:
|
||||
\begin{align}
|
||||
S &= \frac{1}{1 + GK} \\
|
||||
T &= \frac{GK}{1 + GK}
|
||||
\end{align}
|
||||
|
||||
$S$ is called the sensibility transfer function and $T$ the transmissibility transfer function.
|
||||
|
||||
And we have:
|
||||
\[ \epsilon = S r + T n - G_d S d \]
|
||||
|
||||
Thus, we usually want $|S|$ small such that the effect of disturbances are reduced down to acceptable levels and such that the system is able to follow the change of reference with only small tracking errors.
|
||||
|
||||
However, when $|S|$ is small, $|T| \approx 1$ and all the sensor noise is transmitted to the position error.
|
||||
|
||||
#+begin_src latex :file h-infinity-2-blocs-constrains.pdf
|
||||
\begin{tikzpicture}
|
||||
\begin{scope}[shift={(0, 0)}]
|
||||
\draw[] (2.5, 1.0) node[]{$\left| S(j\omega) \right|$};
|
||||
\draw[fill=blue!20] (-0.2, -2.5) rectangle (1.4, 0.5);
|
||||
\draw[] (0.6, -0.5) node[]{$\sim \left| GK \right|^{-1}$};
|
||||
\draw[fill=red!20] (3.6, -2.5) rectangle (5.2, 0.5);
|
||||
\draw[] (4.5, -0.5) node[]{$\sim 1$};
|
||||
\draw[fill=red!20] (2.5, 0.15) circle (0.15);
|
||||
\draw[dashed] (-0.4, 0) -- (5.4, 0);
|
||||
\draw [] (0,-2) to[out=45,in=180+45] (2,0) to[out=45,in=180] (2.5,0.3) to[out=0,in=180] (3.5,0) to[out=0,in=180] (5, 0);
|
||||
\draw[dashed] (-0.5, -2.7) rectangle (5.5, 1.4);
|
||||
\end{scope}
|
||||
|
||||
\begin{scope}[shift={(6.4, 0)}]
|
||||
\draw[] (2.5, 1.0) node[]{$\left| T(j\omega) \right|$};
|
||||
\draw[fill=red!20] (-0.2, -2.5) rectangle (1.4, 0.5);
|
||||
\draw[] (0.6, -0.5) node[]{$\sim 1$};
|
||||
\draw[fill=blue!20] (3.6, -2.5) rectangle (5.2, 0.5);
|
||||
\draw[] (4.5, -0.5) node[]{$\sim \left| GK \right|$};
|
||||
\draw[fill=red!20] (2.5, 0.15) circle (0.15);
|
||||
\draw[dashed] (-0.4, 0) -- (5.4, 0);
|
||||
\draw [] (0,0) to[out=0,in=180] (1.5,0) to[out=0,in=180] (2.5,0.3) to[out=0,in=-45] (3,0) to[out=-45,in=180-45] (5, -2);
|
||||
\draw[dashed] (-0.5, -2.7) rectangle (5.5, 1.4);
|
||||
\end{scope}
|
||||
\end{tikzpicture}
|
||||
#+end_src
|
||||
|
||||
#+name: fig:h-infinity-2-blocs-constrains
|
||||
#+caption: Figure caption
|
||||
#+RESULTS:
|
||||
[[file:figs/h-infinity-2-blocs-constrains.png]]
|
||||
|
||||
The nano-hexapod characteristics will change both $G$ and $G_d$.
|
||||
|
||||
** Noise Budgeting
|
||||
*** Introduction :ignore:
|
||||
|
||||
*** Power Spectral Density
|
||||
The *Power Spectral Density* (PSD) $S_{xx}(f)$ of the time domain $x(t)$ (in $[m]$) can be computed using the following equation:
|
||||
\[ S_{xx}(f) = \frac{1}{f_s} \sum_{m=-\infty}^{\infty} R_{xx}(m) e^{-j 2 \pi m f / f_s} \ \left[\frac{m^2}{\text{Hz}}\right] \]
|
||||
where
|
||||
- $f_s$ is the sampling frequency in $[Hz]$
|
||||
- $R_{xx}$ is the autocorrelation
|
||||
|
||||
|
||||
The PSD $S_{xx}(f)$ represents the distribution of the (average) signal power over frequency.
|
||||
|
||||
Thus, the total power in the signal can be obtained by integrating these infinitesimal contributions, the Root Mean Square (RMS) value of the signal $x(t)$ is then:
|
||||
\begin{equation}
|
||||
x_{\text{rms}} = \sqrt{\int_{0}^{\infty} S_{xx}(f) df} \ [m,\text{rms}]
|
||||
\end{equation}
|
||||
|
||||
One can also integrate the infinitesimal power $S_{xx}(f)df$ over a finite frequency band to obtain the power of the signal $x$ in that frequency band:
|
||||
\begin{equation}
|
||||
P_{f_1,f_2} = \int_{f_1}^{f_2} S_{xx}(f) df \quad [m^2]
|
||||
\end{equation}
|
||||
|
||||
*** Cumulative Power Spectrum
|
||||
The *Cumulative Power Spectrum* is the cumulative integral of the Power Spectral Density starting from $0\ \text{Hz}$ with increasing frequency:
|
||||
\begin{equation}
|
||||
CPS_x(f) = \int_0^f S_{xx}(\nu) d\nu \quad [\text{unit}^2]
|
||||
\end{equation}
|
||||
The Cumulative Power Spectrum taken at frequency $f$ thus represent the power in the signal in the frequency band $0$ to $f$.
|
||||
|
||||
|
||||
An alternative definition of the Cumulative Power Spectrum can be used where the PSD is integrated from $f$ to $\infty$:
|
||||
\begin{equation}
|
||||
CPS_x(f) = \int_f^\infty S_{xx}(\nu) d\nu \quad [\text{unit}^2]
|
||||
\end{equation}
|
||||
And thus $CPS_x(f)$ represents the power in the signal $x$ for frequencies above $f$.
|
||||
|
||||
|
||||
The Cumulative Power Spectrum can be used to determine in which frequency band the effect of disturbances should be reduced and the approximated required control bandwidth in order to obtained some specified vibration amplitude.
|
||||
|
||||
*** Modification of a signal's PSD when going through an LTI system
|
||||
Let's consider a signal $u$ with a PSD $S_{uu}$ going through a LTI system $G(s)$ that outputs a signal $y$ with a PSD (Figure [[fig:psd_lti_system]]).
|
||||
|
||||
#+begin_src latex :file psd_lti_system.pdf
|
||||
\begin{tikzpicture}
|
||||
\node[block] (G) at (0, 0) {$G(s)$};
|
||||
|
||||
\draw[<-] (G.west) -- node[midway, above]{$u$} ++(-1.4, 0);
|
||||
\draw[->] (G.east) -- node[midway, above]{$y$} ++(1.4, 0);
|
||||
\end{tikzpicture}
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:psd_lti_system
|
||||
#+CAPTION:
|
||||
#+RESULTS:
|
||||
[[file:figs/psd_lti_system.png]]
|
||||
|
||||
The Power Spectral Density of the output signal $y$ can be computed using:
|
||||
\begin{equation}
|
||||
S_{yy}(\omega) = \left|G(j\omega)\right|^2 S_{uu}(\omega)
|
||||
\end{equation}
|
||||
|
||||
*** PSD of combined signals
|
||||
Let's consider a signal $y$ that is the sum of two *uncorrelated* signals $u$ and $v$.
|
||||
|
||||
We have that the PSD of $y$ is equal to sum of the PSD and $u$ and the PSD of $v$:
|
||||
\[ S_{yy} = S_{uu} + S_{vv} \]
|
||||
|
||||
#+begin_src latex :file psd_sum.pdf
|
||||
\begin{tikzpicture}
|
||||
\node[addb] (addb) at (0, 0) {};
|
||||
|
||||
\draw[<-] (addb.north west) -- ++(-0.5, 0.5) -- node[midway, above]{$u$} ++(-1.4, 0);
|
||||
\draw[<-] (addb.south west) -- ++(-0.5, -0.5) -- node[midway, above]{$v$} ++(-1.4, 0);
|
||||
|
||||
\draw[->] (addb.east) -- node[midway, above]{$y$} ++(1.4, 0);
|
||||
\end{tikzpicture}
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
[[file:figs/psd_sum.png]]
|
||||
|
||||
*** Dynamic Noise Budgeting
|
||||
Let's consider the Feedback architecture,
|
||||
|
||||
The position error $\epsilon$ is equal to:
|
||||
\[ \epsilon = S r + T n - G_d S d \]
|
||||
|
||||
If we suppose that the signals $r$, $n$ and $d$ are *uncorrelated*, the PSD of $\epsilon$ is:
|
||||
\[ S_{\epsilon \epsilon}(\omega) = |S(j\omega)|^2 S_{rr}(\omega) + |T(j\omega)|^2 S_{nn}(\omega) + |G_d(j\omega) S(j\omega)|^2 S_{dd}(\omega) \]
|
||||
|
||||
And the RMS residual motion is equal to:
|
||||
\begin{align*}
|
||||
\epsilon_\text{rms} &= \sqrt{ \int_0^\infty S_{\epsilon\epsilon}(\omega) d\omega} \\
|
||||
&= \sqrt{ \int_0^\infty |S(j\omega)|^2 S_{rr}(\omega) + |T(j\omega)|^2 S_{nn}(\omega) + |G_d(j\omega) S(j\omega)|^2 S_{dd}(\omega) d\omega }
|
||||
\end{align*}
|
||||
|
||||
To estimate the PSD of the position error $\epsilon$ and thus the RMS residual motion, we need:
|
||||
- The Power Spectral Densities of the signals affecting the system:
|
||||
- $S_{rr}$
|
||||
- $S_{nn}$
|
||||
- $S_{dd}$
|
||||
- The dynamics of the system $G$, $G_d$ and the controller $K$ (or alternatively $S$, $T$ and $G_d$)
|
||||
|
||||
** Trade off Robustness / Performance
|
||||
If we want high level of performance, the experimental conditions should be carefully controlled.
|
||||
|
||||
#+name: fig:oomen18_next_gen_loop_gain
|
||||
#+caption: Envisaged developments in motion systems. In traditional motion systems, the control bandwidth takes place in the rigid-body region. In the next generation systemes, flexible dynamics are foreseen to occur within the control bandwidth. cite:oomen18_advan_motion_contr_precis_mechat
|
||||
[[file:figs/oomen18_next_gen_loop_gain.png]]
|
||||
|
||||
Limitation of feedback control:
|
||||
- bandwidth is limited at a frequency where the behavior of the system is not known
|
||||
|
||||
Predictible system.
|
||||
|
||||
For instance, ASML, everything is calibrated (wafer, some size, mass, etc...)
|
||||
|
||||
Here, the main difficulty is that we want a very high performance system that is robust to change of:
|
||||
- Micro Station Configuration: position of the stages, change of on stage
|
||||
- Payload mass and dynamics
|
||||
- Spindle's rotation speed
|
||||
|
||||
** Sensibility Transfer Function and Control Bandwidth
|
||||
|
||||
When applying feedback in a system, it is much more convenient to look at things in the frequency domain.
|
||||
|
||||
|
||||
- [ ] Add a
|
||||
|
||||
we will generally decrease the effect of the disturbances
|
||||
|
||||
- [ ] Find the citation where it is said that the bandwidth is the consequence of the wanted disturbance rejection at some lower frequency
|
||||
|
||||
* Identification of the Micro-Station Dynamics
|
||||
<<sec:micro_station_dynamics>>
|
||||
|
||||
** Introduction :ignore:
|
||||
|
||||
https://tdehaeze.github.io/meas-analysis/
|
||||
|
||||
Modal Analysis: https://tdehaeze.github.io/meas-analysis/modal-analysis/index.html
|
||||
|
||||
The obtained dynamics will allows us to compare the dynamics of the model.
|
||||
|
||||
** Setup
|
||||
In order to perform to *Modal Analysis* and to obtain first a response model, the following devices were used:
|
||||
- An *acquisition system* (OROS) with 24bits ADCs
|
||||
- 3 tri-axis *Accelerometers*
|
||||
- An *Instrumented Hammer*
|
||||
|
||||
The measurement thus consists of:
|
||||
- Exciting the structure at the same location with the Hammer (Figure [[fig:hammer_z]])
|
||||
- Move the accelerometers to measure all the DOF of the structure.
|
||||
The position of the accelerometers are:
|
||||
- 4 on the first granite
|
||||
- 4 on the second granite
|
||||
- 4 on top of the translation stage (figure [[fig:accelerometers_ty_overview]])
|
||||
- 4 on top of the tilt stage
|
||||
- 3 on top of the spindle
|
||||
- 4 on top of the hexapod
|
||||
|
||||
In total, 69 degrees of freedom are measured (23 tri axis accelerometers).
|
||||
|
||||
#+name: fig:accelerometers_ty_overview
|
||||
#+caption: Figure caption
|
||||
[[file:figs/accelerometers_ty_overview.jpg]]
|
||||
|
||||
|
||||
#+name: fig:hammer_z
|
||||
#+caption: Figure caption
|
||||
[[file:figs/hammer_z.gif]]
|
||||
|
||||
** Results
|
||||
From the measurements, we obtain
|
||||
|
||||
- Reduction of the
|
||||
- solid body assumption
|
||||
- verification of the assumption => ok
|
||||
|
||||
#+name: fig:mode1
|
||||
#+caption: Figure caption
|
||||
[[file:figs/mode1.gif]]
|
||||
|
||||
#+name: fig:mode6
|
||||
#+caption: Figure caption
|
||||
[[file:figs/mode6.gif]]
|
||||
|
||||
** Conclusion
|
||||
The reduction of the number of degrees of freedom from 69 (23 accelerometers with each 3DOF) to 36 (6 solid bodies with 6 DOF) seems to work well.
|
||||
|
||||
This confirms the fact that the stages are indeed behaving as a solid body in the frequency band of interest. This valid the fact that a multi-body model can be used to represent the dynamics of the micro-station.
|
||||
|
||||
* Identification of the Disturbances
|
||||
<<sec:identification_disturbances>>
|
||||
|
||||
** Introduction :ignore:
|
||||
https://tdehaeze.github.io/meas-analysis/
|
||||
|
||||
Open Loop Noise budget: https://tdehaeze.github.io/nass-simscape/disturbances.html
|
||||
|
||||
|
||||
Static Guiding errors:
|
||||
- measured at the PEL
|
||||
- low frequency errors, will thus be compensated
|
||||
|
||||
The problem are on the high frequency disturbances
|
||||
|
||||
** Ground Motion
|
||||
<<sec:ground_motion>>
|
||||
|
||||
|
||||
|
||||
** Stage Vibration - Effect of Control systems
|
||||
<<sec:stage_vibration_control>>
|
||||
|
||||
Control system of each stage has been tested
|
||||
https://tdehaeze.github.io/meas-analysis/disturbance-control-system/index.html
|
||||
https://tdehaeze.github.io/meas-analysis/2018-10-15%20-%20Marc/index.html
|
||||
|
||||
25Hz vertical motion when the *Spindle* is turned on (even when not rotating).
|
||||
|
||||
|
||||
** Stage Vibration - Effect of Motion
|
||||
<<sec:stage_vibration_motion>>
|
||||
|
||||
We consider:
|
||||
- The rotation of the Spindle
|
||||
- The translation of the Translation Stage
|
||||
|
||||
** Sum of all disturbances
|
||||
|
||||
#+name: fig:dist_effect_relative_motion
|
||||
#+caption: Amplitude Spectral Density fo the motion error due to disturbances
|
||||
[[file:figs/dist_effect_relative_motion.png]]
|
||||
|
||||
|
||||
#+name: fig:dist_effect_relative_motion_cas
|
||||
#+caption: Cumulative Amplitude Spectrum of the motion error due to disturbances
|
||||
[[file:figs/dist_effect_relative_motion_cas.png]]
|
||||
|
||||
|
||||
Expected required bandwidth
|
||||
|
||||
** Better measurement of the effect of disturbances
|
||||
Here, the measurement were made with inertial sensors.
|
||||
However, we are interested in the relative motion of the sample with respect to the granite and not the absolute motion.
|
||||
|
||||
|
||||
The best measurement of the disturbances would be to have the metrology already functioning.
|
||||
|
||||
|
||||
We could perform a measurement using the X-ray.
|
||||
|
||||
Detector Requirement:
|
||||
- Sample frequency above $400Hz$
|
||||
- Resolution of $\approx 20nm$
|
||||
|
||||
** Conclusion
|
||||
|
||||
* Multi Body Model
|
||||
<<sec:multi_body_model>>
|
||||
|
||||
** Introduction :ignore:
|
||||
https://tdehaeze.github.io/nass-simscape/
|
||||
|
||||
Multi-Body model
|
||||
|
||||
** Validity of the model
|
||||
The mass/inertia of each stage is automatically computed from the geometry and the density of the materials.
|
||||
|
||||
The stiffness of each joint is first set to measured values or stiffness from data sheets.
|
||||
|
||||
Then, the values of the stiffness and damping of each joint is manually tuned until the obtained dynamics is sufficiently close to the measured dynamics.
|
||||
|
||||
|
||||
We could, from the measurement, automatically extract the stiffness and damping values, we this would have required a lot of work and having a perfect match is not required here.
|
||||
|
||||
Comparison model - measurements : https://tdehaeze.github.io/nass-simscape/identification.html
|
||||
|
||||
#+name: fig:identification_comp_top_stages
|
||||
#+caption: Figure caption
|
||||
[[file:figs/identification_comp_top_stages.png]]
|
||||
|
||||
** Wanted position of the sample and position error
|
||||
|
||||
From the reference position of each stage, we can compute the wanted pose of the sample with respect to the granite.
|
||||
This is done with multiple transformation matrices.
|
||||
|
||||
Then, from the measurement of the metrology corresponding to the position of the sample with respect to the granite, we can compute the position error of the sample expressed in a frame fixed to the nano-hexapod.
|
||||
|
||||
#+name: fig:control-schematic-nass
|
||||
#+caption: Figure caption
|
||||
[[file:figs/control-schematic-nass.png]]
|
||||
|
||||
Measurement of the sample's position - conversion of positioning error in the frame of the Nano-hexapod for control: https://tdehaeze.github.io/nass-simscape/positioning_error.html
|
||||
|
||||
** Simulation of Experiments
|
||||
Now that the
|
||||
- dynamics of the model is tuned
|
||||
- disturbances are included in the model
|
||||
|
||||
We can perform simulation of experiments.
|
||||
|
||||
https://tdehaeze.github.io/nass-simscape/experiments.html
|
||||
|
||||
[[fig:exp_scans_rz_dist]]
|
||||
|
||||
#+name: fig:exp_scans_rz_dist
|
||||
#+caption: Position error of the Sample with respect to the granite during a Tomography Experiment with included disturbances
|
||||
[[file:figs/exp_scans_rz_dist.png]]
|
||||
|
||||
** Conclusion
|
||||
#+begin_important
|
||||
Possible to study many effects.
|
||||
Extraction of transfer function like $G$ and $G_d$.
|
||||
|
||||
Simulation of experiments to validate performance.
|
||||
#+end_important
|
||||
|
||||
* Optimal Nano-Hexapod Design
|
||||
<<sec:nano_hexapod_design>>
|
||||
|
||||
** Introduction :ignore:
|
||||
|
||||
As explain before, the nano-hexapod properties (mass, stiffness, architecture, ...) will influence:
|
||||
- the plant dynamics $G$
|
||||
- the effect of disturbances $G_d$
|
||||
|
||||
We which here to choose the nano-hexapod properties such that:
|
||||
- has an easy
|
||||
- minimize the
|
||||
- minimize $|G_d|$
|
||||
|
||||
** Optimal Stiffness to reduce the effect of disturbances
|
||||
|
||||
** Optimal Stiffness
|
||||
The goal is to design a system that is *robust*.
|
||||
|
||||
Thus, we have to identify the sources of uncertainty and try to minimize them.
|
||||
|
||||
Uncertainty in the system can be caused by:
|
||||
- Effect of Support Compliance: https://tdehaeze.github.io/nass-simscape/uncertainty_support.html
|
||||
- Effect of Payload Dynamics: https://tdehaeze.github.io/nass-simscape/uncertainty_payload.html
|
||||
- Effect of experimental condition (micro-station pose, spindle rotation): https://tdehaeze.github.io/nass-simscape/uncertainty_experiment.html
|
||||
|
||||
All these uncertainty will limit the maximum attainable bandwidth.
|
||||
|
||||
Fortunately, the nano-hexapod stiffness have an influence on the dynamical uncertainty induced by the above effects.
|
||||
|
||||
Determination of the optimal stiffness based on all the effects:
|
||||
- https://tdehaeze.github.io/nass-simscape/uncertainty_optimal_stiffness.html
|
||||
|
||||
#+begin_conclusion
|
||||
|
||||
#+end_conclusion
|
||||
|
||||
|
||||
The main performance limitation are payload variability
|
||||
#+begin_question
|
||||
Main problem: heavy samples with small stiffness.
|
||||
The first resonance frequency of the sample will limit the performance.
|
||||
#+end_question
|
||||
|
||||
|
||||
The nano-hexapod stiffness will also change the sensibility to disturbances.
|
||||
|
||||
Effect of Nano-hexapod stiffness on the Sensibility to disturbances: https://tdehaeze.github.io/nass-simscape/optimal_stiffness_disturbances.html
|
||||
|
||||
#+begin_conclusion
|
||||
|
||||
#+end_conclusion
|
||||
|
||||
** Sensors to be included
|
||||
|
||||
Ways to damp:
|
||||
- Force Sensor
|
||||
- Relative Velocity Sensors
|
||||
- Inertial Sensor
|
||||
|
||||
|
||||
|
||||
https://tdehaeze.github.io/rotating-frame/index.html
|
||||
|
||||
Sensors to be included:
|
||||
|
||||
|
||||
* Robust Control Architecture
|
||||
<<sec:robust_control_architecture>>
|
||||
|
||||
** Introduction :ignore:
|
||||
https://tdehaeze.github.io/nass-simscape/optimal_stiffness_control.html
|
||||
|
||||
|
||||
** Simulation of Tomography Experiments
|
||||
<<sec:tomography_experiment>>
|
||||
|
||||
- Make several animations
|
||||
- [ ] One of a tomography experiment where we see all the station rotating
|
||||
- [ ] A zoom on at the nano-meter level to see how the wanted position is moving
|
||||
|
||||
** Conclusion
|
7
js/bootstrap.min.js
vendored
Normal file
4
js/jquery.min.js
vendored
Normal file
1
js/jquery.stickytableheaders.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(a,b){"use strict";function c(c,g){var h=this;h.$el=a(c),h.el=c,h.id=e++,h.$window=a(b),h.$document=a(document),h.$el.bind("destroyed",a.proxy(h.teardown,h)),h.$clonedHeader=null,h.$originalHeader=null,h.isSticky=!1,h.hasBeenSticky=!1,h.leftOffset=null,h.topOffset=null,h.init=function(){h.$el.each(function(){var b=a(this);b.css("padding",0),h.$originalHeader=a("thead:first",this),h.$clonedHeader=h.$originalHeader.clone(),b.trigger("clonedHeader."+d,[h.$clonedHeader]),h.$clonedHeader.addClass("tableFloatingHeader"),h.$clonedHeader.css("display","none"),h.$originalHeader.addClass("tableFloatingHeaderOriginal"),h.$originalHeader.after(h.$clonedHeader),h.$printStyle=a('<style type="text/css" media="print">.tableFloatingHeader{display:none !important;}.tableFloatingHeaderOriginal{position:static !important;}</style>'),a("head").append(h.$printStyle)}),h.setOptions(g),h.updateWidth(),h.toggleHeaders(),h.bind()},h.destroy=function(){h.$el.unbind("destroyed",h.teardown),h.teardown()},h.teardown=function(){h.isSticky&&h.$originalHeader.css("position","static"),a.removeData(h.el,"plugin_"+d),h.unbind(),h.$clonedHeader.remove(),h.$originalHeader.removeClass("tableFloatingHeaderOriginal"),h.$originalHeader.css("visibility","visible"),h.$printStyle.remove(),h.el=null,h.$el=null},h.bind=function(){h.$scrollableArea.on("scroll."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.on("scroll."+d+h.id,h.setPositionValues),h.$window.on("resize."+d+h.id,h.toggleHeaders)),h.$scrollableArea.on("resize."+d,h.toggleHeaders),h.$scrollableArea.on("resize."+d,h.updateWidth)},h.unbind=function(){h.$scrollableArea.off("."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.off("."+d+h.id,h.setPositionValues),h.$window.off("."+d+h.id,h.toggleHeaders)),h.$scrollableArea.off("."+d,h.updateWidth)},h.toggleHeaders=function(){h.$el&&h.$el.each(function(){var b,c=a(this),d=h.isWindowScrolling?isNaN(h.options.fixedOffset)?h.options.fixedOffset.outerHeight():h.options.fixedOffset:h.$scrollableArea.offset().top+(isNaN(h.options.fixedOffset)?0:h.options.fixedOffset),e=c.offset(),f=h.$scrollableArea.scrollTop()+d,g=h.$scrollableArea.scrollLeft(),i=h.isWindowScrolling?f>e.top:d>e.top,j=(h.isWindowScrolling?f:0)<e.top+c.height()-h.$clonedHeader.height()-(h.isWindowScrolling?0:d);i&&j?(b=e.left-g+h.options.leftOffset,h.$originalHeader.css({position:"fixed","margin-top":h.options.marginTop,left:b,"z-index":3}),h.leftOffset=b,h.topOffset=d,h.$clonedHeader.css("display",""),h.isSticky||(h.isSticky=!0,h.updateWidth()),h.setPositionValues()):h.isSticky&&(h.$originalHeader.css("position","static"),h.$clonedHeader.css("display","none"),h.isSticky=!1,h.resetWidth(a("td,th",h.$clonedHeader),a("td,th",h.$originalHeader)))})},h.setPositionValues=function(){var a=h.$window.scrollTop(),b=h.$window.scrollLeft();!h.isSticky||0>a||a+h.$window.height()>h.$document.height()||0>b||b+h.$window.width()>h.$document.width()||h.$originalHeader.css({top:h.topOffset-(h.isWindowScrolling?0:a),left:h.leftOffset-(h.isWindowScrolling?0:b)})},h.updateWidth=function(){if(h.isSticky){h.$originalHeaderCells||(h.$originalHeaderCells=a("th,td",h.$originalHeader)),h.$clonedHeaderCells||(h.$clonedHeaderCells=a("th,td",h.$clonedHeader));var b=h.getWidth(h.$clonedHeaderCells);h.setWidth(b,h.$clonedHeaderCells,h.$originalHeaderCells),h.$originalHeader.css("width",h.$clonedHeader.width())}},h.getWidth=function(c){var d=[];return c.each(function(c){var e,f=a(this);if("border-box"===f.css("box-sizing"))e=f[0].getBoundingClientRect().width;else{var g=a("th",h.$originalHeader);if("collapse"===g.css("border-collapse"))if(b.getComputedStyle)e=parseFloat(b.getComputedStyle(this,null).width);else{var i=parseFloat(f.css("padding-left")),j=parseFloat(f.css("padding-right")),k=parseFloat(f.css("border-width"));e=f.outerWidth()-i-j-k}else e=f.width()}d[c]=e}),d},h.setWidth=function(a,b,c){b.each(function(b){var d=a[b];c.eq(b).css({"min-width":d,"max-width":d})})},h.resetWidth=function(b,c){b.each(function(b){var d=a(this);c.eq(b).css({"min-width":d.css("min-width"),"max-width":d.css("max-width")})})},h.setOptions=function(c){h.options=a.extend({},f,c),h.$scrollableArea=a(h.options.scrollableArea),h.isWindowScrolling=h.$scrollableArea[0]===b},h.updateOptions=function(a){h.setOptions(a),h.unbind(),h.bind(),h.updateWidth(),h.toggleHeaders()},h.init()}var d="stickyTableHeaders",e=0,f={fixedOffset:0,leftOffset:0,marginTop:0,scrollableArea:b};a.fn[d]=function(b){return this.each(function(){var e=a.data(this,"plugin_"+d);e?"string"==typeof b?e[b].apply(e):e.updateOptions(b):"destroy"!==b&&a.data(this,"plugin_"+d,new c(this,b))})}}(jQuery,window);
|
87
js/readtheorg.js
Normal file
@ -0,0 +1,87 @@
|
||||
$(function() {
|
||||
$('.note').before("<p class='admonition-title note'>Note</p>");
|
||||
$('.seealso').before("<p class='admonition-title seealso'>See also</p>");
|
||||
$('.warning').before("<p class='admonition-title warning'>Warning</p>");
|
||||
$('.caution').before("<p class='admonition-title caution'>Caution</p>");
|
||||
$('.attention').before("<p class='admonition-title attention'>Attention</p>");
|
||||
$('.tip').before("<p class='admonition-title tip'>Tip</p>");
|
||||
$('.important').before("<p class='admonition-title important'>Important</p>");
|
||||
$('.hint').before("<p class='admonition-title hint'>Hint</p>");
|
||||
$('.error').before("<p class='admonition-title error'>Error</p>");
|
||||
$('.danger').before("<p class='admonition-title danger'>Danger</p>");
|
||||
$('.question').before("<p class='admonition-title question'>Question</p>");
|
||||
$('.summary').before("<p class='admonition-title hint'>Summary</p>");
|
||||
});
|
||||
|
||||
$( document ).ready(function() {
|
||||
|
||||
// Shift nav in mobile when clicking the menu.
|
||||
$(document).on('click', "[data-toggle='wy-nav-top']", function() {
|
||||
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
// Close menu when you click a link.
|
||||
$(document).on('click', ".wy-menu-vertical .current ul li a", function() {
|
||||
$("[data-toggle='wy-nav-shift']").removeClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
$(document).on('click', "[data-toggle='rst-current-version']", function() {
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift-up");
|
||||
});
|
||||
// Make tables responsive
|
||||
$("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
|
||||
});
|
||||
|
||||
$( document ).ready(function() {
|
||||
$('#text-table-of-contents ul').first().addClass('nav');
|
||||
// ScrollSpy also requires that we use
|
||||
// a Bootstrap nav component.
|
||||
$('body').scrollspy({target: '#text-table-of-contents'});
|
||||
|
||||
// add sticky table headers
|
||||
$('table').stickyTableHeaders();
|
||||
|
||||
// set the height of tableOfContents
|
||||
var $postamble = $('#postamble');
|
||||
var $tableOfContents = $('#table-of-contents');
|
||||
$tableOfContents.css({paddingBottom: $postamble.outerHeight()});
|
||||
|
||||
// add TOC button
|
||||
var toggleSidebar = $('<div id="toggle-sidebar"><a href="#table-of-contents"><h2>Table of Contents</h2></a></div>');
|
||||
$('#content').prepend(toggleSidebar);
|
||||
|
||||
// add close button when sidebar showed in mobile screen
|
||||
var closeBtn = $('<a class="close-sidebar" href="#">Close</a>');
|
||||
var tocTitle = $('#table-of-contents').find('h2');
|
||||
tocTitle.append(closeBtn);
|
||||
});
|
||||
|
||||
window.SphinxRtdTheme = (function (jquery) {
|
||||
var stickyNav = (function () {
|
||||
var navBar,
|
||||
win,
|
||||
stickyNavCssClass = 'stickynav',
|
||||
applyStickNav = function () {
|
||||
if (navBar.height() <= win.height()) {
|
||||
navBar.addClass(stickyNavCssClass);
|
||||
} else {
|
||||
navBar.removeClass(stickyNavCssClass);
|
||||
}
|
||||
},
|
||||
enable = function () {
|
||||
applyStickNav();
|
||||
win.on('resize', applyStickNav);
|
||||
},
|
||||
init = function () {
|
||||
navBar = jquery('nav.wy-nav-side:first');
|
||||
win = jquery(window);
|
||||
};
|
||||
jquery(init);
|
||||
return {
|
||||
enable : enable
|
||||
};
|
||||
}());
|
||||
return {
|
||||
StickyNav : stickyNav
|
||||
};
|
||||
}($));
|