Finish analysis of required bw as a function of K

This commit is contained in:
Thomas Dehaeze 2020-04-08 12:12:41 +02:00
parent 60aeb7d5ab
commit 1715214c8b
10 changed files with 399 additions and 240 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

View File

@ -4,7 +4,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-04-07 mar. 19:33 -->
<!-- 2020-04-08 mer. 12:12 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Determination of the optimal nano-hexapod&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="#orgd4ea2f4">2.4. Effect of Ground motion (Transmissibility).</a></li>
<li><a href="#org0448746">2.5. Direct Forces (Compliance).</a></li>
<li><a href="#orga29f90b">2.6. Conclusion</a></li>
<li><a href="#orge784867">2.6. Conclusion</a></li>
</ul>
</li>
<li><a href="#org6527e58">3. Effect of granite stiffness</a>
@ -270,7 +270,7 @@
</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="#org6362e01">3.4. Conclusion</a></li>
<li><a href="#org4b4fa39">3.4. Conclusion</a></li>
</ul>
</li>
<li><a href="#org8a88fb0">4. Open Loop Budget Error</a>
@ -278,7 +278,7 @@
<li><a href="#org6bd588f">4.1. Noise Budgeting - Theory</a></li>
<li><a href="#orgcc86f59">4.2. Power Spectral Densities</a></li>
<li><a href="#orgef96b89">4.3. Cumulative Amplitude Spectrum</a></li>
<li><a href="#org2852fc6">4.4. Conclusion</a></li>
<li><a href="#org2b9df24">4.4. Conclusion</a></li>
</ul>
</li>
<li><a href="#org34c0f38">5. Closed Loop Budget Error</a>
@ -287,7 +287,7 @@
<li><a href="#orgf2d36a1">5.2. Reduction thanks to feedback - Required bandwidth</a></li>
</ul>
</li>
<li><a href="#orge784867">6. Conclusion</a></li>
<li><a href="#orgbf0fb63">6. Conclusion</a></li>
</ul>
</div>
</div>
@ -497,8 +497,8 @@ The effect of direct forces/torques applied on the sample (cable forces for inst
</div>
</div>
<div id="outline-container-orga29f90b" class="outline-3">
<h3 id="orga29f90b"><span class="section-number-3">2.6</span> Conclusion</h3>
<div id="outline-container-orge784867" class="outline-3">
<h3 id="orge784867"><span class="section-number-3">2.6</span> Conclusion</h3>
<div class="outline-text-3" id="text-2-6">
<div class="important">
<p>
@ -678,8 +678,8 @@ From Figures <a href="#orgc4c14fb">11</a> and <a href="#org533cc4b">12</a>, we s
</div>
</div>
<div id="outline-container-org6362e01" class="outline-3">
<h3 id="org6362e01"><span class="section-number-3">3.4</span> Conclusion</h3>
<div id="outline-container-org4b4fa39" class="outline-3">
<h3 id="org4b4fa39"><span class="section-number-3">3.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-3-4">
<div class="important">
<p>
@ -900,8 +900,8 @@ xlim([1, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-typ
</div>
</div>
<div id="outline-container-org2852fc6" class="outline-3">
<h3 id="org2852fc6"><span class="section-number-3">4.4</span> Conclusion</h3>
<div id="outline-container-org2b9df24" class="outline-3">
<h3 id="org2b9df24"><span class="section-number-3">4.4</span> Conclusion</h3>
<div class="outline-text-3" id="text-4-4">
<div class="important">
<p>
@ -919,6 +919,9 @@ From Figure <a href="#orgf6888f0">20</a>, we can see that a soft nano-hexapod \(
<p>
<a id="orgd3503fb"></a>
</p>
<p>
From the total open-loop power spectral density of the sample&rsquo;s motion error, we can estimate what is the required control bandwidth for the sample&rsquo;s motion error to be reduced down to \(10nm\).
</p>
</div>
<div id="outline-container-orgdfef0eb" class="outline-3">
<h3 id="orgdfef0eb"><span class="section-number-3">5.1</span> Approximation of the effect of feedback on the motion error</h3>
@ -940,10 +943,13 @@ The reduction of the impact of \(d\) on \(y\) thanks to feedback is described by
\begin{equation}
\frac{y}{d} = \frac{G_d}{1 + KG}
\end{equation}
<p>
The transfer functions corresponding to \(G_d\) are those identified in Section <a href="#orgf9e4300">2</a>.
</p>
<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:
As a first approximation, we can consider that the controller \(K\) 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>
@ -953,107 +959,131 @@ 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}} \]
</p>
<p>
In the next section, we see how the power spectral density of \(y\) is reduced as a function of the control bandwidth \(\omega_c\).
This will help to determine what is the approximate control bandwidth required such that the rms value of \(y\) is below \(10nm\).
</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">
<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;
<p>
Let&rsquo;s first see how does the Cumulative Amplitude Spectrum of the sample&rsquo;s motion error is modified by the control.
</p>
S = (s<span class="org-type">/</span>wc)<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>wc);
<p>
In Figure <a href="#orgcbef465">22</a> is shown the Cumulative Amplitude Spectrum of the sample&rsquo;s motion error in Open-Loop and in Closed Loop for several control bandwidth (from 1Hz to 200Hz) and 4 different nano-hexapod stiffnesses.
The controller used in this simulation is \(K_1\). The loop gain is then a pure integrator.
</p>
bodeFig({S}, logspace(<span class="org-type">-</span>1,2,1000))
</pre>
<p>
In Figure <a href="#orgd677910">23</a> is shown the expected RMS value of the sample&rsquo;s position error as a function of the control bandwidth, both for \(K_1\) (left plot) and \(K_2\) (right plot).
As expected, it is shown that \(K_2\) performs better than \(K_1\).
This Figure tells us how much control bandwidth is required to attain a certain level of performance, and that for all the considered nano-hexapod stiffnesses.
</p>
<p>
The obtained required bandwidth (approximate upper and lower bounds) to obtained a sample&rsquo;s motion error less than 10nm rms are gathered in Table <a href="#org5ab4860">1</a>.
</p>
<div id="orgcbef465" class="figure">
<p><img src="figs/opt_stiff_cas_closed_loop.png" alt="opt_stiff_cas_closed_loop.png" />
</p>
<p><span class="figure-number">Figure 22: </span>Cumulative Amplitude Spectrum of the sample&rsquo;s motion error in Open-Loop and in Closed Loop for several control bandwidth and 4 different nano-hexapod stiffnesses (<a href="./figs/opt_stiff_cas_closed_loop.png">png</a>, <a href="./figs/opt_stiff_cas_closed_loop.pdf">pdf</a>)</p>
</div>
<div class="org-src-container">
<pre class="src src-matlab">wc = [1, 5, 10, 20, 50, 100, 200];
S1 = {zeros(length(wc), 1)};
S2 = {zeros(length(wc), 1)};
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">j</span></span> = <span class="org-constant">1:length(wc)</span>
L = (2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>))<span class="org-type">/</span>s; <span class="org-comment">% Simple integrator</span>
S1{<span class="org-constant">j</span>} = 1<span class="org-type">/</span>(1 <span class="org-type">+</span> L);
L = ((2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>))<span class="org-type">/</span>s)<span class="org-type">^</span>2<span class="org-type">*</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>)<span class="org-type">/</span>2))<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>)<span class="org-type">*</span>2));
S2{<span class="org-constant">j</span>} = 1<span class="org-type">/</span>(1 <span class="org-type">+</span> L);
<span class="org-keyword">end</span>
</pre>
<div id="orgd677910" class="figure">
<p><img src="figs/opt_stiff_req_bandwidth_K1_K2.png" alt="opt_stiff_req_bandwidth_K1_K2.png" />
</p>
<p><span class="figure-number">Figure 23: </span>Expected RMS value of the sample&rsquo;s motion error \(E_z\) as a function of the control bandwidth when using \(K_1\) and \(K_2\) (<a href="./figs/opt_stiff_req_bandwidth_K1_K2.png">png</a>, <a href="./figs/opt_stiff_req_bandwidth_K1_K2.pdf">pdf</a>)</p>
</div>
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<table id="org5ab4860" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Approximate required control bandwidth such that the motion error is below \(10nm\)</caption>
<span class="org-type">figure</span>;
hold on;
<span class="org-constant">i</span> = 6;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">j</span></span> = <span class="org-constant">1:length(wc)</span>
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>,<span class="org-string">'ColorOrderIndex'</span>,<span class="org-constant">j</span>);
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(abs(squeeze(freqresp(S1{<span class="org-constant">j</span>}, freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2<span class="org-type">.*</span>psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>))))), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$\\omega_c = %.0f$ [Hz]'</span>, wc(<span class="org-constant">j</span>)));
<span class="org-keyword">end</span>
plot(freqs, sqrt(flip(<span class="org-type">-</span>cumtrapz(flip(freqs), flip(psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>))))), <span class="org-string">'k-'</span>, ...
<span class="org-string">'DisplayName'</span>, <span class="org-string">'Open-Loop'</span>);
plot([freqs(1) freqs(end)], [10e<span class="org-type">-</span>9 10e<span class="org-type">-</span>9], <span class="org-string">'k--'</span>, <span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>);
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Frequency [Hz]'</span>); ylabel(<span class="org-string">'CAS $E_y$ $[m]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'northeast'</span>);
xlim([0.5, 500]); ylim([1e<span class="org-type">-</span>10 1e<span class="org-type">-</span>6]);
</pre>
</div>
<colgroup>
<col class="org-left" />
<div class="org-src-container">
<pre class="src src-matlab">wc = logspace(0, 3, 100);
<col class="org-right" />
Dz1_rms = zeros(length(Ks), length(wc));
Dz2_rms = zeros(length(Ks), length(wc));
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">j</span></span> = <span class="org-constant">1:length(wc)</span>
L = (2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>))<span class="org-type">/</span>s;
Dz1_rms(<span class="org-constant">i</span>, <span class="org-constant">j</span>) = sqrt(trapz(freqs, abs(squeeze(freqresp(1<span class="org-type">/</span>(1 <span class="org-type">+</span> L), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2<span class="org-type">.*</span>psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>)));
<col class="org-right" />
L = ((2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>))<span class="org-type">/</span>s)<span class="org-type">^</span>2<span class="org-type">*</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>)<span class="org-type">/</span>2))<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">/</span>(2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>wc(<span class="org-constant">j</span>)<span class="org-type">*</span>2));
Dz2_rms(<span class="org-constant">i</span>, <span class="org-constant">j</span>) = sqrt(trapz(freqs, abs(squeeze(freqresp(1<span class="org-type">/</span>(1 <span class="org-type">+</span> L), freqs, <span class="org-string">'Hz'</span>)))<span class="org-type">.^</span>2<span class="org-type">.*</span>psd_tot(<span class="org-type">:</span>,<span class="org-constant">i</span>)));
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
</pre>
</div>
<col class="org-right" />
<div class="org-src-container">
<pre class="src src-matlab">freqs = dist_f.f;
<col class="org-right" />
<span class="org-type">figure</span>;
hold on;
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:length(Ks)</span>
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>,<span class="org-string">'ColorOrderIndex'</span>,<span class="org-constant">i</span>);
plot(wc, Dz1_rms(<span class="org-constant">i</span>, <span class="org-type">:</span>), <span class="org-string">'-'</span>, ...
<span class="org-string">'DisplayName'</span>, sprintf(<span class="org-string">'$k = %.0g$ [N/m]'</span>, Ks(<span class="org-constant">i</span>)))
<col class="org-right" />
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>,<span class="org-string">'ColorOrderIndex'</span>,<span class="org-constant">i</span>);
plot(wc, Dz2_rms(<span class="org-constant">i</span>, <span class="org-type">:</span>), <span class="org-string">'--'</span>, ...
<span class="org-string">'HandleVisibility'</span>, <span class="org-string">'off'</span>)
<span class="org-keyword">end</span>
hold off;
<span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'xscale'</span>, <span class="org-string">'log'</span>); <span class="org-type">set</span>(<span class="org-variable-name">gca</span>, <span class="org-string">'yscale'</span>, <span class="org-string">'log'</span>);
xlabel(<span class="org-string">'Control Bandwidth [Hz]'</span>); ylabel(<span class="org-string">'$E_z\ [m, rms]$'</span>)
legend(<span class="org-string">'Location'</span>, <span class="org-string">'southwest'</span>);
xlim([1, 500]);
</pre>
<col class="org-right" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Nano-Hexapod stiffness [N/m]</th>
<th scope="col" class="org-right">10<sup>3</sup></th>
<th scope="col" class="org-right">10<sup>4</sup></th>
<th scope="col" class="org-right">10<sup>5</sup></th>
<th scope="col" class="org-right">10<sup>6</sup></th>
<th scope="col" class="org-right">10<sup>7</sup></th>
<th scope="col" class="org-right">10<sup>8</sup></th>
<th scope="col" class="org-right">10<sup>9</sup></th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Required wc with L1 [Hz]</td>
<td class="org-right">152</td>
<td class="org-right">305</td>
<td class="org-right">1000</td>
<td class="org-right">870</td>
<td class="org-right">933</td>
<td class="org-right">870</td>
<td class="org-right">870</td>
</tr>
<tr>
<td class="org-left">Required wc with L2 [Hz]</td>
<td class="org-right">57</td>
<td class="org-right">66</td>
<td class="org-right">152</td>
<td class="org-right">152</td>
<td class="org-right">248</td>
<td class="org-right">266</td>
<td class="org-right">248</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="outline-container-orgbf0fb63" class="outline-2">
<h2 id="orgbf0fb63"><span class="section-number-2">6</span> Conclusion</h2>
<div class="outline-text-2" id="text-6">
<div class="important">
<p>
From Figure <a href="#orgd677910">23</a> and Table <a href="#org5ab4860">1</a>, we can clearly see three different results depending on the nano-hexapod stiffness:
</p>
<ul class="org-ul">
<li>For a soft nano-hexapod (\(k < 10^4\ [N/m]\)), the required bandwidth is \(\omega_c \approx 50-100\ Hz\)</li>
<li>For a nano-hexapods with \(10^5 < k < 10^6\ [N/m]\)), the required bandwidth is \(\omega_c \approx 150-300\ Hz\)</li>
<li>For a stiff nano-hexapods (\(k > 10^7\ [N/m]\)), the required bandwidth is \(\omega_c \approx 250-500\ Hz\)</li>
</ul>
</div>
</div>
<div id="outline-container-orge784867" class="outline-2">
<h2 id="orge784867"><span class="section-number-2">6</span> Conclusion</h2>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-07 mar. 19:33</p>
<p class="date">Created: 2020-04-08 mer. 12:12</p>
</div>
</body>
</html>

