Removed DVF from the study (replace with passive)
Before Width: | Height: | Size: 222 KiB After Width: | Height: | Size: 245 KiB |
Before Width: | Height: | Size: 309 KiB After Width: | Height: | Size: 257 KiB |
Before Width: | Height: | Size: 207 KiB After Width: | Height: | Size: 236 KiB |
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 233 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 90 KiB |
542
matlab/index.org
@ -29,7 +29,6 @@
|
||||
- Section [[sec:iff_pure_int]]
|
||||
- Section [[sec:iff_pseudo_int]]
|
||||
- Section [[sec:iff_parallel_stiffness]]
|
||||
- Section [[sec:dvf]]
|
||||
- Section [[sec:comparison]]
|
||||
- Section [[sec:notations]]
|
||||
|
||||
@ -215,7 +214,6 @@ Define the rotating speed for the Simscape Model.
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kiff = tf(zeros(2));
|
||||
Kdvf = tf(zeros(2));
|
||||
|
||||
kp = 0; % Parallel Stiffness [N/m]
|
||||
cp = 0; % Parallel Damping [N/(m/s)]
|
||||
@ -492,7 +490,6 @@ The rotation speed is set to $\Omega = 0.1 \omega_0$.
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kiff = tf(zeros(2));
|
||||
Kdvf = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@ -1294,7 +1291,6 @@ The same transfer function from $[F_u, F_v]$ to $[f_u, f_v]$ is written down fro
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kiff = tf(zeros(2));
|
||||
Kdvf = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@ -1897,280 +1893,6 @@ Let's take $k_p = 5 m \Omega^2$ and find the optimal IFF control gain $g$ such t
|
||||
exportFig('figs-inkscape/root_locus_opt_gain_iff_kp.pdf', 'width', 'wide', 'height', 'tall', 'png', false, 'pdf', false, 'svg', true);
|
||||
#+end_src
|
||||
|
||||
* Direct Velocity Feedback
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle matlab/s5_dvf.m
|
||||
:header-args:matlab+: :comments org :mkdirp yes
|
||||
:END:
|
||||
<<sec:dvf>>
|
||||
|
||||
** Introduction :ignore:
|
||||
** Matlab Init :noexport:ignore:
|
||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||
<<matlab-dir>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent :noweb yes
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no
|
||||
addpath('./matlab/');
|
||||
addpath('./src/');
|
||||
#+end_src
|
||||
|
||||
** Schematic
|
||||
|
||||
#+name: fig:system_dvf
|
||||
#+caption: Figure caption
|
||||
[[file:figs-tikz/system_dvf.png]]
|
||||
|
||||
** Equations
|
||||
The sensed relative velocity are equal to:
|
||||
#+begin_important
|
||||
\begin{equation}
|
||||
\begin{bmatrix} \dot{d}_u \\ \dot{d}_v \end{bmatrix} =
|
||||
\bm{G}_v
|
||||
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
|
||||
\end{equation}
|
||||
|
||||
\begin{equation}
|
||||
\begin{bmatrix} \dot{d}_u \\ \dot{d}_v \end{bmatrix} =
|
||||
\frac{s}{k} \frac{1}{G_{vp}}
|
||||
\begin{bmatrix}
|
||||
G_{vz} & G_{vc} \\
|
||||
-G_{vc} & G_{vz}
|
||||
\end{bmatrix}
|
||||
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
|
||||
\end{equation}
|
||||
With:
|
||||
\begin{align}
|
||||
G_{vp} &= \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 \\
|
||||
G_{vz} &= \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \\
|
||||
G_{vc} &= 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0}
|
||||
\end{align}
|
||||
#+end_important
|
||||
|
||||
** Plant Parameters
|
||||
Let's define initial values for the model.
|
||||
#+begin_src matlab
|
||||
k = 1; % Actuator Stiffness [N/m]
|
||||
c = 0.05; % Actuator Damping [N/(m/s)]
|
||||
m = 1; % Payload mass [kg]
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
xi = c/(2*sqrt(k*m));
|
||||
w0 = sqrt(k/m); % [rad/s]
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
kp = 0; % [N/m]
|
||||
cp = 0; % [N/(m/s)]
|
||||
#+end_src
|
||||
|
||||
** Comparison of the Analytical Model and the Simscape Model
|
||||
The rotating speed is set to $\Omega = 0.1 \omega_0$.
|
||||
#+begin_src matlab
|
||||
W = 0.1*w0;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kiff = tf(zeros(2));
|
||||
Kdvf = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
open('rotating_frame.slx');
|
||||
#+end_src
|
||||
|
||||
And the transfer function from $[F_u, F_v]$ to $[v_u, v_v]$ is identified using the Simscape model.
|
||||
#+begin_src matlab
|
||||
%% Name of the Simulink File
|
||||
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'], 1, 'openoutput'); io_i = io_i + 1;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Gdvf = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Gdvf.InputName = {'Fu', 'Fv'};
|
||||
Gdvf.OutputName = {'Vu', 'Vv'};
|
||||
#+end_src
|
||||
|
||||
The same transfer function from $[F_u, F_v]$ to $[v_u, v_v]$ is written down from the analytical model.
|
||||
#+begin_src matlab
|
||||
Gdvf_th = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))^2 + (2*W*s/(w0^2))^2) * ...
|
||||
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2), 2*W*s/(w0^2) ; ...
|
||||
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
|
||||
|
||||
Gdvf_th.InputName = {'Fu', 'Fv'};
|
||||
Gdvf_th.OutputName = {'vu', 'vv'};
|
||||
#+end_src
|
||||
|
||||
The two are compared in Figure [[fig:plant_iff_comp_simscape_analytical]] and found to perfectly match.
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
freqs = logspace(-1, 1, 1000);
|
||||
|
||||
figure;
|
||||
ax1 = subplot(2, 2, 1);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gdvf(1,1), freqs))), '-')
|
||||
plot(freqs, abs(squeeze(freqresp(Gdvf_th(1,1), freqs))), '--')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
set(gca, 'XTickLabel',[]); ylabel('Magnitude [$\frac{m/s}{N}$]');
|
||||
title('$v_u/F_u$, $v_v/F_v$');
|
||||
|
||||
ax3 = subplot(2, 2, 3);
|
||||
hold on;
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gdvf(1,1), freqs))), '-')
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gdvf_th(1,1), freqs))), '--')
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [rad/s]'); ylabel('Phase [deg]');
|
||||
yticks(-180:90:180);
|
||||
ylim([-180 180]);
|
||||
hold off;
|
||||
|
||||
ax2 = subplot(2, 2, 2);
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Gdvf(1,2), freqs))), '-')
|
||||
plot(freqs, abs(squeeze(freqresp(Gdvf_th(1,2), freqs))), '--')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
set(gca, 'XTickLabel',[]); ylabel('Magnitude [$\frac{m/s}{N}$]');
|
||||
title('$v_u/F_v$, $v_v/F_u$');
|
||||
|
||||
ax4 = subplot(2, 2, 4);
|
||||
hold on;
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gdvf(1,2), freqs))), '-')
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(Gdvf_th(1,2), freqs))), '--')
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [rad/s]'); ylabel('Phase [deg]');
|
||||
yticks(-180:90:180);
|
||||
ylim([-180 180]);
|
||||
hold off;
|
||||
|
||||
linkaxes([ax1,ax2,ax3,ax4],'x');
|
||||
xlim([freqs(1), freqs(end)]);
|
||||
|
||||
linkaxes([ax1,ax2],'y');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/plant_dvf_comp_simscape_analytical.pdf', 'width', 'full', 'height', 'full');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:plant_dvf_comp_simscape_analytical
|
||||
#+caption: Comparison of the transfer functions from $[F_u, F_v]$ to $[v_u, v_v]$ between the Simscape model and the analytical one
|
||||
#+RESULTS:
|
||||
[[file:figs/plant_dvf_comp_simscape_analytical.png]]
|
||||
|
||||
** Root Locus
|
||||
The Decentralized Direct Velocity Feedback controller consist of a pure gain on the diagonal:
|
||||
\begin{equation}
|
||||
K_{\text{DVF}}(s) = g \begin{bmatrix}
|
||||
1 & 0 \\
|
||||
0 & 1
|
||||
\end{bmatrix}
|
||||
\end{equation}
|
||||
|
||||
The corresponding Root Locus plots for the following rotating speeds are shown in Figure [[fig:root_locus_dvf]].
|
||||
#+begin_src matlab
|
||||
Ws = [0, 0.2, 0.7, 1.1]*w0; % Rotating Speeds [rad/s]
|
||||
#+end_src
|
||||
|
||||
It is shown that for rotating speed $\Omega < \omega_0$, the closed loop system is unconditionally stable and arbitrary damping can be added to the poles.
|
||||
#+begin_src matlab :exports none
|
||||
gains = logspace(-2, 1, 100);
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
for W_i = 1:length(Ws)
|
||||
W = Ws(W_i);
|
||||
|
||||
Gdvf = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))^2 + (2*W*s/(w0^2))^2) * ...
|
||||
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2), 2*W*s/(w0^2) ; ...
|
||||
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
|
||||
|
||||
set(gca,'ColorOrderIndex',W_i);
|
||||
plot(real(pole(Gdvf)), imag(pole(Gdvf)), 'x', ...
|
||||
'DisplayName', sprintf('$\\Omega = %.2f \\omega_0 $', W/w0));
|
||||
|
||||
set(gca,'ColorOrderIndex',W_i);
|
||||
plot(real(tzero(Gdvf)), imag(tzero(Gdvf)), 'o', ...
|
||||
'HandleVisibility', 'off');
|
||||
|
||||
for g = gains
|
||||
set(gca,'ColorOrderIndex',W_i);
|
||||
cl_poles = pole(feedback(Gdvf, g*eye(2)));
|
||||
|
||||
plot(real(cl_poles), imag(cl_poles), '.', ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
hold off;
|
||||
axis square;
|
||||
xlim([-2, 0.5]); ylim([0, 2.5]);
|
||||
|
||||
xlabel('Real Part'); ylabel('Imaginary Part');
|
||||
legend('location', 'northwest');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/root_locus_dvf.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:root_locus_dvf
|
||||
#+caption: Root Locus for the Decentralized Direct Velocity Feedback controller. Several rotating speed are shown.
|
||||
#+RESULTS:
|
||||
[[file:figs/root_locus_dvf.png]]
|
||||
|
||||
#+begin_src matlab :exports none :tangle no
|
||||
gains = logspace(-2, 1, 1000);
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
for W_i = 1:length(Ws)
|
||||
W = Ws(W_i);
|
||||
|
||||
Gdvf = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))^2 + (2*W*s/(w0^2))^2) * ...
|
||||
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2), 2*W*s/(w0^2) ; ...
|
||||
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
|
||||
|
||||
set(gca,'ColorOrderIndex',W_i);
|
||||
plot(real(pole(Gdvf)), imag(pole(Gdvf)), 'x', ...
|
||||
'DisplayName', sprintf('$\\Omega = %.2f \\omega_0 $', W/w0));
|
||||
|
||||
set(gca,'ColorOrderIndex',W_i);
|
||||
plot(real(tzero(Gdvf)), imag(tzero(Gdvf)), 'o', ...
|
||||
'HandleVisibility', 'off');
|
||||
|
||||
poles_dvf = rootLocusPolesSorted(Gdvf, eye(2), gains, 'd_max', 1e-4);
|
||||
for p_i = 1:size(poles_dvf, 2)
|
||||
set(gca,'ColorOrderIndex', W_i);
|
||||
plot(real(poles_dvf(:, p_i)), imag(poles_dvf(:, p_i)), '-', ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
end
|
||||
hold off;
|
||||
axis square;
|
||||
xlim([-2, 0.5]); ylim([0, 2.5]);
|
||||
|
||||
xlabel('Real Part'); ylabel('Imaginary Part');
|
||||
legend('location', 'northwest');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports none :results none
|
||||
exportFig('figs-inkscape/root_locus_dvf.pdf', 'width', 'wide', 'height', 'tall', 'png', false, 'pdf', false, 'svg', true);
|
||||
#+end_src
|
||||
|
||||
* Comparison
|
||||
:PROPERTIES:
|
||||
:header-args:matlab+: :tangle matlab/s6_act_damp_comparison.m
|
||||
@ -2241,13 +1963,6 @@ IFF With parallel Stiffness
|
||||
k = k + kp;
|
||||
#+end_src
|
||||
|
||||
DVF
|
||||
#+begin_src matlab
|
||||
Gdvf = (s/k)/(((s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2))^2 + (2*W*s/(w0^2))^2) * ...
|
||||
[(s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2), 2*W*s/(w0^2) ; ...
|
||||
-2*W*s/(w0^2), (s^2)/(w0^2) + 2*xi*s/w0 + 1 - (W^2)/(w0^2)];
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
|
||||
@ -2281,20 +1996,6 @@ DVF
|
||||
plot(real(cl_poles), imag(cl_poles), '.', ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
|
||||
set(gca,'ColorOrderIndex',3);
|
||||
plot(real(pole(Gdvf)), imag(pole(Gdvf)), 'x', ...
|
||||
'DisplayName', 'DVF');
|
||||
set(gca,'ColorOrderIndex',3);
|
||||
plot(real(tzero(Gdvf)), imag(tzero(Gdvf)), 'o', ...
|
||||
'HandleVisibility', 'off');
|
||||
for g = gains
|
||||
Kdvf = g*eye(2);
|
||||
cl_poles = pole(feedback(Gdvf, Kdvf));
|
||||
set(gca,'ColorOrderIndex',3);
|
||||
plot(real(cl_poles), imag(cl_poles), '.', ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
axis square;
|
||||
xlim([-1.2, 0.05]); ylim([0, 1.25]);
|
||||
@ -2308,7 +2009,7 @@ DVF
|
||||
#+end_src
|
||||
|
||||
#+name: fig:comp_root_locus
|
||||
#+caption: Root Locus plot - Comparison of IFF with additional high pass filter, IFF with additional parallel stiffness and DVF
|
||||
#+caption: Root Locus plot - Comparison of IFF with additional high pass filter, IFF with additional parallel stiffness
|
||||
#+RESULTS:
|
||||
[[file:figs/comp_root_locus.png]]
|
||||
|
||||
@ -2317,7 +2018,6 @@ DVF
|
||||
|
||||
poles_iff_hpf = rootLocusPolesSorted(Giff, 1/(s + wi)*eye(2), gains, 'd_max', 1e-4);
|
||||
poles_iff_kp = rootLocusPolesSorted(Giff_kp, 1/s*eye(2), gains, 'd_max', 1e-4);
|
||||
poles_dvf = rootLocusPolesSorted(Gdvf, eye(2), gains, 'd_max', 1e-4);
|
||||
|
||||
figure;
|
||||
|
||||
@ -2345,18 +2045,6 @@ DVF
|
||||
plot(real(poles_iff_kp(:, p_i)), imag(poles_iff_kp(:, p_i)), '-', ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
|
||||
set(gca,'ColorOrderIndex',3);
|
||||
plot(real(pole(Gdvf)), imag(pole(Gdvf)), 'x', ...
|
||||
'DisplayName', 'DVF');
|
||||
set(gca,'ColorOrderIndex',3);
|
||||
plot(real(tzero(Gdvf)), imag(tzero(Gdvf)), 'o', ...
|
||||
'HandleVisibility', 'off');
|
||||
for p_i = 1:size(poles_dvf, 2)
|
||||
set(gca,'ColorOrderIndex',3);
|
||||
plot(real(poles_dvf(:, p_i)), imag(poles_dvf(:, p_i)), '-', ...
|
||||
'HandleVisibility', 'off');
|
||||
end
|
||||
hold off;
|
||||
axis square;
|
||||
xlim([-1.2, 0.05]); ylim([0, 1.25]);
|
||||
@ -2408,28 +2096,10 @@ In order to compare to three considered Active Damping techniques, gains that yi
|
||||
end
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Direct Velocity Feedback
|
||||
gains = logspace(0, 2, 100);
|
||||
opt_zeta_dvf = 0;
|
||||
opt_gain_dvf = 0;
|
||||
|
||||
for g = gains
|
||||
Kdvf = g*eye(2);
|
||||
|
||||
[w, zeta] = damp(minreal(feedback(Gdvf, Kdvf)));
|
||||
|
||||
if min(zeta) > opt_zeta_dvf && all(zeta > 0) && min(zeta) < 0.85
|
||||
opt_zeta_dvf = min(zeta);
|
||||
opt_gain_dvf = g;
|
||||
end
|
||||
end
|
||||
#+end_src
|
||||
|
||||
The obtained damping ratio and control are shown below.
|
||||
|
||||
#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*)
|
||||
data2orgtable([opt_zeta_iff, opt_zeta_kp, opt_zeta_dvf; opt_gain_iff, opt_gain_kp, opt_gain_dvf]', {'Modified IFF', 'IFF with $k_p$', 'DVF'}, {'Obtained $\xi$', 'Control Gain'}, ' %.2f ');
|
||||
data2orgtable([opt_zeta_iff, opt_zeta_kp; opt_gain_iff, opt_gain_kp]', {'Modified IFF', 'IFF with $k_p$'}, {'Obtained $\xi$', 'Control Gain'}, ' %.2f ');
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
@ -2437,24 +2107,19 @@ The obtained damping ratio and control are shown below.
|
||||
|----------------+----------------+--------------|
|
||||
| Modified IFF | 0.83 | 2.0 |
|
||||
| IFF with $k_p$ | 0.83 | 2.01 |
|
||||
| DVF | 0.85 | 1.67 |
|
||||
|
||||
** Transmissibility
|
||||
** Passive Damping - Critical Damping
|
||||
#+begin_src matlab
|
||||
c_opt = 2*sqrt(k*m);
|
||||
#+end_src
|
||||
|
||||
** Transmissibility And Compliance
|
||||
<<sec:comp_transmissibilty>>
|
||||
|
||||
#+begin_src matlab
|
||||
open('rotating_frame.slx');
|
||||
#+end_src
|
||||
|
||||
*** Open Loop :ignore:
|
||||
#+begin_src matlab :exports none
|
||||
Kdvf = tf(zeros(2));
|
||||
Kiff = tf(zeros(2));
|
||||
|
||||
kp = 0;
|
||||
cp = 0;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% Name of the Simulink File
|
||||
mdl = 'rotating_frame';
|
||||
@ -2462,23 +2127,57 @@ The obtained damping ratio and control are shown below.
|
||||
%% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/dw'], 1, 'input'); io_i = io_i + 1;
|
||||
io(io_i) = linio([mdl, '/fd'], 1, 'input'); io_i = io_i + 1;
|
||||
io(io_i) = linio([mdl, '/Meas'], 1, 'output'); io_i = io_i + 1;
|
||||
#+end_src
|
||||
|
||||
*** Open Loop :ignore:
|
||||
#+begin_src matlab :exports none
|
||||
Kiff = tf(zeros(2));
|
||||
|
||||
kp = 0;
|
||||
cp = 0;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Tol = linearize(mdl, io, 0);
|
||||
G_ol = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Tol.InputName = {'Dwx', 'Dwy'};
|
||||
Tol.OutputName = {'Dx', 'Dy'};
|
||||
G_ol.InputName = {'Dwx', 'Dwy', 'Fdx', 'Fdy'};
|
||||
G_ol.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
*** Passive Damping
|
||||
#+begin_src matlab
|
||||
kp = 0;
|
||||
cp = 0;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
c_old = c;
|
||||
c = c_opt;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kiff = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
G_pas = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
G_pas.InputName = {'Dwx', 'Dwy', 'Fdx', 'Fdy'};
|
||||
G_pas.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
c = c_old;
|
||||
#+end_src
|
||||
|
||||
*** Pseudo Integrator IFF :ignore:
|
||||
#+begin_src matlab :exports none
|
||||
kp = 0;
|
||||
cp = 0;
|
||||
|
||||
Kdvf = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
@ -2486,11 +2185,11 @@ The obtained damping ratio and control are shown below.
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Tiff = linearize(mdl, io, 0);
|
||||
G_iff = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Tiff.InputName = {'Dwx', 'Dwy'};
|
||||
Tiff.OutputName = {'Dx', 'Dy'};
|
||||
G_iff.InputName = {'Dwx', 'Dwy', 'Fdx', 'Fdy'};
|
||||
G_iff.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
*** IFF With parallel Stiffness :ignore:
|
||||
@ -2503,36 +2202,12 @@ The obtained damping ratio and control are shown below.
|
||||
Kiff = opt_gain_kp/s*tf(eye(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kdvf = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Tiff_kp = linearize(mdl, io, 0);
|
||||
G_kp = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Tiff_kp.InputName = {'Dwx', 'Dwy'};
|
||||
Tiff_kp.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
*** DVF :ignore:
|
||||
#+begin_src matlab :exports none
|
||||
kp = 0;
|
||||
cp = 0;
|
||||
|
||||
Kiff = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Kdvf = opt_gain_kp*tf(eye(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Tdvf = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Tdvf.InputName = {'Dwx', 'Dwy'};
|
||||
Tdvf.OutputName = {'Dx', 'Dy'};
|
||||
G_kp.InputName = {'Dwx', 'Dwy', 'Fdx', 'Fdy'};
|
||||
G_kp.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
*** Transmissibility :ignore:
|
||||
@ -2541,13 +2216,13 @@ The obtained damping ratio and control are shown below.
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Tiff(1,1), freqs))), ...
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff({'Dx'}, {'Dwx'}), freqs))), ...
|
||||
'DisplayName', 'IFF + HPF')
|
||||
plot(freqs, abs(squeeze(freqresp(Tiff_kp(1,1), freqs))), ...
|
||||
plot(freqs, abs(squeeze(freqresp(G_kp( {'Dx'}, {'Dwx'}), freqs))), ...
|
||||
'DisplayName', 'IFF + $k_p$')
|
||||
plot(freqs, abs(squeeze(freqresp(Tdvf(1,1), freqs))), ...
|
||||
'DisplayName', 'DVF')
|
||||
plot(freqs, abs(squeeze(freqresp(Tol(1,1), freqs))), 'k-', ...
|
||||
plot(freqs, abs(squeeze(freqresp(G_pas({'Dx'}, {'Dwx'}), freqs))), ...
|
||||
'DisplayName', 'Passive')
|
||||
plot(freqs, abs(squeeze(freqresp(G_ol( {'Dx'}, {'Dwx'}), freqs))), 'k-', ...
|
||||
'DisplayName', 'Open-Loop')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
@ -2568,110 +2243,19 @@ The obtained damping ratio and control are shown below.
|
||||
exportFig('figs-inkscape/comp_transmissibility.pdf', 'width', 'half', 'height', 'tall', 'png', false, 'pdf', false, 'svg', true);
|
||||
#+end_src
|
||||
|
||||
** Compliance
|
||||
<<sec:comp_compliance>>
|
||||
*** Open Loop :ignore:
|
||||
#+begin_src matlab :exports none
|
||||
Kdvf = tf(zeros(2));
|
||||
Kiff = tf(zeros(2));
|
||||
|
||||
kp = 0;
|
||||
cp = 0;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
%% Name of the Simulink File
|
||||
mdl = 'rotating_frame';
|
||||
|
||||
%% Input/Output definition
|
||||
clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/fd'], 1, 'input'); io_i = io_i + 1;
|
||||
io(io_i) = linio([mdl, '/Meas'], 1, 'output'); io_i = io_i + 1;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Col = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Col.InputName = {'Fdx', 'Fdy'};
|
||||
Col.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
*** Pseudo Integrator IFF :ignore:
|
||||
#+begin_src matlab :exports none
|
||||
kp = 0;
|
||||
cp = 0;
|
||||
|
||||
Kdvf = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Kiff = opt_gain_iff/(wi + s)*tf(eye(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Ciff = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Ciff.InputName = {'Fdx', 'Fdy'};
|
||||
Ciff.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
*** IFF With parallel Stiffness :ignore:
|
||||
#+begin_src matlab
|
||||
kp = 5*m*W^2;
|
||||
cp = 0.01;
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Kiff = opt_gain_kp/s*tf(eye(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
Kdvf = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Ciff_kp = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Ciff_kp.InputName = {'Fdx', 'Fdy'};
|
||||
Ciff_kp.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
*** DVF :ignore:
|
||||
#+begin_src matlab :exports none
|
||||
kp = 0;
|
||||
cp = 0;
|
||||
|
||||
Kiff = tf(zeros(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Kdvf = opt_gain_kp*tf(eye(2));
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab
|
||||
Cdvf = linearize(mdl, io, 0);
|
||||
|
||||
%% Input/Output definition
|
||||
Cdvf.InputName = {'Fdx', 'Fdy'};
|
||||
Cdvf.OutputName = {'Dx', 'Dy'};
|
||||
#+end_src
|
||||
|
||||
*** Compliance :ignore:
|
||||
#+begin_src matlab :exports none
|
||||
freqs = logspace(-2, 1, 1000);
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
plot(freqs, abs(squeeze(freqresp(Ciff(1,1), freqs))), ...
|
||||
plot(freqs, abs(squeeze(freqresp(G_iff({'Dx'}, {'Fdx'}), freqs))), ...
|
||||
'DisplayName', 'IFF + HPF')
|
||||
plot(freqs, abs(squeeze(freqresp(Ciff_kp(1,1), freqs))), ...
|
||||
plot(freqs, abs(squeeze(freqresp(G_kp( {'Dx'}, {'Fdx'}), freqs))), ...
|
||||
'DisplayName', 'IFF + $k_p$')
|
||||
plot(freqs, abs(squeeze(freqresp(Cdvf(1,1), freqs))), ...
|
||||
'DisplayName', 'DVF')
|
||||
plot(freqs, abs(squeeze(freqresp(Col(1,1), freqs))), 'k-', ...
|
||||
plot(freqs, abs(squeeze(freqresp(G_pas({'Dx'}, {'Fdx'}), freqs))), ...
|
||||
'DisplayName', 'Passive')
|
||||
plot(freqs, abs(squeeze(freqresp(G_ol( {'Dx'}, {'Fdx'}), freqs))), 'k-', ...
|
||||
'DisplayName', 'Open-Loop')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
|
@ -516,70 +516,6 @@ The overall stiffness $k$ stays constant:
|
||||
| file:figs/root_locus_iff_kps.pdf | file:figs/root_locus_opt_gain_iff_kp.pdf |
|
||||
| <<fig:root_locus_iff_kps>> Three values of $k_p$ | <<fig:root_locus_opt_gain_iff_kp>> $k_p = 5 m \Omega^2$, optimal damping is shown |
|
||||
|
||||
* Direct Velocity Feedback :noexport:
|
||||
** System Schematic and Control Architecture
|
||||
# Basic Idea of DVF
|
||||
|
||||
|
||||
# Equation with the control law: pure gain
|
||||
\begin{equation}
|
||||
K_V(s) = g
|
||||
\end{equation}
|
||||
|
||||
#+name: fig:system_dvf
|
||||
#+caption: System with relative velocity sensors and with decentralized controllers $K_V$
|
||||
#+attr_latex: :scale 1
|
||||
[[file:figs/system_dvf.pdf]]
|
||||
|
||||
# Equivalent System is the same as Figure 1 (as increasing "c")
|
||||
|
||||
# Thus very much equivalent as adding passive elements such as dashpot
|
||||
|
||||
** Equations
|
||||
|
||||
# Write the equations
|
||||
|
||||
\begin{equation}
|
||||
\begin{bmatrix} v_u \\ v_v \end{bmatrix} =
|
||||
\bm{G}_v
|
||||
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
|
||||
\end{equation}
|
||||
|
||||
\begin{equation}
|
||||
\begin{bmatrix} v_u \\ v_v \end{bmatrix} =
|
||||
\frac{1}{k} \frac{1}{G_{vp}}
|
||||
\begin{bmatrix}
|
||||
G_{vz} & G_{vc} \\
|
||||
-G_{vc} & G_{vz}
|
||||
\end{bmatrix}
|
||||
\begin{bmatrix} F_u \\ F_v \end{bmatrix}
|
||||
\end{equation}
|
||||
With:
|
||||
\begin{subequations}
|
||||
\begin{align}
|
||||
G_{vp} &= \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 \\
|
||||
G_{vz} &= s \left( \frac{s^2}{{\omega_0}^2} + 2 \xi \frac{s}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right) \\
|
||||
G_{vc} &= 2 \frac{\Omega}{\omega_0} \frac{s}{\omega_0}
|
||||
\end{align}
|
||||
\end{subequations}
|
||||
|
||||
# Show that the rotation have somehow less impact on the plant than for IFF
|
||||
|
||||
|
||||
# Eventually add a bode plot to show the effect of the rotation speed
|
||||
|
||||
|
||||
** Relative Direct Velocity Feedback
|
||||
|
||||
# Unconditionally stable
|
||||
|
||||
# Arbitrary Damping can be added to the poles
|
||||
|
||||
#+name: fig:root_locus_dvf
|
||||
#+caption: Root Locus for Decentralized Direct Velocity Feedback for several rotational speeds $\Omega$
|
||||
#+attr_latex: :scale 1
|
||||
[[file:figs/root_locus_dvf.pdf]]
|
||||
|
||||
* Comparison of the Proposed Active Damping Techniques for Rotating Positioning Stages
|
||||
** Physical Comparison
|
||||
|
||||
|
BIN
paper/paper.pdf
102
paper/paper.tex
@ -1,4 +1,4 @@
|
||||
% Created 2020-06-26 ven. 17:28
|
||||
% Created 2020-06-29 lun. 10:22
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass{ISMA_USD2020}
|
||||
\usepackage[utf8]{inputenc}
|
||||
@ -53,7 +53,7 @@
|
||||
}
|
||||
|
||||
\section{Introduction}
|
||||
\label{sec:org4effc95}
|
||||
\label{sec:org8a431d3}
|
||||
\label{sec:introduction}
|
||||
Controller Poles are shown by black crosses (
|
||||
\begin{tikzpicture} \node[cross out, draw=black, minimum size=1ex, line width=2pt, inner sep=0pt, outer sep=0pt] at (0, 0){}; \end{tikzpicture}
|
||||
@ -64,9 +64,9 @@ This paper has been published
|
||||
The Matlab code that was use to obtain the results are available in \cite{dehaeze20_activ_dampin_rotat_posit_platf}.
|
||||
|
||||
\section{Dynamics of Rotating Positioning Platforms}
|
||||
\label{sec:org5eef93b}
|
||||
\label{sec:org6c19606}
|
||||
\subsection{Model of a Rotating Positioning Platform}
|
||||
\label{sec:org905e0e5}
|
||||
\label{sec:orga59b20f}
|
||||
To study how the rotation of positioning platforms does affect the use of force feedback, a simple model is developed.
|
||||
|
||||
It represents an X-Y positioning stage on top of a Rotating Stage and is schematically represented in Figure \ref{fig:system}.
|
||||
@ -96,7 +96,7 @@ The position of the payload is represented by \((d_u, d_v)\) expressed in the ro
|
||||
\end{figure}
|
||||
|
||||
\subsection{Equations of Motion}
|
||||
\label{sec:org08efe1c}
|
||||
\label{sec:orgad9d82d}
|
||||
To obtain of equation of motion for the system represented in Figure \ref{fig:system}, the Lagrangian equations are used:
|
||||
\begin{equation}
|
||||
\label{eq:lagrangian_equations}
|
||||
@ -129,13 +129,12 @@ The rotation of the XY positioning platform induces two Gyroscopic effects:
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Transfer Functions in the Laplace domain}
|
||||
\label{sec:org6daa125}
|
||||
\label{sec:orgb80a7b8}
|
||||
To study the dynamics of the system, the differential equations of motions \eqref{eq:eom_coupled} are transformed in the Laplace domain and the transfer functions from \([F_u,\ F_v]\) to \([d_u,\ d_v]\) are obtained:
|
||||
\begin{equation}
|
||||
\label{eq:Gd_mimo_tf}
|
||||
\begin{bmatrix} d_u \\ d_v \end{bmatrix} = \bm{G}_d \begin{bmatrix} F_u \\ F_v \end{bmatrix}
|
||||
\end{equation}
|
||||
|
||||
with \(\bm{G}_d\) a \(2 \times 2\) transfer function matrix
|
||||
\begin{equation}
|
||||
\label{eq:Gd_m_k_c}
|
||||
@ -156,11 +155,11 @@ One can verify that without rotation (\(\Omega = 0\)) the system becomes equival
|
||||
\end{subequations}
|
||||
|
||||
\subsection{Change of Variables / Parameters for the study}
|
||||
\label{sec:orgda057f2}
|
||||
\label{sec:org97136f3}
|
||||
|
||||
In order to make this study less dependent on the system parameters, the following change of variable is performed:
|
||||
\begin{itemize}
|
||||
\item \(\omega_0 = \sqrt{\frac{k}{m}}\): Natural frequency of the mass-spring system in \(\si{\radian/\s}\)
|
||||
\item \(\omega_0 = \sqrt{\frac{k}{m}}\): Undamped natural frequency of the mass-spring system in \(\si{\radian/\s}\)
|
||||
\item \(\xi = \frac{c}{2 \sqrt{k m}}\): Damping ratio
|
||||
\end{itemize}
|
||||
|
||||
@ -182,7 +181,7 @@ During the rest of this study, the following parameters are used for numerical a
|
||||
\end{itemize}
|
||||
|
||||
\subsection{System Dynamics and Campbell Diagram}
|
||||
\label{sec:org9c94a4d}
|
||||
\label{sec:orgf368845}
|
||||
The poles of \(\bm{G}_d\) are the complex solutions \(p\) of
|
||||
\begin{equation}
|
||||
\left( \frac{p^2}{{\omega_0}^2} + 2 \xi \frac{p}{\omega_0} + 1 - \frac{{\Omega}^2}{{\omega_0}^2} \right)^2 + \left( 2 \frac{\Omega}{\omega_0} \frac{p}{\omega_0} \right)^2 = 0
|
||||
@ -192,19 +191,17 @@ Supposing small damping (\(\xi \ll 1\)), two pairs of complex conjugate poles ar
|
||||
\begin{subequations}
|
||||
\label{eq:pole_values}
|
||||
\begin{align}
|
||||
p_{+} &= - \xi \omega_0 \left( 1 + \frac{\Omega}{\omega_0} \right) \pm j \left( \omega_0 + \Omega \right) \\
|
||||
p_{-} &= - \xi \omega_0 \left( 1 - \frac{\Omega}{\omega_0} \right) \pm j \left( \omega_0 - \Omega \right)
|
||||
p_{+} &= - \xi \omega_0 \left( 1 + \frac{\Omega}{\omega_0} \right) \pm j \omega_0 \left( 1 + \frac{\Omega}{\omega_0} \right) \\
|
||||
p_{-} &= - \xi \omega_0 \left( 1 - \frac{\Omega}{\omega_0} \right) \pm j \omega_0 \left( 1 - \frac{\Omega}{\omega_0} \right)
|
||||
\end{align}
|
||||
\end{subequations}
|
||||
|
||||
When the rotation speed in non-null, the resonance frequency is split into two pairs of complex conjugate poles.
|
||||
The real part and complex part of these two pairs of complex conjugate poles are represented in Figure \ref{fig:campbell_diagram} as a function of the rotational speed \(\Omega\).
|
||||
|
||||
As the rotation speed increases, \(p_{+}\) goes to higher frequencies and \(p_{-}\) to lower frequencies.
|
||||
|
||||
When the rotational speed \(\Omega\) reaches \(\omega_0\), the real part \(p_{-}\) is positive meaning the system becomes unstable.
|
||||
The stiffness of the X-Y stage is too low to hold to rotating payload hence the instability.
|
||||
Stiff positioning platforms should be used if high rotational speeds or heavy payloads are used.
|
||||
|
||||
This is graphically represented with the Campbell Diagram in Figure \ref{fig:campbell_diagram}.
|
||||
When the rotational speed \(\Omega\) reaches \(\omega_0\), the real part \(p_{-}\) becomes positive rendering the system unstable.
|
||||
Physically, the negative stiffness term induced by centrifugal forces exceeds the spring stiffness.
|
||||
Thus, stiff positioning platforms should be used when working at high rotational speeds.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}[c]{0.4\linewidth}
|
||||
@ -221,8 +218,8 @@ This is graphically represented with the Campbell Diagram in Figure \ref{fig:cam
|
||||
|
||||
Looking at the transfer function matrix \(\bm{G}_d\) \eqref{eq:Gd_w0_xi_k}, one can see it has two distinct terms that can be studied separately:
|
||||
\begin{itemize}
|
||||
\item the direct (diagonal) terms
|
||||
\item the coupling (off-diagonal) terms
|
||||
\item the direct (diagonal) terms (Figure \ref{fig:plant_compare_rotating_speed_direct})
|
||||
\item the coupling (off-diagonal) terms (Figure \ref{fig:plant_compare_rotating_speed_coupling})
|
||||
\end{itemize}
|
||||
|
||||
The bode plot of the direct and coupling terms are shown in Figure \ref{fig:plant_compare_rotating_speed} for several rotational speed \(\Omega\).
|
||||
@ -244,13 +241,13 @@ When the
|
||||
\centering
|
||||
\end{figure}
|
||||
|
||||
In the rest of this study, \(\Omega < \omega_0\)
|
||||
In the rest of this study, rotational speeds smaller than the undamped natural frequency of the system are used (\(\Omega < \omega_0\)).
|
||||
|
||||
\section{Decentralized Integral Force Feedback}
|
||||
\label{sec:org729cd5f}
|
||||
\subsection{System Schematic and Control Architecture}
|
||||
\label{sec:org87ee3ad}
|
||||
Force Sensors are added in series with the actuators as shown in Figure \ref{fig:system_iff}.
|
||||
\label{sec:orge7b2b3c}
|
||||
\subsection{Force Sensors and Control Architecture}
|
||||
\label{sec:org2b4254d}
|
||||
In order to apply Decentralized Integral Force Feedback to the system, force sensors are added in series of the two actuators (Figure \ref{fig:system_iff}).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
@ -259,7 +256,7 @@ Force Sensors are added in series with the actuators as shown in Figure \ref{fig
|
||||
\end{figure}
|
||||
|
||||
\subsection{Plant Dynamics}
|
||||
\label{sec:orge10a341}
|
||||
\label{sec:org59a4f35}
|
||||
The forces measured by the force sensors are equal to:
|
||||
\begin{equation}
|
||||
\label{eq:measured_force}
|
||||
@ -315,13 +312,13 @@ It increases with the rotational speed \(\Omega\).
|
||||
\end{figure}
|
||||
|
||||
\subsection{Decentralized Integral Force Feedback}
|
||||
\label{sec:org1d15108}
|
||||
\label{sec:orgf040b7e}
|
||||
|
||||
\begin{equation}
|
||||
K_F(s) = g \cdot \frac{1}{s}
|
||||
\end{equation}
|
||||
|
||||
Also, as one zero has a positive real part, the \textbf{IFF control is no more unconditionally stable}.
|
||||
Also, as one zero has a positive real part, the IFF control is no more unconditionally stable.
|
||||
This is due to the fact that the zeros of the plant are the poles of the closed loop system with an infinite gain.
|
||||
Thus, for some finite IFF gain, one pole will have a positive real part and the system will be unstable.
|
||||
|
||||
@ -335,20 +332,20 @@ At low frequency, the gain is very large and thus no force is transmitted betwee
|
||||
This means that at low frequency, the system is decoupled (the force sensor removed) and thus the system is unstable.
|
||||
|
||||
\section{Integral Force Feedback with High Pass Filters}
|
||||
\label{sec:org95ed1b6}
|
||||
\label{sec:org5533f47}
|
||||
\subsection{Modification of the Control Low}
|
||||
\label{sec:orgfadc2c2}
|
||||
\label{sec:orge3f4cc0}
|
||||
\begin{equation}
|
||||
K_{F}(s) = g \cdot \frac{1}{s} \cdot \underbrace{\frac{s/\omega_i}{1 + s/\omega_i}}_{\text{HPF}} = g \cdot \frac{1}{s + \omega_i}
|
||||
\end{equation}
|
||||
|
||||
|
||||
\subsection{Feedback Analysis}
|
||||
\label{sec:org6ef2134}
|
||||
\label{sec:orgd0fed6b}
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/loop_gain_modified_iff.pdf}
|
||||
\caption{\label{fig:loop_gain_modified_iff}Bode Plot of the Loop Gain for IFF with and without the HPF}
|
||||
\caption{\label{fig:loop_gain_modified_iff}Bode Plot of the Loop Gain for IFF with and without the HPF, \(\Omega = 0.1 \omega_0\)}
|
||||
\end{figure}
|
||||
|
||||
\begin{equation}
|
||||
@ -358,16 +355,16 @@ This means that at low frequency, the system is decoupled (the force sensor remo
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/root_locus_modified_iff.pdf}
|
||||
\caption{\label{fig:root_locus_modified_iff}Root Locus for IFF with and without the HPF}
|
||||
\caption{\label{fig:root_locus_modified_iff}Root Locus for IFF with and without the HPF, \(\Omega = 0.1 \omega_0\)}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Optimal Cut-Off Frequency}
|
||||
\label{sec:org23e0758}
|
||||
\label{sec:org4740973}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/root_locus_wi_modified_iff.pdf}
|
||||
\caption{\label{fig:root_locus_wi_modified_iff}Root Locus for several HPF cut-off frequencies \(\omega_i\)}
|
||||
\caption{\label{fig:root_locus_wi_modified_iff}Root Locus for several HPF cut-off frequencies \(\omega_i\), \(\Omega = 0.1 \omega_0\)}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
@ -377,9 +374,9 @@ This means that at low frequency, the system is decoupled (the force sensor remo
|
||||
\end{figure}
|
||||
|
||||
\section{Integral Force Feedback with Parallel Springs}
|
||||
\label{sec:org6947a77}
|
||||
\label{sec:org1b53815}
|
||||
\subsection{Stiffness in Parallel with the Force Sensor}
|
||||
\label{sec:org9a80ee7}
|
||||
\label{sec:org3a8c426}
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/system_parallel_springs.pdf}
|
||||
@ -387,7 +384,7 @@ This means that at low frequency, the system is decoupled (the force sensor remo
|
||||
\end{figure}
|
||||
|
||||
\subsection{Plant Dynamics}
|
||||
\label{sec:org14f5b78}
|
||||
\label{sec:orgf26a6f4}
|
||||
|
||||
We define an adimensional parameter \(\alpha\), \(0 \le \alpha < 1\), that describes the proportion of the stiffness in parallel with the actuator and force sensor:
|
||||
\begin{subequations}
|
||||
@ -419,7 +416,7 @@ The overall stiffness \(k\) stays constant:
|
||||
\end{equation}
|
||||
|
||||
\subsection{Effect of the Parallel Stiffness on the Plant Dynamics}
|
||||
\label{sec:org4b26266}
|
||||
\label{sec:org6a55282}
|
||||
\begin{equation}
|
||||
\begin{aligned}
|
||||
\alpha > \frac{\Omega^2}{{\omega_0}^2} \\
|
||||
@ -430,17 +427,17 @@ The overall stiffness \(k\) stays constant:
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/plant_iff_kp.pdf}
|
||||
\caption{\label{fig:plant_iff_kp}Bode Plot of \(f_u/F_u\) without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\)}
|
||||
\caption{\label{fig:plant_iff_kp}Bode Plot of \(f_u/F_u\) without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\), \(\Omega = 0.1 \omega_0\)}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/root_locus_iff_kp.pdf}
|
||||
\caption{\label{fig:root_locus_iff_kp}Root Locus for IFF without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\)}
|
||||
\caption{\label{fig:root_locus_iff_kp}Root Locus for IFF without parallel spring, with parallel springs with stiffness \(k_p < m \Omega^2\) and \(k_p > m \Omega^2\), \(\Omega = 0.1 \omega_0\)}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Optimal Parallel Stiffness}
|
||||
\label{sec:orgfd42bdb}
|
||||
\label{sec:org358dd73}
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}[c]{0.49\linewidth}
|
||||
\includegraphics[width=\linewidth]{figs/root_locus_iff_kps.pdf}
|
||||
@ -450,30 +447,29 @@ The overall stiffness \(k\) stays constant:
|
||||
\includegraphics[width=\linewidth]{figs/root_locus_opt_gain_iff_kp.pdf}
|
||||
\caption{\label{fig:root_locus_opt_gain_iff_kp} \(k_p = 5 m \Omega^2\), optimal damping is shown}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:root_locus_iff_kps_opt}Root Locus for IFF when parallel stiffness is used}
|
||||
\caption{\label{fig:root_locus_iff_kps_opt}Root Locus for IFF when parallel stiffness is used, \(\Omega = 0.1 \omega_0\)}
|
||||
\centering
|
||||
\end{figure}
|
||||
|
||||
|
||||
\section{Comparison of the Proposed Active Damping Techniques for Rotating Positioning Stages}
|
||||
\label{sec:org67dd4e8}
|
||||
\label{sec:org3cc6699}
|
||||
\subsection{Physical Comparison}
|
||||
\label{sec:orgf742b29}
|
||||
\label{sec:orgc34b986}
|
||||
|
||||
|
||||
|
||||
\subsection{Attainable Damping}
|
||||
\label{sec:orgdb615c3}
|
||||
\label{sec:org993a1d7}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/comp_root_locus.pdf}
|
||||
\caption{\label{fig:comp_root_locus}Root Locus for the three proposed decentralized active damping techniques: IFF with HFP, IFF with parallel springs, and relative DVF}
|
||||
\caption{\label{fig:comp_root_locus}Root Locus for the three proposed decentralized active damping techniques: IFF with HFP, IFF with parallel springs, and relative DVF, \(\Omega = 0.1 \omega_0\)}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\subsection{Transmissibility and Compliance}
|
||||
\label{sec:org59532ce}
|
||||
\label{sec:org0674052}
|
||||
|
||||
|
||||
\begin{figure}[htbp]
|
||||
@ -485,16 +481,16 @@ The overall stiffness \(k\) stays constant:
|
||||
\includegraphics[width=\linewidth]{figs/comp_transmissibility.pdf}
|
||||
\caption{\label{fig:comp_transmissibility} Compliance}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:comp_active_damping}Comparison of the three proposed Active Damping Techniques}
|
||||
\caption{\label{fig:comp_active_damping}Comparison of the two proposed Active Damping Techniques, \(\Omega = 0.1 \omega_0\)}
|
||||
\centering
|
||||
\end{figure}
|
||||
|
||||
\section{Conclusion}
|
||||
\label{sec:orgde4f24d}
|
||||
\label{sec:orgba18ca5}
|
||||
\label{sec:conclusion}
|
||||
|
||||
\section*{Acknowledgment}
|
||||
\label{sec:org3284e1c}
|
||||
\label{sec:org4c68ce2}
|
||||
|
||||
\bibliography{ref.bib}
|
||||
\end{document}
|
||||
|