Add HAC-IFF strategy and analysis

This commit is contained in:
2021-11-30 15:17:23 +01:00
parent 23125d2abc
commit c56ce7e3c8
22 changed files with 3129 additions and 221 deletions

View File

@@ -3,9 +3,9 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2021-11-30 mar. 11:44 -->
<!-- 2021-11-30 mar. 15:17 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>DCM - Dynamical Multi-Body Model</title>
<title>ESRF Double Crystal Monochromator - Dynamical Multi-Body Model</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"/>
@@ -34,46 +34,51 @@
|
<a accesskey="H" href="../index.html"> HOME </a>
</div><div id="content" class="content">
<h1 class="title">DCM - Dynamical Multi-Body Model</h1>
<h1 class="title">ESRF Double Crystal Monochromator - Dynamical Multi-Body Model</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="#orgcb7822a">1. System Kinematics</a>
<li><a href="#org3fb7374">1. System Kinematics</a>
<ul>
<li><a href="#orgc4b429c">1.1. Bragg Angle</a></li>
<li><a href="#orga30e667">1.2. Kinematics (111 Crystal)</a>
<li><a href="#org1ef1423">1.1. Bragg Angle</a></li>
<li><a href="#orgcd8fbe6">1.2. Kinematics (111 Crystal)</a>
<ul>
<li><a href="#org390c6c1">1.2.1. Interferometers - 111 Crystal</a></li>
<li><a href="#org4c00d94">1.2.2. Piezo - 111 Crystal</a></li>
<li><a href="#org542b06e">1.2.1. Interferometers - 111 Crystal</a></li>
<li><a href="#org52f68f7">1.2.2. Piezo - 111 Crystal</a></li>
</ul>
</li>
<li><a href="#org82434d5">1.3. Save Kinematics</a></li>
<li><a href="#org616bb45">1.3. Save Kinematics</a></li>
</ul>
</li>
<li><a href="#orgd95f56d">2. Open Loop System Identification</a>
<li><a href="#org0000e6d">2. Open Loop System Identification</a>
<ul>
<li><a href="#org49ca34a">2.1. Identification</a></li>
<li><a href="#org170173c">2.2. Plant in the frame of the fastjacks</a></li>
<li><a href="#orge372095">2.3. Plant in the frame of the crystal</a></li>
<li><a href="#org16c8552">2.1. Identification</a></li>
<li><a href="#orgc2236c5">2.2. Plant in the frame of the fastjacks</a></li>
<li><a href="#orgb0e1668">2.3. Plant in the frame of the crystal</a></li>
</ul>
</li>
<li><a href="#org00855cb">3. Active Damping Plant (Strain gauges)</a>
<li><a href="#org4bda37c">3. Active Damping Plant (Strain gauges)</a>
<ul>
<li><a href="#org6886aa9">3.1. Identification</a></li>
<li><a href="#orgd1754c8">3.2. Relative Active Damping</a></li>
<li><a href="#orgf6e5d1c">3.3. Damped Plant</a></li>
<li><a href="#orga8033f0">3.1. Identification</a></li>
<li><a href="#org78fe7a9">3.2. Relative Active Damping</a></li>
<li><a href="#org760bce8">3.3. Damped Plant</a></li>
</ul>
</li>
<li><a href="#org3953e07">4. Active Damping Plant (Force Sensors)</a>
<li><a href="#org09dff16">4. Active Damping Plant (Force Sensors)</a>
<ul>
<li><a href="#org243bdc3">4.1. Identification</a></li>
<li><a href="#orga2bc3f0">4.2. Controller - Root Locus</a></li>
<li><a href="#org63d6a74">4.3. Damped Plant</a></li>
<li><a href="#org8c22e6e">4.4. Save</a></li>
<li><a href="#orgeb8c92e">4.1. Identification</a></li>
<li><a href="#orgae5e7fb">4.2. Controller - Root Locus</a></li>
<li><a href="#orgde5a8cd">4.3. Damped Plant</a></li>
</ul>
</li>
<li><a href="#org27e3538">5. HAC-LAC (IFF) architecture</a>
<ul>
<li><a href="#org72519d4">5.1. System Identification</a></li>
<li><a href="#org6919788">5.2. High Authority Controller</a></li>
<li><a href="#orgc5ddfb6">5.3. Performances</a></li>
</ul>
</li>
<li><a href="#org053c75c">5. HAC-LAC (IFF) architecture</a></li>
</ul>
</div>
</div>
@@ -89,22 +94,23 @@ In this document, a Simscape (.e.g. multi-body) model of the ESRF Double Crystal
It is structured as follow:
</p>
<ul class="org-ul">
<li>Section <a href="#org0fd3e9f">1</a>: the kinematics of the DCM is presented, and Jacobian matrices which are used to solve the inverse and forward kinematics are computed.</li>
<li>Section <a href="#orgd4eb6dd">2</a>: the system dynamics is identified in the absence of control.</li>
<li>Section <a href="#orgdb80cfb">3</a>: it is studied whether if the strain gauges fixed to the piezoelectric actuators can be used to actively damp the plant.</li>
<li>Section <a href="#org8e736b1">4</a>: piezoelectric force sensors are added in series with the piezoelectric actuators and are used to actively damp the plant using the Integral Force Feedback (IFF) control strategy.</li>
<li>Section <a href="#orga68bafc">5</a>: the High Authority Control - Low Authority Control (HAC-LAC) strategy is tested on the Simscape model.</li>
<li>Section <a href="#org14dc352">1</a>: the kinematics of the DCM is presented, and Jacobian matrices which are used to solve the inverse and forward kinematics are computed.</li>
<li>Section <a href="#orgc1f64db">2</a>: the system dynamics is identified in the absence of control.</li>
<li>Section <a href="#org80ca2a0">3</a>: it is studied whether if the strain gauges fixed to the piezoelectric actuators can be used to actively damp the plant.</li>
<li>Section <a href="#orgb029a8b">4</a>: piezoelectric force sensors are added in series with the piezoelectric actuators and are used to actively damp the plant using the Integral Force Feedback (IFF) control strategy.</li>
<li>Section <a href="#orgee34a4d">5</a>: the High Authority Control - Low Authority Control (HAC-LAC) strategy is tested on the Simscape model.</li>
</ul>
<div id="outline-container-orgcb7822a" class="outline-2">
<h2 id="orgcb7822a"><span class="section-number-2">1.</span> System Kinematics</h2>
<div id="outline-container-org3fb7374" class="outline-2">
<h2 id="org3fb7374"><span class="section-number-2">1.</span> System Kinematics</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org0fd3e9f"></a>
<a id="org14dc352"></a>
</p>
</div>
<div id="outline-container-orgc4b429c" class="outline-3">
<h3 id="orgc4b429c"><span class="section-number-3">1.1.</span> Bragg Angle</h3>
<div id="outline-container-org1ef1423" class="outline-3">
<h3 id="org1ef1423"><span class="section-number-3">1.1.</span> Bragg Angle</h3>
<div class="outline-text-3" id="text-1-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Tested bragg angles</span>
@@ -120,7 +126,7 @@ dz = d_off<span class="org-builtin">./</span>(2<span class="org-builtin">*</span
</div>
<div id="org122820c" class="figure">
<div id="org6064b2d" class="figure">
<p><img src="figs/jack_motion_bragg_angle.png" alt="jack_motion_bragg_angle.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Jack motion as a function of Bragg angle</p>
@@ -138,34 +144,34 @@ dz = d_off<span class="org-builtin">./</span>(2<span class="org-builtin">*</span
</div>
</div>
<div id="outline-container-orga30e667" class="outline-3">
<h3 id="orga30e667"><span class="section-number-3">1.2.</span> Kinematics (111 Crystal)</h3>
<div id="outline-container-orgcd8fbe6" class="outline-3">
<h3 id="orgcd8fbe6"><span class="section-number-3">1.2.</span> Kinematics (111 Crystal)</h3>
<div class="outline-text-3" id="text-1-2">
<p>
The reference frame is taken at the center of the 111 second crystal.
</p>
</div>
<div id="outline-container-org390c6c1" class="outline-4">
<h4 id="org390c6c1"><span class="section-number-4">1.2.1.</span> Interferometers - 111 Crystal</h4>
<div id="outline-container-org542b06e" class="outline-4">
<h4 id="org542b06e"><span class="section-number-4">1.2.1.</span> Interferometers - 111 Crystal</h4>
<div class="outline-text-4" id="text-1-2-1">
<p>
Three interferometers are pointed to the bottom surface of the 111 crystal.
</p>
<p>
The position of the measurement points are shown in Figure <a href="#org7147d17">2</a> as well as the origin where the motion of the crystal is computed.
The position of the measurement points are shown in Figure <a href="#org8f69a58">2</a> as well as the origin where the motion of the crystal is computed.
</p>
<div id="org7147d17" class="figure">
<div id="org8f69a58" class="figure">
<p><img src="figs/sensor_111_crystal_points.png" alt="sensor_111_crystal_points.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Bottom view of the second crystal 111. Position of the measurement points.</p>
</div>
<p>
The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure <a href="#org8e47ad4">3</a>):
The inverse kinematics consisting of deriving the interferometer measurements from the motion of the crystal (see Figure <a href="#org6470cc1">3</a>):
</p>
\begin{equation}
\begin{bmatrix}
@@ -179,7 +185,7 @@ d_z \\ r_y \\ r_x
\end{equation}
<div id="org8e47ad4" class="figure">
<div id="org6470cc1" class="figure">
<p><img src="figs/schematic_sensor_jacobian_inverse_kinematics.png" alt="schematic_sensor_jacobian_inverse_kinematics.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Inverse Kinematics - Interferometers</p>
@@ -187,7 +193,7 @@ d_z \\ r_y \\ r_x
<p>
From the Figure <a href="#org7147d17">2</a>, the inverse kinematics can be solved as follow (for small motion):
From the Figure <a href="#org8f69a58">2</a>, the inverse kinematics can be solved as follow (for small motion):
</p>
\begin{equation}
\bm{J}_{s,111}
@@ -207,7 +213,7 @@ J_s_111 = [1, 0.07, <span class="org-builtin">-</span>0.015
</pre>
</div>
<table id="org8c13b9a" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org9ac8ea9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Sensor Jacobian \(\bm{J}_{s,111}\)</caption>
<colgroup>
@@ -239,7 +245,7 @@ J_s_111 = [1, 0.07, <span class="org-builtin">-</span>0.015
</table>
<p>
The forward kinematics is solved by inverting the Jacobian matrix (see Figure <a href="#org700c4d4">4</a>).
The forward kinematics is solved by inverting the Jacobian matrix (see Figure <a href="#orgacd4853">4</a>).
</p>
\begin{equation}
\begin{bmatrix}
@@ -253,13 +259,13 @@ x_1 \\ x_2 \\ x_3
\end{equation}
<div id="org700c4d4" class="figure">
<div id="orgacd4853" class="figure">
<p><img src="figs/schematic_sensor_jacobian_forward_kinematics.png" alt="schematic_sensor_jacobian_forward_kinematics.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Forward Kinematics - Interferometers</p>
</div>
<table id="org65d7338" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org1305abc" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Inverse of the sensor Jacobian \(\bm{J}_{s,111}^{-1}\)</caption>
<colgroup>
@@ -292,15 +298,15 @@ x_1 \\ x_2 \\ x_3
</div>
</div>
<div id="outline-container-org4c00d94" class="outline-4">
<h4 id="org4c00d94"><span class="section-number-4">1.2.2.</span> Piezo - 111 Crystal</h4>
<div id="outline-container-org52f68f7" class="outline-4">
<h4 id="org52f68f7"><span class="section-number-4">1.2.2.</span> Piezo - 111 Crystal</h4>
<div class="outline-text-4" id="text-1-2-2">
<p>
The location of the actuators with respect with the center of the 111 second crystal are shown in Figure <a href="#orgd329873">5</a>.
The location of the actuators with respect with the center of the 111 second crystal are shown in Figure <a href="#org6ddaa8b">5</a>.
</p>
<div id="orgd329873" class="figure">
<div id="org6ddaa8b" class="figure">
<p><img src="figs/actuator_jacobian_111_points.png" alt="actuator_jacobian_111_points.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Location of actuators with respect to the center of the 111 second crystal (bottom view)</p>
@@ -321,14 +327,14 @@ d_z \\ r_y \\ r_x
\end{equation}
<div id="orga74633d" class="figure">
<div id="orgd947fd1" class="figure">
<p><img src="figs/schematic_actuator_jacobian_inverse_kinematics.png" alt="schematic_actuator_jacobian_inverse_kinematics.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Inverse Kinematics - Actuators</p>
</div>
<p>
Based on the geometry in Figure <a href="#orgd329873">5</a>, we obtain:
Based on the geometry in Figure <a href="#org6ddaa8b">5</a>, we obtain:
</p>
\begin{equation}
\bm{J}_{a,111}
@@ -348,7 +354,7 @@ J_a_111 = [1, 0.14, <span class="org-builtin">-</span>0.1525
</pre>
</div>
<table id="org363311b" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="org96d1229" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 3:</span> Actuator Jacobian \(\bm{J}_{a,111}\)</caption>
<colgroup>
@@ -394,13 +400,13 @@ d_{u_r} \\ d_{u_h} \\ d_{d}
\end{equation}
<div id="orgeeec18d" class="figure">
<div id="orgbdeca35" class="figure">
<p><img src="figs/schematic_actuator_jacobian_forward_kinematics.png" alt="schematic_actuator_jacobian_forward_kinematics.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Forward Kinematics - Actuators for 111 crystal</p>
</div>
<table id="org19c3313" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="orgb28ebac" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 4:</span> Inverse of the actuator Jacobian \(\bm{J}_{a,111}^{-1}\)</caption>
<colgroup>
@@ -434,8 +440,8 @@ d_{u_r} \\ d_{u_h} \\ d_{d}
</div>
</div>
<div id="outline-container-org82434d5" class="outline-3">
<h3 id="org82434d5"><span class="section-number-3">1.3.</span> Save Kinematics</h3>
<div id="outline-container-org616bb45" class="outline-3">
<h3 id="org616bb45"><span class="section-number-3">1.3.</span> Save Kinematics</h3>
<div class="outline-text-3" id="text-1-3">
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'mat/dcm_kinematics.mat'</span>, <span class="org-string">'J_a_111'</span>, <span class="org-string">'J_s_111'</span>)
@@ -445,15 +451,15 @@ d_{u_r} \\ d_{u_h} \\ d_{d}
</div>
</div>
<div id="outline-container-orgd95f56d" class="outline-2">
<h2 id="orgd95f56d"><span class="section-number-2">2.</span> Open Loop System Identification</h2>
<div id="outline-container-org0000e6d" class="outline-2">
<h2 id="org0000e6d"><span class="section-number-2">2.</span> Open Loop System Identification</h2>
<div class="outline-text-2" id="text-2">
<p>
<a id="orgd4eb6dd"></a>
<a id="orgc1f64db"></a>
</p>
</div>
<div id="outline-container-org49ca34a" class="outline-3">
<h3 id="org49ca34a"><span class="section-number-3">2.1.</span> Identification</h3>
<div id="outline-container-org16c8552" class="outline-3">
<h3 id="org16c8552"><span class="section-number-3">2.1.</span> Identification</h3>
<div class="outline-text-3" id="text-2-1">
<p>
Let&rsquo;s considered the system \(\bm{G}(s)\) with:
@@ -464,11 +470,11 @@ Let&rsquo;s considered the system \(\bm{G}(s)\) with:
</ul>
<p>
It is schematically shown in Figure <a href="#org52a4b7c">8</a>.
It is schematically shown in Figure <a href="#orga1c2462">8</a>.
</p>
<div id="org52a4b7c" class="figure">
<div id="orga1c2462" class="figure">
<p><img src="figs/schematic_system_inputs_outputs.png" alt="schematic_system_inputs_outputs.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Dynamical system with inputs and outputs</p>
@@ -510,20 +516,20 @@ State-space model with 3 outputs, 3 inputs, and 24 states.
</div>
</div>
<div id="outline-container-org170173c" class="outline-3">
<h3 id="org170173c"><span class="section-number-3">2.2.</span> Plant in the frame of the fastjacks</h3>
<div id="outline-container-orgc2236c5" class="outline-3">
<h3 id="orgc2236c5"><span class="section-number-3">2.2.</span> Plant in the frame of the fastjacks</h3>
<div class="outline-text-3" id="text-2-2">
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'mat/dcm_kinematics.mat'</span>);
<pre class="src src-matlab">load(<span class="org-string">'dcm_kinematics.mat'</span>);
</pre>
</div>
<p>
Using the forward and inverse kinematics, we can computed the dynamics from piezo forces to axial motion of the 3 fastjacks (see Figure <a href="#orgf9b4903">9</a>).
Using the forward and inverse kinematics, we can computed the dynamics from piezo forces to axial motion of the 3 fastjacks (see Figure <a href="#org015dc10">9</a>).
</p>
<div id="orgf9b4903" class="figure">
<div id="org015dc10" class="figure">
<p><img src="figs/schematic_jacobian_frame_fastjack.png" alt="schematic_jacobian_frame_fastjack.png" />
</p>
<p><span class="figure-number">Figure 9: </span>Use of Jacobian matrices to obtain the system in the frame of the fastjacks</p>
@@ -544,7 +550,7 @@ The DC gain of the new system shows that the system is well decoupled at low fre
</pre>
</div>
<table id="org19e4a7e" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<table id="orgb47db5c" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 5:</span> DC gain of the plant in the frame of the fast jacks \(\bm{G}_{\text{fj}}\)</caption>
<colgroup>
@@ -576,17 +582,17 @@ The DC gain of the new system shows that the system is well decoupled at low fre
</table>
<p>
The bode plot of \(\bm{G}_{\text{fj}}(s)\) is shown in Figure <a href="#org6777e66">10</a>.
The bode plot of \(\bm{G}_{\text{fj}}(s)\) is shown in Figure <a href="#org3a99582">10</a>.
</p>
<div id="org6777e66" class="figure">
<div id="org3a99582" class="figure">
<p><img src="figs/bode_plot_plant_fj.png" alt="bode_plot_plant_fj.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Bode plot of the diagonal and off-diagonal elements of the plant in the frame of the fast jacks</p>
</div>
<div class="important" id="orgcdf2cc1">
<div class="important" id="orge3e331d">
<p>
Computing the system in the frame of the fastjack gives good decoupling at low frequency (until the first resonance of the system).
</p>
@@ -595,11 +601,11 @@ Computing the system in the frame of the fastjack gives good decoupling at low f
</div>
</div>
<div id="outline-container-orge372095" class="outline-3">
<h3 id="orge372095"><span class="section-number-3">2.3.</span> Plant in the frame of the crystal</h3>
<div id="outline-container-orgb0e1668" class="outline-3">
<h3 id="orgb0e1668"><span class="section-number-3">2.3.</span> Plant in the frame of the crystal</h3>
<div class="outline-text-3" id="text-2-3">
<div id="org4377a93" class="figure">
<div id="orge8c1108" class="figure">
<p><img src="figs/schematic_jacobian_frame_crystal.png" alt="schematic_jacobian_frame_crystal.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Use of Jacobian matrices to obtain the system in the frame of the crystal</p>
@@ -654,18 +660,18 @@ The main reason is that, as we map forces to the center of the 111 crystal and n
</div>
</div>
<div id="outline-container-org00855cb" class="outline-2">
<h2 id="org00855cb"><span class="section-number-2">3.</span> Active Damping Plant (Strain gauges)</h2>
<div id="outline-container-org4bda37c" class="outline-2">
<h2 id="org4bda37c"><span class="section-number-2">3.</span> Active Damping Plant (Strain gauges)</h2>
<div class="outline-text-2" id="text-3">
<p>
<a id="orgdb80cfb"></a>
<a id="org80ca2a0"></a>
</p>
<p>
In this section, we wish to see whether if strain gauges fixed to the piezoelectric actuator can be used for active damping.
</p>
</div>
<div id="outline-container-org6886aa9" class="outline-3">
<h3 id="org6886aa9"><span class="section-number-3">3.1.</span> Identification</h3>
<div id="outline-container-orga8033f0" class="outline-3">
<h3 id="orga8033f0"><span class="section-number-3">3.1.</span> Identification</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Input/Output definition</span>
@@ -724,15 +730,15 @@ G_sg = linearize(mdl, io);
</table>
<div id="org72b48ee" class="figure">
<div id="org8f04d26" class="figure">
<p><img src="figs/strain_gauge_plant_bode_plot.png" alt="strain_gauge_plant_bode_plot.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Bode Plot of the transfer functions from piezoelectric forces to strain gauges measuremed displacements</p>
</div>
<div class="important" id="org070666c">
<div class="important" id="orgd585bf5">
<p>
As the distance between the poles and zeros in Figure <a href="#org16f0105">15</a> is very small, little damping can be actively added using the strain gauges.
As the distance between the poles and zeros in Figure <a href="#org11a1e17">15</a> is very small, little damping can be actively added using the strain gauges.
This will be confirmed using a Root Locus plot.
</p>
@@ -740,8 +746,8 @@ This will be confirmed using a Root Locus plot.
</div>
</div>
<div id="outline-container-orgd1754c8" class="outline-3">
<h3 id="orgd1754c8"><span class="section-number-3">3.2.</span> Relative Active Damping</h3>
<div id="outline-container-org78fe7a9" class="outline-3">
<h3 id="org78fe7a9"><span class="section-number-3">3.2.</span> Relative Active Damping</h3>
<div class="outline-text-3" id="text-3-2">
<div class="org-src-container">
<pre class="src src-matlab">Krad_g1 = eye(3)<span class="org-builtin">*</span>s<span class="org-builtin">/</span>(s<span class="org-builtin">^</span>2<span class="org-builtin">/</span>(2<span class="org-builtin">*</span><span class="org-matlab-math">pi</span><span class="org-builtin">*</span>500)<span class="org-builtin">^</span>2 <span class="org-builtin">+</span> 2<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>500) <span class="org-builtin">+</span> 1);
@@ -749,11 +755,11 @@ This will be confirmed using a Root Locus plot.
</div>
<p>
As can be seen in Figure <a href="#org16a4fc0">13</a>, very little damping can be added using relative damping strategy using strain gauges.
As can be seen in Figure <a href="#orgec235bb">13</a>, very little damping can be added using relative damping strategy using strain gauges.
</p>
<div id="org16a4fc0" class="figure">
<div id="orgec235bb" class="figure">
<p><img src="figs/relative_damping_root_locus.png" alt="relative_damping_root_locus.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Root Locus for the relative damping control</p>
@@ -766,8 +772,8 @@ As can be seen in Figure <a href="#org16a4fc0">13</a>, very little damping can b
</div>
</div>
<div id="outline-container-orgf6e5d1c" class="outline-3">
<h3 id="orgf6e5d1c"><span class="section-number-3">3.3.</span> Damped Plant</h3>
<div id="outline-container-org760bce8" class="outline-3">
<h3 id="org760bce8"><span class="section-number-3">3.3.</span> Damped Plant</h3>
<div class="outline-text-3" id="text-3-3">
<p>
The controller is implemented on Simscape, and the damped plant is identified.
@@ -789,7 +795,7 @@ io(io_i) = linio([mdl, <span class="org-string">'/DCM'</span>], 1, <span class="
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% DCM Kinematics</span>
load(<span class="org-string">'mat/dcm_kinematics.mat'</span>);
load(<span class="org-string">'dcm_kinematics.mat'</span>);
</pre>
</div>
@@ -812,7 +818,7 @@ G_dp.OutputName = {<span class="org-string">'d_ur'</span>, <span class="org-str
</div>
<div id="org908c24c" class="figure">
<div id="orgca0b154" class="figure">
<p><img src="figs/comp_damp_undamped_plant_rad_bode_plot.png" alt="comp_damp_undamped_plant_rad_bode_plot.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Bode plot of both the open-loop plant and the damped plant using relative active damping</p>
@@ -821,11 +827,11 @@ G_dp.OutputName = {<span class="org-string">'d_ur'</span>, <span class="org-str
</div>
</div>
<div id="outline-container-org3953e07" class="outline-2">
<h2 id="org3953e07"><span class="section-number-2">4.</span> Active Damping Plant (Force Sensors)</h2>
<div id="outline-container-org09dff16" class="outline-2">
<h2 id="org09dff16"><span class="section-number-2">4.</span> Active Damping Plant (Force Sensors)</h2>
<div class="outline-text-2" id="text-4">
<p>
<a id="org8e736b1"></a>
<a id="orgb029a8b"></a>
</p>
<p>
Force sensors are added above the piezoelectric actuators.
@@ -833,8 +839,8 @@ They can consists of a simple piezoelectric ceramic stack.
See for instance <a href="fleming10_integ_strain_force_feedb_high">fleming10_integ_strain_force_feedb_high</a>.
</p>
</div>
<div id="outline-container-org243bdc3" class="outline-3">
<h3 id="org243bdc3"><span class="section-number-3">4.1.</span> Identification</h3>
<div id="outline-container-orgeb8c92e" class="outline-3">
<h3 id="orgeb8c92e"><span class="section-number-3">4.1.</span> Identification</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Input/Output definition</span>
@@ -856,44 +862,13 @@ G_fs = linearize(mdl, io);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">dcgain(G_fs)
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<p>
The Bode plot of the identified dynamics is shown in Figure <a href="#org11a1e17">15</a>.
At high frequency, the diagonal terms are constants while the off-diagonal terms have some roll-off.
</p>
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<tbody>
<tr>
<td class="org-right">-1.4113e-13</td>
<td class="org-right">1.0339e-13</td>
<td class="org-right">3.774e-14</td>
</tr>
<tr>
<td class="org-right">1.0339e-13</td>
<td class="org-right">-1.4113e-13</td>
<td class="org-right">3.774e-14</td>
</tr>
<tr>
<td class="org-right">3.7792e-14</td>
<td class="org-right">3.7792e-14</td>
<td class="org-right">-7.5585e-14</td>
</tr>
</tbody>
</table>
<div id="org16f0105" class="figure">
<div id="org11a1e17" class="figure">
<p><img src="figs/iff_plant_bode_plot.png" alt="iff_plant_bode_plot.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Bode plot of IFF Plant</p>
@@ -901,109 +876,213 @@ G_fs = linearize(mdl, io);
</div>
</div>
<div id="outline-container-orga2bc3f0" class="outline-3">
<h3 id="orga2bc3f0"><span class="section-number-3">4.2.</span> Controller - Root Locus</h3>
<div id="outline-container-orgae5e7fb" class="outline-3">
<h3 id="orgae5e7fb"><span class="section-number-3">4.2.</span> Controller - Root Locus</h3>
<div class="outline-text-3" id="text-4-2">
<p>
We want to have integral action around the resonances of the system, but we do not want to integrate at low frequency.
Therefore, we can use a low pass filter.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kiff_g1 = eye(3)<span class="org-builtin">*</span>1<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>20);
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Integral Force Feedback Controller</span>
Kiff_g1 = eye(3)<span class="org-builtin">*</span>1<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>20);
</pre>
</div>
<div id="org4041645" class="figure">
<div id="org5b2bab0" class="figure">
<p><img src="figs/iff_root_locus.png" alt="iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 16: </span>Root Locus plot for the IFF Control strategy</p>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Integral Force Feedback Controller</span>
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Integral Force Feedback Controller with optimal gain</span>
Kiff = g<span class="org-builtin">*</span>Kiff_g1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Save the IFF controller</span>
save(<span class="org-string">'mat/Kiff.mat'</span>, <span class="org-string">'Kiff'</span>);
</pre>
</div>
</div>
</div>
<div id="outline-container-org63d6a74" class="outline-3">
<h3 id="org63d6a74"><span class="section-number-3">4.3.</span> Damped Plant</h3>
<div id="outline-container-orgde5a8cd" class="outline-3">
<h3 id="orgde5a8cd"><span class="section-number-3">4.3.</span> Damped Plant</h3>
<div class="outline-text-3" id="text-4-3">
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Input/Output definition</span>
clear io; io_i = 1;
<p>
Both the Open Loop dynamics (see Figure <a href="#org015dc10">9</a>) and the dynamics with IFF (see Figure <a href="#org7a880a7">17</a>) are identified.
</p>
<span class="org-matlab-cellbreak">%% Inputs</span>
<span class="org-comment-delimiter">% </span><span class="org-comment">Control Input {3x1} [N]</span>
io(io_i) = linio([mdl, <span class="org-string">'/control_system'</span>], 1, <span class="org-string">'input'</span>); io_i = io_i <span class="org-builtin">+</span> 1;
<p>
We are here interested in the dynamics from \(\bm{u}^\prime = [u_{u_r}^\prime,\ u_{u_h}^\prime,\ u_d^\prime]\) (input of the damped plant) to \(\bm{d}_{\text{fj}} = [d_{u_r},\ d_{u_h},\ d_d]\) (motion of the crystal expressed in the frame of the fast-jacks).
This is schematically represented in Figure <a href="#org7a880a7">17</a>.
</p>
<span class="org-matlab-cellbreak">%% Outputs</span>
<span class="org-comment-delimiter">% </span><span class="org-comment">Force Sensor {3x1} [m]</span>
io(io_i) = linio([mdl, <span class="org-string">'/DCM'</span>], 1, <span class="org-string">'openoutput'</span>); io_i = io_i <span class="org-builtin">+</span> 1;
</pre>
<div id="org7a880a7" class="figure">
<p><img src="figs/schematic_jacobian_frame_fastjack_iff.png" alt="schematic_jacobian_frame_fastjack_iff.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Use of Jacobian matrices to obtain the system in the frame of the fastjacks</p>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% DCM Kinematics</span>
load(<span class="org-string">'mat/dcm_kinematics.mat'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Identification of the Open Loop plant</span>
controller.type = 0; <span class="org-comment-delimiter">% </span><span class="org-comment">Open Loop</span>
G_ol = J_a_111<span class="org-builtin">*</span>inv(J_s_111)<span class="org-builtin">*</span>linearize(mdl, io);
G_ol.InputName = {<span class="org-string">'u_ur'</span>, <span class="org-string">'u_uh'</span>, <span class="org-string">'u_d'</span>};
G_ol.OutputName = {<span class="org-string">'d_ur'</span>, <span class="org-string">'d_uh'</span>, <span class="org-string">'d_d'</span>};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Identification of the damped plant with IFF</span>
controller.type = 1; <span class="org-comment-delimiter">% </span><span class="org-comment">IFF</span>
G_dp = J_a_111<span class="org-builtin">*</span>inv(J_s_111)<span class="org-builtin">*</span>linearize(mdl, io);
G_dp.InputName = {<span class="org-string">'u_ur'</span>, <span class="org-string">'u_uh'</span>, <span class="org-string">'u_d'</span>};
G_dp.OutputName = {<span class="org-string">'d_ur'</span>, <span class="org-string">'d_uh'</span>, <span class="org-string">'d_d'</span>};
</pre>
</div>
<p>
The dynamics from \(\bm{u}\) to \(\bm{d}_{\text{fj}}\) (open-loop dynamics) and from \(\bm{u}^\prime\) to \(\bm{d}_{\text{fs}}\) are compared in Figure <a href="#org9f5d048">18</a>.
It is clear that the Integral Force Feedback control strategy is very effective in damping the resonances of the plant.
</p>
<div id="org8455151" class="figure">
<div id="org9f5d048" class="figure">
<p><img src="figs/comp_damped_undamped_plant_iff_bode_plot.png" alt="comp_damped_undamped_plant_iff_bode_plot.png" />
</p>
<p><span class="figure-number">Figure 17: </span>Bode plot of both the open-loop plant and the damped plant using IFF</p>
<p><span class="figure-number">Figure 18: </span>Bode plot of both the open-loop plant and the damped plant using IFF</p>
</div>
<div class="important" id="orgebe4b09">
<div class="important" id="org8586fa6">
<p>
The Integral Force Feedback control strategy is very effective in damping the suspension modes of the DCM.
The Integral Force Feedback control strategy is very effective in damping the modes present in the plant.
</p>
</div>
</div>
</div>
<div id="outline-container-org8c22e6e" class="outline-3">
<h3 id="org8c22e6e"><span class="section-number-3">4.4.</span> Save</h3>
<div class="outline-text-3" id="text-4-4">
<div class="org-src-container">
<pre class="src src-matlab">save(<span class="org-string">'mat/Kiff.mat'</span>, <span class="org-string">'Kiff'</span>);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org053c75c" class="outline-2">
<h2 id="org053c75c"><span class="section-number-2">5.</span> HAC-LAC (IFF) architecture</h2>
<div id="outline-container-org27e3538" class="outline-2">
<h2 id="org27e3538"><span class="section-number-2">5.</span> HAC-LAC (IFF) architecture</h2>
<div class="outline-text-2" id="text-5">
<p>
<a id="orga68bafc"></a>
<a id="orgee34a4d"></a>
</p>
<p>
The HAC-LAC architecture is shown in Figure <a href="#orgb03e1da">19</a>.
</p>
<div id="orgb03e1da" class="figure">
<p><img src="figs/schematic_jacobian_frame_fastjack_hac_iff.png" alt="schematic_jacobian_frame_fastjack_hac_iff.png" />
</p>
<p><span class="figure-number">Figure 19: </span>HAC-LAC architecture</p>
</div>
</div>
<div id="outline-container-org72519d4" class="outline-3">
<h3 id="org72519d4"><span class="section-number-3">5.1.</span> System Identification</h3>
<div class="outline-text-3" id="text-5-1">
<p>
Let&rsquo;s identify the damped plant.
</p>
<div id="org022508f" class="figure">
<p><img src="figs/bode_plot_hac_iff_plant.png" alt="bode_plot_hac_iff_plant.png" />
</p>
<p><span class="figure-number">Figure 20: </span>Bode Plot of the plant for the High Authority Controller (transfer function from \(\bm{u}^\prime\) to \(\bm{\epsilon}_d\))</p>
</div>
</div>
</div>
<div id="outline-container-org6919788" class="outline-3">
<h3 id="org6919788"><span class="section-number-3">5.2.</span> High Authority Controller</h3>
<div class="outline-text-3" id="text-5-2">
<p>
Let&rsquo;s design a controller with a bandwidth of 100Hz.
As the plant is well decoupled and well approximated by a constant at low frequency, the high authority controller can easily be designed with SISO loop shaping.
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Controller design</span>
wc = 2<span class="org-builtin">*</span><span class="org-matlab-math">pi</span><span class="org-builtin">*</span>100; <span class="org-comment-delimiter">% </span><span class="org-comment">Wanted crossover frequency [rad/s]</span>
a = 2; <span class="org-comment-delimiter">% </span><span class="org-comment">Lead parameter</span>
Khac = diag(1<span class="org-builtin">./</span>diag(abs(evalfr(G_dp, 1<span class="org-constant">j</span><span class="org-builtin">*</span>wc)))) <span class="org-builtin">*</span> <span class="org-comment-delimiter">.</span><span class="org-comment">.. % Diagonal controller</span>
wc<span class="org-builtin">/</span>s <span class="org-builtin">*</span> <span class="org-comment-delimiter">.</span><span class="org-comment">.. % Integrator</span>
1<span class="org-builtin">/</span>(sqrt(a))<span class="org-builtin">*</span>(1 <span class="org-builtin">+</span> s<span class="org-builtin">/</span>(wc<span class="org-builtin">/</span>sqrt(a)))<span class="org-builtin">/</span>(1 <span class="org-builtin">+</span> s<span class="org-builtin">/</span>(wc<span class="org-builtin">*</span>sqrt(a))) <span class="org-builtin">*</span> <span class="org-comment-delimiter">.</span><span class="org-comment">.. % Lead</span>
1<span class="org-builtin">/</span>(s<span class="org-builtin">^</span>2<span class="org-builtin">/</span>(4<span class="org-builtin">*</span>wc)<span class="org-builtin">^</span>2 <span class="org-builtin">+</span> 2<span class="org-builtin">*</span>s<span class="org-builtin">/</span>(4<span class="org-builtin">*</span>wc) <span class="org-builtin">+</span> 1); <span class="org-comment-delimiter">% </span><span class="org-comment">Low pass filter</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Save the HAC controller</span>
save(<span class="org-string">'mat/Khac_iff.mat'</span>, <span class="org-string">'Khac'</span>);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Loop Gain</span>
L_hac_lac = G_dp <span class="org-builtin">*</span> Khac;
</pre>
</div>
<div id="org1eefea2" class="figure">
<p><img src="figs/hac_iff_loop_gain_bode_plot.png" alt="hac_iff_loop_gain_bode_plot.png" />
</p>
<p><span class="figure-number">Figure 21: </span>Bode Plot of the Loop gain for the High Authority Controller</p>
</div>
<p>
As shown in the Root Locus plot in Figure <a href="#orgc90ee63">22</a>, the closed loop system should be stable.
</p>
<div id="orgc90ee63" class="figure">
<p><img src="figs/loci_hac_iff_fast_jack.png" alt="loci_hac_iff_fast_jack.png" />
</p>
<p><span class="figure-number">Figure 22: </span>Root Locus for the High Authority Controller</p>
</div>
</div>
</div>
<div id="outline-container-orgc5ddfb6" class="outline-3">
<h3 id="orgc5ddfb6"><span class="section-number-3">5.3.</span> Performances</h3>
<div class="outline-text-3" id="text-5-3">
<p>
In order to estimate the performances of the HAC-IFF control strategy, the transfer function from motion errors of the stepper motors to the motion error of the crystal is identified both in open loop and with the HAC-IFF strategy.
</p>
<p>
It is first verified that the closed-loop system is stable:
</p>
<div class="org-src-container">
<pre class="src src-matlab">isstable(T_hl)
</pre>
</div>
<pre class="example">
1
</pre>
<p>
And both transmissibilities are compared in Figure <a href="#org152d7e8">23</a>.
</p>
<div id="org152d7e8" class="figure">
<p><img src="figs/stepper_transmissibility_comp_ol_hac_iff.png" alt="stepper_transmissibility_comp_ol_hac_iff.png" />
</p>
<p><span class="figure-number">Figure 23: </span>Comparison of the transmissibility of errors from vibrations of the stepper motor between the open-loop case and the hac-iff case.</p>
</div>
<div class="important" id="org755e221">
<p>
The HAC-IFF control strategy can effectively reduce the transmissibility of the motion errors of the stepper motors.
This reduction is effective inside the bandwidth of the controller.
</p>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2021-11-30 mar. 11:44</p>
<p class="date">Created: 2021-11-30 mar. 15:17</p>
</div>
</body>
</html>