diff --git a/docs/figs/compliance_comp_pz_vc_cascade.pdf b/docs/figs/compliance_comp_pz_vc_cascade.pdf new file mode 100644 index 0000000..83464c6 Binary files /dev/null and b/docs/figs/compliance_comp_pz_vc_cascade.pdf differ diff --git a/docs/figs/compliance_comp_pz_vc_cascade.png b/docs/figs/compliance_comp_pz_vc_cascade.png new file mode 100644 index 0000000..658b3f8 Binary files /dev/null and b/docs/figs/compliance_comp_pz_vc_cascade.png differ diff --git a/org/control_voice_coil.org b/org/control_voice_coil.org index 4519726..69c9b07 100644 --- a/org/control_voice_coil.org +++ b/org/control_voice_coil.org @@ -1087,6 +1087,64 @@ Finally with the primary controller #+caption: Evolution of the NASS compliance with each control loop added ([[./figs/compliance_evolution_vc_cascade_control.png][png]], [[./figs/compliance_evolution_vc_cascade_control.pdf][pdf]]) [[file:figs/compliance_evolution_vc_cascade_control.png]] +*** Comparison with Piezo +Let's initialize a nano-hexapod with piezoelectric actuators. +#+begin_src matlab + initializeNanoHexapod('actuator', 'piezo'); +#+end_src + +We don't use any controller. +#+begin_src matlab + Kp = tf(zeros(6)); + Kl = tf(zeros(6)); + Kiff = tf(zeros(6)); +#+end_src + +#+begin_src matlab + %% Run the linearization + Gc_pz = linearize(mdl, io, 0); + Gc_pz.InputName = {'Fdx', 'Fdy', 'Fdz', 'Mdx', 'Mdy', 'Mdz'}; + Gc_pz.OutputName = {'Ex', 'Ey', 'Ez', 'Erx', 'Ery', 'Erz'}; +#+end_src + +#+begin_src matlab :exports none + freqs = logspace(-1, 3, 1000); + + figure; + + ax1 = subplot(1, 2, 1); + hold on; + plot(freqs, abs(squeeze(freqresp(Gc_pri(1, 1), freqs, 'Hz'))), 'DisplayName', 'PRI'); + plot(freqs, abs(squeeze(freqresp(Gc_pz( 1, 1), freqs, 'Hz'))), 'DisplayName', 'PZ - OL'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Compliance [m/N]'); + xlabel('Frequency [Hz]'); + legend('location', 'northeast'); + + ax2 = subplot(1, 2, 2); + hold on; + plot(freqs, abs(squeeze(freqresp(Gc_pri(4, 4), freqs, 'Hz'))), 'DisplayName', 'PRI'); + plot(freqs, abs(squeeze(freqresp(Gc_pz( 4, 4), freqs, 'Hz'))), 'DisplayName', 'PZ - OL'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Compliance [$\frac{rad}{Nm}$]'); + xlabel('Frequency [Hz]'); + legend('location', 'northeast'); + + linkaxes([ax1,ax2],'x'); +#+end_src + +#+header: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/compliance_comp_pz_vc_cascade.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") +<> +#+end_src + +#+name: fig:compliance_comp_pz_vc_cascade +#+caption: Comparison of the compliance using the open-loop piezo-nano hexapod and the voice coil nano-hexapod with the cascade control topology ([[./figs/compliance_comp_pz_vc_cascade.png][png]], [[./figs/compliance_comp_pz_vc_cascade.pdf][pdf]]) +[[file:figs/compliance_comp_pz_vc_cascade.png]] + + ** Robustness to Payload Variability *** Initialization Let's change the payload mass, and see if the controller design for a payload mass of 1 still gives good performance.