Lot of works on simscape, IFF and DVF

This commit is contained in:
2020-06-10 15:32:59 +02:00
parent ee0363ee59
commit b652aebe59
18 changed files with 2781 additions and 235 deletions

1
matlab/figs-tikz Symbolic link
View File

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

View File

@@ -1,229 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-03-16 lun. 10:52 -->
<!-- 2020-06-10 mer. 10:17 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Matlab Computation</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<meta name="author" content="Thomas Dehaeze" />
<link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
<script src="../js/jquery.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
<script src="../js/jquery.stickytableheaders.min.js"></script>
<script src="../js/readtheorg.js"></script>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
// @license-end
</script>
<script>MathJax = {
tex: {
tags: 'ams',
macros: {bm: ["\\boldsymbol{#1}",1],}
}
};
</script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
@@ -232,11 +30,599 @@
<a accesskey="H" href="../index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Matlab Computation</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org2941be5">1. System Description and Analysis</a>
<ul>
<li><a href="#org4222b45">1.1. System description</a></li>
<li><a href="#org80f8141">1.2. Equations</a></li>
<li><a href="#orgbb90994">1.3. Numerical Values</a></li>
<li><a href="#org3d04be0">1.4. Campbell Diagram</a></li>
<li><a href="#org8144360">1.5. Simscape Model</a></li>
<li><a href="#orga371e09">1.6. Comparison with the model</a></li>
</ul>
</li>
<li><a href="#org912df6c">2. Integral Force Feedback</a>
<ul>
<li><a href="#orge201c80">2.1. Numerical Values</a></li>
<li><a href="#orgbc26950">2.2. Equations</a></li>
<li><a href="#org92d4b18">2.3. Poles and Zeros</a></li>
<li><a href="#orgbb768e3">2.4. Simscape Model</a></li>
<li><a href="#orgdf8d677">2.5. IFF Plant</a></li>
<li><a href="#org3f264f4">2.6. Loop Gain</a></li>
<li><a href="#org7c25fbe">2.7. Root Locus</a></li>
<li><a href="#org82271cf">2.8. Modified IFF</a>
<ul>
<li><a href="#org60bb927">2.8.1. Control Law</a></li>
<li><a href="#org6850379">2.8.2. Loop Gain</a></li>
<li><a href="#org7314eea">2.8.3. Root Locus</a></li>
<li><a href="#orgb4641d2">2.8.4. Optimal Gain</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#orgbdc5c77">3. Direct Velocity Feedback</a>
<ul>
<li><a href="#org3f7448e">3.1. Equations</a></li>
<li><a href="#org84263dc">3.2. Numerical Values</a></li>
<li><a href="#orgbdad8de">3.3. Simscape Model</a></li>
<li><a href="#orge253615">3.4. DVF Plant</a></li>
<li><a href="#orgd61ece4">3.5. Loop Gain</a></li>
<li><a href="#orgce2b090">3.6. Root Locus</a></li>
</ul>
</li>
</ul>
</div>
</div>
<p>
Notations:
</p>
<ul class="org-ul">
<li>\(k\): Actuator&rsquo;s Stiffness [N/m]</li>
<li>\(c\): Actuator&rsquo;s Damping [N/(m/s)]</li>
<li>\(m\): Payload&rsquo;s mass [kg]</li>
<li>\(\omega_0 = \sqrt{\frac{k}{m}}\): Resonance of the (non-rotating) mass-spring system [rad/s]</li>
<li>\(\Omega = \dot{\theta}\): rotation speed [rad/s]</li>
</ul>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<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">&#xa0;</th>
<th scope="col" class="org-left">Mathematical Notation</th>
<th scope="col" class="org-left">Matlab</th>
<th scope="col" class="org-left">Unit</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Actuator Stiffness</td>
<td class="org-left">\(k\)</td>
<td class="org-left"><code>k</code></td>
<td class="org-left">N/m</td>
</tr>
<tr>
<td class="org-left">Actuator Damping</td>
<td class="org-left">\(c\)</td>
<td class="org-left"><code>c</code></td>
<td class="org-left">N/(m/s)</td>
</tr>
</tbody>
</table>
<div id="outline-container-org2941be5" class="outline-2">
<h2 id="org2941be5"><span class="section-number-2">1</span> System Description and Analysis</h2>
<div class="outline-text-2" id="text-1">
<p>
<a id="org72741bf"></a>
</p>
</div>
<div id="outline-container-org4222b45" class="outline-3">
<h3 id="org4222b45"><span class="section-number-3">1.1</span> System description</h3>
<div class="outline-text-3" id="text-1-1">
<p>
The system consists of one 2 degree of freedom translation stage on top of a spindle (figure <a href="#org3ee83a5">1</a>).
</p>
<p>
<a href="figs/rotating_xy_platform.pdf">figs/rotating_xy_platform.pdf</a>
</p>
<p>
The control inputs are the forces applied by the actuators of the translation stage (\(F_u\) and \(F_v\)).
As the translation stage is rotating around the Z axis due to the spindle, the forces are applied along \(u\) and \(v\).
</p>
<p>
The measurement is either the \(x-y\) displacement of the object located on top of the translation stage or the \(u-v\) displacement of the sample with respect to a fixed reference frame.
</p>
</div>
</div>
<div id="outline-container-org80f8141" class="outline-3">
<h3 id="org80f8141"><span class="section-number-3">1.2</span> Equations</h3>
<div class="outline-text-3" id="text-1-2">
<p>
Based on the Figure <a href="#org3ee83a5">1</a>.
</p>
\begin{equation}
\begin{bmatrix} d_u \\ d_v \end{bmatrix} =
\frac{\frac{1}{k}}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2}
\begin{bmatrix}
\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} & 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \\
-2 \frac{\Omega}{\omega_0}\frac{s}{\omega_0} & \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \\
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
</div>
</div>
<div id="outline-container-orgbb90994" class="outline-3">
<h3 id="orgbb90994"><span class="section-number-3">1.3</span> Numerical Values</h3>
<div class="outline-text-3" id="text-1-3">
<div class="org-src-container">
<pre class="src src-matlab">k = 2;
m = 1;
c = 0.05;
xi = c/(2*sqrt(k*m));
w0 = sqrt(k/m);
</pre>
</div>
</div>
</div>
<div id="outline-container-org3d04be0" class="outline-3">
<h3 id="org3d04be0"><span class="section-number-3">1.4</span> Campbell Diagram</h3>
<div class="outline-text-3" id="text-1-4">
<p>
Compute the poles
</p>
<div class="org-src-container">
<pre class="src src-matlab">wrs = linspace(0, 2, 51); % [rad/s]
polesvc = zeros(4, length(wrs));
for i = 1:length(wrs)
wr = wrs(i);
polei = pole(1/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wrs(i)^2)/(w0^2))^2 + (2*wrs(i)*s/(w0^2))^2));
[~, i_sort] = sort(imag(polei));
polesvc(:, i) = polei(i_sort);
end
</pre>
</div>
</div>
</div>
<div id="outline-container-org8144360" class="outline-3">
<h3 id="org8144360"><span class="section-number-3">1.5</span> Simscape Model</h3>
<div class="outline-text-3" id="text-1-5">
<div class="org-src-container">
<pre class="src src-matlab">open('rotating_frame.slx');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">k = 2;
m = 1;
c = 0.05;
xi = c/(2*sqrt(k*m));
w0 = sqrt(k/m);
wr = 0.1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">%% Name of the Simulink File
mdl = 'rotating_frame';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Fu'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Fv'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 1, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 2, 'openoutput'); io_i = io_i + 1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">G = linearize(mdl, io, 0);
%% Input/Output definition
G.InputName = {'Fu', 'Fv'};
G.OutputName = {'du', 'dv'};
</pre>
</div>
</div>
</div>
<div id="outline-container-orga371e09" class="outline-3">
<h3 id="orga371e09"><span class="section-number-3">1.6</span> Comparison with the model</h3>
<div class="outline-text-3" id="text-1-6">
<div class="org-src-container">
<pre class="src src-matlab">Ga = (1/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))^2 + (2*wr*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2), 2*wr*s/(w0^2) ; ...
-2*wr*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2)];
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">figure; bode(G, 'k-', Ga, 'r--')
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org912df6c" class="outline-2">
<h2 id="org912df6c"><span class="section-number-2">2</span> Integral Force Feedback</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-orge201c80" class="outline-3">
<h3 id="orge201c80"><span class="section-number-3">2.1</span> Numerical Values</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-matlab">k = 1;
m = 1;
xi = 0.01;
c = 2*xi*sqrt(k*m);
w0 = sqrt(k/m);
wr = 0.1*w0;
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbc26950" class="outline-3">
<h3 id="orgbc26950"><span class="section-number-3">2.2</span> Equations</h3>
<div class="outline-text-3" id="text-2-2">
<p>
The sensed forces are equal to:
</p>
\begin{equation}
\begin{bmatrix} F_{um} \\ F_{vm} \end{bmatrix} =
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix} - (c s + k)
\begin{bmatrix} d_u \\ d_v \end{bmatrix}
\end{equation}
<div class="important">
\begin{equation}
\begin{bmatrix} F_{um} \\ F_{vm} \end{bmatrix} =
\frac{1}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2}
\begin{bmatrix}
(\frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2}) (\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2}) + (2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0})^2 & - (2 \xi \frac{s}{\omega_0} + 1) 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \\
(2 \xi \frac{s}{\omega_0} + 1) 2 \frac{\Omega}{\omega_0}\frac{s}{\omega_0} & (\frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2}) (\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2}) + (2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0})^2 \\
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
</div>
<div class="org-src-container">
<pre class="src src-matlab">Giffa = 1/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))^2 + (2*wr*s/(w0^2))^2) * ...
[(s^2/w0^2 - wr^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2)) + (2*wr*s/(w0^2))^2, - (2*xi*s/w0 + 1)*2*wr*s/(w0^2) ; ...
(2*xi*s/w0 + 1)*2*wr*s/(w0^2), (s^2/w0^2 - wr^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))+ (2*wr*s/(w0^2))^2];
</pre>
</div>
</div>
</div>
<div id="outline-container-org92d4b18" class="outline-3">
<h3 id="org92d4b18"><span class="section-number-3">2.3</span> Poles and Zeros</h3>
<div class="outline-text-3" id="text-2-3">
<div class="org-src-container">
<pre class="src src-matlab">syms wr w0 xi positive
assumealso(w0 &gt; wr)
syms x
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">z = (x^2/w0^2 - wr^2/w0^2)*((x^2)/(w0^2) + 1 - (wr^2)/(w0^2)) + (2*wr*x/(w0^2))^2 == 0
p = ((x^2)/(w0^2) + 1 - (wr^2)/(w0^2))^2 + (2*wr*x/(w0^2))^2 == 0
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">solve(p, x)
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">solve(z, x)
</pre>
</div>
<p>
The zeros are the roots of:
</p>
\begin{equation}
\left( \frac{s^2}{{\omega_0}^2} - \frac{\Omega^2}{{\omega_0}^2} \right) \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right) + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2 = 0
\end{equation}
<p>
Poles (without damping)
</p>
\begin{equation}
\left(\begin{array}{c} -w_{0}\,1{}\mathrm{i}-\mathrm{wr}\,1{}\mathrm{i}\\ -w_{0}\,1{}\mathrm{i}+\mathrm{wr}\,1{}\mathrm{i}\\ w_{0}\,1{}\mathrm{i}-\mathrm{wr}\,1{}\mathrm{i}\\ w_{0}\,1{}\mathrm{i}+\mathrm{wr}\,1{}\mathrm{i} \end{array}\right)
\end{equation}
<p>
Zeros (without damping)
</p>
\begin{equation}
\left(\begin{array}{c} -\sqrt{-\frac{w_{0}\,\sqrt{{w_{0}}^2+8\,{\mathrm{wr}}^2}}{2}-\frac{{w_{0}}^2}{2}-{\mathrm{wr}}^2}\\ -\sqrt{\frac{w_{0}\,\sqrt{{w_{0}}^2+8\,{\mathrm{wr}}^2}}{2}-\frac{{w_{0}}^2}{2}-{\mathrm{wr}}^2}\\ \sqrt{-\frac{w_{0}\,\sqrt{{w_{0}}^2+8\,{\mathrm{wr}}^2}}{2}-\frac{{w_{0}}^2}{2}-{\mathrm{wr}}^2}\\ \sqrt{\frac{w_{0}\,\sqrt{{w_{0}}^2+8\,{\mathrm{wr}}^2}}{2}-\frac{{w_{0}}^2}{2}-{\mathrm{wr}}^2} \end{array}\right)
\end{equation}
</div>
</div>
<div id="outline-container-orgbb768e3" class="outline-3">
<h3 id="orgbb768e3"><span class="section-number-3">2.4</span> Simscape Model</h3>
<div class="outline-text-3" id="text-2-4">
<div class="org-src-container">
<pre class="src src-matlab">%% Name of the Simulink File
mdl = 'rotating_frame';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Fu'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Fv'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 5, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 6, 'openoutput'); io_i = io_i + 1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Giff = linearize(mdl, io, 0);
%% Input/Output definition
Giff.InputName = {'Fu', 'Fv'};
Giff.OutputName = {'Fmu', 'Fmv'};
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">figure; bode(Giff, Giffa)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdf8d677" class="outline-3">
<h3 id="orgdf8d677"><span class="section-number-3">2.5</span> IFF Plant</h3>
</div>
<div id="outline-container-org3f264f4" class="outline-3">
<h3 id="org3f264f4"><span class="section-number-3">2.6</span> Loop Gain</h3>
<div class="outline-text-3" id="text-2-6">
<p>
Let&rsquo;s take \(\Omega = \frac{\omega_0}{10}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">ws = 0.1*w0;
G_iff = 1/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2))^2 + (2*ws*s/(w0^2))^2) * ...
[(s^2/w0^2 - ws^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2)) + (2*ws*s/(w0^2))^2, - (2*xi*s/w0 + 1)*2*ws*s/(w0^2) ; ...
(2*xi*s/w0 + 1)*2*ws*s/(w0^2), (s^2/w0^2 - ws^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2))+ (2*ws*s/(w0^2))^2];
</pre>
</div>
</div>
</div>
<div id="outline-container-org7c25fbe" class="outline-3">
<h3 id="org7c25fbe"><span class="section-number-3">2.7</span> Root Locus</h3>
</div>
<div id="outline-container-org82271cf" class="outline-3">
<h3 id="org82271cf"><span class="section-number-3">2.8</span> Modified IFF</h3>
<div class="outline-text-3" id="text-2-8">
</div>
<div id="outline-container-org60bb927" class="outline-4">
<h4 id="org60bb927"><span class="section-number-4">2.8.1</span> Control Law</h4>
<div class="outline-text-4" id="text-2-8-1">
<p>
Let&rsquo;s take the integral feedback controller as a low pass filter (pseudo integrator):
</p>
\begin{equation}
K_{\text{IFF}} = \begin{bmatrix}
g\frac{\omega_i}{\omega_i + s} & 0 \\
0 & g\frac{\omega_i}{\omega_i + s}
\end{bmatrix}
\end{equation}
<div class="org-src-container">
<pre class="src src-matlab">xi = 0.005;
w0 = 1;
ws = 0.1*w0;
G_iff = 1/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2))^2 + (2*ws*s/(w0^2))^2) * ...
[(s^2/w0^2 - ws^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2)) + (2*ws*s/(w0^2))^2, - (2*xi*s/w0 + 1)*2*ws*s/(w0^2) ; ...
(2*xi*s/w0 + 1)*2*ws*s/(w0^2), (s^2/w0^2 - ws^2/w0^2)*((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (ws^2)/(w0^2))+ (2*ws*s/(w0^2))^2];
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">g = 100;
wi = ws;
K_iff = (g/(1+s/wi))*eye(2);
</pre>
</div>
</div>
</div>
<div id="outline-container-org6850379" class="outline-4">
<h4 id="org6850379"><span class="section-number-4">2.8.2</span> Loop Gain</h4>
</div>
<div id="outline-container-org7314eea" class="outline-4">
<h4 id="org7314eea"><span class="section-number-4">2.8.3</span> Root Locus</h4>
</div>
<div id="outline-container-orgb4641d2" class="outline-4">
<h4 id="orgb4641d2"><span class="section-number-4">2.8.4</span> Optimal Gain</h4>
<div class="outline-text-4" id="text-2-8-4">
<p>
The DC gain for Giff is (for \(\Omega < \omega_0\)):
</p>
\begin{equation}
G_{\text{IFF}}(\omega = 0) = \frac{1}{1 - \frac{{\omega_0}^2}{\Omega^2}} \begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
\end{equation}
<p>
The maximum gain where is system is still stable is
</p>
\begin{equation}
g_\text{max} = \frac{{\omega_0}^2}{\Omega^2} - 1
\end{equation}
<p>
Let&rsquo;s find the gain that maximize the simultaneous damping of the two modes.
</p>
<div class="org-src-container">
<pre class="src src-matlab">K_opt = (opt_gain/(1+s/wi))*eye(2);
G_cl = feedback(G_iff, K_opt);
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-orgbdc5c77" class="outline-2">
<h2 id="orgbdc5c77"><span class="section-number-2">3</span> Direct Velocity Feedback</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-org3f7448e" class="outline-3">
<h3 id="org3f7448e"><span class="section-number-3">3.1</span> Equations</h3>
<div class="outline-text-3" id="text-3-1">
<p>
The sensed relative velocity are equal to:
</p>
<div class="important">
\begin{equation}
\begin{bmatrix} \dot{d}_u \\ \dot{d}_v \end{bmatrix} =
\frac{s \frac{1}{k}}{\left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \right)^2}
\begin{bmatrix}
\frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} & 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0} \\
-2 \frac{\Omega}{\omega_0}\frac{s}{\omega_0} & \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \\
\end{bmatrix}
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
\end{equation}
</div>
</div>
</div>
<div id="outline-container-org84263dc" class="outline-3">
<h3 id="org84263dc"><span class="section-number-3">3.2</span> Numerical Values</h3>
<div class="outline-text-3" id="text-3-2">
<div class="org-src-container">
<pre class="src src-matlab">k = 1;
m = 1;
c = 0.05;
xi = c/(2*sqrt(k*m));
w0 = sqrt(k/m);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">Ga = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))^2 + (2*wr*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2), 2*wr*s/(w0^2) ; ...
-2*wr*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2)];
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbdad8de" class="outline-3">
<h3 id="orgbdad8de"><span class="section-number-3">3.3</span> Simscape Model</h3>
<div class="outline-text-3" id="text-3-3">
<div class="org-src-container">
<pre class="src src-matlab">%% Name of the Simulink File
mdl = 'rotating_frame';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Fu'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Fv'], 1, 'openinput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 3, 'openoutput'); io_i = io_i + 1;
io(io_i) = linio([mdl, '/Tuv'], 4, 'openoutput'); io_i = io_i + 1;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">G = linearize(mdl, io, 0);
%% Input/Output definition
G.InputName = {'Fu', 'Fv'};
G.OutputName = {'Vu', 'Vv'};
</pre>
</div>
</div>
</div>
<div id="outline-container-orge253615" class="outline-3">
<h3 id="orge253615"><span class="section-number-3">3.4</span> DVF Plant</h3>
<div class="outline-text-3" id="text-3-4">
<div class="org-src-container">
<pre class="src src-matlab">figure; bode(G, Ga)
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd61ece4" class="outline-3">
<h3 id="orgd61ece4"><span class="section-number-3">3.5</span> Loop Gain</h3>
<div class="outline-text-3" id="text-3-5">
<p>
Let&rsquo;s take \(\Omega = \frac{\omega_0}{10}\).
</p>
<div class="org-src-container">
<pre class="src src-matlab">ws = 0.1*w0;
G_dvf = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2))^2 + (2*wr*s/(w0^2))^2) * ...
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2), 2*wr*s/(w0^2) ; ...
-2*wr*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (wr^2)/(w0^2)];
</pre>
</div>
</div>
</div>
<div id="outline-container-orgce2b090" class="outline-3">
<h3 id="orgce2b090"><span class="section-number-3">3.6</span> Root Locus</h3>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-03-16 lun. 10:52</p>
<p class="author">Author: Thomas Dehaeze</p>
<p class="date">Created: 2020-06-10 mer. 10:17</p>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
matlab/rotating_frame.slxc Normal file

Binary file not shown.

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<MF0 version="1.1" packageUris="http://schema.mathworks.com/mf0/SlCache/19700101">
<slcache.FileAttributes type="slcache.FileAttributes" uuid="15bc2eb6-a155-4074-be73-5774ec44e8b6">
<checksum>VGJCKM9/+mTYcitIBBt14A==</checksum>
</slcache.FileAttributes>
</MF0>

Binary file not shown.