phd-nass-uniaxial-model/nass-uniaxial-model.html

786 lines
47 KiB
HTML
Raw Normal View History

2023-02-17 11:28:06 +01:00
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2023-02-14 Tue 13:19 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Unidirectional Model - Report</title>
<meta name="author" content="Dehaeze Thomas" />
<meta name="generator" content="Org Mode" />
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
<script>
MathJax = {
svg: {
scale: 1,
fontCache: "global"
},
tex: {
tags: "ams",
multlineWidth: "%MULTLINEWIDTH",
tagSide: "right",
macros: {bm: ["\\boldsymbol{#1}",1],},
tagIndent: ".8em"
}
};
</script>
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
</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" class="content">
<h1 class="title">Unidirectional Model - Report</h1>
<div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org62a6a28">1. Micro Station Model</a>
<ul>
<li><a href="#org90f060b">1.1. Measured dynamics</a></li>
<li><a href="#orgff42dc6">1.2. Uniaxial Model</a></li>
<li><a href="#orgad9d0b2">1.3. Comparison of the model and measurements</a></li>
</ul>
</li>
<li><a href="#orgb8de3f2">2. Nano-Hexapod Model</a>
<ul>
<li><a href="#org73ed711">2.1. Nano-Hexapod Parameters</a></li>
<li><a href="#orgd040a0b">2.2. Obtained Dynamics</a></li>
</ul>
</li>
<li><a href="#org740db5b">3. Disturbance Identification</a>
<ul>
<li><a href="#org02e4f7d">3.1. Ground Motion</a></li>
<li><a href="#org8a8228b">3.2. Stage Vibration</a></li>
</ul>
</li>
<li><a href="#org41ffa32">4. Open-Loop Dynamic Noise Budgeting</a>
<ul>
<li><a href="#org5962129">4.1. Sensitivity to disturbances</a></li>
<li><a href="#orgcbacdc5">4.2. Open-Loop Dynamic Noise Budgeting</a></li>
</ul>
</li>
<li><a href="#org3496bb6">5. Active Damping</a>
<ul>
<li><a href="#org99b153a">5.1. Plant Dynamics</a></li>
<li><a href="#org43200d0">5.2. Achievable Damping</a></li>
<li><a href="#org86ebcfc">5.3. Change of sensitivity to disturbances</a></li>
<li><a href="#org04396d8">5.4. Noise Budgeting after Active Damping</a></li>
</ul>
</li>
<li><a href="#org19920a0">6. Position Feedback Controller</a>
<ul>
<li><a href="#orge07064c">6.1. Plant Dynamics</a></li>
</ul>
</li>
</ul>
</div>
</div>
<hr>
<p>This report is also available as a <a href="./nass-uniaxial-model.pdf">pdf</a>.</p>
<hr>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">let</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-variable-name">org-export-before-parsing-hook</span> <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-1">(</span>backend<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">let*</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span>data <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">org-element-parse-buffer</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>
<span class="org-rainbow-delimiters-depth-3">(</span>headline-labels <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">append</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">org-element-map</span> data <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">headline</span>
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">(</span>hl<span class="org-rainbow-delimiters-depth-3">)</span>
<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">when</span> <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:CUSTOM_ID</span> hl<span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:CUSTOM_ID</span> hl<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">org-element-map</span> data <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">link</span>
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">(</span>lnk<span class="org-rainbow-delimiters-depth-3">)</span>
<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">when</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">and</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">string=</span> <span class="org-string">"label"</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:type</span> lnk<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">eq</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">headline</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">car</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:parent</span> lnk<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:path</span> lnk<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>
<span class="org-rainbow-delimiters-depth-3">(</span>table-labels <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">append</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">org-element-map</span> data <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">table</span>
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">(</span>tbl<span class="org-rainbow-delimiters-depth-3">)</span>
<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">when</span> <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:name</span> tbl<span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:name</span> tbl<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">org-element-map</span> data <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">link</span>
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">(</span>lnk<span class="org-rainbow-delimiters-depth-3">)</span>
<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">when</span> <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">and</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">string=</span> <span class="org-string">"label"</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:type</span> lnk<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">eq</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">table</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">car</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:parent</span> lnk<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-function-name">org-element-property</span> <span class="org-builtin">:path</span> lnk<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>
<span class="org-comment-delimiter">;; </span><span class="org-comment">now we need to map over these and replace them</span>
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">mapc</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-4">(</span>label<span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">goto-char</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">point-min</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">while</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">re-search-forward</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">format</span> <span class="org-string">"ref:%s"</span> label<span class="org-rainbow-delimiters-depth-2">)</span> nil t<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">replace-match</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">format</span> <span class="org-string">"[[%s]]"</span> label<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>
headline-labels<span class="org-rainbow-delimiters-depth-2">)</span>
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">mapc</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-4">(</span>label<span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">goto-char</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">point-min</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">while</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">re-search-forward</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">format</span> <span class="org-string">"label:%s"</span> label<span class="org-rainbow-delimiters-depth-2">)</span> nil t<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">replace-match</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">format</span> <span class="org-string">"&lt;&lt;%s&gt;&gt;"</span> label<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>
headline-labels<span class="org-rainbow-delimiters-depth-2">)</span>
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">mapc</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-4">(</span>label<span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">goto-char</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">point-min</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span>
<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">while</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">re-search-forward</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">format</span> <span class="org-string">"ref:%s"</span> label<span class="org-rainbow-delimiters-depth-2">)</span> nil t<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">replace-match</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">format</span> <span class="org-string">"[[%s]]"</span> label<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>
table-labels<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>
<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">org-open-file</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-constant">org-html-export-to-html</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
</pre>
</div>
<p>
The report is organized as follow:
</p>
<ul class="org-ul">
<li>section <a href="sec:micro_station_model">sec:micro_station_model</a>: an uniaxial of the micro-station is developped and compared with measurements.</li>
<li>section <a href="sec:nano_station_model">sec:nano_station_model</a>: a model of the NASS is added on top of the model of the micro-station and some properties of the obtained model are studied.</li>
<li>section <a href="sec:noise_budget">sec:noise_budget</a>: after a definition of the control objective, an open loop noise budgeting is done. It consists of studying the effect of the sources of perturbation on the control objective. Some conclusions can be made on the open loop performances of both systems.</li>
<li>section <a href="sec:active_damping">sec:active_damping</a>: active damping is applied on the system using integral force feedback in order to obtain critical damping of the NASS&rsquo;s mode.</li>
<li>section <a href="sec:feedback_control">sec:feedback_control</a>: feedback control is applied using both actuators.</li>
</ul>
<div id="outline-container-org62a6a28" class="outline-2">
<h2 id="org62a6a28"><span class="section-number-2">1.</span> Micro Station Model</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org38875a6"></a>
</p>
<p>
In this section, a uni-axial model of the micro-station is tuned in order to match measurements made on the micro-station
</p>
<div id="orgb8c1a53" class="figure">
<p><img src="figs/micro_station_first_meas_dynamics.jpg" alt="micro_station_first_meas_dynamics.jpg" />
</p>
<p><span class="figure-number">Figure 1: </span>Experimental Setup for the first dynamical measurements on the Micro-Station. Geophones are fixed to the micro-station, and the granite as well as the micro-hexapod&rsquo;s top platform are impact with an instrumented hammer</p>
</div>
</div>
<div id="outline-container-org90f060b" class="outline-3">
<h3 id="org90f060b"><span class="section-number-3">1.1.</span> Measured dynamics</h3>
<div class="outline-text-3" id="text-1-1">
<p>
The measurement setup is schematically shown in Figure <a href="#orgbb7ce70">2</a> where:
</p>
<ul class="org-ul">
<li>Two hammer hits are performed, one on the Granite, and one on the micro-hexapod&rsquo;s top platform</li>
<li>The inertial motion of the granite and the micro-hexapod&rsquo;s top platform are measured using geophones.</li>
</ul>
<p>
From the forces applied by the instrumented hammer and the responses of the geophones, the following frequency response functions can be computed:
</p>
<ul class="org-ul">
<li>from \(F_h\) to \(d_h\) (i.e. the compliance of the micro-station)</li>
<li>from \(F_g\) to \(d_h\) (or from \(F_h\) to \(d_g\))</li>
<li>from \(F_g\) to \(d_g\)</li>
</ul>
<div id="orgbb7ce70" class="figure">
<p><img src="figs/micro_station_meas_dynamics_schematic.png" alt="micro_station_meas_dynamics_schematic.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Measurement setup - Schematic</p>
</div>
<p>
Due to the bad coherence at low frequency, the frequency response functions are only shown between 20 and 200Hz (Figure <a href="#org6c032db">3</a>).
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Load measured FRF</span>
load(<span class="org-string">'meas_microstation_frf.mat'</span>);
</pre>
</div>
<div id="org6c032db" class="figure">
<p><img src="figs/measured_frf_vertical.png" alt="measured_frf_vertical.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Measured Frequency Response Functions in the vertical direction</p>
</div>
</div>
</div>
<div id="outline-container-orgff42dc6" class="outline-3">
<h3 id="orgff42dc6"><span class="section-number-3">1.2.</span> Uniaxial Model</h3>
<div class="outline-text-3" id="text-1-2">
<p>
The uni-axial model of the micro-station is shown in Figure <a href="#orgdb83e3f">5</a>, with:
</p>
<ul class="org-ul">
<li>Disturbances:
<ul class="org-ul">
<li>\(x_f\): Floor motion</li>
<li>\(f_t\): Stage vibrations</li>
</ul></li>
<li>Hammer impacts: \(F_h\) and \(F_g\).</li>
<li>Geophones: \(x_h\) and \(x_g\)</li>
</ul>
<div id="org74e9414" class="figure">
<p><img src="figs/uniaxial-model-micro-station.png" alt="uniaxial-model-micro-station.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Uni-axial model of the micro-station</p>
</div>
<p>
Masses are estimated from the CAD.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Parameters - Mass</span>
mh = 15; <span class="org-comment-delimiter">% </span><span class="org-comment">Micro Hexapod [kg]</span>
mt = 1200; <span class="org-comment-delimiter">% </span><span class="org-comment">Ty + Ry + Rz [kg]</span>
mg = 2500; <span class="org-comment-delimiter">% </span><span class="org-comment">Granite [kg]</span>
</pre>
</div>
<p>
And stiffnesses from the data-sheet of stage manufacturers.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Parameters - Stiffnesses</span>
kh = 6.11e<span class="org-builtin">+</span>07; <span class="org-comment-delimiter">% </span><span class="org-comment">[N/m]</span>
kt = 5.19e<span class="org-builtin">+</span>08; <span class="org-comment-delimiter">% </span><span class="org-comment">[N/m]</span>
kg = 9.50e<span class="org-builtin">+</span>08; <span class="org-comment-delimiter">% </span><span class="org-comment">[N/m]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgad9d0b2" class="outline-3">
<h3 id="orgad9d0b2"><span class="section-number-3">1.3.</span> Comparison of the model and measurements</h3>
<div class="outline-text-3" id="text-1-3">
<p>
The comparison between the measurements and the model is done in Figure <a href="#orgdb83e3f">5</a>.
</p>
<p>
Ad the model is simplistic, the goal is not to match exactly the measurement but to have a first approximation.
More accurate models will be developed and tuned later on.
</p>
<div id="orgdb83e3f" class="figure">
<p><img src="figs/comp_frf_meas_model.png" alt="comp_frf_meas_model.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Comparison of the measured FRF and identified ones from the uni-axial model</p>
</div>
</div>
</div>
</div>
<div id="outline-container-orgb8de3f2" class="outline-2">
<h2 id="orgb8de3f2"><span class="section-number-2">2.</span> Nano-Hexapod Model</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orgfcce17b"></a>
</p>
<p>
A model of the nano-hexapod and sample is now added on top of the uni-axial model of the micro-station (Figure <a href="#orgb4951f3">6</a>).
</p>
<p>
Disturbances (shown in red) are:
</p>
<ul class="org-ul">
<li>\(f_s\): direct forces applied to the sample (for instance cable forces)</li>
<li>\(f_t\): disturbances coming from the imperfect stage scanning performances</li>
<li>\(x_f\): floor motion</li>
</ul>
<p>
The control signal is the force applied by the nano-hexapod \(f\) and the measurement is the relative motion between the sample and the granite \(d\).
</p>
<div id="orgb4951f3" class="figure">
<p><img src="figs/uniaxial-model-micro-station-nass.png" alt="uniaxial-model-micro-station-nass.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Uni-axial model of the micro-station with added nano-hexapod and sample</p>
</div>
</div>
<div id="outline-container-org73ed711" class="outline-3">
<h3 id="org73ed711"><span class="section-number-3">2.1.</span> Nano-Hexapod Parameters</h3>
<div class="outline-text-3" id="text-2-1">
<p>
The parameters for the nano-hexapod and sample are:
</p>
<ul class="org-ul">
<li>\(m_s\) the sample mass that can vary from 1kg up to 50kg</li>
<li>\(m_n\) the nano-hexapod mass which is set to 15kg</li>
<li>\(k_n\) the nano-hexapod stiffness, which can vary depending on the chosen architecture/technology</li>
</ul>
<p>
As a first example, let&rsquo;s choose a nano-hexapod stiffness of \(10\,N/\mu m\) and a sample mass of 10kg.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Nano-Hexapod Parameters</span>
mn = 15; <span class="org-comment-delimiter">% </span><span class="org-comment">[kg]</span>
kn = 1e7; <span class="org-comment-delimiter">% </span><span class="org-comment">[N/m]</span>
cn = 2<span class="org-builtin">*</span>0.01<span class="org-builtin">*</span>sqrt(mn<span class="org-builtin">*</span>kn); <span class="org-comment-delimiter">% </span><span class="org-comment">[N/(m/s)]</span>
<span class="org-matlab-cellbreak">%% Sample Mass</span>
ms = 10; <span class="org-comment-delimiter">% </span><span class="org-comment">[kg]</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd040a0b" class="outline-3">
<h3 id="orgd040a0b"><span class="section-number-3">2.2.</span> Obtained Dynamics</h3>
<div class="outline-text-3" id="text-2-2">
<p>
The sensitivity to disturbances (i.e. \(x_f\), \(f_t\) and \(f_s\)) are shown in Figure <a href="#orgaef9821">7</a>.
The <i>plant</i> (i.e. the transfer function from actuator force \(f\) to measured displacement \(d\)) is shown in Figure <a href="#org6e5a470">8</a>.
</p>
<div id="orgaef9821" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_first_params.png" alt="uniaxial_sensitivity_dist_first_params.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Sensitivity to disturbances</p>
</div>
<div id="org6e5a470" class="figure">
<p><img src="figs/uniaxial_plant_first_params.png" alt="uniaxial_plant_first_params.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Bode Plot of the transfer function from actuator forces to measured displacement by the metrology</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org740db5b" class="outline-2">
<h2 id="org740db5b"><span class="section-number-2">3.</span> Disturbance Identification</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="orgae23dbe"></a>
</p>
<p>
In order to measure disturbances, two geophones are used, on located on the floor and on on the micro-hexapod&rsquo;s top platform (see Figure <a href="#org68643d5">9</a>).
</p>
<p>
The geophone on the floor is used to measured the floor motion \(x_f\) while the geophone on the micro-hexapod is used to measure vibrations introduced by scanning of the \(T_y\) stage and \(R_z\) stage.
</p>
<div id="org68643d5" class="figure">
<p><img src="figs/micro_station_meas_disturbances.png" alt="micro_station_meas_disturbances.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Disturbance measurement setup - Schematic</p>
</div>
<p>
The voltage generated by each geophone is amplified using a voltage amplifier (gain of 60dB) before going to the ADC.
</p>
</div>
<div id="outline-container-org02e4f7d" class="outline-3">
<h3 id="org02e4f7d"><span class="section-number-3">3.1.</span> Ground Motion</h3>
<div class="outline-text-3" id="text-3-1">
<p>
The geophone fixed to the floor to measure the floor motion.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Load floor motion data</span>
load(<span class="org-string">'ground_motion_measurement.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V'</span>);
</pre>
</div>
<p>
The sensitivity of the geophone as well as the gain of the voltage amplifier are taken into account to reconstruct the floor displacement.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Sensitivity of the geophone</span>
S0 = 88; <span class="org-comment-delimiter">% </span><span class="org-comment">Sensitivity [V/(m/s)]</span>
f0 = 2; <span class="org-comment-delimiter">% </span><span class="org-comment">Cut-off frequency [Hz]</span>
S = S0<span class="org-builtin">*</span>(s<span class="org-builtin">/</span>2<span class="org-builtin">/</span><span class="org-matlab-math">pi</span><span class="org-builtin">/</span>f0)<span class="org-builtin">/</span>(1<span class="org-builtin">+</span>s<span class="org-builtin">/</span>2<span class="org-builtin">/</span><span class="org-matlab-math">pi</span><span class="org-builtin">/</span>f0); <span class="org-comment-delimiter">% </span><span class="org-comment">Geophone's transfer function [V/(m/s)]</span>
<span class="org-matlab-cellbreak">%% Gain of the voltage amplifier</span>
G0_db = 60; <span class="org-comment-delimiter">% </span><span class="org-comment">[dB]</span>
G0 = 10<span class="org-builtin">^</span>(G0_db<span class="org-builtin">/</span>20); <span class="org-comment-delimiter">% </span><span class="org-comment">[abs]</span>
<span class="org-matlab-cellbreak">%% Transfer function from measured voltage to displacement</span>
G_geo = 1<span class="org-builtin">/</span>S<span class="org-builtin">/</span>G0<span class="org-builtin">/</span>s; <span class="org-comment-delimiter">% </span><span class="org-comment">[m/V]</span>
</pre>
</div>
<p>
The PSD \(S_{V_f}\) of the measured voltage \(V_f\) is computed.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Compute measured voltage PSD</span>
Fs = 1<span class="org-builtin">/</span>(t(2)<span class="org-builtin">-</span>t(1)); <span class="org-comment-delimiter">% </span><span class="org-comment">Sampling Frequency [Hz]</span>
win = hanning(ceil(2<span class="org-builtin">*</span>Fs)); <span class="org-comment-delimiter">% </span><span class="org-comment">Hanning window</span>
[psd_V, f] = pwelch(V, win, [], [], Fs); <span class="org-comment-delimiter">% </span><span class="org-comment">[V^2/Hz]</span>
</pre>
</div>
<p>
The PSD of the corresponding displacement can be computed as follows:
</p>
\begin{equation}
S_{x_f}(\omega) = \frac{S_{V_f}(\omega)}{|S_{\text{geo}}(j\omega)| \cdot G_{\text{amp}} \cdot \omega}
\end{equation}
<p>
with:
</p>
<ul class="org-ul">
<li>\(S_{\text{geo}}\) the sensitivity of the Geophone in \([Vs/m]\)</li>
<li>\(G_{\text{amp}}\) the gain of the voltage amplifier</li>
<li>\(\omega\) is here to integrate and have the displacement instead of the velocity</li>
</ul>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Ground Motion ASD</span>
psd_xf = psd_V<span class="org-builtin">.*</span>abs(squeeze(freqresp(G_geo, f, <span class="org-string">'Hz'</span>)))<span class="org-builtin">.^</span>2; <span class="org-comment-delimiter">% </span><span class="org-comment">[m^2/Hz]</span>
</pre>
</div>
<p>
The amplitude spectral density \(\Gamma_{x_f}\) of the measured displacement \(x_f\) is shown in Figure <a href="#org2c69502">10</a>.
</p>
<div id="org2c69502" class="figure">
<p><img src="figs/asd_floor_motion_id31.png" alt="asd_floor_motion_id31.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Measured Amplitude Spectral Density of the Floor motion on ID31</p>
</div>
</div>
</div>
<div id="outline-container-org8a8228b" class="outline-3">
<h3 id="org8a8228b"><span class="section-number-3">3.2.</span> Stage Vibration</h3>
<div class="outline-text-3" id="text-3-2">
<p>
During Spindle rotation (here at 6rpm), the granite velocity and micro-hexapod&rsquo;s top platform velocity are measured with the geophones.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Measured velocity of granite and hexapod during spindle rotation</span>
load(<span class="org-string">'meas_spindle_on.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'vg'</span>, <span class="org-string">'vh'</span>);
</pre>
</div>
<p>
The Power Spectral Density of the relative velocity between the hexapod and the granite is computed.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Compute Power Spectral Density of the relative velocity between granite and hexapod during spindle rotation</span>
Fs = 1<span class="org-builtin">/</span>(t(2)<span class="org-builtin">-</span>t(1)); <span class="org-comment-delimiter">% </span><span class="org-comment">Sampling Frequency [Hz]</span>
win = hanning(ceil(2<span class="org-builtin">*</span>Fs)); <span class="org-comment-delimiter">% </span><span class="org-comment">Hanning window</span>
[psd_vft, f] = pwelch(vh<span class="org-builtin">-</span>vg, win, [], [], Fs); <span class="org-comment-delimiter">% </span><span class="org-comment">[(m/s)^2/Hz]</span>
</pre>
</div>
<p>
It is then integrated to obtain the Amplitude Spectral Density of the relative motion (Figure <a href="#orge55d6f0">11</a>).
</p>
<div id="orge55d6f0" class="figure">
<p><img src="figs/asd_vibration_spindle_rotation.png" alt="asd_vibration_spindle_rotation.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Measured Amplitude Spectral Density of the relative motion between the granite and the micro-hexapod&rsquo;s top platform during Spindle rotating</p>
</div>
<p>
In order to compute the equivalent disturbance force \(f_t\) that induces such motion, the transfer function from \(f_t\) to the relative motion of the hexapod&rsquo;s top platform and the granite is extracted from the model.
The power spectral density \(\Gamma_{f_{t}}\) of the disturbance force can be computed as follows:
</p>
\begin{equation}
\Gamma_{f_{t}}(\omega) = \frac{\Gamma_{v_{t}}(\omega)}{|G_{\text{model}}(j\omega)|^2}
\end{equation}
<p>
with:
</p>
<ul class="org-ul">
<li>\(\Gamma_{v_{t}}\) the measured power spectral density of the relative motion between the micro-hexapod&rsquo;s top platform and the granite during the spindle&rsquo;s rotation</li>
<li>\(G_{\text{model}}\) the transfer function (extracted from the uniaxial model) from \(f_t\) to the relative motion between the micro-hexapod&rsquo;s top platform and the granite</li>
</ul>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Power Spectral Density of the equivalent force ft</span>
psd_ft = (psd_vft<span class="org-builtin">./</span>(2<span class="org-builtin">*</span><span class="org-matlab-math">pi</span><span class="org-builtin">*</span>f)<span class="org-builtin">.^</span>2)<span class="org-builtin">./</span>abs(squeeze(freqresp(G(<span class="org-string">'Dh'</span>, <span class="org-string">'ft'</span>) <span class="org-builtin">-</span> G(<span class="org-string">'Dg'</span>, <span class="org-string">'ft'</span>), f, <span class="org-string">'Hz'</span>)))<span class="org-builtin">.^</span>2;
</pre>
</div>
<p>
The obtained amplitude spectral density of the disturbance force \(f_t\) is shown in Figure <a href="#org3a92897">12</a>.
</p>
<div id="org3a92897" class="figure">
<p><img src="figs/asd_disturbance_force.png" alt="asd_disturbance_force.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Estimated disturbance force ft from measurement and uniaxial model</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org41ffa32" class="outline-2">
<h2 id="org41ffa32"><span class="section-number-2">4.</span> Open-Loop Dynamic Noise Budgeting</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="orgef979a7"></a>
</p>
<p>
Now that we have a model of the NASS and an estimation of the power spectral density of the disturbances, it is possible to perform an <i>open-loop dynamic noise budgeting</i>.
</p>
</div>
<div id="outline-container-org5962129" class="outline-3">
<h3 id="org5962129"><span class="section-number-3">4.1.</span> Sensitivity to disturbances</h3>
<div class="outline-text-3" id="text-4-1">
<p>
From the Uni-axial model, the transfer function from the disturbances (\(f_s\), \(x_f\) and \(f_t\)) to the displacement \(d\) are computed.
</p>
<p>
This is done for <b>two extreme sample masses</b> \(m_s = 1\,\text{kg}\) and \(m_s = 50\,\text{kg}\) and <b>three nano-hexapod stiffnesses</b>:
</p>
<ul class="org-ul">
<li>\(k_n = 0.01\,N/\mu m\) that could represent a voice coil actuator with soft flexible guiding</li>
<li>\(k_n = 1\,N/\mu m\) that could represent a voice coil actuator with a stiff flexible guiding or a mechanically amplified piezoelectric actuator</li>
<li>\(k_n = 100\,N/\mu m\) that could represent a stiff piezoelectric stack actuator</li>
</ul>
<p>
The obtained sensitivity to disturbances for the three nano-hexapod stiffnesses are shown in Figure <a href="#org466cdff">13</a> for the light sample (same conclusions can be drawn with the heavy one).
</p>
<div class="important" id="org7a5ce33">
<p>
From Figure <a href="#org466cdff">13</a>, following can be concluded for the <b>soft nano-hexapod</b>:
</p>
<ul class="org-ul">
<li>It is more sensitive to forces applied on the sample (cable forces for instance), which is expected due to the lower stiffness</li>
<li>Between the suspension mode of the nano-hexapod (here at 5Hz) and the first mode of the micro-station (here at 70Hz), the disturbances induced by the stage vibrations are filtered out.</li>
<li>Above the suspension mode of the nano-hexapod, the sample&rsquo;s motion is unaffected by the floor motion, and therefore the sensitivity to floor motion is almost \(1\).</li>
</ul>
</div>
<div id="org466cdff" class="figure">
<p><img src="figs/sensitivity_disturbances_nano_hexpod_stiffnesses.png" alt="sensitivity_disturbances_nano_hexpod_stiffnesses.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Sensitivity to disturbances for three different nano-hexpod stiffnesses</p>
</div>
</div>
</div>
<div id="outline-container-orgcbacdc5" class="outline-3">
<h3 id="orgcbacdc5"><span class="section-number-3">4.2.</span> Open-Loop Dynamic Noise Budgeting</h3>
<div class="outline-text-3" id="text-4-2">
<p>
Now, the power spectral density of the disturbances is taken into account to estimate the residual motion \(d\) in each case.
</p>
<p>
The Cumulative Amplitude Spectrum of the relative motion \(d\) due to both the floor motion \(x_f\) and the stage vibrations \(f_t\) are shown in Figure <a href="#org0404f3e">14</a> for the three nano-hexapod stiffnesses.
</p>
<p>
It is shown that the effect of the floor motion is much less than the stage vibrations, except for the soft nano-hexapod below 5Hz.
</p>
<div id="org0404f3e" class="figure">
<p><img src="figs/cas_d_disturbances_stiffnesses.png" alt="cas_d_disturbances_stiffnesses.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Cumulative Amplitude Spectrum of the relative motion d, due to both the floor motion and the stage vibrations (light sample)</p>
</div>
<p>
The total cumulative amplitude spectrum for the three nano-hexapod stiffnesses and for the two sample&rsquo;s masses are shown in Figure <a href="#org60cf181">15</a>.
The conclusion is that the sample&rsquo;s mass has little effect on the cumulative amplitude spectrum of the relative motion \(d\).
</p>
<div id="org60cf181" class="figure">
<p><img src="figs/cas_d_disturbances_payload_masses.png" alt="cas_d_disturbances_payload_masses.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Cumulative Amplitude Spectrum of the relative motion d due to all disturbances, for two sample masses</p>
</div>
<div class="important" id="orga813191">
<p>
The conclusion is that in order to have a closed-loop residual vibration \(d \approx 20\,nm\text{ rms}\), if a simple feedback controller is used, the required closed-loop bandwidth would be:
</p>
<ul class="org-ul">
<li>\(\approx 10\,\text{Hz}\) for the soft nano-hexapod (\(k_n = 0.01\,N/\mu m\))</li>
<li>\(\approx 50\,\text{Hz}\) for the relatively stiff nano-hexapod (\(k_n = 1\,N/\mu m\))</li>
<li>\(\approx 100\,\text{Hz}\) for the stiff nano-hexapod (\(k_n = 100\,N/\mu m\))</li>
</ul>
</div>
</div>
</div>
</div>
<div id="outline-container-org3496bb6" class="outline-2">
<h2 id="org3496bb6"><span class="section-number-2">5.</span> Active Damping</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="orgd598c25"></a>
</p>
<div id="org669207f" class="figure">
<p><img src="figs/uniaxial_active_damping_strategies.png" alt="uniaxial_active_damping_strategies.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Three active damping strategies: Direct Velocity Feedback (DVF) using a geophone, Integral Force Feedback (IFF) using a force sensor, and Relative Motion Control (RMC) using a relative displacement sensor</p>
</div>
</div>
<div id="outline-container-org99b153a" class="outline-3">
<h3 id="org99b153a"><span class="section-number-3">5.1.</span> Plant Dynamics</h3>
<div class="outline-text-3" id="text-5-1">
<p>
The plant dynamics for all three active damping techniques are shown in Figure <a href="#org62a771a">17</a>.
</p>
<p>
All have alternating poles and zeros.
</p>
<div id="org62a771a" class="figure">
<p><img src="figs/uniaxial_plant_active_damping_techniques.png" alt="uniaxial_plant_active_damping_techniques.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Plant dynamics for the three active damping techniques</p>
</div>
</div>
</div>
<div id="outline-container-org43200d0" class="outline-3">
<h3 id="org43200d0"><span class="section-number-3">5.2.</span> Achievable Damping</h3>
<div class="outline-text-3" id="text-5-2">
<p>
Controller used for the three active damping techniques are:
</p>
\begin{align}
K_{\text{IFF}}(s) &= \frac{g_{\text{IFF}}}{s} \\
K_{\text{RMC}}(s) &= g_{\text{RMC}} s \\
K_{\text{DVF}}(s) &= g_{\text{DVF}}
\end{align}
<p>
It is shown in the Root Locus in Figure <a href="#org71fe3a8">18</a> that all three active damping approach can lead to critical damping.
</p>
<div id="org71fe3a8" class="figure">
<p><img src="figs/uniaxial_root_locus_damping_techniques.png" alt="uniaxial_root_locus_damping_techniques.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Root Locus for the three damping techniques</p>
</div>
</div>
</div>
<div id="outline-container-org86ebcfc" class="outline-3">
<h3 id="org86ebcfc"><span class="section-number-3">5.3.</span> Change of sensitivity to disturbances</h3>
<div class="outline-text-3" id="text-5-3">
<p>
The sensitivity to disturbances (\(f_s\), \(f_t\) and \(x_f\)) for all three active damping techniques are compared in Figure <a href="#org88b91ec">19</a>.
</p>
<div class="important" id="org55b0542">
<p>
Conclusions from Figure <a href="#org88b91ec">19</a> are:
</p>
<ul class="org-ul">
<li>IFF degrades the sensitivity to direct forces on the sample (i.e. the compliance) below the resonance of the nano-hexapod</li>
<li>RMC degrades the sensitivity to stage vibrations around the nano-hexapod&rsquo;s resonance as compared to the other two methods</li>
<li>both IFF and DVF degrades the sensitivity to floor motion below the resonance of the nano-hexapod</li>
</ul>
</div>
<div id="org88b91ec" class="figure">
<p><img src="figs/uniaxial_sensitivity_dist_active_damping.png" alt="uniaxial_sensitivity_dist_active_damping.png" />
</p>
<p><span class="figure-number">Figure 19: </span>Change of sensitivity to disturbance with all three active damping strategies</p>
</div>
</div>
</div>
<div id="outline-container-org04396d8" class="outline-3">
<h3 id="org04396d8"><span class="section-number-3">5.4.</span> Noise Budgeting after Active Damping</h3>
<div class="outline-text-3" id="text-5-4">
<p>
Cumulative Amplitude Spectrum of the distance \(d\) with all three active damping techniques are compared in Figure <a href="#orgddaae3b">20</a>.
All three active damping methods are giving similar results.
</p>
<p>
Active Damping helps to lower the vibrations and less bandwidth is required for the position controller.
</p>
<div id="orgddaae3b" class="figure">
<p><img src="figs/uniaxial_cas_active_damping.png" alt="uniaxial_cas_active_damping.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Cumulative Amplitude Spectrum of the distance \(d\) with all three active damping techniques</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org19920a0" class="outline-2">
<h2 id="org19920a0"><span class="section-number-2">6.</span> Position Feedback Controller</h2>
<div class="outline-text-2" id="text-6">
<p>
<a id="orgd31abdb"></a>
</p>
<ul class="org-ul">
<li class="on"><code>[X]</code> Explain the HAC-LAC control strategy</li>
<li class="off"><code>[&#xa0;]</code> Show the plant for the three stiffnesses</li>
<li class="off"><code>[&#xa0;]</code> Estimate the required bandwidth to attain the specifications</li>
</ul>
<p>
The High Authority Control - Low Authority Control (HAC-LAC) architecture is shown in Figure <a href="#org33a6379">21</a>.
It corresponds to a <i>two step</i> control strategy:
</p>
<ul class="org-ul">
<li>First, an active damping controller \(\bm{K}_{\textsc{LAC}}\) is implemented (see Section <a href="sec:uniaxial_active_damping">sec:uniaxial_active_damping</a>).
It allows to reduce the vibration level, and it also makes the damped plant (transfer function from \(u^{\prime}\) to \(y\)) easier to control than the undamped plant (transfer function from \(u\) to \(y\)).</li>
<li>Then, a position controller \(K_{\textsc{HAC}}\) is implemented.</li>
</ul>
<div id="org33a6379" class="figure">
<p><img src="figs/uniaxial_hac_lac_architecture.png" alt="uniaxial_hac_lac_architecture.png" />
</p>
<p><span class="figure-number">Figure 21: </span>High Authority Control - Low Authority Control (HAC-LAC) architecture</p>
</div>
</div>
<div id="outline-container-orge07064c" class="outline-3">
<h3 id="orge07064c"><span class="section-number-3">6.1.</span> Plant Dynamics</h3>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2023-02-14 Tue 13:19</p>
</div>
</body>
</html>