Add missing controller definition

This commit is contained in:
Thomas Dehaeze 2025-04-15 09:52:42 +02:00
parent 6c1b878bb8
commit 9436d48cc1
4 changed files with 65 additions and 9 deletions

Binary file not shown.

View File

@ -221,6 +221,19 @@ i_iff_hpf_md = i_iff_hpf_md(end)+1;
i_iff_hpf_pz = find(opt_iff_hpf_xi_pz > 0.95*max(opt_iff_hpf_xi_pz));
i_iff_hpf_pz = i_iff_hpf_pz(end)+1;
%% Define the obtained controllers
Kiff_hpf_vc = Kiff*opt_iff_hpf_gain_vc(i_iff_hpf_vc);
Kiff_hpf_vc.InputName = {'fu', 'fv'};
Kiff_hpf_vc.OutputName = {'Fu', 'Fv'};
Kiff_hpf_md = Kiff*opt_iff_hpf_gain_md(i_iff_hpf_md);
Kiff_hpf_md.InputName = {'fu', 'fv'};
Kiff_hpf_md.OutputName = {'Fu', 'Fv'};
Kiff_hpf_pz = Kiff*opt_iff_hpf_gain_pz(i_iff_hpf_pz);
Kiff_hpf_pz.InputName = {'fu', 'fv'};
Kiff_hpf_pz.OutputName = {'Fu', 'Fv'};
%% Optimal modified IFF parameters that yields maximum simultaneous damping
figure;
yyaxis left
@ -303,9 +316,9 @@ mn = 15; % Nano-Hexapod mass [kg]
ms = 1; % Sample Mass [kg]
%% IFF Controller
Kiff_vc = 1/(s + 0.1*sqrt(1e4/(mn+ms)))*eye(2); % IFF
Kiff_md = 1/(s + 0.1*sqrt(1e6/(mn+ms)))*eye(2); % IFF
Kiff_pz = 1/(s + 0.1*sqrt(1e8/(mn+ms)))*eye(2); % IFF
Kiff_vc = 1/(s + 0.1*sqrt(1e4/(mn+ms)))*eye(2); % IFF - VC
Kiff_md = 1/(s + 0.1*sqrt(1e6/(mn+ms)))*eye(2); % IFF - MD
Kiff_pz = 1/(s + 0.1*sqrt(1e8/(mn+ms)))*eye(2); % IFF - PZ
%% General Configuration
model_config = struct();
@ -392,6 +405,19 @@ for kp_i = 1:length(kps_pz)
opt_iff_kp_gain_pz(kp_i) = g_opt;
end
%% Define the obtained controllers
Kiff_kp_vc = Kiff_vc*opt_iff_kp_gain_vc(i_kp_vc);
Kiff_kp_vc.InputName = {'fu', 'fv'};
Kiff_kp_vc.OutputName = {'Fu', 'Fv'};
Kiff_kp_md = Kiff_md*opt_iff_kp_gain_md(i_kp_md);
Kiff_kp_md.InputName = {'fu', 'fv'};
Kiff_kp_md.OutputName = {'Fu', 'Fv'};
Kiff_kp_pz = Kiff_pz*opt_iff_kp_gain_pz(i_kp_pz);
Kiff_kp_pz.InputName = {'fu', 'fv'};
Kiff_kp_pz.OutputName = {'Fu', 'Fv'};
%% Find result with wanted parallel stiffness
[~, i_kp_vc] = min(abs(kps_vc - 1e3));
[~, i_kp_md] = min(abs(kps_md - 1e4));

View File

@ -209,7 +209,7 @@ hold off;
yticks(-360:90:360);
ylim([ -200, 20]);
linkaxes([ax,ax2],'x');
linkaxes([ax1,ax2],'x');
xlim([freqs_vc(1), freqs_vc(end)]);
xticks([1e-1, 1e0, 1e1]);

View File

@ -2912,6 +2912,21 @@ i_iff_hpf_pz = find(opt_iff_hpf_xi_pz > 0.95*max(opt_iff_hpf_xi_pz));
i_iff_hpf_pz = i_iff_hpf_pz(end)+1;
#+end_src
#+begin_src matlab
%% Define the obtained controllers
Kiff_hpf_vc = Kiff*opt_iff_hpf_gain_vc(i_iff_hpf_vc);
Kiff_hpf_vc.InputName = {'fu', 'fv'};
Kiff_hpf_vc.OutputName = {'Fu', 'Fv'};
Kiff_hpf_md = Kiff*opt_iff_hpf_gain_md(i_iff_hpf_md);
Kiff_hpf_md.InputName = {'fu', 'fv'};
Kiff_hpf_md.OutputName = {'Fu', 'Fv'};
Kiff_hpf_pz = Kiff*opt_iff_hpf_gain_pz(i_iff_hpf_pz);
Kiff_hpf_pz.InputName = {'fu', 'fv'};
Kiff_hpf_pz.OutputName = {'Fu', 'Fv'};
#+end_src
#+begin_src matlab :results none
%% Optimal modified IFF parameters that yields maximum simultaneous damping
figure;
@ -3066,9 +3081,9 @@ mn = 15; % Nano-Hexapod mass [kg]
ms = 1; % Sample Mass [kg]
%% IFF Controller
Kiff_vc = 1/(s + 0.1*sqrt(1e4/(mn+ms)))*eye(2); % IFF
Kiff_md = 1/(s + 0.1*sqrt(1e6/(mn+ms)))*eye(2); % IFF
Kiff_pz = 1/(s + 0.1*sqrt(1e8/(mn+ms)))*eye(2); % IFF
Kiff_vc = 1/(s + 0.1*sqrt(1e4/(mn+ms)))*eye(2); % IFF - VC
Kiff_md = 1/(s + 0.1*sqrt(1e6/(mn+ms)))*eye(2); % IFF - MD
Kiff_pz = 1/(s + 0.1*sqrt(1e8/(mn+ms)))*eye(2); % IFF - PZ
%% General Configuration
model_config = struct();
@ -3156,6 +3171,21 @@ for kp_i = 1:length(kps_pz)
end
#+end_src
#+begin_src matlab
%% Define the obtained controllers
Kiff_kp_vc = Kiff_vc*opt_iff_kp_gain_vc(i_kp_vc);
Kiff_kp_vc.InputName = {'fu', 'fv'};
Kiff_kp_vc.OutputName = {'Fu', 'Fv'};
Kiff_kp_md = Kiff_md*opt_iff_kp_gain_md(i_kp_md);
Kiff_kp_md.InputName = {'fu', 'fv'};
Kiff_kp_md.OutputName = {'Fu', 'Fv'};
Kiff_kp_pz = Kiff_pz*opt_iff_kp_gain_pz(i_kp_pz);
Kiff_kp_pz.InputName = {'fu', 'fv'};
Kiff_kp_pz.OutputName = {'Fu', 'Fv'};
#+end_src
#+begin_src matlab
%% Find result with wanted parallel stiffness
[~, i_kp_vc] = min(abs(kps_vc - 1e3));
@ -3839,7 +3869,7 @@ hold off;
yticks(-360:90:360);
ylim([ -200, 20]);
linkaxes([ax,ax2],'x');
linkaxes([ax1,ax2],'x');
xlim([freqs_vc(1), freqs_vc(end)]);
xticks([1e-1, 1e0, 1e1]);
#+end_src