Compare commits

...

2 Commits

Author SHA1 Message Date
8aed6183a9 Use subfigures when possible 2024-03-27 23:02:11 +01:00
f855ce6f62 Add data 2024-03-27 23:01:53 +01:00
53 changed files with 14339 additions and 15327 deletions

2
.gitignore vendored
View File

@ -1,5 +1,3 @@
mat/
figures/
ltximg/ ltximg/
*.autosave *.autosave
slprj/ slprj/

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 153 KiB

View File

@ -19,17 +19,17 @@
xmlns:cc="http://creativecommons.org/ns#" xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"> xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview <sodipodi:namedview
inkscape:current-layer="layer9" inkscape:current-layer="g841"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:window-y="60" inkscape:window-y="0"
inkscape:window-x="11" inkscape:window-x="0"
inkscape:cy="140.18392" inkscape:cy="140.3607"
inkscape:cx="197.9899" inkscape:cx="197.9899"
inkscape:zoom="2.8284271" inkscape:zoom="2.8284271"
showgrid="false" showgrid="false"
id="namedview835" id="namedview835"
inkscape:window-height="1367" inkscape:window-height="1200"
inkscape:window-width="2534" inkscape:window-width="1920"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:pageopacity="0" inkscape:pageopacity="0"
guidetolerance="10" guidetolerance="10"
@ -3736,7 +3736,7 @@
</g> </g>
<g <g
id="g1470" id="g1470"
transform="translate(-213.6103,94.361419)" transform="translate(-199.21908,94.072346)"
inkscape:label=""> inkscape:label="">
<g <g
id="g7335"> id="g7335">
@ -3751,50 +3751,6 @@
width="100%" width="100%"
height="100%" /> height="100%" />
</g> </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>
</g> </g>
<path <path

Before

Width:  |  Height:  |  Size: 255 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 140 KiB

View File

@ -19,17 +19,17 @@
xmlns:cc="http://creativecommons.org/ns#" xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"> xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview <sodipodi:namedview
inkscape:current-layer="layer9" inkscape:current-layer="g841"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:window-y="60" inkscape:window-y="38"
inkscape:window-x="11" inkscape:window-x="965"
inkscape:cy="139.83037" inkscape:cy="140.18392"
inkscape:cx="197.9899" inkscape:cx="197.9899"
inkscape:zoom="2.8284271" inkscape:zoom="2.8284271"
showgrid="false" showgrid="false"
id="namedview835" id="namedview835"
inkscape:window-height="1367" inkscape:window-height="1147"
inkscape:window-width="2534" inkscape:window-width="940"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:pageopacity="0" inkscape:pageopacity="0"
guidetolerance="10" guidetolerance="10"
@ -3736,7 +3736,7 @@
</g> </g>
<g <g
id="g1470" id="g1470"
transform="translate(-213.6103,94.361419)" transform="translate(-199.21908,94.072346)"
inkscape:label=""> inkscape:label="">
<g <g
id="g7335"> id="g7335">
@ -3753,48 +3753,7 @@
</g> </g>
<g <g
style="fill:#000000;fill-opacity:1" 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>
</g> </g>
<path <path

Before

Width:  |  Height:  |  Size: 255 KiB

After

Width:  |  Height:  |  Size: 254 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
matlab/mat/meas_apa_frf.mat Normal file

Binary file not shown.

Binary file not shown.

91
matlab/src/extractNodes.m Normal file
View File

@ -0,0 +1,91 @@
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

View File

