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
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'};