Add Manuscript
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user