Optimal stiffness / OL budget error analysis

This commit is contained in:
Thomas Dehaeze 2020-04-07 19:34:05 +02:00
parent 60c41f1cbc
commit 60aeb7d5ab
21 changed files with 466 additions and 208 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
docs/figs/psd_change_tf.pdf Normal file

Binary file not shown.

BIN
docs/figs/psd_change_tf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-04-07 mar. 17:10 --> <!-- 2020-04-07 mar. 19:33 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Determination of the optimal nano-hexapod&rsquo;s stiffness for reducing the effect of disturbances</title> <title>Determination of the optimal nano-hexapod&rsquo;s stiffness for reducing the effect of disturbances</title>
@ -257,7 +257,7 @@
<li><a href="#org78dd34d">2.3. Sensitivity to Stages vibration (Filtering)</a></li> <li><a href="#org78dd34d">2.3. Sensitivity to Stages vibration (Filtering)</a></li>
<li><a href="#orgd4ea2f4">2.4. Effect of Ground motion (Transmissibility).</a></li> <li><a href="#orgd4ea2f4">2.4. Effect of Ground motion (Transmissibility).</a></li>
<li><a href="#org0448746">2.5. Direct Forces (Compliance).</a></li> <li><a href="#org0448746">2.5. Direct Forces (Compliance).</a></li>
<li><a href="#orge0160c0">2.6. Conclusion</a></li> <li><a href="#orga29f90b">2.6. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org6527e58">3. Effect of granite stiffness</a> <li><a href="#org6527e58">3. Effect of granite stiffness</a>
@ -270,23 +270,24 @@
</li> </li>
<li><a href="#org9215f81">3.2. Soft Granite</a></li> <li><a href="#org9215f81">3.2. Soft Granite</a></li>
<li><a href="#org8878556">3.3. Effect of the Granite transfer function</a></li> <li><a href="#org8878556">3.3. Effect of the Granite transfer function</a></li>
<li><a href="#orgb756362">3.4. Conclusion</a></li> <li><a href="#org6362e01">3.4. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org8a88fb0">4. Open Loop Budget Error</a> <li><a href="#org8a88fb0">4. Open Loop Budget Error</a>
<ul> <ul>
<li><a href="#org2ee8120">4.1. Load of the identified disturbances and transfer functions</a></li> <li><a href="#org6bd588f">4.1. Noise Budgeting - Theory</a></li>
<li><a href="#orgb1a3177">4.2. Equations</a></li> <li><a href="#orgcc86f59">4.2. Power Spectral Densities</a></li>
<li><a href="#org63eade9">4.3. Results</a></li> <li><a href="#orgef96b89">4.3. Cumulative Amplitude Spectrum</a></li>
<li><a href="#orgef96b89">4.4. Cumulative Amplitude Spectrum</a></li> <li><a href="#org2852fc6">4.4. Conclusion</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org34c0f38">5. Closed Loop Budget Error</a> <li><a href="#org34c0f38">5. Closed Loop Budget Error</a>
<ul> <ul>
<li><a href="#orgf2d36a1">5.1. Reduction thanks to feedback - Required bandwidth</a></li> <li><a href="#orgdfef0eb">5.1. Approximation of the effect of feedback on the motion error</a></li>
<li><a href="#orgf2d36a1">5.2. Reduction thanks to feedback - Required bandwidth</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orga29f90b">6. Conclusion</a></li> <li><a href="#orge784867">6. Conclusion</a></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -496,8 +497,8 @@ The effect of direct forces/torques applied on the sample (cable forces for inst
</div> </div>
</div> </div>
<div id="outline-container-orge0160c0" class="outline-3"> <div id="outline-container-orga29f90b" class="outline-3">
<h3 id="orge0160c0"><span class="section-number-3">2.6</span> Conclusion</h3> <h3 id="orga29f90b"><span class="section-number-3">2.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-6"> <div class="outline-text-3" id="text-2-6">
<div class="important"> <div class="important">
<p> <p>
@ -677,8 +678,8 @@ From Figures <a href="#orgc4c14fb">11</a> and <a href="#org533cc4b">12</a>, we s
</div> </div>
</div> </div>
<div id="outline-container-orgb756362" class="outline-3"> <div id="outline-container-org6362e01" class="outline-3">
<h3 id="orgb756362"><span class="section-number-3">3.4</span> Conclusion</h3> <h3 id="org6362e01"><span class="section-number-3">3.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-4"> <div class="outline-text-3" id="text-3-4">
<div class="important"> <div class="important">
<p> <p>
@ -696,27 +697,130 @@ Having a soft granite suspension could greatly improve the sensitivity the groun
<p> <p>
<a id="org5d05990"></a> <a id="org5d05990"></a>
</p> </p>
<p>
Now that the frequency content of disturbances have been estimated (Section <a href="#org17d3d6a">1</a>) and the transfer functions from disturbances to the position error of the sample have been identified (Section <a href="#orgf9e4300">2</a>), we can compute the level of sample vibration due to the disturbances.
</p>
<p>
We then can conclude and the nano-hexapod stiffness that will lower the sample position error.
</p>
</div> </div>
<div id="outline-container-org2ee8120" class="outline-3"> <div id="outline-container-org6bd588f" class="outline-3">
<h3 id="org2ee8120"><span class="section-number-3">4.1</span> Load of the identified disturbances and transfer functions</h3> <h3 id="org6bd588f"><span class="section-number-3">4.1</span> Noise Budgeting - Theory</h3>
<div class="outline-text-3" id="text-4-1"> <div class="outline-text-3" id="text-4-1">
<div class="org-src-container"> <p>
<pre class="src src-matlab">load(<span class="org-string">'./mat/dist_psd.mat'</span>, <span class="org-string">'dist_f'</span>); Let&rsquo;s consider Figure <a href="#org7ff50a0">13</a> there \(G_d(s)\) is the transfer function from a signal \(d\) (the perturbation) to a signal \(y\) (the sample&rsquo;s position error).
load(<span class="org-string">'./mat/opt_stiffness_disturbances.mat'</span>, <span class="org-string">'Gd'</span>) </p>
</pre>
<div id="org7ff50a0" class="figure">
<p><img src="figs/psd_change_tf.png" alt="psd_change_tf.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Figure caption</p>
</div>
<p>
We can compute the Power Spectral Density (PSD) of signal \(y\) from the PSD of \(d\) and the norm of \(G_d(s)\):
</p>
\begin{equation}
S_{y}(\omega) = \left|G_d(j\omega)\right|^2 S_{d}(\omega) \label{eq:psd_transfer_function}
\end{equation}
<p>
If we now consider multiple disturbances \(d_1, \dots, d_n\) as shown in Figure <a href="#orgc24bdf6">14</a>, we have that:
</p>
\begin{equation}
S_{y}(\omega) = \left|G_{d_1}(j\omega)\right|^2 S_{d_1}(\omega) + \dots + \left|G_{d_n}(j\omega)\right|^2 S_{d_n}(\omega) \label{eq:sum_psd}
\end{equation}
<p>
Sometimes, we prefer to compute the <b>Amplitude</b> Spectral Density (ASD) which is related to the PSD by:
\[ \Gamma_y(\omega) = \sqrt{S_y(\omega)} \]
</p>
<div id="orgc24bdf6" class="figure">
<p><img src="figs/psd_change_tf_multiple_pert.png" alt="psd_change_tf_multiple_pert.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Figure caption</p>
</div>
<p>
The Cumulative Power Spectrum (CPS) is here defined as:
</p>
\begin{equation}
\Phi_y(\omega) = \int_\omega^\infty S_y(\nu) d\nu
\end{equation}
<p>
And the Cumulative Amplitude Spectrum (CAS):
</p>
\begin{equation}
\Psi(\omega) = \sqrt{\Phi(\omega)} = \sqrt{\int_\omega^\infty S_y(\nu) d\nu}
\end{equation}
<p>
The CAS evaluation for all frequency corresponds to the rms value of the considered quantity:
\[ y_{\text{rms}} = \Psi(\omega = 0) = \sqrt{\int_0^\infty S_y(\nu) d\nu} \]
</p>
</div>
</div>
<div id="outline-container-orgcc86f59" class="outline-3">
<h3 id="orgcc86f59"><span class="section-number-3">4.2</span> Power Spectral Densities</h3>
<div class="outline-text-3" id="text-4-2">
<p>
We compute the effect of perturbations on the motion error thanks to Eq. \eqref{eq:psd_transfer_function}.
</p>
<p>
The result is shown in:
</p>
<ul class="org-ul">
<li>Figure <a href="#orgd3d7b28">15</a>: PSD of the vertical sample&rsquo;s motion error due to vertical ground motion</li>
<li>Figure <a href="#orgd8e87cd">16</a>: PSD of the vertical sample&rsquo;s motion error due to vertical vibrations of the Spindle</li>
</ul>
<div id="orgd3d7b28" class="figure">
<p><img src="figs/opt_stiff_psd_dz_gm.png" alt="opt_stiff_psd_dz_gm.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Amplitude Spectral Density of the Sample vertical position error due to Ground motion for multiple nano-hexapod stiffnesses (<a href="./figs/opt_stiff_psd_dz_gm.png">png</a>, <a href="./figs/opt_stiff_psd_dz_gm.pdf">pdf</a>)</p>
</div>
<div id="orgd8e87cd" class="figure">
<p><img src="figs/opt_stiff_psd_dz_rz.png" alt="opt_stiff_psd_dz_rz.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Amplitude Spectral Density of the Sample vertical position error due to Vertical vibration of the Spindle for multiple nano-hexapod stiffnesses (<a href="./figs/opt_stiff_psd_dz_rz.png">png</a>, <a href="./figs/opt_stiff_psd_dz_rz.pdf">pdf</a>)</p>
</div>
<p>
We compute the effect of all perturbations on the vertical position error using Eq. \eqref{eq:sum_psd} and the resulting PSD is shown in Figure <a href="#orgdbfb5e0">17</a>.
</p>
<div id="orgdbfb5e0" class="figure">
<p><img src="figs/opt_stiff_psd_dz_tot.png" alt="opt_stiff_psd_dz_tot.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Amplitude Spectral Density of the Sample vertical position error due to all considered perturbations for multiple nano-hexapod stiffnesses (<a href="./figs/opt_stiff_psd_dz_tot.png">png</a>, <a href="./figs/opt_stiff_psd_dz_tot.pdf">pdf</a>)</p>
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgb1a3177" class="outline-3"> <div id="outline-container-orgef96b89" class="outline-3">
<h3 id="orgb1a3177"><span class="section-number-3">4.2</span> Equations</h3> <h3 id="orgef96b89"><span class="section-number-3">4.3</span> Cumulative Amplitude Spectrum</h3>
</div>
<div id="outline-container-org63eade9" class="outline-3">
<h3 id="org63eade9"><span class="section-number-3">4.3</span> Results</h3>
<div class="outline-text-3" id="text-4-3"> <div class="outline-text-3" id="text-4-3">
<p> <p>
Effect of all disturbances Similarly, the Cumulative Amplitude Spectrum of the sample vibrations are shown:
</p>
<ul class="org-ul">
<li>Figure <a href="#org488d65f">18</a>: due to vertical ground motion</li>
<li>Figure <a href="#orge5458c6">19</a>: due to vertical vibrations of the Spindle</li>
<li>Figure <a href="#orgf6888f0">20</a>: due to all considered perturbations</li>
</ul>
<p>
The black dashed line corresponds to the performance objective of a sample vibration equal to \(10\ nm [rms]\).
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
@ -725,39 +829,25 @@ Effect of all disturbances
<span class="org-type">figure</span>; <span class="org-type">figure</span>;
hold on; hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span> <span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(dist_f.psd_rz)<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Frz_z'</span>), freqs, <span class="org-string">'Hz'</span>)))); plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Dwz'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-keyword">end</span>
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'ASD $\left[\frac{m}{\sqrt{Hz}}\right]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>);
xlim([2, 500]);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgef96b89" class="outline-3">
<h3 id="orgef96b89"><span class="section-number-3">4.4</span> Cumulative Amplitude Spectrum</h3>
<div class="outline-text-3" id="text-4-4">
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_ty<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Fty_z'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>))); <span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span> <span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>); plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off; hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $[m]$'</span>) xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>); legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([2, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]); xlim([1, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre> </pre>
</div> </div>
<div id="org488d65f" class="figure">
<p><img src="figs/opt_stiff_cas_dz_gm.png" alt="opt_stiff_cas_dz_gm.png" />
</p>
<p><span class="figure-number">Figure 18: </span>Cumulative Amplitude Spectrum of the Sample vertical position error due to Ground motion for multiple nano-hexapod stiffnesses (<a href="./figs/opt_stiff_cas_dz_gm.png">png</a>, <a href="./figs/opt_stiff_cas_dz_gm.pdf">pdf</a>)</p>
</div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f; <pre class="src src-matlab">freqs = dist_f.f;
@ -772,79 +862,15 @@ hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $[m]$'</span>) xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>); legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>);
xlim([2, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]); xlim([1, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre> </pre>
</div> </div>
<p>
Ground motion <div id="orge5458c6" class="figure">
<p><img src="figs/opt_stiff_cas_dz_rz.png" alt="opt_stiff_cas_dz_rz.png" />
</p> </p>
<div class="org-src-container"> <p><span class="figure-number">Figure 19: </span>Cumulative Amplitude Spectrum of the Sample vertical position error due to Vertical vibration of the Spindle for multiple nano-hexapod stiffnesses (<a href="./figs/opt_stiff_cas_dz_rz.png">png</a>, <a href="./figs/opt_stiff_cas_dz_rz.pdf">pdf</a>)</p>
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Dwz'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([2, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ex'</span>, <span class="org-string">'Dwx'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'lin'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([2, 500]);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ey'</span>, <span class="org-string">'Dwy'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2)))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'lin'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([2, 500]);
</pre>
</div>
<p>
Sum of all perturbations
</p>
<div class="org-src-container">
<pre class="src src-matlab">psd_tot = zeros(length(freqs), length(Ks));
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>) = dist_f.psd_gm<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Dwz'</span> ), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2 <span class="org-type">+</span> ...
dist_f.psd_ty<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Fty_z'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2 <span class="org-type">+</span> ...
dist_f.psd_rz<span class="org-type">.*</span>abs(squeeze(freqresp(Gd{<span class="org-constant">i</span>}(<span class="org-string">'Ez'</span>, <span class="org-string">'Frz_z'</span>), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2;
<span class="org-keyword">end</span>
</pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
@ -864,6 +890,25 @@ legend(<span class="org-string">'Location'</span>, <span class="org-string">'nor
xlim([1, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]); xlim([1, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre> </pre>
</div> </div>
<div id="orgf6888f0" class="figure">
<p><img src="figs/opt_stiff_cas_dz_tot.png" alt="opt_stiff_cas_dz_tot.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Cumulative Amplitude Spectrum of the Sample vertical position error due to all considered perturbations for multiple nano-hexapod stiffnesses (<a href="./figs/opt_stiff_cas_dz_tot.png">png</a>, <a href="./figs/opt_stiff_cas_dz_tot.pdf">pdf</a>)</p>
</div>
</div>
</div>
<div id="outline-container-org2852fc6" class="outline-3">
<h3 id="org2852fc6"><span class="section-number-3">4.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-4">
<div class="important">
<p>
From Figure <a href="#orgf6888f0">20</a>, we can see that a soft nano-hexapod \(k<10^6\ [N/m]\) significantly reduces the effect of perturbations from 20Hz to 300Hz.
</p>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -875,9 +920,45 @@ xlim([1, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-typ
<a id="orgd3503fb"></a> <a id="orgd3503fb"></a>
</p> </p>
</div> </div>
<div id="outline-container-orgf2d36a1" class="outline-3"> <div id="outline-container-orgdfef0eb" class="outline-3">
<h3 id="orgf2d36a1"><span class="section-number-3">5.1</span> Reduction thanks to feedback - Required bandwidth</h3> <h3 id="orgdfef0eb"><span class="section-number-3">5.1</span> Approximation of the effect of feedback on the motion error</h3>
<div class="outline-text-3" id="text-5-1"> <div class="outline-text-3" id="text-5-1">
<p>
Let&rsquo;s consider Figure <a href="#org6308d80">21</a> where a controller \(K\) is used to reduce the effect of the disturbance \(d\) on the position error \(y\).
</p>
<div id="org6308d80" class="figure">
<p><img src="figs/effect_feedback_disturbance_diagram.png" alt="effect_feedback_disturbance_diagram.png" />
</p>
<p><span class="figure-number">Figure 21: </span>Feedback System</p>
</div>
<p>
The reduction of the impact of \(d\) on \(y\) thanks to feedback is described by the following equation:
</p>
\begin{equation}
\frac{y}{d} = \frac{G_d}{1 + KG}
\end{equation}
<p>
As a first approximation, we can consider that the controller is designed in such a way that the loop gain \(KG\) is a pure integrator:
\[ L_1(s) = K_1(s) G(s) = \frac{\omega_c}{s} \]
where \(\omega_c\) is the crossover frequency.
</p>
<p>
We may then consider another controller in such a way that the loop gain corresponds to a double integrator with a lead centered with the crossover frequency \(\omega_c\):
\[ L_2(s) = K_2(s) G(s) = \left( \frac{\omega_c}{s} \right)^2 \cdot \frac{1 + \frac{s}{\omega_c/2}}{1 + \frac{s}{2\omega_c}} \]
</p>
</div>
</div>
<div id="outline-container-orgf2d36a1" class="outline-3">
<h3 id="orgf2d36a1"><span class="section-number-3">5.2</span> Reduction thanks to feedback - Required bandwidth</h3>
<div class="outline-text-3" id="text-5-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">wc = 1<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span>; <span class="org-comment">% [rad/s]</span> <pre class="src src-matlab">wc = 1<span class="org-type">*</span>2<span class="org-type">*</span><span class="org-constant">pi</span>; <span class="org-comment">% [rad/s]</span>
xic = 0.5; xic = 0.5;
@ -966,13 +1047,13 @@ xlim([1, 500]);
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orga29f90b" class="outline-2"> <div id="outline-container-orge784867" class="outline-2">
<h2 id="orga29f90b"><span class="section-number-2">6</span> Conclusion</h2> <h2 id="orge784867"><span class="section-number-2">6</span> Conclusion</h2>
</div> </div>
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-07 mar. 17:10</p> <p class="date">Created: 2020-04-07 mar. 19:33</p>
</div> </div>
</body> </body>
</html> </html>

Binary file not shown.

View File

@ -74,11 +74,6 @@ The level of these disturbances has been identified form experiments which are d
simulinkproject('../'); simulinkproject('../');
#+end_src #+end_src
#+begin_src matlab
load('mat/conf_simulink.mat');
open('nass_model.slx')
#+end_src
** Plots :ignore: ** Plots :ignore:
The measured Amplitude Spectral Densities (ASD) of these forces are shown in Figures [[fig:opt_stiff_dist_gm]] and [[fig:opt_stiff_dist_fty_frz]]. The measured Amplitude Spectral Densities (ASD) of these forces are shown in Figures [[fig:opt_stiff_dist_gm]] and [[fig:opt_stiff_dist_fty_frz]].
@ -149,9 +144,9 @@ We do that for a wide range of nano-hexapod stiffnesses and we compare the obtai
#+begin_src matlab #+begin_src matlab
load('mat/conf_simulink.mat'); load('mat/conf_simulink.mat');
open('nass_model.slx') open('nass_model.slx')
#+end_src #+end_src
** Initialization ** Initialization
We initialize all the stages with the default parameters. We initialize all the stages with the default parameters.
#+begin_src matlab #+begin_src matlab
@ -399,6 +394,19 @@ The effect of direct forces/torques applied on the sample (cable forces for inst
** Introduction :ignore: ** Introduction :ignore:
In this section, we wish to see if a soft granite suspension could help in reducing the effect of disturbances on the position error of the sample. In this section, we wish to see if a soft granite suspension could help in reducing the effect of disturbances on the position error of the sample.
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
simulinkproject('../');
#+end_src
** Analytical Analysis ** Analytical Analysis
*** Simple mass-spring-damper model *** Simple mass-spring-damper model
Let's consider the system shown in Figure [[fig:2dof_system_granite_stiffness]] consisting of two stacked mass-spring-damper systems. Let's consider the system shown in Figure [[fig:2dof_system_granite_stiffness]] consisting of two stacked mass-spring-damper systems.
@ -691,6 +699,10 @@ From Figures [[fig:opt_stiff_soft_granite_Frz]] and [[fig:opt_stiff_soft_granite
* Open Loop Budget Error * Open Loop Budget Error
<<sec:open_loop_budget_error>> <<sec:open_loop_budget_error>>
** Introduction :ignore: ** Introduction :ignore:
Now that the frequency content of disturbances have been estimated (Section [[sec:psd_disturbances]]) and the transfer functions from disturbances to the position error of the sample have been identified (Section [[sec:effect_disturbances]]), we can compute the level of sample vibration due to the disturbances.
We then can conclude and the nano-hexapod stiffness that will lower the sample position error.
** Matlab Init :noexport:ignore: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
@ -704,30 +716,120 @@ From Figures [[fig:opt_stiff_soft_granite_Frz]] and [[fig:opt_stiff_soft_granite
simulinkproject('../'); simulinkproject('../');
#+end_src #+end_src
#+begin_src matlab ** Noise Budgeting - Theory
load('mat/conf_simulink.mat'); Let's consider Figure [[fig:psd_change_tf]] there $G_d(s)$ is the transfer function from a signal $d$ (the perturbation) to a signal $y$ (the sample's position error).
open('nass_model.slx') #+begin_src latex :file psd_change_tf.pdf
\begin{tikzpicture}
\node[block] (G) at (0, 0) {$G_d(s)$};
\draw[<-] (G.west) -- ++(-1, 0) node[above right]{$d$};
\draw[->] (G.east) -- ++( 1, 0) node[above left ]{$y$};
\end{tikzpicture}
#+end_src #+end_src
** Load of the identified disturbances and transfer functions #+name: fig:psd_change_tf
#+begin_src matlab #+caption: Figure caption
#+RESULTS:
[[file:figs/psd_change_tf.png]]
We can compute the Power Spectral Density (PSD) of signal $y$ from the PSD of $d$ and the norm of $G_d(s)$:
\begin{equation}
S_{y}(\omega) = \left|G_d(j\omega)\right|^2 S_{d}(\omega) \label{eq:psd_transfer_function}
\end{equation}
If we now consider multiple disturbances $d_1, \dots, d_n$ as shown in Figure [[fig:psd_change_tf_multiple_pert]], we have that:
\begin{equation}
S_{y}(\omega) = \left|G_{d_1}(j\omega)\right|^2 S_{d_1}(\omega) + \dots + \left|G_{d_n}(j\omega)\right|^2 S_{d_n}(\omega) \label{eq:sum_psd}
\end{equation}
Sometimes, we prefer to compute the *Amplitude* Spectral Density (ASD) which is related to the PSD by:
\[ \Gamma_y(\omega) = \sqrt{S_y(\omega)} \]
#+begin_src latex :file psd_change_tf_multiple_pert.pdf
\begin{tikzpicture}
\node[block] (Gm) at (0, 0) {$\dots$};
\draw[<-] (Gm.west) -- ++(-1, 0);
\node[block, above=0.5 of Gm] (G1) {$G_{d_1}(s)$};
\draw[<-] (G1.west) -- ++(-1, 0) node[above right]{$d_1$};
\node[block, below=0.5 of Gm] (Gn) {$G_{d_n}(s)$};
\draw[<-] (Gn.west) -- ++(-1, 0) node[above right]{$d_n$};
\node[addb, right= of Gm] (add) {};
\draw[->] (G1.east) -| (add.north);
\draw[->] (Gm.east) -- (add.west);
\draw[->] (Gn.east) -| (add.south);
\draw[->] (add) -- ++( 1, 0) node[above left]{$y$};
\end{tikzpicture}
#+end_src
#+name: fig:psd_change_tf_multiple_pert
#+caption: Figure caption
#+RESULTS:
[[file:figs/psd_change_tf_multiple_pert.png]]
The Cumulative Power Spectrum (CPS) is here defined as:
\begin{equation}
\Phi_y(\omega) = \int_\omega^\infty S_y(\nu) d\nu
\end{equation}
And the Cumulative Amplitude Spectrum (CAS):
\begin{equation}
\Psi(\omega) = \sqrt{\Phi(\omega)} = \sqrt{\int_\omega^\infty S_y(\nu) d\nu}
\end{equation}
The CAS evaluation for all frequency corresponds to the rms value of the considered quantity:
\[ y_{\text{rms}} = \Psi(\omega = 0) = \sqrt{\int_0^\infty S_y(\nu) d\nu} \]
** Power Spectral Densities
We compute the effect of perturbations on the motion error thanks to Eq. eqref:eq:psd_transfer_function.
The result is shown in:
- Figure [[fig:opt_stiff_psd_dz_gm]]: PSD of the vertical sample's motion error due to vertical ground motion
- Figure [[fig:opt_stiff_psd_dz_rz]]: PSD of the vertical sample's motion error due to vertical vibrations of the Spindle
#+begin_src matlab :exports none
load('./mat/dist_psd.mat', 'dist_f'); load('./mat/dist_psd.mat', 'dist_f');
load('./mat/opt_stiffness_disturbances.mat', 'Gd') load('./mat/opt_stiffness_disturbances.mat', 'Gd')
#+end_src #+end_src
** Equations #+begin_src matlab :exports none
** Results
Effect of all disturbances
#+begin_src matlab
freqs = dist_f.f; freqs = dist_f.f;
figure; figure;
hold on; hold on;
for i = 1:length(Ks) for i = 1:length(Ks)
plot(freqs, sqrt(dist_f.psd_rz).*abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz')))); plot(freqs, sqrt(dist_f.psd_gm).*abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD $\left[\frac{m}{\sqrt{Hz}}\right]$')
legend('location', 'southwest');
xlim([1, 500]);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_psd_dz_gm.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_psd_dz_gm
#+caption: Amplitude Spectral Density of the Sample vertical position error due to Ground motion for multiple nano-hexapod stiffnesses ([[./figs/opt_stiff_psd_dz_gm.png][png]], [[./figs/opt_stiff_psd_dz_gm.pdf][pdf]])
[[file:figs/opt_stiff_psd_dz_gm.png]]
#+begin_src matlab :exports none
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(dist_f.psd_rz).*abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz'))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end end
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
@ -736,24 +838,85 @@ Effect of all disturbances
xlim([2, 500]); xlim([2, 500]);
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_psd_dz_rz.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_psd_dz_rz
#+caption: Amplitude Spectral Density of the Sample vertical position error due to Vertical vibration of the Spindle for multiple nano-hexapod stiffnesses ([[./figs/opt_stiff_psd_dz_rz.png][png]], [[./figs/opt_stiff_psd_dz_rz.pdf][pdf]])
[[file:figs/opt_stiff_psd_dz_rz.png]]
We compute the effect of all perturbations on the vertical position error using Eq. eqref:eq:sum_psd and the resulting PSD is shown in Figure [[fig:opt_stiff_psd_dz_tot]].
#+begin_src matlab :exports none
psd_tot = zeros(length(freqs), length(Ks));
for i = 1:length(Ks)
psd_tot(:,i) = dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz' ), freqs, 'Hz'))).^2 + ...
dist_f.psd_ty.*abs(squeeze(freqresp(Gd{i}('Ez', 'Fty_z'), freqs, 'Hz'))).^2 + ...
dist_f.psd_rz.*abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz'))).^2;
end
#+end_src
#+begin_src matlab :exports none
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(psd_tot(:,i)), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD $\left[\frac{m}{\sqrt{Hz}}\right]$')
legend('location', 'southwest')
xlim([1, 500]);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_psd_dz_tot.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_psd_dz_tot
#+caption: Amplitude Spectral Density of the Sample vertical position error due to all considered perturbations for multiple nano-hexapod stiffnesses ([[./figs/opt_stiff_psd_dz_tot.png][png]], [[./figs/opt_stiff_psd_dz_tot.pdf][pdf]])
[[file:figs/opt_stiff_psd_dz_tot.png]]
** Cumulative Amplitude Spectrum ** Cumulative Amplitude Spectrum
Similarly, the Cumulative Amplitude Spectrum of the sample vibrations are shown:
- Figure [[fig:opt_stiff_cas_dz_gm]]: due to vertical ground motion
- Figure [[fig:opt_stiff_cas_dz_rz]]: due to vertical vibrations of the Spindle
- Figure [[fig:opt_stiff_cas_dz_tot]]: due to all considered perturbations
The black dashed line corresponds to the performance objective of a sample vibration equal to $10\ nm [rms]$.
#+begin_src matlab #+begin_src matlab
freqs = dist_f.f; freqs = dist_f.f;
figure; figure;
hold on; hold on;
for i = 1:length(Ks) for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_ty.*abs(squeeze(freqresp(Gd{i}('Ez', 'Fty_z'), freqs, 'Hz'))).^2)))), '-', ... plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i))); 'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off'); plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $[m]$') xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
legend('Location', 'southwest'); legend('Location', 'northeast');
xlim([2, 500]); ylim([1e-10 1e-6]); xlim([1, 500]); ylim([1e-10 1e-6]);
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_cas_dz_gm.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_cas_dz_gm
#+caption: Cumulative Amplitude Spectrum of the Sample vertical position error due to Ground motion for multiple nano-hexapod stiffnesses ([[./figs/opt_stiff_cas_dz_gm.png][png]], [[./figs/opt_stiff_cas_dz_gm.pdf][pdf]])
[[file:figs/opt_stiff_cas_dz_gm.png]]
#+begin_src matlab #+begin_src matlab
freqs = dist_f.f; freqs = dist_f.f;
@ -768,71 +931,17 @@ Effect of all disturbances
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $[m]$') xlabel('Frequency [Hz]'); ylabel('CAS $[m]$')
legend('Location', 'southwest'); legend('Location', 'southwest');
xlim([2, 500]); ylim([1e-10 1e-6]); xlim([1, 500]); ylim([1e-10 1e-6]);
#+end_src #+end_src
Ground motion #+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab #+begin_src matlab :var filepath="figs/opt_stiff_cas_dz_rz.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
freqs = dist_f.f; <<plt-matlab>>
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
legend('Location', 'northeast');
xlim([2, 500]); ylim([1e-10 1e-6]);
#+end_src #+end_src
#+begin_src matlab #+name: fig:opt_stiff_cas_dz_rz
freqs = dist_f.f; #+caption: Cumulative Amplitude Spectrum of the Sample vertical position error due to Vertical vibration of the Spindle for multiple nano-hexapod stiffnesses ([[./figs/opt_stiff_cas_dz_rz.png][png]], [[./figs/opt_stiff_cas_dz_rz.pdf][pdf]])
[[file:figs/opt_stiff_cas_dz_rz.png]]
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ex', 'Dwx'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'lin');
xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
legend('Location', 'northeast');
xlim([2, 500]);
#+end_src
#+begin_src matlab
freqs = dist_f.f;
figure;
hold on;
for i = 1:length(Ks)
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ey', 'Dwy'), freqs, 'Hz'))).^2)))), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)));
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--', 'HandleVisibility', 'off');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'lin');
xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
legend('Location', 'northeast');
xlim([2, 500]);
#+end_src
Sum of all perturbations
#+begin_src matlab
psd_tot = zeros(length(freqs), length(Ks));
for i = 1:length(Ks)
psd_tot(:,i) = dist_f.psd_gm.*abs(squeeze(freqresp(Gd{i}('Ez', 'Dwz' ), freqs, 'Hz'))).^2 + ...
dist_f.psd_ty.*abs(squeeze(freqresp(Gd{i}('Ez', 'Fty_z'), freqs, 'Hz'))).^2 + ...
dist_f.psd_rz.*abs(squeeze(freqresp(Gd{i}('Ez', 'Frz_z'), freqs, 'Hz'))).^2;
end
#+end_src
#+begin_src matlab #+begin_src matlab
freqs = dist_f.f; freqs = dist_f.f;
@ -851,9 +960,77 @@ Sum of all perturbations
xlim([1, 500]); ylim([1e-10 1e-6]); xlim([1, 500]); ylim([1e-10 1e-6]);
#+end_src #+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_cas_dz_tot.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_cas_dz_tot
#+caption: Cumulative Amplitude Spectrum of the Sample vertical position error due to all considered perturbations for multiple nano-hexapod stiffnesses ([[./figs/opt_stiff_cas_dz_tot.png][png]], [[./figs/opt_stiff_cas_dz_tot.pdf][pdf]])
[[file:figs/opt_stiff_cas_dz_tot.png]]
** Conclusion
#+begin_important
From Figure [[fig:opt_stiff_cas_dz_tot]], we can see that a soft nano-hexapod $k<10^6\ [N/m]$ significantly reduces the effect of perturbations from 20Hz to 300Hz.
#+end_important
* Closed Loop Budget Error * Closed Loop Budget Error
<<sec:closed_loop_budget_error>> <<sec:closed_loop_budget_error>>
** Introduction :ignore: ** Introduction :ignore:
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<<matlab-init>>
#+end_src
#+begin_src matlab :tangle no
simulinkproject('../');
#+end_src
** Approximation of the effect of feedback on the motion error
Let's consider Figure [[fig:effect_feedback_disturbance_diagram]] where a controller $K$ is used to reduce the effect of the disturbance $d$ on the position error $y$.
#+begin_src latex :file effect_feedback_disturbance_diagram.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[block, above=0.6 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[->] (adddy.east) -- ++(1, 0) node[above left]{$y$};
\draw[->] ($(adddy.east)+(0.6, 0)$) node[branch]{} -- ++(0, -1) -| (addfb.south);
\draw[<-] (Gd.north) -- ++(0, 0.6) node[below right]{$d$};
\draw[->] (Gd.south) -- (adddy.north);
\end{tikzpicture}
#+end_src
#+name: fig:effect_feedback_disturbance_diagram
#+caption: Feedback System
#+RESULTS:
[[file:figs/effect_feedback_disturbance_diagram.png]]
The reduction of the impact of $d$ on $y$ thanks to feedback is described by the following equation:
\begin{equation}
\frac{y}{d} = \frac{G_d}{1 + KG}
\end{equation}
As a first approximation, we can consider that the controller is designed in such a way that the loop gain $KG$ is a pure integrator:
\[ L_1(s) = K_1(s) G(s) = \frac{\omega_c}{s} \]
where $\omega_c$ is the crossover frequency.
We may then consider another controller in such a way that the loop gain corresponds to a double integrator with a lead centered with the crossover frequency $\omega_c$:
\[ L_2(s) = K_2(s) G(s) = \left( \frac{\omega_c}{s} \right)^2 \cdot \frac{1 + \frac{s}{\omega_c/2}}{1 + \frac{s}{2\omega_c}} \]
** Reduction thanks to feedback - Required bandwidth ** Reduction thanks to feedback - Required bandwidth
#+begin_src matlab #+begin_src matlab
wc = 1*2*pi; % [rad/s] wc = 1*2*pi; % [rad/s]