diff --git a/docs/disturbances.html b/docs/disturbances.html index 45028c1..d160c15 100644 --- a/docs/disturbances.html +++ b/docs/disturbances.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +@@ -324,7 +322,8 @@ We load the configuration and we set a small
StopTime
.
-We initialize all the stages. +We initialize all the stages without the sample nor the nano-hexapod. +The obtained system corresponds to the status micro-station when the vibration measurements were conducted.
initializeGround(); @@ -339,6 +338,30 @@ initializeNanoHexapod('type', 'type', 'none');
+Open Loop Control. +
+initializeController('type', 'open-loop'); ++
+We don’t need gravity here. +
+initializeSimscapeConfiguration('gravity', false); ++
+We log the signals. +
+initializeLoggingConfiguration('log', 'all'); ++
%% Options for Linearized -options = linearizeOptions; -options.SampleTime = 0; - -%% Name of the Simulink File +%% Name of the Simulink File mdl = 'nass_model'; --
%% Micro-Hexapod - 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 +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); ++
+We Take only the outputs corresponding to the vertical acceleration. +
+G = G([3,9], :); % Input/Output names 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'}; @@ -402,6 +425,14 @@ G.OutputName = {'Vm'}; ++The obtained sensitivity to disturbances are shown bellow: +
+
@@ -432,10 +463,13 @@ G.OutputName = {'Vm'};
-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: +
+ ++The Power Spectral Densities of the relative velocity between the hexapod and the marble in \([(m/s)^2/Hz]\) are loaded for the following sources of disturbance:
-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 and velocity of the hexapod with respect to the granite are shown in figures 5 and 6.
@@ -487,6 +521,14 @@ The Cumulative Amplitude Spectrum of the relative motion is shown in figure
Figure 7: Cumulative Amplitude Spectrum of the relative motion due to different sources of perturbation (png, pdf)
++From Figure 7, we can see that the translation stage and the rotation stage have almost the same effect on the position error. +Also, the ground motion has a relatively negligible effect on the position error. +
+-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. +Using the extracted transfer functions from the disturbance force to the relative motion of the hexapod with respect to the granite (section 3) and using the measured PSD of the relative motion (section 4), we can compute the PSD of the disturbance force.
++This is done below. +
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;
+The obtained amplitude spectral densities of the disturbance forces are shown in Figure 8. +
+@@ -525,24 +574,31 @@ tyz.psd_f = tyz.pxz_ty_r./abs(squeeze(freqresp(G(<
-Now, from the compute spectral density of the disturbance sources, we can compute the resulting relative motion of the Hexapod with respect to the granite using the model. -We should verify that this is coherent with the measurements. +From the obtained spectral density of the disturbance sources, we can compute the resulting relative motion of the Hexapod with respect to the granite using the model.
++This is equivalent as doing the inverse that was done in the previous section. +This is done in order to verify that this is coherent with the measurements. +
+ ++The power spectral density of the relative motion is computed below and the result is shown in Figure 9. +We can see that this is exactly the same as the Figure 6. +
+psd_gm_d = gm.psd_gm.*abs(squeeze(freqresp(G('Vm', 'Dw')/s, gm.f, 'Hz'))).^2; +psd_ty_d = tyz.psd_f.*abs(squeeze(freqresp(G('Vm', 'Fty')/s, tyz.f, 'Hz'))).^2; +psd_rz_d = rz.psd_f.*abs(squeeze(freqresp(G('Vm', 'Frz')/s, rz.f, 'Hz'))).^2; ++
initializeGround(); -initializeGranite('Foffset', false); -initializeTy('Foffset', false); -initializeRy('Foffset', false); -initializeRz('Foffset', false); -initializeMicroHexapod('Foffset', false); -initializeAxisc('type', 'rigid'); -initializeMirror('type', 'rigid'); --
-The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. -
-initializeNanoHexapod('type', 'rigid'); -initializeSample('type', 'rigid', 'mass', 50); --
-We set the references and disturbances to zero. -
-initializeReferences(); -initializeDisturbances(); --
-We set the controller type to Open-Loop. -
-initializeController('type', 'open-loop'); --
-And we put some gravity. -
-initializeSimscapeConfiguration('gravity', false); --
-We do not need to log any signal. -
-initializeLoggingConfiguration('log', 'all'); --
initializePosError('error', false); --
load('mat/conf_simulink.mat'); -set_param(conf_simulink, 'StopTime', '1'); --
-We simulate the model. -
-sim('nass_model'); --
figure; -subplot(1, 2, 1); -hold on; -plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 1), 'DisplayName', 'X'); -plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 2), 'DisplayName', 'Y'); -plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 3), 'DisplayName', 'Z'); -hold off; -xlabel('Time [s]'); -ylabel('Position error [m]'); -legend(); - -subplot(1, 2, 2); -hold on; -plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 4)); -plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 5)); -plot(simout.Em.Eg.Time, simout.Em.Eg.Data(:, 6)); -hold off; -xlabel('Time [s]'); -ylabel('Orientation error [rad]'); --
Eg = simout.Em.Eg; -save('./mat/motion_error_ol.mat', 'Eg'); --
Created: 2020-03-13 ven. 17:39
+Created: 2020-03-17 mar. 11:21