Compare commits
No commits in common. "8aed6183a9ff19ea7c746dc47713ceade8bceee4" and "79db77ba699e85fa898b96afbaab7ee75da3ed72" have entirely different histories.
8aed6183a9
...
79db77ba69
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
||||
mat/
|
||||
figures/
|
||||
ltximg/
|
||||
*.autosave
|
||||
slprj/
|
||||
|
7485
figs/test_apa_2dof_comp_frf.pdf
Normal file
BIN
figs/test_apa_2dof_comp_frf.png
Normal file
After Width: | Height: | Size: 178 KiB |
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 156 KiB |
@ -19,17 +19,17 @@
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<sodipodi:namedview
|
||||
inkscape:current-layer="g841"
|
||||
inkscape:current-layer="layer9"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="140.3607"
|
||||
inkscape:window-y="60"
|
||||
inkscape:window-x="11"
|
||||
inkscape:cy="140.18392"
|
||||
inkscape:cx="197.9899"
|
||||
inkscape:zoom="2.8284271"
|
||||
showgrid="false"
|
||||
id="namedview835"
|
||||
inkscape:window-height="1200"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1367"
|
||||
inkscape:window-width="2534"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
@ -3736,7 +3736,7 @@
|
||||
</g>
|
||||
<g
|
||||
id="g1470"
|
||||
transform="translate(-199.21908,94.072346)"
|
||||
transform="translate(-213.6103,94.361419)"
|
||||
inkscape:label="">
|
||||
<g
|
||||
id="g7335">
|
||||
@ -3751,6 +3751,50 @@
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g6756">
|
||||
<use
|
||||
xlink:href="#symbol1905"
|
||||
x="298.70401"
|
||||
y="93.917999"
|
||||
id="use5395"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g4172">
|
||||
<use
|
||||
xlink:href="#symbol8146"
|
||||
x="309.2225"
|
||||
y="93.917999"
|
||||
id="use6006"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g7594">
|
||||
<use
|
||||
xlink:href="#symbol9931"
|
||||
x="314.20099"
|
||||
y="93.917999"
|
||||
id="use5176"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g6669">
|
||||
<use
|
||||
xlink:href="#symbol7717"
|
||||
x="319.70633"
|
||||
y="93.917999"
|
||||
id="use5032"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
|
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 255 KiB |
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 142 KiB |
@ -19,17 +19,17 @@
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<sodipodi:namedview
|
||||
inkscape:current-layer="g841"
|
||||
inkscape:current-layer="layer9"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="38"
|
||||
inkscape:window-x="965"
|
||||
inkscape:cy="140.18392"
|
||||
inkscape:window-y="60"
|
||||
inkscape:window-x="11"
|
||||
inkscape:cy="139.83037"
|
||||
inkscape:cx="197.9899"
|
||||
inkscape:zoom="2.8284271"
|
||||
showgrid="false"
|
||||
id="namedview835"
|
||||
inkscape:window-height="1147"
|
||||
inkscape:window-width="940"
|
||||
inkscape:window-height="1367"
|
||||
inkscape:window-width="2534"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
@ -3736,7 +3736,7 @@
|
||||
</g>
|
||||
<g
|
||||
id="g1470"
|
||||
transform="translate(-199.21908,94.072346)"
|
||||
transform="translate(-213.6103,94.361419)"
|
||||
inkscape:label="">
|
||||
<g
|
||||
id="g7335">
|
||||
@ -3753,7 +3753,48 @@
|
||||
</g>
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g6756" />
|
||||
id="g6756">
|
||||
<use
|
||||
xlink:href="#symbol1905"
|
||||
x="298.70401"
|
||||
y="93.917999"
|
||||
id="use5395"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g4172">
|
||||
<use
|
||||
xlink:href="#symbol8146"
|
||||
x="309.2225"
|
||||
y="93.917999"
|
||||
id="use6006"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g7594">
|
||||
<use
|
||||
xlink:href="#symbol9931"
|
||||
x="314.20099"
|
||||
y="93.917999"
|
||||
id="use5176"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g6669">
|
||||
<use
|
||||
xlink:href="#symbol7717"
|
||||
x="319.70633"
|
||||
y="93.917999"
|
||||
id="use5032"
|
||||
width="100%"
|
||||
height="100%" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
|
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 255 KiB |
7598
figs/test_apa_super_element_comp_frf.pdf
Normal file
BIN
figs/test_apa_super_element_comp_frf.png
Normal file
After Width: | Height: | Size: 183 KiB |
Before Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 84 KiB |
@ -1,91 +0,0 @@
|
||||
function [int_xyz, int_i, n_xyz, n_i, nodes] = extractNodes(filename)
|
||||
% extractNodes -
|
||||
%
|
||||
% Syntax: [n_xyz, nodes] = extractNodes(filename)
|
||||
%
|
||||
% Inputs:
|
||||
% - filename - relative or absolute path of the file that contains the Matrix
|
||||
%
|
||||
% Outputs:
|
||||
% - n_xyz -
|
||||
% - nodes - table containing the node numbers and corresponding dof of the interfaced DoFs
|
||||
|
||||
arguments
|
||||
filename
|
||||
end
|
||||
|
||||
fid = fopen(filename,'rt');
|
||||
|
||||
if fid == -1
|
||||
error('Error opening the file');
|
||||
end
|
||||
|
||||
n_xyz = []; % Contains nodes coordinates
|
||||
n_i = []; % Contains nodes indices
|
||||
|
||||
n_num = []; % Contains node numbers
|
||||
n_dof = {}; % Contains node directions
|
||||
|
||||
while 1
|
||||
% Read a line
|
||||
nextline = fgetl(fid);
|
||||
|
||||
% End of the file
|
||||
if ~isstr(nextline), break, end
|
||||
|
||||
% Line just before the list of nodes coordinates
|
||||
if contains(nextline, 'NODE') && ...
|
||||
contains(nextline, 'X') && ...
|
||||
contains(nextline, 'Y') && ...
|
||||
contains(nextline, 'Z')
|
||||
|
||||
while 1
|
||||
nextline = fgetl(fid);
|
||||
|
||||
if nextline < 0, break, end
|
||||
|
||||
c = sscanf(nextline, ' %f');
|
||||
|
||||
if isempty(c), break, end
|
||||
|
||||
n_xyz = [n_xyz; c(2:4)'];
|
||||
n_i = [n_i; c(1)];
|
||||
end
|
||||
end
|
||||
|
||||
if nextline < 0, break, end
|
||||
|
||||
% Line just before the list of node DOF
|
||||
if contains(nextline, 'NODE') && ...
|
||||
contains(nextline, 'LABEL')
|
||||
|
||||
while 1
|
||||
nextline = fgetl(fid);
|
||||
|
||||
if nextline < 0, break, end
|
||||
|
||||
c = sscanf(nextline, ' %d %s');
|
||||
|
||||
if isempty(c), break, end
|
||||
|
||||
n_num = [n_num; c(1)];
|
||||
|
||||
n_dof{length(n_dof)+1} = char(c(2:end)');
|
||||
end
|
||||
|
||||
nodes = table(n_num, string(n_dof'), 'VariableNames', {'node_i', 'node_dof'});
|
||||
end
|
||||
|
||||
if nextline < 0, break, end
|
||||
end
|
||||
|
||||
fclose(fid);
|
||||
|
||||
int_i = unique(nodes.('node_i')); % indices of interface nodes
|
||||
|
||||
% Extract XYZ coordinates of only the interface nodes
|
||||
if length(n_xyz) > 0 && length(n_i) > 0
|
||||
int_xyz = n_xyz(logical(sum(n_i.*ones(1, length(int_i)) == int_i', 2)), :);
|
||||
else
|
||||
int_xyz = n_xyz;
|
||||
end
|
@ -73,6 +73,16 @@
|
||||
(add-to-list 'org-export-filter-headline-functions
|
||||
'my-latex-filter-removeOrgAutoLabels)
|
||||
|
||||
;; Remove all org comments in the output LaTeX file
|
||||
(defun delete-org-comments (backend)
|
||||
(loop for comment in (reverse (org-element-map (org-element-parse-buffer)
|
||||
'comment 'identity))
|
||||
do
|
||||
(setf (buffer-substring (org-element-property :begin comment)
|
||||
(org-element-property :end comment))
|
||||
"")))
|
||||
(add-hook 'org-export-before-processing-hook 'delete-org-comments)
|
||||
|
||||
;; Use no package by default
|
||||
(setq org-latex-packages-alist nil)
|
||||
(setq org-latex-default-packages-alist nil)
|
||||
@ -362,7 +372,6 @@ Two other similar measurements are performed to measured the bending of the APA
|
||||
|
||||
#+name: fig:test_apa_meas_setup_modes
|
||||
#+caption: Experimental setup to measured flexible modes of the APA300ML. For the bending in the $X$ direction, the impact point is located at the back of the top measurement point. For the bending in the $Y$ direction, the impact point is located on the back surface of the top interface (on the back of the 2 measurements points).
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_meas_setup_X_bending}$X$ bending}
|
||||
#+attr_latex: :options {0.49\textwidth}
|
||||
@ -468,8 +477,7 @@ This test bench is shown in Figure ref:fig:test_bench_apa and consists of the AP
|
||||
An encoder is used to measure the relative motion between the two granites (i.e. the displacement of the APA).
|
||||
|
||||
#+name: fig:test_bench_apa
|
||||
#+caption: Schematic of the test bench used to estimate the dynamics of the APA300ML
|
||||
#+attr_latex: :options [htbp]
|
||||
#+caption: Test bench used to characterize the APA300ML
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_bench_picture}Picture of the test bench}
|
||||
#+attr_latex: :options {0.3\textwidth}
|
||||
@ -754,20 +762,6 @@ The following can be observed:
|
||||
- A lightly damped resonance at $95\,\text{Hz}$
|
||||
- A "mass line" up to $\approx 800\,\text{Hz}$, above which some resonances appear. These additional resonances might be coming from the limited stiffness of the encoder support or from the limited compliance of the APA support.
|
||||
|
||||
The dynamics from $u$ to the measured voltage across the sensor stack $V_s$ is also identified and shown in Figure ref:fig:test_apa_frf_force.
|
||||
|
||||
A lightly damped resonance is observed at $95\,\text{Hz}$ and a lightly damped anti-resonance at $41\,\text{Hz}$.
|
||||
No additional resonances is present up to at least $2\,\text{kHz}$ indicating at Integral Force Feedback can be applied without stability issues from high frequency flexible modes.
|
||||
|
||||
As illustrated by the Root Locus, the poles of the closed-loop system converges to the zeros of the open-loop plant.
|
||||
Suppose that a controller with a very high gain is implemented such that the voltage $V_s$ across the sensor stack is zero.
|
||||
In that case, because of the very high controller gain, no stress and strain is present on the sensor stack (and on the actuator stacks are well, as they are both in series).
|
||||
Such closed-loop system would therefore virtually corresponds to a system for which the piezoelectric stacks have been removed and just the mechanical shell is kept.
|
||||
From this analysis, the axial stiffness of the shell can be estimated to be $k_{\text{shell}} = 5.7 \cdot (2\pi \cdot 41)^2 = 0.38\,N/\mu m$.
|
||||
# TODO - Compare with FEM result
|
||||
|
||||
Such reasoning can lead to very interesting insight into the system just from an open-loop identification.
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Plot the FRF from u to de
|
||||
figure;
|
||||
@ -783,7 +777,7 @@ hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
ylim([1e-8, 1e-3]);
|
||||
|
||||
ax2 = nexttile;
|
||||
@ -801,10 +795,29 @@ linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_apa_frf_encoder.pdf', 'width', 'half', 'height', 'tall');
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/test_apa_frf_encoder.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_apa_frf_encoder
|
||||
#+caption: Estimated Frequency Response Function from generated voltage $u$ to the encoder displacement $d_e$ for the 6 APA300ML
|
||||
#+RESULTS:
|
||||
[[file:figs/test_apa_frf_encoder.png]]
|
||||
|
||||
The dynamics from $u$ to the measured voltage across the sensor stack $V_s$ is also identified and shown in Figure ref:fig:test_apa_frf_force.
|
||||
|
||||
A lightly damped resonance is observed at $95\,\text{Hz}$ and a lightly damped anti-resonance at $41\,\text{Hz}$.
|
||||
No additional resonances is present up to at least $2\,\text{kHz}$ indicating at Integral Force Feedback can be applied without stability issues from high frequency flexible modes.
|
||||
|
||||
As illustrated by the Root Locus, the poles of the closed-loop system converges to the zeros of the open-loop plant.
|
||||
Suppose that a controller with a very high gain is implemented such that the voltage $V_s$ across the sensor stack is zero.
|
||||
In that case, because of the very high controller gain, no stress and strain is present on the sensor stack (and on the actuator stacks are well, as they are both in series).
|
||||
Such closed-loop system would therefore virtually corresponds to a system for which the piezoelectric stacks have been removed and just the mechanical shell is kept.
|
||||
From this analysis, the axial stiffness of the shell can be estimated to be $k_{\text{shell}} = 5.7 \cdot (2\pi \cdot 41)^2 = 0.38\,N/\mu m$.
|
||||
# TODO - Compare with FEM result
|
||||
|
||||
Such reasoning can lead to very interesting insight into the system just from an open-loop identification.
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Plot the FRF from u to Vs
|
||||
figure;
|
||||
@ -838,27 +851,14 @@ linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_apa_frf_force.pdf', 'width', 'half', 'height', 'tall');
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/test_apa_frf_force.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_apa_frf_dynamics
|
||||
#+caption: Measured frequency response function from generated voltage $u$ to the encoder displacement $d_e$ (\subref{fig:test_apa_frf_encoder}) and to the force sensor voltage $V_s$ (\subref{fig:test_apa_frf_force}) for the six APA300ML
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_frf_encoder}FRF from $u$ to $d_e$}
|
||||
#+attr_latex: :options {0.49\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
[[file:figs/test_apa_frf_encoder.png]]
|
||||
#+end_subfigure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_frf_force}FRF from $u$ to $V_s$}
|
||||
#+attr_latex: :options {0.49\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
#+name: fig:test_apa_frf_force
|
||||
#+caption: Estimated Frequency Response Function from generated voltage $u$ to the sensor stack voltage $V_s$ for the 6 APA300ML
|
||||
#+RESULTS:
|
||||
[[file:figs/test_apa_frf_force.png]]
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
All the identified dynamics of the six APA300ML (both when looking at the encoder in Figure ref:fig:test_apa_frf_encoder and at the force sensor in Figure ref:fig:test_apa_frf_force) are almost identical, indicating good manufacturing repeatability for the piezoelectric stacks and the mechanical lever.
|
||||
|
||||
@ -900,15 +900,15 @@ G_hpf = 0.6*(s/2*pi*f0)/(1 + s/2*pi*f0);
|
||||
#+begin_src matlab :exports none
|
||||
%% Compare the HPF model and the measured FRF
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile();
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(frf_wo_k), 'DisplayName', 'Without $R$');
|
||||
plot(f, abs(frf_wi_k), 'DisplayName', 'With $R$');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
ylabel('Amplitude $V_s/u$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-1, 1e0]);
|
||||
legend('location', 'southeast')
|
||||
@ -921,15 +921,14 @@ hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:45:360); ylim([-5, 90]);
|
||||
yticks(-360:45:360); ylim([-45, 90]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([0.2, 8]);
|
||||
xticks([0.2, 0.5, 1, 2, 5]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/test_apa_effect_resistance.pdf', 'width', 'wide', 'height', 600);
|
||||
exportFig('figs/test_apa_effect_resistance.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_apa_effect_resistance
|
||||
@ -1033,7 +1032,7 @@ To estimate how the dynamics of the APA changes when the Integral Force Feedback
|
||||
The transfer function from the "damped" plant input $u\prime$ to the encoder displacement $d_e$ is identified for several IFF controller gains $g$.
|
||||
|
||||
#+name: fig:test_apa_iff_schematic
|
||||
#+caption: Implementation of Integral Force Feedback in the Speedgoat. The damped plant has a new input $u\prime$
|
||||
#+caption: Figure caption
|
||||
[[file:figs/test_apa_iff_schematic.png]]
|
||||
|
||||
#+begin_src matlab
|
||||
@ -1065,13 +1064,6 @@ The identified dynamics are then fitted by second order transfer functions.
|
||||
The comparison between the identified damped dynamics and the fitted second order transfer functions is done in Figure ref:fig:test_apa_identified_damped_plants for different gains $g$.
|
||||
It is clear that large amount of damping is added when the gain is increased and that the frequency of the pole is shifted to lower frequencies.
|
||||
|
||||
|
||||
The evolution of the pole in the complex plane as a function of the controller gain $g$ (i.e. the "root locus") is computed:
|
||||
- using the IFF plant model eqref:eq:test_apa_iff_manual_fit and the implemented controller eqref:eq:test_apa_Kiff_formula
|
||||
- from the fitted transfer functions of the damped plants experimentally identified for several controller gains
|
||||
|
||||
The two obtained root loci are compared in Figure ref:fig:test_apa_iff_root_locus and are in good agreement considering that the damped plants were only fitted using a second order transfer function.
|
||||
|
||||
#+begin_src matlab
|
||||
%% Fit the data with 2nd order transfer function using vectfit3
|
||||
opts = struct();
|
||||
@ -1122,10 +1114,21 @@ xlim([10, 1e3]);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_apa_identified_damped_plants.pdf', 'width', 'normal', 'height', 'tall');
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/test_apa_identified_damped_plants.pdf', 'width', 'wide', 'height', 'normal');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_apa_identified_damped_plants
|
||||
#+caption: Identified dynamics (solid lines) and fitted transfer functions (dashed lines) from $u\prime$ to $d_e$ for different IFF gains
|
||||
#+RESULTS:
|
||||
[[file:figs/test_apa_identified_damped_plants.png]]
|
||||
|
||||
The evolution of the pole in the complex plane as a function of the controller gain $g$ (i.e. the "root locus") is computed:
|
||||
- using the IFF plant model eqref:eq:test_apa_iff_manual_fit and the implemented controller eqref:eq:test_apa_Kiff_formula
|
||||
- from the fitted transfer functions of the damped plants experimentally identified for several controller gains
|
||||
|
||||
The two obtained root loci are compared in Figure ref:fig:test_apa_iff_root_locus and are in good agreement considering that the damped plants were only fitted using a second order transfer function.
|
||||
|
||||
#+begin_src matlab :exports none :results none
|
||||
%% Root Locus of the APA300ML with Integral Force Feedback
|
||||
% Comparison between the computed root locus from the plant model and the root locus estimated from the damped plant pole identification
|
||||
@ -1152,36 +1155,22 @@ end
|
||||
for i = 1:length(i_kept)
|
||||
plot(real(pole(G_dL_id{i})), imag(pole(G_dL_id{i})), 'x', 'color', [colors(i,:), 1], 'DisplayName', sprintf('g = %1.f', data.gains(i_kept(i))));
|
||||
end
|
||||
ylim([0, 700]);
|
||||
xlim([-600,100]);
|
||||
xlabel('Real Part')
|
||||
ylabel('Imaginary Part')
|
||||
axis equal
|
||||
ylim([0, 610]);
|
||||
xlim([-300,0]);
|
||||
legend('location', 'southwest');
|
||||
axis square
|
||||
legend('location', 'northwest');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_apa_iff_root_locus.pdf', 'width', 'half', 'height', 'tall');
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/test_apa_iff_root_locus.pdf', 'width', 'wide', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_apa_iff
|
||||
#+caption: Experimental results of applying Integral Force Feedback to the APA300ML. Obtained damped plant (\subref{fig:test_apa_identified_damped_plants}) and Root Locus (\subref{fig:test_apa_iff_root_locus})
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_identified_damped_plants}Measured frequency response functions of damped plants for several IFF gains (solid lines). Identified 2nd order plants to match the experimental data (dashed lines)}
|
||||
#+attr_latex: :options {0.59\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :height 8cm
|
||||
[[file:figs/test_apa_identified_damped_plants.png]]
|
||||
#+end_subfigure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_iff_root_locus}Root Locus plot using the plant model (black) and poles of the identified damped plants (color crosses)}
|
||||
#+attr_latex: :options {0.39\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :height 8cm
|
||||
#+name: fig:test_apa_iff_root_locus
|
||||
#+caption: Root Locus of the APA300ML with Integral Force Feedback - Comparison between the computed root locus from the plant model (black line) and the root locus estimated from the damped plant pole identification (colorful crosses)
|
||||
#+RESULTS:
|
||||
[[file:figs/test_apa_iff_root_locus.png]]
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
|
||||
|
||||
** Conclusion :ignore:
|
||||
|
||||
@ -1242,9 +1231,6 @@ clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/u'], 1, 'openinput'); io_i = io_i + 1; % DAC Voltage
|
||||
io(io_i) = linio([mdl, '/Vs'], 1, 'openoutput'); io_i = io_i + 1; % Sensor Voltage
|
||||
io(io_i) = linio([mdl, '/de'], 1, 'openoutput'); io_i = io_i + 1; % Encoder
|
||||
|
||||
%% Frequency vector for analysis
|
||||
freqs = 5*logspace(0, 3, 1000);
|
||||
#+end_src
|
||||
|
||||
** Two Degrees of Freedom APA Model
|
||||
@ -1381,7 +1367,7 @@ The obtained parameters of the model shown in Figure ref:fig:test_apa_2dof_model
|
||||
The dynamics of the 2DoF APA300ML model is now extracted using optimized parameters (listed in Table ref:tab:test_apa_2dof_parameters) from the Simscape model.
|
||||
It is compared with the experimental data in Figure ref:fig:test_apa_2dof_comp_frf.
|
||||
|
||||
A good match can be observed between the model and the experimental data, both for the encoder (Figure ref:fig:test_apa_2dof_comp_frf_enc) and for the force sensor (Figure ref:fig:test_apa_2dof_comp_frf_force).
|
||||
A good match can be observed between the model and the experimental data, both for the encoder and for the force sensor.
|
||||
This indicates that this model represents well the axial dynamics of the APA300ML.
|
||||
|
||||
#+begin_src matlab
|
||||
@ -1407,8 +1393,9 @@ G_2dof.OutputName = {'Vs', 'de'};
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Comparison of the measured FRF and the optimized 2DoF model of the APA300ML
|
||||
freqs = 5*logspace(0, 3, 1000);
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
tiledlayout(3, 2, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
@ -1424,32 +1411,7 @@ hold off;
|
||||
ylim([1e-8, 1e-3]);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), 'color', [0,0,0,0.2]);
|
||||
end
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_2dof('de', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_apa_2dof_comp_frf_enc.pdf', 'width', 'half', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Comparison of the measured FRF and the optimized 2DoF model of the APA300ML
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
ax1b = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(iff_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified');
|
||||
for i = 2:length(apa_nums)
|
||||
@ -1465,6 +1427,18 @@ legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), 'color', [0,0,0,0.2]);
|
||||
end
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_2dof('de', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
ax2b = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, 180/pi*angle(iff_frf(:, i)), 'color', [0,0,0,0.2]);
|
||||
end
|
||||
@ -1475,31 +1449,18 @@ xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
linkaxes([ax1,ax2,ax1b,ax2b],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_apa_2dof_comp_frf_force.pdf', 'width', 'half', 'height', 'tall');
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/test_apa_2dof_comp_frf.pdf', 'width', 'full', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_apa_2dof_comp_frf
|
||||
#+caption: Comparison of the measured frequency response functions and the identified dynamics from the 2DoF model of the APA300ML. Both for the dynamics from $u$ to $d_e$ (\subref{fig:test_apa_2dof_comp_frf_enc}) (\subref{fig:test_apa_2dof_comp_frf_force}) and from $u$ to $V_s$ (\subref{fig:test_apa_2dof_comp_frf_force})
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_2dof_comp_frf_enc}from $u$ to $d_e$}
|
||||
#+attr_latex: :options {0.49\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
[[file:figs/test_apa_2dof_comp_frf_enc.png]]
|
||||
#+end_subfigure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_2dof_comp_frf_force}from $u$ to $V_s$}
|
||||
#+attr_latex: :options {0.49\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
[[file:figs/test_apa_2dof_comp_frf_force.png]]
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
#+caption: Comparison of the measured FRF and the optimized 2DoF model of the APA300ML
|
||||
#+RESULTS:
|
||||
[[file:figs/test_apa_2dof_comp_frf.png]]
|
||||
|
||||
** Conclusion :ignore:
|
||||
|
||||
@ -1555,9 +1516,6 @@ clear io; io_i = 1;
|
||||
io(io_i) = linio([mdl, '/u'], 1, 'openinput'); io_i = io_i + 1; % DAC Voltage
|
||||
io(io_i) = linio([mdl, '/Vs'], 1, 'openoutput'); io_i = io_i + 1; % Sensor Voltage
|
||||
io(io_i) = linio([mdl, '/de'], 1, 'openoutput'); io_i = io_i + 1; % Encoder
|
||||
|
||||
%% Frequency vector for analysis
|
||||
freqs = 5*logspace(0, 3, 1000);
|
||||
#+end_src
|
||||
|
||||
** Extraction of the super-element
|
||||
@ -1685,8 +1643,9 @@ G_flex.OutputName = {'Vs', 'de'};
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Comparison of the measured FRF and the "Flexible" model of the APA300ML
|
||||
freqs = 5*logspace(0, 3, 1000);
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
tiledlayout(3, 2, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
@ -1702,32 +1661,7 @@ hold off;
|
||||
ylim([1e-8, 1e-3]);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), 'color', [0,0,0,0.2]);
|
||||
end
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_flex('de', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_apa_super_element_comp_frf_enc.pdf', 'width', 'half', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
%% Comparison of the measured FRF and the "Flexible" model of the APA300ML
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
ax1b = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(iff_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified');
|
||||
for i = 2:length(apa_nums)
|
||||
@ -1743,6 +1677,18 @@ legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), 'color', [0,0,0,0.2]);
|
||||
end
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_flex('de', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
ax2b = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, 180/pi*angle(iff_frf(:, i)), 'color', [0,0,0,0.2]);
|
||||
end
|
||||
@ -1753,31 +1699,18 @@ xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
linkaxes([ax1,ax2,ax1b,ax2b],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :tangle no :exports results :results file none
|
||||
exportFig('figs/test_apa_super_element_comp_frf_force.pdf', 'width', 'half', 'height', 'tall');
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
exportFig('figs/test_apa_super_element_comp_frf.pdf', 'width', 'full', 'height', 'tall');
|
||||
#+end_src
|
||||
|
||||
#+name: fig:test_apa_super_element_comp_frf
|
||||
#+caption: Comparison of the measured frequency response functions and the identified dynamics from the "flexible" model of the APA300ML. Both for the dynamics from $u$ to $d_e$ (\subref{fig:test_apa_2dof_comp_frf_enc}) (\subref{fig:test_apa_2dof_comp_frf_force}) and from $u$ to $V_s$ (\subref{fig:test_apa_2dof_comp_frf_force})
|
||||
#+attr_latex: :options [htbp]
|
||||
#+begin_figure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_super_element_comp_frf_enc}from $u$ to $d_e$}
|
||||
#+attr_latex: :options {0.49\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
[[file:figs/test_apa_super_element_comp_frf_enc.png]]
|
||||
#+end_subfigure
|
||||
#+attr_latex: :caption \subcaption{\label{fig:test_apa_super_element_comp_frf_force}from $u$ to $V_s$}
|
||||
#+attr_latex: :options {0.49\textwidth}
|
||||
#+begin_subfigure
|
||||
#+attr_latex: :width 0.95\linewidth
|
||||
[[file:figs/test_apa_super_element_comp_frf_force.png]]
|
||||
#+end_subfigure
|
||||
#+end_figure
|
||||
#+caption: Comparison of the measured FRF and the "Flexible" model of the APA300ML
|
||||
#+RESULTS:
|
||||
[[file:figs/test_apa_super_element_comp_frf.png]]
|
||||
|
||||
** Conclusion :ignore:
|
||||
|
||||
@ -2012,6 +1945,6 @@ actuator.cs = args.cs; % Damping of one stack [N/m]
|
||||
[fn:6]Polytec controller 3001 with sensor heads OFV512
|
||||
[fn:5]Note that this is not fully correct as it was shown in Section ref:ssec:test_apa_stiffness that the electrical boundaries of the piezoelectric stack impacts its stiffness and that the sensor stack is almost open-circuited while the actuator stacks are almost short-circuited.
|
||||
[fn:4]The Matlab =fminsearch= command is used to fit the plane
|
||||
[fn:3]Heidenhain MT25, specified accuracy of $\pm 0.5\,\mu m$
|
||||
[fn:3]Heidenhain MT25, specified accuracy of $0.5\,\mu m$
|
||||
[fn:2]Millimar 1318 probe, specified linearity better than $1\,\mu m$
|
||||
[fn:1]LCR-819 from Gwinstek, specified accuracy of $0.05\%$, measured frequency is set at $1\,\text{kHz}$
|
||||
|
@ -1,4 +1,4 @@
|
||||
% Created 2024-03-27 Wed 23:01
|
||||
% Created 2024-03-23 Sat 11:09
|
||||
% Intended LaTeX compiler: pdflatex
|
||||
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
pdftitle={Test Bench - Amplified Piezoelectric Actuator},
|
||||
pdfkeywords={},
|
||||
pdfsubject={},
|
||||
pdfcreator={Emacs 29.3 (Org mode 9.7)},
|
||||
pdfcreator={Emacs 29.2 (Org mode 9.7)},
|
||||
pdflang={English}}
|
||||
\usepackage{biblatex}
|
||||
|
||||
@ -67,7 +67,7 @@ Before using the measurement bench to characterize the APA300ML, first simple me
|
||||
|
||||
To measure the flatness of the two mechanical interfaces of the APA300ML, a small measurement bench is installed on top of a metrology granite with very good flatness.
|
||||
|
||||
As shown in Figure \ref{fig:test_apa_flatness_setup}, the APA is fixed to a clamp while a measuring probe\footnote{Heidenhain MT25, specified accuracy of \(\pm 0.5\,\mu m\)} is used to measure the height of 4 points on each of the APA300ML interfaces.
|
||||
As shown in Figure \ref{fig:test_apa_flatness_setup}, the APA is fixed to a clamp while a measuring probe\footnote{Heidenhain MT25, specified accuracy of \(0.5\,\mu m\)} is used to measure the height of 4 points on each of the APA300ML interfaces.
|
||||
|
||||
From the X-Y-Z coordinates of the measured 8 points, the flatness is estimated by best fitting\footnote{The Matlab \texttt{fminsearch} command is used to fit the plane} a plane through all the points.
|
||||
|
||||
@ -190,7 +190,7 @@ The flexible modes for the same condition (i.e. one mechanical interface of the
|
||||
|
||||
Two other similar measurements are performed to measured the bending of the APA around the \(X\) direction and around the \(Y\) direction (see Figure \ref{fig:test_apa_meas_setup_modes}).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{figure}
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_apa_meas_setup_X_bending.jpg}
|
||||
@ -240,7 +240,7 @@ After the basic measurements on the APA were performed in Section \ref{sec:test_
|
||||
This test bench is shown in Figure \ref{fig:test_bench_apa} and consists of the APA300ML fixed on one end to the fixed granite, and on the other end to the 5kg granite vertically guided with an air bearing.
|
||||
An encoder is used to measure the relative motion between the two granites (i.e. the displacement of the APA).
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{figure}
|
||||
\begin{subfigure}{0.3\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,height=8cm]{figs/test_apa_bench_picture.jpg}
|
||||
@ -253,7 +253,7 @@ An encoder is used to measure the relative motion between the two granites (i.e.
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_bench_picture_encoder}Zoom on the APA with the encoder}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_bench_apa}Schematic of the test bench used to estimate the dynamics of the APA300ML}
|
||||
\caption{\label{fig:test_bench_apa}Test bench used to characterize the APA300ML}
|
||||
\end{figure}
|
||||
|
||||
The bench is schematically shown in Figure \ref{fig:test_apa_schematic} and the signal used are summarized in Table \ref{tab:test_apa_variables}.
|
||||
@ -379,6 +379,12 @@ The minus sign comes from the fact that an increase in voltage stretches the pie
|
||||
\item A ``mass line'' up to \(\approx 800\,\text{Hz}\), above which some resonances appear. These additional resonances might be coming from the limited stiffness of the encoder support or from the limited compliance of the APA support.
|
||||
\end{itemize}
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_apa_frf_encoder.png}
|
||||
\caption{\label{fig:test_apa_frf_encoder}Estimated Frequency Response Function from generated voltage \(u\) to the encoder displacement \(d_e\) for the 6 APA300ML}
|
||||
\end{figure}
|
||||
|
||||
The dynamics from \(u\) to the measured voltage across the sensor stack \(V_s\) is also identified and shown in Figure \ref{fig:test_apa_frf_force}.
|
||||
|
||||
A lightly damped resonance is observed at \(95\,\text{Hz}\) and a lightly damped anti-resonance at \(41\,\text{Hz}\).
|
||||
@ -389,23 +395,12 @@ Suppose that a controller with a very high gain is implemented such that the vol
|
||||
In that case, because of the very high controller gain, no stress and strain is present on the sensor stack (and on the actuator stacks are well, as they are both in series).
|
||||
Such closed-loop system would therefore virtually corresponds to a system for which the piezoelectric stacks have been removed and just the mechanical shell is kept.
|
||||
From this analysis, the axial stiffness of the shell can be estimated to be \(k_{\text{shell}} = 5.7 \cdot (2\pi \cdot 41)^2 = 0.38\,N/\mu m\).
|
||||
|
||||
Such reasoning can lead to very interesting insight into the system just from an open-loop identification.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_apa_frf_encoder.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_frf_encoder}FRF from $u$ to $d_e$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_apa_frf_force.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_frf_force}FRF from $u$ to $V_s$}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_apa_frf_dynamics}Measured frequency response function from generated voltage \(u\) to the encoder displacement \(d_e\) (\subref{fig:test_apa_frf_encoder}) and to the force sensor voltage \(V_s\) (\subref{fig:test_apa_frf_force}) for the six APA300ML}
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_apa_frf_force.png}
|
||||
\caption{\label{fig:test_apa_frf_force}Estimated Frequency Response Function from generated voltage \(u\) to the sensor stack voltage \(V_s\) for the 6 APA300ML}
|
||||
\end{figure}
|
||||
|
||||
All the identified dynamics of the six APA300ML (both when looking at the encoder in Figure \ref{fig:test_apa_frf_encoder} and at the force sensor in Figure \ref{fig:test_apa_frf_force}) are almost identical, indicating good manufacturing repeatability for the piezoelectric stacks and the mechanical lever.
|
||||
@ -462,13 +457,18 @@ The transfer function from the ``damped'' plant input \(u\prime\) to the encoder
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_apa_iff_schematic.png}
|
||||
\caption{\label{fig:test_apa_iff_schematic}Implementation of Integral Force Feedback in the Speedgoat. The damped plant has a new input \(u\prime\)}
|
||||
\caption{\label{fig:test_apa_iff_schematic}Figure caption}
|
||||
\end{figure}
|
||||
|
||||
The identified dynamics are then fitted by second order transfer functions.
|
||||
The comparison between the identified damped dynamics and the fitted second order transfer functions is done in Figure \ref{fig:test_apa_identified_damped_plants} for different gains \(g\).
|
||||
It is clear that large amount of damping is added when the gain is increased and that the frequency of the pole is shifted to lower frequencies.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_apa_identified_damped_plants.png}
|
||||
\caption{\label{fig:test_apa_identified_damped_plants}Identified dynamics (solid lines) and fitted transfer functions (dashed lines) from \(u\prime\) to \(d_e\) for different IFF gains}
|
||||
\end{figure}
|
||||
|
||||
The evolution of the pole in the complex plane as a function of the controller gain \(g\) (i.e. the ``root locus'') is computed:
|
||||
\begin{itemize}
|
||||
@ -479,19 +479,9 @@ The evolution of the pole in the complex plane as a function of the controller g
|
||||
The two obtained root loci are compared in Figure \ref{fig:test_apa_iff_root_locus} and are in good agreement considering that the damped plants were only fitted using a second order transfer function.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.59\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,height=8cm]{figs/test_apa_identified_damped_plants.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_identified_damped_plants}Measured frequency response functions of damped plants for several IFF gains (solid lines). Identified 2nd order plants to match the experimental data (dashed lines)}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.39\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,height=8cm]{figs/test_apa_iff_root_locus.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_iff_root_locus}Root Locus plot using the plant model (black) and poles of the identified damped plants (color crosses)}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_apa_iff}Experimental results of applying Integral Force Feedback to the APA300ML. Obtained damped plant (\subref{fig:test_apa_identified_damped_plants}) and Root Locus (\subref{fig:test_apa_iff_root_locus})}
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_apa_iff_root_locus.png}
|
||||
\caption{\label{fig:test_apa_iff_root_locus}Root Locus of the APA300ML with Integral Force Feedback - Comparison between the computed root locus from the plant model (black line) and the root locus estimated from the damped plant pole identification (colorful crosses)}
|
||||
\end{figure}
|
||||
\begin{important}
|
||||
So far, all the measured FRF are showing the dynamical behavior that was expected.
|
||||
@ -590,7 +580,7 @@ The obtained parameters of the model shown in Figure \ref{fig:test_apa_2dof_mode
|
||||
\(c_e\) & \(200\,Ns/m\)\\
|
||||
\(c_a\) & \(100\,Ns/m\)\\
|
||||
\(g_a\) & \(-2.58\,N/V\)\\
|
||||
\(g_s\) & \(0.46\,V/\mu m\)\\
|
||||
\(g_s\) & \(4.6\,V/\mu m\)\\
|
||||
\bottomrule
|
||||
\end{tabularx}
|
||||
\end{table}
|
||||
@ -600,23 +590,13 @@ The obtained parameters of the model shown in Figure \ref{fig:test_apa_2dof_mode
|
||||
The dynamics of the 2DoF APA300ML model is now extracted using optimized parameters (listed in Table \ref{tab:test_apa_2dof_parameters}) from the Simscape model.
|
||||
It is compared with the experimental data in Figure \ref{fig:test_apa_2dof_comp_frf}.
|
||||
|
||||
A good match can be observed between the model and the experimental data, both for the encoder (Figure \ref{fig:test_apa_2dof_comp_frf_enc}) and for the force sensor (Figure \ref{fig:test_apa_2dof_comp_frf_force}).
|
||||
A good match can be observed between the model and the experimental data, both for the encoder and for the force sensor.
|
||||
This indicates that this model represents well the axial dynamics of the APA300ML.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_apa_2dof_comp_frf_enc.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_2dof_comp_frf_enc}from $u$ to $d_e$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_apa_2dof_comp_frf_force.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_2dof_comp_frf_force}from $u$ to $V_s$}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_apa_2dof_comp_frf}Comparison of the measured frequency response functions and the identified dynamics from the 2DoF model of the APA300ML. Both for the dynamics from \(u\) to \(d_e\) (\subref{fig:test_apa_2dof_comp_frf_enc}) (\subref{fig:test_apa_2dof_comp_frf_force}) and from \(u\) to \(V_s\) (\subref{fig:test_apa_2dof_comp_frf_force})}
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_apa_2dof_comp_frf.png}
|
||||
\caption{\label{fig:test_apa_2dof_comp_frf}Comparison of the measured FRF and the optimized 2DoF model of the APA300ML}
|
||||
\end{figure}
|
||||
\chapter{APA300ML - Super Element}
|
||||
\label{sec:test_apa_model_flexible}
|
||||
@ -700,19 +680,9 @@ The flexible model is a bit ``soft'' as compared with the experimental results.
|
||||
This method can be used to model piezoelectric stack actuators as well as amplified piezoelectric stack actuators.
|
||||
|
||||
\begin{figure}[htbp]
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_apa_super_element_comp_frf_enc.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_super_element_comp_frf_enc}from $u$ to $d_e$}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}{0.49\textwidth}
|
||||
\begin{center}
|
||||
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_apa_super_element_comp_frf_force.png}
|
||||
\end{center}
|
||||
\subcaption{\label{fig:test_apa_super_element_comp_frf_force}from $u$ to $V_s$}
|
||||
\end{subfigure}
|
||||
\caption{\label{fig:test_apa_super_element_comp_frf}Comparison of the measured frequency response functions and the identified dynamics from the ``flexible'' model of the APA300ML. Both for the dynamics from \(u\) to \(d_e\) (\subref{fig:test_apa_2dof_comp_frf_enc}) (\subref{fig:test_apa_2dof_comp_frf_force}) and from \(u\) to \(V_s\) (\subref{fig:test_apa_2dof_comp_frf_force})}
|
||||
\centering
|
||||
\includegraphics[scale=1]{figs/test_apa_super_element_comp_frf.png}
|
||||
\caption{\label{fig:test_apa_super_element_comp_frf}Comparison of the measured FRF and the ``Flexible'' model of the APA300ML}
|
||||
\end{figure}
|
||||
\chapter{Conclusion}
|
||||
\label{sec:test_apa_conclusion}
|
||||
|