HAC-LAC applied on the Simscape Model
+Table of Contents
+ +1 Undamped System
+ + +1.1 Identification of the plant
+1.1.1 Initialize the Simulation
++We initialize all the stages with the default parameters. +
+initializeGround(); +initializeGranite(); +initializeTy(); +initializeRy(); +initializeRz(); +initializeMicroHexapod(); +initializeAxisc(); +initializeMirror(); ++
+The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. +
+initializeNanoHexapod('actuator', 'piezo'); +initializeSample('mass', 50); ++
+No disturbances. +
+initializeDisturbances('enable', false); ++
+We set the references to zero. +
+initializeReferences(); ++
+And all the controllers are set to 0. +
+K = tf(zeros(6)); +save('./mat/controllers.mat', 'K', '-append'); +K_ine = tf(zeros(6)); +save('./mat/controllers.mat', 'K_ine', '-append'); +K_iff = tf(zeros(6)); +save('./mat/controllers.mat', 'K_iff', '-append'); +K_dvf = tf(zeros(6)); +save('./mat/controllers.mat', 'K_dvf', '-append'); ++
1.1.2 Identification
+
+First, we identify the dynamics of the system using the linearize
function.
+
%% Options for Linearized +options = linearizeOptions; +options.SampleTime = 0; + +%% Name of the Simulink File +mdl = 'sim_nass_hac_lac'; + +%% Input/Output definition +clear io; io_i = 1; +io(io_i) = linio([mdl, '/HAC'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Compute Error in NASS base'], 2, 'openoutput'); io_i = io_i + 1; + +%% Run the linearization +G = linearize(mdl, io, options); +G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; +G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}; ++
load('mat/stages.mat', 'nano_hexapod'); +G_cart = minreal(G*inv(nano_hexapod.J')); +G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; ++
G_legs = minreal(inv(nano_hexapod.J)*G); +G_legs.OutputName = {'e1', 'e2', 'e3', 'e4', 'e5', 'e6'}; ++
1.1.3 Display TF
+ +1.2 Tomography Experiment
+1.2.1 Simulation
++We initialize elements for the tomography experiment. +
+prepareTomographyExperiment(); ++
+We change the simulation stop time. +
+load('mat/conf_simscape.mat'); +set_param(conf_simscape, 'StopTime', '3'); ++
+And we simulate the system. +
+sim('sim_nass_active_damping'); ++
+Finally, we save the simulation results for further analysis +
+save('./active_damping/mat/tomo_exp.mat', 'En', 'Eg', '-append'); ++
1.2.2 Results
++We load the results of tomography experiments. +
+load('./active_damping/mat/tomo_exp.mat', 'En'); +t = linspace(0, 3, length(En(:,1))); ++
1.3 Verification of the transfer function from nano hexapod to metrology
+1.3.1 Initialize the Simulation
++We initialize all the stages with the default parameters. +
+initializeGround(); +initializeGranite(); +initializeTy(); +initializeRy(); +initializeRz(); +initializeMicroHexapod(); +initializeAxisc(); +initializeMirror(); ++
+The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. +
+initializeNanoHexapod('actuator', 'piezo'); +initializeSample('mass', 50); ++
+No disturbances. +
+initializeDisturbances('enable', false); ++
+We set the references to zero. +
+initializeReferences(); ++
+And all the controllers are set to 0. +
+K = tf(zeros(6)); +save('./mat/controllers.mat', 'K', '-append'); +K_ine = tf(zeros(6)); +save('./mat/controllers.mat', 'K_ine', '-append'); +K_iff = tf(zeros(6)); +save('./mat/controllers.mat', 'K_iff', '-append'); +K_dvf = tf(zeros(6)); +save('./mat/controllers.mat', 'K_dvf', '-append'); ++
1.3.2 Identification
+
+First, we identify the dynamics of the system using the linearize
function.
+
%% Options for Linearized +options = linearizeOptions; +options.SampleTime = 0; + +%% Name of the Simulink File +mdl = 'sim_nass_hac_lac'; + +%% Input/Output definition +clear io; io_i = 1; +io(io_i) = linio([mdl, '/HAC'], 1, 'openinput'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Compute Error in NASS base'], 2, 'openoutput'); io_i = io_i + 1; + +%% Run the linearization +G = linearize(mdl, io, options); +G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; +G.OutputName = {'Edx', 'Edy', 'Edz', 'Erx', 'Ery', 'Erz'}; ++
load('mat/stages.mat', 'nano_hexapod'); +G_cart = minreal(G*inv(nano_hexapod.J')); +G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; ++
G_legs = minreal(inv(nano_hexapod.J)*G); +G_legs.OutputName = {'e1', 'e2', 'e3', 'e4', 'e5', 'e6'}; ++