View File

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-04-07 mar. 14:55 -->
<!-- 2020-04-08 mer. 12:12 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Determination of the optimal nano-hexapod&rsquo;s stiffness</title>
@ -228,7 +227,9 @@
</script>
<script>
MathJax = {
tex: { macros: {
tex: {
tags: 'ams',
macros: {
bm: ["\\boldsymbol{#1}",1],
}
}
@ -250,7 +251,7 @@
<ul>
<li><a href="#org157c07d">1. Spindle Rotation Speed</a>
<ul>
<li><a href="#orgb1e5096">1.1. Initialization</a></li>
<li><a href="#org67607c3">1.1. Initialization</a></li>
<li><a href="#org687bdef">1.2. Identification when rotating at maximum speed</a></li>
<li><a href="#org7dcfddb">1.3. Change of dynamics</a></li>
</ul>
@ -265,7 +266,7 @@
</li>
<li><a href="#org19559b0">3. Payload &ldquo;Impedance&rdquo; Effect</a>
<ul>
<li><a href="#org67607c3">3.1. Initialization</a></li>
<li><a href="#org64a8be3">3.1. Initialization</a></li>
<li><a href="#org73f1c6e">3.2. Identification of the dynamics while change the payload dynamics</a></li>
<li><a href="#orgd7a519b">3.3. Change of dynamics for the primary controller</a>
<ul>
@ -322,8 +323,8 @@ The rotation speed will have an effect due to the Coriolis effect.
</p>
</div>
<div id="outline-container-orgb1e5096" class="outline-3">
<h3 id="orgb1e5096"><span class="section-number-3">1.1</span> Initialization</h3>
<div id="outline-container-org67607c3" class="outline-3">
<h3 id="org67607c3"><span class="section-number-3">1.1</span> Initialization</h3>
<div class="outline-text-3" id="text-1-1">
<p>
We initialize all the stages with the default parameters.
@ -599,8 +600,8 @@ When the nano-hexapod is stiff (\(k>10^7\ [N/m]\)), the compliance of the micro-
</p>
</div>
<div id="outline-container-org67607c3" class="outline-3">
<h3 id="org67607c3"><span class="section-number-3">3.1</span> Initialization</h3>
<div id="outline-container-org64a8be3" class="outline-3">
<h3 id="org64a8be3"><span class="section-number-3">3.1</span> Initialization</h3>
<div class="outline-text-3" id="text-3-1">
<p>
We initialize all the stages with the default parameters.
@ -842,7 +843,7 @@ And finally, in Figures <a href="#orge05feb5">21</a> and <a href="#org17c5c95">2
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-04-07 mar. 14:55</p>
<p class="date">Created: 2020-04-08 mer. 12:12</p>
</div>
</body>
</html>

Binary file not shown.

Binary file not shown.

View File

@ -794,7 +794,7 @@ The result is shown in:
#+begin_src matlab :exports none
load('./mat/dist_psd.mat', 'dist_f');
load('./mat/opt_stiffness_disturbances.mat', 'Gd')
load('./mat/opt_stiffness_disturbances.mat', 'Ks', 'Gd')
#+end_src
#+begin_src matlab :exports none
@ -849,6 +849,7 @@ The result is shown in:
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
freqs = dist_f.f;
psd_tot = zeros(length(freqs), length(Ks));
for i = 1:length(Ks)
@ -969,6 +970,11 @@ The black dashed line corresponds to the performance objective of a sample vibra
#+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]]
** Save :noexport:
#+begin_src matlab :exports none
save('./mat/opt_stiff_ol_psd_tot.mat', 'psd_tot');
#+end_src
** 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.
@ -977,6 +983,8 @@ The black dashed line corresponds to the performance objective of a sample vibra
* Closed Loop Budget Error
<<sec:closed_loop_budget_error>>
** Introduction :ignore:
From the total open-loop power spectral density of the sample's motion error, we can estimate what is the required control bandwidth for the sample's motion error to be reduced down to $10nm$.
** 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>>
@ -1021,9 +1029,10 @@ The reduction of the impact of $d$ on $y$ thanks to feedback is described by the
\begin{equation}
\frac{y}{d} = \frac{G_d}{1 + KG}
\end{equation}
The transfer functions corresponding to $G_d$ are those identified in Section [[sec:effect_disturbances]].
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:
As a first approximation, we can consider that the controller $K$ 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.
@ -1031,17 +1040,29 @@ 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}} \]
In the next section, we see how the power spectral density of $y$ is reduced as a function of the control bandwidth $\omega_c$.
This will help to determine what is the approximate control bandwidth required such that the rms value of $y$ is below $10nm$.
** Reduction thanks to feedback - Required bandwidth
#+begin_src matlab
wc = 1*2*pi; % [rad/s]
xic = 0.5;
S = (s/wc)/(1 + s/wc);
bodeFig({S}, logspace(-1,2,1000))
#+begin_src matlab :exports none
load('./mat/dist_psd.mat', 'dist_f');
load('./mat/opt_stiffness_disturbances.mat', 'Ks', 'Gd')
load('./mat/opt_stiff_ol_psd_tot.mat', 'psd_tot');
#+end_src
#+begin_src matlab
Let's first see how does the Cumulative Amplitude Spectrum of the sample's motion error is modified by the control.
In Figure [[fig:opt_stiff_cas_closed_loop]] is shown the Cumulative Amplitude Spectrum of the sample's motion error in Open-Loop and in Closed Loop for several control bandwidth (from 1Hz to 200Hz) and 4 different nano-hexapod stiffnesses.
The controller used in this simulation is $K_1$. The loop gain is then a pure integrator.
In Figure [[fig:opt_stiff_req_bandwidth_K1_K2]] is shown the expected RMS value of the sample's position error as a function of the control bandwidth, both for $K_1$ (left plot) and $K_2$ (right plot).
As expected, it is shown that $K_2$ performs better than $K_1$.
This Figure tells us how much control bandwidth is required to attain a certain level of performance, and that for all the considered nano-hexapod stiffnesses.
The obtained required bandwidth (approximate upper and lower bounds) to obtained a sample's motion error less than 10nm rms are gathered in Table [[tab:approx_required_wc_10nm]].
#+begin_src matlab :exports none
wc = [1, 5, 10, 20, 50, 100, 200];
S1 = {zeros(length(wc), 1)};
@ -1055,12 +1076,55 @@ We may then consider another controller in such a way that the loop gain corresp
end
#+end_src
#+begin_src matlab
#+begin_src matlab :exports none
freqs = dist_f.f;
figure;
ax1 = subplot(2,2,1);
hold on;
i = 6;
i = 1;
for j = 1:length(wc)
set(gca,'ColorOrderIndex',j);
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(abs(squeeze(freqresp(S1{j}, freqs, 'Hz'))).^2.*psd_tot(:,i))))), '-');
end
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(psd_tot(:,i))))), 'k-');
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
ylabel('CAS $E_y$ $[m]$')
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
ax2 = subplot(2,2,2);
hold on;
i = 3;
for j = 1:length(wc)
set(gca,'ColorOrderIndex',j);
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(abs(squeeze(freqresp(S1{j}, freqs, 'Hz'))).^2.*psd_tot(:,i))))), '-');
end
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(psd_tot(:,i))))), 'k-');
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
ax3 = subplot(2,2,3);
hold on;
i = 5;
for j = 1:length(wc)
set(gca,'ColorOrderIndex',j);
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(abs(squeeze(freqresp(S1{j}, freqs, 'Hz'))).^2.*psd_tot(:,i))))), '-');
end
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(psd_tot(:,i))))), 'k-');
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('CAS $E_y$ $[m]$')
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
ax4 = subplot(2,2,4);
hold on;
i = 7;
for j = 1:length(wc)
set(gca,'ColorOrderIndex',j);
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(abs(squeeze(freqresp(S1{j}, freqs, 'Hz'))).^2.*psd_tot(:,i))))), '-', ...
@ -1071,12 +1135,25 @@ We may then consider another controller in such a way that the loop gain corresp
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');
xlabel('Frequency [Hz]');
legend('Location', 'southwest');
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
linkaxes([ax1,ax2,ax3,ax4], 'xy');
xlim([0.5, 500]); ylim([1e-10 1e-6]);
#+end_src
#+begin_src matlab
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_cas_closed_loop.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_cas_closed_loop
#+caption: Cumulative Amplitude Spectrum of the sample's motion error in Open-Loop and in Closed Loop for several control bandwidth and 4 different nano-hexapod stiffnesses ([[./figs/opt_stiff_cas_closed_loop.png][png]], [[./figs/opt_stiff_cas_closed_loop.pdf][pdf]])
[[file:figs/opt_stiff_cas_closed_loop.png]]
#+begin_src matlab :exports none
freqs = dist_f.f;
wc = logspace(0, 3, 100);
Dz1_rms = zeros(length(Ks), length(wc));
@ -1092,24 +1169,75 @@ We may then consider another controller in such a way that the loop gain corresp
end
#+end_src
#+begin_src matlab
#+begin_src matlab :exports none
freqs = dist_f.f;
figure;
ax1 = subplot(1,2,1);
hold on;
for i = 1:length(Ks)
set(gca,'ColorOrderIndex',i);
plot(wc, Dz1_rms(i, :), '-', ...
'DisplayName', sprintf('$k = %.0g$ [N/m]', Ks(i)))
set(gca,'ColorOrderIndex',i);
plot(wc, Dz2_rms(i, :), '--', ...
'HandleVisibility', 'off')
plot(wc, Dz1_rms(i, :), '-')
end
plot([freqs(1) freqs(end)], [10e-9 10e-9], 'k--');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Control Bandwidth [Hz]'); ylabel('$E_z\ [m, rms]$')
xlabel('Control Bandwidth [Hz]'); ylabel('$E_z\ [m, rms]$ using $K_1(s)$')
xlim([1, 500]);
ax2 = subplot(1,2,2);
hold on;
for i = 1:length(Ks)
plot(wc, Dz2_rms(i, :), '-', ...
'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('Control Bandwidth [Hz]'); ylabel('$E_z\ [m, rms]$ using $K_2(s)$')
legend('Location', 'southwest');
linkaxes([ax1, ax2], 'xy');
xlim([1, 500]);
#+end_src
#+header: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/opt_stiff_req_bandwidth_K1_K2.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+name: fig:opt_stiff_req_bandwidth_K1_K2
#+caption: Expected RMS value of the sample's motion error $E_z$ as a function of the control bandwidth when using $K_1$ and $K_2$ ([[./figs/opt_stiff_req_bandwidth_K1_K2.png][png]], [[./figs/opt_stiff_req_bandwidth_K1_K2.pdf][pdf]])
[[file:figs/opt_stiff_req_bandwidth_K1_K2.png]]
#+begin_src matlab :exports none
wb1 = zeros(length(Ks), 1);
wb2 = zeros(length(Ks), 1);
for i = 1:length(Ks)
[~, i_min] = min(abs(Dz1_rms(i, :) - 10e-9));
wb1(i) = wc(i_min);
[~, i_min] = min(abs(Dz2_rms(i, :) - 10e-9));
wb2(i) = wc(i_min);
end
#+end_src
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
data2orgtable([wb1'; wb2'], {'Required wc with L1 [Hz]', 'Required wc with L2 [Hz]'}, {'Nano-Hexapod stiffness [N/m]', '10^3', '10^4', '10^5', '10^6', '10^7', '10^8', '10^9'}, ' %.0f ');
#+end_src
#+name: tab:approx_required_wc_10nm
#+caption: Approximate required control bandwidth such that the motion error is below $10nm$
#+RESULTS:
| Nano-Hexapod stiffness [N/m] | 10^3 | 10^4 | 10^5 | 10^6 | 10^7 | 10^8 | 10^9 |
|------------------------------+------+------+------+------+------+------+------|
| Required wc with L1 [Hz] | 152 | 305 | 1000 | 870 | 933 | 870 | 870 |
| Required wc with L2 [Hz] | 57 | 66 | 152 | 152 | 248 | 266 | 248 |
* Conclusion
#+begin_important
From Figure [[fig:opt_stiff_req_bandwidth_K1_K2]] and Table [[tab:approx_required_wc_10nm]], we can clearly see three different results depending on the nano-hexapod stiffness:
- For a soft nano-hexapod ($k < 10^4\ [N/m]$), the required bandwidth is $\omega_c \approx 50-100\ Hz$
- For a nano-hexapods with $10^5 < k < 10^6\ [N/m]$), the required bandwidth is $\omega_c \approx 150-300\ Hz$
- For a stiff nano-hexapods ($k > 10^7\ [N/m]$), the required bandwidth is $\omega_c \approx 250-500\ Hz$
#+end_important

