diff --git a/figs/iff_first_test_bode_plot.pdf b/figs/iff_first_test_bode_plot.pdf new file mode 100644 index 0000000..109770a Binary files /dev/null and b/figs/iff_first_test_bode_plot.pdf differ diff --git a/figs/iff_first_test_bode_plot.png b/figs/iff_first_test_bode_plot.png new file mode 100644 index 0000000..07e6a89 Binary files /dev/null and b/figs/iff_first_test_bode_plot.png differ diff --git a/figs/iff_first_test_coherence.pdf b/figs/iff_first_test_coherence.pdf new file mode 100644 index 0000000..c1e459b Binary files /dev/null and b/figs/iff_first_test_coherence.pdf differ diff --git a/figs/iff_first_test_coherence.png b/figs/iff_first_test_coherence.png new file mode 100644 index 0000000..94f5aa3 Binary files /dev/null and b/figs/iff_first_test_coherence.png differ diff --git a/index.html b/index.html index 8c471da..17c5f2b 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +
Figure 1: Picture of the Setup
Figure 2: Zoom on the APA
Ts = 1e-4; @@ -98,8 +105,8 @@
Glpf = 1/(1 + s/2/pi/500); @@ -111,13 +118,13 @@ Gz = c2d(Glpf, Ts, 'tustin');
data = SimulinkRealTime.utils.getFileScopeData('data/apa95ml.dat').data; @@ -126,8 +133,8 @@ Gz = c2d(Glpf, Ts, 'tustin');
u = data(:, 1); % Input Voltage [V] @@ -144,16 +151,16 @@ t = data(:, 3); % Time [s]
Figure 3: Measurement of the Mass displacement during Huddle Test
@@ -161,8 +168,8 @@ t = data(:, 3); % Time [s]Ts = t(end)/(length(t)-1); @@ -178,7 +185,7 @@ win = hanning(ceil(1*Fs));
Figure 4: Amplitude Spectral Density of the Displacement during Huddle Test
@@ -187,16 +194,22 @@ win = hanning(ceil(1*Fs));+Results presented in this sections are wrong as the ADC cannot deliver enought current to the piezoelectric actuator. +
+ +
Figure 5: Time domain signals during the test
@@ -204,8 +217,8 @@ win = hanning(ceil(1*Fs));Ts = t(end)/(length(t)-1); @@ -222,7 +235,7 @@ win = hanning(ceil(1*Fs));
Figure 6: Comparison of the ASD for the identification test and the huddle test
@@ -230,8 +243,8 @@ win = hanning(ceil(1*Fs));Ts = t(end)/(length(t)-1); @@ -248,14 +261,14 @@ Fs = 1/Ts;
Figure 7: Coherence
Figure 8: Estimation of the transfer function from input voltage to displacement
@@ -263,8 +276,8 @@ Fs = 1/Ts;load('mat/fem_model_5kg.mat', 'Ghm'); @@ -272,7 +285,7 @@ Fs = 1/Ts;
Figure 9: Comparison of the identified transfer function and the one estimated from the FE model
@@ -291,14 +304,35 @@ In the next section, a current amplifier is used.ht = load('./mat/huddle_test.mat', 't', 'u', 'y'); +load('./mat/apa95ml_5kg_Amp_E505.mat', 't', 'u', 'um', 'y'); ++
u = 10*(u - mean(u)); % Input Voltage of Piezo [V] +um = 10*(um - mean(um)); % Monitor [V] +y = y - mean(y); % Mass displacement [m] + +ht.u = 10*(ht.u - mean(ht.u)); +ht.y = ht.y - mean(ht.y); ++
Ts = t(end)/(length(t)-1); Fs = 1/Ts; @@ -313,7 +347,7 @@ win = hanning(ceil(1*Fs));
Figure 10: Comparison of the ASD for the identification test and the huddle test
@@ -321,9 +355,9 @@ win = hanning(ceil(1*Fs));Ts = t(end)/(length(t)-1); Fs = 1/Ts; @@ -340,14 +374,14 @@ Fs = 1/Ts;
Figure 11: Coherence
Figure 12: Estimation of the transfer function from input voltage to displacement
@@ -355,16 +389,16 @@ Fs = 1/Ts;load('mat/fem_model_5kg.mat', 'Ghm'); +load('mat/fem_model_5kg.mat', 'G');
Figure 13: Comparison of the identified transfer function and the one estimated from the FE model
@@ -372,76 +406,207 @@ Fs = 1/Ts;+Two measurements are performed: +
++The obtained dynamics from force actuator to force sensor are compare with the FEM model. +
++The data are loaded: +
+a_ss = load('mat/apa95ml_5kg_1a_2s.mat', 't', 'u', 'y', 'v'); +aa_s = load('mat/apa95ml_5kg_2a_1s.mat', 't', 'u', 'y', 'v'); +load('mat/G_force_sensor_5kg.mat', 'G'); +
+Let’s use the amplifier gain to obtain the true voltage applied to the actuator stack(s) +
+ ++The parameters of the piezoelectric stacks are defined below: +
+d33 = 3e-10; % Strain constant [m/V] +n = 80; % Number of layers per stack +eT = 1.6e-8; % Permittivity under constant stress [F/m] +sD = 2e-11; % Elastic compliance under constant electric displacement [m2/N] +ka = 235e6; % Stack stiffness [N/m] ++
+From the FEM, we construct the transfer function from DAC voltage to ADC voltage. +
+Gfem_aa_s = exp(-s/1e4)*20*(2*d33*n*ka)*(G(3,1)+G(3,2))*d33/(eT*sD*n); +Gfem_a_ss = exp(-s/1e4)*20*( d33*n*ka)*(G(3,1)+G(2,1))*d33/(eT*sD*n); ++
+The transfer function from input voltage to output voltage are computed and shown in Figure 14. +
+Ts = a_ss.t(end)/(length(a_ss.t)-1); +Fs = 1/Ts; + +win = hann(ceil(10/Ts)); + +[tf_a_ss, f] = tfestimate(a_ss.u, a_ss.v, win, [], [], 1/Ts); +[coh_a_ss, ~] = mscohere( a_ss.u, a_ss.v, win, [], [], 1/Ts); + +[tf_aa_s, f] = tfestimate(aa_s.u, aa_s.v, win, [], [], 1/Ts); +[coh_aa_s, ~] = mscohere( aa_s.u, aa_s.v, win, [], [], 1/Ts); ++
+
+Figure 14: Comparison of the identified dynamics from voltage output to voltage input and the FEM
+Ts = t(end)/(length(t)-1); -Fs = 1/Ts; +w_z = 2*pi*111; % Zeros frequency [rad/s] +w_p = 2*pi*255; % Pole frequency [rad/s] +xi_z = 0.05; +xi_p = 0.015; +G_inf = 2; + +Gi = G_inf*(s^2 - 2*xi_z*w_z*s + w_z^2)/(s^2 + 2*xi_p*w_p*s + w_p^2);
-The coherence and the transfer function are estimate from the voltage input of the PI amplifier to its voltage inputs. -
--The coherence is very good as expected (Figure 14). +
+
Figure 15: Identification of the IFF plant
+-The transfer function show a low pass filter behavior with a lot of phase drop (Figure 15). + +
+
Figure 16: Root Locus for IFF
+iff_g10 = load('./mat/apa95ml_iff_g10_res.mat', 'u', 't', 'y', 'v'); +iff_g100 = load('./mat/apa95ml_iff_g100_res.mat', 'u', 't', 'y', 'v'); +iff_of = load('./mat/apa95ml_iff_off_res.mat', 'u', 't', 'y', 'v'); ++
win = hann(ceil(10/Ts)); +Ts = 1e-4; +win = hann(ceil(10/Ts)); -[tf_est, f] = tfestimate(u, um, win, [], [], 1/Ts); -[co_est, ~] = mscohere( u, um, win, [], [], 1/Ts); +[tf_iff_g10, f] = tfestimate(iff_g10.u, iff_g10.y, win, [], [], 1/Ts); +[co_iff_g10, ~] = mscohere(iff_g10.u, iff_g10.y, win, [], [], 1/Ts); + +[tf_iff_g100, f] = tfestimate(iff_g100.u, iff_g100.y, win, [], [], 1/Ts); +[co_iff_g100, ~] = mscohere(iff_g100.u, iff_g100.y, win, [], [], 1/Ts); + +[tf_iff_of, ~] = tfestimate(iff_of.u, iff_of.y, win, [], [], 1/Ts); +[co_iff_of, ~] = mscohere(iff_of.u, iff_of.y, win, [], [], 1/Ts);
-
-Figure 14: Coherence
--
-Figure 15: Estimation of the transfer function from input voltage to displacement
--The delay can be estimated as follow (in ms): -
finddelay(u, um)*(1000*Ts) +figure; + +hold on; +plot(f, co_iff_of, '-', 'DisplayName', 'g=0') +plot(f, co_iff_g10, '-', 'DisplayName', 'g=10') +plot(f, co_iff_g100, '-', 'DisplayName', 'g=100') +set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin'); +ylabel('Coherence'); xlabel('Frequency [Hz]'); +hold off; +legend(); +xlim([60, 600])
-0.4 -- -
-This most probably corresponds to a FIR filter. +
+
Figure 17: Coherence
+figure; +ax1 = subplot(2, 1, 1); +hold on; +plot(f, abs(tf_iff_of), '-', 'DisplayName', 'g=0') +plot(f, abs(tf_iff_g10), '-', 'DisplayName', 'g=10') +plot(f, abs(tf_iff_g100), '-', 'DisplayName', 'g=100') +set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log'); +ylabel('Amplitude'); xlabel('Frequency [Hz]'); +hold off; +legend(); + +ax2 = subplot(2, 1, 2); +hold on; +plot(f, 180/pi*angle(-tf_iff_of), '-') +plot(f, 180/pi*angle(-tf_iff_g10), '-') +plot(f, 180/pi*angle(-tf_iff_g100), '-') +set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin'); +ylabel('Phase'); xlabel('Frequency [Hz]'); +hold off; + +linkaxes([ax1,ax2], 'x'); +xlim([60, 600]); ++
+
+Figure 18: Bode plot for different values of IFF gain
+Created: 2020-07-24 ven. 15:48
+Created: 2020-08-20 jeu. 23:08