@@ -23,6 +23,20 @@ colors = colororder;
freqs = logspace ( 0 , 3 , 1000 ) ;
% HAC Plant
% < < ssec : nass_hac _plant > >
% The plant dynamics from force inputs $ \ bm { f } $ to the strut errors $ \ bm { \ epsilon } _ { \ mathcal { L } } $ were first extracted from the multi - body model without implementation of the decentralized IFF .
% The influence of spindle rotation on plant dynamics was investigated , with results presented in Figure ref : fig : nass_undamped _plant _effect _Wz .
% While rotational motion introduces coupling effects at low frequencies , these remain minimal at operational velocities , owing to the high stiffness characteristics of the nano - hexapod assembly .
% Payload mass emerged as a significant parameter affecting system behavior , as illustrated in Figure ref : fig : nass_undamped _plant _effect _mass .
% As expected , increasing payload mass was found to decrease resonance frequencies while amplifying coupling at low frequency .
% These mass - dependent dynamic changes present considerable challenges for control system design , particularly for configurations with high payload masses .
% Additional operational parameters were systematically evaluated , including the $ R_y $ tilt angle , $ R_z $ spindle position , and micro - hexapod position .
% These factors were found to exert negligible influence on the plant dynamics , attributable to the effective mechanical decoupling achieved between the plant and micro - station dynamics .
% This decoupling characteristic ensures consistent performance across various operational configurations .
% This also validates the developed control kinematics .
% % Identify the IFF plant dynamics using the Simscape model
@@ -49,7 +63,7 @@ clear io; io_i = 1;
io ( io_i ) = linio ( [ mdl , ' / Controller ' ] , 1 , ' input ' ) ; io_i = io_i + 1 ; % Actuator Inputs [ N ]
io ( io_i ) = linio ( [ mdl , ' / Tracking Error ' ] , 1 , ' openoutput ' , [ ] , ' EdL ' ) ; io_i = io_i + 1 ; % Strut errors [ m ]
% % Identify HAC Plant without using IFF
% Identify HAC Plant without using IFF
initializeSample ( ' type ' , ' cylindrical ' , ' m ' , 1 ) ;
G_m1 = linearize ( mdl , io ) ;
G_m1 . InputName = { ' f1 ' , ' f2 ' , ' f3 ' , ' f4 ' , ' f5 ' , ' f6 ' } ;
@@ -65,7 +79,7 @@ G_m50 = linearize(mdl, io);
G_m50 . InputName = { ' f1 ' , ' f2 ' , ' f3 ' , ' f4 ' , ' f5 ' , ' f6 ' } ;
G_m50 . OutputName = { ' l1 ' , ' l2 ' , ' l3 ' , ' l4 ' , ' l5 ' , ' l6 ' } ;
% % Effect of Rotation
% Effect of Rotation
initializeSample ( ' type ' , ' cylindrical ' , ' m ' , 1 ) ;
initializeReferences ( . . .
' Rz_type ' , ' rotating ' , . . .
@@ -75,19 +89,7 @@ G_m1_Rz = linearize(mdl, io, 0.1);
G_m1 _Rz . InputName = { ' f1 ' , ' f2 ' , ' f3 ' , ' f4 ' , ' f5 ' , ' f6 ' } ;
G_m1 _Rz . OutputName = { ' l1 ' , ' l2 ' , ' l3 ' , ' l4 ' , ' l5 ' , ' l6 ' } ;
% - Effect of rotation : ref : fig : nass_undamped _plant _effect _Wz
% Add some coupling at low frequency , but still small at the considered velocity .
% This is thanks to the relatively stiff nano - hexapod ( CF rotating model )
% - Effect of payload mass :
% Decrease resonance frequencies
% Increase coupling : ref : fig : nass_undamped _plant _effect _mass
% = > control challenge for high payload masses
% - Other effects such as : Ry tilt angle , Rz spindle position , micro - hexapod position are found to have negligible effect on the plant dynamics .
% This is thanks to the fact the the plant dynamics is well decoupled from the micro - station dynamics .
% % Effect of rotation on the HAC plant
figure ;
tiledlayout ( 3 , 1 , ' TileSpacing ' , ' Compact ' , ' Padding ' , ' None ' ) ;
@@ -137,6 +139,7 @@ yticks([-180:45:180]);
linkaxes ( [ ax1 , ax2 ] , ' x ' ) ;
xlim ( [ freqs ( 1 ) , freqs ( end ) ] ) ;
% % Effect of payload ' s mass on the HAC plant
figure ;
tiledlayout ( 3 , 1 , ' TileSpacing ' , ' Compact ' , ' Padding ' , ' None ' ) ;
@@ -193,7 +196,7 @@ xlim([freqs(1), freqs(end)]);
% # + name : fig : nass_undamped _plant _effect
% # + caption : Effect of the Spindle ' s rotational velocity on the positioning plant ( \ subref { fig : nass_undamped _plant _effect _Wz } ) and effect of the payload ' s mass on the positioning plant ( \ subref { fig : nass_undamped _plant _effect _mass } )
% # + attr_latex : : options [ htbp ]
% # + attr_latex : : options [ h! tbp ]
% # + begin_figure
% # + attr_latex : : caption \ subcaption { \ label { fig : nass_undamped _plant _effect _Wz } Effect of rotational velocity $ \ Omega_z $ }
% # + attr_latex : : options { 0.48 \ textwidth }
@@ -209,16 +212,19 @@ xlim([freqs(1), freqs(end)]);
% # + end_subfigure
% # + end_figure
% The Decentralized Integral Force Feedback was implemented in the multi - body model , and transfer functions from force inputs $ \ bm { f } ^ \ prime $ of the damped plant to the strut errors $ \ bm { \ epsilon } _ { \ mathcal { L } } $ were extracted from this model .
% - E ffect of IFF on the plant ref : fig : nass_comp _undamped _damped _plant _m1
% Modes are well damped
% Small coupling increase at low frequency
% - Benefits of using IFF ref : fig : nass_hac _plants
% w ith added damping , th e set of plant s to be controlled ( with payloads from 1 kg to 50 kg ) is mo re easily controlled .
% Between 10 and 50 Hz , th e plant dynamics does not vary a lot with the frequency , whereas without active damping , it woul d be impossible to design a robust controller with bandwidth above 10 Hz that i s robust to the change of payload
% The e ffectiveness of IFF implementation was first evaluated with a $ 1 \ , \ text { kg } $ payload , as demonstrated in Figure ref : fig : nass_comp _undamped _damped _plant _m1 .
% The results indicate successful damping of the nano - hexapod resonance modes , though a minor increase in low - frequency coupling was observed .
% This trade - off was considered acceptable given the overall improvement in system behavior .
% The benef its of IFF implementation wer e further assessed acros s the full range of payload configurations , with results presented in Figu re ref : fig : nass_hac _plants .
% For all tested payloads ( $ 1 \ , \ text { kg } $ , $ 25 \ , \ text { kg } $ an d $ 50 \ , \ text { kg } $ ) , decentralized IFF significantly damped the nano - hexapod mode s and therefore simplified the system dynamics .
% More importantly , is the fact that in the vicinity of the wanted high authority control bandwidth ( i . e . between $ 10 \ , \ text { Hz } $ and $ 50 \ , \ text { Hz } $ ) , the damped dynamics ( shown in red ) exhibited minimal gain and phase variations with frequency .
% For the undamped system ( shown in blue ) , achieving robust control with bandwidth above 10 Hz while maintaining stability across different payload masses would be practically unfeasible .
% % Identify HAC Plant without using IFF
% % Identify HAC Plant with IFF
initializeReferences ( ) ; % No Spindle Rotation
initializeController ( ' type ' , ' iff ' ) ; % Implemented IFF controller
load ( ' nass_K _iff . mat ' , ' Kiff ' ) ; % Load designed IFF controller
@@ -246,15 +252,16 @@ if not(isstable(G_hac_m1) && isstable(G_hac_m25) && isstable(G_hac_m50))
warning ( ' One of HAC plant is not stable ' )
end
% % Comparison of the OL plant and the plant with IFF - 1 kg payload
figure ;
tiledlayout ( 3 , 1 , ' TileSpacing ' , ' Compact ' , ' Padding ' , ' None ' ) ;
ax1 = nexttile ( [ 2 , 1 ] ) ;
hold on ;
plot ( freqs , abs ( squeeze ( freqresp ( G_m1 ( 1 , 1 ) , freqs , ' Hz ' ) ) ) , ' color ' , colors ( 1 , : ) , . . .
' DisplayName ' , ' $ \ epsilon_ { \ mathcal { L } i } / f_i $ , OL ' )
' DisplayName ' , ' $ \ epsilon_ { \ mathcal { L } i } / f_i $ - OL ' )
plot ( freqs , abs ( squeeze ( freqresp ( G_hac _m1 ( 1 , 1 ) , freqs , ' Hz ' ) ) ) , ' color ' , colors ( 2 , : ) , . . .
' DisplayName ' , ' $ \ epsilon_ { \ mathcal { L } i } / f_i $ , with IFF ' )
' DisplayName ' , ' $ \ epsilon_ { \ mathcal { L } i } / f_i $ - IFF ' )
for i = 1 : 5
for j = i + 1 : 6
plot ( freqs , abs ( squeeze ( freqresp ( G_m1 ( i , j ) , freqs , ' Hz ' ) ) ) , ' color ' , [ colors ( 1 , : ) , 0.2 ] , . . .
@@ -272,7 +279,7 @@ end
hold off ;
set ( gca , ' XScale ' , ' log ' ) ; set ( gca , ' YScale ' , ' log ' ) ;
ylabel ( ' Amplitude [ m / N ] ' ) ; set ( gca , ' XTickLabel ' , [ ] ) ;
ylim ( [ 1 e -10 , 2 e -5 ] ) ;
ylim ( [ 1 e -10 , 5 e -5 ] ) ;
leg = legend ( ' location ' , ' southeast ' , ' FontSize ' , 8 , ' NumColumns ' , 1 ) ;
leg . ItemTokenSize ( 1 ) = 15 ;
@@ -297,8 +304,8 @@ tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
ax1 = nexttile ( [ 2 , 1 ] ) ;
hold on ;
plot ( freqs , abs ( squeeze ( freqresp ( G_m1 ( 1 , 1 ) , freqs , ' Hz ' ) ) ) , ' color ' , [ colors ( 1 , : ) , 0.5 ] , ' DisplayName ' , ' Undamped - $ \ epsilon \ mathcal { L } _i / f_i $ ' ) ;
plot ( freqs , abs ( squeeze ( freqresp ( G_hac _m1 ( 1 , 1 ) , freqs , ' Hz ' ) ) ) , ' color ' , [ colors ( 2 , : ) , 0.5 ] , ' DisplayName ' , ' Damped - $ \ epsilon \ mathcal { L } _i / f_i ^ \ prime $ ' ) ;
plot ( freqs , abs ( squeeze ( freqresp ( G_m1 ( 1 , 1 ) , freqs , ' Hz ' ) ) ) , ' color ' , [ colors ( 1 , : ) , 0.5 ] , ' DisplayName ' , ' $ \ epsilon \ mathcal { L } _i / f_i $ - OL ' ) ;
plot ( freqs , abs ( squeeze ( freqresp ( G_hac _m1 ( 1 , 1 ) , freqs , ' Hz ' ) ) ) , ' color ' , [ colors ( 2 , : ) , 0.5 ] , ' DisplayName ' , ' $ \ epsilon \ mathcal { L } _i / f_i ^ \ prime $ - IFF ' ) ;
for i = 1 : 6
plot ( freqs , abs ( squeeze ( freqresp ( G_m1 ( i , i ) , freqs , ' Hz ' ) ) ) , ' color ' , [ colors ( 1 , : ) , 0.5 ] , ' HandleVisibility ' , ' off ' ) ;
plot ( freqs , abs ( squeeze ( freqresp ( G_m25 ( i , i ) , freqs , ' Hz ' ) ) ) , ' color ' , [ colors ( 1 , : ) , 0.5 ] , ' HandleVisibility ' , ' off ' ) ;
@@ -314,7 +321,7 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel ( ' Amplitude [ m / N ] ' ) ; set ( gca , ' XTickLabel ' , [ ] ) ;
leg = legend ( ' location ' , ' southwest ' , ' FontSize ' , 8 , ' NumColumns ' , 1 ) ;
leg . ItemTokenSize ( 1 ) = 15 ;
% ylim ( [ 1 e -8 , 1 e -4 ] ) ;
ylim ( [ 1 e -10 , 5 e -5 ] ) ;
ax2 = nexttile ;
hold on ;
@@ -338,10 +345,32 @@ yticks([-180:45:180]);
linkaxes ( [ ax1 , ax2 ] , ' x ' ) ;
% xlim ( [ 1 , 5 e2 ] ) ;
% Effect of micro - station compliance
% Micro - Station complex dynamics has almost no effect on the plant dynamics ( Figure ref : fig : nass_effect _ustation _compliance ) :
% - adds some alternating poles and zeros above 100 Hz , which should not be an issue for control
% # + name : fig : nass_hac _plant
% # + caption : Effect of Decentralized Integral Force Feedback on the positioning plant for a $ 1 \ , \ text { kg } $ sample mass ( \ subref { fig : nass_undamped _plant _effect _Wz } ) . Direct terms of the positioning plants for all considered payloads are shown in ( \ subref { fig : nass_undamped _plant _effect _mass } ) .
% # + attr_latex : : options [ h ! tbp ]
% # + begin_figure
% # + attr_latex : : caption \ subcaption { \ label { fig : nass_comp _undamped _damped _plant _m1 } Effect of IFF - $ m = 1 \ , \ text { kg } $ }
% # + attr_latex : : options { 0.48 \ textwidth }
% # + begin_subfigure
% # + attr_latex : : width 0.95 \ linewidth
% [ [ file : figs / nass_comp _undamped _damped _plant _m1 . png ] ]
% # + end_subfigure
% # + attr_latex : : caption \ subcaption { \ label { fig : nass_hac _plants } Effect of IFF on the set of plants to control }
% # + attr_latex : : options { 0.48 \ textwidth }
% # + begin_subfigure
% # + attr_latex : : width 0.95 \ linewidth
% [ [ file : figs / nass_hac _plants . png ] ]
% # + end_subfigure
% # + end_figure
% The coupling between the nano - hexapod and micro - station was evaluated through comparative analysis of plant dynamics under two mounting conditions .
% In the first configuration , the nano - hexapod was mounted on an ideally rigid support , while in the second configuration , it was installed on the micro - station with finite compliance .
% As illustrated in Figure ref : fig : nass_effect _ustation _compliance , the complex dynamics of the micro - station were found to have little impact on the plant dynamics .
% The only observable difference manifests as alternating poles and zeros above 100 Hz , a frequency range sufficiently beyond the control bandwidth to avoid interference with system performance .
% This finding confirms effective dynamic decoupling between the nano - hexapod and the supporting micro - station structure .
% % Identify plant with "rigid" micro - station
@@ -374,9 +403,9 @@ tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile ( [ 2 , 1 ] ) ;
hold on ;
plot ( freqs , abs ( squeeze ( freqresp ( G_m25 _rigid ( 1 , 1 ) , freqs , ' Hz ' ) ) ) , ' color ' , colors ( 1 , : ) , . . .
' DisplayName ' , ' $ \ epsilon_ { \ mathcal { L } i } / f_i $ , OL ' )
' DisplayName ' , ' $ \ epsilon_ { \ mathcal { L } i } / f_i $ - Rigid support ' )
plot ( freqs , abs ( squeeze ( freqresp ( G_m25 ( 1 , 1 ) , freqs , ' Hz ' ) ) ) , ' color ' , colors ( 2 , : ) , . . .
' DisplayName ' , ' $ \ epsilon_ { \ mathcal { L } i } / f_i $ , with IFF ' )
' DisplayName ' , ' $ \ epsilon_ { \ mathcal { L } i } / f_i $ - $ \ mu $ - station support ' )
for i = 1 : 5
for j = i + 1 : 6
plot ( freqs , abs ( squeeze ( freqresp ( G_m25 _rigid ( i , j ) , freqs , ' Hz ' ) ) ) , ' color ' , [ colors ( 1 , : ) , 0.2 ] , . . .
@@ -394,7 +423,7 @@ end
hold off ;
set ( gca , ' XScale ' , ' log ' ) ; set ( gca , ' YScale ' , ' log ' ) ;
ylabel ( ' Amplitude [ m / N ] ' ) ; set ( gca , ' XTickLabel ' , [ ] ) ;
ylim ( [ 1 e -10 , 2 e -5 ] ) ;
ylim ( [ 1 e -10 , 5 e -5 ] ) ;
leg = legend ( ' location ' , ' southeast ' , ' FontSize ' , 8 , ' NumColumns ' , 1 ) ;
leg . ItemTokenSize ( 1 ) = 15 ;
@@ -413,23 +442,21 @@ yticks([-180:45:180]);
linkaxes ( [ ax1 , ax2 ] , ' x ' ) ;
xlim ( [ freqs ( 1 ) , freqs ( end ) ] ) ;
% Higher or lower n ano- h exapod s tiffness?
% Effect of N ano- H exapod S tiffness on System Dynamics
% < < ssec : nass_hac _stiffness > >
% * Goal * : confirm the analysis with simpler models ( uniaxial and 3 DoF ) that a nano - hexapod stiffness of $ \ approx 1 \ , N / \ mu m $ should give better performances than a very stiff or very soft nano - hexapod .
% The influence of nano - hexapod stiffness was investigated to validate earlier findings from simplified uniaxial and three - degree - of - freedom ( 3 DoF ) models .
% These models suggested that a moderate stiffness of approximately $ 1 \ , N / \ mu m $ would provide better performance compared to either very stiff or very soft configurations .
% - * S tiff nano - hexapod * :
% uniaxial model : high nano - hexapod stiffness i nduce coupling between th e n ano - hexapod and the micro - station dynamics .
% considering the complex dynamics of the micro - station as shown by the modal analysis , that would result in a complex system to control
% To show that , a nano - hexapod with actuator stiffness equal to 100 N / um is initialized , payload of 25 kg .
% The dynamics from $ \ bm { f } $ to $ \ bm { \ epsilon } _ { \ mathcal { L } } $ is identified and compared to the case where the micro - station is infinitely rigid ( figure ref : fig : nass_stiff _nano _hexapod _coupling _ustation ) :
% - Coupling induced by the micro - station : much more complex and difficult to model / predict
% - Similar to w hat was predicted using the uniaxial model
% - * Soft nano - hexapod * :
% N ano - hexapod with stiffness of 0.01 N / um is initialized , payload of 25 kg .
% Dynamics is identified with no spindle rotation , and with spindle rotation of 36 deg / s and 360 deg / s ( Figure ref : fig : nass_soft _nano _hexapod _effect _Wz )
% - Rotation as huge effect on the dynamics : unstable for high rotational velocities , added coupling due to gyroscopic effects , and change of resonance frequencies as a function of the rotational velocity
% - Simple 3 DoF rotating model is helpful to understand the complex effect of the rotation = > similar conclusion
% - Say that controlling the frame of the struts is not adapted with a soft nano - hexapod , but we should rather control in the frame matching the center of mass of the payload , but we would still obtain large coupling and change of dynamics due to gyroscopic effects .
% For the s tiff nano - hexapod analysis , a system with actuator stiffness of $ 100 \ , N / \ mu m $ was simulated with a $ 25 \ , \ text { kg } $ payload .
% The transfer f unction from $ \ bm { f } $ to $ \ bm { \ epsilon } _ { \ mathcal { L } } $ was evaluated u nder two conditions : mounting on an infinitely rigid bas e and mounting on the micro - station .
% As shown in Figure ref : fig : nass_stiff _nano _hexapod _coupling _ustation , significant coupling was observed between the nano - hexapod and micro - station dynamics .
% This coupling introduces complex behavior that proves difficult to model and predict accurately , corroborating the predictions of the simplified uniaxial model .
% The soft nano - hexapod configuration was evaluated using a stiffness of $ 0.01 \ , N / \ mu m $ with a $ 25 \ , \ text { kg } $ payload .
% Dynamic response was c haracterized at three rotational velocities : 0 , 36 , and 360 deg / s .
% Figure ref : fig : nass_soft _nano _hexapod _effect _Wz demonstrates that rotation substantially impacts system dynamics , manifesting as instability at high rotational velocities , increased coupling from gyroscopic effects , and rotation - dependent resonance frequencies .
% The current approach of controlling the motion in the strut frame proves inadequate for soft n ano - hexapods ; but even shifting control to the payload ' s center of mass frame would not overcome the substantial coupling and dynamic variations induced by gyroscopic effects .
% % Identify Dynamics with a Stiff nano - hexapod ( 100 N / um )
@@ -461,7 +488,7 @@ G_m25_pz = linearize(mdl, io);
G_m25 _pz . InputName = { ' f1 ' , ' f2 ' , ' f3 ' , ' f4 ' , ' f5 ' , ' f6 ' } ;
G_m25 _pz . OutputName = { ' l1 ' , ' l2 ' , ' l3 ' , ' l4 ' , ' l5 ' , ' l6 ' } ;
% % Compare with Nano - Hexapod alone ( rigid micro - station )
% Compare with Nano - Hexapod alone ( rigid micro - station )
initializeGround ( ' type ' , ' rigid ' ) ;
initializeGranite ( ' type ' , ' rigid ' ) ;
initializeTy ( ' type ' , ' rigid ' ) ;
@@ -625,12 +652,10 @@ linkaxes([ax1,ax2],'x');
xlim ( [ f ( 1 ) , f ( end ) ] ) ;
% Controller design
% < < ssec : nass_hac _controller > >
% In this section , a high authority controller is design such that :
% - it is robust to the change of payload mass ( i . e . is should be stable f or all th e damped plants of Figure ref : fig : nass_hac _plants )
% - it has reasonably high bandwidth to give good performances ( here 10 Hz )
% eqref : eq : nass_robust _hac
% A high authority controller was designed to meet two key requirements : stable for all payload masses ( i . e . for all the damped plants of Figure ref : fig : nass_hac _plants ) , and achievement of sufficient bandwidth ( targeted at 10 Hz ) for high performance operation .
% The controller structure is defined in Equation eqref : eq : nass_robust _hac , incorporating an integrator term for low frequency performance , a lead compensat or for phas e margin improvement , and a low - pass filter for robustness against high frequency modes .
% \ begin { equation } \ label { eq : nass_robust _hac }
% K_ { \ text { HAC } } ( s ) = g_0 \ cdot \ underbrace { \ frac { \ omega_c } { s } } _ { \ text { int } } \ cdot \ underbrace { \ frac { 1 } { \ sqrt { \ alpha } } \ frac { 1 + \ frac { s } { \ omega_c / \ sqrt { \ alpha } } } { 1 + \ frac { s } { \ omega_c \ sqrt { \ alpha } } } } _ { \ text { lead } } \ cdot \ underbrace { \ frac { 1 } { 1 + \ frac { s } { \ omega_0 } } } _ { \ text { LPF } } , \ quad \ left ( \ omega_c = 2 \ pi10 \ , \ text { rad / s } , \ \ alpha = 2 , \ \ omega_0 = 2 \ pi80 \ , \ text { rad / s } \ right )
@@ -666,10 +691,9 @@ save('./mat/nass_K_hac.mat', 'Khac');
% - "Decentraliz ed" Loop Gain :
% Bandwid th around 10 Hz
% - C haracteristic L oci:
% Stable for all payloads with acceptable stability margins
% The controller ' s performance was evaluat ed through two complementary analyses .
% First , the decentralized loop gain , shown in Figure ref : fig : nass_hac _loop _gain , confirms the achievement of the desired 10 Hz bandwidth .
% Second , the c haracteristic l oci analysis presented in Figure ref : fig : nass_hac _loci demonstrates robustness for all payload masses , with adequate stability margins maintained throughout the operating envelope .
% % "Diagonal" loop gain for the High Authority Controller
@@ -782,144 +806,22 @@ xlim([-1.8, 0.2]); ylim([-1, 1]);
leg = legend ( ' location ' , ' northeast ' , ' FontSize ' , 8 , ' NumColumns ' , 1 ) ;
leg . ItemTokenSize ( 1 ) = 15 ;
% TODO Sensitivity to disturbances : noexport :
% - Compute transfer functions from spindle vertical error to sample vertical error with HAC - IFF
% Compare without the NASS , and with just IFF
% - Same for horizontal
% Initialize each Simscape model elements
initializeGround ( ) ;
initializeGranite ( ) ;
initializeTy ( ) ;
initializeRy ( ) ;
initializeRz ( ) ;
initializeMicroHexapod ( ) ;
initializeSimplifiedNanoHexapod ( ) ;
initializeSample ( ' type ' , ' cylindrical ' , ' m ' , 1 ) ;
% Initial Simscape Configuration
initializeSimscapeConfiguration ( ' gravity ' , false ) ;
initializeDisturbances ( ' enable ' , false ) ;
initializeLoggingConfiguration ( ' log ' , ' none ' ) ;
initializeController ( ' type ' , ' open - loop ' ) ;
initializeReferences ( ) ;
% Input / Output definition
clear io ; io_i = 1 ;
io ( io_i ) = linio ( [ mdl , ' / Disturbances ' ] , 1 , ' openinput ' , [ ] , ' Frz_y ' ) ; io_i = io_i + 1 ; % Spindle Lateral Vibration [ N ]
io ( io_i ) = linio ( [ mdl , ' / Disturbances ' ] , 1 , ' openinput ' , [ ] , ' Frz_z ' ) ; io_i = io_i + 1 ; % Spindle Vertical Vibration [ N ]
io ( io_i ) = linio ( [ mdl , ' / Disturbances ' ] , 1 , ' openinput ' , [ ] , ' Fdy_z ' ) ; io_i = io_i + 1 ; % Vertical Ground Motion [ m ]
io ( io_i ) = linio ( [ mdl , ' / Disturbances ' ] , 1 , ' openinput ' , [ ] , ' Dwy ' ) ; io_i = io_i + 1 ; % Vertical Ground Motion [ m ]
io ( io_i ) = linio ( [ mdl , ' / Disturbances ' ] , 1 , ' openinput ' , [ ] , ' Dwz ' ) ; io_i = io_i + 1 ; % Vertical Ground Motion [ m ]
io ( io_i ) = linio ( [ mdl , ' / NASS ' ] , 2 , ' output ' , [ ] , ' y ' ) ; io_i = io_i + 1 ; % Lateral Displacement [ m ]
io ( io_i ) = linio ( [ mdl , ' / NASS ' ] , 2 , ' output ' , [ ] , ' z ' ) ; io_i = io_i + 1 ; % Vertical Displacement [ m ]
Gd_ol = linearize ( mdl , io ) ;
Gd_ol . InputName = { ' Frz_y ' , ' Frz_z ' , ' Fdy_z ' , ' Dwy ' , ' Dwz ' } ;
Gd_ol . OutputName = { ' Dy ' , ' Dz ' } ;
initializeController ( ' type ' , ' iff ' ) ; % Implemented IFF controller
load ( ' nass_K _iff . mat ' , ' Kiff ' ) ; % Load designed IFF controller
Gd_iff = linearize ( mdl , io ) ;
Gd_iff . InputName = { ' Frz_y ' , ' Frz_z ' , ' Fdy_z ' , ' Dwy ' , ' Dwz ' } ;
Gd_iff . OutputName = { ' Dy ' , ' Dz ' } ;
initializeController ( ' type ' , ' hac - iff ' ) ; % Implemented IFF controller
load ( ' nass_K _hac . mat ' , ' Khac ' ) ; % Load designed HAC controller
Gd_hac _iff = linearize ( mdl , io ) ;
Gd_hac _iff . InputName = { ' Frz_y ' , ' Frz_z ' , ' Fdy_z ' , ' Dwy ' , ' Dwz ' } ;
Gd_hac _iff . OutputName = { ' Dy ' , ' Dz ' } ;
dist = load ( ' ustation_disturbance _psd . mat ' ) ;
% Spindle , lateral :
figure ;
hold on ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_ol ( ' Dy ' , ' Frz_y ' ) , freqs , ' Hz ' ) ) ) ) ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_iff ( ' Dy ' , ' Frz_y ' ) , freqs , ' Hz ' ) ) ) ) ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_hac _iff ( ' Dy ' , ' Frz_y ' ) , freqs , ' Hz ' ) ) ) ) ;
hold off ;
set ( gca , ' XScale ' , ' log ' ) ; set ( gca , ' YScale ' , ' log ' ) ;
ylabel ( ' Amplitude $ D_z / F_ { R_z , z } $ [ m / N ] ' ) ; xlabel ( ' Frequency [ Hz ] ' ) ;
xticks ( [ 1 e0 , 1 e1 , 1 e2 ] ) ;
xlim ( [ 1 , 500 ] ) ;
% Spindle , vertical :
freqs = logspace ( -1 , 3 , 1000 ) ;
figure ;
hold on ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_ol ( ' Dz ' , ' Frz_z ' ) , freqs , ' Hz ' ) ) ) ) ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_iff ( ' Dz ' , ' Frz_z ' ) , freqs , ' Hz ' ) ) ) ) ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_hac _iff ( ' Dz ' , ' Frz_z ' ) , freqs , ' Hz ' ) ) ) ) ;
hold off ;
set ( gca , ' XScale ' , ' log ' ) ; set ( gca , ' YScale ' , ' log ' ) ;
ylabel ( ' Amplitude $ D_z / F_ { R_z , z } $ [ m / N ] ' ) ; xlabel ( ' Frequency [ Hz ] ' ) ;
% Ground motion , vertical :
freqs = logspace ( -1 , 3 , 1000 ) ;
figure ;
hold on ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_ol ( ' Dz ' , ' Dwz ' ) , freqs , ' Hz ' ) ) ) ) ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_iff ( ' Dz ' , ' Dwz ' ) , freqs , ' Hz ' ) ) ) ) ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_hac _iff ( ' Dz ' , ' Dwz ' ) , freqs , ' Hz ' ) ) ) ) ;
hold off ;
set ( gca , ' XScale ' , ' log ' ) ; set ( gca , ' YScale ' , ' log ' ) ;
ylabel ( ' Amplitude $ D_z / F_ { R_z , z } $ [ m / N ] ' ) ; xlabel ( ' Frequency [ Hz ] ' ) ;
xticks ( [ 1 e0 , 1 e1 , 1 e2 ] ) ;
% xlim ( [ 1 , 500 ] ) ;
% Ground motion , lateral :
figure ;
hold on ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_ol ( ' Dy ' , ' Dwy ' ) , freqs , ' Hz ' ) ) ) ) ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_iff ( ' Dy ' , ' Dwy ' ) , freqs , ' Hz ' ) ) ) ) ;
plot ( freqs , abs ( squeeze ( freqresp ( Gd_hac _iff ( ' Dy ' , ' Dwy ' ) , freqs , ' Hz ' ) ) ) ) ;
hold off ;
set ( gca , ' XScale ' , ' log ' ) ; set ( gca , ' YScale ' , ' log ' ) ;
ylabel ( ' Amplitude $ D_y / F_ { R_z , z } $ [ m / N ] ' ) ; xlabel ( ' Frequency [ Hz ] ' ) ;
xticks ( [ 1 e0 , 1 e1 , 1 e2 ] ) ;
xlim ( [ 1 , 500 ] ) ;
% Noise Budget :
figure ;
hold on ;
plot ( dist . gm_dist . f , sqrt ( flip ( - cumtrapz ( flip ( dist . gm_dist . f ) , flip ( dist . gm_dist . pxx_y . * abs ( squeeze ( freqresp ( Gd_ol ( ' Dy ' , ' Dwy ' ) , dist . gm_dist . f , ' Hz ' ) ) ) . ^ 2 ) ) ) ) ) ;
plot ( dist . gm_dist . f , sqrt ( flip ( - cumtrapz ( flip ( dist . gm_dist . f ) , flip ( dist . gm_dist . pxx_y . * abs ( squeeze ( freqresp ( Gd_iff ( ' Dy ' , ' Dwy ' ) , dist . gm_dist . f , ' Hz ' ) ) ) . ^ 2 ) ) ) ) ) ;
hold off ;
set ( gca , ' XScale ' , ' log ' ) ; set ( gca , ' YScale ' , ' log ' ) ;
ylabel ( ' ASD [ m / sqrt ( Hz ) ] ' ) ; xlabel ( ' Frequency [ Hz ] ' ) ;
xticks ( [ 1 e0 , 1 e1 , 1 e2 ] ) ;
xlim ( [ 1 , 500 ] ) ;
% Tomography experiment
% < < ssec : nass_hac _tomography > >
% - Va lid ation of concept with tomography sca ns at the highest rotational velocity of $ \ Omega_z = 360 \ , \ text { deg / s } $
% - Compare obtained results wi th the smallest beam size that is expected with future beamline upgrade : 200 nm ( horizontal size ) x 100 nm ( vertical size )
% - Take into account the two main sources of disturbances : ground motion , spindle vibrations
% Other noise sources are not taken into account here as they will be optimized latter ( detail design phase ) : measurement noise , electrical noise for DAC and voltage amplifiers , . . .
% The Nano Active Stabi liz ation System concept was validated through time - domain simulatio ns of scientific experiments , with particular focus on tomography scanning due to its demanding performance requirements .
% Simulations were conducted at the maximum operational rotational velocity of $ \ Omega_z = 360 \ , \ text { deg / s } $ to evaluate system performance under the most challenging conditions .
% The open - loop error s and t he clo sed- loop errors for the tomography scan wit h the light sample $ 1 \ , kg $ are shown in Figure ref : fig : nass_tomo _1kg _60rpm .
% Performance metric s were establis hed ba sed on anticipated future beamline specifications , whic h specify a beam size of 200 nm ( horizontal ) × 100 nm ( vertical ) .
% The primary requirement stipulates that the point of interest must remain within these beam dimensions throughout operation .
% The simulation incorporated two principal disturbance sources : ground motion and spindle vibrations .
% Additional noise sources , including measurement noise and electrical noise from DAC and voltage amplifiers , were not included in this analysis as these parameters will be optimized during the detailed design phase .
% Figure ref : fig : nass_tomo _1kg _60rpm presents a comparative analysis of positioning errors under both open - loop and closed - loop conditions for a lightweight sample configuration ( 1 kg ) .
% The results demonstrate the system ' s capability to maintain position within the specified beam dimensions , validating the fundamental concept of the stabilization system .
% % Simulation of tomography experiments
% Sample is not centered with the rotation axis
% This is done by offsetfing the micro - hexapod by 0.9 um
P_micro _hexapod = [ 0.9 e -6 ; 0 ; 0 ] ; % [ m ]
@@ -980,16 +882,6 @@ initializeSample('type', 'cylindrical', 'm', 50);
sim ( mdl ) ;
exp_tomo _cl _m50 = simout ;
% Slower tomography for high payload mass
% initializeReferences ( . . .
% ' Rz_type ' , ' rotating ' , . . .
% ' Rz_period ' , 10 , . . . % 36 deg / s
% ' Dh_pos ' , [ P_micro _hexapod ; 0 ; 0 ; 0 ] ) ;
% initializeSample ( ' type ' , ' cylindrical ' , ' m ' , 50 ) ;
% set_param ( mdl , ' StopTime ' , ' 5 ' ) ;
% sim ( mdl ) ;
% exp_tomo _cl _m50 _slow = simout ;
% % Simulation of tomography experiment - 1 kg payload - 360 deg / s - XY errors
figure ;
hold on ;
@@ -1004,7 +896,7 @@ yticks([-2:1:2]);
leg = legend ( ' location ' , ' northeast ' , ' FontSize ' , 8 , ' NumColumns ' , 1 ) ;
leg . ItemTokenSize ( 1 ) = 15 ;
% % Simulation of tomography experiment - no payload , 30 rpm - YZ errors
% % Simulation of tomography experiment - 1 kg payload - 36 0 deg / s - YZ errors
figure ;
tiledlayout ( 2 , 1 , ' TileSpacing ' , ' compact ' , ' Padding ' , ' None ' ) ;
@@ -1039,7 +931,7 @@ leg.ItemTokenSize(1) = 15;
% # + name : fig : nass_tomo _1kg _60rpm
% # + caption : Position error of the sample in the XY ( \ subref { fig : nass_tomo _1kg _60rpm _xy } ) and YZ ( \ subref { fig : nass_tomo _1kg _60rpm _yz } ) planes during a simulation of a tomography experiment at $ 360 \ , \ text { deg / s } $ . 1 kg payload is placed on top of the nano - hexapod .
% # + attr_latex : : options [ htbp ]
% # + attr_latex : : options [ h! tbp ]
% # + begin_figure
% # + attr_latex : : caption \ subcaption { \ label { fig : nass_tomo _1kg _60rpm _xy } XY plane }
% # + attr_latex : : options { 0.48 \ textwidth }
@@ -1055,11 +947,15 @@ leg.ItemTokenSize(1) = 15;
% # + end_subfigure
% # + end_figure
% - Effect of payload mass ( Figure ref : fig : nass_tomography _hac _iff ) :
% Worse performance for h igh masses , as expected from the control analysis , but still acceptable considering that the rotational veloc ity of 360 deg / s i s only used for light payload s.
% The robustness of the NASS to payload mass variation was evaluated through additional tomography scan simulations with 25 kg and 50 kg payloads , complementing the initial 1 kg test case .
% As illustrated in F igure ref : fig : nass_tomography _hac _iff , system performance exhibits some degradation with increasing payload mass , aligning w ith prediction s from the control analysi s.
% While the positioning accuracy for heavier payloads is outside the specified limits , it remains within acceptable bounds for typical operating conditions .
% It should be noted that the maximum rotational velocity of 360 deg / s is primarily intended for lightweight payload applications .
% For higher mass configurations , rotational velocities are foreseen to be below 36 deg / s .
% % Simulation of tomography experiment - no payload , 30 rpm - YZ errors
% % Simulation of tomography experiment - 1 kg payload - 36 0 deg / s - YZ errors
figure ;
tiledlayout ( 1 , 1 , ' TileSpacing ' , ' compact ' , ' Padding ' , ' None ' ) ;
@@ -1074,7 +970,7 @@ axis equal
xlim ( [ -200 , 200 ] ) ; ylim ( [ -100 , 100 ] ) ;
xticks ( [ -200 : 50 : 200 ] ) ; yticks ( [ -100 : 50 : 100 ] ) ;
% % Simulation of tomography experiment - no payload , 30 rpm - YZ errors
% % Simulation of tomography experiment - 25 kg payload - 36 0 deg / s - YZ errors
figure ;
tiledlayout ( 1 , 1 , ' TileSpacing ' , ' compact ' , ' Padding ' , ' None ' ) ;
@@ -1089,7 +985,7 @@ axis equal
xlim ( [ -200 , 200 ] ) ; ylim ( [ -100 , 100 ] ) ;
xticks ( [ -200 : 50 : 200 ] ) ; yticks ( [ -100 : 50 : 100 ] ) ;
% % Simulation of tomography experiment - no payload , 30 rpm - YZ errors
% % Simulation of tomography experiment - 50 kg payload - 36 0 deg / s - YZ errors
figure ;
tiledlayout ( 1 , 1 , ' TileSpacing ' , ' compact ' , ' Padding ' , ' None ' ) ;