diff --git a/matlab/mat/nass_controllers.mat b/matlab/mat/nass_controllers.mat index 5f6576f..ca9acc3 100644 Binary files a/matlab/mat/nass_controllers.mat and b/matlab/mat/nass_controllers.mat differ diff --git a/matlab/rotating_7_nano_hexapod.m b/matlab/rotating_7_nano_hexapod.m index a406ac2..e9406cc 100644 --- a/matlab/rotating_7_nano_hexapod.m +++ b/matlab/rotating_7_nano_hexapod.m @@ -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)); diff --git a/matlab/rotating_8_nass.m b/matlab/rotating_8_nass.m index 12dfe9f..6306e2b 100644 --- a/matlab/rotating_8_nass.m +++ b/matlab/rotating_8_nass.m @@ -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]); diff --git a/nass-rotating-3dof-model.org b/nass-rotating-3dof-model.org index cf03555..5d6dc3f 100644 --- a/nass-rotating-3dof-model.org +++ b/nass-rotating-3dof-model.org @@ -2853,7 +2853,7 @@ exportFig('figs/rotating_nano_hexapod_dynamics_pz.pdf', 'width', 'third', 'heigh #+end_subfigure #+end_figure -** Optimal IFF with a High-Pass Filter +** Optimal IFF with a High-Pass Filter Integral Force Feedback with an added high-pass filter is applied to the three nano-hexapods. First, the parameters ($\omega_i$ and $g$) of the IFF controller that yield the best simultaneous damping are determined from Figure ref:fig:rotating_iff_hpf_nass_optimal_gain. The IFF parameters are chosen as follows: @@ -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