Start displaying matlab figures

This commit is contained in:
Thomas Dehaeze 2024-03-27 14:35:55 +01:00
parent 7a83659d73
commit 9f89ad00f4
38 changed files with 6038 additions and 1997 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@ -11,125 +11,62 @@ addpath('./src/'); % Path for functions
%% Colors for the figures %% Colors for the figures
colors = colororder; colors = colororder;
% FRF Identification - Setup % Effect of the Encoder on the measured dynamics
% Similarly to what was done for the identification of the APA, the identification is performed in three steps:
% 1. White noise excitation with small amplitude.
% This is used to determine the main resonance of the system.
% 2. Sweep sine excitation with the amplitude lowered around the resonance.
% The sweep sine is from 10Hz to 400Hz.
% 3. High frequency noise.
% The noise is band-passed between 300Hz and 2kHz.
% Then, the result of the second identification is used between 10Hz and 350Hz and the result of the third identification if used between 350Hz and 2kHz. %% Parameters for Frequency Analysis
%% Sampling frequency/time
Ts = 1e-4; % Sampling Time [s] Ts = 1e-4; % Sampling Time [s]
Nfft = floor(1/Ts); Nfft = floor(1/Ts); % Number of points for the FFT computation
win = hanning(Nfft); win = hanning(Nfft); % Hanning window
Noverlap = floor(Nfft/2); Noverlap = floor(Nfft/2); % Overlap between frequency analysis
%% Load Data %% Measure FRF for Strut 1 - No encoder
% Load Data
leg_sweep = load('frf_data_leg_1_sweep.mat', 'u', 'Vs', 'de', 'da'); leg_sweep = load('frf_data_leg_1_sweep.mat', 'u', 'Vs', 'de', 'da');
leg_noise_hf = load('frf_data_leg_1_noise_hf.mat', 'u', 'Vs', 'de', 'da'); leg_noise_hf = load('frf_data_leg_1_noise_hf.mat', 'u', 'Vs', 'de', 'da');
%% We get the frequency vector that will be the same for all the frequency domain analysis. % We get the frequency vector that will be the same for all the frequency domain analysis.
[~, f] = tfestimate(leg_sweep.u, leg_sweep.de, win, Noverlap, Nfft, 1/Ts); [~, f] = tfestimate(leg_sweep.u, leg_sweep.de, win, Noverlap, Nfft, 1/Ts);
i_lf = f <= 350; % Indices used for the low frequency i_lf = f <= 350; % Indices used for the low frequency
i_hf = f > 350; % Indices used for the low frequency i_hf = f > 350; % Indices used for the high frequency
% FRF Identification - Interferometer % Compute FRF function from u to da (interferometer)
% In this section, the dynamics from the excitation voltage $u$ to the interferometer $d_a$ is identified.
% The transfer function from $u$ to the interferometer measured displacement $d_a$ is estimated and shown in Figure ref:fig:strut_1_frf_dvf_plant_tf.
%% Compute FRF function from u to da
[frf_sweep, ~] = tfestimate(leg_sweep.u, leg_sweep.da, win, Noverlap, Nfft, 1/Ts); [frf_sweep, ~] = tfestimate(leg_sweep.u, leg_sweep.da, win, Noverlap, Nfft, 1/Ts);
[frf_noise_hf, ~] = tfestimate(leg_noise_hf.u, leg_noise_hf.da, win, Noverlap, Nfft, 1/Ts); [frf_noise_hf, ~] = tfestimate(leg_noise_hf.u, leg_noise_hf.da, win, Noverlap, Nfft, 1/Ts);
int_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; % Combine the FRF
%% Combine the FRF % Compute FRF function from u to Vs (force sensor)
int_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)];
%% Plot the measured FRF
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(f, abs(int_frf), 'k-');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
hold off;
ylim([1e-9, 1e-3]);
ax2 = nexttile;
hold on;
plot(f, 180/pi*angle(int_frf), 'k-');
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]);
% FRF Identification - IFF
% In this section, the dynamics from $u$ to $V_s$ is identified.
% Then the FRF are estimated and shown in Figure ref:fig:strut_1_frf_iff_plant_tf
%% Compute the FRF
[frf_sweep, ~] = tfestimate(leg_sweep.u, leg_sweep.Vs, win, Noverlap, Nfft, 1/Ts); [frf_sweep, ~] = tfestimate(leg_sweep.u, leg_sweep.Vs, win, Noverlap, Nfft, 1/Ts);
[frf_noise_hf, ~] = tfestimate(leg_noise_hf.u, leg_noise_hf.Vs, win, Noverlap, Nfft, 1/Ts); [frf_noise_hf, ~] = tfestimate(leg_noise_hf.u, leg_noise_hf.Vs, win, Noverlap, Nfft, 1/Ts);
iff_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; % Combine the FRF
%% Combine the FRF %% Measure FRF for Strut 1 - With encoder
iff_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; % Load Data
%% Plot the measured FRF
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(f, abs(iff_frf), 'k-');
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]);
ax2 = nexttile;
hold on;
plot(f, 180/pi*angle(iff_frf), 'k-');
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]);
% Measurement Data
% The measurements are loaded.
%% Load data
leg_enc_sweep = load('frf_data_leg_coder_1_noise.mat', 'u', 'Vs', 'de', 'da'); leg_enc_sweep = load('frf_data_leg_coder_1_noise.mat', 'u', 'Vs', 'de', 'da');
leg_enc_noise_hf = load('frf_data_leg_coder_1_noise_hf.mat', 'u', 'Vs', 'de', 'da'); leg_enc_noise_hf = load('frf_data_leg_coder_1_noise_hf.mat', 'u', 'Vs', 'de', 'da');
% FRF Identification - Interferometer % Compute FRF function from u to da (interferometer)
% In this section, the dynamics from $u$ to $d_a$ is identified.
%% Compute FRF function from u to da
[frf_sweep, ~] = tfestimate(leg_enc_sweep.u, leg_enc_sweep.da, win, Noverlap, Nfft, 1/Ts); [frf_sweep, ~] = tfestimate(leg_enc_sweep.u, leg_enc_sweep.da, win, Noverlap, Nfft, 1/Ts);
[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.u, leg_enc_noise_hf.da, win, Noverlap, Nfft, 1/Ts); [frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.u, leg_enc_noise_hf.da, win, Noverlap, Nfft, 1/Ts);
int_with_enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; % Combine the FRF
%% Combine the FRF % Compute FRF function from u to Vs (force sensor)
int_with_enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; [frf_sweep, ~] = tfestimate(leg_enc_sweep.u, leg_enc_sweep.Vs, win, Noverlap, Nfft, 1/Ts);
[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.u, leg_enc_noise_hf.Vs, win, Noverlap, Nfft, 1/Ts);
iff_with_enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; % Combine the FRF
% Compute FRF function from u to de (encoder)
[frf_sweep, ~] = tfestimate(leg_enc_sweep.u, leg_enc_sweep.de, win, Noverlap, Nfft, 1/Ts);
[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.u, leg_enc_noise_hf.de, win, Noverlap, Nfft, 1/Ts);
enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; % Combine the FRF
% The obtained FRF is very close to the one that was obtained when no encoder was fixed to the struts as shown in Figure ref:fig:strut_leg_compare_int_frf.
% #+begin_important
% The transfer function from the excitation voltage $u$ to the generated voltage $V_s$ by the sensor stack is not influence by the fixation of the encoder.
% This means that the IFF control strategy should be as effective whether or not the encoders are fixed to the struts.
% #+end_important
%% Plot the FRF from u to da with and without the encoder %% Plot the FRF from u to da with and without the encoder
figure; figure;
@ -159,113 +96,6 @@ yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
% FRF Identification - Encoder
% In this section, the dynamics from $u$ to $d_e$ (encoder) is identified.
% The FRF from $u$ to the encoder measured displacement $d_e$ is computed and shown in Figure ref:fig:strut_1_enc_frf_dvf_plant_tf.
%% Compute FRF function from u to da
[frf_sweep, ~] = tfestimate(leg_enc_sweep.u, leg_enc_sweep.de, win, Noverlap, Nfft, 1/Ts);
[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.u, leg_enc_noise_hf.de, win, Noverlap, Nfft, 1/Ts);
%% Combine the FRF
enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)];
%% Plot the FRF from u to de
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(f, abs(enc_frf), 'k-');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
hold off;
ylim([1e-7, 1e-3]);
ax2 = nexttile;
hold on;
plot(f, 180/pi*angle(enc_frf), 'k-');
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]);
% #+name: fig:strut_1_enc_frf_dvf_plant_tf
% #+caption: Estimated FRF for the DVF plant (transfer function from $u$ to the encoder $d_e$)
% #+RESULTS:
% [[file:figs/strut_1_enc_frf_dvf_plant_tf.png]]
% The transfer functions from $u$ to $d_e$ (encoder) and to $d_a$ (interferometer) are compared in Figure ref:fig:strut_1_comp_enc_int.
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(f, abs(enc_frf), 'DisplayName', 'Encoder');
plot(f, abs(int_with_enc_frf), 'DisplayName', 'Interferometer');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d/u$ [m/V]'); set(gca, 'XTickLabel',[]);
hold off;
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-8, 1e-3]);
ax2 = nexttile;
hold on;
plot(f, 180/pi*angle(enc_frf));
plot(f, 180/pi*angle(int_with_enc_frf));
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]);
% APA Resonances Frequency
% As shown in Figure ref:fig:strut_1_spurious_resonances, we can clearly see three spurious resonances at 197Hz, 290Hz and 376Hz.
%% Transfer function from Vs to de with indicated resonances
figure;
hold on;
plot(f, abs(enc_frf), 'k-');
text(93, 4e-4, {'93Hz'}, 'VerticalAlignment','bottom','HorizontalAlignment','center')
text(200, 1.3e-4,{'197Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
text(300, 4e-6, {'290Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
text(400, 1.4e-6,{'376Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/u$ [m/V]'); xlabel('Frequency [Hz]');
hold off;
ylim([1e-7, 1e-3]); xlim([10, 2e3]);
% FRF Identification - Force Sensor
% In this section, the dynamics from $u$ to $V_s$ is identified.
%% Compute FRF function from u to da
[frf_sweep, ~] = tfestimate(leg_enc_sweep.u, leg_enc_sweep.Vs, win, Noverlap, Nfft, 1/Ts);
[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.u, leg_enc_noise_hf.Vs, win, Noverlap, Nfft, 1/Ts);
%% Combine the FRF
iff_with_enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)];
% Let's now compare the IFF plants whether the encoders are fixed to the APA or not (Figure ref:fig:strut_1_frf_iff_comp_enc).
%% Compare the IFF plant with and without the encoders %% Compare the IFF plant with and without the encoders
figure; figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
@ -294,128 +124,31 @@ yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
% Non-Minimum phase zero? % Comparison of the encoder and interferometer
% In order to determine if the complex conjugate zero of Figure ref:fig:strut_1_enc_frf_iff_plant_tf is minimum phase or non-minimum phase, longer measurements are performed.
long_noise = load('frf_struts_align_3_noise_long.mat', 't', 'u', 'Vs');
Ts = 1e-4; % Sampling Time [s]
Nfft = floor(10/Ts);
win = hanning(Nfft);
Noverlap = floor(Nfft/2);
%% Transfer function estimation
[frf_noise, f] = tfestimate(long_noise.u, long_noise.Vs, win, Noverlap, Nfft, 1/Ts);
%% Bode plot of the FRF from u to de
figure; figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]); ax1 = nexttile([2,1]);
hold on; hold on;
plot(f, abs(frf_noise), '.-'); plot(f, abs(enc_frf), 'DisplayName', 'Encoder');
plot(f, abs(int_with_enc_frf), 'DisplayName', 'Interferometer');
text(93, 4e-4, {'93Hz'}, 'VerticalAlignment','bottom','HorizontalAlignment','center')
text(200, 1.3e-4,{'197Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
text(300, 4e-6, {'290Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
text(400, 1.4e-6,{'376Hz'},'VerticalAlignment','bottom','HorizontalAlignment','center')
hold off; 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/u$ [m/V]'); set(gca, 'XTickLabel',[]);
hold off; hold off;
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ax2 = nexttile;
hold on;
plot(f, 180/pi*angle(frf_noise), '.-');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:90:360); ylim([-180, 0]);
linkaxes([ax1,ax2],'x');
xlim([38, 45]);
% FRF Identification - Setup
% The identification of the struts dynamics is performed in two steps:
% 1. The excitation signal is a white noise with small amplitude.
% This is used to estimate the low frequency dynamics.
% 2. Then a high frequency noise band-passed between 300Hz and 2kHz is used to estimate the high frequency dynamics.
% Then, the result of the first identification is used between 10Hz and 350Hz and the result of the second identification if used between 350Hz and 2kHz.
% Here are the leg numbers that have been measured.
%% Numnbers of the measured legs
strut_nums = [1 2 3 4 5];
% The data are loaded for both the first and second identification:
%% First identification (low frequency noise)
leg_noise = {};
for i = 1:length(strut_nums)
leg_noise(i) = {load(sprintf('frf_data_leg_coder_%i_noise.mat', strut_nums(i)), 'u', 'Vs', 'de', 'da')};
end
%% Second identification (high frequency noise)
leg_noise_hf = {};
for i = 1:length(strut_nums)
leg_noise_hf(i) = {load(sprintf('frf_data_leg_coder_%i_noise_hf.mat', strut_nums(i)), 'u', 'Vs', 'de', 'da')};
end
Ts = 1e-4; % Sampling Time [s]
Nfft = floor(1/Ts);
win = hanning(Nfft);
Noverlap = floor(Nfft/2);
% We get the frequency vector that will be the same for all the frequency domain analysis.
% Only used to have the frequency vector "f"
[~, f] = tfestimate(leg_noise{1}.u, leg_noise{1}.de, win, Noverlap, Nfft, 1/Ts);
i_lf = f <= 350;
i_hf = f > 350;
% FRF Identification - Encoder
% In this section, the dynamics from $u$ to $d_e$ (encoder) is identified.
% Then, the transfer function from the DAC output voltage $u$ to the measured displacement by the encoder $d_e$ is computed:
%% Transfer function estimation
enc_frf = zeros(length(f), length(strut_nums));
for i = 1:length(strut_nums)
[frf_lf, ~] = tfestimate(leg_noise{i}.u, detrend(leg_noise{i}.de, 0), win, Noverlap, Nfft, 1/Ts);
[frf_hf, ~] = tfestimate(leg_noise_hf{i}.u, detrend(leg_noise_hf{i}.de, 0), win, Noverlap, Nfft, 1/Ts);
enc_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)];
end
% The obtained transfer functions are shown in Figure ref:fig:struts_frf_dvf_plant_tf.
%% Bode plot of the FRF from u to de
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
for i = 1:length(strut_nums)
plot(f, abs(enc_frf(:, i)), ...
'DisplayName', sprintf('Leg %i', strut_nums(i)));
end
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/u$ [m/V]'); set(gca, 'XTickLabel',[]);
hold off;
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-8, 1e-3]); ylim([1e-8, 1e-3]);
ax2 = nexttile; ax2 = nexttile;
hold on; hold on;
for i = 1:length(strut_nums) plot(f, 180/pi*angle(enc_frf));
plot(f, 180/pi*angle(enc_frf(:, i))); plot(f, 180/pi*angle(int_with_enc_frf));
end
hold off; 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]');
@ -425,13 +158,36 @@ yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
% FRF Identification - Interferometer % Comparison of all the Struts
% In this section, the dynamics from $u$ to $d_a$ (interferometer) is identified. % <<ssec:test_struts_meas_all_struts>>
% Then, the transfer function from the DAC output voltage $u$ to the measured displacement by the Attocube is computed for all the struts and shown in Figure ref:fig:struts_frf_int_plant_tf.
% All the struts are giving very similar FRF.
%% Transfer function estimation %% Numbers of the measured legs
strut_nums = [1 2 3 4 5];
%% Load the measurement data
% First identification (low frequency noise)
leg_noise = {};
for i = 1:length(strut_nums)
leg_noise(i) = {load(sprintf('frf_data_leg_coder_%i_noise.mat', strut_nums(i)), 'u', 'Vs', 'de', 'da')};
end
% Second identification (high frequency noise)
leg_noise_hf = {};
for i = 1:length(strut_nums)
leg_noise_hf(i) = {load(sprintf('frf_data_leg_coder_%i_noise_hf.mat', strut_nums(i)), 'u', 'Vs', 'de', 'da')};
end
%% Compute FRF - From u to de (encoder)
enc_frf = zeros(length(f), length(strut_nums));
for i = 1:length(strut_nums)
[frf_lf, ~] = tfestimate(leg_noise{i}.u, detrend(leg_noise{i}.de, 0), win, Noverlap, Nfft, 1/Ts);
[frf_hf, ~] = tfestimate(leg_noise_hf{i}.u, detrend(leg_noise_hf{i}.de, 0), win, Noverlap, Nfft, 1/Ts);
enc_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)];
end
%% Compute FRF - From u to da (interferometer)
int_frf = zeros(length(f), length(strut_nums)); int_frf = zeros(length(f), length(strut_nums));
for i = 1:length(strut_nums) for i = 1:length(strut_nums)
[frf_lf, ~] = tfestimate(leg_noise{i}.u, leg_noise{i}.da, win, Noverlap, Nfft, 1/Ts); [frf_lf, ~] = tfestimate(leg_noise{i}.u, leg_noise{i}.da, win, Noverlap, Nfft, 1/Ts);
@ -439,6 +195,20 @@ for i = 1:length(strut_nums)
int_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)]; int_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)];
end end
%% Compute FRF - From u to Vs (force sensor)
iff_frf = zeros(length(f), length(strut_nums));
for i = 1:length(strut_nums)
[frf_lf, ~] = tfestimate(leg_noise{i}.u, leg_noise{i}.Vs, win, Noverlap, Nfft, 1/Ts);
[frf_hf, ~] = tfestimate(leg_noise_hf{i}.u, leg_noise_hf{i}.Vs, win, Noverlap, Nfft, 1/Ts);
iff_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)];
end
% Then, the transfer function from the DAC output voltage $u$ to the measured displacement by the Attocube is computed for all the struts and shown in Figure ref:fig:test_struts_comp_interf_plants.
% All the struts are giving very similar FRF.
%% Plot the FRF from u to de (interferometer) %% Plot the FRF from u to de (interferometer)
figure; figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
@ -453,7 +223,7 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_a/u$ [m/V]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude $d_a/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-9, 1e-3]); ylim([1e-9, 1e-3]);
ax2 = nexttile; ax2 = nexttile;
@ -470,19 +240,6 @@ yticks(-360:90:360); ylim([-180 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
% FRF Identification - Force Sensor
% In this section, the dynamics from $u$ to $V_s$ is identified.
% Then the FRF are estimated and shown in Figure ref:fig:struts_frf_iff_plant_tf.
% They are also shown all to be very similar.
%% FRF estimation of the transfer function from u to Vs
iff_frf = zeros(length(f), length(strut_nums));
for i = 1:length(strut_nums)
[frf_lf, ~] = tfestimate(leg_noise{i}.u, leg_noise{i}.Vs, win, Noverlap, Nfft, 1/Ts);
[frf_hf, ~] = tfestimate(leg_noise_hf{i}.u, leg_noise_hf{i}.Vs, win, Noverlap, Nfft, 1/Ts);
iff_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)];
end
%% Plot the FRF from u to Vs %% Plot the FRF from u to Vs
figure; figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
@ -514,93 +271,25 @@ yticks(-360:90:360); ylim([-180 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
% Misalignment of the APA and flexible joints
% The misalignment between the two flexible joints and the APA has been measured for all the struts:
% - the strut is fixed to the mounting bench
% - using an indicator, the height difference from the flexible joints and the APA is measured both for the top and bottom joints and on both sides
% - then it is possible to obtain the misalignment for both flexible joints
% The raw measurements are shown in Table ref:tab:meas_misalignment_struts_raw.
% As the flexible joint's "thickness" is 1mm larger than the APA "thickness", ideally (i.e. if it were perfectly centered) we would measure =-0.50mm= each time.
strut_nums = [1, 2, 3, 4, 5]; % #+name: fig:test_struts_comp_plants
% #+caption: Comparison of the measured plants
% #+begin_figure
% #+attr_latex: :caption \subcaption{\label{fig:test_struts_comp_interf_plants}$u$ to $d_a$}
% #+attr_latex: :options {0.49\textwidth}
% #+begin_subfigure
% #+attr_latex: :width \linewidth
% [[file:figs/test_struts_comp_interf_plants.png]]
% #+end_subfigure
% #+attr_latex: :caption \subcaption{\label{fig:test_struts_comp_iff_plants}$u$ to $V_s$}
% #+attr_latex: :options {0.49\textwidth}
% #+begin_subfigure
% #+attr_latex: :width \linewidth
% [[file:figs/test_struts_comp_iff_plants.png]]
% #+end_subfigure
% #+end_figure
% R Top B Top R Bot B Bot
strut_align = [[-0.40, -0.60, -0.16, -0.82] % Strut 1
[-0.67, -0.30, -0.34, -0.63] % Strut 2
[-0.07, -0.88, -0.16, -0.79] % Strut 3
[-0.48, -0.46, 0.07, -1.00] % Strut 4
[-0.33, -0.64, -0.48, -0.52]]; % Strut 5
%% Save the estimated FRF for further analysis
save('./mat/meas_struts_frf.mat', 'f', 'enc_frf', 'int_frf', 'iff_frf', 'strut_nums', 'strut_align');
% Measured misalignment of the APA and flexible joints
% The misalignment between the APA and the flexible joints are measured.
% The results are defined below and summarized in Table ref:tab:meas_misalignment_struts_new_raw.
% R Top B Top R Bot B Bot
strut_align = [[-0.54, -0.50, -0.50, -0.52] % strut 1
[-0.44, -0.55, -0.49, -0.49] % strut 2
[-0.48, -0.50, -0.50, -0.46] % strut 3
[-0.45, -0.51, -0.51, -0.45] % strut 4
[-0.50, -0.50, -0.50, -0.50] % strut 5
[-0.50, -0.49, -0.43, -0.54]]; % strut 6
% FRF Identification - Setup
% The excitation signal is a low pass filtered white noise.
% Both the encoder and the force sensor voltage are measured.
% Here are the leg numbers that have been measured.
%% Numnbers of the measured legs
strut_nums = [1 2 3 4 5 6];
%% First identification (low frequency noise)
leg_noise = {};
for i = 1:length(strut_nums)
leg_noise(i) = {load(sprintf('frf_struts_align_%i_noise.mat', strut_nums(i)), 'u', 'Vs', 'de')};
end
Ts = 1e-4; % Sampling Time [s]
Nfft = floor(1/Ts);
win = hanning(Nfft);
Noverlap = floor(Nfft/2);
% We get the frequency vector that will be the same for all the frequency domain analysis.
% Only used to have the frequency vector "f"
[~, f] = tfestimate(leg_noise{1}.u, leg_noise{1}.de, win, Noverlap, Nfft, 1/Ts);
% FRF Identification - Encoder
% In this section, the dynamics from $u$ to $d_e$ (encoder) is identified.
% Then, the transfer function from the DAC output voltage $u$ to the measured displacement by the encoder $d_e$ is computed:
%% Transfer function estimation
enc_frf = zeros(length(f), length(strut_nums));
for i = 1:length(strut_nums)
enc_frf(:, i) = tfestimate(leg_noise{i}.u, leg_noise{i}.de, win, Noverlap, Nfft, 1/Ts);
end
%% Transfer function estimation
iff_frf = zeros(length(f), length(strut_nums));
for i = 1:length(strut_nums)
iff_frf(:, i) = tfestimate(leg_noise{i}.u, leg_noise{i}.Vs, win, Noverlap, Nfft, 1/Ts);
end
% The obtained transfer functions are shown in Figure ref:fig:struts_align_frf_dvf_plant_tf.
%% Bode plot of the FRF from u to de %% Bode plot of the FRF from u to de
figure; figure;
@ -633,55 +322,5 @@ yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
% TODO Noise measurement :noexport: %% Save the estimated FRF for further analysis
save('./mat/meas_struts_frf.mat', 'f', 'enc_frf', 'int_frf', 'iff_frf', 'strut_nums');
%% Nothing connected to the actuator stacks
open_circuit = load('frf_struts_align_3_huddle_open_circuit.mat', 't', 'Vs', 'de');
%% PD200 connected but its input short-circuited
mid_voltage = load('frf_struts_align_3_huddle_mid_voltage_dac.mat', 't', 'Vs', 'de');
%% PD200 connected to the DAC that outputs 0V
zero_voltage = load('frf_struts_align_3_huddle_dac_zero.mat', 't', 'Vs', 'de');
%% PD200 connected to the DAC that outputs 3.25V
short_circuit = load('frf_struts_align_3_huddle_amp_short_circuit.mat', 't', 'Vs', 'de');
Ts = 1e-4; % Sampling Time [s]
Nfft = floor(2/Ts);
win = hanning(Nfft);
Noverlap = floor(Nfft/2);
[pxx_oc, f] = pwelch(detrend(open_circuit.Vs, 0), win, Noverlap, Nfft, 1/Ts);
[pxx_mv, ~] = pwelch(detrend(mid_voltage.Vs, 0), win, Noverlap, Nfft, 1/Ts);
[pxx_zv, ~] = pwelch(detrend(zero_voltage.Vs, 0), win, Noverlap, Nfft, 1/Ts);
[pxx_sc, ~] = pwelch(detrend(short_circuit.Vs, 0), win, Noverlap, Nfft, 1/Ts);
figure;
hold on;
plot(f, sqrt(pxx_oc), 'DisplayName', 'Open Circuit')
plot(f, sqrt(pxx_sc), 'DisplayName', 'Amp Short-Circuited')
plot(f, sqrt(pxx_zv), 'DisplayName', 'Zero Voltage (DAC)')
plot(f, sqrt(pxx_mv), 'DisplayName', 'Mid Voltage (DAC)')
hold off;
xlabel('Frequency [Hz]'); ylabel('ASD [$V/\sqrt{Hz}$]');
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
legend('location', 'northeast');
xlim([1, 5e3]);
[pxx_oc, f] = pwelch(detrend(open_circuit.de, 0), win, Noverlap, Nfft, 1/Ts);
[pxx_mv, ~] = pwelch(detrend(mid_voltage.de, 0), win, Noverlap, Nfft, 1/Ts);
[pxx_zv, ~] = pwelch(detrend(zero_voltage.de, 0), win, Noverlap, Nfft, 1/Ts);
[pxx_sc, ~] = pwelch(detrend(short_circuit.de, 0), win, Noverlap, Nfft, 1/Ts);
figure;
hold on;
plot(f, sqrt(pxx_oc), 'DisplayName', 'Open Circuit')
plot(f, sqrt(pxx_sc), 'DisplayName', 'Amp Short-Circuited')
plot(f, sqrt(pxx_zv), 'DisplayName', 'Zero Voltage (DAC)')
plot(f, sqrt(pxx_mv), 'DisplayName', 'Mid Voltage (DAC)')
hold off;
xlabel('Frequency [Hz]'); ylabel('ASD [$m/\sqrt{Hz}$]');
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
legend('location', 'northeast');
xlim([1, 5e3])

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2024-03-25 Mon 16:32 % Created 2024-03-27 Wed 14:27
% 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 - Nano-Hexapod Struts}, pdftitle={Test Bench - Nano-Hexapod Struts},
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}
@ -75,9 +75,7 @@ This is very important in order to not loose any stroke when the struts will be
A CAD view of the mounting bench is shown in Figure \ref{fig:test_struts_mounting_bench_first_concept}. A CAD view of the mounting bench is shown in Figure \ref{fig:test_struts_mounting_bench_first_concept}.
\begin{itemize} Faro arm\footnote{Faro Arm Platinum 4ft, accuracy of \(\pm 13\mu m\)}
\item[{$\square$}] Add some notes to the figure
\end{itemize}
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
@ -87,7 +85,7 @@ A CAD view of the mounting bench is shown in Figure \ref{fig:test_struts_mountin
The main part of the bench is here to ensure both the correct strut length and strut coaxiality as shown in Figure \ref{fig:test_struts_mounting_step_0}. The main part of the bench is here to ensure both the correct strut length and strut coaxiality as shown in Figure \ref{fig:test_struts_mounting_step_0}.
\begin{figure} \begin{figure}[htbp]
\begin{subfigure}{0.56\textwidth} \begin{subfigure}{0.56\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,height=4.5cm]{figs/test_struts_mounting_step_0.jpg} \includegraphics[scale=1,height=4.5cm]{figs/test_struts_mounting_step_0.jpg}
@ -123,7 +121,7 @@ Visually align the clamped one horizontally. (Figure \ref{fig:test_struts_mounti
\item Disassemble to have an properly mounted strut (Figure \ref{fig:test_struts_mounting_step_4}) for which the coaxiality between the two flexible joint's interfaces is good \item Disassemble to have an properly mounted strut (Figure \ref{fig:test_struts_mounting_step_4}) for which the coaxiality between the two flexible joint's interfaces is good
\end{enumerate} \end{enumerate}
\begin{figure} \begin{figure}[htbp]
\begin{subfigure}{0.33\textwidth} \begin{subfigure}{0.33\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,height=4.5cm]{figs/test_struts_cylindrical_mounting_part_top.jpg} \includegraphics[scale=1,height=4.5cm]{figs/test_struts_cylindrical_mounting_part_top.jpg}
@ -145,28 +143,30 @@ Visually align the clamped one horizontally. (Figure \ref{fig:test_struts_mounti
\caption{\label{fig:test_struts_cylindrical_mounting}Preparation of the flexible joints by fixing them in their cylindrical interface} \caption{\label{fig:test_struts_cylindrical_mounting}Preparation of the flexible joints by fixing them in their cylindrical interface}
\end{figure} \end{figure}
\begin{figure} \begin{figure}[htbp]
\begin{subfigure}{0.5\textwidth} \begin{subfigure}{0.5\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_mounting_step_1.jpg} \includegraphics[scale=1,width=0.95\linewidth]{figs/test_struts_mounting_step_1.jpg}
\end{center} \end{center}
\subcaption{\label{fig:test_struts_mounting_step_1}Step 1} \subcaption{\label{fig:test_struts_mounting_step_1}Step 1}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.5\textwidth} \begin{subfigure}{0.5\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_mounting_step_2.jpg} \includegraphics[scale=1,width=0.95\linewidth]{figs/test_struts_mounting_step_2.jpg}
\end{center} \end{center}
\subcaption{\label{fig:test_struts_mounting_step_2}Step 2} \subcaption{\label{fig:test_struts_mounting_step_2}Step 2}
\end{subfigure} \end{subfigure}
\bigskip
\begin{subfigure}{0.5\textwidth} \begin{subfigure}{0.5\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_mounting_step_3.jpg} \includegraphics[scale=1,width=0.95\linewidth]{figs/test_struts_mounting_step_3.jpg}
\end{center} \end{center}
\subcaption{\label{fig:test_struts_mounting_step_3}Step 3} \subcaption{\label{fig:test_struts_mounting_step_3}Step 3}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.5\textwidth} \begin{subfigure}{0.5\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_mounting_step_4.jpg} \includegraphics[scale=1,width=0.95\linewidth]{figs/test_struts_mounting_step_4.jpg}
\end{center} \end{center}
\subcaption{\label{fig:test_struts_mounting_step_4}Step 4} \subcaption{\label{fig:test_struts_mounting_step_4}Step 4}
\end{subfigure} \end{subfigure}
@ -176,18 +176,9 @@ Visually align the clamped one horizontally. (Figure \ref{fig:test_struts_mounti
\label{sec:test_struts_flexible_modes} \label{sec:test_struts_flexible_modes}
\section{Introduction} \section{Introduction}
These modes are present when flexible joints are fixed to the ends of the APA300ML. From a Finite Element Model of the struts, it have been found that three main resonances are foreseen to be problematic for the control of the APA300ML (Figure \ref{fig:test_struts_mode_shapes}): an ``X-bending'' mode at 189Hz, a ``Y-bending'' mode at 285Hz and a ``Z-torsion'' mode at 400Hz.
To experimentally measure the frequency of these modes, the struts are mounted (both with and without the encoder).
Then, each end of the strut is fixed to a vertically guided stage as shown in Figure \ref{fig:test_struts_meas_spur_res_struts_1_enc}.
From a Finite Element Model of the struts, it have been found that three main resonances are foreseen to be problematic for the control of the APA300ML (Figure \ref{fig:test_struts_mode_shapes}): \begin{figure}[htbp]
\begin{itemize}
\item Mode in X-bending at 189Hz
\item Mode in Y-bending at 285Hz
\item Mode in Z-torsion at 400Hz
\end{itemize}
\begin{figure}
\begin{subfigure}{0.33\textwidth} \begin{subfigure}{0.33\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_mode_shapes_1.png} \includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_mode_shapes_1.png}
@ -219,7 +210,7 @@ Finally, the ``Z-torsion'' is measured as shown in Figure \ref{fig:test_struts_m
This is done with and without the encoder fixed to the strut. This is done with and without the encoder fixed to the strut.
\begin{figure} \begin{figure}[htbp]
\begin{subfigure}{0.33\textwidth} \begin{subfigure}{0.33\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_meas_x_bending.jpg} \includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_meas_x_bending.jpg}
@ -240,32 +231,30 @@ This is done with and without the encoder fixed to the strut.
\end{subfigure} \end{subfigure}
\caption{\label{fig:test_struts_meas_modes}Measurement of strut flexible modes} \caption{\label{fig:test_struts_meas_modes}Measurement of strut flexible modes}
\end{figure} \end{figure}
\section{Without Encoder} \section{Measured results}
When the encoder is not fixed to the strut, the obtained FRF are shown in Figure \ref{fig:test_struts_spur_res_frf}. The obtained frequency response functions are shown in Figure \ref{fig:test_struts_spur_res_frf}.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \begin{subfigure}{0.49\textwidth}
\includegraphics[scale=1]{figs/test_struts_spur_res_frf.png} \begin{center}
\caption{\label{fig:test_struts_spur_res_frf}Obtained FRF for the struts without the encoder} \includegraphics[scale=1,width=\linewidth]{figs/test_struts_spur_res_frf_no_enc.png}
\end{center}
\subcaption{\label{fig:test_struts_spur_res_frf_no_enc}without encoder}
\end{subfigure}
\begin{subfigure}{0.49\textwidth}
\begin{center}
\includegraphics[scale=1,width=\linewidth]{figs/test_struts_spur_res_frf_enc.png}
\end{center}
\subcaption{\label{fig:test_struts_spur_res_frf_enc}with the encoder}
\end{subfigure}
\caption{\label{fig:test_struts_spur_res_frf}Measured frequency response functions without the encoder \ref{fig:test_struts_spur_res_frf} and with the encoder \ref{fig:test_struts_spur_res_frf_enc}}
\end{figure} \end{figure}
\section{With Encoder}
Then, one encoder is fixed to the strut and the FRF are measured again and shown in Figure \ref{fig:test_struts_spur_res_frf_enc}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/test_struts_spur_res_frf_enc.png}
\caption{\label{fig:test_struts_spur_res_frf_enc}Obtained FRF for the struts with encoder}
\end{figure}
\section{Conclusion}
Table \ref{tab:test_struts_spur_mode_freqs} summarizes the measured resonance frequencies as well as the computed ones using the Finite Element Model. Table \ref{tab:test_struts_spur_mode_freqs} summarizes the measured resonance frequencies as well as the computed ones using the Finite Element Model.
It is shown that:
\begin{important}
From the values in Table \ref{tab:test_struts_spur_mode_freqs}, it is shown that:
\begin{itemize} \begin{itemize}
\item the resonance frequencies of the 3 modes are only slightly increasing when the encoder is removed \item the resonance frequencies of the 3 modes are only slightly increasing when the encoder is removed
\item the computed resonance frequencies from the FEM are very close to the measured one when the encoder is fixed to the strut \item the computed resonance frequencies from the FEM are very close to the measured one when the encoder is fixed to the strut
\end{itemize} \end{itemize}
\end{important}
\begin{table}[htbp] \begin{table}[htbp]
\caption{\label{tab:test_struts_spur_mode_freqs}Measured frequency of the strut spurious modes} \caption{\label{tab:test_struts_spur_mode_freqs}Measured frequency of the strut spurious modes}
@ -285,180 +274,202 @@ Z-Torsion & 400Hz & 381Hz & 398Hz\\
The bench is shown in Figure \ref{fig:test_struts_bench_leg_overview}. The bench is shown in Figure \ref{fig:test_struts_bench_leg_overview}.
Measurements are performed either when no encoder is fixed to the strut (Figure \ref{fig:test_struts_bench_leg_front}) or when one encoder is fixed to the strut (Figure \ref{fig:test_struts_bench_leg_coder}). Measurements are performed either when no encoder is fixed to the strut (Figure \ref{fig:test_struts_bench_leg_front}) or when one encoder is fixed to the strut (Figure \ref{fig:test_struts_bench_leg_coder}).
\begin{figure} \begin{figure}[htbp]
\begin{subfigure}{0.35\textwidth} \begin{subfigure}{0.35\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_bench_leg_overview.jpg} \includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_bench_leg_overview.jpg}
\end{center} \end{center}
\subcaption{\label{fig:test_struts_bench_leg_overview}Overview} \subcaption{\label{fig:test_struts_bench_leg_overview}Overview}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.31\textwidth} \begin{subfigure}{0.31\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_bench_leg_front.jpg} \includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_bench_leg_front.jpg}
\end{center} \end{center}
\subcaption{\label{fig:test_struts_bench_leg_front}Strut without encoder} \subcaption{\label{fig:test_struts_bench_leg_front}Strut without encoder}
\end{subfigure} \end{subfigure}
\begin{subfigure}{0.31\textwidth} \begin{subfigure}{0.31\textwidth}
\begin{center} \begin{center}
\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_bench_leg_coder.jpg} \includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_bench_leg_coder.jpg}
\end{center} \end{center}
\subcaption{\label{fig:test_struts_bench_leg_coder}Strut with encoder} \subcaption{\label{fig:test_struts_bench_leg_coder}Strut with encoder}
\end{subfigure} \end{subfigure}
\caption{\label{fig:test_struts_bench_leg}Experimental setup to measured the dynamics of the struts.} \caption{\label{fig:test_struts_bench_leg}Experimental setup to measured the dynamics of the struts.}
\end{figure} \end{figure}
First, only one strut is measured in details (Section \ref{ssec:test_struts_meas_strut_1}), and then all the struts are measured and compared (Section \ref{ssec:test_struts_meas_all_struts}). First, the effect of the encoder on the measured dynamics is studied in Section \ref{ssec:test_struts_effect_encoder}.
\section{Measurement on Strut 1} Then, the dynamics seen by the encoder and by the interferometers are compared in Section \ref{ssec:test_struts_comp_enc_int}.
\label{ssec:test_struts_meas_strut_1} Finally, all the measured struts are compared in terms of dynamics in Section \ref{ssec:test_struts_comp_all_struts}.
Measurements are first performed on one of the strut. \section{Effect of the Encoder on the measured dynamics}
\label{ssec:test_struts_effect_encoder}
In Section \ref{sec:meas_strut_1_no_encoder}, the dynamics of the strut is measured without the encoder attached to it. Figure \ref{fig:test_struts_effect_encoder_int}
Then in Section \ref{sec:meas_strut_1_encoder}, the encoder is attached to the struts, and the dynamic is identified. Same goes for the transfer function from excitation voltage \(u\) to the axial motion of the strut \(d_a\) as measured by the interferometer ().
\subsection{Without Encoder}
\label{sec:meas_strut_1_no_encoder}
Similarly to what was done for the identification of the APA, the identification is performed in three steps:
\begin{enumerate}
\item White noise excitation with small amplitude.
This is used to determine the main resonance of the system.
\item Sweep sine excitation with the amplitude lowered around the resonance.
The sweep sine is from 10Hz to 400Hz.
\item High frequency noise.
The noise is band-passed between 300Hz and 2kHz.
\end{enumerate}
Then, the result of the second identification is used between 10Hz and 350Hz and the result of the third identification if used between 350Hz and 2kHz. The transfer function from the excitation voltage \(u\) to the generated voltage \(V_s\) by the sensor stack is not influence by the fixation of the encoder (Figure \ref{fig:test_struts_effect_encoder_iff}).
This means that the IFF control strategy should be as effective whether or not the encoders are fixed to the struts.
In this section, the dynamics from the excitation voltage \(u\) to the interferometer \(d_a\) is identified.
The transfer function from \(u\) to the interferometer measured displacement \(d_a\) is estimated and shown in Figure \ref{fig:strut_1_frf_dvf_plant_tf}.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \begin{subfigure}{0.49\textwidth}
\includegraphics[scale=1]{figs/strut_1_frf_dvf_plant_tf.png} \begin{center}
\caption{\label{fig:strut_1_frf_dvf_plant_tf}Estimated FRF for the DVF plant (transfer function from \(u\) to the interferometer \(d_a\))} \includegraphics[scale=1,width=0.95\linewidth]{figs/test_struts_effect_encoder_int.png}
\end{center}
\subcaption{\label{fig:test_struts_effect_encoder_int}$u$ to $d_a$}
\end{subfigure}
\begin{subfigure}{0.49\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.95\linewidth]{figs/test_struts_effect_encoder_iff.png}
\end{center}
\subcaption{\label{fig:test_struts_effect_encoder_iff}$u$ to $V_s$}
\end{subfigure}
\caption{\label{fig:test_struts_effect_encoder}Effect of having the encoder fixed to the struts on the measured dynamics from \(u\) to \(d_a\) (\subref{fig:test_struts_effect_encoder_int}) and from \(u\) to \(V_s\) \cref{fig:test_struts_effect_encoder_iff}}
\end{figure} \end{figure}
\section{Comparison of the encoder and interferometer}
\label{ssec:test_struts_comp_enc_int}
In this section, the dynamics from \(u\) to \(V_s\) is identified. The dynamics as measured by the encoder and by the interferometers are compared in Figure \ref{fig:test_struts_comp_enc_int}.
Then the FRF are estimated and shown in Figure \ref{fig:strut_1_frf_iff_plant_tf}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/strut_1_frf_iff_plant_tf.png}
\caption{\label{fig:strut_1_frf_iff_plant_tf}Identified IFF Plant for the Strut 1}
\end{figure}
\subsection{With Encoder}
\label{sec:meas_strut_1_encoder}
Now the encoder is fixed to the strut and the identification is performed.
The dynamics from \(u\) to \(d_a\) is identified. The dynamics from the excitation voltage \(u\) to the measured displacement by the encoder \(d_e\) presents much more complicated behavior than the transfer function to the displacement as measured by the Interferometer (compared in Figure \ref{fig:test_struts_comp_enc_int}).
The obtained FRF is very close to the one that was obtained when no encoder was fixed to the struts as shown in Figure \ref{fig:strut_leg_compare_int_frf}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/strut_leg_compare_int_frf.png}
\caption{\label{fig:strut_leg_compare_int_frf}Comparison of the measured FRF from \(u\) to \(d_a\) with and without the encoders fixed to the struts}
\end{figure}
The FRF from \(u\) to the encoder measured displacement \(d_e\) is computed and shown in Figure \ref{fig:strut_1_enc_frf_dvf_plant_tf}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/strut_1_enc_frf_dvf_plant_tf.png}
\caption{\label{fig:strut_1_enc_frf_dvf_plant_tf}Estimated FRF for the DVF plant (transfer function from \(u\) to the encoder \(d_e\))}
\end{figure}
The transfer functions from \(u\) to \(d_e\) (encoder) and to \(d_a\) (interferometer) are compared in Figure \ref{fig:strut_1_comp_enc_int}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/strut_1_comp_enc_int.png}
\caption{\label{fig:strut_1_comp_enc_int}Comparison of the transfer functions from excitation voltage \(u\) to either the encoder \(d_e\) or the interferometer \(d_a\)}
\end{figure}
\begin{important}
The dynamics from the excitation voltage \(u\) to the measured displacement by the encoder \(d_e\) presents much more complicated behavior than the transfer function to the displacement as measured by the Interferometer (compared in Figure \ref{fig:strut_1_comp_enc_int}).
It will be further investigated why the two dynamics as so different and what are causing all these resonances. It will be further investigated why the two dynamics as so different and what are causing all these resonances.
\end{important}
As shown in Figure \ref{fig:strut_1_spurious_resonances}, we can clearly see three spurious resonances at 197Hz, 290Hz and 376Hz. As shown in Figure \ref{fig:test_struts_comp_enc_int}, we can clearly see three spurious resonances at 197Hz, 290Hz and 376Hz.
These resonances correspond to parasitic resonances of the strut itself that was estimated using a finite element model of the strut (Figure \ref{fig:test_struts_mode_shapes}):
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/strut_1_spurious_resonances.png}
\caption{\label{fig:strut_1_spurious_resonances}Magnitude of the transfer function from excitation voltage \(u\) to encoder measurement \(d_e\). The frequency of the resonances are noted.}
\end{figure}
These resonances correspond to parasitic resonances of the strut itself.
They are very close to what was estimated using a finite element model of the strut (Figure \ref{fig:test_struts_mode_shapes}):
\begin{itemize} \begin{itemize}
\item Mode in X-bending at 189Hz \item Mode in X-bending at 189Hz
\item Mode in Y-bending at 285Hz \item Mode in Y-bending at 285Hz
\item Mode in Z-torsion at 400Hz \item Mode in Z-torsion at 400Hz
\end{itemize} \end{itemize}
\begin{important} The good news is that these resonances are not seen on the interferometer (they are therefore not impacting the axial motion of the strut).
The resonances seen by the encoder in Figure \ref{fig:strut_1_spurious_resonances} are indeed corresponding to the modes of the strut as shown in Figure \ref{fig:test_struts_mode_shapes}. But these resonances are making the use of encoder fixed to the strut difficult.
\end{important}
Let's now compare the IFF plants (dynamics from \(u\) to \(V_s\)) whether the encoders are fixed to the APA or not (Figure \ref{fig:strut_1_frf_iff_comp_enc}).
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/strut_1_frf_iff_effect_enc.png} \includegraphics[scale=1]{figs/test_struts_comp_enc_int.png}
\caption{\label{fig:strut_1_frf_iff_comp_enc}Effect of the encoder on the IFF plant} \caption{\label{fig:test_struts_comp_enc_int}Comparison of the transfer functions from excitation voltage \(u\) to either the encoder \(d_e\) or the interferometer \(d_a\)}
\end{figure} \end{figure}
\begin{important}
The transfer function from the excitation voltage \(u\) to the generated voltage \(V_s\) by the sensor stack is not influence by the fixation of the encoder.
This means that the IFF control strategy should be as effective whether or not the encoders are fixed to the struts.
\end{important}
In order to determine if the complex conjugate zero of Figure \ref{fig:strut_1_enc_frf_iff_plant_tf} is minimum phase or non-minimum phase, longer measurements are performed.
\section{Comparison of all the Struts} \section{Comparison of all the Struts}
\label{ssec:test_struts_meas_all_struts} \label{ssec:test_struts_comp_all_struts}
Now all struts are measured using the same procedure and test bench as in Section \ref{sec:meas_strut_1}.
\subsection{FRF Identification}
The identification of the struts dynamics is performed in two steps:
\begin{enumerate}
\item The excitation signal is a white noise with small amplitude.
This is used to estimate the low frequency dynamics.
\item Then a high frequency noise band-passed between 300Hz and 2kHz is used to estimate the high frequency dynamics.
\end{enumerate}
Then, the result of the first identification is used between 10Hz and 350Hz and the result of the second identification if used between 350Hz and 2kHz. Then, the transfer function from the DAC output voltage \(u\) to the measured displacement by the Attocube is computed for all the struts and shown in Figure \ref{fig:test_struts_comp_interf_plants}.
Here are the leg numbers that have been measured.
The transfer function from the DAC output voltage \(u\) to the measured displacement by the encoder \(d_e\) is computed.
The obtained transfer functions are shown in Figure \ref{fig:struts_frf_dvf_plant_tf}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/struts_frf_dvf_plant_tf.png}
\caption{\label{fig:struts_frf_dvf_plant_tf}Estimated FRF for the DVF plant (transfer function from \(u\) to the encoder \(d_e\))}
\end{figure}
\begin{important}
There is a very large variability of the dynamics as measured by the encoder as shown in Figure \ref{fig:struts_frf_dvf_plant_tf}.
Even-though the same peaks are seen for all of the struts (95Hz, 200Hz, 300Hz, 400Hz), the amplitude of the peaks are not the same.
Moreover, the location or even the presence of complex conjugate zeros is changing from one strut to the other.
All of this will be explained in Section \ref{sec:simscape_bench_struts} thanks to the Simscape model.
\end{important}
Then, the transfer function from the DAC output voltage \(u\) to the measured displacement by the Attocube is computed for all the struts and shown in Figure \ref{fig:struts_frf_int_plant_tf}.
All the struts are giving very similar FRF. All the struts are giving very similar FRF.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \begin{subfigure}{0.49\textwidth}
\includegraphics[scale=1]{figs/struts_frf_int_plant_tf.png} \begin{center}
\caption{\label{fig:struts_frf_int_plant_tf}Estimated FRF for the DVF plant (transfer function from \(u\) to the encoder \(d_e\))} \includegraphics[scale=1,width=\linewidth]{figs/test_struts_comp_interf_plants.png}
\end{center}
\subcaption{\label{fig:test_struts_comp_interf_plants}$u$ to $d_a$}
\end{subfigure}
\begin{subfigure}{0.49\textwidth}
\begin{center}
\includegraphics[scale=1,width=\linewidth]{figs/test_struts_comp_iff_plants.png}
\end{center}
\subcaption{\label{fig:test_struts_comp_iff_plants}$u$ to $V_s$}
\end{subfigure}
\caption{\label{fig:test_struts_comp_plants}Comparison of the measured plants}
\end{figure} \end{figure}
In this section, the dynamics from \(u\) to \(V_s\) is identified. There is a very large variability of the dynamics as measured by the encoder as shown in Figure \ref{fig:test_struts_comp_enc_plants}.
Then the FRF are estimated and shown in Figure \ref{fig:struts_frf_iff_plant_tf}. Even-though the same peaks are seen for all of the struts (95Hz, 200Hz, 300Hz, 400Hz), the amplitude of the peaks are not the same.
They are also shown all to be very similar. Moreover, the location or even the presence of complex conjugate zeros is changing from one strut to the other.
All of this will be studied in Section \ref{sec:test_struts_simscape} using the Simscape model.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
\includegraphics[scale=1]{figs/struts_frf_iff_plant_tf.png} \includegraphics[scale=1]{figs/test_struts_comp_enc_plants.png}
\caption{\label{fig:struts_frf_iff_plant_tf}Identified IFF Plant} \caption{\label{fig:test_struts_comp_enc_plants}Estimated FRF for the DVF plant (transfer function from \(u\) to the encoder \(d_e\))}
\end{figure} \end{figure}
\subsection{Misalignment of the APA and flexible joints} \begin{important}
All the struts are giving very consistent behavior from the excitation voltage \(u\) to the force sensor generated voltage \(V_s\) and to the interferometer measured displacement \(d_a\).
However, the dynamics from \(u\) to the encoder measurement \(d_e\) is much more complex and variable from one strut to the other most likely due to poor alignment of the APA with respect to the flexible joints.
\end{important}
\chapter{Simscape Model}
\label{sec:test_struts_simscape}
However, now the full strut is put instead of only the APA (see Figure \ref{fig:test_struts_simscape_model}).
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.7\linewidth]{figs/test_struts_simscape_model.png}
\caption{\label{fig:test_struts_simscape_model}Screenshot of the Simscape model of the strut fixed to the bench}
\end{figure}
This Simscape model is used to:
\begin{itemize}
\item compare the measured FRF with the modelled FRF
\item help the correct understanding/interpretation of the results
\item tune the model of the struts (APA, flexible joints, encoder)
\end{itemize}
This study is structured as follow:
\begin{itemize}
\item Section \ref{ssec:test_struts_comp_model}: the measured FRF are compared with the Simscape model.
\item Section \ref{ssec:test_struts_effect_misalignment}: the flexible APA model is used, and the effect of a misalignment of the APA and flexible joints is studied.
It is found that the misalignment has a large impact on the dynamics from \(u\) to \(d_e\).
\item Section \ref{ssec:test_struts_effect_joint_stiffness}: the effect of the flexible joint's stiffness on the dynamics is studied.
It is found that the axial stiffness of the joints has a large impact on the location of the zeros on the transfer function from \(V_s\) to \(d_e\).
\end{itemize}
\section{Comparison with the Model}
\label{ssec:test_struts_comp_model}
Two models of the APA300ML are used here for comparison:
\begin{itemize}
\item a simple two degrees of freedom model
\item a model using a super element extracted from a finite element model
\end{itemize}
These two models of the APA300ML were tuned to best match measured frequency response functions of the APA alone.
The flexible joints are here modelled with the 4DoF model (axial stiffness, two bending stiffnesses and one torsion stiffness).
These two models are compared with the measured frequency responses in Figure \ref{fig:test_struts_comp_frf_flexible_model}.
The model dynamics from DAC voltage \(u\) to the axial motion of the strut \(d_a\) (Figure \ref{fig:test_struts_comp_frf_flexible_model_int}) and from DAC voltage \(u\) to the force sensor voltage \(V_s\) (Figure \ref{fig:test_struts_comp_frf_flexible_model_iff}) are well matching the experimental identification.
However, the transfer function from \(u\) to encoder displacement \(d_e\) are not well matching for both models.
For the 2DoF model, this is normal as the resonances affecting the dynamics are not modelled at all (the APA300ML is modelled as infinitely rigid in all directions except the translation along it's actuation axis).
For the flexible model, it will be shown in the next section that by adding some misalignment betwen the flexible joints and the APA300ML, this model can better represent the observed dynamics.
\begin{figure}[htbp]
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_comp_frf_flexible_model_int.png}
\end{center}
\subcaption{\label{fig:test_struts_comp_frf_flexible_model_int}$u$ to $d_a$}
\end{subfigure}
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_comp_frf_flexible_model_enc.png}
\end{center}
\subcaption{\label{fig:test_struts_comp_frf_flexible_model_enc}$u$ to $d_e$}
\end{subfigure}
\begin{subfigure}{0.33\textwidth}
\begin{center}
\includegraphics[scale=1,width=0.9\linewidth]{figs/test_struts_comp_frf_flexible_model_iff.png}
\end{center}
\subcaption{\label{fig:test_struts_comp_frf_flexible_model_iff}$u$ to $V_s$}
\end{subfigure}
\caption{\label{fig:test_struts_comp_frf_flexible_model}Comparison of the measured dynamics and of the Simscape dynamics using the ``flexible'' APA300ML model (Super-Element extracted from a Finite Element Model).}
\end{figure}
\section{Effect of a misalignment of the APA and flexible joints on the transfer function from actuator to encoder}
\label{ssec:test_struts_effect_misalignment}
As shown in Figure \ref{fig:test_struts_comp_enc_plants}, the dynamics from actuator to encoder for all the struts is very different.
This could be explained by a large variability in the alignment of the flexible joints and the APA (at the time, the alignment pins were not used).
Depending on the alignment, the spurious resonances of the struts (Figure \ref{fig:test_struts_mode_shapes}) can be excited differently.
For instance, consider Figure \ref{fig:test_struts_misalign_schematic} where there is a misalignment in the \(y\) direction.
In such case, the mode at 200Hz is foreseen to be more excited as the misalignment \(d_y\) increases and therefore the dynamics from the actuator to the encoder should also change around 200Hz.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.8\linewidth]{figs/test_struts_misalign_schematic.png}
\caption{\label{fig:test_struts_misalign_schematic}Mis-alignement between the joints and the APA}
\end{figure}
If the misalignment is in the \(x\) direction, the mode at 285Hz should be more affected whereas a misalignment in the \(z\) direction should not affect these resonances.
Such statement is studied in this section.
\subsection{Measured misalignment of the APA and flexible joints}
The misalignment between the two flexible joints and the APA has been measured for all the struts: The misalignment between the two flexible joints and the APA has been measured for all the struts:
\begin{itemize} \begin{itemize}
@ -527,14 +538,90 @@ The differences of the measured distances on each side corresponds to the misali
\begin{important} \begin{important}
The misalignment of the APA and flexible joints is quite large and variable from one strut to the other. The misalignment of the APA and flexible joints is quite large and variable from one strut to the other.
\end{important} \end{important}
\subsection{Conclusion} \subsection{Perfectly aligned APA}
Let's first consider that the strut is perfectly mounted such that the two flexible joints and the APA are aligned.
And define the inputs and outputs of the models:
\begin{itemize}
\item Input: voltage generated by the DAC
\item Output: measured displacement by the encoder
\end{itemize}
The transfer function is identified and shown in Figure \ref{fig:comp_enc_frf_align_perfect}.
From Figure \ref{fig:comp_enc_frf_align_perfect}, it is clear that:
\begin{enumerate}
\item The model with perfect alignment is not matching the measured FRF
\item The mode at 200Hz is not present in the identified dynamics of the Simscape model
\item The measured FRF have different shapes
\end{enumerate}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/comp_enc_frf_align_perfect.png}
\caption{\label{fig:comp_enc_frf_align_perfect}Comparison of the model with a perfectly aligned APA and flexible joints with the measured FRF from actuator to encoder}
\end{figure}
\begin{question}
Why is the flexible mode of the strut at 200Hz is not seen in the model in Figure \ref{fig:comp_enc_frf_align_perfect}?
Probably because the presence of this mode is not due because of the ``unbalanced'' mass of the encoder, but rather because of the misalignment of the APA with respect to the two flexible joints.
This will be verified in the next sections.
\end{question}
\subsection{Effect of a misalignment in y}
Let's compute the transfer function from output DAC voltage \(V_s\) to the measured displacement by the encoder \(d_e\) for several misalignment in the \(y\) direction:
The obtained dynamics are shown in Figure \ref{fig:effect_misalignment_y}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/effect_misalignment_y.png}
\caption{\label{fig:effect_misalignment_y}Effect of a misalignement in the \(y\) direction}
\end{figure}
\begin{important} \begin{important}
All the struts are giving very consistent behavior from the excitation voltage \(u\) to the force sensor generated voltage \(V_s\) and to the interferometer measured displacement \(d_a\). The alignment of the APA with the flexible joints as a \textbf{huge} influence on the dynamics from actuator voltage to measured displacement by the encoder.
However, the dynamics from \(u\) to the encoder measurement \(d_e\) is much more complex and variable from one strut to the other most likely due to poor alignment of the APA with respect to the flexible joints. The misalignment in the \(y\) direction mostly influences:
\begin{itemize}
\item the presence of the flexible mode at 200Hz
\item the location of the complex conjugate zero between the first two resonances:
\begin{itemize}
\item if \(d_y < 0\): there is no zero between the two resonances and possibly not even between the second and third ones
\item if \(d_y > 0\): there is a complex conjugate zero between the first two resonances
\end{itemize}
\item the location of the high frequency complex conjugate zeros at 500Hz (secondary effect, as the axial stiffness of the joint also has large effect on the position of this zero)
\end{itemize}
\end{important} \end{important}
\subsection{Effect of a misalignment in x}
Let's compute the transfer function from output DAC voltage to the measured displacement by the encoder for several misalignment in the \(x\) direction:
The obtained dynamics are shown in Figure \ref{fig:effect_misalignment_x}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/effect_misalignment_x.png}
\caption{\label{fig:effect_misalignment_x}Effect of a misalignement in the \(x\) direction}
\end{figure}
The measured FRF are now saved for further use. \begin{important}
The misalignment in the \(x\) direction mostly influences the presence of the flexible mode at 300Hz.
\end{important}
\subsection{Comparison with identified misalignment}
\subsection{Find the misalignment of each strut}
From the previous analysis on the effect of a \(x\) and \(y\) misalignment, it is possible to estimate the \(x,y\) misalignment of the measured struts.
The misalignment that gives the best match for the FRF are defined below.
For each misalignment, the dynamics from the DAC voltage to the encoder measurement is identified.
The results are shown in Figure \ref{fig:comp_all_struts_corrected_misalign}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/comp_all_struts_corrected_misalign.png}
\caption{\label{fig:comp_all_struts_corrected_misalign}Comparison (model and measurements) of the FRF from DAC voltage u to measured displacement by the encoders for all the struts}
\end{figure}
\begin{important}
By tuning the misalignment of the APA with respect to the flexible joints, it is possible to obtain a good fit between the model and the measurements (Figure \ref{fig:comp_all_struts_corrected_misalign}).
If encoders are to be used when fixed on the struts, it is therefore very important to properly align the APA and the flexible joints when mounting the struts.
In the future, a ``pin'' will be used to better align the APA with the flexible joints.
We can expect the amplitude of the spurious resonances to decrease.
\end{important}
\section{Comparison of all the (re-aligned) Struts} \section{Comparison of all the (re-aligned) Struts}
\label{sec:test_struts_meas_all_aligned_struts} \label{sec:test_struts_meas_all_aligned_struts}
\begin{itemize} \begin{itemize}
@ -633,183 +720,6 @@ Having the struts well aligned does not change significantly the obtained dynami
\end{important} \end{important}
The measured FRF are now saved for further use. The measured FRF are now saved for further use.
\chapter{Simscape Model}
\label{sec:test_struts_simscape}
However, now the full strut is put instead of only the APA (see Figure \ref{fig:test_struts_simscape_model}).
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.7\linewidth]{figs/test_struts_simscape_model.png}
\caption{\label{fig:test_struts_simscape_model}Screenshot of the Simscape model of the strut fixed to the bench}
\end{figure}
This Simscape model is used to:
\begin{itemize}
\item compare the measured FRF with the modelled FRF
\item help the correct understanding/interpretation of the results
\item tune the model of the struts (APA, flexible joints, encoder)
\end{itemize}
This study is structured as follow:
\begin{itemize}
\item Section \ref{ssec:test_struts_comp_model}: the measured FRF are compared with the Simscape model.
\item Section \ref{ssec:test_struts_effect_misalignment}: the flexible APA model is used, and the effect of a misalignment of the APA and flexible joints is studied.
It is found that the misalignment has a large impact on the dynamics from \(u\) to \(d_e\).
\item Section \ref{ssec:test_struts_effect_joint_stiffness}: the effect of the flexible joint's stiffness on the dynamics is studied.
It is found that the axial stiffness of the joints has a large impact on the location of the zeros on the transfer function from \(V_s\) to \(d_e\).
\end{itemize}
\section{Comparison with the Model}
\label{ssec:test_struts_comp_model}
\subsection{2Dof model}
The strut is initialized with default parameters (optimized parameters identified from previous experiments).
The dynamics is identified and shown in Figure \ref{fig:strut_bench_model_bode}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/strut_bench_model_bode.png}
\caption{\label{fig:strut_bench_model_bode}Identified transfer function from \(u\) to \(V_s\) and from \(u\) to \(d_e,d_a\) using the simple 2DoF model for the APA}
\end{figure}
The experimentally measured FRF are loaded.
The FRF from \(u\) to \(d_a\) as well as from \(u\) to \(V_s\) are shown in Figure \ref{fig:comp_strut_plant_after_opt} and compared with the model.
They are both found to match quite well with the model.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/comp_strut_plant_after_opt.png}
\caption{\label{fig:comp_strut_plant_after_opt}Comparison of the measured FRF and the optimized model}
\end{figure}
The measured FRF from \(u\) to \(d_e\) (encoder) is compared with the model in Figure \ref{fig:comp_strut_plant_iff_after_opt}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/comp_strut_plant_iff_after_opt.png}
\caption{\label{fig:comp_strut_plant_iff_after_opt}Comparison of the measured FRF and the optimized model}
\end{figure}
\begin{important}
The 2-DoF model is quite effective in modelling the transfer function from actuator to force sensor and from actuator to interferometer (Figure \ref{fig:comp_strut_plant_after_opt}).
But it is not effective in modeling the transfer function from actuator to encoder (Figure \ref{fig:comp_strut_plant_iff_after_opt}).
This is due to the fact that resonances greatly affecting the encoder reading are not modelled.
In the next section, flexible model of the APA will be used to model such resonances.
\end{important}
\subsection{Comparison with the Flexible Model}
The strut is initialized with default parameters (optimized parameters identified from previous experiments).
The dynamics is identified and shown in Figure \ref{fig:strut_bench_model_bode}.
\begin{itemize}
\item[{$\square$}] Add encoder plot
\end{itemize}
The FRF from \(u\) to \(d_a\) as well as from \(u\) to \(V_s\) are shown in Figure \ref{fig:comp_strut_plant_after_opt} and compared with the model.
They are both found to match quite well with the model.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/strut_meas_frf_model_int_force.png}
\label{fig:strut_meas_frf_model_int_force}
\end{figure}
\section{Effect of a misalignment of the APA and flexible joints on the transfer function from actuator to encoder}
\label{ssec:test_struts_effect_misalignment}
As shown in Figure \ref{fig:struts_frf_dvf_plant_tf}, the dynamics from actuator to encoder for all the struts is very different.
This could be explained by a large variability in the alignment of the flexible joints and the APA (at the time, the alignment pins were not used).
Depending on the alignment, the spurious resonances of the struts (Figure \ref{fig:test_struts_mode_shapes}) can be excited differently.
For instance, consider Figure \ref{fig:test_struts_misalign_schematic} where there is a misalignment in the \(y\) direction.
In such case, the mode at 200Hz is foreseen to be more excited as the misalignment \(d_y\) increases and therefore the dynamics from the actuator to the encoder should also change around 200Hz.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.8\linewidth]{figs/test_struts_misalign_schematic.png}
\caption{\label{fig:test_struts_misalign_schematic}Mis-alignement between the joints and the APA}
\end{figure}
If the misalignment is in the \(x\) direction, the mode at 285Hz should be more affected whereas a misalignment in the \(z\) direction should not affect these resonances.
Such statement is studied in this section.
\subsection{Perfectly aligned APA}
Let's first consider that the strut is perfectly mounted such that the two flexible joints and the APA are aligned.
And define the inputs and outputs of the models:
\begin{itemize}
\item Input: voltage generated by the DAC
\item Output: measured displacement by the encoder
\end{itemize}
The transfer function is identified and shown in Figure \ref{fig:comp_enc_frf_align_perfect}.
From Figure \ref{fig:comp_enc_frf_align_perfect}, it is clear that:
\begin{enumerate}
\item The model with perfect alignment is not matching the measured FRF
\item The mode at 200Hz is not present in the identified dynamics of the Simscape model
\item The measured FRF have different shapes
\end{enumerate}
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/comp_enc_frf_align_perfect.png}
\caption{\label{fig:comp_enc_frf_align_perfect}Comparison of the model with a perfectly aligned APA and flexible joints with the measured FRF from actuator to encoder}
\end{figure}
\begin{question}
Why is the flexible mode of the strut at 200Hz is not seen in the model in Figure \ref{fig:comp_enc_frf_align_perfect}?
Probably because the presence of this mode is not due because of the ``unbalanced'' mass of the encoder, but rather because of the misalignment of the APA with respect to the two flexible joints.
This will be verified in the next sections.
\end{question}
\subsection{Effect of a misalignment in y}
Let's compute the transfer function from output DAC voltage \(V_s\) to the measured displacement by the encoder \(d_e\) for several misalignment in the \(y\) direction:
The obtained dynamics are shown in Figure \ref{fig:effect_misalignment_y}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/effect_misalignment_y.png}
\caption{\label{fig:effect_misalignment_y}Effect of a misalignement in the \(y\) direction}
\end{figure}
\begin{important}
The alignment of the APA with the flexible joints as a \textbf{huge} influence on the dynamics from actuator voltage to measured displacement by the encoder.
The misalignment in the \(y\) direction mostly influences:
\begin{itemize}
\item the presence of the flexible mode at 200Hz
\item the location of the complex conjugate zero between the first two resonances:
\begin{itemize}
\item if \(d_y < 0\): there is no zero between the two resonances and possibly not even between the second and third ones
\item if \(d_y > 0\): there is a complex conjugate zero between the first two resonances
\end{itemize}
\item the location of the high frequency complex conjugate zeros at 500Hz (secondary effect, as the axial stiffness of the joint also has large effect on the position of this zero)
\end{itemize}
\end{important}
\subsection{Effect of a misalignment in x}
Let's compute the transfer function from output DAC voltage to the measured displacement by the encoder for several misalignment in the \(x\) direction:
The obtained dynamics are shown in Figure \ref{fig:effect_misalignment_x}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/effect_misalignment_x.png}
\caption{\label{fig:effect_misalignment_x}Effect of a misalignement in the \(x\) direction}
\end{figure}
\begin{important}
The misalignment in the \(x\) direction mostly influences the presence of the flexible mode at 300Hz.
\end{important}
\subsection{Comparison with identified misalignment}
\subsection{Find the misalignment of each strut}
From the previous analysis on the effect of a \(x\) and \(y\) misalignment, it is possible to estimate the \(x,y\) misalignment of the measured struts.
The misalignment that gives the best match for the FRF are defined below.
For each misalignment, the dynamics from the DAC voltage to the encoder measurement is identified.
The results are shown in Figure \ref{fig:comp_all_struts_corrected_misalign}.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/comp_all_struts_corrected_misalign.png}
\caption{\label{fig:comp_all_struts_corrected_misalign}Comparison (model and measurements) of the FRF from DAC voltage u to measured displacement by the encoders for all the struts}
\end{figure}
\begin{important}
By tuning the misalignment of the APA with respect to the flexible joints, it is possible to obtain a good fit between the model and the measurements (Figure \ref{fig:comp_all_struts_corrected_misalign}).
If encoders are to be used when fixed on the struts, it is therefore very important to properly align the APA and the flexible joints when mounting the struts.
In the future, a ``pin'' will be used to better align the APA with the flexible joints.
We can expect the amplitude of the spurious resonances to decrease.
\end{important}
\section{Effect of flexible joint's characteristics} \section{Effect of flexible joint's characteristics}
\label{ssec:test_struts_effect_joint_stiffness} \label{ssec:test_struts_effect_joint_stiffness}
As the struts are composed of one APA and two flexible joints, it is obvious that the flexible joint characteristics will change the dynamic behavior of the struts. As the struts are composed of one APA and two flexible joints, it is obvious that the flexible joint characteristics will change the dynamic behavior of the struts.