Export to pdf

This commit is contained in:
Thomas Dehaeze 2022-06-02 18:23:48 +02:00
parent d88db11821
commit 086b1fc1d4
11 changed files with 319 additions and 96 deletions

View File

@ -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>

View File

@ -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

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

Binary file not shown.

Binary file not shown.

32
matlab/calc_kinematics.m Executable file
View 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
View File

@ -0,0 +1 @@
../figs

View 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}))];

View 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);