Add Manuscript
This commit is contained in:
parent
64f564f7a1
commit
72618f3bc6
@ -63,8 +63,9 @@ for i = 1:7
|
||||
end
|
||||
hold off;
|
||||
xlabel('Voltage [V]'); ylabel('Displacement [$\mu m$]')
|
||||
legend('location', 'southwest', 'FontSize', 8)
|
||||
xlim([-20, 150]); ylim([-250, 0]);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
%% X-Bending Identification
|
||||
% Load Data
|
||||
@ -96,4 +97,5 @@ hold off;
|
||||
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('Amplitude');
|
||||
xlim([100, 1e3]); ylim([5e-5, 2e-1]);
|
||||
legend('location', 'northeast', 'FontSize', 8)
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
@ -30,7 +30,8 @@ for i = [6,5,4,2]
|
||||
end
|
||||
hold off;
|
||||
xlabel('Stack Voltage $V_a$ [V]'); ylabel('Displacement $d_e$ [$\mu$m]');
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
xlim([-20, 150]);
|
||||
ylim([-120, 120]);
|
||||
|
||||
@ -132,8 +133,9 @@ 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);
|
||||
ylim([1e-8, 1e-3]);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
@ -164,7 +166,8 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $V_s/u$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-2, 1e2]);
|
||||
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
@ -209,9 +212,9 @@ ylim([0, 1]);
|
||||
|
||||
%% Bode plot of the FRF from u to de
|
||||
figure;
|
||||
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
tiledlayout(2, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
ax1 = nexttile;
|
||||
hold on;
|
||||
plot(f, abs(frf_noise), '.-');
|
||||
hold off;
|
||||
@ -258,22 +261,23 @@ tiledlayout(2, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile();
|
||||
hold on;
|
||||
plot(f, abs(frf_wo_k), 'DisplayName', 'Without $R$');
|
||||
plot(f, abs(frf_wi_k), 'DisplayName', 'With $R$');
|
||||
plot(f, abs(squeeze(freqresp(G_hpf, f, 'Hz'))), 'k--', 'DisplayName', 'RC model');
|
||||
plot(f, abs(frf_wo_k), '-', 'color', [colors(1,:), 0.5], 'linewidth', 2.5, 'DisplayName', 'Without $R$');
|
||||
plot(f, abs(frf_wi_k), '-', 'color', [colors(2,:), 0.5], 'linewidth', 2.5, 'DisplayName', 'With $R$');
|
||||
plot(f, abs(squeeze(freqresp(G_hpf, f, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', 'RC model');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([2e-1, 1e0]);
|
||||
yticks([0.2, 0.5, 1]);
|
||||
legend('location', 'southeast', 'FontSize', 8);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plot(f, 180/pi*angle(frf_wo_k));
|
||||
plot(f, 180/pi*angle(frf_wi_k));
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(G_hpf, f, 'Hz'))), 'k--', 'DisplayName', 'RC');
|
||||
plot(f, 180/pi*angle(frf_wo_k), '-', 'color', [colors(1,:), 0.5], 'linewidth', 2.5);
|
||||
plot(f, 180/pi*angle(frf_wi_k), '-', 'color', [colors(2,:), 0.5], 'linewidth', 2.5);
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(G_hpf, f, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', 'RC');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
@ -312,23 +316,25 @@ tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(G_iff), 'color', colors(2,:), 'DisplayName', 'Identified plant')
|
||||
plot(f, abs(squeeze(freqresp(G_iff_model, f, 'Hz'))), 'k--', 'DisplayName', 'Manual fit')
|
||||
plot(f, abs(G_iff), '-', 'color', [colors(1,:), 0.5], 'linewidth', 2.5, 'DisplayName', 'Measured FRF');
|
||||
plot(f, abs(squeeze(freqresp(G_iff_model, f, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', 'Manual fit')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $V_s/u$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
ylim([1e-2, 1e2]);
|
||||
yticks([1e-2, 1e-1, 1, 1e1, 1e2]);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
plot(f, 180/pi*angle(G_iff), 'color', colors(2,:));
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(G_iff_model, f, 'Hz'))), 'k--')
|
||||
plot(f, 180/pi*angle(G_iff), '-', 'color', [colors(1,:), 0.5], 'linewidth', 2.5);
|
||||
plot(f, 180/pi*angle(squeeze(freqresp(G_iff_model, f, 'Hz'))), '--', 'color', colors(1,:))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:45:360);
|
||||
ylim([-90, 180])
|
||||
yticks(-360:90:360);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([0.2, 1e3]);
|
||||
@ -398,14 +404,15 @@ tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
ax1 = nexttile();
|
||||
hold on;
|
||||
for i = 1:length(i_kept)
|
||||
plot(f, abs(G_dL_frf{i}), 'color', [colors(i,:), 1], 'DisplayName', sprintf('g = %.0f', data.gains(i_kept(i))))
|
||||
plot(f, abs(G_dL_frf{i}), '-', 'color', [colors(i,:), 0.5], 'linewidth', 2.5, 'DisplayName', sprintf('g = %.0f', data.gains(i_kept(i))))
|
||||
plot(f, abs(squeeze(freqresp(G_dL_id{i}, f, 'Hz'))), '--', 'color', [colors(i,:), 1], 'HandleVisibility', 'off')
|
||||
end
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
xlabel('Frequency [Hz]'); ylabel('Amplitude $d_e/u^\prime$ [m/V]');
|
||||
xlim([10, 1e3]);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
xlim([10, 800]);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
%% 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
|
||||
@ -416,7 +423,7 @@ hold on;
|
||||
G_iff_poles = pole(pade(G_iff_model));
|
||||
i = imag(G_iff_poles) > 100; % Only keep relevant poles
|
||||
plot(real(G_iff_poles(i)), imag(G_iff_poles(i)), 'kx', ...
|
||||
'DisplayName', '$g = 0$');
|
||||
'HandleVisibility', 'off');
|
||||
G_iff_zeros = tzero(G_iff_model);
|
||||
i = imag(G_iff_zeros) > 100; % Only keep relevant zeros
|
||||
plot(real(G_iff_zeros(i)), imag(G_iff_zeros(i)), 'ko', ...
|
||||
@ -437,4 +444,5 @@ ylabel('Imaginary Part')
|
||||
axis equal
|
||||
ylim([0, 610]);
|
||||
xlim([-300,0]);
|
||||
legend('location', 'southwest', 'FontSize', 8);
|
||||
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
@ -105,9 +105,9 @@ tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(enc_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified');
|
||||
plot(f, abs(enc_frf(:, 1)), '-', 'color', [colors(2,:), 0.1], 'linewidth', 2.5, 'DisplayName', 'Identified');
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, abs(enc_frf(:, i)), 'color', [0,0,0,0.2], 'HandleVisibility', 'off');
|
||||
plot(f, abs(enc_frf(:, i)), '-', 'color', [colors(2,:), 0.1], 'linewidth', 2.5, 'HandleVisibility', 'off');
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(G_2dof('de', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '2DoF Model')
|
||||
hold off;
|
||||
@ -115,12 +115,13 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-8, 1e-3]);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), 'color', [0,0,0,0.2]);
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), '-', 'color', [colors(2,:), 0.1], 'linewidth', 2.5);
|
||||
end
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_2dof('de', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:))
|
||||
hold off;
|
||||
@ -138,24 +139,25 @@ tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(iff_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified');
|
||||
plot(f, abs(iff_frf(:, 1)), '-', 'color', [colors(1,:), 0.1], 'linewidth', 2.5, 'DisplayName', 'Identified');
|
||||
for i = 2:length(apa_nums)
|
||||
plot(f, abs(iff_frf(:, i)), 'color', [0,0,0,0.2], 'HandleVisibility', 'off');
|
||||
plot(f, abs(iff_frf(:, i)), '-', 'color', [colors(1,:), 0.1], 'linewidth', 2.5, 'HandleVisibility', 'off');
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(G_2dof('Vs', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '2DoF Model')
|
||||
plot(freqs, abs(squeeze(freqresp(G_2dof('Vs', 'u'), freqs, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '2DoF Model')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $V_s/u$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-2, 1e2]);
|
||||
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
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', [colors(1,:), 0.2], 'linewidth', 2.5);
|
||||
end
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_2dof('Vs', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:))
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_2dof('Vs', 'u'), freqs, 'Hz'))), '--', 'color', colors(1,:))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
|
@ -71,9 +71,9 @@ tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(enc_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified');
|
||||
plot(f, abs(enc_frf(:, 1)), 'color', [colors(2,:), 0.1], 'linewidth', 2.5, 'DisplayName', 'Identified');
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, abs(enc_frf(:, i)), 'color', [0,0,0,0.2], 'HandleVisibility', 'off');
|
||||
plot(f, abs(enc_frf(:, i)), 'color', [colors(2,:), 0.1], 'linewidth', 2.5, 'HandleVisibility', 'off');
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(G_flex('de', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '"Flexible" Model')
|
||||
hold off;
|
||||
@ -81,12 +81,13 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-8, 1e-3]);
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
for i = 1:length(apa_nums)
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), 'color', [0,0,0,0.2]);
|
||||
plot(f, 180/pi*angle(enc_frf(:, i)), 'color', [colors(2,:), 0.1], 'linewidth', 2.5);
|
||||
end
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_flex('de', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:))
|
||||
hold off;
|
||||
@ -104,24 +105,25 @@ tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f, abs(iff_frf(:, 1)), 'color', [0,0,0,0.2], 'DisplayName', 'Identified');
|
||||
plot(f, abs(iff_frf(:, 1)), '-', 'color', [colors(1,:), 0.1], 'linewidth', 2.5, 'DisplayName', 'Identified');
|
||||
for i = 2:length(apa_nums)
|
||||
plot(f, abs(iff_frf(:, i)), 'color', [0,0,0,0.2], 'HandleVisibility', 'off');
|
||||
plot(f, abs(iff_frf(:, i)), '-', 'color', [colors(1,:), 0.1], 'linewidth', 2.5, 'HandleVisibility', 'off');
|
||||
end
|
||||
plot(freqs, abs(squeeze(freqresp(G_flex('Vs', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '"Flexible" Model')
|
||||
plot(freqs, abs(squeeze(freqresp(G_flex('Vs', 'u'), freqs, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '"Flexible" Model')
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $V_s/u$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-2, 1e2]);
|
||||
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
|
||||
leg.ItemTokenSize(1) = 15;
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
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', [colors(1,:), 0.1], 'linewidth', 2.5);
|
||||
end
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_flex('Vs', 'u'), freqs, 'Hz'))), '--', 'color', colors(2,:))
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(G_flex('Vs', 'u'), freqs, 'Hz'))), '--', 'color', colors(1,:))
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
|
@ -74,6 +74,7 @@ The repository is organized as follows:
|
||||
├── C3-test-bench-struts
|
||||
├── C4-test-bench-nano-hexapod
|
||||
├── C5-test-bench-id31
|
||||
├── dehaeze-nass-phd-thesis.pdf # PhD Thesis Manuscript
|
||||
├── init.m # Optional: Some Matlab configuration to have same figure display
|
||||
├── LICENSE # MIT License is used for all the code in this repository
|
||||
└── README.md # The present file
|
||||
|
BIN
dehaeze-nass-phd-thesis.pdf
Normal file
BIN
dehaeze-nass-phd-thesis.pdf
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user