diff --git a/active_damping/index.html b/active_damping/index.html index f2af323..df571d9 100644 --- a/active_damping/index.html +++ b/active_damping/index.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Active Damping applied on the Simscape Model @@ -269,116 +269,115 @@ for the JavaScript code in this tag.

Table of Contents

-First, in section 1, we will looked at the undamped system. +First, in section 1, we will looked at the undamped system.

Then, we will compare three active damping techniques:

@@ -417,24 +416,32 @@ The disturbances are:

  • Motion errors of all the stages
  • -
    -

    1 Undamped System

    +
    +

    1 Undamped System

    - +

    -We first look at the undamped system. -The performance of this undamped system will be compared with the damped system using various techniques. +In this section, we identify the dynamic of the system from forces applied in the nano-hexapod legs to the various sensors included in the nano-hexapod that could be use for Active Damping, namely: +

    +
      +
    • A relative motion sensor, measuring the relative displacement of each of the leg
    • +
    • A force sensor measuring the total force transmitted to the top part of the leg in the direction of the leg
    • +
    • A absolute velocity sensor measuring the absolute velocity of the top part of the leg in the direction of the leg
    • +
    + +

    +After that, a tomography experiment is simulation without any active damping techniques.

    -
    -

    1.1 Identification of the dynamics for Active Damping

    +
    +

    1.1 Identification of the dynamics for Active Damping

    -
    -

    1.1.1 Initialize the Simulation

    +
    +

    1.1.1 Initialize the Simulation

    We initialize all the stages with the default parameters. @@ -468,6 +475,9 @@ We set the references to zero.

    +

    +No disturbance is included in the system. +

    initializeDisturbances('enable', false);
     
    @@ -490,8 +500,8 @@ save('./mat/controllers.mat', -

    1.1.2 Identification

    +
    +

    1.1.2 Identification

    First, we identify the dynamics of the system using the linearize function. @@ -506,17 +516,19 @@ mdl = 'sim_nass_active_damping'; %% Input/Output definition clear io; io_i = 1; -io(io_i) = linio([mdl, '/Fnl'], 1, 'openinput'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Fnlm'); io_i = io_i + 1; -io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm'); io_i = io_i + 1; +io(io_i) = linio([mdl, '/Fnl'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs +io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Relative Motion Outputs +io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Fnlm'); io_i = io_i + 1; % Force Sensors +io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm'); io_i = io_i + 1; % Absolute Velocity Outputs +io(io_i) = linio([mdl, '/Compute Error in NASS base'], 2, 'openoutput'); io_i = io_i + 1; % Metrology Outputs %% Run the linearization G = linearize(mdl, io, 0.5, options); G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ... 'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ... - 'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'}; + 'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6', ... + 'Dxn', 'Dyn', 'Dzn', 'Rxn', 'Ryn', 'Rzn'};

    @@ -530,18 +542,26 @@ G_ine = minreal(G({'Vnlm1', +
    load('mat/stages.mat', 'nano_hexapod');
    +G_cart = minreal(G({'Dxn', 'Dyn', 'Dzn', 'Rxn', 'Ryn', 'Rzn'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*inv(nano_hexapod.J');
    +G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'};
    +
    +
    +

    And we save them for further analysis.

    save('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
    +save('./active_damping/mat/cart_plants.mat', 'G_cart');
     
    -
    -

    1.1.3 Obtained Plants for Active Damping

    +
    +

    1.1.3 Obtained Plants for Active Damping

    load('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine');
    @@ -549,35 +569,35 @@ And we save them for further analysis.
     
    -
    +

    nass_active_damping_iff_plant.png

    -

    Figure 1: G_iff: IFF Plant (png, pdf)

    +

    Figure 1: G_iff: Transfer functions from forces applied in the actuators to the force sensor in each actuator (png, pdf)

    -
    -

    nass_active_damping_ine_plant.png +

    +

    nass_active_damping_dvf_plant.png

    -

    Figure 2: G_dvf: Plant for Direct Velocity Feedback (png, pdf)

    +

    Figure 2: G_dvf: Transfer functions from forces applied in the actuators to the relative motion sensor in each actuator (png, pdf)

    -
    +

    nass_active_damping_inertial_plant.png

    -

    Figure 3: G_ine: Inertial Feedback Plant (png, pdf)

    +

    Figure 3: G_ine: Transfer functions from forces applied in the actuators to the geophone located in each leg measuring the absolute velocity of the top part of the leg in the direction of the leg (png, pdf)

    -
    -

    1.2 Tomography Experiment

    +
    +

    1.2 Tomography Experiment

    -
    -

    1.2.1 Simulation

    +
    +

    1.2.1 Simulation

    We initialize elements for the tomography experiment. @@ -614,8 +634,8 @@ Finally, we save the simulation results for further analysis

    -
    -

    1.2.2 Results

    +
    +

    1.2.2 Results

    We load the results of tomography experiments. @@ -627,14 +647,14 @@ t = linspace(0, 3, length(En(:,1)));

    -
    +

    nass_act_damp_undamped_sim_tomo_trans.png

    Figure 4: Position Error during tomography experiment - Translations (png, pdf)

    -
    +

    nass_act_damp_undamped_sim_tomo_rot.png

    Figure 5: Position Error during tomography experiment - Rotations (png, pdf)

    @@ -644,22 +664,22 @@ t = linspace(0, 3, length(En(:,1)));
    -
    -

    2 Variability of the system dynamics for Active Damping

    +
    +

    2 Variability of the system dynamics for Active Damping

    - +

    The goal of this section is to study how the dynamics of the Active Damping plants are changing with the experimental conditions. These experimental conditions are:

      -
    • The mass of the sample (section 2.1)
    • -
    • The spindle angle with a null rotating speed (section 2.2)
    • -
    • The spindle rotation speed (section 2.3)
    • -
    • The tilt angle (section 2.4)
    • -
    • The scans of the translation stage (section 2.5)
    • +
    • The mass of the sample (section 2.1)
    • +
    • The spindle angle with a null rotating speed (section 2.2)
    • +
    • The spindle rotation speed (section 2.3)
    • +
    • The tilt angle (section 2.4)
    • +
    • The scans of the translation stage (section 2.5)

    @@ -668,11 +688,11 @@ This is done in order for the transient phase to be over.

    -
    -

    2.1 Variation of the Sample Mass

    +
    +

    2.1 Variation of the Sample Mass

    - +

    For all the identifications, the disturbances are disabled and no controller are used. @@ -685,21 +705,21 @@ We identify the dynamics for the following sample mass.

    -
    +

    act_damp_variability_iff_sample_mass.png

    Figure 6: Variability of the IFF plant with the Sample Mass (png, pdf)

    -
    +

    act_damp_variability_dvf_sample_mass.png

    Figure 7: Variability of the DVF plant with the Sample Mass (png, pdf)

    -
    +

    act_damp_variability_ine_sample_mass.png

    Figure 8: Variability of the Inertial plant with the Sample Mass (png, pdf)

    @@ -707,11 +727,11 @@ We identify the dynamics for the following sample mass.
    -
    -

    2.2 Variation of the Spindle Angle

    +
    +

    2.2 Variation of the Spindle Angle

    - +

    We identify the dynamics for the following Spindle angles. @@ -721,21 +741,21 @@ We identify the dynamics for the following Spindle angles.

    -
    +

    act_damp_variability_iff_spindle_angle.png

    Figure 9: Variability of the IFF plant with the Spindle Angle (png, pdf)

    -
    +

    act_damp_variability_dvf_spindle_angle.png

    Figure 10: Variability of the DVF plant with the Spindle Angle (png, pdf)

    -
    +

    act_damp_variability_ine_spindle_angle.png

    Figure 11: Variability of the Inertial plant with the Spindle Angle (png, pdf)

    @@ -743,11 +763,11 @@ We identify the dynamics for the following Spindle angles.
    -
    -

    2.3 Variation of the Spindle Rotation Speed

    +
    +

    2.3 Variation of the Spindle Rotation Speed

    - +

    We identify the dynamics for the following Spindle rotation periods. @@ -761,46 +781,46 @@ We identify the dynamics for the following Spindle rotation periods. The identification of the dynamics is done at the same Spindle angle position.

    -
    -

    2.3.1 Dynamics of the Active Damping plants

    +
    +

    2.3.1 Dynamics of the Active Damping plants

    -
    +

    act_damp_variability_iff_spindle_speed.png

    Figure 12: Variability of the IFF plant with the Spindle rotation speed (png, pdf)

    -
    +

    act_damp_variability_iff_spindle_speed_zoom.png

    Figure 13: Variability of the IFF plant with the Spindle rotation speed (png, pdf)

    -
    +

    act_damp_variability_dvf_spindle_speed.png

    Figure 14: Variability of the DVF plant with the Spindle rotation speed (png, pdf)

    -
    +

    act_damp_variability_dvf_spindle_speed_zoom.png

    Figure 15: Variability of the DVF plant with the Spindle rotation speed (png, pdf)

    -
    +

    act_damp_variability_ine_spindle_speed.png

    Figure 16: Variability of the Inertial plant with the Spindle rotation speed (png, pdf)

    -
    +

    act_damp_variability_ine_spindle_speed_zoom.png

    Figure 17: Variability of the Inertial plant with the Spindle rotation speed (png, pdf)

    @@ -808,18 +828,18 @@ The identification of the dynamics is done at the same Spindle angle position.
    -
    -

    2.3.2 Variation of the poles and zeros with the Spindle rotation frequency

    +
    +

    2.3.2 Variation of the poles and zeros with the Spindle rotation frequency

    -
    +

    campbell_diagram_spindle_rotation.png

    Figure 18: Evolution of the pole with respect to the spindle rotation speed (png, pdf)

    -
    +

    variation_zeros_active_damping_plants.png

    Figure 19: Evolution of the zero with respect to the spindle rotation speed (png, pdf)

    @@ -828,11 +848,11 @@ The identification of the dynamics is done at the same Spindle angle position.
    -
    -

    2.4 Variation of the Tilt Angle

    +
    +

    2.4 Variation of the Tilt Angle

    - +

    We identify the dynamics for the following Tilt stage angles. @@ -842,21 +862,21 @@ We identify the dynamics for the following Tilt stage angles.

    -
    +

    act_damp_variability_iff_tilt_angle.png

    Figure 20: Variability of the IFF plant with the Tilt stage Angle (png, pdf)

    -
    +

    act_damp_variability_dvf_tilt_angle.png

    Figure 21: Variability of the DVF plant with the Tilt Angle (png, pdf)

    -
    +

    act_damp_variability_ine_tilt_angle.png

    Figure 22: Variability of the Inertial plant with the Tilt Angle (png, pdf)

    @@ -864,17 +884,17 @@ We identify the dynamics for the following Tilt stage angles.
    -
    -

    2.5 Scans of the Translation Stage

    +
    +

    2.5 Scans of the Translation Stage

    - +

    We want here to verify if the dynamics used for Active damping is varying when using the translation stage for scans.

    -We initialize the translation stage reference to be a sinus with an amplitude of 5mm and a period of 1s (Figure 23). +We initialize the translation stage reference to be a sinus with an amplitude of 5mm and a period of 1s (Figure 23).

    initializeReferences('Dy_type', 'sinusoidal', ...
    @@ -884,7 +904,7 @@ We initialize the translation stage reference to be a sinus with an amplitude of
     
    -
    +

    ty_scanning_reference_sinus.png

    Figure 23: Reference path for the translation stage (png, pdf)

    @@ -898,21 +918,21 @@ We identify the dynamics at different positions (times) when scanning with the T
    -
    +

    act_damp_variability_iff_ty_scans.png

    Figure 24: Variability of the IFF plant at different Ty scan positions (png, pdf)

    -
    +

    act_damp_variability_dvf_ty_scans.png

    Figure 25: Variability of the DVF plant at different Ty scan positions (png, pdf)

    -
    +

    act_damp_variability_ine_ty_scans.png

    Figure 26: Variability of the Inertial plant at different Ty scan positions (png, pdf)

    @@ -920,10 +940,10 @@ We identify the dynamics at different positions (times) when scanning with the T
    -
    -

    2.6 Conclusion

    +
    +

    2.6 Conclusion

    - +
    @@ -980,11 +1000,11 @@ Thus, the developed damping techniques should be robust to variations of the sam -
    -

    3 Integral Force Feedback

    +
    +

    3 Integral Force Feedback

    - +

    @@ -993,64 +1013,81 @@ All the files (data and Matlab scripts) are accessible he

    -Integral Force Feedback is applied on the simscape model. +Here, we study the use of Integral Force Feedback (IFF) to actively damp the resonances.

    + +

    +The IFF control is applied in a decentralized way: there is on controller for each leg. +

    + +

    +The control architecture is represented in figure 27 where one of the 6 nano-hexapod legs is represented. +

    + + +
    +

    iff_1dof.png +

    +

    Figure 27: Integral Force Feedback applied to a 1dof system

    +
    -
    -

    3.1 Control Design

    +
    +

    3.1 Control Design

    -
    -

    3.1.1 Plant

    +
    +

    3.1.1 Plant

    -Let’s load the previously indentified undamped plant: +Let’s load the previously identified undamped plant:

    load('./active_damping/mat/undamped_plants.mat', 'G_iff');
    +load('./active_damping/mat/plants_variable.mat', 'masses', 'Gm_iff');
     

    -Let’s look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor (figure 27). +Let’s look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor (figure 28).

    -
    +

    iff_plant.png

    -

    Figure 27: Transfer function from forces applied in the legs to force sensor (png, pdf)

    +

    Figure 28: Transfer function from forces applied in the legs to force sensor (png, pdf)

    -
    -

    3.1.2 Control Design

    +
    +

    3.1.2 Control Design

    The controller for each pair of actuator/sensor is:

    -
    K_iff = 1000/s;
    +
    w0 = 2*pi*50;
    +K_iff = -5000/s * (s/w0)/(1 + s/w0);
     

    -The corresponding loop gains are shown in figure 28. +The corresponding loop gains are shown in figure 29.

    -
    +

    iff_open_loop.png

    -

    Figure 28: Loop Gain for the Integral Force Feedback (png, pdf)

    +

    Figure 29: Loop Gain for the Integral Force Feedback (png, pdf)

    -
    -

    3.1.3 Diagonal Controller

    +
    +

    3.1.3 Diagonal Controller

    We create the diagonal controller and we add a minus sign as we have a positive @@ -1070,53 +1107,14 @@ We save the controller for further analysis.

    - -
    -

    3.1.4 IFF with High Pass Filter

    -
    -
    -
    w_hpf = 2*pi*10; % Cut-off frequency for the high pass filter [rad/s]
    -
    -K_iff = 2*pi*200/s * (s/w_hpf)/(s/w_hpf + 1);
    -
    -

    -The corresponding loop gains are shown in figure 29. -

    - -
    -

    iff_hpf_open_loop.png -

    -

    Figure 29: Loop Gain for the Integral Force Feedback with an High pass filter (png, pdf)

    -
    - -

    -We create the diagonal controller and we add a minus sign as we have a positive -feedback architecture. -

    -
    -
    K_iff = -K_iff*eye(6);
    -
    -
    - -

    -We save the controller for further analysis. -

    -
    -
    save('./active_damping/mat/K_iff_hpf.mat', 'K_iff');
    -
    -
    -
    -
    -
    - -
    -

    3.2 Tomography Experiment

    +
    +

    3.2 Tomography Experiment

    -
    -

    3.2.1 Simulation with IFF Controller

    +
    +

    3.2.1 Simulation with IFF Controller

    We initialize elements for the tomography experiment. @@ -1164,8 +1162,8 @@ save('./active_damping/mat/tomo_exp.mat',

    -
    -

    3.2.2 Simulation with IFF Controller with added High Pass Filter

    +
    +

    3.2.2 Simulation with IFF Controller with added High Pass Filter

    We initialize elements for the tomography experiment. @@ -1213,8 +1211,8 @@ save('./active_damping/mat/tomo_exp.mat',

    -
    -

    3.2.3 Compare with Undamped system

    +
    +

    3.2.3 Compare with Undamped system

    We load the results of tomography experiments. @@ -1226,21 +1224,21 @@ t = linspace(0, 3, length(En(:,1)));

    -
    +

    nass_act_damp_iff_sim_tomo_xy.png

    Figure 30: Position Error during tomography experiment - XY Motion (png, pdf)

    -
    +

    nass_act_damp_iff_sim_tomo_trans.png

    Figure 31: Position Error during tomography experiment - Translations (png, pdf)

    -
    +

    nass_act_damp_iff_sim_tomo_rot.png

    Figure 32: Position Error during tomography experiment - Rotations (png, pdf)

    @@ -1249,8 +1247,8 @@ t = linspace(0, 3, length(En(:,1)));
    -
    -

    3.3 Conclusion

    +
    +

    3.3 Conclusion

    @@ -1267,11 +1265,11 @@ Integral Force Feedback:

    -
    -

    4 Direct Velocity Feedback

    +
    +

    4 Direct Velocity Feedback

    - +

    @@ -1285,12 +1283,12 @@ The actuator displacement can be measured with a capacitive sensor for instance.

    -
    -

    4.1 Control Design

    +
    +

    4.1 Control Design

    -
    -

    4.1.1 Plant

    +
    +

    4.1.1 Plant

    Let’s load the undamped plant: @@ -1301,11 +1299,11 @@ Let’s load the undamped plant:

    -Let’s look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor (figure 33). +Let’s look at the transfer function from actuator forces in the nano-hexapod to the measured displacement of the actuator for all 6 pairs of actuator/sensor (figure 33).

    -
    +

    dvf_plant.png

    Figure 33: Transfer function from forces applied in the legs to leg displacement sensor (png, pdf)

    @@ -1313,8 +1311,8 @@ Let’s look at the transfer function from actuator forces in the nano-hexap
    -
    -

    4.1.2 Control Design

    +
    +

    4.1.2 Control Design

    The Direct Velocity Feedback is defined below. @@ -1326,11 +1324,11 @@ A Low pass Filter is added to make the controller transfer function proper.

    -The obtained loop gains are shown in figure 34. +The obtained loop gains are shown in figure 34.

    -
    +

    dvf_open_loop.png

    Figure 34: Loop Gain for the Integral Force Feedback (png, pdf)

    @@ -1338,8 +1336,8 @@ The obtained loop gains are shown in figure 34.
    -
    -

    4.1.3 Diagonal Controller

    +
    +

    4.1.3 Diagonal Controller

    We create the diagonal controller and we add a minus sign as we have a positive feedback architecture. @@ -1360,12 +1358,12 @@ We save the controller for further analysis.

    -
    -

    4.2 Tomography Experiment

    +
    +

    4.2 Tomography Experiment

    -
    -

    4.2.1 Initialize the Simulation

    +
    +

    4.2.1 Initialize the Simulation

    We initialize elements for the tomography experiment. @@ -1386,8 +1384,8 @@ save('./mat/controllers.mat', -

    4.2.2 Simulation

    +
    +

    4.2.2 Simulation

    We change the simulation stop time. @@ -1418,8 +1416,8 @@ save('./active_damping/mat/tomo_exp.mat',

    -
    -

    4.2.3 Compare with Undamped system

    +
    +

    4.2.3 Compare with Undamped system

    We load the results of tomography experiments. @@ -1431,21 +1429,21 @@ t = linspace(0, 3, length(En(:,1)));

    -
    +

    nass_act_damp_dvf_sim_tomo_xy.png

    Figure 35: Position Error during tomography experiment - XY Motion (png, pdf)

    -
    +

    nass_act_damp_dvf_sim_tomo_trans.png

    Figure 36: Position Error during tomography experiment - Translations (png, pdf)

    -
    +

    nass_act_damp_dvf_sim_tomo_rot.png

    Figure 37: Position Error during tomography experiment - Rotations (png, pdf)

    @@ -1454,8 +1452,8 @@ t = linspace(0, 3, length(En(:,1)));
    -
    -

    4.3 Conclusion

    +
    +

    4.3 Conclusion

    @@ -1470,11 +1468,11 @@ Direct Velocity Feedback:

    -
    -

    5 Inertial Control

    +
    +

    5 Inertial Control

    - +

    @@ -1487,12 +1485,12 @@ In Inertial Control, a feedback is applied between the measured absolute

    -
    -

    5.1 Control Design

    +
    +

    5.1 Control Design

    -
    -

    5.1.1 Plant

    +
    +

    5.1.1 Plant

    Let’s load the undamped plant: @@ -1503,11 +1501,11 @@ Let’s load the undamped plant:

    -Let’s look at the transfer function from actuator forces in the nano-hexapod to the measured velocity of the nano-hexapod platform in the direction of the corresponding actuator for all 6 pairs of actuator/sensor (figure 38). +Let’s look at the transfer function from actuator forces in the nano-hexapod to the measured velocity of the nano-hexapod platform in the direction of the corresponding actuator for all 6 pairs of actuator/sensor (figure 38).

    -
    +

    ine_plant.png

    Figure 38: Transfer function from forces applied in the legs to leg velocity sensor (png, pdf)

    @@ -1515,11 +1513,11 @@ Let’s look at the transfer function from actuator forces in the nano-hexap
    -
    -

    5.1.2 Control Design

    +
    +

    5.1.2 Control Design

    -The controller is defined below and the obtained loop gain is shown in figure 39. +The controller is defined below and the obtained loop gain is shown in figure 39.

    @@ -1528,7 +1526,7 @@ The controller is defined below and the obtained loop gain is shown in figure -
    +

    ine_open_loop_gain.png

    Figure 39: Loop Gain for Inertial Control (png, pdf)

    @@ -1536,8 +1534,8 @@ The controller is defined below and the obtained loop gain is shown in figure
    -
    -

    5.1.3 Diagonal Controller

    +
    +

    5.1.3 Diagonal Controller

    We create the diagonal controller and we add a minus sign as we have a positive feedback architecture. @@ -1558,12 +1556,12 @@ We save the controller for further analysis.

    -
    -

    5.2 Tomography Experiment

    +
    +

    5.2 Tomography Experiment

    -
    -

    5.2.1 Initialize the Simulation

    +
    +

    5.2.1 Initialize the Simulation

    We initialize elements for the tomography experiment. @@ -1584,8 +1582,8 @@ save('./mat/controllers.mat', -

    5.2.2 Simulation

    +
    +

    5.2.2 Simulation

    We change the simulation stop time. @@ -1616,8 +1614,8 @@ save('./active_damping/mat/tomo_exp.mat',

    -
    -

    5.2.3 Compare with Undamped system

    +
    +

    5.2.3 Compare with Undamped system

    We load the results of tomography experiments. @@ -1629,21 +1627,21 @@ t = linspace(0, 3, length(En_ine(:,1)));

    -
    + -
    +

    nass_act_damp_ine_sim_tomo_trans.png

    Figure 41: Position Error during tomography experiment - Translations (png, pdf)

    -
    +

    nass_act_damp_ine_sim_tomo_rot.png

    Figure 42: Position Error during tomography experiment - Rotations (png, pdf)

    @@ -1652,8 +1650,8 @@ t = linspace(0, 3, length(En_ine(:,1)));
    -
    -

    5.3 Conclusion

    +
    +

    5.3 Conclusion

    @@ -1665,15 +1663,15 @@ Inertial Control:

    -
    -

    6 Comparison

    +
    +

    6 Comparison

    - +

    -
    -

    6.1 Load the plants

    +
    +

    6.1 Load the plants

    load('./active_damping/mat/plants.mat', 'G', 'G_iff', 'G_ine', 'G_dvf');
    @@ -1682,11 +1680,11 @@ Inertial Control:
     
    -
    -

    6.2 Sensitivity to Disturbance

    +
    +

    6.2 Sensitivity to Disturbance

    -
    +

    sensitivity_comp_ground_motion_z.png

    Figure 43: Sensitivity to ground motion in the Z direction on the Z motion error (png, pdf)

    @@ -1694,21 +1692,21 @@ Inertial Control: -
    +

    sensitivity_comp_direct_forces_z.png

    Figure 44: Compliance in the Z direction: Sensitivity of direct forces applied on the sample in the Z direction on the Z motion error (png, pdf)

    -
    +

    sensitivity_comp_spindle_z.png

    Figure 45: Sensitivity to forces applied in the Z direction by the Spindle on the Z motion error (png, pdf)

    -
    +

    sensitivity_comp_ty_z.png

    Figure 46: Sensitivity to forces applied in the Z direction by the Y translation stage on the Z motion error (png, pdf)

    @@ -1716,7 +1714,7 @@ Inertial Control: -
    +

    sensitivity_comp_ty_x.png

    Figure 47: Sensitivity to forces applied in the X direction by the Y translation stage on the X motion error (png, pdf)

    @@ -1724,25 +1722,25 @@ Inertial Control:
    -
    -

    6.3 Damped Plant

    +
    +

    6.3 Damped Plant

    -
    +

    plant_comp_damping_z.png

    Figure 48: Plant for the \(z\) direction for different active damping technique used (png, pdf)

    -
    +

    plant_comp_damping_x.png

    Figure 49: Plant for the \(x\) direction for different active damping technique used (png, pdf)

    -
    +

    plant_comp_damping_coupling.png

    Figure 50: Comparison of one off-diagonal plant for different damping technique applied (png, pdf)

    @@ -1750,12 +1748,12 @@ Inertial Control:
    -
    -

    6.4 Tomography Experiment

    +
    +

    6.4 Tomography Experiment

    -
    -

    6.4.1 Load the Simulation Data

    +
    +

    6.4.1 Load the Simulation Data

    load('./active_damping/mat/tomo_exp.mat', 'En', 'En_iff_hpf', 'En_dvf', 'En_ine');
    @@ -1766,8 +1764,8 @@ t = linspace(0, 3, length(En(:,1)));
     
    -
    -

    6.4.2 Frequency Domain Analysis

    +
    +

    6.4.2 Frequency Domain Analysis

    Window used for pwelch function. @@ -1779,28 +1777,28 @@ han_win = hanning(ceil(length(En(:, 1)) -

    +

    act_damp_tomo_exp_comp_psd_trans.png

    Figure 51: PSD of the translation errors in the X direction for applied Active Damping techniques (png, pdf)

    -
    +

    act_damp_tomo_exp_comp_psd_rot.png

    Figure 52: PSD of the rotation errors in the X direction for applied Active Damping techniques (png, pdf)

    -
    +

    act_damp_tomo_exp_comp_cps_trans.png

    Figure 53: CPS of the translation errors in the X direction for applied Active Damping techniques (png, pdf)

    -
    +

    act_damp_tomo_exp_comp_cps_rot.png

    Figure 54: CPS of the rotation errors in the X direction for applied Active Damping techniques (png, pdf)

    @@ -1810,15 +1808,15 @@ han_win = hanning(ceil(length(En(:, 1))
    -
    -

    7 Useful Functions

    +
    +

    7 Useful Functions

    -
    -

    7.1 prepareTomographyExperiment

    +
    +

    7.1 prepareTomographyExperiment

    - +

    @@ -1826,9 +1824,9 @@ This Matlab function is accessible h

    -
    -

    Function Description

    -
    +
    +

    Function Description

    +
    -
    -

    Optional Parameters

    -
    +
    +

    Optional Parameters

    +
    arguments
         args.nass_actuator       char   {mustBeMember(args.nass_actuator,{'piezo', 'lorentz'})} = 'piezo'
    -    args.sample_mass   (1,1) double {mustBeNumeric, mustBePositive} = 50
    -    args.Ry_period     (1,1) double {mustBeNumeric, mustBePositive} = 1
    +    args.sample_mass   (1,1) double {mustBeNumeric, mustBePositive} = 50 % [kg]
    +    args.Rz_period     (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s]
     end
     
    -
    -

    Initialize the Simulation

    -
    +
    +

    Initialize the Simulation

    +

    We initialize all the stages with the default parameters.

    @@ -1881,7 +1879,7 @@ initializeSample('mass', args.sample_mass); We set the references to zero.

    -
    initializeReferences('Rz_type', 'rotating', 'Rz_period', args.Ry_period);
    +
    initializeReferences('Rz_type', 'rotating', 'Rz_period', args.Rz_period);
     
    @@ -1906,7 +1904,7 @@ save('./mat/controllers.mat',

    Author: Dehaeze Thomas

    -

    Created: 2020-02-04 mar. 16:13

    +

    Created: 2020-02-04 mar. 18:36

    diff --git a/active_damping/index.org b/active_damping/index.org index e8c2b5d..e8a32bc 100644 --- a/active_damping/index.org +++ b/active_damping/index.org @@ -66,8 +66,12 @@ The disturbances are: <> ** Introduction :ignore: -We first look at the undamped system. -The performance of this undamped system will be compared with the damped system using various techniques. +In this section, we identify the dynamic of the system from forces applied in the nano-hexapod legs to the various sensors included in the nano-hexapod that could be use for Active Damping, namely: +- A relative motion sensor, measuring the relative displacement of each of the leg +- A force sensor measuring the total force transmitted to the top part of the leg in the direction of the leg +- A absolute velocity sensor measuring the absolute velocity of the top part of the leg in the direction of the leg + +After that, a tomography experiment is simulation without any active damping techniques. ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -115,6 +119,7 @@ We set the references to zero. initializeReferences(); #+end_src +No disturbance is included in the system. #+begin_src matlab initializeDisturbances('enable', false); #+end_src @@ -143,17 +148,19 @@ First, we identify the dynamics of the system using the =linearize= function. %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/Fnl'], 1, 'openinput'); io_i = io_i + 1; - io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; - io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Fnlm'); io_i = io_i + 1; - io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm'); io_i = io_i + 1; + io(io_i) = linio([mdl, '/Fnl'], 1, 'openinput'); io_i = io_i + 1; % Actuator Inputs + io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; % Relative Motion Outputs + io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Fnlm'); io_i = io_i + 1; % Force Sensors + io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Vlm'); io_i = io_i + 1; % Absolute Velocity Outputs + io(io_i) = linio([mdl, '/Compute Error in NASS base'], 2, 'openoutput'); io_i = io_i + 1; % Metrology Outputs %% Run the linearization G = linearize(mdl, io, 0.5, options); G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ... 'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6', ... - 'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'}; + 'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6', ... + 'Dxn', 'Dyn', 'Dzn', 'Rxn', 'Ryn', 'Rzn'}; #+end_src We then create transfer functions corresponding to the active damping plants. @@ -163,9 +170,16 @@ We then create transfer functions corresponding to the active damping plants. G_ine = minreal(G({'Vnlm1', 'Vnlm2', 'Vnlm3', 'Vnlm4', 'Vnlm5', 'Vnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'})); #+end_src +#+begin_src matlab + load('mat/stages.mat', 'nano_hexapod'); + G_cart = minreal(G({'Dxn', 'Dyn', 'Dzn', 'Rxn', 'Ryn', 'Rzn'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}))*inv(nano_hexapod.J'); + G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; +#+end_src + And we save them for further analysis. #+begin_src matlab save('./active_damping/mat/undamped_plants.mat', 'G_iff', 'G_dvf', 'G_ine'); + save('./active_damping/mat/cart_plants.mat', 'G_cart'); #+end_src *** Obtained Plants for Active Damping @@ -207,7 +221,7 @@ And we save them for further analysis. #+end_src #+NAME: fig:nass_active_damping_iff_plant -#+CAPTION: =G_iff=: IFF Plant ([[./figs/nass_active_damping_iff_plant.png][png]], [[./figs/nass_active_damping_iff_plant.pdf][pdf]]) +#+CAPTION: =G_iff=: Transfer functions from forces applied in the actuators to the force sensor in each actuator ([[./figs/nass_active_damping_iff_plant.png][png]], [[./figs/nass_active_damping_iff_plant.pdf][pdf]]) [[file:figs/nass_active_damping_iff_plant.png]] #+begin_src matlab :exports none @@ -244,8 +258,8 @@ And we save them for further analysis. #+end_src #+NAME: fig:nass_active_damping_dvf_plant -#+CAPTION: =G_dvf=: Plant for Direct Velocity Feedback ([[./figs/nass_active_damping_dvf_plant.png][png]], [[./figs/nass_active_damping_dvf_plant.pdf][pdf]]) -[[file:figs/nass_active_damping_ine_plant.png]] +#+CAPTION: =G_dvf=: Transfer functions from forces applied in the actuators to the relative motion sensor in each actuator ([[./figs/nass_active_damping_dvf_plant.png][png]], [[./figs/nass_active_damping_dvf_plant.pdf][pdf]]) +[[file:figs/nass_active_damping_dvf_plant.png]] #+begin_src matlab :exports none freqs = logspace(0, 3, 1000); @@ -281,7 +295,7 @@ And we save them for further analysis. #+end_src #+NAME: fig:nass_active_damping_inertial_plant -#+CAPTION: =G_ine=: Inertial Feedback Plant ([[./figs/nass_active_damping_inertial_plant.png][png]], [[./figs/nass_active_damping_inertial_plant.pdf][pdf]]) +#+CAPTION: =G_ine=: Transfer functions from forces applied in the actuators to the geophone located in each leg measuring the absolute velocity of the top part of the leg in the direction of the leg ([[./figs/nass_active_damping_inertial_plant.png][png]], [[./figs/nass_active_damping_inertial_plant.pdf][pdf]]) [[file:figs/nass_active_damping_inertial_plant.png]] ** Tomography Experiment @@ -508,7 +522,8 @@ We identify the dynamics for the following sample mass. ax2 = subplot(2, 1, 2); hold on; for i = 1:length(Gm_iff) - plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz'))), 'DisplayName', sprintf('$M = %.0f$ [kg]', masses(i))); + plot(freqs, 180/pi*angle(squeeze(freqresp(Gm_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz'))), ... + 'DisplayName', sprintf('$M = %.0f$ [kg]', masses(i))); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); @@ -1688,7 +1703,16 @@ Also, for the Inertial Sensor, a RHP zero may appear when the spindle is rotatin #+end_note ** Introduction :ignore: -Integral Force Feedback is applied on the simscape model. +Here, we study the use of *Integral Force Feedback* (IFF) to actively damp the resonances. + +The IFF control is applied in a decentralized way: there is on controller for each leg. + +The control architecture is represented in figure [[fig:iff_1dof]] where one of the 6 nano-hexapod legs is represented. + +#+name: fig:iff_1dof +#+caption: Integral Force Feedback applied to a 1dof system +#+RESULTS: +[[file:figs/iff_1dof.png]] ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -1713,9 +1737,10 @@ Integral Force Feedback is applied on the simscape model. ** Control Design *** Plant -Let's load the previously indentified undamped plant: +Let's load the previously identified undamped plant: #+begin_src matlab load('./active_damping/mat/undamped_plants.mat', 'G_iff'); + load('./active_damping/mat/plants_variable.mat', 'masses', 'Gm_iff'); #+end_src Let's look at the transfer function from actuator forces in the nano-hexapod to the force sensor in the nano-hexapod legs for all 6 pairs of actuator/sensor (figure [[fig:iff_plant]]). @@ -1727,8 +1752,8 @@ Let's look at the transfer function from actuator forces in the nano-hexapod to ax1 = subplot(2, 1, 1); hold on; - for i=1:6 - plot(freqs, abs(squeeze(freqresp(G_iff(['Fnlm', num2str(i)], ['Fnl', num2str(i)]), freqs, 'Hz')))); + for i=1:length(masses) + plot(freqs, abs(squeeze(freqresp(-Gm_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz')))); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); @@ -1736,14 +1761,16 @@ Let's look at the transfer function from actuator forces in the nano-hexapod to ax2 = subplot(2, 1, 2); hold on; - for i=1:6 - plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff(['Fnlm', num2str(i)], ['Fnl', num2str(i)]), freqs, 'Hz')))); + for i=1:length(masses) + plot(freqs, 180/pi*angle(squeeze(freqresp(-Gm_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz'))), ... + 'DisplayName', sprintf('$M = %.0f$ [kg]', masses(i))); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-180, 180]); yticks([-180, -90, 0, 90, 180]); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); #+end_src @@ -1760,7 +1787,8 @@ Let's look at the transfer function from actuator forces in the nano-hexapod to *** Control Design The controller for each pair of actuator/sensor is: #+begin_src matlab - K_iff = 1000/s; + w0 = 2*pi*50; + K_iff = -5000/s * (s/w0)/(1 + s/w0); #+end_src The corresponding loop gains are shown in figure [[fig:iff_open_loop]]. @@ -1772,8 +1800,8 @@ The corresponding loop gains are shown in figure [[fig:iff_open_loop]]. ax1 = subplot(2, 1, 1); hold on; - for i=1:6 - plot(freqs, abs(squeeze(freqresp(K_iff*G_iff(['Fnlm', num2str(i)], ['Fnl', num2str(i)]), freqs, 'Hz')))); + for i=1:length(masses) + plot(freqs, abs(squeeze(freqresp(K_iff*Gm_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz')))); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); @@ -1781,14 +1809,16 @@ The corresponding loop gains are shown in figure [[fig:iff_open_loop]]. ax2 = subplot(2, 1, 2); hold on; - for i=1:6 - plot(freqs, 180/pi*angle(squeeze(freqresp(K_iff*G_iff(['Fnlm', num2str(i)], ['Fnl', num2str(i)]), freqs, 'Hz')))); + for i=1:length(masses) + plot(freqs, 180/pi*angle(squeeze(freqresp(K_iff*Gm_iff{i}('Fnlm1', 'Fnl1'), freqs, 'Hz'))), ... + 'DisplayName', sprintf('$M = %.0f$ [kg]', masses(i))); end hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylim([-180, 180]); yticks([-180, -90, 0, 90, 180]); + legend('location', 'southwest'); linkaxes([ax1,ax2],'x'); #+end_src @@ -1814,94 +1844,38 @@ We save the controller for further analysis. save('./active_damping/mat/K_iff.mat', 'K_iff'); #+end_src -*** IFF with High Pass Filter -#+begin_src matlab - w_hpf = 2*pi*10; % Cut-off frequency for the high pass filter [rad/s] - - K_iff = 2*pi*200/s * (s/w_hpf)/(s/w_hpf + 1); -#+end_src - -The corresponding loop gains are shown in figure [[fig:iff_hpf_open_loop]]. -#+begin_src matlab :exports none - freqs = logspace(0, 3, 1000); - - figure; - - ax1 = subplot(2, 1, 1); - hold on; - for i=1:6 - plot(freqs, abs(squeeze(freqresp(K_iff*G_iff(['Fnlm', num2str(i)], ['Fnl', num2str(i)]), freqs, 'Hz')))); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]); - - ax2 = subplot(2, 1, 2); - hold on; - for i=1:6 - plot(freqs, 180/pi*angle(squeeze(freqresp(K_iff*G_iff(['Fnlm', num2str(i)], ['Fnl', num2str(i)]), freqs, 'Hz')))); - end - hold off; - set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); - ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - - linkaxes([ax1,ax2],'x'); -#+end_src - -#+HEADER: :tangle no :exports results :results none :noweb yes -#+begin_src matlab :var filepath="figs/iff_hpf_open_loop.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") - <> -#+end_src - -#+NAME: fig:iff_hpf_open_loop -#+CAPTION: Loop Gain for the Integral Force Feedback with an High pass filter ([[./figs/iff_hpf_open_loop.png][png]], [[./figs/iff_hpf_open_loop.pdf][pdf]]) -[[file:figs/iff_hpf_open_loop.png]] - -We create the diagonal controller and we add a minus sign as we have a positive -feedback architecture. -#+begin_src matlab - K_iff = -K_iff*eye(6); -#+end_src - -We save the controller for further analysis. -#+begin_src matlab - save('./active_damping/mat/K_iff_hpf.mat', 'K_iff'); -#+end_src - ** TODO Identification of the damped plant :noexport: -*** Initialize the Simulation +*** Initialize the Simulation :noexport: We initialize all the stages with the default parameters. #+begin_src matlab - initializeGround(); - initializeGranite(); - initializeTy(); - initializeRy(); - initializeRz(); - initializeMicroHexapod(); - initializeAxisc(); - initializeMirror(); + initializeGround(); + initializeGranite(); + initializeTy(); + initializeRy(); + initializeRz(); + initializeMicroHexapod(); + initializeAxisc(); + initializeMirror(); #+end_src -The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. +No disturbances. +#+begin_src matlab + initializeDisturbances('enable', false); +#+end_src + +The nano-hexapod is a piezoelectric hexapod. #+begin_src matlab initializeNanoHexapod('actuator', 'piezo'); initializeSample('mass', 50); #+end_src -We set the references to zero. -#+begin_src matlab - initializeReferences(); -#+end_src - -And all the controllers are set to 0 except for the IFF. +And all the controllers are set to 0. #+begin_src matlab K = tf(zeros(6)); save('./mat/controllers.mat', 'K', '-append'); K_ine = tf(zeros(6)); save('./mat/controllers.mat', 'K_ine', '-append'); - K_iff = K_iff; + load('./active_damping/mat/K_iff.mat', 'K_iff'); save('./mat/controllers.mat', 'K_iff', '-append'); K_dvf = tf(zeros(6)); save('./mat/controllers.mat', 'K_dvf', '-append'); @@ -1919,26 +1893,24 @@ First, we identify the dynamics of the system using the =linearize= function. %% Input/Output definition clear io; io_i = 1; - io(io_i) = linio([mdl, '/Fnl'], 1, 'openinput'); io_i = io_i + 1; - io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Dnlm'); io_i = io_i + 1; - io(io_i) = linio([mdl, '/Micro-Station'], 3, 'openoutput', [], 'Fnlm'); io_i = io_i + 1; + io(io_i) = linio([mdl, '/Fnl'], 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 = linearize(mdl, io, 0.5, options); G.InputName = {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'}; - G.OutputName = {'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6', ... - 'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}; + G.OutputName = {'Dxn', 'Dyn', 'Dzn', 'Rxn', 'Ryn', 'Rzn'}; #+end_src -We then create transfer functions corresponding to the active damping plants. #+begin_src matlab - G_iff = minreal(G({'Fnlm1', 'Fnlm2', 'Fnlm3', 'Fnlm4', 'Fnlm5', 'Fnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'})); - % G_rmc = minreal(G({'Dnlm1', 'Dnlm2', 'Dnlm3', 'Dnlm4', 'Dnlm5', 'Dnlm6'}, {'Fnl1', 'Fnl2', 'Fnl3', 'Fnl4', 'Fnl5', 'Fnl6'})); + load('mat/stages.mat', 'nano_hexapod'); + G_cart_iff = G*inv(nano_hexapod.J'); + G_cart_iff.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; #+end_src And we save them for further analysis. #+begin_src matlab - save('./active_damping/mat/plants.mat', 'G_iff', '-append'); + save('./active_damping/mat/cart_plants.mat', 'G_cart_iff', '-append'); #+end_src *** TODO Sensitivity to disturbances @@ -2022,8 +1994,11 @@ As shown on figure [[fig:sensitivity_dist_iff]]: #+CAPTION: Sensitivity to force disturbances in various stages when IFF is applied ([[./figs/sensitivity_dist_stages_iff.png][png]], [[./figs/sensitivity_dist_stages_iff.pdf][pdf]]) [[file:figs/sensitivity_dist_stages_iff.png]] -*** TODO Damped Plant +*** Damped Plant Now, look at the new damped plant to control. +#+begin_src matlab + load('./active_damping/mat/cart_plants.mat', 'G_cart', 'G_cart_iff'); +#+end_src It damps the plant (resonance of the nano hexapod as well as other resonances) as shown in figure [[fig:plant_iff_damped]]. @@ -2034,59 +2009,57 @@ It damps the plant (resonance of the nano hexapod as well as other resonances) a ax1 = subplot(2, 2, 1); hold on; - plot(freqs, abs(squeeze(freqresp(G.G_cart('Dx', 'Fnx'), freqs, 'Hz')))); - plot(freqs, abs(squeeze(freqresp(G.G_cart('Dy', 'Fny'), freqs, 'Hz')))); - plot(freqs, abs(squeeze(freqresp(G.G_cart('Dz', 'Fnz'), freqs, 'Hz')))); + plot(freqs, abs(squeeze(freqresp(G_cart('Dxn', 'Fnx'), freqs, 'Hz')))); + plot(freqs, abs(squeeze(freqresp(G_cart('Dyn', 'Fny'), freqs, 'Hz')))); + plot(freqs, abs(squeeze(freqresp(G_cart('Dzn', 'Fnz'), freqs, 'Hz')))); set(gca,'ColorOrderIndex',1); - plot(freqs, abs(squeeze(freqresp(G_iff.G_cart('Dx', 'Fnx'), freqs, 'Hz'))), '--'); - plot(freqs, abs(squeeze(freqresp(G_iff.G_cart('Dy', 'Fny'), freqs, 'Hz'))), '--'); - plot(freqs, abs(squeeze(freqresp(G_iff.G_cart('Dz', 'Fnz'), freqs, 'Hz'))), '--'); + plot(freqs, abs(squeeze(freqresp(G_cart_iff('Dxn', 'Fnx'), freqs, 'Hz'))), '--'); + plot(freqs, abs(squeeze(freqresp(G_cart_iff('Dyn', 'Fny'), freqs, 'Hz'))), '--'); + plot(freqs, abs(squeeze(freqresp(G_cart_iff('Dzn', 'Fnz'), freqs, 'Hz'))), '--'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]'); ax2 = subplot(2, 2, 2); hold on; - plot(freqs, abs(squeeze(freqresp(G.G_cart('Rx', 'Mnx'), freqs, 'Hz')))); - plot(freqs, abs(squeeze(freqresp(G.G_cart('Ry', 'Mny'), freqs, 'Hz')))); - plot(freqs, abs(squeeze(freqresp(G.G_cart('Rz', 'Mnz'), freqs, 'Hz')))); + plot(freqs, abs(squeeze(freqresp(G_cart('Rxn', 'Mnx'), freqs, 'Hz')))); + plot(freqs, abs(squeeze(freqresp(G_cart('Ryn', 'Mny'), freqs, 'Hz')))); + plot(freqs, abs(squeeze(freqresp(G_cart('Rzn', 'Mnz'), freqs, 'Hz')))); set(gca,'ColorOrderIndex',1); - plot(freqs, abs(squeeze(freqresp(G_iff.G_cart('Rx', 'Mnx'), freqs, 'Hz'))), '--'); - plot(freqs, abs(squeeze(freqresp(G_iff.G_cart('Ry', 'Mny'), freqs, 'Hz'))), '--'); - plot(freqs, abs(squeeze(freqresp(G_iff.G_cart('Rz', 'Mnz'), freqs, 'Hz'))), '--'); + plot(freqs, abs(squeeze(freqresp(G_cart_iff('Rxn', 'Mnx'), freqs, 'Hz'))), '--'); + plot(freqs, abs(squeeze(freqresp(G_cart_iff('Ryn', 'Mny'), freqs, 'Hz'))), '--'); + plot(freqs, abs(squeeze(freqresp(G_cart_iff('Rzn', 'Mnz'), freqs, 'Hz'))), '--'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); ylabel('Amplitude [rad/(Nm)]'); xlabel('Frequency [Hz]'); ax3 = subplot(2, 2, 3); hold on; - plot(freqs, 180/pi*angle(squeeze(freqresp(G.G_cart('Dx', 'Fnx'), freqs, 'Hz'))), 'DisplayName', '$\left|D_x / F_{n,x}\right|$'); - plot(freqs, 180/pi*angle(squeeze(freqresp(G.G_cart('Dy', 'Fny'), freqs, 'Hz'))), 'DisplayName', '$\left|D_y / F_{n,y}\right|$'); - plot(freqs, 180/pi*angle(squeeze(freqresp(G.G_cart('Dz', 'Fnz'), freqs, 'Hz'))), 'DisplayName', '$\left|D_z / F_{n,z}\right|$'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart('Dxn', 'Fnx'), freqs, 'Hz')))), 'DisplayName', '$\left|D_x / F_{n,x}\right|$'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart('Dyn', 'Fny'), freqs, 'Hz')))), 'DisplayName', '$\left|D_y / F_{n,y}\right|$'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart('Dzn', 'Fnz'), freqs, 'Hz')))), 'DisplayName', '$\left|D_z / F_{n,z}\right|$'); set(gca,'ColorOrderIndex',1); - plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff.G_cart('Dx', 'Fnx'), freqs, 'Hz'))), '--', 'HandleVisibility', 'off'); - plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff.G_cart('Dy', 'Fny'), freqs, 'Hz'))), '--', 'HandleVisibility', 'off'); - plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff.G_cart('Dz', 'Fnz'), freqs, 'Hz'))), '--', 'HandleVisibility', 'off'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart_iff('Dxn', 'Fnx'), freqs, 'Hz')))), '--', 'HandleVisibility', 'off'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart_iff('Dyn', 'Fny'), freqs, 'Hz')))), '--', 'HandleVisibility', 'off'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart_iff('Dzn', 'Fnz'), freqs, 'Hz')))), '--', 'HandleVisibility', 'off'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northwest'); + yticks([-540:180:540]); + legend('location', 'southwest'); ax4 = subplot(2, 2, 4); hold on; - plot(freqs, 180/pi*angle(squeeze(freqresp(G.G_cart('Rx', 'Mnx'), freqs, 'Hz'))), 'DisplayName', '$\left|R_x / M_{n,x}\right|$'); - plot(freqs, 180/pi*angle(squeeze(freqresp(G.G_cart('Ry', 'Mny'), freqs, 'Hz'))), 'DisplayName', '$\left|R_y / M_{n,y}\right|$'); - plot(freqs, 180/pi*angle(squeeze(freqresp(G.G_cart('Rz', 'Mnz'), freqs, 'Hz'))), 'DisplayName', '$\left|R_z / M_{n,z}\right|$'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart('Rxn', 'Mnx'), freqs, 'Hz')))), 'DisplayName', '$\left|R_x / M_{n,x}\right|$'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart('Ryn', 'Mny'), freqs, 'Hz')))), 'DisplayName', '$\left|R_y / M_{n,y}\right|$'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart('Rzn', 'Mnz'), freqs, 'Hz')))), 'DisplayName', '$\left|R_z / M_{n,z}\right|$'); set(gca,'ColorOrderIndex',1); - plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff.G_cart('Rx', 'Mnx'), freqs, 'Hz'))), '--', 'HandleVisibility', 'off'); - plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff.G_cart('Ry', 'Mny'), freqs, 'Hz'))), '--', 'HandleVisibility', 'off'); - plot(freqs, 180/pi*angle(squeeze(freqresp(G_iff.G_cart('Rz', 'Mnz'), freqs, 'Hz'))), '--', 'HandleVisibility', 'off'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart_iff('Rxn', 'Mnx'), freqs, 'Hz')))), '--', 'HandleVisibility', 'off'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart_iff('Ryn', 'Mny'), freqs, 'Hz')))), '--', 'HandleVisibility', 'off'); + plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_cart_iff('Rzn', 'Mnz'), freqs, 'Hz')))), '--', 'HandleVisibility', 'off'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); - ylim([-180, 180]); - yticks([-180, -90, 0, 90, 180]); - legend('location', 'northwest'); + yticks([-540:180:540]); + legend('location', 'southwest'); linkaxes([ax1,ax2,ax3,ax4],'x'); #+end_src @@ -2110,10 +2083,12 @@ However, it increases coupling at low frequency (figure [[fig:plant_iff_coupling for iy = 1:6 subplot(6, 6, (ix-1)*6 + iy); hold on; - plot(freqs, abs(squeeze(freqresp(G.G_cart(ix, iy), freqs, 'Hz'))), 'k-'); - plot(freqs, abs(squeeze(freqresp(G_iff.G_cart(ix, iy), freqs, 'Hz'))), 'k--'); + plot(freqs, abs(squeeze(freqresp(G_cart(ix, iy), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(G_cart_iff(ix, iy), freqs, 'Hz'))), 'k--'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - ylim([1e-12, 1e-5]); + ylim([1e-13, 1e-4]); + xticks([]) + yticks([]) end end #+end_src @@ -3673,8 +3648,8 @@ This Matlab function is accessible [[file:src/prepareTomographyExperiment.m][her #+begin_src matlab arguments args.nass_actuator char {mustBeMember(args.nass_actuator,{'piezo', 'lorentz'})} = 'piezo' - args.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 - args.Ry_period (1,1) double {mustBeNumeric, mustBePositive} = 1 + args.sample_mass (1,1) double {mustBeNumeric, mustBePositive} = 50 % [kg] + args.Rz_period (1,1) double {mustBeNumeric, mustBePositive} = 1 % [s] end #+end_src @@ -3702,7 +3677,7 @@ The nano-hexapod is a piezoelectric hexapod and the sample has a mass of 50kg. We set the references to zero. #+begin_src matlab - initializeReferences('Rz_type', 'rotating', 'Rz_period', args.Ry_period); + initializeReferences('Rz_type', 'rotating', 'Rz_period', args.Rz_period); #+end_src And all the controllers are set to 0. @@ -3762,7 +3737,7 @@ And all the controllers are set to 0. #+end_src #+begin_src matlab - lzoad('mat/stages.mat', 'nano_hexapod'); + load('mat/stages.mat', 'nano_hexapod'); G_cart = G*inv(nano_hexapod.J'); G_cart.InputName = {'Fnx', 'Fny', 'Fnz', 'Mnx', 'Mny', 'Mnz'}; #+end_src diff --git a/active_damping/mat/K_iff.mat b/active_damping/mat/K_iff.mat index 4d863b1..0c65868 100644 Binary files a/active_damping/mat/K_iff.mat and b/active_damping/mat/K_iff.mat differ diff --git a/active_damping/mat/cart_plants.mat b/active_damping/mat/cart_plants.mat new file mode 100644 index 0000000..3da674d Binary files /dev/null and b/active_damping/mat/cart_plants.mat differ diff --git a/active_damping/mat/undamped_plants.mat b/active_damping/mat/undamped_plants.mat index a773304..a2032e1 100644 Binary files a/active_damping/mat/undamped_plants.mat and b/active_damping/mat/undamped_plants.mat differ diff --git a/active_damping/matlab/sim_nass_active_damping.slx b/active_damping/matlab/sim_nass_active_damping.slx index 52ae7e1..957b081 100644 Binary files a/active_damping/matlab/sim_nass_active_damping.slx and b/active_damping/matlab/sim_nass_active_damping.slx differ diff --git a/figs/iff_open_loop.pdf b/figs/iff_open_loop.pdf index 7274066..01995e8 100644 Binary files a/figs/iff_open_loop.pdf and b/figs/iff_open_loop.pdf differ diff --git a/figs/iff_open_loop.png b/figs/iff_open_loop.png index 66bcf5c..2b83455 100644 Binary files a/figs/iff_open_loop.png and b/figs/iff_open_loop.png differ diff --git a/figs/iff_plant.pdf b/figs/iff_plant.pdf index 4b6cd51..3f6dd43 100644 Binary files a/figs/iff_plant.pdf and b/figs/iff_plant.pdf differ diff --git a/figs/iff_plant.png b/figs/iff_plant.png index 76b3107..96a6189 100644 Binary files a/figs/iff_plant.png and b/figs/iff_plant.png differ diff --git a/figs/nass_active_damping_dvf_plant.pdf b/figs/nass_active_damping_dvf_plant.pdf index 7f15b15..b2ee42c 100644 Binary files a/figs/nass_active_damping_dvf_plant.pdf and b/figs/nass_active_damping_dvf_plant.pdf differ diff --git a/figs/nass_active_damping_dvf_plant.png b/figs/nass_active_damping_dvf_plant.png index 8fb858e..1cbac84 100644 Binary files a/figs/nass_active_damping_dvf_plant.png and b/figs/nass_active_damping_dvf_plant.png differ diff --git a/figs/nass_active_damping_iff_plant.pdf b/figs/nass_active_damping_iff_plant.pdf index ffe5b58..bad462e 100644 Binary files a/figs/nass_active_damping_iff_plant.pdf and b/figs/nass_active_damping_iff_plant.pdf differ diff --git a/figs/nass_active_damping_iff_plant.png b/figs/nass_active_damping_iff_plant.png index 5595801..90d8201 100644 Binary files a/figs/nass_active_damping_iff_plant.png and b/figs/nass_active_damping_iff_plant.png differ diff --git a/figs/nass_active_damping_inertial_plant.pdf b/figs/nass_active_damping_inertial_plant.pdf index bfebba1..976706a 100644 Binary files a/figs/nass_active_damping_inertial_plant.pdf and b/figs/nass_active_damping_inertial_plant.pdf differ diff --git a/figs/nass_active_damping_inertial_plant.png b/figs/nass_active_damping_inertial_plant.png index 9b47ff8..f797924 100644 Binary files a/figs/nass_active_damping_inertial_plant.png and b/figs/nass_active_damping_inertial_plant.png differ diff --git a/figs/plant_iff_coupling.pdf b/figs/plant_iff_coupling.pdf index 0d61573..6978566 100644 Binary files a/figs/plant_iff_coupling.pdf and b/figs/plant_iff_coupling.pdf differ diff --git a/figs/plant_iff_coupling.png b/figs/plant_iff_coupling.png index 95ce53c..7e1fcf5 100644 Binary files a/figs/plant_iff_coupling.png and b/figs/plant_iff_coupling.png differ diff --git a/figs/plant_iff_damped.pdf b/figs/plant_iff_damped.pdf index 2a25ca0..559248f 100644 Binary files a/figs/plant_iff_damped.pdf and b/figs/plant_iff_damped.pdf differ diff --git a/figs/plant_iff_damped.png b/figs/plant_iff_damped.png index f389db5..2f17571 100644 Binary files a/figs/plant_iff_damped.png and b/figs/plant_iff_damped.png differ
    Table 1: Conclusion on the variability of the system dynamics for active damping