2020-02-25 18:10:20 +01:00
<?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en" xml:lang = "en" >
< head >
2021-02-20 23:09:27 +01:00
<!-- 2021 - 02 - 20 sam. 23:08 -->
2020-02-25 18:10:20 +01:00
< meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" / >
< title > Simscape Uniaxial Model< / title >
< meta name = "generator" content = "Org mode" / >
< meta name = "author" content = "Dehaeze Thomas" / >
2021-02-20 23:09:27 +01:00
< link rel = "stylesheet" type = "text/css" href = "https://research.tdehaeze.xyz/css/style.css" / >
< script type = "text/javascript" src = "https://research.tdehaeze.xyz/js/script.js" > < / script >
< script >
MathJax = {
svg: {
scale: 1,
fontCache: "global"
},
tex: {
tags: "ams",
multlineWidth: "%MULTLINEWIDTH",
tagSide: "right",
macros: {bm: ["\\boldsymbol{#1}",1],},
tagIndent: ".8em"
}
};
< / script >
< script id = "MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">< / script >
2020-02-25 18:10:20 +01:00
< / head >
< body >
< div id = "org-div-home-and-up" >
2020-02-25 18:21:17 +01:00
< a accesskey = "h" href = "./index.html" > UP < / a >
2020-02-25 18:10:20 +01:00
|
2021-02-20 23:09:27 +01:00
< a accesskey = "H" href = "../../index.html" > HOME < / a >
2020-02-25 18:10:20 +01:00
< / div > < div id = "content" >
< h1 class = "title" > Simscape Uniaxial Model< / h1 >
< div id = "table-of-contents" >
< h2 > Table of Contents< / h2 >
< div id = "text-table-of-contents" >
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org279f101" > 1. Simscape Model< / a > < / li >
< li > < a href = "#orgf7b0525" > 2. Undamped System< / a >
2020-02-25 18:10:20 +01:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org8c0c918" > 2.1. Init< / a > < / li >
< li > < a href = "#orgb05d3e3" > 2.2. Identification< / a > < / li >
< li > < a href = "#orgb65c80f" > 2.3. Sensitivity to Disturbances< / a > < / li >
< li > < a href = "#org2b03403" > 2.4. Noise Budget< / a > < / li >
< li > < a href = "#org2a4c59a" > 2.5. Plant< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org4582efe" > 3. Integral Force Feedback< / a >
2020-02-25 18:10:20 +01:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org1bd1d7b" > 3.1. Control Design< / a > < / li >
< li > < a href = "#org29b66f6" > 3.2. Identification< / a > < / li >
< li > < a href = "#org1937ae6" > 3.3. Sensitivity to Disturbance< / a > < / li >
< li > < a href = "#org9340e78" > 3.4. Damped Plant< / a > < / li >
< li > < a href = "#org767511f" > 3.5. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgc37d268" > 4. Relative Motion Control< / a >
2020-02-25 18:10:20 +01:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org85632f8" > 4.1. Control Design< / a > < / li >
< li > < a href = "#org94bcd25" > 4.2. Identification< / a > < / li >
< li > < a href = "#org66fd58c" > 4.3. Sensitivity to Disturbance< / a > < / li >
< li > < a href = "#orgcefaa09" > 4.4. Damped Plant< / a > < / li >
< li > < a href = "#org5575d52" > 4.5. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgd2e652f" > 5. Direct Velocity Feedback< / a >
2020-02-25 18:10:20 +01:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgf25c764" > 5.1. Control Design< / a > < / li >
< li > < a href = "#org33c65e2" > 5.2. Identification< / a > < / li >
< li > < a href = "#org0efcd5e" > 5.3. Sensitivity to Disturbance< / a > < / li >
< li > < a href = "#orgd64cbe0" > 5.4. Damped Plant< / a > < / li >
< li > < a href = "#org1815c13" > 5.5. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgc4e46cd" > 6. With Cedrat Piezo-electric Actuators< / a >
2020-02-25 18:10:20 +01:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgabcef1d" > 6.1. Identification< / a > < / li >
< li > < a href = "#orgfc83707" > 6.2. Control Design< / a > < / li >
< li > < a href = "#org310cc2a" > 6.3. Identification< / a > < / li >
< li > < a href = "#org4bacd78" > 6.4. Sensitivity to Disturbance< / a > < / li >
< li > < a href = "#orgeed7d37" > 6.5. Damped Plant< / a > < / li >
< li > < a href = "#org9308ceb" > 6.6. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgb4f2f53" > 7. Comparison of Active Damping Techniques< / a >
2020-02-25 18:10:20 +01:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgdd804dc" > 7.1. Load the plants< / a > < / li >
< li > < a href = "#orga6f1b82" > 7.2. Sensitivity to Disturbance< / a > < / li >
< li > < a href = "#orgbdb91c3" > 7.3. Noise Budget< / a > < / li >
< li > < a href = "#org0d80a1a" > 7.4. Damped Plant< / a > < / li >
< li > < a href = "#org7b8daa3" > 7.5. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
2021-02-20 23:09:27 +01:00
< li > < a href = "#orgdb9e0e5" > 8. Voice Coil< / a >
2020-02-25 18:10:20 +01:00
< ul >
2021-02-20 23:09:27 +01:00
< li > < a href = "#org0c7bce4" > 8.1. Init< / a > < / li >
< li > < a href = "#org5dd6e8d" > 8.2. Identification< / a > < / li >
< li > < a href = "#orgf8f1bff" > 8.3. Sensitivity to Disturbances< / a > < / li >
< li > < a href = "#org98ab51d" > 8.4. Noise Budget< / a > < / li >
< li > < a href = "#orgcae4469" > 8.5. Integral Force Feedback< / a > < / li >
< li > < a href = "#org130702c" > 8.6. Identification of the Damped Plant< / a > < / li >
< li > < a href = "#orgd002880" > 8.7. Noise Budget< / a > < / li >
< li > < a href = "#org0adc59f" > 8.8. Conclusion< / a > < / li >
2020-02-25 18:10:20 +01:00
< / ul >
< / li >
< / ul >
< / div >
< / div >
< p >
The idea is to use the same model as the full Simscape Model but to restrict the motion only in the vertical direction.
< / p >
< p >
This is done in order to more easily study the system and evaluate control techniques.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org279f101" class = "outline-2" >
< h2 id = "org279f101" > < span class = "section-number-2" > 1< / span > Simscape Model< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-1" >
< p >
2021-02-20 23:09:27 +01:00
< a id = "org22ac7fa" > < / a >
2020-02-25 18:10:20 +01:00
< / p >
< p >
2021-02-20 23:09:27 +01:00
A schematic of the uniaxial model used for simulations is represented in figure < a href = "#orgae9337c" > 1< / a > .
2020-02-25 18:10:20 +01:00
< / p >
< p >
The perturbations \(w\) are:
< / p >
< ul class = "org-ul" >
< li > \(F_s\): direct forces applied to the sample such as inertia forces and cable forces< / li >
< li > \(F_{rz}\): parasitic forces due to the rotation of the spindle< / li >
< li > \(F_{ty}\): parasitic forces due to scans with the translation stage< / li >
< li > \(D_w\): ground motion< / li >
< / ul >
< p >
The quantity to \(z\) to control is:
< / p >
< ul class = "org-ul" >
< li > \(D\): the position of the sample with respect to the granite< / li >
< / ul >
< p >
The measured quantities \(v\) are:
< / p >
< ul class = "org-ul" >
< li > \(D\): the position of the sample with respect to the granite< / li >
< / ul >
< p >
We study the use of an additional sensor:
< / p >
< ul class = "org-ul" >
< li > \(F_n\): a force sensor located in the nano-hexapod< / li >
< li > \(v_n\): an absolute velocity sensor located on the top platform of the nano-hexapod< / li >
< li > \(d_r\): a relative motion sensor located in the nano-hexapod< / li >
< / ul >
< p >
The control signal \(u\) is:
< / p >
< ul class = "org-ul" >
< li > \(F\) the force applied by the nano-hexapod actuator< / li >
< / ul >
2021-02-20 23:09:27 +01:00
< div id = "orgae9337c" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-model-nass-flexible.png" alt = "uniaxial-model-nass-flexible.png" / >
< / p >
< p > < span class = "figure-number" > Figure 1: < / span > Schematic of the uniaxial model used< / p >
< / div >
< p >
Few active damping techniques will be compared in order to decide which sensor is to be included in the system.
2021-02-20 23:09:27 +01:00
Schematics of the active damping techniques are displayed in figure < a href = "#orgb63a421" > 2< / a > .
2020-02-25 18:10:20 +01:00
< / p >
2021-02-20 23:09:27 +01:00
< div id = "orgb63a421" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-model-nass-flexible-active-damping.png" alt = "uniaxial-model-nass-flexible-active-damping.png" / >
< / p >
< p > < span class = "figure-number" > Figure 2: < / span > Comparison of used active damping techniques< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgf7b0525" class = "outline-2" >
< h2 id = "orgf7b0525" > < span class = "section-number-2" > 2< / span > Undamped System< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-2" >
< p >
2021-02-20 23:09:27 +01:00
< a id = "org361fd15" > < / a >
2020-02-25 18:10:20 +01:00
< / p >
< p >
Let’ s start by study the undamped system.
< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org8c0c918" class = "outline-3" >
< h3 id = "org8c0c918" > < span class = "section-number-3" > 2.1< / span > Init< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-1" >
< p >
We initialize all the stages with the default parameters.
The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg.
< / p >
< p >
All the controllers are set to 0 (Open Loop).
< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgb05d3e3" class = "outline-3" >
< h3 id = "orgb05d3e3" > < span class = "section-number-3" > 2.2< / span > Identification< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-2" >
< p >
We identify the dynamics of the system.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Options for Linearized< / span > < / span >
options = linearizeOptions;
options.SampleTime = 0;
2020-02-25 18:10:20 +01:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'sim_nano_station_uniaxial'< / span > ;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
The inputs and outputs are defined below and corresponds to the name of simulink blocks.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
io< span class = "org-type" > (1) < / span > = linio([mdl, < span class = "org-string" > '/Dw'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Ground Motion< / span >
io< span class = "org-type" > (2) < / span > = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied on the sample< / span >
io< span class = "org-type" > (3) < / span > = linio([mdl, < span class = "org-string" > '/Fnl'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied by the NASS< / span >
io< span class = "org-type" > (4) < / span > = linio([mdl, < span class = "org-string" > '/Fdty'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Ty< / span >
io< span class = "org-type" > (5) < / span > = linio([mdl, < span class = "org-string" > '/Fdrz'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Rz< / span >
io< span class = "org-type" > (6) < / span > = linio([mdl, < span class = "org-string" > '/Dsm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of the sample< / span >
io< span class = "org-type" > (7) < / span > = linio([mdl, < span class = "org-string" > '/Fnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Force sensor in NASS's legs< / span >
io< span class = "org-type" > (8) < / span > = linio([mdl, < span class = "org-string" > '/Dnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of NASS's legs< / span >
io< span class = "org-type" > (9) < / span > = linio([mdl, < span class = "org-string" > '/Dgm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Absolute displacement of the granite< / span >
io< span class = "org-type" > (10) < / span > = linio([mdl, < span class = "org-string" > '/Vlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Measured absolute velocity of the top NASS platform< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Finally, we use the < code > linearize< / code > Matlab function to extract a state space model from the simscape model.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Run the linearization< / span > < / span >
G = linearize(mdl, io, options);
G.InputName = {< span class = "org-string" > 'Dw'< / span > , ...< span class = "org-comment" > % Ground Motion [m]< / span >
< span class = "org-string" > 'Fs'< / span > , ...< span class = "org-comment" > % Force Applied on Sample [N]< / span >
< span class = "org-string" > 'Fn'< / span > , ...< span class = "org-comment" > % Force applied by NASS [N]< / span >
< span class = "org-string" > 'Fty'< / span > , ...< span class = "org-comment" > % Parasitic Force Ty [N]< / span >
< span class = "org-string" > 'Frz'< / span > }; < span class = "org-comment" > % Parasitic Force Rz [N]< / span >
G.OutputName = {< span class = "org-string" > 'D'< / span > , ...< span class = "org-comment" > % Measured sample displacement x.r.t. granite [m]< / span >
< span class = "org-string" > 'Fnm'< / span > , ...< span class = "org-comment" > % Force Sensor in NASS [N]< / span >
< span class = "org-string" > 'Dnm'< / span > , ...< span class = "org-comment" > % Displacement Sensor in NASS [m]< / span >
< span class = "org-string" > 'Dgm'< / span > , ...< span class = "org-comment" > % Asbolute displacement of Granite [m]< / span >
< span class = "org-string" > 'Vlm'< / span > }; ...< span class = "org-comment" > % Absolute Velocity of NASS [m/s]< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Finally, we save the identified system dynamics for further analysis.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgb65c80f" class = "outline-3" >
< h3 id = "orgb65c80f" > < span class = "section-number-3" > 2.3< / span > Sensitivity to Disturbances< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-3" >
< p >
We show several plots representing the sensitivity to disturbances:
< / p >
< ul class = "org-ul" >
2021-02-20 23:09:27 +01:00
< li > in figure < a href = "#orga0cd515" > 3< / a > the transfer functions from ground motion \(D_w\) to the sample position \(D\) and the transfer function from direct force on the sample \(F_s\) to the sample position \(D\) are shown< / li >
< li > in figure < a href = "#org2844846" > 4< / a > , it is the effect of parasitic forces of the positioning stages (\(F_{ty}\) and \(F_{rz}\)) on the position \(D\) of the sample that are shown< / li >
2020-02-25 18:10:20 +01:00
< / ul >
2021-02-20 23:09:27 +01:00
< div id = "orga0cd515" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-sensitivity-disturbances.png" alt = "uniaxial-sensitivity-disturbances.png" / >
< / p >
< p > < span class = "figure-number" > Figure 3: < / span > Sensitivity to disturbances (< a href = "./figs/uniaxial-sensitivity-disturbances.png" > png< / a > , < a href = "./figs/uniaxial-sensitivity-disturbances.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org2844846" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-sensitivity-force-dist.png" alt = "uniaxial-sensitivity-force-dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 4: < / span > Sensitivity to disturbances (< a href = "./figs/uniaxial-sensitivity-force-dist.png" > png< / a > , < a href = "./figs/uniaxial-sensitivity-force-dist.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org2b03403" class = "outline-3" >
< h3 id = "org2b03403" > < span class = "section-number-3" > 2.4< / span > Noise Budget< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-4" >
< p >
We first load the measured PSD of the disturbance.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/disturbances_dist_psd.mat'< / span > , < span class = "org-string" > 'dist_f'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
The effect of these disturbances on the distance \(D\) is computed below.
2021-02-20 23:09:27 +01:00
The PSD of the obtain distance \(D\) due to each of the perturbation is shown in figure < a href = "#org100e477" > 5< / a > and the Cumulative Amplitude Spectrum is shown in figure < a href = "#org49d651e" > 6< / a > .
2020-02-25 18:10:20 +01:00
< / p >
< p >
2021-02-20 23:09:27 +01:00
The Root Mean Square value of the obtained displacement \(D\) is computed below and can be determined from the figure < a href = "#org49d651e" > 6< / a > .
2020-02-25 18:10:20 +01:00
< / p >
< pre class = "example" >
3.3793e-06
< / pre >
2021-02-20 23:09:27 +01:00
< div id = "org100e477" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-psd-dist.png" alt = "uniaxial-psd-dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 5: < / span > PSD of the effect of disturbances on \(D\) (< a href = "./figs/uniaxial-psd-dist.png" > png< / a > , < a href = "./figs/uniaxial-psd-dist.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org49d651e" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-cas-dist.png" alt = "uniaxial-cas-dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 6: < / span > CAS of the effect of disturbances on \(D\) (< a href = "./figs/uniaxial-cas-dist.png" > png< / a > , < a href = "./figs/uniaxial-cas-dist.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org2a4c59a" class = "outline-3" >
< h3 id = "org2a4c59a" > < span class = "section-number-3" > 2.5< / span > Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-2-5" >
< p >
2021-02-20 23:09:27 +01:00
The transfer function from the force \(F\) applied by the nano-hexapod to the position of the sample \(D\) is shown in figure < a href = "#orgaa0a47a" > 7< / a > .
2020-02-25 18:10:20 +01:00
It corresponds to the plant to control.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "orgaa0a47a" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-plant.png" alt = "uniaxial-plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 7: < / span > Bode plot of the Plant (< a href = "./figs/uniaxial-plant.png" > png< / a > , < a href = "./figs/uniaxial-plant.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org4582efe" class = "outline-2" >
< h2 id = "org4582efe" > < span class = "section-number-2" > 3< / span > Integral Force Feedback< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-3" >
< p >
2021-02-20 23:09:27 +01:00
< a id = "org9fef4b5" > < / a >
2020-02-25 18:10:20 +01:00
< / p >
2021-02-20 23:09:27 +01:00
< div id = "orgb219467" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-model-nass-flexible-iff.png" alt = "uniaxial-model-nass-flexible-iff.png" / >
< / p >
< p > < span class = "figure-number" > Figure 8: < / span > Uniaxial IFF Control Schematic< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org1bd1d7b" class = "outline-3" >
< h3 id = "org1bd1d7b" > < span class = "section-number-3" > 3.1< / span > Control Design< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Let’ s look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "orgc3ddaae" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_iff_plant.png" alt = "uniaxial_iff_plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 9: < / span > Transfer function from forces applied in the legs to force sensor (< a href = "./figs/uniaxial_iff_plant.png" > png< / a > , < a href = "./figs/uniaxial_iff_plant.pdf" > pdf< / a > )< / p >
< / div >
< p >
The controller for each pair of actuator/sensor is:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K_iff = < span class = "org-type" > -< / span > 1000< span class = "org-type" > /< / span > s;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org7bfe14f" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_iff_open_loop.png" alt = "uniaxial_iff_open_loop.png" / >
< / p >
< p > < span class = "figure-number" > Figure 10: < / span > Loop Gain for the Integral Force Feedback (< a href = "./figs/uniaxial_iff_open_loop.png" > png< / a > , < a href = "./figs/uniaxial_iff_open_loop.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org29b66f6" class = "outline-3" >
< h3 id = "org29b66f6" > < span class = "section-number-3" > 3.2< / span > Identification< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-2" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
All the controllers are set to 0.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
K_iff = < span class = "org-type" > -< / span > K_iff;
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
K_rmc = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
K_dvf = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Options for Linearized< / span > < / span >
options = linearizeOptions;
options.SampleTime = 0;
2020-02-25 18:10:20 +01:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'sim_nano_station_uniaxial'< / span > ;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
io< span class = "org-type" > (1) < / span > = linio([mdl, < span class = "org-string" > '/Dw'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Ground Motion< / span >
io< span class = "org-type" > (2) < / span > = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied on the sample< / span >
io< span class = "org-type" > (3) < / span > = linio([mdl, < span class = "org-string" > '/Fnl'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied by the NASS< / span >
io< span class = "org-type" > (4) < / span > = linio([mdl, < span class = "org-string" > '/Fdty'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Ty< / span >
io< span class = "org-type" > (5) < / span > = linio([mdl, < span class = "org-string" > '/Fdrz'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Rz< / span >
io< span class = "org-type" > (6) < / span > = linio([mdl, < span class = "org-string" > '/Dsm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of the sample< / span >
io< span class = "org-type" > (7) < / span > = linio([mdl, < span class = "org-string" > '/Fnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Force sensor in NASS's legs< / span >
io< span class = "org-type" > (8) < / span > = linio([mdl, < span class = "org-string" > '/Dnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of NASS's legs< / span >
io< span class = "org-type" > (9) < / span > = linio([mdl, < span class = "org-string" > '/Dgm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Absolute displacement of the granite< / span >
io< span class = "org-type" > (10) < / span > = linio([mdl, < span class = "org-string" > '/Vlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Measured absolute velocity of the top NASS platform< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Run the linearization< / span > < / span >
G_iff = linearize(mdl, io, options);
G_iff.InputName = {< span class = "org-string" > 'Dw'< / span > , ...< span class = "org-comment" > % Ground Motion [m]< / span >
< span class = "org-string" > 'Fs'< / span > , ...< span class = "org-comment" > % Force Applied on Sample [N]< / span >
< span class = "org-string" > 'Fn'< / span > , ...< span class = "org-comment" > % Force applied by NASS [N]< / span >
< span class = "org-string" > 'Fty'< / span > , ...< span class = "org-comment" > % Parasitic Force Ty [N]< / span >
< span class = "org-string" > 'Frz'< / span > }; < span class = "org-comment" > % Parasitic Force Rz [N]< / span >
G_iff.OutputName = {< span class = "org-string" > 'D'< / span > , ...< span class = "org-comment" > % Measured sample displacement x.r.t. granite [m]< / span >
< span class = "org-string" > 'Fnm'< / span > , ...< span class = "org-comment" > % Force Sensor in NASS [N]< / span >
< span class = "org-string" > 'Dnm'< / span > , ...< span class = "org-comment" > % Displacement Sensor in NASS [m]< / span >
< span class = "org-string" > 'Dgm'< / span > , ...< span class = "org-comment" > % Asbolute displacement of Granite [m]< / span >
< span class = "org-string" > 'Vlm'< / span > }; ...< span class = "org-comment" > % Absolute Velocity of NASS [m/s]< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G_iff'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org1937ae6" class = "outline-3" >
< h3 id = "org1937ae6" > < span class = "section-number-3" > 3.3< / span > Sensitivity to Disturbance< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-3" >
2021-02-20 23:09:27 +01:00
< div id = "org7de5bc0" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_dist_iff.png" alt = "uniaxial_sensitivity_dist_iff.png" / >
< / p >
< p > < span class = "figure-number" > Figure 11: < / span > Sensitivity to disturbance once the IFF controller is applied to the system (< a href = "./figs/uniaxial_sensitivity_dist_iff.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_dist_iff.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org6419cf2" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_dist_stages_iff.png" alt = "uniaxial_sensitivity_dist_stages_iff.png" / >
< / p >
< p > < span class = "figure-number" > Figure 12: < / span > Sensitivity to force disturbances in various stages when IFF is applied (< a href = "./figs/uniaxial_sensitivity_dist_stages_iff.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_dist_stages_iff.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org9340e78" class = "outline-3" >
< h3 id = "org9340e78" > < span class = "section-number-3" > 3.4< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-4" >
2021-02-20 23:09:27 +01:00
< div id = "org76b84bd" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_plant_iff_damped.png" alt = "uniaxial_plant_iff_damped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 13: < / span > Damped Plant after IFF is applied (< a href = "./figs/uniaxial_plant_iff_damped.png" > png< / a > , < a href = "./figs/uniaxial_plant_iff_damped.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org767511f" class = "outline-3" >
< h3 id = "org767511f" > < span class = "section-number-3" > 3.5< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-3-5" >
2021-02-20 23:09:27 +01:00
< div class = "important" id = "orgc354db3" >
2020-02-25 18:10:20 +01:00
< p >
Integral Force Feedback:
< / p >
< / div >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgc37d268" class = "outline-2" >
< h2 id = "orgc37d268" > < span class = "section-number-2" > 4< / span > Relative Motion Control< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-4" >
< p >
2021-02-20 23:09:27 +01:00
< a id = "org9900890" > < / a >
2020-02-25 18:10:20 +01:00
< / p >
< p >
In the Relative Motion Control (RMC), a derivative feedback is applied between the measured actuator displacement to the actuator force input.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "org03a9a5a" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-model-nass-flexible-rmc.png" alt = "uniaxial-model-nass-flexible-rmc.png" / >
< / p >
< p > < span class = "figure-number" > Figure 14: < / span > Uniaxial RMC Control Schematic< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org85632f8" class = "outline-3" >
< h3 id = "org85632f8" > < span class = "section-number-3" > 4.1< / span > Control Design< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Let’ s look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "org1c13fb0" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_rmc_plant.png" alt = "uniaxial_rmc_plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 15: < / span > Transfer function from forces applied in the legs to leg displacement sensor (< a href = "./figs/uniaxial_rmc_plant.png" > png< / a > , < a href = "./figs/uniaxial_rmc_plant.pdf" > pdf< / a > )< / p >
< / div >
< p >
The Relative Motion Controller is defined below.
A Low pass Filter is added to make the controller transfer function proper.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K_rmc = s< span class = "org-type" > *< / span > 50000< span class = "org-type" > /< / span > (1 < span class = "org-type" > +< / span > s< span class = "org-type" > /< / span > 2< span class = "org-type" > /< / span > < span class = "org-constant" > pi< / span > < span class = "org-type" > /< / span > 10000);
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org185c5bb" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_rmc_open_loop.png" alt = "uniaxial_rmc_open_loop.png" / >
< / p >
< p > < span class = "figure-number" > Figure 16: < / span > Loop Gain for the Integral Force Feedback (< a href = "./figs/uniaxial_rmc_open_loop.png" > png< / a > , < a href = "./figs/uniaxial_rmc_open_loop.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org94bcd25" class = "outline-3" >
< h3 id = "org94bcd25" > < span class = "section-number-3" > 4.2< / span > Identification< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-2" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
And initialize the controllers.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
K_iff = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
K_rmc = < span class = "org-type" > -< / span > K_rmc;
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
K_dvf = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Options for Linearized< / span > < / span >
options = linearizeOptions;
options.SampleTime = 0;
2020-02-25 18:10:20 +01:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'sim_nano_station_uniaxial'< / span > ;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
io< span class = "org-type" > (1) < / span > = linio([mdl, < span class = "org-string" > '/Dw'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Ground Motion< / span >
io< span class = "org-type" > (2) < / span > = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied on the sample< / span >
io< span class = "org-type" > (3) < / span > = linio([mdl, < span class = "org-string" > '/Fnl'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied by the NASS< / span >
io< span class = "org-type" > (4) < / span > = linio([mdl, < span class = "org-string" > '/Fdty'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Ty< / span >
io< span class = "org-type" > (5) < / span > = linio([mdl, < span class = "org-string" > '/Fdrz'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Rz< / span >
io< span class = "org-type" > (6) < / span > = linio([mdl, < span class = "org-string" > '/Dsm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of the sample< / span >
io< span class = "org-type" > (7) < / span > = linio([mdl, < span class = "org-string" > '/Fnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Force sensor in NASS's legs< / span >
io< span class = "org-type" > (8) < / span > = linio([mdl, < span class = "org-string" > '/Dnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of NASS's legs< / span >
io< span class = "org-type" > (9) < / span > = linio([mdl, < span class = "org-string" > '/Dgm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Absolute displacement of the granite< / span >
io< span class = "org-type" > (10) < / span > = linio([mdl, < span class = "org-string" > '/Vlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Measured absolute velocity of the top NASS platform< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Run the linearization< / span > < / span >
G_rmc = linearize(mdl, io, options);
G_rmc.InputName = {< span class = "org-string" > 'Dw'< / span > , ...< span class = "org-comment" > % Ground Motion [m]< / span >
< span class = "org-string" > 'Fs'< / span > , ...< span class = "org-comment" > % Force Applied on Sample [N]< / span >
< span class = "org-string" > 'Fn'< / span > , ...< span class = "org-comment" > % Force applied by NASS [N]< / span >
< span class = "org-string" > 'Fty'< / span > , ...< span class = "org-comment" > % Parasitic Force Ty [N]< / span >
< span class = "org-string" > 'Frz'< / span > }; < span class = "org-comment" > % Parasitic Force Rz [N]< / span >
G_rmc.OutputName = {< span class = "org-string" > 'D'< / span > , ...< span class = "org-comment" > % Measured sample displacement x.r.t. granite [m]< / span >
< span class = "org-string" > 'Fnm'< / span > , ...< span class = "org-comment" > % Force Sensor in NASS [N]< / span >
< span class = "org-string" > 'Dnm'< / span > , ...< span class = "org-comment" > % Displacement Sensor in NASS [m]< / span >
< span class = "org-string" > 'Dgm'< / span > , ...< span class = "org-comment" > % Asbolute displacement of Granite [m]< / span >
< span class = "org-string" > 'Vlm'< / span > }; ...< span class = "org-comment" > % Absolute Velocity of NASS [m/s]< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org66fd58c" class = "outline-3" >
< h3 id = "org66fd58c" > < span class = "section-number-3" > 4.3< / span > Sensitivity to Disturbance< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-3" >
2021-02-20 23:09:27 +01:00
< div id = "org63acb0a" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_dist_rmc.png" alt = "uniaxial_sensitivity_dist_rmc.png" / >
< / p >
< p > < span class = "figure-number" > Figure 17: < / span > Sensitivity to disturbance once the RMC controller is applied to the system (< a href = "./figs/uniaxial_sensitivity_dist_rmc.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_dist_rmc.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org281dbea" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_dist_stages_rmc.png" alt = "uniaxial_sensitivity_dist_stages_rmc.png" / >
< / p >
< p > < span class = "figure-number" > Figure 18: < / span > Sensitivity to force disturbances in various stages when RMC is applied (< a href = "./figs/uniaxial_sensitivity_dist_stages_rmc.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_dist_stages_rmc.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgcefaa09" class = "outline-3" >
< h3 id = "orgcefaa09" > < span class = "section-number-3" > 4.4< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-4" >
2021-02-20 23:09:27 +01:00
< div id = "org1096141" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_plant_rmc_damped.png" alt = "uniaxial_plant_rmc_damped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 19: < / span > Damped Plant after RMC is applied (< a href = "./figs/uniaxial_plant_rmc_damped.png" > png< / a > , < a href = "./figs/uniaxial_plant_rmc_damped.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org5575d52" class = "outline-3" >
< h3 id = "org5575d52" > < span class = "section-number-3" > 4.5< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-4-5" >
2021-02-20 23:09:27 +01:00
< div class = "important" id = "org2558429" >
2020-02-25 18:10:20 +01:00
< p >
Relative Motion Control:
< / p >
< / div >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgd2e652f" class = "outline-2" >
< h2 id = "orgd2e652f" > < span class = "section-number-2" > 5< / span > Direct Velocity Feedback< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-5" >
< p >
2021-02-20 23:09:27 +01:00
< a id = "org1dfd6d8" > < / a >
2020-02-25 18:10:20 +01:00
< / p >
< p >
In the Relative Motion Control (RMC), a feedback is applied between the measured velocity of the platform to the actuator force input.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "org62966b3" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-model-nass-flexible-dvf.png" alt = "uniaxial-model-nass-flexible-dvf.png" / >
< / p >
< p > < span class = "figure-number" > Figure 20: < / span > Uniaxial DVF Control Schematic< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgf25c764" class = "outline-3" >
< h3 id = "orgf25c764" > < span class = "section-number-3" > 5.1< / span > Control Design< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orga7e23bd" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_dvf_plant.png" alt = "uniaxial_dvf_plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 21: < / span > Transfer function from forces applied in the legs to leg velocity sensor (< a href = "./figs/uniaxial_dvf_plant.png" > png< / a > , < a href = "./figs/uniaxial_dvf_plant.pdf" > pdf< / a > )< / p >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K_dvf = tf(5e4);
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "orgbfe8afa" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_dvf_loop_gain.png" alt = "uniaxial_dvf_loop_gain.png" / >
< / p >
< p > < span class = "figure-number" > Figure 22: < / span > Transfer function from forces applied in the legs to leg velocity sensor (< a href = "./figs/uniaxial_dvf_loop_gain.png" > png< / a > , < a href = "./figs/uniaxial_dvf_loop_gain.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org33c65e2" class = "outline-3" >
< h3 id = "org33c65e2" > < span class = "section-number-3" > 5.2< / span > Identification< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-2" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
And initialize the controllers.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
K_iff = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
K_rmc = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
K_dvf = < span class = "org-type" > -< / span > K_dvf;
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Options for Linearized< / span > < / span >
options = linearizeOptions;
options.SampleTime = 0;
2020-02-25 18:10:20 +01:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'sim_nano_station_uniaxial'< / span > ;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
io< span class = "org-type" > (1) < / span > = linio([mdl, < span class = "org-string" > '/Dw'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Ground Motion< / span >
io< span class = "org-type" > (2) < / span > = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied on the sample< / span >
io< span class = "org-type" > (3) < / span > = linio([mdl, < span class = "org-string" > '/Fnl'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied by the NASS< / span >
io< span class = "org-type" > (4) < / span > = linio([mdl, < span class = "org-string" > '/Fdty'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Ty< / span >
io< span class = "org-type" > (5) < / span > = linio([mdl, < span class = "org-string" > '/Fdrz'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Rz< / span >
io< span class = "org-type" > (6) < / span > = linio([mdl, < span class = "org-string" > '/Dsm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of the sample< / span >
io< span class = "org-type" > (7) < / span > = linio([mdl, < span class = "org-string" > '/Fnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Force sensor in NASS's legs< / span >
io< span class = "org-type" > (8) < / span > = linio([mdl, < span class = "org-string" > '/Dnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of NASS's legs< / span >
io< span class = "org-type" > (9) < / span > = linio([mdl, < span class = "org-string" > '/Dgm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Absolute displacement of the granite< / span >
io< span class = "org-type" > (10) < / span > = linio([mdl, < span class = "org-string" > '/Vlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Measured absolute velocity of the top NASS platform< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Run the linearization< / span > < / span >
G_dvf = linearize(mdl, io, options);
G_dvf.InputName = {< span class = "org-string" > 'Dw'< / span > , ...< span class = "org-comment" > % Ground Motion [m]< / span >
< span class = "org-string" > 'Fs'< / span > , ...< span class = "org-comment" > % Force Applied on Sample [N]< / span >
< span class = "org-string" > 'Fn'< / span > , ...< span class = "org-comment" > % Force applied by NASS [N]< / span >
< span class = "org-string" > 'Fty'< / span > , ...< span class = "org-comment" > % Parasitic Force Ty [N]< / span >
< span class = "org-string" > 'Frz'< / span > }; < span class = "org-comment" > % Parasitic Force Rz [N]< / span >
G_dvf.OutputName = {< span class = "org-string" > 'D'< / span > , ...< span class = "org-comment" > % Measured sample displacement x.r.t. granite [m]< / span >
< span class = "org-string" > 'Fnm'< / span > , ...< span class = "org-comment" > % Force Sensor in NASS [N]< / span >
< span class = "org-string" > 'Dnm'< / span > , ...< span class = "org-comment" > % Displacement Sensor in NASS [m]< / span >
< span class = "org-string" > 'Dgm'< / span > , ...< span class = "org-comment" > % Asbolute displacement of Granite [m]< / span >
< span class = "org-string" > 'Vlm'< / span > }; ...< span class = "org-comment" > % Absolute Velocity of NASS [m/s]< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org0efcd5e" class = "outline-3" >
< h3 id = "org0efcd5e" > < span class = "section-number-3" > 5.3< / span > Sensitivity to Disturbance< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-3" >
2021-02-20 23:09:27 +01:00
< div id = "org8c8602d" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_dist_dvf.png" alt = "uniaxial_sensitivity_dist_dvf.png" / >
< / p >
< p > < span class = "figure-number" > Figure 23: < / span > Sensitivity to disturbance once the DVF controller is applied to the system (< a href = "./figs/uniaxial_sensitivity_dist_dvf.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_dist_dvf.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org6e6eefc" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_dist_stages_dvf.png" alt = "uniaxial_sensitivity_dist_stages_dvf.png" / >
< / p >
< p > < span class = "figure-number" > Figure 24: < / span > Sensitivity to force disturbances in various stages when DVF is applied (< a href = "./figs/uniaxial_sensitivity_dist_stages_dvf.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_dist_stages_dvf.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgd64cbe0" class = "outline-3" >
< h3 id = "orgd64cbe0" > < span class = "section-number-3" > 5.4< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-4" >
2021-02-20 23:09:27 +01:00
< div id = "org378b922" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_plant_dvf_damped.png" alt = "uniaxial_plant_dvf_damped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 25: < / span > Damped Plant after DVF is applied (< a href = "./figs/uniaxial_plant_dvf_damped.png" > png< / a > , < a href = "./figs/uniaxial_plant_dvf_damped.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org1815c13" class = "outline-3" >
< h3 id = "org1815c13" > < span class = "section-number-3" > 5.5< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-5-5" >
2021-02-20 23:09:27 +01:00
< div class = "important" id = "orga12f388" >
2020-02-25 18:10:20 +01:00
< p >
Direct Velocity Feedback:
< / p >
< / div >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgc4e46cd" class = "outline-2" >
< h2 id = "orgc4e46cd" > < span class = "section-number-2" > 6< / span > With Cedrat Piezo-electric Actuators< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-6" >
< p >
2021-02-20 23:09:27 +01:00
< a id = "orga4be216" > < / a >
2020-02-25 18:10:20 +01:00
< / p >
< p >
2021-02-20 23:09:27 +01:00
The model used for the Cedrat actuator is shown in figure < a href = "#org789f7bf" > 26< / a > .
2020-02-25 18:10:20 +01:00
< / p >
2021-02-20 23:09:27 +01:00
< div id = "org789f7bf" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/cedrat-uniaxial-actuator.png" alt = "cedrat-uniaxial-actuator.png" / >
< / p >
< p > < span class = "figure-number" > Figure 26: < / span > Schematic of the model used for the Cedrat Actuator< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgabcef1d" class = "outline-3" >
< h3 id = "orgabcef1d" > < span class = "section-number-3" > 6.1< / span > Identification< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-6-1" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeCedratPiezo();
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
And initialize the controllers.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
K_iff = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
K_rmc = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
K_dvf = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
We identify the dynamics of the system.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Options for Linearized< / span > < / span >
options = linearizeOptions;
options.SampleTime = 0;
2020-02-25 18:10:20 +01:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'sim_nano_station_uniaxial_cedrat_bis'< / span > ;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
The inputs and outputs are defined below and corresponds to the name of simulink blocks.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
io< span class = "org-type" > (1) < / span > = linio([mdl, < span class = "org-string" > '/Dw'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Ground Motion< / span >
io< span class = "org-type" > (2) < / span > = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied on the sample< / span >
io< span class = "org-type" > (3) < / span > = linio([mdl, < span class = "org-string" > '/Fnl'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied by the NASS< / span >
io< span class = "org-type" > (4) < / span > = linio([mdl, < span class = "org-string" > '/Fdty'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Ty< / span >
io< span class = "org-type" > (5) < / span > = linio([mdl, < span class = "org-string" > '/Fdrz'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Rz< / span >
io< span class = "org-type" > (6) < / span > = linio([mdl, < span class = "org-string" > '/Dsm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of the sample< / span >
io< span class = "org-type" > (7) < / span > = linio([mdl, < span class = "org-string" > '/Fnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Force sensor in NASS's legs< / span >
io< span class = "org-type" > (8) < / span > = linio([mdl, < span class = "org-string" > '/Dnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of NASS's legs< / span >
io< span class = "org-type" > (9) < / span > = linio([mdl, < span class = "org-string" > '/Dgm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Absolute displacement of the granite< / span >
io< span class = "org-type" > (10) < / span > = linio([mdl, < span class = "org-string" > '/Vlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Measured absolute velocity of the top NASS platform< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Finally, we use the < code > linearize< / code > Matlab function to extract a state space model from the simscape model.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Run the linearization< / span > < / span >
G = linearize(mdl, io, options);
G.InputName = {< span class = "org-string" > 'Dw'< / span > , ...< span class = "org-comment" > % Ground Motion [m]< / span >
< span class = "org-string" > 'Fs'< / span > , ...< span class = "org-comment" > % Force Applied on Sample [N]< / span >
< span class = "org-string" > 'Fn'< / span > , ...< span class = "org-comment" > % Force applied by NASS [N]< / span >
< span class = "org-string" > 'Fty'< / span > , ...< span class = "org-comment" > % Parasitic Force Ty [N]< / span >
< span class = "org-string" > 'Frz'< / span > }; < span class = "org-comment" > % Parasitic Force Rz [N]< / span >
G.OutputName = {< span class = "org-string" > 'D'< / span > , ...< span class = "org-comment" > % Measured sample displacement x.r.t. granite [m]< / span >
< span class = "org-string" > 'Fnm'< / span > , ...< span class = "org-comment" > % Force Sensor in NASS [N]< / span >
< span class = "org-string" > 'Dnm'< / span > , ...< span class = "org-comment" > % Displacement Sensor in NASS [m]< / span >
< span class = "org-string" > 'Dgm'< / span > , ...< span class = "org-comment" > % Asbolute displacement of Granite [m]< / span >
< span class = "org-string" > 'Vlm'< / span > }; ...< span class = "org-comment" > % Absolute Velocity of NASS [m/s]< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgfc83707" class = "outline-3" >
< h3 id = "orgfc83707" > < span class = "section-number-3" > 6.2< / span > Control Design< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-6-2" >
< p >
Let’ s look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "orgf530b13" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_cedrat_plant.png" alt = "uniaxial_cedrat_plant.png" / >
< / p >
< p > < span class = "figure-number" > Figure 27: < / span > Transfer function from forces applied in the legs to force sensor (< a href = "./figs/uniaxial_cedrat_plant.png" > png< / a > , < a href = "./figs/uniaxial_cedrat_plant.pdf" > pdf< / a > )< / p >
< / div >
< p >
The controller for each pair of actuator/sensor is:
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K_cedrat = < span class = "org-type" > -< / span > 5000< span class = "org-type" > /< / span > s;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org9768ead" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_cedrat_open_loop.png" alt = "uniaxial_cedrat_open_loop.png" / >
< / p >
< p > < span class = "figure-number" > Figure 28: < / span > Loop Gain for the Integral Force Feedback (< a href = "./figs/uniaxial_cedrat_open_loop.png" > png< / a > , < a href = "./figs/uniaxial_cedrat_open_loop.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org310cc2a" class = "outline-3" >
< h3 id = "org310cc2a" > < span class = "section-number-3" > 6.3< / span > Identification< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-6-3" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'piezo'< / span > );
initializeCedratPiezo();
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
All the controllers are set to 0.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
K_iff = < span class = "org-type" > -< / span > K_cedrat;
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
K_rmc = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
K_dvf = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Options for Linearized< / span > < / span >
options = linearizeOptions;
options.SampleTime = 0;
2020-02-25 18:10:20 +01:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'sim_nano_station_uniaxial_cedrat_bis'< / span > ;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
io< span class = "org-type" > (1) < / span > = linio([mdl, < span class = "org-string" > '/Dw'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Ground Motion< / span >
io< span class = "org-type" > (2) < / span > = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied on the sample< / span >
io< span class = "org-type" > (3) < / span > = linio([mdl, < span class = "org-string" > '/Fnl'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied by the NASS< / span >
io< span class = "org-type" > (4) < / span > = linio([mdl, < span class = "org-string" > '/Fdty'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Ty< / span >
io< span class = "org-type" > (5) < / span > = linio([mdl, < span class = "org-string" > '/Fdrz'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Rz< / span >
io< span class = "org-type" > (6) < / span > = linio([mdl, < span class = "org-string" > '/Dsm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of the sample< / span >
io< span class = "org-type" > (7) < / span > = linio([mdl, < span class = "org-string" > '/Fnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Force sensor in NASS's legs< / span >
io< span class = "org-type" > (8) < / span > = linio([mdl, < span class = "org-string" > '/Dnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of NASS's legs< / span >
io< span class = "org-type" > (9) < / span > = linio([mdl, < span class = "org-string" > '/Dgm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Absolute displacement of the granite< / span >
io< span class = "org-type" > (10) < / span > = linio([mdl, < span class = "org-string" > '/Vlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Measured absolute velocity of the top NASS platform< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Run the linearization< / span > < / span >
G_cedrat = linearize(mdl, io, options);
G_cedrat.InputName = {< span class = "org-string" > 'Dw'< / span > , ...< span class = "org-comment" > % Ground Motion [m]< / span >
< span class = "org-string" > 'Fs'< / span > , ...< span class = "org-comment" > % Force Applied on Sample [N]< / span >
< span class = "org-string" > 'Fn'< / span > , ...< span class = "org-comment" > % Force applied by NASS [N]< / span >
< span class = "org-string" > 'Fty'< / span > , ...< span class = "org-comment" > % Parasitic Force Ty [N]< / span >
< span class = "org-string" > 'Frz'< / span > }; < span class = "org-comment" > % Parasitic Force Rz [N]< / span >
G_cedrat.OutputName = {< span class = "org-string" > 'D'< / span > , ...< span class = "org-comment" > % Measured sample displacement x.r.t. granite [m]< / span >
< span class = "org-string" > 'Fnm'< / span > , ...< span class = "org-comment" > % Force Sensor in NASS [N]< / span >
< span class = "org-string" > 'Dnm'< / span > , ...< span class = "org-comment" > % Displacement Sensor in NASS [m]< / span >
< span class = "org-string" > 'Dgm'< / span > , ...< span class = "org-comment" > % Asbolute displacement of Granite [m]< / span >
< span class = "org-string" > 'Vlm'< / span > }; ...< span class = "org-comment" > % Absolute Velocity of NASS [m/s]< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-comment" > % save('./mat/uniaxial_plants.mat', 'G_cedrat', '-append');< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org4bacd78" class = "outline-3" >
< h3 id = "org4bacd78" > < span class = "section-number-3" > 6.4< / span > Sensitivity to Disturbance< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-6-4" >
2021-02-20 23:09:27 +01:00
< div id = "orgec532b5" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_dist_cedrat.png" alt = "uniaxial_sensitivity_dist_cedrat.png" / >
< / p >
< p > < span class = "figure-number" > Figure 29: < / span > Sensitivity to disturbance once the CEDRAT controller is applied to the system (< a href = "./figs/uniaxial_sensitivity_dist_cedrat.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_dist_cedrat.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org038f961" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_dist_stages_cedrat.png" alt = "uniaxial_sensitivity_dist_stages_cedrat.png" / >
< / p >
< p > < span class = "figure-number" > Figure 30: < / span > Sensitivity to force disturbances in various stages when CEDRAT is applied (< a href = "./figs/uniaxial_sensitivity_dist_stages_cedrat.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_dist_stages_cedrat.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgeed7d37" class = "outline-3" >
< h3 id = "orgeed7d37" > < span class = "section-number-3" > 6.5< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-6-5" >
2021-02-20 23:09:27 +01:00
< div id = "org9898063" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_plant_cedrat_damped.png" alt = "uniaxial_plant_cedrat_damped.png" / >
< / p >
< p > < span class = "figure-number" > Figure 31: < / span > Damped Plant after CEDRAT is applied (< a href = "./figs/uniaxial_plant_cedrat_damped.png" > png< / a > , < a href = "./figs/uniaxial_plant_cedrat_damped.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org9308ceb" class = "outline-3" >
< h3 id = "org9308ceb" > < span class = "section-number-3" > 6.6< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-6-6" >
2021-02-20 23:09:27 +01:00
< div class = "important" id = "org6c33fe4" >
2020-02-25 18:10:20 +01:00
< p >
This gives similar results than with a classical force sensor.
< / p >
< / div >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgb4f2f53" class = "outline-2" >
< h2 id = "orgb4f2f53" > < span class = "section-number-2" > 7< / span > Comparison of Active Damping Techniques< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-7" >
< p >
2021-02-20 23:09:27 +01:00
< a id = "org5701ad3" > < / a >
2020-02-25 18:10:20 +01:00
< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgdd804dc" class = "outline-3" >
< h3 id = "orgdd804dc" > < span class = "section-number-3" > 7.1< / span > Load the plants< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-7-1" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > , < span class = "org-string" > 'G_iff'< / span > , < span class = "org-string" > 'G_rmc'< / span > , < span class = "org-string" > 'G_dvf'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orga6f1b82" class = "outline-3" >
< h3 id = "orga6f1b82" > < span class = "section-number-3" > 7.2< / span > Sensitivity to Disturbance< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-7-2" >
2021-02-20 23:09:27 +01:00
< div id = "org0865b00" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_ground_motion.png" alt = "uniaxial_sensitivity_ground_motion.png" / >
< / p >
< p > < span class = "figure-number" > Figure 32: < / span > Sensitivity to Ground Motion - Comparison (< a href = "./figs/uniaxial_sensitivity_ground_motion.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_ground_motion.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org8787ded" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_direct_force.png" alt = "uniaxial_sensitivity_direct_force.png" / >
< / p >
< p > < span class = "figure-number" > Figure 33: < / span > Sensitivity to disturbance - Comparison (< a href = "./figs/uniaxial_sensitivity_direct_force.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_direct_force.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org6c4e606" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_fty.png" alt = "uniaxial_sensitivity_fty.png" / >
< / p >
< p > < span class = "figure-number" > Figure 34: < / span > Sensitivity to force disturbances - Comparison (< a href = "./figs/uniaxial_sensitivity_fty.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_fty.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org63b4b1b" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_sensitivity_frz.png" alt = "uniaxial_sensitivity_frz.png" / >
< / p >
< p > < span class = "figure-number" > Figure 35: < / span > Sensitivity to force disturbances - Comparison (< a href = "./figs/uniaxial_sensitivity_frz.png" > png< / a > , < a href = "./figs/uniaxial_sensitivity_frz.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgbdb91c3" class = "outline-3" >
< h3 id = "orgbdb91c3" > < span class = "section-number-3" > 7.3< / span > Noise Budget< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-7-3" >
< p >
We first load the measured PSD of the disturbance.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/disturbances_dist_psd.mat'< / span > , < span class = "org-string" > 'dist_f'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
The effect of these disturbances on the distance \(D\) is computed for all active damping techniques.
2021-02-20 23:09:27 +01:00
We then compute the Cumulative Amplitude Spectrum (figure < a href = "#orgb38f8a7" > 36< / a > ).
2020-02-25 18:10:20 +01:00
< / p >
2021-02-20 23:09:27 +01:00
< div id = "orgb38f8a7" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-comp-cas-dist.png" alt = "uniaxial-comp-cas-dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 36: < / span > Comparison of the Cumulative Amplitude Spectrum of \(D\) for different active damping techniques (< a href = "./figs/uniaxial-comp-cas-dist.png" > png< / a > , < a href = "./figs/uniaxial-comp-cas-dist.pdf" > pdf< / a > )< / p >
< / div >
< p >
The obtained Root Mean Square Value for each active damping technique is shown below.
< / p >
2021-02-20 23:09:27 +01:00
< table id = "org7251f08" border = "2" cellspacing = "0" cellpadding = "6" rules = "groups" frame = "hsides" >
2020-02-25 18:10:20 +01:00
< caption class = "t-above" > < span class = "table-number" > Table 1:< / span > Obtain Root Mean Square value of \(D\) for each Active Damping Technique applied< / caption >
< colgroup >
< col class = "org-left" / >
< col class = "org-right" / >
< / colgroup >
< thead >
< tr >
< th scope = "col" class = "org-left" >   < / th >
< th scope = "col" class = "org-right" > D [m rms]< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "org-left" > OL< / td >
< td class = "org-right" > 3.38e-06< / td >
< / tr >
< tr >
< td class = "org-left" > IFF< / td >
< td class = "org-right" > 3.40e-06< / td >
< / tr >
< tr >
< td class = "org-left" > RMC< / td >
< td class = "org-right" > 3.37e-06< / td >
< / tr >
< tr >
< td class = "org-left" > DVF< / td >
< td class = "org-right" > 3.38e-06< / td >
< / tr >
< / tbody >
< / table >
< p >
It is important to note that the effect of direct forces applied to the sample are not taken into account here.
< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org0d80a1a" class = "outline-3" >
< h3 id = "org0d80a1a" > < span class = "section-number-3" > 7.4< / span > Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-7-4" >
2021-02-20 23:09:27 +01:00
< div id = "org930d315" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_plant_damped_comp.png" alt = "uniaxial_plant_damped_comp.png" / >
< / p >
< p > < span class = "figure-number" > Figure 37: < / span > Damped Plant - Comparison (< a href = "./figs/uniaxial_plant_damped_comp.png" > png< / a > , < a href = "./figs/uniaxial_plant_damped_comp.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org7b8daa3" class = "outline-3" >
< h3 id = "org7b8daa3" > < span class = "section-number-3" > 7.5< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-7-5" >
2021-02-20 23:09:27 +01:00
< table id = "org5c958ab" border = "2" cellspacing = "0" cellpadding = "6" rules = "groups" frame = "hsides" >
2020-02-25 18:10:20 +01:00
< caption class = "t-above" > < span class = "table-number" > Table 2:< / span > Comparison of proposed active damping techniques< / caption >
< colgroup >
< col class = "org-left" / >
< col class = "org-left" / >
< col class = "org-left" / >
< col class = "org-left" / >
< / colgroup >
< thead >
< tr >
< th scope = "col" class = "org-left" >   < / th >
< th scope = "col" class = "org-left" > IFF< / th >
< th scope = "col" class = "org-left" > RMC< / th >
< th scope = "col" class = "org-left" > DVF< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td class = "org-left" > Sensor Type< / td >
< td class = "org-left" > Force sensor< / td >
< td class = "org-left" > Relative Motion< / td >
< td class = "org-left" > Inertial< / td >
< / tr >
< tr >
< td class = "org-left" > Guaranteed Stability< / td >
< td class = "org-left" > +< / td >
< td class = "org-left" > +< / td >
< td class = "org-left" > -< / td >
< / tr >
< tr >
< td class = "org-left" > Sensitivity (\(D_w\))< / td >
< td class = "org-left" > -< / td >
< td class = "org-left" > +< / td >
< td class = "org-left" > -< / td >
< / tr >
< tr >
< td class = "org-left" > Sensitivity (\(F_s\))< / td >
< td class = "org-left" > - (at low freq)< / td >
< td class = "org-left" > +< / td >
< td class = "org-left" > +< / td >
< / tr >
< tr >
< td class = "org-left" > Sensitivity (\(F_{ty,rz}\))< / td >
< td class = "org-left" > +< / td >
< td class = "org-left" > -< / td >
< td class = "org-left" > +< / td >
< / tr >
< tr >
< td class = "org-left" > Overall RMS of \(D\)< / td >
< td class = "org-left" > =< / td >
< td class = "org-left" > =< / td >
< td class = "org-left" > =< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgdb9e0e5" class = "outline-2" >
< h2 id = "orgdb9e0e5" > < span class = "section-number-2" > 8< / span > Voice Coil< / h2 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-2" id = "text-8" >
< p >
2021-02-20 23:09:27 +01:00
< a id = "org030260d" > < / a >
2020-02-25 18:10:20 +01:00
< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org0c7bce4" class = "outline-3" >
< h3 id = "org0c7bce4" > < span class = "section-number-3" > 8.1< / span > Init< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-8-1" >
< p >
We initialize all the stages with the default parameters.
The nano-hexapod is an hexapod with voice coils and the sample has a mass of 50kg.
< / p >
< p >
All the controllers are set to 0 (Open Loop).
< / p >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org5dd6e8d" class = "outline-3" >
< h3 id = "org5dd6e8d" > < span class = "section-number-3" > 8.2< / span > Identification< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-8-2" >
< p >
We identify the dynamics of the system.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Options for Linearized< / span > < / span >
options = linearizeOptions;
options.SampleTime = 0;
2020-02-25 18:10:20 +01:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'sim_nano_station_uniaxial'< / span > ;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
The inputs and outputs are defined below and corresponds to the name of simulink blocks.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
io< span class = "org-type" > (1) < / span > = linio([mdl, < span class = "org-string" > '/Dw'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Ground Motion< / span >
io< span class = "org-type" > (2) < / span > = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied on the sample< / span >
io< span class = "org-type" > (3) < / span > = linio([mdl, < span class = "org-string" > '/Fnl'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied by the NASS< / span >
io< span class = "org-type" > (4) < / span > = linio([mdl, < span class = "org-string" > '/Fdty'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Ty< / span >
io< span class = "org-type" > (5) < / span > = linio([mdl, < span class = "org-string" > '/Fdrz'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Rz< / span >
io< span class = "org-type" > (6) < / span > = linio([mdl, < span class = "org-string" > '/Dsm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of the sample< / span >
io< span class = "org-type" > (7) < / span > = linio([mdl, < span class = "org-string" > '/Fnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Force sensor in NASS's legs< / span >
io< span class = "org-type" > (8) < / span > = linio([mdl, < span class = "org-string" > '/Dnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of NASS's legs< / span >
io< span class = "org-type" > (9) < / span > = linio([mdl, < span class = "org-string" > '/Dgm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Absolute displacement of the granite< / span >
io< span class = "org-type" > (10) < / span > = linio([mdl, < span class = "org-string" > '/Vlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Measured absolute velocity of the top NASS platform< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Finally, we use the < code > linearize< / code > Matlab function to extract a state space model from the simscape model.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Run the linearization< / span > < / span >
G_vc = linearize(mdl, io, options);
G_vc.InputName = {< span class = "org-string" > 'Dw'< / span > , ...< span class = "org-comment" > % Ground Motion [m]< / span >
< span class = "org-string" > 'Fs'< / span > , ...< span class = "org-comment" > % Force Applied on Sample [N]< / span >
< span class = "org-string" > 'Fn'< / span > , ...< span class = "org-comment" > % Force applied by NASS [N]< / span >
< span class = "org-string" > 'Fty'< / span > , ...< span class = "org-comment" > % Parasitic Force Ty [N]< / span >
< span class = "org-string" > 'Frz'< / span > }; < span class = "org-comment" > % Parasitic Force Rz [N]< / span >
G_vc.OutputName = {< span class = "org-string" > 'D'< / span > , ...< span class = "org-comment" > % Measured sample displacement x.r.t. granite [m]< / span >
< span class = "org-string" > 'Fnm'< / span > , ...< span class = "org-comment" > % Force Sensor in NASS [N]< / span >
< span class = "org-string" > 'Dnm'< / span > , ...< span class = "org-comment" > % Displacement Sensor in NASS [m]< / span >
< span class = "org-string" > 'Dgm'< / span > , ...< span class = "org-comment" > % Asbolute displacement of Granite [m]< / span >
< span class = "org-string" > 'Vlm'< / span > }; ...< span class = "org-comment" > % Absolute Velocity of NASS [m/s]< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
Finally, we save the identified system dynamics for further analysis.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > save(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G_vc'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgf8f1bff" class = "outline-3" >
< h3 id = "orgf8f1bff" > < span class = "section-number-3" > 8.3< / span > Sensitivity to Disturbances< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-8-3" >
< p >
We load the dynamics when using a piezo-electric nano hexapod to compare the results.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/uniaxial_plants.mat'< / span > , < span class = "org-string" > 'G'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
We show several plots representing the sensitivity to disturbances:
< / p >
< ul class = "org-ul" >
2021-02-20 23:09:27 +01:00
< li > in figure < a href = "#org4ad9ed0" > 38< / a > the transfer functions from ground motion \(D_w\) to the sample position \(D\) and the transfer function from direct force on the sample \(F_s\) to the sample position \(D\) are shown< / li >
< li > in figure < a href = "#org2a72b74" > 39< / a > , it is the effect of parasitic forces of the positioning stages (\(F_{ty}\) and \(F_{rz}\)) on the position \(D\) of the sample that are shown< / li >
2020-02-25 18:10:20 +01:00
< / ul >
2021-02-20 23:09:27 +01:00
< div id = "org4ad9ed0" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-sensitivity-vc-disturbances.png" alt = "uniaxial-sensitivity-vc-disturbances.png" / >
< / p >
< p > < span class = "figure-number" > Figure 38: < / span > Sensitivity to disturbances (< a href = "./figs/uniaxial-sensitivity-vc-disturbances.png" > png< / a > , < a href = "./figs/uniaxial-sensitivity-vc-disturbances.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org2a72b74" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-sensitivity-vc-force-dist.png" alt = "uniaxial-sensitivity-vc-force-dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 39: < / span > Sensitivity to disturbances (< a href = "./figs/uniaxial-sensitivity-vc-force-dist.png" > png< / a > , < a href = "./figs/uniaxial-sensitivity-vc-force-dist.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org98ab51d" class = "outline-3" >
< h3 id = "org98ab51d" > < span class = "section-number-3" > 8.4< / span > Noise Budget< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-8-4" >
< p >
We first load the measured PSD of the disturbance.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > load(< span class = "org-string" > './mat/disturbances_dist_psd.mat'< / span > , < span class = "org-string" > 'dist_f'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
The effect of these disturbances on the distance \(D\) is computed below.
2021-02-20 23:09:27 +01:00
The PSD of the obtain distance \(D\) due to each of the perturbation is shown in figure < a href = "#org67f34d4" > 40< / a > and the Cumulative Amplitude Spectrum is shown in figure < a href = "#org0bbabe6" > 41< / a > .
2020-02-25 18:10:20 +01:00
< / p >
< p >
2021-02-20 23:09:27 +01:00
The Root Mean Square value of the obtained displacement \(D\) is computed below and can be determined from the figure < a href = "#org0bbabe6" > 41< / a > .
2020-02-25 18:10:20 +01:00
< / p >
< pre class = "example" >
4.8793e-06
< / pre >
2021-02-20 23:09:27 +01:00
< div id = "org67f34d4" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-vc-psd-dist.png" alt = "uniaxial-vc-psd-dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 40: < / span > PSD of the displacement \(D\) due to disturbances (< a href = "./figs/uniaxial-vc-psd-dist.png" > png< / a > , < a href = "./figs/uniaxial-vc-psd-dist.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org0bbabe6" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-vc-cas-dist.png" alt = "uniaxial-vc-cas-dist.png" / >
< / p >
< p > < span class = "figure-number" > Figure 41: < / span > CAS of the displacement \(D\) due the disturbances (< a href = "./figs/uniaxial-vc-cas-dist.png" > png< / a > , < a href = "./figs/uniaxial-vc-cas-dist.pdf" > pdf< / a > )< / p >
< / div >
2021-02-20 23:09:27 +01:00
< div class = "important" id = "org58ae450" >
2020-02-25 18:10:20 +01:00
< p >
Even though the RMS value of the displacement \(D\) is lower when using a piezo-electric actuator, the motion is mainly due to high frequency disturbances which are more difficult to control (an higher control bandwidth is required).
< / p >
< p >
Thus, it may be desirable to use voice coil actuators.
< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgcae4469" class = "outline-3" >
< h3 id = "orgcae4469" > < span class = "section-number-3" > 8.5< / span > Integral Force Feedback< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-8-5" >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K_iff = < span class = "org-type" > -< / span > 20< span class = "org-type" > /< / span > s;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "org6b9bcf7" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial_iff_vc_open_loop.png" alt = "uniaxial_iff_vc_open_loop.png" / >
< / p >
< p > < span class = "figure-number" > Figure 42: < / span > Open Loop Transfer Function for IFF control when using a voice coil actuator (< a href = "./figs/uniaxial_iff_vc_open_loop.png" > png< / a > , < a href = "./figs/uniaxial_iff_vc_open_loop.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org130702c" class = "outline-3" >
< h3 id = "org130702c" > < span class = "section-number-3" > 8.6< / span > Identification of the Damped Plant< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-8-6" >
< p >
Let’ s initialize the system prior to identification.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
initializeNanoHexapod(< span class = "org-string" > 'actuator'< / span > , < span class = "org-string" > 'lorentz'< / span > );
initializeSample(< span class = "org-string" > 'mass'< / span > , 50);
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< p >
All the controllers are set to 0.
< / p >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > K = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K'< / span > , < span class = "org-string" > '-append'< / span > );
K_iff = < span class = "org-type" > -< / span > K_iff;
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_iff'< / span > , < span class = "org-string" > '-append'< / span > );
K_rmc = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_rmc'< / span > , < span class = "org-string" > '-append'< / span > );
K_dvf = tf(0);
save(< span class = "org-string" > './mat/controllers_uniaxial.mat'< / span > , < span class = "org-string" > 'K_dvf'< / span > , < span class = "org-string" > '-append'< / span > );
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Options for Linearized< / span > < / span >
options = linearizeOptions;
options.SampleTime = 0;
2020-02-25 18:10:20 +01:00
2021-02-20 23:09:27 +01:00
< span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Name of the Simulink File< / span > < / span >
mdl = < span class = "org-string" > 'sim_nano_station_uniaxial'< / span > ;
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Input/Output definition< / span > < / span >
io< span class = "org-type" > (1) < / span > = linio([mdl, < span class = "org-string" > '/Dw'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Ground Motion< / span >
io< span class = "org-type" > (2) < / span > = linio([mdl, < span class = "org-string" > '/Fs'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied on the sample< / span >
io< span class = "org-type" > (3) < / span > = linio([mdl, < span class = "org-string" > '/Fnl'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Force applied by the NASS< / span >
io< span class = "org-type" > (4) < / span > = linio([mdl, < span class = "org-string" > '/Fdty'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Ty< / span >
io< span class = "org-type" > (5) < / span > = linio([mdl, < span class = "org-string" > '/Fdrz'< / span > ], 1, < span class = "org-string" > 'input'< / span > ); < span class = "org-comment" > % Parasitic force Rz< / span >
io< span class = "org-type" > (6) < / span > = linio([mdl, < span class = "org-string" > '/Dsm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of the sample< / span >
io< span class = "org-type" > (7) < / span > = linio([mdl, < span class = "org-string" > '/Fnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Force sensor in NASS's legs< / span >
io< span class = "org-type" > (8) < / span > = linio([mdl, < span class = "org-string" > '/Dnlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Displacement of NASS's legs< / span >
io< span class = "org-type" > (9) < / span > = linio([mdl, < span class = "org-string" > '/Dgm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Absolute displacement of the granite< / span >
io< span class = "org-type" > (10) < / span > = linio([mdl, < span class = "org-string" > '/Vlm'< / span > ], 1, < span class = "org-string" > 'output'< / span > ); < span class = "org-comment" > % Measured absolute velocity of the top NASS platform< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< div class = "org-src-container" >
2021-02-20 23:09:27 +01:00
< pre class = "src src-matlab" > < span class = "org-matlab-cellbreak" > < span class = "org-comment" > %% Run the linearization< / span > < / span >
G_vc_iff = linearize(mdl, io, options);
G_vc_iff.InputName = {< span class = "org-string" > 'Dw'< / span > , ...< span class = "org-comment" > % Ground Motion [m]< / span >
< span class = "org-string" > 'Fs'< / span > , ...< span class = "org-comment" > % Force Applied on Sample [N]< / span >
< span class = "org-string" > 'Fn'< / span > , ...< span class = "org-comment" > % Force applied by NASS [N]< / span >
< span class = "org-string" > 'Fty'< / span > , ...< span class = "org-comment" > % Parasitic Force Ty [N]< / span >
< span class = "org-string" > 'Frz'< / span > }; < span class = "org-comment" > % Parasitic Force Rz [N]< / span >
G_vc_iff.OutputName = {< span class = "org-string" > 'D'< / span > , ...< span class = "org-comment" > % Measured sample displacement x.r.t. granite [m]< / span >
< span class = "org-string" > 'Fnm'< / span > , ...< span class = "org-comment" > % Force Sensor in NASS [N]< / span >
< span class = "org-string" > 'Dnm'< / span > , ...< span class = "org-comment" > % Displacement Sensor in NASS [m]< / span >
< span class = "org-string" > 'Dgm'< / span > , ...< span class = "org-comment" > % Asbolute displacement of Granite [m]< / span >
< span class = "org-string" > 'Vlm'< / span > }; ...< span class = "org-comment" > % Absolute Velocity of NASS [m/s]< / span >
2020-02-25 18:10:20 +01:00
< / pre >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-orgd002880" class = "outline-3" >
< h3 id = "orgd002880" > < span class = "section-number-3" > 8.7< / span > Noise Budget< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-8-7" >
< p >
We compute the obtain PSD of the displacement \(D\) when using IFF.
< / p >
2021-02-20 23:09:27 +01:00
< div id = "orgb3d6a21" class = "figure" >
2020-02-25 18:10:20 +01:00
< p > < img src = "figs/uniaxial-cas-iff-vc.png" alt = "uniaxial-cas-iff-vc.png" / >
< / p >
< p > < span class = "figure-number" > Figure 43: < / span > CAS of the displacement \(D\) (< a href = "./figs/uniaxial-cas-iff-vc.png" > png< / a > , < a href = "./figs/uniaxial-cas-iff-vc.pdf" > pdf< / a > )< / p >
< / div >
< / div >
< / div >
2021-02-20 23:09:27 +01:00
< div id = "outline-container-org0adc59f" class = "outline-3" >
< h3 id = "org0adc59f" > < span class = "section-number-3" > 8.8< / span > Conclusion< / h3 >
2020-02-25 18:10:20 +01:00
< div class = "outline-text-3" id = "text-8-8" >
2021-02-20 23:09:27 +01:00
< div class = "important" id = "org9c11da6" >
2020-02-25 18:10:20 +01:00
< p >
The use of voice coil actuators would allow a better disturbance rejection for a fixed bandwidth compared with a piezo-electric hexapod.
< / p >
< p >
Similarly, it would require much lower bandwidth to attain the same level of disturbance rejection for \(D\).
< / p >
< / div >
< / div >
< / div >
< / div >
< / div >
< div id = "postamble" class = "status" >
< p class = "author" > Author: Dehaeze Thomas< / p >
2021-02-20 23:09:27 +01:00
< p class = "date" > Created: 2021-02-20 sam. 23:08< / p >
2020-02-25 18:10:20 +01:00
< / div >
< / body >
< / html >