diff --git a/active_damping/index.org b/active_damping/index.org index aafe399..101ac95 100644 --- a/active_damping/index.org +++ b/active_damping/index.org @@ -41,7 +41,7 @@ #+PROPERTY: header-args:latex+ :output-dir figs :END: -* Introduction :ignore: +* Introduction :ignore: The goal of this file is to study the use of active damping for the control of the NASS. In general, three sensors can be used for Active Damping: @@ -276,7 +276,7 @@ We identify the dynamics of the system using the =linearize= function. %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs + io(io_i) = linio([mdl, '/Controller'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs io(io_i) = linio([mdl, '/Tracking Error'], 1, 'openoutput', [], 'En'); io_i = io_i + 1; % Metrology Outputs #+end_src @@ -4105,3 +4105,150 @@ The obtained sensitivity to disturbances is shown in figure [[fig:ine_1dof_sensi #+name: fig:ine_1dof_sensitivitiy #+caption: Sensitivity to disturbance when INE is applied on the 1dof system ([[./figs/ine_1dof_sensitivitiy.png][png]], [[./figs/ine_1dof_sensitivitiy.pdf][pdf]]) [[file:figs/ine_1dof_sensitivitiy.png]] +* Test :noexport: +#+begin_src matlab + AP = [0; 0; 0]; +#+end_src + +#+begin_src matlab + load('mat/conf_simulink.mat'); + set_param(conf_simulink, 'StopTime', '0.5'); + + initializeSimscapeConfiguration('gravity', true); + + initializeLoggingConfiguration('log', 'forces'); + + initializeGround('type', 'none'); + initializeGranite('type', 'none'); + initializeTy('type', 'rigid'); + initializeRy('type', 'init'); + initializeRz('type', 'none'); + initializeMicroHexapod('type', 'rigid', 'AP', AP, 'Foffset', false); + initializeAxisc('type', 'none'); + initializeMirror('type', 'none'); + initializeNanoHexapod('type', 'none'); + initializeSample('type', 'init', 'Foffset', false); + + sim('nass_model'); +#+end_src + +#+begin_src matlab + save('./mat/Foffset.mat', 'Foffset'); +#+end_src + +#+begin_src matlab + initializeRz('type', 'flexible'); + initializeMicroHexapod('type', 'flexible', 'AP', AP); + initializeSample('type', 'flexible'); + + sim('nass_model'); +#+end_src +* Test bis :noexport: +#+begin_src matlab + AP = [0; 0; 0]; +#+end_src + +#+begin_src matlab + load('mat/conf_simulink.mat'); + set_param(conf_simulink, 'StopTime', '0.5'); + + initializeSimscapeConfiguration('gravity', true); + + initializeLoggingConfiguration('log', 'forces'); + + initializeGround('type', 'none'); + initializeGranite('type', 'none'); + initializeTy('type', 'rigid'); + initializeRy('type', 'flexible'); + initializeRz('type', 'none'); + initializeMicroHexapod('type', 'none'); + initializeAxisc('type', 'none'); + initializeMirror('type', 'none'); + initializeNanoHexapod('type', 'none'); + initializeSample('type', 'none'); + + sim('nass_model'); +#+end_src + +#+begin_src matlab + save('./mat/Foffset.mat', 'Foffset'); +#+end_src + +#+begin_src matlab + initializeRz('type', 'flexible'); + initializeMicroHexapod('type', 'flexible', 'AP', AP); + initializeSample('type', 'flexible'); + + sim('nass_model'); +#+end_src +* Use only one joint for the tilt stage +#+begin_src matlab + K = [2.8e4; 2.8e4; 2.8e4]; + %K = [1e8; 1e8; 1e8]; + + ty = 7*(2*pi)/180; + Ry = [ cos(ty) 0 sin(ty); + 0 1 0; + -sin(ty) 0 cos(ty)]; + + K11 = abs(Ry*K); + K12 = abs(Ry*K); + + ty = -7*(2*pi)/180; + Ry = [ cos(ty) 0 sin(ty); + 0 1 0; + -sin(ty) 0 cos(ty)]; + + K21 = abs(Ry*K); + K22 = abs(Ry*K); + + Ktot = zeros(6,1); + + Ktot(1) = K11(1) + K12(1) + K21(1) + K22(1); + Ktot(2) = K11(2) + K12(2) + K21(2) + K22(2); + Ktot(3) = K11(3) + K12(3) + K21(3) + K22(3); + + %% Stiffness in rotation + + % Position of the joint from the next wanted joint position (in the rotated frame) + P11 = [0; 0.334; 0]; + P12 = [0; 0.334; 0]; + P21 = [0; 0.334; 0]; + P22 = [0; 0.334; 0]; + + Ktot(4:6) = abs(cross(P11, K11)) + abs(cross(P12, K12)) + abs(cross(P21, K21)) + abs(cross(P22, K22)) +#+end_src + +#+begin_src matlab + Ry_init = 0; +#+end_src + +#+begin_src matlab + initializeSimscapeConfiguration('gravity', true); + initializeLoggingConfiguration('log', 'none'); + + initializeGround('type', 'none'); + initializeGranite('type', 'none'); + initializeTy('type', 'none'); + initializeRy('type', 'init', 'Ry_init', Ry_init); + initializeRz('type', 'init'); + initializeMicroHexapod('type', 'init'); + initializeAxisc('type', 'none'); + initializeMirror('type', 'none'); + initializeNanoHexapod('type', 'none'); + initializeSample('type', 'init'); + + sim('nass_model'); +#+end_src + +#+begin_src matlab + save('./mat/Foffset.mat', 'Fym'); +#+end_src + +#+begin_src matlab + initializeReferences('Ry_amplitude', 3*(2*pi)/180) + + initializeRy('type', 'flexible', 'Ry_init', 3*(2*pi)/180); + + sim('nass_model'); +#+end_src diff --git a/disturbances/index.html b/disturbances/index.html index 92786d3..e17037c 100644 --- a/disturbances/index.html +++ b/disturbances/index.html @@ -1,9 +1,10 @@ +
- +-The sources of perturbations are (schematically shown in figure 1): +The sources of perturbations are (schematically shown in figure 1):
-Because we cannot measure directly the perturbation forces, we have the measure the effect of those perturbations on the system (in terms of velocity for instance using geophones, \(D\) on figure 1) and then, using a model, compute the forces that induced such velocity. +Because we cannot measure directly the perturbation forces, we have the measure the effect of those perturbations on the system (in terms of velocity for instance using geophones, \(D\) on figure 1) and then, using a model, compute the forces that induced such velocity.
-
Figure 1: Schematic of the Micro Station and the sources of disturbance
@@ -324,19 +310,19 @@ Because we cannot measure directly the perturbation forces, we have the measure This file is divided in the following sections:@@ -349,17 +335,12 @@ We add disturbances forces in the vertical direction for the Translation Stage a Also, we measure the absolute displacement of the granite and of the top platform of the Hexapod.
-open('disturbances/matlab/sim_micro_station_disturbances.slx'); --
We load the configuration and we set a small StopTime
.
load('mat/conf_simscape.mat'); -set_param(conf_simscape, 'StopTime', '0.5'); +load('mat/conf_simulink.mat'); +set_param(conf_simulink, 'StopTime', '0.5');
StopTime
.
We initialize all the stages.
initializeGround(); -initializeGranite(); -initializeTy(); -initializeRy(); -initializeRz(); -initializeMicroHexapod(); -initializeAxisc(); -initializeMirror(); -initializeNanoHexapod(struct('actuator', 'piezo')); -initializeSample(struct('mass', 50)); +initializeGround(); +initializeGranite('type', 'modal-analysis'); +initializeTy(); +initializeRy(); +initializeRz(); +initializeMicroHexapod('type', 'modal-analysis'); +initializeAxisc('type', 'none'); +initializeMirror('type', 'none'); +initializeNanoHexapod('type', 'none'); +initializeSample('type', 'none');
- + The transfer functions from the disturbance forces to the relative velocity of the hexapod with respect to the granite are computed using the Simscape Model representing the experimental setup with the code below.
%% Options for Linearized options = linearizeOptions; -options.SampleTime = 0; +options.SampleTime = 0; %% Name of the Simulink File -mdl = 'sim_micro_station_disturbances'; +mdl = 'nass_model';
%% Micro-Hexapod -% Input/Output definition -io(1) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion -io(2) = linio([mdl, '/Fty'], 1, 'input'); % Parasitic force Ty -io(3) = linio([mdl, '/Frz'], 1, 'input'); % Parasitic force Rz -io(4) = linio([mdl, '/Dgm'], 1, 'output'); % Absolute motion - Granite -io(5) = linio([mdl, '/Dhm'], 1, 'output'); % Absolute Motion - Hexapod -io(6) = linio([mdl, '/Vm'], 1, 'output'); % Relative Velocity hexapod/granite + clear io; io_i = 1; + io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Dwz'); io_i = io_i + 1; % Vertical Ground Motion + io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Fty_z'); io_i = io_i + 1; % Parasitic force Ty + io(io_i) = linio([mdl, '/Disturbances'], 1, 'openinput', [], 'Frz_z'); io_i = io_i + 1; % Parasitic force Rz + io(io_i) = linio([mdl, '/Micro-Station/Granite/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; % Absolute motion - Granite + io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Modal Analysis/accelerometer'], 1, 'openoutput'); io_i = io_i + 1; % Absolute Motion - Hexapod + % io(io_i) = linio([mdl, '/Vm'], 1, 'openoutput'); io_i = io_i + 1; % Relative Velocity hexapod/granite
% Run the linearization -G = linearize(mdl, io, 0); +G = linearize(mdl, io, 0); + +% We Take only the outputs corresponding to the vertical acceleration +G = G([3,9], :); % Input/Output names -G.InputName = {'Dw', 'Fty', 'Frz'}; -G.OutputName = {'Dgm', 'Dhm', 'Vm'}; +G.InputName = {'Dw', 'Fty', 'Frz'}; +G.OutputName = {'Agm', 'Ahm'}; + +% We integrate 1 time the output to have the velocity and we +% substract the absolute velocities to have the relative velocity +G = (1/s)*tf([-1, 1])*G; + +% Input/Output names +G.InputName = {'Dw', 'Fty', 'Frz'}; +G.OutputName = {'Vm'};
Figure 2: Sensitivity to Ground Motion (png, pdf)
@@ -440,7 +432,7 @@ G.OutputName = { +
Figure 3: Sensitivity to vertical forces applied by the Ty stage (png, pdf)
@@ -448,7 +440,7 @@ G.OutputName = { +
Figure 4: Sensitivity to vertical forces applied by the Rz stage (png, pdf)
@@ -456,11 +448,11 @@ G.OutputName = {- + The PSD of the relative velocity between the hexapod and the marble in \([(m/s)^2/Hz]\) are loaded for the following sources of disturbance:
gm = load('./disturbances/mat/psd_gm.mat', 'f', 'psd_gm', 'psd_gv'); -rz = load('./disturbances/mat/pxsp_r.mat', 'f', 'pxsp_r'); -tyz = load('./disturbances/mat/pxz_ty_r.mat', 'f', 'pxz_ty_r'); -tyx = load('./disturbances/mat/pxe_ty_r.mat', 'f', 'pxe_ty_r'); +gm = load('./disturbances/mat/psd_gm.mat', 'f', 'psd_gm', 'psd_gv'); +rz = load('./disturbances/mat/pxsp_r.mat', 'f', 'pxsp_r'); +tyz = load('./disturbances/mat/pxz_ty_r.mat', 'f', 'pxz_ty_r'); +tyx = load('./disturbances/mat/pxe_ty_r.mat', 'f', 'pxe_ty_r');
gm.psd_rv = gm.psd_gm.*abs(squeeze(freqresp(G('Vm', 'Dw'), gm.f, 'Hz'))).^2; +gm.psd_rv = gm.psd_gm.*abs(squeeze(freqresp(G('Vm', 'Dw'), gm.f, 'Hz'))).^2;
-The Power Spectral Density of the relative motion/velocity of the hexapod with respect to the granite are shown in figures 5 and 6. +The Power Spectral Density of the relative motion/velocity of the hexapod with respect to the granite are shown in figures 5 and 6.
-The Cumulative Amplitude Spectrum of the relative motion is shown in figure 7. +The Cumulative Amplitude Spectrum of the relative motion is shown in figure 7.
-
Figure 5: Amplitude Spectral Density of the relative velocity of the hexapod with respect to the granite due to different sources of perturbation (png, pdf)
@@ -505,14 +497,14 @@ The Cumulative Amplitude Spectrum of the relative motion is shown in figure +
Figure 6: Amplitude Spectral Density of the relative displacement of the hexapod with respect to the granite due to different sources of perturbation (png, pdf)
Figure 7: Cumulative Amplitude Spectrum of the relative motion due to different sources of perturbation (png, pdf)
@@ -520,25 +512,25 @@ The Cumulative Amplitude Spectrum of the relative motion is shown in figure-Now, from the extracted transfer functions from the disturbance force to the relative motion of the hexapod with respect to the granite (section 3) and from the measured PSD of the relative motion (section 4), we can compute the PSD of the disturbance force. +Now, from the extracted transfer functions from the disturbance force to the relative motion of the hexapod with respect to the granite (section 3) and from the measured PSD of the relative motion (section 4), we can compute the PSD of the disturbance force.
rz.psd_f = rz.pxsp_r./abs(squeeze(freqresp(G('Vm', 'Frz'), rz.f, 'Hz'))).^2; -tyz.psd_f = tyz.pxz_ty_r./abs(squeeze(freqresp(G('Vm', 'Fty'), tyz.f, 'Hz'))).^2; +rz.psd_f = rz.pxsp_r./abs(squeeze(freqresp(G('Vm', 'Frz'), rz.f, 'Hz'))).^2; +tyz.psd_f = tyz.pxz_ty_r./abs(squeeze(freqresp(G('Vm', 'Fty'), tyz.f, 'Hz'))).^2;
Figure 8: Amplitude Spectral Density of the disturbance force (png, pdf)
@@ -546,11 +538,11 @@ tyz.psd_f = tyz.pxz_ty_r./abs -@@ -559,7 +551,7 @@ We should verify that this is coherent with the measurements.
-
Figure 9: Computed Effect of the disturbances on the relative displacement hexapod/granite (png, pdf)
@@ -567,7 +559,7 @@ We should verify that this is coherent with the measurements. -The PSD of the disturbance force are now saved for further analysis (the mat file is accessible here).
dist_f = struct(); +dist_f = struct(); dist_f.f = gm.f; % Frequency Vector [Hz] -dist_f.psd_gm = gm.psd_gm; % Power Spectral Density of the Ground Motion [m^2/Hz] -dist_f.psd_ty = tyz.psd_f; % Power Spectral Density of the force induced by the Ty stage in the Z direction [N^2/Hz] -dist_f.psd_rz = rz.psd_f; % Power Spectral Density of the force induced by the Rz stage in the Z direction [N^2/Hz] +dist_f.psd_gm = gm.psd_gm; % Power Spectral Density of the Ground Motion [m^2/Hz] +dist_f.psd_ty = tyz.psd_f; % Power Spectral Density of the force induced by the Ty stage in the Z direction [N^2/Hz] +dist_f.psd_rz = rz.psd_f; % Power Spectral Density of the force induced by the Rz stage in the Z direction [N^2/Hz] -save('./disturbances/mat/dist_psd.mat', 'dist_f'); +save('./disturbances/mat/dist_psd.mat', 'dist_f');
Created: 2019-12-13 ven. 16:39
- +Created: 2020-02-18 mar. 17:44
-