@ -73,16 +73,6 @@
(add-to-list 'org-export-filter-headline-functions (add-to-list 'org-export-filter-headline-functions
'my-latex-filter-removeOrgAutoLabels) '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 ;; Use no package by default
(setq org-latex-packages-alist nil) (setq org-latex-packages-alist nil)
(setq org-latex-default-packages-alist nil) (setq org-latex-default-packages-alist nil)
@ -372,6 +362,7 @@ Two other similar measurements are performed to measured the bending of the APA
#+name: fig:test_apa_meas_setup_modes #+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). #+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 #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_apa_meas_setup_X_bending}$X$ bending} #+attr_latex: :caption \subcaption{\label{fig:test_apa_meas_setup_X_bending}$X$ bending}
#+attr_latex: :options {0.49\textwidth} #+attr_latex: :options {0.49\textwidth}
@ -477,7 +468,8 @@ 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). 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 #+name: fig:test_bench_apa
#+caption: Test bench used to characterize the APA300ML #+caption: Schematic of the test bench used to estimate the dynamics of the APA300ML
#+attr_latex: :options [htbp]
#+begin_figure #+begin_figure
#+attr_latex: :caption \subcaption{\label{fig:test_apa_bench_picture}Picture of the test bench} #+attr_latex: :caption \subcaption{\label{fig:test_apa_bench_picture}Picture of the test bench}
#+attr_latex: :options {0.3\textwidth} #+attr_latex: :options {0.3\textwidth}
@ -762,6 +754,20 @@ The following can be observed:
- A lightly damped resonance at $95\,\text{Hz}$ - 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. - 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 #+begin_src matlab :exports none
%% Plot the FRF from u to de %% Plot the FRF from u to de
figure; figure;
@ -777,7 +783,7 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
hold off; hold off;
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2); legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-8, 1e-3]); ylim([1e-8, 1e-3]);
ax2 = nexttile; ax2 = nexttile;
@ -795,29 +801,10 @@ linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file none
exportFig('figs/test_apa_frf_encoder.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/test_apa_frf_encoder.pdf', 'width', 'half', 'height', 'tall');
#+end_src #+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 #+begin_src matlab :exports none
%% Plot the FRF from u to Vs %% Plot the FRF from u to Vs
figure; figure;
@ -851,14 +838,27 @@ linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file none
exportFig('figs/test_apa_frf_force.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/test_apa_frf_force.pdf', 'width', 'half', 'height', 'tall');
#+end_src #+end_src
#+name: fig:test_apa_frf_force #+name: fig:test_apa_frf_dynamics
#+caption: Estimated Frequency Response Function from generated voltage $u$ to the sensor stack voltage $V_s$ for the 6 APA300ML #+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
#+RESULTS: #+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
[[file:figs/test_apa_frf_force.png]] [[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. 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 #+begin_src matlab :exports none
%% Compare the HPF model and the measured FRF %% Compare the HPF model and the measured FRF
figure; figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(2, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]); ax1 = nexttile();
hold on; hold on;
plot(f, abs(frf_wo_k), 'DisplayName', 'Without $R$'); plot(f, abs(frf_wo_k), 'DisplayName', 'Without $R$');
plot(f, abs(frf_wi_k), 'DisplayName', 'With $R$'); plot(f, abs(frf_wi_k), 'DisplayName', 'With $R$');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $V_s/u$ [V/V]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude [V/V]'); set(gca, 'XTickLabel',[]);
hold off; hold off;
ylim([1e-1, 1e0]); ylim([1e-1, 1e0]);
legend('location', 'southeast') legend('location', 'southeast')
@ -921,14 +921,15 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:45:360); ylim([-45, 90]); yticks(-360:45:360); ylim([-5, 90]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([0.2, 8]); xlim([0.2, 8]);
xticks([0.2, 0.5, 1, 2, 5]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/test_apa_effect_resistance.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/test_apa_effect_resistance.pdf', 'width', 'wide', 'height', 600);
#+end_src #+end_src
#+name: fig:test_apa_effect_resistance #+name: fig:test_apa_effect_resistance
@ -1032,7 +1033,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$. 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 #+name: fig:test_apa_iff_schematic
#+caption: Figure caption #+caption: Implementation of Integral Force Feedback in the Speedgoat. The damped plant has a new input $u\prime$
[[file:figs/test_apa_iff_schematic.png]] [[file:figs/test_apa_iff_schematic.png]]
#+begin_src matlab #+begin_src matlab
@ -1064,6 +1065,13 @@ 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$. 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. 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 #+begin_src matlab
%% Fit the data with 2nd order transfer function using vectfit3 %% Fit the data with 2nd order transfer function using vectfit3
opts = struct(); opts = struct();
@ -1114,21 +1122,10 @@ xlim([10, 1e3]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1); legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file none
exportFig('figs/test_apa_identified_damped_plants.pdf', 'width', 'wide', 'height', 'normal'); exportFig('figs/test_apa_identified_damped_plants.pdf', 'width', 'normal', 'height', 'tall');
#+end_src #+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 #+begin_src matlab :exports none :results none
%% Root Locus of the APA300ML with Integral Force Feedback %% 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 % Comparison between the computed root locus from the plant model and the root locus estimated from the damped plant pole identification
@ -1155,22 +1152,36 @@ end
for i = 1:length(i_kept) 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)))); 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 end
ylim([0, 700]);
xlim([-600,100]);
xlabel('Real Part') xlabel('Real Part')
ylabel('Imaginary Part') ylabel('Imaginary Part')
axis square axis equal
legend('location', 'northwest'); ylim([0, 610]);
xlim([-300,0]);
legend('location', 'southwest');
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file none
exportFig('figs/test_apa_iff_root_locus.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/test_apa_iff_root_locus.pdf', 'width', 'half', 'height', 'tall');
#+end_src #+end_src
#+name: fig:test_apa_iff_root_locus #+name: fig:test_apa_iff
#+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) #+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})
#+RESULTS: #+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
[[file:figs/test_apa_iff_root_locus.png]] [[file:figs/test_apa_iff_root_locus.png]]
#+end_subfigure
#+end_figure
** Conclusion :ignore: ** Conclusion :ignore:
@ -1231,6 +1242,9 @@ 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, '/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, '/Vs'], 1, 'openoutput'); io_i = io_i + 1; % Sensor Voltage
io(io_i) = linio([mdl, '/de'], 1, 'openoutput'); io_i = io_i + 1; % Encoder 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 #+end_src
** Two Degrees of Freedom APA Model ** Two Degrees of Freedom APA Model
@ -1367,7 +1381,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. 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. 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 and for the force sensor. 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).
This indicates that this model represents well the axial dynamics of the APA300ML. This indicates that this model represents well the axial dynamics of the APA300ML.
#+begin_src matlab #+begin_src matlab
@ -1393,9 +1407,8 @@ G_2dof.OutputName = {'Vs', 'de'};
#+begin_src matlab :exports none #+begin_src matlab :exports none
%% Comparison of the measured FRF and the optimized 2DoF model of the APA300ML %% Comparison of the measured FRF and the optimized 2DoF model of the APA300ML
freqs = 5*logspace(0, 3, 1000);
figure; figure;
tiledlayout(3, 2, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]); ax1 = nexttile([2,1]);
hold on; hold on;
@ -1411,7 +1424,32 @@ hold off;
ylim([1e-8, 1e-3]); ylim([1e-8, 1e-3]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1); legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ax1b = nexttile([2,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]);
hold on; hold on;
plot(f, abs(iff_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified'); plot(f, abs(iff_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified');
for i = 2:length(apa_nums) for i = 2:length(apa_nums)
@ -1427,18 +1465,6 @@ legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
ax2 = nexttile; ax2 = nexttile;
hold on; 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) for i = 1:length(apa_nums)
plot(f, 180/pi*angle(iff_frf(:, i)), 'color', [0,0,0,0.2]); plot(f, 180/pi*angle(iff_frf(:, i)), 'color', [0,0,0,0.2]);
end end
@ -1449,18 +1475,31 @@ xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); ylim([-180, 180]); yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2,ax1b,ax2b],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file none
exportFig('figs/test_apa_2dof_comp_frf.pdf', 'width', 'full', 'height', 'tall'); exportFig('figs/test_apa_2dof_comp_frf_force.pdf', 'width', 'half', 'height', 'tall');
#+end_src #+end_src
#+name: fig:test_apa_2dof_comp_frf #+name: fig:test_apa_2dof_comp_frf
#+caption: Comparison of the measured FRF and the optimized 2DoF model of the APA300ML #+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})
#+RESULTS: #+attr_latex: :options [htbp]
[[file:figs/test_apa_2dof_comp_frf.png]] #+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
** Conclusion :ignore: ** Conclusion :ignore:
@ -1516,6 +1555,9 @@ 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, '/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, '/Vs'], 1, 'openoutput'); io_i = io_i + 1; % Sensor Voltage
io(io_i) = linio([mdl, '/de'], 1, 'openoutput'); io_i = io_i + 1; % Encoder 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 #+end_src
** Extraction of the super-element ** Extraction of the super-element
@ -1643,9 +1685,8 @@ G_flex.OutputName = {'Vs', 'de'};
#+begin_src matlab :exports none #+begin_src matlab :exports none
%% Comparison of the measured FRF and the "Flexible" model of the APA300ML %% Comparison of the measured FRF and the "Flexible" model of the APA300ML
freqs = 5*logspace(0, 3, 1000);
figure; figure;
tiledlayout(3, 2, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]); ax1 = nexttile([2,1]);
hold on; hold on;
@ -1661,7 +1702,32 @@ hold off;
ylim([1e-8, 1e-3]); ylim([1e-8, 1e-3]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1); legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ax1b = nexttile([2,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]);
hold on; hold on;
plot(f, abs(iff_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified'); plot(f, abs(iff_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified');
for i = 2:length(apa_nums) for i = 2:length(apa_nums)
@ -1677,18 +1743,6 @@ legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
ax2 = nexttile; ax2 = nexttile;
hold on; 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) for i = 1:length(apa_nums)
plot(f, 180/pi*angle(iff_frf(:, i)), 'color', [0,0,0,0.2]); plot(f, 180/pi*angle(iff_frf(:, i)), 'color', [0,0,0,0.2]);
end end
@ -1699,18 +1753,31 @@ xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); ylim([-180, 180]); yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2,ax1b,ax2b],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file none
exportFig('figs/test_apa_super_element_comp_frf.pdf', 'width', 'full', 'height', 'tall'); exportFig('figs/test_apa_super_element_comp_frf_force.pdf', 'width', 'half', 'height', 'tall');
#+end_src #+end_src
#+name: fig:test_apa_super_element_comp_frf #+name: fig:test_apa_super_element_comp_frf
#+caption: Comparison of the measured FRF and the "Flexible" model of the APA300ML #+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})
#+RESULTS: #+attr_latex: :options [htbp]
[[file:figs/test_apa_super_element_comp_frf.png]] #+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
** Conclusion :ignore: ** Conclusion :ignore:
@ -1945,6 +2012,6 @@ actuator.cs = args.cs; % Damping of one stack [N/m]
[fn:6]Polytec controller 3001 with sensor heads OFV512 [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: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:4]The Matlab =fminsearch= command is used to fit the plane
[fn:3]Heidenhain MT25, specified accuracy of $0.5\,\mu m$ [fn:3]Heidenhain MT25, specified accuracy of $\pm 0.5\,\mu m$
[fn:2]Millimar 1318 probe, specified linearity better than $1\,\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}$ [fn:1]LCR-819 from Gwinstek, specified accuracy of $0.05\%$, measured frequency is set at $1\,\text{kHz}$

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2024-03-23 Sat 11:09 % Created 2024-03-27 Wed 23:01
% Intended LaTeX compiler: pdflatex % Intended LaTeX compiler: pdflatex
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
@ -12,7 +12,7 @@
pdftitle={Test Bench - Amplified Piezoelectric Actuator}, pdftitle={Test Bench - Amplified Piezoelectric Actuator},
pdfkeywords={}, pdfkeywords={},
pdfsubject={}, pdfsubject={},
pdfcreator={Emacs 29.2 (Org mode 9.7)}, pdfcreator={Emacs 29.3 (Org mode 9.7)},
pdflang={English}} pdflang={English}}
\usepackage{biblatex} \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. 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 \(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 \(\pm 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. 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}). 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} \begin{figure}[htbp]
\begin{subfigure}{0.49\textwidth} \begin{subfigure}{0.49\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_apa_meas_setup_X_bending.jpg} \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. 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). An encoder is used to measure the relative motion between the two granites (i.e. the displacement of the APA).
\begin{figure} \begin{figure}[htbp]
\begin{subfigure}{0.3\textwidth} \begin{subfigure}{0.3\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,height=8cm]{figs/test_apa_bench_picture.jpg} \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} \end{center}
\subcaption{\label{fig:test_apa_bench_picture_encoder}Zoom on the APA with the encoder} \subcaption{\label{fig:test_apa_bench_picture_encoder}Zoom on the APA with the encoder}
\end{subfigure} \end{subfigure}
\caption{\label{fig:test_bench_apa}Test bench used to characterize the APA300ML} \caption{\label{fig:test_bench_apa}Schematic of the test bench used to estimate the dynamics of the APA300ML}
\end{figure} \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}. 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,12 +379,6 @@ 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. \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} \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}. 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}\). A lightly damped resonance is observed at \(95\,\text{Hz}\) and a lightly damped anti-resonance at \(41\,\text{Hz}\).
@ -395,12 +389,23 @@ 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). 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. 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\). 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. Such reasoning can lead to very interesting insight into the system just from an open-loop identification.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \begin{subfigure}{0.49\textwidth}
\includegraphics[scale=1]{figs/test_apa_frf_force.png} \begin{center}
\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} \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}
\end{figure} \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. 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.
@ -457,18 +462,13 @@ The transfer function from the ``damped'' plant input \(u\prime\) to the encoder
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/test_apa_iff_schematic.png} \includegraphics[scale=1]{figs/test_apa_iff_schematic.png}
\caption{\label{fig:test_apa_iff_schematic}Figure caption} \caption{\label{fig:test_apa_iff_schematic}Implementation of Integral Force Feedback in the Speedgoat. The damped plant has a new input \(u\prime\)}
\end{figure} \end{figure}
The identified dynamics are then fitted by second order transfer functions. 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\). 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. 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: 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} \begin{itemize}
@ -479,9 +479,19 @@ 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. 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{figure}[htbp]
\centering \begin{subfigure}{0.59\textwidth}
\includegraphics[scale=1]{figs/test_apa_iff_root_locus.png} \begin{center}
\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)} \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})}
\end{figure} \end{figure}
\begin{important} \begin{important}
So far, all the measured FRF are showing the dynamical behavior that was expected. So far, all the measured FRF are showing the dynamical behavior that was expected.
@ -580,7 +590,7 @@ The obtained parameters of the model shown in Figure \ref{fig:test_apa_2dof_mode
\(c_e\) & \(200\,Ns/m\)\\ \(c_e\) & \(200\,Ns/m\)\\
\(c_a\) & \(100\,Ns/m\)\\ \(c_a\) & \(100\,Ns/m\)\\
\(g_a\) & \(-2.58\,N/V\)\\ \(g_a\) & \(-2.58\,N/V\)\\
\(g_s\) & \(4.6\,V/\mu m\)\\ \(g_s\) & \(0.46\,V/\mu m\)\\
\bottomrule \bottomrule
\end{tabularx} \end{tabularx}
\end{table} \end{table}
@ -590,13 +600,23 @@ 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. 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}. 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 and for the force sensor. 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}).
This indicates that this model represents well the axial dynamics of the APA300ML. This indicates that this model represents well the axial dynamics of the APA300ML.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \begin{subfigure}{0.49\textwidth}
\includegraphics[scale=1]{figs/test_apa_2dof_comp_frf.png} \begin{center}
\caption{\label{fig:test_apa_2dof_comp_frf}Comparison of the measured FRF and the optimized 2DoF model of the APA300ML} \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})}
\end{figure} \end{figure}
\chapter{APA300ML - Super Element} \chapter{APA300ML - Super Element}
\label{sec:test_apa_model_flexible} \label{sec:test_apa_model_flexible}
@ -680,9 +700,19 @@ 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. This method can be used to model piezoelectric stack actuators as well as amplified piezoelectric stack actuators.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \begin{subfigure}{0.49\textwidth}
\includegraphics[scale=1]{figs/test_apa_super_element_comp_frf.png} \begin{center}
\caption{\label{fig:test_apa_super_element_comp_frf}Comparison of the measured FRF and the ``Flexible'' model of the APA300ML} \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})}
\end{figure} \end{figure}
\chapter{Conclusion} \chapter{Conclusion}
\label{sec:test_apa_conclusion} \label{sec:test_apa_conclusion}