View File

@ -177,136 +177,136 @@ We plot the change of dynamics due to the change of the spindle rotation speed (
- Figure [[fig:opt_stiffness_wz_coupling]]: from force in the task space $\mathcal{F}_x$ to sample displacement $\mathcal{X}_y$ (coupling of the centralized positioning plant)
#+begin_src matlab :exports none
figure;
figure;
subplot(2,2,1)
gains = logspace(0, 4, 500);
i = 1;
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
hold on;
j = length(Rz_rpm);
set(gca,'ColorOrderIndex',1);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',1);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
subplot(2,2,1)
gains = logspace(0, 4, 500);
i = 1;
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
hold on;
j = length(Rz_rpm);
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
j = 1
set(gca,'ColorOrderIndex',2);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',2);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',2);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
hold off;
axis square
ylim([0, 20]);
xlim([-18, 2]);
xlabel('Real Part')
ylabel('Imaginary Part')
subplot(2,2,2)
gains = logspace(0, 4, 500);
i = 3;
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
hold on;
j = length(Rz_rpm);
set(gca,'ColorOrderIndex',1);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',1);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
j = 1
set(gca,'ColorOrderIndex',2);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',2);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
j = 1
set(gca,'ColorOrderIndex',2);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
axis square
ylim([0, 120]);
xlim([-120, 5]);
xlabel('Real Part')
ylabel('Imaginary Part')
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',2);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',2);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
hold off;
axis square
ylim([0, 20]);
xlim([-18, 2]);
xlabel('Real Part')
ylabel('Imaginary Part')
subplot(2,2,3)
gains = logspace(0, 4, 500);
i = 5;
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
hold on;
j = length(Rz_rpm);
set(gca,'ColorOrderIndex',1);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',1);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
subplot(2,2,2)
gains = logspace(0, 4, 500);
i = 3;
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
hold on;
j = length(Rz_rpm);
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
j = 1
set(gca,'ColorOrderIndex',2);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',2);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',2);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
hold off;
axis square
ylim([0, 2000]);
xlim([-1800,200]);
xlabel('Real Part')
ylabel('Imaginary Part')
subplot(2,2,4)
gains = logspace(3, 7, 500);
i = 7;
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
hold on;
j = length(Rz_rpm);
set(gca,'ColorOrderIndex',1);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',1);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
j = 1
set(gca,'ColorOrderIndex',2);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',2);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
j = 1
set(gca,'ColorOrderIndex',2);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
hold off;
axis square
ylim([0, 18000]);
xlim([-18000, 100]);
xlabel('Real Part')
ylabel('Imaginary Part')
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',2);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',2);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
axis square
ylim([0, 120]);
xlim([-120, 5]);
xlabel('Real Part')
ylabel('Imaginary Part')
subplot(2,2,3)
gains = logspace(0, 4, 500);
i = 5;
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
hold on;
j = length(Rz_rpm);
set(gca,'ColorOrderIndex',1);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',1);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
j = 1
set(gca,'ColorOrderIndex',2);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',2);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',2);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
hold off;
axis square
ylim([0, 2000]);
xlim([-1800,200]);
xlabel('Real Part')
ylabel('Imaginary Part')
subplot(2,2,4)
gains = logspace(3, 7, 500);
i = 7;
title(sprintf('$k = %.0g$ [N/m]', Ks(i)))
hold on;
j = length(Rz_rpm);
set(gca,'ColorOrderIndex',1);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',1);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',1);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
j = 1
set(gca,'ColorOrderIndex',2);
plot(real(pole(Gk_wz_iff{i,j})), imag(pole(Gk_wz_iff{i,j})), 'x');
set(gca,'ColorOrderIndex',2);
plot(real(tzero(Gk_wz_iff{i,j})), imag(tzero(Gk_wz_iff{i,j})), 'o');
for k = 1:length(gains)
set(gca,'ColorOrderIndex',2);
cl_poles = pole(feedback(Gk_wz_iff{i,j}, -(gains(k)/s)*eye(6)));
plot(real(cl_poles), imag(cl_poles), '.');
end
hold off;
axis square
ylim([0, 18000]);
xlim([-18000, 100]);
xlabel('Real Part')
ylabel('Imaginary Part')
#+end_src
#+header: :tangle no :exports results :results none :noweb yes