Export to pdf
This commit is contained in:
parent
d88db11821
commit
086b1fc1d4
@ -3,7 +3,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>
|
||||
<!-- 2022-02-15 mar. 14:18 -->
|
||||
<!-- 2022-02-20 dim. 23:36 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>ESRF Double Crystal Monochromator - Feedback Controller</title>
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
@ -22,40 +22,40 @@
|
||||
<h2>Table of Contents</h2>
|
||||
<div id="text-table-of-contents" role="doc-toc">
|
||||
<ul>
|
||||
<li><a href="#orga1bae1c">1. Estimation of Sensitivity Function</a>
|
||||
<li><a href="#org8576b4a">1. Estimation of Sensitivity Function</a>
|
||||
<ul>
|
||||
<li><a href="#org735dcc9">1.1. Load Data</a></li>
|
||||
<li><a href="#org3fc079f">1.2. Controller</a></li>
|
||||
<li><a href="#org5af2b76">1.3. Test</a></li>
|
||||
<li><a href="#orgdf402a0">1.1. Load Data</a></li>
|
||||
<li><a href="#org8107511">1.2. Controller</a></li>
|
||||
<li><a href="#org0a01799">1.3. Test</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#orgbb0d924">2. System Identification</a>
|
||||
<li><a href="#org9a5bd10">2. System Identification</a>
|
||||
<ul>
|
||||
<li><a href="#org6c48b35">2.1. Identification</a></li>
|
||||
<li><a href="#org0b292a4">2.2. Identification - New</a></li>
|
||||
<li><a href="#org2e5fa20">2.3. Identification - White noise</a></li>
|
||||
<li><a href="#org71bfb62">2.4. Test</a></li>
|
||||
<li><a href="#orge135bfd">2.5. New controller - Higher bandwidth</a></li>
|
||||
<li><a href="#orgced05bb">2.6. Added gain</a></li>
|
||||
<li><a href="#orgaafe900">2.1. Identification</a></li>
|
||||
<li><a href="#orga4b6967">2.2. Identification - New</a></li>
|
||||
<li><a href="#org3ea3501">2.3. Identification - White noise</a></li>
|
||||
<li><a href="#org2f67dfc">2.4. Test</a></li>
|
||||
<li><a href="#org675289a">2.5. New controller - Higher bandwidth</a></li>
|
||||
<li><a href="#org2f12e07">2.6. Added gain</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org42b6fad">3. Noise Budgeting</a>
|
||||
<li><a href="#orge30c950">3. Noise Budgeting</a>
|
||||
<ul>
|
||||
<li><a href="#orgfab07e0">3.1. No Displacement</a></li>
|
||||
<li><a href="#org2959e07">3.2. Scans</a></li>
|
||||
<li><a href="#orge57ff9f">3.3. Noise budgeting - No rotation</a></li>
|
||||
<li><a href="#org5c8bbce">3.4. Noise budgeting - Bragg rotation</a></li>
|
||||
<li><a href="#org8aeec43">3.1. No Displacement</a></li>
|
||||
<li><a href="#org2e15aa7">3.2. Scans</a></li>
|
||||
<li><a href="#org26d025b">3.3. Noise budgeting - No rotation</a></li>
|
||||
<li><a href="#org8945ee2">3.4. Noise budgeting - Bragg rotation</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org84729e1">4. Test Mode C</a>
|
||||
<li><a href="#orgc0ab5d1">4. Test Mode C</a>
|
||||
<ul>
|
||||
<li><a href="#org8cc30f1">4.1. Mode B and Mode C</a></li>
|
||||
<li><a href="#org9996dc6">4.1. Mode B and Mode C</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#org0d833d1">5. Export numerator and denominator</a>
|
||||
<li><a href="#org1c0791b">5. Export numerator and denominator</a>
|
||||
<ul>
|
||||
<li><a href="#org4532b44">5.1. Export</a></li>
|
||||
<li><a href="#org78d8a99">5.2. Verify</a></li>
|
||||
<li><a href="#org22487de">5.1. Export</a></li>
|
||||
<li><a href="#org2b8461a">5.2. Verify</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@ -65,12 +65,12 @@
|
||||
<p>This report is also available as a <a href="./dcm-feedback-control.pdf">pdf</a>.</p>
|
||||
<hr>
|
||||
|
||||
<div id="outline-container-orga1bae1c" class="outline-2">
|
||||
<h2 id="orga1bae1c"><span class="section-number-2">1.</span> Estimation of Sensitivity Function</h2>
|
||||
<div id="outline-container-org8576b4a" class="outline-2">
|
||||
<h2 id="org8576b4a"><span class="section-number-2">1.</span> Estimation of Sensitivity Function</h2>
|
||||
<div class="outline-text-2" id="text-1">
|
||||
</div>
|
||||
<div id="outline-container-org735dcc9" class="outline-3">
|
||||
<h3 id="org735dcc9"><span class="section-number-3">1.1.</span> Load Data</h3>
|
||||
<div id="outline-container-orgdf402a0" class="outline-3">
|
||||
<h3 id="orgdf402a0"><span class="section-number-3">1.1.</span> Load Data</h3>
|
||||
<div class="outline-text-3" id="text-1-1">
|
||||
<p>
|
||||
Two scans are performed:
|
||||
@ -99,7 +99,7 @@ t = linspace(Ts, Ts<span class="org-builtin">*</span>length(ol_drx), length(ol_d
|
||||
</div>
|
||||
|
||||
<p>
|
||||
By comparison the frequency content of the crystal orientation errors between mode B and mode C, it is possible to estimate the Sensitivity transfer function (Figure <a href="#org5bf52a1">1</a>).
|
||||
By comparison the frequency content of the crystal orientation errors between mode B and mode C, it is possible to estimate the Sensitivity transfer function (Figure <a href="#orgb0c8317">1</a>).
|
||||
</p>
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">win = hanning(ceil(1<span class="org-builtin">/</span>Ts));
|
||||
@ -113,7 +113,7 @@ By comparison the frequency content of the crystal orientation errors between mo
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org5bf52a1" class="figure">
|
||||
<div id="orgb0c8317" class="figure">
|
||||
<p><img src="figs/sensitivity_function_drx_est.png" alt="sensitivity_function_drx_est.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 1: </span>Estimation of the sensitivity transfer function magnitude</p>
|
||||
@ -122,8 +122,8 @@ By comparison the frequency content of the crystal orientation errors between mo
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org3fc079f" class="outline-3">
|
||||
<h3 id="org3fc079f"><span class="section-number-3">1.2.</span> Controller</h3>
|
||||
<div id="outline-container-org8107511" class="outline-3">
|
||||
<h3 id="org8107511"><span class="section-number-3">1.2.</span> Controller</h3>
|
||||
<div class="outline-text-3" id="text-1-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">load(<span class="org-string">'X_tal_cage_PID.mat'</span>, <span class="org-string">'K'</span>);
|
||||
@ -131,7 +131,7 @@ By comparison the frequency content of the crystal orientation errors between mo
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org2e1f293" class="figure">
|
||||
<div id="orgabcb99b" class="figure">
|
||||
<p><img src="figs/bode_plot_cur_controller.png" alt="bode_plot_cur_controller.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 2: </span>Bode Plot of the Controller</p>
|
||||
@ -139,8 +139,8 @@ By comparison the frequency content of the crystal orientation errors between mo
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org5af2b76" class="outline-3">
|
||||
<h3 id="org5af2b76"><span class="section-number-3">1.3.</span> Test</h3>
|
||||
<div id="outline-container-org0a01799" class="outline-3">
|
||||
<h3 id="org0a01799"><span class="section-number-3">1.3.</span> Test</h3>
|
||||
<div class="outline-text-3" id="text-1-3">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">Ts = 5e<span class="org-builtin">-</span>3;
|
||||
@ -170,12 +170,12 @@ t = linspace(Ts, Ts<span class="org-builtin">*</span>length(ol_drx), length(ol_d
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orgbb0d924" class="outline-2">
|
||||
<h2 id="orgbb0d924"><span class="section-number-2">2.</span> System Identification</h2>
|
||||
<div id="outline-container-org9a5bd10" class="outline-2">
|
||||
<h2 id="org9a5bd10"><span class="section-number-2">2.</span> System Identification</h2>
|
||||
<div class="outline-text-2" id="text-2">
|
||||
</div>
|
||||
<div id="outline-container-org6c48b35" class="outline-3">
|
||||
<h3 id="org6c48b35"><span class="section-number-3">2.1.</span> Identification</h3>
|
||||
<div id="outline-container-orgaafe900" class="outline-3">
|
||||
<h3 id="orgaafe900"><span class="section-number-3">2.1.</span> Identification</h3>
|
||||
<div class="outline-text-3" id="text-2-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ur = load(<span class="org-string">'FJPUR_step.mat'</span>);
|
||||
@ -321,7 +321,7 @@ win = hanning(ceil(5<span class="org-builtin">*</span>Fs));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgb5ed826" class="figure">
|
||||
<div id="org9466993" class="figure">
|
||||
<p><img src="figs/coherence_id_dcm_dyn.png" alt="coherence_id_dcm_dyn.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 3: </span>Coherence</p>
|
||||
@ -329,7 +329,7 @@ win = hanning(ceil(5<span class="org-builtin">*</span>Fs));
|
||||
|
||||
|
||||
|
||||
<div id="orgeff963e" class="figure">
|
||||
<div id="org6e09695" class="figure">
|
||||
<p><img src="figs/bode_plot_dcm_dynamics.png" alt="bode_plot_dcm_dynamics.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 4: </span>Bode Plot of the DCM dynamics in the frame of the fast jack.</p>
|
||||
@ -359,7 +359,7 @@ Kb = eye(3)<span class="org-builtin">*</span>(2<span class="org-builtin">*</span
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgb03f205" class="figure">
|
||||
<div id="org4f0fbea" class="figure">
|
||||
<p><img src="figs/loop_gain_dcm_contr_simple.png" alt="loop_gain_dcm_contr_simple.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 5: </span>Loop gain</p>
|
||||
@ -367,7 +367,7 @@ Kb = eye(3)<span class="org-builtin">*</span>(2<span class="org-builtin">*</span
|
||||
|
||||
|
||||
|
||||
<div id="orgc507071" class="figure">
|
||||
<div id="orgf361fc7" class="figure">
|
||||
<p><img src="figs/loop_gain_diag_old_new_contr.png" alt="loop_gain_diag_old_new_contr.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 6: </span>Loop gain</p>
|
||||
@ -377,7 +377,7 @@ Kb = eye(3)<span class="org-builtin">*</span>(2<span class="org-builtin">*</span
|
||||
Compare Sensitivity functions
|
||||
</p>
|
||||
|
||||
<div id="orgd925333" class="figure">
|
||||
<div id="orgb76f72d" class="figure">
|
||||
<p><img src="figs/sensitivity_comp.png" alt="sensitivity_comp.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 7: </span>Comparison of sensitivity functions</p>
|
||||
@ -396,7 +396,7 @@ Lb = zeros(3, 3, length(f));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org18dbc34" class="figure">
|
||||
<div id="orgb0888a7" class="figure">
|
||||
<p><img src="figs/loci_loop_gain_comp_controllers.png" alt="loci_loop_gain_comp_controllers.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 8: </span>Root Locus</p>
|
||||
@ -405,8 +405,8 @@ Lb = zeros(3, 3, length(f));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org0b292a4" class="outline-3">
|
||||
<h3 id="org0b292a4"><span class="section-number-3">2.2.</span> Identification - New</h3>
|
||||
<div id="outline-container-orga4b6967" class="outline-3">
|
||||
<h3 id="orga4b6967"><span class="section-number-3">2.2.</span> Identification - New</h3>
|
||||
<div class="outline-text-3" id="text-2-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ur = load(<span class="org-string">'FJPUR_step_new.mat'</span>);
|
||||
@ -577,7 +577,7 @@ Kb = eye(3)<span class="org-builtin">*</span>(2<span class="org-builtin">*</span
|
||||
Compare Sensitivity functions
|
||||
</p>
|
||||
|
||||
<div id="orga50e1b0" class="figure">
|
||||
<div id="org61be61a" class="figure">
|
||||
<p><img src="figs/sensitivity_comp.png" alt="sensitivity_comp.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 9: </span>Comparison of sensitivity functions</p>
|
||||
@ -596,7 +596,7 @@ Lb = zeros(3, 3, length(f));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org8eb0924" class="figure">
|
||||
<div id="org400e20f" class="figure">
|
||||
<p><img src="figs/loci_loop_gain_comp_controllers.png" alt="loci_loop_gain_comp_controllers.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 10: </span>Root Locus</p>
|
||||
@ -605,8 +605,8 @@ Lb = zeros(3, 3, length(f));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org2e5fa20" class="outline-3">
|
||||
<h3 id="org2e5fa20"><span class="section-number-3">2.3.</span> Identification - White noise</h3>
|
||||
<div id="outline-container-org3ea3501" class="outline-3">
|
||||
<h3 id="org3ea3501"><span class="section-number-3">2.3.</span> Identification - White noise</h3>
|
||||
<div class="outline-text-3" id="text-2-3">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">ur = load(<span class="org-string">'fjpur_white_noise.mat'</span>);
|
||||
@ -725,14 +725,14 @@ win = hanning(ceil(0.5<span class="org-builtin">*</span>Fs));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgd142314" class="figure">
|
||||
<div id="org2130cf9" class="figure">
|
||||
<p><img src="figs/coherence_ident_noise.png" alt="coherence_ident_noise.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 11: </span>description</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgc5ce01c" class="figure">
|
||||
<div id="org6275987" class="figure">
|
||||
<p><img src="figs/bode_plot_ident_noise.png" alt="bode_plot_ident_noise.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 12: </span>Bode Plot of the DCM dynamics in the frame of the fast jack.</p>
|
||||
@ -762,14 +762,14 @@ Kb = eye(3)<span class="org-builtin">*</span>(2<span class="org-builtin">*</span
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org5a9c5a7" class="figure">
|
||||
<div id="orgde5672c" class="figure">
|
||||
<p><img src="figs/loop_gain_dcm_contr_simple.png" alt="loop_gain_dcm_contr_simple.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 13: </span>Loop gain</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org24e16fe" class="figure">
|
||||
<div id="org816756f" class="figure">
|
||||
<p><img src="figs/loop_gain_diag_old_new_contr.png" alt="loop_gain_diag_old_new_contr.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 14: </span>Loop gain</p>
|
||||
@ -779,7 +779,7 @@ Kb = eye(3)<span class="org-builtin">*</span>(2<span class="org-builtin">*</span
|
||||
Compare Sensitivity functions
|
||||
</p>
|
||||
|
||||
<div id="orgffa2ebc" class="figure">
|
||||
<div id="org9c6d15d" class="figure">
|
||||
<p><img src="figs/sensitivity_comp.png" alt="sensitivity_comp.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 15: </span>Comparison of sensitivity functions</p>
|
||||
@ -798,7 +798,7 @@ Lb = zeros(3, 3, length(f));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org7a84791" class="figure">
|
||||
<div id="orgcf68c9d" class="figure">
|
||||
<p><img src="figs/loci_loop_gain_comp_controllers.png" alt="loci_loop_gain_comp_controllers.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 16: </span>Root Locus</p>
|
||||
@ -807,8 +807,8 @@ Lb = zeros(3, 3, length(f));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org71bfb62" class="outline-3">
|
||||
<h3 id="org71bfb62"><span class="section-number-3">2.4.</span> Test</h3>
|
||||
<div id="outline-container-org2f67dfc" class="outline-3">
|
||||
<h3 id="org2f67dfc"><span class="section-number-3">2.4.</span> Test</h3>
|
||||
<div class="outline-text-3" id="text-2-4">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Notch</span>
|
||||
@ -851,8 +851,8 @@ Kb = 0.8<span class="org-builtin">*</span>eye(3)<span class="org-builtin">*</sp
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="outline-container-orge135bfd" class="outline-3">
|
||||
<h3 id="orge135bfd"><span class="section-number-3">2.5.</span> New controller - Higher bandwidth</h3>
|
||||
<div id="outline-container-org675289a" class="outline-3">
|
||||
<h3 id="org675289a"><span class="section-number-3">2.5.</span> New controller - Higher bandwidth</h3>
|
||||
<div class="outline-text-3" id="text-2-5">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Previously used controller</span>
|
||||
@ -916,7 +916,7 @@ Kb = 0.9<span class="org-builtin">*</span>eye(3)<span class="org-builtin">*</sp
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org0c92a80" class="figure">
|
||||
<div id="org729d6bc" class="figure">
|
||||
<p><img src="figs/loop_gain_compare.png" alt="loop_gain_compare.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 17: </span>description</p>
|
||||
@ -937,14 +937,14 @@ Lb_new = zeros(3, 3, length(f));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgeff107d" class="figure">
|
||||
<div id="org9b73c58" class="figure">
|
||||
<p><img src="figs/nyquist_compare.png" alt="nyquist_compare.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 18: </span>n</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orga2251e0" class="figure">
|
||||
<div id="orgd808ef9" class="figure">
|
||||
<p><img src="figs/sensitivity_function_compare.png" alt="sensitivity_function_compare.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 19: </span>description</p>
|
||||
@ -954,8 +954,8 @@ Lb_new = zeros(3, 3, length(f));
|
||||
|
||||
|
||||
|
||||
<div id="outline-container-orgced05bb" class="outline-3">
|
||||
<h3 id="orgced05bb"><span class="section-number-3">2.6.</span> Added gain</h3>
|
||||
<div id="outline-container-org2f12e07" class="outline-3">
|
||||
<h3 id="org2f12e07"><span class="section-number-3">2.6.</span> Added gain</h3>
|
||||
<div class="outline-text-3" id="text-2-6">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab"><span class="org-matlab-cellbreak">%% Notch</span>
|
||||
@ -1017,21 +1017,21 @@ Kb_gain = 0.9<span class="org-builtin">*</span>eye(3)<span class="org-builtin">
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org00ceb71" class="figure">
|
||||
<div id="org97a53c6" class="figure">
|
||||
<p><img src="figs/loop_gain_compare_added_gain.png" alt="loop_gain_compare_added_gain.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 20: </span>description</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org83020b4" class="figure">
|
||||
<div id="org63d3ae0" class="figure">
|
||||
<p><img src="figs/sensitivity_new_gain_compare.png" alt="sensitivity_new_gain_compare.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 21: </span>description</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org003317c" class="figure">
|
||||
<div id="orgded1447" class="figure">
|
||||
<p><img src="figs/nyquist_after_gain_frequency.png" alt="nyquist_after_gain_frequency.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 22: </span>nyquist plot</p>
|
||||
@ -1041,12 +1041,12 @@ Kb_gain = 0.9<span class="org-builtin">*</span>eye(3)<span class="org-builtin">
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org42b6fad" class="outline-2">
|
||||
<h2 id="org42b6fad"><span class="section-number-2">3.</span> Noise Budgeting</h2>
|
||||
<div id="outline-container-orge30c950" class="outline-2">
|
||||
<h2 id="orge30c950"><span class="section-number-2">3.</span> Noise Budgeting</h2>
|
||||
<div class="outline-text-2" id="text-3">
|
||||
</div>
|
||||
<div id="outline-container-orgfab07e0" class="outline-3">
|
||||
<h3 id="orgfab07e0"><span class="section-number-3">3.1.</span> No Displacement</h3>
|
||||
<div id="outline-container-org8aeec43" class="outline-3">
|
||||
<h3 id="org8aeec43"><span class="section-number-3">3.1.</span> No Displacement</h3>
|
||||
<div class="outline-text-3" id="text-3-1">
|
||||
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
|
||||
@ -1275,8 +1275,8 @@ data_70_deg.drx = data_70_deg.allValues(<span class="org-builtin">:</span>,6) <s
|
||||
|
||||
|
||||
|
||||
<div id="outline-container-org2959e07" class="outline-3">
|
||||
<h3 id="org2959e07"><span class="section-number-3">3.2.</span> Scans</h3>
|
||||
<div id="outline-container-org2e15aa7" class="outline-3">
|
||||
<h3 id="org2e15aa7"><span class="section-number-3">3.2.</span> Scans</h3>
|
||||
<div class="outline-text-3" id="text-3-2">
|
||||
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||
|
||||
@ -1437,8 +1437,8 @@ CPS_70_10_d = flip(<span class="org-builtin">-</span>cumtrapz(flip(f), flip(pxx
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-orge57ff9f" class="outline-3">
|
||||
<h3 id="orge57ff9f"><span class="section-number-3">3.3.</span> Noise budgeting - No rotation</h3>
|
||||
<div id="outline-container-org26d025b" class="outline-3">
|
||||
<h3 id="org26d025b"><span class="section-number-3">3.3.</span> Noise budgeting - No rotation</h3>
|
||||
<div class="outline-text-3" id="text-3-3">
|
||||
<p>
|
||||
First, we look at the position errors when the bragg axis is not moving
|
||||
@ -1488,7 +1488,7 @@ win = hanning(ceil(1<span class="org-builtin">/</span>Ts));
|
||||
</div>
|
||||
|
||||
|
||||
<div id="org2f9ead0" class="figure">
|
||||
<div id="org7fb6c81" class="figure">
|
||||
<p><img src="figs/noise_budget_no_mov_asd.png" alt="noise_budget_no_mov_asd.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 23: </span>Amplitude Spectral Density</p>
|
||||
@ -1511,7 +1511,7 @@ CPS_dz = cumtrapz(f, pxx_ol_dz);
|
||||
</div>
|
||||
|
||||
|
||||
<div id="orgda9f408" class="figure">
|
||||
<div id="org2f67e0e" class="figure">
|
||||
<p><img src="figs/noise_budget_no_mov_cas.png" alt="noise_budget_no_mov_cas.png" />
|
||||
</p>
|
||||
<p><span class="figure-number">Figure 24: </span>Cumulative Amplitude Spectrum</p>
|
||||
@ -1520,17 +1520,17 @@ CPS_dz = cumtrapz(f, pxx_ol_dz);
|
||||
</div>
|
||||
|
||||
|
||||
<div id="outline-container-org5c8bbce" class="outline-3">
|
||||
<h3 id="org5c8bbce"><span class="section-number-3">3.4.</span> Noise budgeting - Bragg rotation</h3>
|
||||
<div id="outline-container-org8945ee2" class="outline-3">
|
||||
<h3 id="org8945ee2"><span class="section-number-3">3.4.</span> Noise budgeting - Bragg rotation</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org84729e1" class="outline-2">
|
||||
<h2 id="org84729e1"><span class="section-number-2">4.</span> Test Mode C</h2>
|
||||
<div id="outline-container-orgc0ab5d1" class="outline-2">
|
||||
<h2 id="orgc0ab5d1"><span class="section-number-2">4.</span> Test Mode C</h2>
|
||||
<div class="outline-text-2" id="text-4">
|
||||
</div>
|
||||
<div id="outline-container-org8cc30f1" class="outline-3">
|
||||
<h3 id="org8cc30f1"><span class="section-number-3">4.1.</span> Mode B and Mode C</h3>
|
||||
<div id="outline-container-org9996dc6" class="outline-3">
|
||||
<h3 id="org9996dc6"><span class="section-number-3">4.1.</span> Mode B and Mode C</h3>
|
||||
<div class="outline-text-3" id="text-4-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">data_B = extractDatData(sprintf(<span class="org-string">"/home/thomas/mnt/data_id21/22Jan/blc13491/id21/test_regul_220119/%s"</span>,<span class="org-string">"lut_const_fj_vel_19012022_1450.dat"</span>), <span class="org-comment-delimiter">.</span><span class="org-comment">..</span>
|
||||
@ -1620,12 +1620,12 @@ win = hanning(ceil(1<span class="org-builtin">/</span>Ts));
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org0d833d1" class="outline-2">
|
||||
<h2 id="org0d833d1"><span class="section-number-2">5.</span> Export numerator and denominator</h2>
|
||||
<div id="outline-container-org1c0791b" class="outline-2">
|
||||
<h2 id="org1c0791b"><span class="section-number-2">5.</span> Export numerator and denominator</h2>
|
||||
<div class="outline-text-2" id="text-5">
|
||||
</div>
|
||||
<div id="outline-container-org4532b44" class="outline-3">
|
||||
<h3 id="org4532b44"><span class="section-number-3">5.1.</span> Export</h3>
|
||||
<div id="outline-container-org22487de" class="outline-3">
|
||||
<h3 id="org22487de"><span class="section-number-3">5.1.</span> Export</h3>
|
||||
<div class="outline-text-3" id="text-5-1">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">K_order = 10;
|
||||
@ -1673,8 +1673,8 @@ fclose(fileID);
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org78d8a99" class="outline-3">
|
||||
<h3 id="org78d8a99"><span class="section-number-3">5.2.</span> Verify</h3>
|
||||
<div id="outline-container-org2b8461a" class="outline-3">
|
||||
<h3 id="org2b8461a"><span class="section-number-3">5.2.</span> Verify</h3>
|
||||
<div class="outline-text-3" id="text-5-2">
|
||||
<div class="org-src-container">
|
||||
<pre class="src src-matlab">K_data = importdata(<span class="org-string">'X_tal_cage_PID_20Hz.dat'</span>);
|
||||
@ -1687,7 +1687,7 @@ K = tf(K_data(1,<span class="org-builtin">:</span>), K_data(2,<span class="org-b
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2022-02-15 mar. 14:18</p>
|
||||
<p class="date">Created: 2022-02-20 dim. 23:36</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -235,6 +235,125 @@ legend('location', 'northwest');
|
||||
<<m-init-other>>
|
||||
#+end_src
|
||||
|
||||
** Identification ID24
|
||||
#+begin_src matlab
|
||||
load('test_id_id24_3.mat')
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
t = 1e-4*ones(size(fjpur, 1), 1);
|
||||
|
||||
ur.dz = fjpur(:,1) - mean(fjpur(:,1));
|
||||
ur.dry = fjpur(:,2) - mean(fjpur(:,2));
|
||||
ur.drx = fjpur(:,3) - mean(fjpur(:,3));
|
||||
ur.u = fjpur(:,7) - mean(fjpur(:,7));
|
||||
|
||||
uh.dz = fjpuh(:,1) - mean(fjpuh(:,1));
|
||||
uh.dry = fjpuh(:,2) - mean(fjpuh(:,2));
|
||||
uh.drx = fjpuh(:,3) - mean(fjpuh(:,3));
|
||||
uh.u = fjpuh(:,8) - mean(fjpuh(:,8));
|
||||
|
||||
d.dz = fjpd(:,1) - mean(fjpd(:,1));
|
||||
d.dry = fjpd(:,2) - mean(fjpd(:,2));
|
||||
d.drx = fjpd(:,3) - mean(fjpd(:,3));
|
||||
d.u = fjpd(:,9) - mean(fjpd(:,9));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
J_a_311 = [1, 0.14, -0.0675
|
||||
1, 0.14, 0.1525
|
||||
1, -0.14, 0.0425];
|
||||
|
||||
J_a_111 = [1, 0.14, -0.1525
|
||||
1, 0.14, 0.0675
|
||||
1, -0.14, -0.0425];
|
||||
|
||||
ur.y = [J_a_311 * [-ur.dz, ur.dry,-ur.drx]']';
|
||||
uh.y = [J_a_311 * [-uh.dz, uh.dry,-uh.drx]']';
|
||||
d.y = [J_a_311 * [-d.dz, d.dry, -d.drx]']';
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% Sampling Time and Frequency
|
||||
Ts = 1e-4; % [s]
|
||||
Fs = 1/Ts; % [Hz]
|
||||
|
||||
% Hannning Windows
|
||||
win = hanning(ceil(1*Fs));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% And we get the frequency vector
|
||||
[G_ur, f] = tfestimate(ur.u, ur.y, win, [], [], 1/Ts);
|
||||
[G_uh, ~] = tfestimate(uh.u, uh.y, win, [], [], 1/Ts);
|
||||
[G_d, ~] = tfestimate(d.u, d.y, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
[coh_ur, ~] = mscohere(ur.u, ur.y, win, [], [], 1/Ts);
|
||||
[coh_uh, ~] = mscohere(uh.u, uh.y, win, [], [], 1/Ts);
|
||||
[coh_d, ~] = mscohere(d.u, d.y, win, [], [], 1/Ts);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Coherence
|
||||
figure;
|
||||
tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
hold on;
|
||||
plot(f, coh_ur(:,1), 'DisplayName', '$u_r$');
|
||||
plot(f, coh_uh(:,2), 'DisplayName', '$u_h$');
|
||||
plot(f, coh_d( :,3), 'DisplayName', '$u_d$');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Coherence');
|
||||
legend('location', 'southeast');
|
||||
xlim([1, 1e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Bode plot of the DCM dynamics in the frame of the Fast Jacks
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(G_ur(:,1)), 'DisplayName', '$u_r$');
|
||||
plot(f, abs(G_uh(:,2)), 'DisplayName', '$u_h$');
|
||||
plot(f, abs(G_d( :,3)), 'DisplayName', '$u_d$');
|
||||
plot(f, abs(G_ur(:,2)), 'color', [0, 0, 0, 0.2], ...
|
||||
'DisplayName', 'Off Diagonal');
|
||||
plot(f, abs(G_ur(:,3)), 'color', [0, 0, 0, 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(f, abs(G_uh(:,1)), 'color', [0, 0, 0, 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(f, abs(G_uh(:,3)), 'color', [0, 0, 0, 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(f, abs(G_d(:,1)), 'color', [0, 0, 0, 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
plot(f, abs(G_d(:,2)), 'color', [0, 0, 0, 0.2], ...
|
||||
'HandleVisibility', 'off');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude'); set(gca, 'XTickLabel',[]);
|
||||
ylim([1e-2, 1e2]);
|
||||
legend('location', 'northwest');
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plot(f, 180/pi*angle(G_ur(:,1)));
|
||||
plot(f, 180/pi*angle(G_uh(:,2)));
|
||||
plot(f, 180/pi*angle(G_d(:,3)));
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
% ylim([-45, 45]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([1, 1e3]);
|
||||
#+end_src
|
||||
|
||||
** Identification
|
||||
#+begin_src matlab
|
||||
ur = load('FJPUR_step.mat');
|
||||
@ -1364,7 +1483,7 @@ exportFig('figs/nyquist_compare.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:nyquist_compare
|
||||
#+caption: n
|
||||
#+caption: Nyquist Plot
|
||||
#+RESULTS:
|
||||
[[file:figs/nyquist_compare.png]]
|
||||
|
||||
@ -1375,12 +1494,12 @@ tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
hold on;
|
||||
plot(f, 1./abs(1 + G_d(:,3).*squeeze(freqresp(K(1,1), f, 'Hz'))), 'DisplayName', 'PID');
|
||||
plot(f, 1./abs(1 + G_d(:,3).*squeeze(freqresp(Kb_old(1,1), f, 'Hz'))), 'DisplayName', 'Double Integrator + Lead');
|
||||
plot(f, 1./abs(1 + G_d(:,3).*squeeze(freqresp(Kb(1,1), f, 'Hz'))), 'DisplayName', 'Double Integrator + Lead + Notch');
|
||||
plot(f, 1./abs(1 + G_d(:,3).*squeeze(freqresp(Kb_old(1,1), f, 'Hz'))), 'DisplayName', '$K_{10Hz}$');
|
||||
plot(f, 1./abs(1 + G_d(:,3).*squeeze(freqresp(Kb(1,1), f, 'Hz'))), 'DisplayName', '$K_{20Hz}$');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('Amplitude');
|
||||
ylim([1e-2, 1e1]); xlim([1, 1e3]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Sensitivity Magnitude');
|
||||
ylim([1e-3, 5]); xlim([1, 5e2]);
|
||||
legend('location', 'southeast');
|
||||
#+end_src
|
||||
|
||||
@ -2257,7 +2376,7 @@ Fs = 1e4; % Sampling Frequency [Hz]
|
||||
fir_order = args.fir_order; % Filter's order
|
||||
delay = fir_order/2; % Delay induced by the filter
|
||||
B_fir = firls(args.fir_order, ... % Filter's order
|
||||
[0 500/(Fs/2) 1e3/(Fs/2) 1], ... % Frequencies [Hz]
|
||||
[0 25/(Fs/2) 34/(Fs/2) 1], ... % Frequencies [Hz]
|
||||
[1 1 0 0]); % Wanted Magnitudes
|
||||
#+end_src
|
||||
|
||||
|
BIN
dcm-feedback-control.pdf
Normal file
BIN
dcm-feedback-control.pdf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 79 KiB |
BIN
matlab/DCM_RT_control_v09.slx
Executable file
BIN
matlab/DCM_RT_control_v09.slx
Executable file
Binary file not shown.
BIN
matlab/DCM_RT_control_v09.slx.r2019b
Executable file
BIN
matlab/DCM_RT_control_v09.slx.r2019b
Executable file
Binary file not shown.
32
matlab/calc_kinematics.m
Executable file
32
matlab/calc_kinematics.m
Executable file
@ -0,0 +1,32 @@
|
||||
%% this script computes the transforamtion matrices for piezo to pseudo coordinates
|
||||
|
||||
fjpur_111 = [-140; -67.5; 0]*0.001;
|
||||
fjpuh_111 = [-140; (220-67.5); 0]*0.001;
|
||||
fjpd_111 = [140; (110-67.5); 0]*0.001;
|
||||
|
||||
fjpur_311 = [-140; -(220-67.5); 0]*0.001;
|
||||
fjpuh_311 = [-140; 67.5; 0]*0.001;
|
||||
fjpd_311 = [140; -(110-67.5); 0]*0.001;
|
||||
|
||||
A_p2r_111 = [1 -1*fjpur_111(1) fjpur_111(2); 1 -1*fjpuh_111(1) fjpuh_111(2); 1 -1*fjpd_111(1) fjpd_111(2)];
|
||||
A_p2r_311 = [1 -1*fjpur_311(1) fjpur_311(2); 1 -1*fjpuh_311(1) fjpuh_311(2); 1 -1*fjpd_311(1) fjpd_311(2)];
|
||||
|
||||
A_r2p_111 = inv(A_p2r_111);
|
||||
A_r2p_311 = inv(A_p2r_311);
|
||||
|
||||
A_x2p = [-1 0 0; 0 1 0; 0 0 1];
|
||||
B_x2p = [0 0 0];
|
||||
|
||||
motor_pos2mv = 0.6667; %modified by Ludovic 12/07/2021
|
||||
% % no calibr
|
||||
calibr_fjpur = (1);
|
||||
calibr_fjpuh = (1);
|
||||
calibr_fjpd = (1);
|
||||
|
||||
%calibr
|
||||
% calibr_fjpur = (1-0.016);
|
||||
% calibr_fjpuh = (1+0.052);
|
||||
% calibr_fjpd = (1+0.0065);
|
||||
|
||||
calibr_mat = [calibr_fjpur 0 0;0 calibr_fjpuh 0;0 0 calibr_fjpd];
|
||||
|
1
matlab/figs
Symbolic link
1
matlab/figs
Symbolic link
@ -0,0 +1 @@
|
||||
../figs
|
22
matlab/src/extractDatData.m
Normal file
22
matlab/src/extractDatData.m
Normal file
@ -0,0 +1,22 @@
|
||||
function [data_struct] = extractDatData(dat_file, names, scale)
|
||||
% extractDatData -
|
||||
%
|
||||
% Syntax: extractDatData(data_file, lut_file, args)
|
||||
%
|
||||
% Inputs:
|
||||
% - data_file - Where to load the .mat file
|
||||
% - lut_file - Where to save the .dat file
|
||||
|
||||
%% Load Data
|
||||
data_array = importdata(dat_file);
|
||||
|
||||
%% Initialize Struct
|
||||
data_struct = struct();
|
||||
|
||||
%% Populate Struct
|
||||
for i = 1:length(names)
|
||||
data_struct.(names{i}) = scale(i)*data_array(:,i);
|
||||
end
|
||||
|
||||
%% Add Time
|
||||
data_struct.time = 1e-4*[1:1:length(data_struct.(names{1}))];
|
49
matlab/src/processMeasData.m
Normal file
49
matlab/src/processMeasData.m
Normal file
@ -0,0 +1,49 @@
|
||||
function [data] = processMeasData(data, args)
|
||||
% processMeasData -
|
||||
%
|
||||
% Syntax: processMeasData(data_file, lut_file, args)
|
||||
%
|
||||
% Inputs:
|
||||
% - data
|
||||
|
||||
arguments
|
||||
data
|
||||
args.fir_order (1,1) double {mustBeNumericOrLogical} = 5000
|
||||
end
|
||||
|
||||
%% Actuator Jacobian
|
||||
J_a_111 = [1, 0.14, -0.0675
|
||||
1, 0.14, 0.1525
|
||||
1, -0.14, 0.0425];
|
||||
|
||||
%% FIR Filter
|
||||
Fs = 1e4; % Sampling Frequency [Hz]
|
||||
fir_order = args.fir_order; % Filter's order
|
||||
delay = fir_order/2; % Delay induced by the filter
|
||||
B_fir = firls(args.fir_order, ... % Filter's order
|
||||
[0 50/(Fs/2) 0.1e3/(Fs/2) 1], ... % Frequencies [Hz]
|
||||
[1 1 0 0]); % Wanted Magnitudes
|
||||
|
||||
data.ddz = 10.5e-3./(2*cos(data.bragg)) - data.dz;
|
||||
|
||||
%% Computation of the position of the FJ as measured by the interferometers
|
||||
error = J_a_111 * [data.ddz, data.dry, data.drx]';
|
||||
|
||||
data.fjur_e = error(1,:)'; % [m]
|
||||
data.fjuh_e = error(2,:)'; % [m]
|
||||
data.fjd_e = error(3,:)'; % [m]
|
||||
|
||||
%% Filtering all measured Fast Jack Position using the FIR filter
|
||||
data.fjur_e_filt = filter(B_fir, 1, data.fjur_e);
|
||||
data.fjuh_e_filt = filter(B_fir, 1, data.fjuh_e);
|
||||
data.fjd_e_filt = filter(B_fir, 1, data.fjd_e);
|
||||
|
||||
%% Compensation of the delay introduced by the FIR filter
|
||||
data.fjur_e_filt(1:end-delay) = data.fjur_e_filt(delay+1:end);
|
||||
data.fjuh_e_filt(1:end-delay) = data.fjuh_e_filt(delay+1:end);
|
||||
data.fjd_e_filt( 1:end-delay) = data.fjd_e_filt( delay+1:end);
|
||||
|
||||
%% Re-sample data to have same data points in FJUR
|
||||
[data.fjur_e_resampl, data.fjur_resampl] = resample(data.fjur_e_filt, data.fjur, 1/100e-9);
|
||||
[data.fjuh_e_resampl, data.fjuh_resampl] = resample(data.fjuh_e_filt, data.fjuh, 1/100e-9);
|
||||
[data.fjd_e_resampl, data.fjd_resampl] = resample(data.fjd_e_filt, data.fjd, 1/100e-9);
|
Loading…
Reference in New Issue
Block a user