diff --git a/matlab/index.html b/matlab/index.html index e1a13a3..06db955 100644 --- a/matlab/index.html +++ b/matlab/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- ++The matlab code is accessible on Zonodo and Github (Dehaeze 2020). +
+ +
+To run the Matlab code, go in the matlab
directory and run the following Matlab files corresponding to each section.
+
Sections | +Matlab File | +
---|---|
Section 1 | +s1_system_description.m |
+
Section 2 | +s2_iff_pure_int.m |
+
Section 3 | +s3_iff_hpf.m |
+
Section 4 | +s4_iff_kp.m |
+
Section 5 | +s5_act_damp_comparison.m |
+
-The system consists of one 2 degree of freedom translation stage on top of a spindle (figure 1). +The system consists of one 2 degree of freedom translation stage on top of a spindle (figure 1).
-
Figure 1: Schematic of the studied system
@@ -135,11 +185,11 @@ As the translation stage is rotating around the Z axis due to the spindle, the f-Based on the Figure 1, the equations of motions are: +Based on the Figure 1, the equations of motions are:
Let’s define initial values for the model. @@ -192,19 +242,19 @@ w0 = sqrt(k/m); % [rad/s]
The Campbell Diagram displays the evolution of the real and imaginary parts of the system as a function of the rotating speed.
-It is shown in Figure 2, and one can see that the system becomes unstable for \(\Omega > \omega_0\) (the real part of one of the poles becomes positive). +It is shown in Figure 2, and one can see that the system becomes unstable for \(\Omega > \omega_0\) (the real part of one of the poles becomes positive).
-
Figure 2: Campbell Diagram
@@ -212,8 +262,8 @@ It is shown in Figure 2, and one can see that the systIn order to validate all the equations of motion, a Simscape model of the same system has been developed. @@ -244,7 +294,7 @@ mdl = 'rotating_frame'; %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/G'], 3, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1;
-Both transfer functions are compared in Figure 3 and are found to perfectly match. +Both transfer functions are compared in Figure 3 and are found to perfectly match.
-
Figure 3: Bode plot of the transfer function from \([F_u, F_v]\) to \([d_u, d_v]\) as identified from the Simscape model and from an analytical model
@@ -280,8 +330,8 @@ Both transfer functions are compared in Figure 3 and aThe transfer functions from \([F_u, F_v]\) to \([d_u, d_v]\) are identified for the following rotating speeds. @@ -305,11 +355,11 @@ end
-They are compared in Figure 4. +They are compared in Figure 4.
-
Figure 4: Comparison of the transfer functions from \([F_u, F_v]\) to \([d_u, d_v]\) for several rotating speed
@@ -318,14 +368,14 @@ They are compared in Figure 4.-Force sensors are added in series with the two actuators (Figure 5). +Force sensors are added in series with the two actuators (Figure 5).
@@ -333,15 +383,15 @@ Two identical controllers \(K_F\) are used to feedback each of the sensed force
-
Figure 5: System with added Force Sensor in series with the actuators
Let’s define initial values for the model. @@ -361,8 +411,8 @@ w0 = sqrt(k/m); % [rad/s]
The sensed forces are equal to: @@ -407,8 +457,8 @@ Which then gives:
The rotation speed is set to \(\Omega = 0.1 \omega_0\). @@ -433,7 +483,7 @@ mdl = 'rotating_frame'; %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/G'], 1, 'openoutput'); io_i = io_i + 1;
-The two are compared in Figure 6 and found to perfectly match. +The two are compared in Figure 6 and found to perfectly match.
-
Figure 6: Comparison of the transfer functions from \([F_u, F_v]\) to \([f_u, f_v]\) between the Simscape model and the analytical one
@@ -468,8 +518,8 @@ The two are compared in Figure 6 and found to perfectlThe transfer functions from \([F_u, F_v]\) to \([f_u, f_v]\) are identified for the following rotating speeds. @@ -493,10 +543,10 @@ end
-The obtained transfer functions are shown in Figure 7. +The obtained transfer functions are shown in Figure 7.
-
Figure 7: Comparison of the transfer functions from \([F_u, F_v]\) to \([f_u, f_v]\) for several rotating speed
@@ -504,8 +554,8 @@ The obtained transfer functions are shown in Figure 7.The decentralized IFF controller consists of pure integrators: @@ -518,12 +568,12 @@ The decentralized IFF controller consists of pure integrators: \end{equation}
-The Root Locus (evolution of the poles of the closed loop system in the complex plane as a function of \(g\)) is shown in Figure 8. +The Root Locus (evolution of the poles of the closed loop system in the complex plane as a function of \(g\)) is shown in Figure 8. It is shown that for non-null rotating speed, one pole is bound to the right-half plane, and thus the closed loop system is unstable.
-
Figure 8: Root Locus for the Decentralized Integral Force Feedback controller. Several rotating speed are shown.
@@ -532,16 +582,16 @@ It is shown that for non-null rotating speed, one pole is bound to the right-halLet’s define initial values for the model. @@ -561,8 +611,8 @@ w0 = sqrt(k/m); % [rad/s]
Let’s modify the initial Integral Force Feedback Controller ; instead of using pure integrators, pseudo integrators (i.e. low pass filters) are used: @@ -597,10 +647,10 @@ And the following rotating speed.
-The obtained Loop Gain is shown in Figure 9. +The obtained Loop Gain is shown in Figure 9.
-
Figure 9: Loop Gain for the modified IFF controller
@@ -608,15 +658,15 @@ The obtained Loop Gain is shown in Figure 9.-As shown in the Root Locus plot (Figure 10), for some value of the gain, the system remains stable. +As shown in the Root Locus plot (Figure 10), for some value of the gain, the system remains stable.
-
Figure 10: Root Locus for the modified IFF controller
@@ -624,11 +674,11 @@ As shown in the Root Locus plot (Figure 10), for some-In order to visualize the effect of \(\omega_i\) on the attainable damping, the Root Locus is displayed in Figure 11 for the following \(\omega_i\): +In order to visualize the effect of \(\omega_i\) on the attainable damping, the Root Locus is displayed in Figure 11 for the following \(\omega_i\):
wis = [0.01, 0.1, 0.5, 1]*w0; % [rad/s] @@ -636,7 +686,7 @@ In order to visualize the effect of \(\omega_i\) on the attainable damping, the
Figure 11: Root Locus for the modified IFF controller (zoomed plot on the left)
@@ -659,12 +709,12 @@ The gain at which the system becomes unstable is \end{equation}-While it seems that small \(\omega_i\) do allow more damping to be added to the system (Figure 11), the control gains may be limited to small values due to \eqref{eq:iff_gmax} thus reducing the attainable damping. +While it seems that small \(\omega_i\) do allow more damping to be added to the system (Figure 11), the control gains may be limited to small values due to \eqref{eq:iff_gmax} thus reducing the attainable damping.
There must be an optimum for \(\omega_i\). -To find the optimum, the gain that maximize the simultaneous damping of the mode is identified for a wide range of \(\omega_i\) (Figure 12). +To find the optimum, the gain that maximize the simultaneous damping of the mode is identified for a wide range of \(\omega_i\) (Figure 12).
Figure 12: Simultaneous attainable damping of the closed loop poles as a function of \(\omega_i\)
@@ -696,23 +746,23 @@ endIn this section additional springs in parallel with the force sensors are added to counteract the negative stiffness induced by the rotation.
-
Figure 13: Studied system with additional springs in parallel with the actuators and force sensors
@@ -727,8 +777,8 @@ In order to keep the overall stiffness \(k = k_a + k_p\) constant, a scalar paraLet’s define initial values for the model. @@ -788,8 +838,8 @@ w0 = sqrt(k/m); % [rad/s]
The same transfer function from \([F_u, F_v]\) to \([f_u, f_v]\) is written down from the analytical model. @@ -814,7 +864,7 @@ mdl = 'rotating_frame'; %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/G'], 1, 'openoutput'); io_i = io_i + 1; Giff = linearize(mdl, io, 0); @@ -837,7 +887,7 @@ Giff_th.OutputName = {'fu', 'fv'};
Figure 14: Comparison of the transfer functions from \([F_u, F_v]\) to \([f_u, f_v]\) between the Simscape model and the analytical one
@@ -845,8 +895,8 @@ Giff_th.OutputName = {'fu', 'fv'};The rotation speed is set to \(\Omega = 0.1 \omega_0\). @@ -866,7 +916,7 @@ And the IFF plant (transfer function from \([F_u, F_v]\) to \([f_u, f_v]\)) is i
-The results are shown in Figure 15. +The results are shown in Figure 15.
@@ -912,7 +962,7 @@ Giff_l = 1/( (s^2/w0p^2 + 2*xip*s/w0p + 1 - W^2/w0p^2)^2 + (2*(s/w0p)*(W/w0p))^2
Figure 15: Transfer function from \([F_u, F_v]\) to \([f_u, f_v]\) for \(k_p = 0\), \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\)
@@ -920,11 +970,11 @@ Giff_l = 1/( (s^2/w0p^2 + 2*xip*s/w0p + 1 - W^2/w0p^2)^2 + (2*(s/w0p)*(W/w0p))^2-In Figure 16 is displayed the Root Locus in the three considered cases with +In Figure 16 is displayed the Root Locus in the three considered cases with
\begin{equation} K_{\text{IFF}} = \frac{g}{s} \begin{bmatrix} @@ -945,7 +995,7 @@ Thus, decentralized IFF controller with pure integrators can be used if: \end{equation} -
Figure 16: Root Locus
@@ -953,15 +1003,15 @@ Thus, decentralized IFF controller with pure integrators can be used if:However, having large values of \(k_p\) may decrease the attainable damping.
-To study the second point, Root Locus plots for the following values of \(k_p\) are shown in Figure 17. +To study the second point, Root Locus plots for the following values of \(k_p\) are shown in Figure 17.
kps = [2, 20, 40]*m*W^2; @@ -972,7 +1022,7 @@ To study the second point, Root Locus plots for the following values of \(k_p\) It is shown that large values of \(k_p\) decreases the attainable damping. -+--
Figure 17: Root Locus plot
@@ -1007,7 +1057,7 @@ end+@@ -1015,11 +1065,11 @@ end
-5 Comparison
++5 Comparison
-Two modifications to adapt the IFF control strategy to rotating platforms have been proposed. @@ -1027,8 +1077,8 @@ These two methods are now compared in terms of added damping, closed-loop compli
-5.1 Plant Parameters
++-5.1 Plant Parameters
Let’s define initial values for the model. @@ -1056,8 +1106,8 @@ The rotating speed is set to \(\Omega = 0.1 \omega_0\).
-5.2 Root Locus
++5.2 Root Locus
-IFF with High Pass Filter @@ -1090,7 +1140,7 @@ k = k + kp;
+-
Figure 19: Root Locus plot - Comparison of IFF with additional high pass filter, IFF with additional parallel stiffness
@@ -1098,8 +1148,8 @@ k = k + kp;-5.3 Controllers - Optimal Gains
++-5.3 Controllers - Optimal Gains
In order to compare to three considered Active Damping techniques, gains that yield maximum damping of all the modes are computed for each case. @@ -1143,8 +1193,8 @@ The obtained damping ratio and control are shown below.
-5.4 Passive Damping - Critical Damping
++-5.4 Passive Damping - Critical Damping
\begin{equation} \xi = \frac{c}{2 \sqrt{km}} @@ -1164,11 +1214,11 @@ Critical Damping corresponds to to \(\xi = 1\), and thus:-5.5 Transmissibility And Compliance
++5.5 Transmissibility And Compliance
--5.5.1 Passive Damping
++5.5.1 Passive Damping
kp = 0; @@ -1268,7 +1318,7 @@ G_kp.OutputName = {'Dx', 'Dy'};-+
Figure 20: Comparison of the transmissibility
@@ -1277,7 +1327,7 @@ G_kp.OutputName = {'Dx', 'Dy'};-+-
Figure 21: Comparison of the obtained Compliance
@@ -1286,11 +1336,11 @@ G_kp.OutputName = {'Dx', 'Dy'};-6 Notations
+ + ++ +
+ +Bibliography
++Dehaeze, T., and C. Collette. 2020. “Active Damping of Rotating Platforms Using Integral Force Feedback.” In Proceedings of the International Conference on Modal Analysis Noise and Vibration Engineering (ISMA).+Dehaeze, Thomas. 2020. “Active Damping of Rotating Positioning Platforms.” https://doi.org/10.5281/zenodo.3894342.+diff --git a/matlab/index.org b/matlab/index.org index 908fbc7..eb944c3 100644 --- a/matlab/index.org +++ b/matlab/index.org @@ -34,6 +34,19 @@ It is structured in several sections: - Section [[sec:comparison]]: compares both proposed modifications to the classical IFF in terms of damping authority and closed-loop system behavior. - Section [[sec:notations]]: contains the notations used for both the Matlab code and the paper +The matlab code is accessible on [[https://zenodo.org/record/3894343][Zonodo]] and [[https://github.com/tdehaeze/dehaeze20_contr_stewa_platf][Github]] cite:dehaeze20_activ_dampin_rotat_posit_platf. + +To run the Matlab code, go in the =matlab= directory and run the following Matlab files corresponding to each section. + +#+caption: Paper's sections and corresponding Matlab files +| Sections | Matlab File | +|------------------------------------+----------------------------| +| Section [[sec:system_description]] | =s1_system_description.m= | +| Section [[sec:iff_pure_int]] | =s2_iff_pure_int.m= | +| Section [[sec:iff_pseudo_int]] | =s3_iff_hpf.m= | +| Section [[sec:iff_parallel_stiffness]] | =s4_iff_kp.m= | +| Section [[sec:comparison]] | =s5_act_damp_comparison.m= | + * System Description and Analysis :PROPERTIES: :header-args:matlab+: :tangle matlab/s1_system_description.m @@ -231,7 +244,7 @@ The transfer function from $[F_u, F_v]$ to $[d_u, d_v]$ is identified from the S %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; - io(io_i) = linio([mdl, '/G'], 3, 'openoutput'); io_i = io_i + 1; + io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1; #+end_src #+begin_src matlab @@ -502,7 +515,7 @@ And the transfer function from $[F_u, F_v]$ to $[f_u, f_v]$ is identified using %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; - io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1; + io(io_i) = linio([mdl, '/G'], 1, 'openoutput'); io_i = io_i + 1; #+end_src #+begin_src matlab @@ -1273,7 +1286,7 @@ The same transfer function from $[F_u, F_v]$ to $[f_u, f_v]$ is written down fro %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; - io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1; + io(io_i) = linio([mdl, '/G'], 1, 'openoutput'); io_i = io_i + 1; Giff = linearize(mdl, io, 0); @@ -2210,6 +2223,9 @@ Critical Damping corresponds to to $\xi = 1$, and thus: | Complex number | $j$ | =j= | | | Frequency | $\omega$ | =w= | [rad/s] | +* Bibliography :ignore: +bibliographystyle:unsrt +bibliography:ref.bib * Functions :noexport: ** Sort Poles for the Root Locus :PROPERTIES: diff --git a/matlab/matlab/s1_system_description.m b/matlab/matlab/s1_system_description.m index 6bbe588..60d968d 100644 --- a/matlab/matlab/s1_system_description.m +++ b/matlab/matlab/s1_system_description.m @@ -79,7 +79,7 @@ mdl = 'rotating_frame'; %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/G'], 3, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1; G = linearize(mdl, io, 0); diff --git a/matlab/matlab/s2_iff_pure_int.m b/matlab/matlab/s2_iff_pure_int.m index c9d9b6b..ddc5c04 100644 --- a/matlab/matlab/s2_iff_pure_int.m +++ b/matlab/matlab/s2_iff_pure_int.m @@ -36,7 +36,7 @@ mdl = 'rotating_frame'; %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/G'], 1, 'openoutput'); io_i = io_i + 1; Giff = linearize(mdl, io, 0); diff --git a/matlab/matlab/s4_iff_kp.m b/matlab/matlab/s4_iff_kp.m index 5f4b1b8..d918fa9 100644 --- a/matlab/matlab/s4_iff_kp.m +++ b/matlab/matlab/s4_iff_kp.m @@ -35,7 +35,7 @@ mdl = 'rotating_frame'; %% Input/Output definition clear io; io_i = 1; io(io_i) = linio([mdl, '/K'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/G'], 2, 'openoutput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/G'], 1, 'openoutput'); io_i = io_i + 1; Giff = linearize(mdl, io, 0); diff --git a/matlab/ref.bib b/matlab/ref.bib index 408f50c..708dbe2 100644 --- a/matlab/ref.bib +++ b/matlab/ref.bib @@ -74,3 +74,13 @@ Analysis Noise and Vibration Engineering (ISMA)}, year = 2020, } + +@misc{dehaeze20_activ_dampin_rotat_posit_platf, + author = {Thomas Dehaeze}, + howpublished = {Source Code on Zonodo}, + month = 07, + title = {Active Damping of Rotating Positioning Platforms}, + url = {https://doi.org/10.5281/zenodo.3894342}, + doi = {10.5281/zenodo.3894342}, + year = 2020, +} -Created: 2020-07-09 jeu. 09:56
+Created: 2020-07-09 jeu. 10:19