+
3.1.1 frf_setup.m
- Measurement Setup
+
First is defined the sampling frequency:
@@ -1079,37 +1195,6 @@ Trec_dur = 100;
-
-The maximum excitation voltage at resonance is 9Vrms, therefore corresponding to 0.6V of output DAC voltage.
-
-
-
-gc = 0.1;
-xi = 0.5;
-wn = 2*pi*94.3;
-
-
-G_sweep = 0.2*(s^2 + 2*gc*xi*wn*s + wn^2)/(s^2 + 2*xi*wn*s + wn^2);
-
-V_sweep = generateSweepExc('Ts', Ts, ...
- 'f_start', 10, ...
- 'f_end', 1e3, ...
- 'V_mean', 3.25, ...
- 't_start', Trec_start, ...
- 'exc_duration', Trec_dur, ...
- 'sweep_type', 'log', ...
- 'V_exc', G_sweep*1/(1 + s/2/pi/500));
-
-
-
-
-
-
-
A white noise excitation signal can be very useful in order to obtain a first idea of the plant FRF.
The gain can be gradually increased until satisfactory output is obtained.
@@ -1126,29 +1211,88 @@ V_noise = generateShapedNoise('Ts', 1
-
-
-
8.2 frf_save.m
- Save Data
-
+
+
3.1.2 frf_save.m
- Save Data
+
First, we get data from the Speedgoat:
@@ -1208,128 +1352,254 @@ save(sprintf(
'mat/frf_data_%i_huddle.mat', apa_n
+
-
-
8.3 Measurements on APA 1
-
+
+
3.2 Measurements on APA 1
+
-Measurements are first performed on the APA number 1.
+
+
+
+Measurements are first performed on only one APA.
+Once the measurement procedure is validated, it is performed on all the other APA.
+
+
3.2.1 Excitation Signal
+
+
+For this first measurement, a basic logarithmic sweep is used between 10Hz and 2kHz.
+
-
-
8.3.1 Huddle Test
-
+
+The data are loaded.
+
-
load(sprintf('frf_data_%i_huddle.mat', 1), 't', 'Va', 'Vs', 'de', 'da');
+apa_sweep = load(sprintf('mat/frf_data_%i_sweep.mat', 1), 't', 'Va', 'Vs', 'da', 'de');
+
+The initial time is set to zero.
+
-
-Ts = (t(end) - t(1))/(length(t)-1);
-Fs = 1/Ts;
-
-win = hanning(ceil(10*Fs));
+
+t = apa_sweep.t - apa_sweep.t(1) ;
+
+The excitation signal is shown in Figure 33.
+It is a sweep sine from 10Hz up to 2kHz filtered with a notch centered with the main resonance of the system and a low pass filter.
+
+
+
+
+
+
+
+
3.2.2 FRF Identification - Setup
+
+
+Let’s define the sampling time/frequency.
+
-
[phh_da, f] = pwelch(da - mean(da), win, [], [], 1/Ts);
-[phh_de, ~] = pwelch(de - mean(de), win, [], [], 1/Ts);
-[phh_Vs, ~] = pwelch(Vs - mean(Vs), win, [], [], 1/Ts);
+
+Ts = (t(end) - t(1))/(length(t)-1);
+Fs = 1/Ts;
+
+
+
+
+Then we defined a “Hanning” windows that will be used for the spectral analysis:
+
+
+
win = hanning(ceil(1*Fs));
+
+
+
+
+We get the frequency vector that will be the same for all the frequency domain analysis.
+
+
+
+[~, f] = tfestimate(apa_sweep.Va, apa_sweep.de, win, [], [], 1/Ts);
-
-
8.3.2 First identification with Noise
-
+
+
3.2.3 FRF Identification - Displacement
+
+
+In this section, the transfer function from the excitation voltage \(V_a\) to the encoder measured displacement \(d_e\) and interferometer measurement \(d_a\).
+
+
+
+The coherence from \(V_a\) to \(d_e\) is computed and shown in Figure 34.
+It is quite good from 10Hz up to 500Hz.
+
-
load(sprintf('mat/frf_data_%i_noise.mat', 1), 't', 'Va', 'Vs', 'da', 'de')
+
+[coh_sweep, ~] = mscohere(apa_sweep.Va, apa_sweep.de, win, [], [], 1/Ts);
+
+
+
+
+The transfer functions are then estimated and shown in Figure 35.
+
-
[pxx_da, f] = pwelch(da, win, [], [], 1/Ts);
-[pxx_de, ~] = pwelch(de, win, [], [], 1/Ts);
-[pxx_Vs, ~] = pwelch(Vs, win, [], [], 1/Ts);
+
+[dvf_sweep, ~] = tfestimate(apa_sweep.Va, apa_sweep.de, win, [], [], 1/Ts);
+
+
+[int_sweep, ~] = tfestimate(apa_sweep.Va, apa_sweep.da, win, [], [], 1/Ts);
-
-
[G_dvf, f] = tfestimate(Va, de, win, [], [], 1/Ts);
-[G_d, ~] = tfestimate(Va, da, win, [], [], 1/Ts);
-[G_iff, ~] = tfestimate(Va, Vs, win, [], [], 1/Ts);
-[coh_dvf, ~] = mscohere(Va, de, win, [], [], 1/Ts);
-[coh_d, ~] = mscohere(Va, da, win, [], [], 1/Ts);
-[coh_iff, ~] = mscohere(Va, Vs, win, [], [], 1/Ts);
-
+
-
-
8.3.3 Second identification with Sweep and high frequency noise
-
+
+
3.2.4 FRF Identification - Force Sensor
+
+
+Now the dynamics from excitation voltage \(V_a\) to the force sensor stack voltage \(V_s\) is identified.
+
+
+
+The coherence is computed and shown in Figure 36 and found very good from 10Hz up to 2kHz.
+
-
load(sprintf('mat/frf_data_%i_sweep.mat', 1), 't', 'Va', 'Vs', 'da', 'de')
+
+[coh_sweep, ~] = mscohere(apa_sweep.Va, apa_sweep.Vs, win, [], [], 1/Ts);
+
+
+
+
+The transfer function is estimated and shown in Figure 37.
+
-
[pxx_da, f] = pwelch(da, win, [], [], 1/Ts);
-[pxx_de, ~] = pwelch(de, win, [], [], 1/Ts);
-[pxx_Vs, ~] = pwelch(Vs, win, [], [], 1/Ts);
+
+[iff_sweep, ~] = tfestimate(apa_sweep.Va, apa_sweep.Vs, win, [], [], 1/Ts);
-
-
[G_dvf, f] = tfestimate(Va, de, win, [], [], 1/Ts);
-[G_d, ~] = tfestimate(Va, da, win, [], [], 1/Ts);
-[G_iff, ~] = tfestimate(Va, Vs, win, [], [], 1/Ts);
-[coh_dvf, ~] = mscohere(Va, de, win, [], [], 1/Ts);
-[coh_d, ~] = mscohere(Va, da, win, [], [], 1/Ts);
-[coh_iff, ~] = mscohere(Va, Vs, win, [], [], 1/Ts);
-
-
-
-
-
load(sprintf('mat/frf_data_%i_noise_high_freq.mat', 1), 't', 'Va', 'Vs', 'da', 'de')
-
-
-
-
-
[phf_da, f] = pwelch(da, win, [], [], 1/Ts);
-[phf_de, ~] = pwelch(de, win, [], [], 1/Ts);
-[phf_Vs, ~] = pwelch(Vs, win, [], [], 1/Ts);
-
-
-
-
-
[cohhf_dvf, ~] = mscohere(Va, de, win, [], [], 1/Ts);
-[cohhf_d, ~] = mscohere(Va, da, win, [], [], 1/Ts);
-[cohhf_iff, ~] = mscohere(Va, Vs, win, [], [], 1/Ts);
-
-[Ghf_dvf, f] = tfestimate(Va, de, win, [], [], 1/Ts);
-[Ghf_d, ~] = tfestimate(Va, da, win, [], [], 1/Ts);
-[Ghf_iff, ~] = tfestimate(Va, Vs, win, [], [], 1/Ts);
-
+
-
-
8.3.4 Extract Parameters (Actuator/Sensor constants)
-
+
+
3.2.5 Extract Parameters (Actuator/Sensor constants)
+
+
+
+
3.2.5.1 Piezoelectric Actuator Constant
+
+
+Using the measurement test-bench, it is rather easy the determine the static gain between the applied voltage \(V_a\) to the induced displacement \(d\).
+Use a quasi static (1Hz) excitation signal \(V_a\) on the piezoelectric stack and measure the vertical displacement \(d\).
+Perform a linear regression to obtain:
+
+\begin{equation}
+ d = g_{d/V_a} \cdot V_a
+\end{equation}
+
+
+Using the Simscape model of the APA, it is possible to determine the static gain between the actuator force \(F_a\) to the induced displacement \(d\):
+
+\begin{equation}
+ d = g_{d/F_a} \cdot F_a
+\end{equation}
+
+
+From the two gains, it is then easy to determine \(g_a\):
+
+\begin{equation}
+ g_a = \frac{F_a}{V_a} = \frac{F_a}{d} \cdot \frac{d}{V_a} = \frac{g_{d/V_a}}{g_{d/F_a}}
+\end{equation}
+
+
+
+
+
3.2.5.2 Piezoelectric Sensor Constant
+
+
+From a quasi static excitation of the piezoelectric stack, measure the gain from \(V_a\) to \(V_s\):
+
+\begin{equation}
+ V_s = g_{V_s/V_a} V_a
+\end{equation}
+
+
+Note here that there is an high pass filter formed by the piezo capacitor and parallel resistor.
+The excitation frequency should then be in between the cut-off frequency of this high pass filter and the first resonance.
+
+
+
+Alternatively, the gain can be computed from the dynamical identification and taking the gain at the wanted frequency.
+
+
+
+Using the simscape model, compute the static gain from the actuator force \(F_a\) to the strain of the sensor stack \(dl\):
+
+\begin{equation}
+ dl = g_{dl/F_a} F_a
+\end{equation}
+
+
+Then, the static gain from the sensor stack strain \(dl\) to the general voltage \(V_s\) is:
+
+\begin{equation}
+ g_s = \frac{V_s}{dl} = \frac{V_s}{V_a} \cdot \frac{V_a}{F_a} \cdot \frac{F_a}{dl} = \frac{g_{V_s/V_a}}{g_a \cdot g_{dl/F_a}}
+\end{equation}
+
+
+Alternatively, we could impose an external force to add strain in the APA that should be equally present in all the 3 stacks and equal to 1/5 of the vertical strain.
+This external force can be some weight added, or a piezo in parallel.
+
+
+
+
+
+
3.2.5.3 Results
+
Quasi static gain between \(d\) and \(V_a\):
-
g_d_Va = mean(abs(G_dvf(f > 10 & f < 15)));
+g_d_Va = mean(abs(dvf_sweep(f > 10 & f < 15)));
@@ -1342,7 +1612,7 @@ g_d_Va = 1.7e-05 [m/V]
Quasi static gain between \(V_s\) and \(V_a\):
-
g_Vs_Va = mean(abs(G_iff(f > 10 & f < 15)));
+g_Vs_Va = mean(abs(iff_sweep(f > 10 & f < 15)));
@@ -1353,21 +1623,345 @@ g_Vs_Va = 5.7e-01 [V/V]
-
-
8.4 Comparison of all the APA
-
-
-
-
8.4.1 Stiffness - Comparison of the APA
-
+
+
3.2.6 Hysteresis
+
-In order to estimate the stiffness of the APA, a weight with known mass \(m_a\) is added on top of the suspended granite and the deflection \(d_e\) is measured using an encoder.
+We here wish to visually see the amount of hysteresis present in the APA.
+
+
+
+To do so, a quasi static sinusoidal excitation \(V_a\) at different voltages is used.
+
+
+
+The offset is 65V, and the sin amplitude is ranging from 1V up to 80V.
+
+
+
+For each excitation amplitude, the vertical displacement \(d\) of the mass is measured.
+
+
+
+Then, \(d\) is plotted as a function of \(V_a\) for all the amplitudes.
+
+
+
+We expect to obtained something like the hysteresis shown in Figure 38.
+
+
+
+
+
+
+The data is loaded.
+
+
+
apa_hyst = load('frf_data_1_hysteresis.mat', 't', 'Va', 'de');
+
+apa_hyst.t = apa_hyst.t - apa_hyst.t(1);
+
+
+
+
+The excitation voltage amplitudes are:
+
+
+
ampls = [0.1, 0.2, 0.4, 1, 2, 4];
+
+
+
+
+The excitation voltage and the measured displacement are shown in Figure 39.
+
+
+
+
+
+For each amplitude, we only take the last sinus in order to reduce possible transients.
+Also, it is centered on zero.
+
+
+
+The measured displacement at a function of the output voltage are shown in Figure 40.
+
+
+
+
+
+
+It is quite clear that hysteresis is increasing with the excitation amplitude.
+
+
+
+Also, no hysteresis is found on the sensor stack voltage.
+
+
+
+
+
+
+
+
3.2.7 Estimation of the APA axial stiffness
+
+
+In order to estimate the stiffness of the APA, a weight with known mass \(m_a\) is added on top of the suspended granite and the deflection \(d_e\) is measured using the encoder.
The APA stiffness is then:
\begin{equation}
k_{\text{apa}} = \frac{m_a g}{d}
\end{equation}
+
+Here, a mass of 6.4 kg is used:
+
+
+
+
+The data is loaded, and the measured displacement is shown in Figure 41.
+
+
+
apa_mass = load(sprintf('frf_data_%i_add_mass_closed_circuit.mat', 1), 't', 'de');
+apa_mass.de = apa_mass.de - mean(apa_mass.de(apa_mass.t<11));
+
+
+
+
+
+
+
+There is some imprecision in the measurement as there are some drifts that are probably due to some creep.
+
+
+
+The stiffness is then computed as follows:
+
+
+
k = 9.8 * added_mass / (mean(apa_mass.de(apa_mass.t > 12 & apa_mass.t < 12.5)) - mean(apa_mass.de(apa_mass.t > 20 & apa_mass.t < 20.5)));
+
+
+
+
+And the stiffness obtained is very close to the one specified in the documentation (\(k = 1.794\,[N/\mu m]\)).
+
+
+k = 1.68 [N/um]
+
+
+
+
+
+
3.2.8 Stiffness change due to electrical connections
+
+
+We wish here to see if the stiffness changes when the actuator stacks are not connected to the amplifier and the sensor stacks are not connected to the ADC.
+
+
+
+Note here that the resistor in parallel to the sensor stack is present in both cases.
+
+
+
+First, the data are loaded.
+
+
+
add_mass_oc = load(sprintf('frf_data_%i_add_mass_open_circuit.mat', 1), 't', 'de');
+add_mass_cc = load(sprintf('frf_data_%i_add_mass_closed_circuit.mat', 1), 't', 'de');
+
+
+
+
+And the initial displacement is set to zero.
+
+
+
add_mass_oc.de = add_mass_oc.de - mean(add_mass_oc.de(add_mass_oc.t<11));
+add_mass_cc.de = add_mass_cc.de - mean(add_mass_cc.de(add_mass_cc.t<11));
+
+
+
+
+The measured displacements are shown in Figure 42.
+
+
+
+
+
+
+And the stiffness is estimated in both case.
+The results are shown in Table 6.
+
+
+
apa_k_oc = 9.8 * added_mass / (mean(add_mass_oc.de(add_mass_oc.t > 12 & add_mass_oc.t < 12.5)) - mean(add_mass_oc.de(add_mass_oc.t > 20 & add_mass_oc.t < 20.5)));
+apa_k_cc = 9.8 * added_mass / (mean(add_mass_cc.de(add_mass_cc.t > 12 & add_mass_cc.t < 12.5)) - mean(add_mass_cc.de(add_mass_cc.t > 20 & add_mass_cc.t < 20.5)));
+
+
+
+
+Table 6: Measured stiffnesses on “open” and “closed” circuits
+
+
+
+
+
+
+
+
+ |
+\(k [N/\mu m]\) |
+
+
+
+
+Not connected |
+2.3 |
+
+
+
+Connected |
+1.7 |
+
+
+
+
+
+
+Clearly, connecting the actuator stacks to the amplified (basically equivalent as to short circuiting them) lowers the stiffness.
+
+
+
+
+
+
+
+
3.2.9 Effect of the resistor on the IFF Plant
+
+
+A resistor \(R \approx 80.6\,k\Omega\) is added in parallel with the sensor stack.
+This has the effect to form a high pass filter with the capacitance of the stack.
+
+
+
+We here measured the low frequency transfer function from \(V_a\) to \(V_s\) with and without this resistor.
+
+
+
+
+wi_k = load('frf_data_1_sweep_lf_with_R.mat', 't', 'Vs', 'Va');
+
+
+wo_k = load('frf_data_1_sweep_lf.mat', 't', 'Vs', 'Va');
+
+
+
+
+We use a very long “Hanning” window for the spectral analysis in order to estimate the low frequency behavior.
+
+
+
win = hanning(ceil(50*Fs));
+
+
+
+
+And we estimate the transfer function from \(V_a\) to \(V_s\) in both cases:
+
+
+
[frf_wo_k, f] = tfestimate(wo_k.Va, wo_k.Vs, win, [], [], 1/Ts);
+[frf_wi_k, ~] = tfestimate(wi_k.Va, wi_k.Vs, win, [], [], 1/Ts);
+
+
+
+
+With the following values of the resistor and capacitance, we obtain a first order high pass filter with a crossover frequency equal to:
+
+
+
C = 5.1e-6;
+R = 80.6e3;
+
+f0 = 1/(2*pi*R*C);
+
+
+
+
+f0 = 0.39 [Hz]
+
+
+
+
+The transfer function of the corresponding high pass filter is:
+
+
+
G_hpf = 0.6*(s/2*pi*f0)/(1 + s/2*pi*f0);
+
+
+
+
+Let’s compare the transfer function from actuator stack to sensor stack with and without the added resistor in Figure 43.
+
+
+
+
+
+
+The added resistor has indeed the expected effect.
+
+
+
+
+
+
+
+
+
3.3 Comparison of all the APA
+
+
+
+
+
+The same measurements that was performed in Section 3.2 are now performed on all the APA and then compared.
+
+
+
+
3.3.1 Axial Stiffnesses - Comparison
+
+
+Let’s first compare the APA axial stiffnesses.
+
+
+
+The added mass is:
+
+
+
Here are the number of the APA that have been measured:
@@ -1390,11 +1984,11 @@ The data are loaded.
-The raw measurements are shown in Figure 19.
+The raw measurements are shown in Figure 44.
All the APA seems to have similar stiffness except the APA 7 which should have an higher stiffness.
-
+
It is however strange that the displacement \(d_e\) when the mass is removed is higher for the APA 7 than for the other APA.
What could cause that?
@@ -1403,23 +1997,18 @@ What could cause that?
-