diff --git a/figs/uniaxial-cas-iff-vc.png b/figs/uniaxial-cas-iff-vc.png new file mode 100644 index 0000000..891173f Binary files /dev/null and b/figs/uniaxial-cas-iff-vc.png differ diff --git a/figs/uniaxial-sensitivity-vc-disturbances.png b/figs/uniaxial-sensitivity-vc-disturbances.png new file mode 100644 index 0000000..d00a5f8 Binary files /dev/null and b/figs/uniaxial-sensitivity-vc-disturbances.png differ diff --git a/figs/uniaxial-sensitivity-vc-force-dist.png b/figs/uniaxial-sensitivity-vc-force-dist.png new file mode 100644 index 0000000..4987fb2 Binary files /dev/null and b/figs/uniaxial-sensitivity-vc-force-dist.png differ diff --git a/figs/uniaxial-vc-cas-dist.png b/figs/uniaxial-vc-cas-dist.png new file mode 100644 index 0000000..0cc0ec3 Binary files /dev/null and b/figs/uniaxial-vc-cas-dist.png differ diff --git a/figs/uniaxial-vc-psd-dist.png b/figs/uniaxial-vc-psd-dist.png new file mode 100644 index 0000000..d6efaa0 Binary files /dev/null and b/figs/uniaxial-vc-psd-dist.png differ diff --git a/figs/uniaxial_iff_vc_open_loop.png b/figs/uniaxial_iff_vc_open_loop.png new file mode 100644 index 0000000..f7b62c0 Binary files /dev/null and b/figs/uniaxial_iff_vc_open_loop.png differ diff --git a/uniaxial/index.html b/uniaxial/index.html index 71a43a3..82f55d3 100644 --- a/uniaxial/index.html +++ b/uniaxial/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Simscape Uniaxial Model @@ -280,60 +280,72 @@ for the JavaScript code in this tag.

Table of Contents

@@ -348,11 +360,11 @@ The idea is to use the same model as the full Simscape Model but to restrict the This is done in order to more easily study the system and evaluate control techniques.

-
-

1 Simscape Model

+
+

1 Simscape Model

-A schematic of the uniaxial model used for simulations is represented in figure 1. +A schematic of the uniaxial model used for simulations is represented in figure 1.

@@ -396,7 +408,7 @@ The control signal \(u\) is: -

+

uniaxial-model-nass-flexible.png

Figure 1: Schematic of the uniaxial model used

@@ -405,11 +417,11 @@ The control signal \(u\) is:

Few active damping techniques will be compared in order to decide which sensor is to be included in the system. -Schematics of the active damping techniques are displayed in figure 2. +Schematics of the active damping techniques are displayed in figure 2.

-
+

uniaxial-model-nass-flexible-active-damping.png

Figure 2: Comparison of used active damping techniques

@@ -417,16 +429,16 @@ Schematics of the active damping techniques are displayed in figure -

2 Undamped System

+
+

2 Undamped System

Let's start by study the undamped system.

-
-

2.1 Init

+
+

2.1 Init

We initialize all the stages with the default parameters. @@ -438,8 +450,8 @@ All the controllers are set to 0 (Open Loop).

-
-

2.2 Identification

+
+

2.2 Identification

We identify the dynamics of the system. @@ -502,19 +514,19 @@ Finally, we save the identified system dynamics for further analysis.

-
-

2.3 Sensitivity to Disturbances

+
+

2.3 Sensitivity to Disturbances

We show several plots representing the sensitivity to disturbances:

-
+

uniaxial-sensitivity-disturbances.png

Figure 3: Sensitivity to disturbances (png, pdf)

@@ -522,7 +534,7 @@ We show several plots representing the sensitivity to disturbances: -
+

uniaxial-sensitivity-force-dist.png

Figure 4: Sensitivity to disturbances (png, pdf)

@@ -530,8 +542,8 @@ We show several plots representing the sensitivity to disturbances:
-
-

2.4 Noise Budget

+
+

2.4 Noise Budget

We first load the measured PSD of the disturbance. @@ -543,12 +555,12 @@ We first load the measured PSD of the disturbance.

The effect of these disturbances on the distance \(D\) is computed below. -The PSD of the obtain distance \(D\) due to each of the perturbation is shown in figure 5 and the Cumulative Amplitude Spectrum is shown in figure 6. +The PSD of the obtain distance \(D\) due to each of the perturbation is shown in figure 5 and the Cumulative Amplitude Spectrum is shown in figure 6.

-The Root Mean Square value of the obtained displacement \(D\) is computed below and can be determined from the figure 6. +The Root Mean Square value of the obtained displacement \(D\) is computed below and can be determined from the figure 6.

 3.3793e-06
@@ -556,7 +568,7 @@ The Root Mean Square value of the obtained displacement \(D\) is computed below
 
 
 
-
+

uniaxial-psd-dist.png

Figure 5: caption (png, pdf)

@@ -564,7 +576,7 @@ The Root Mean Square value of the obtained displacement \(D\) is computed below -
+

uniaxial-cas-dist.png

Figure 6: caption (png, pdf)

@@ -572,16 +584,16 @@ The Root Mean Square value of the obtained displacement \(D\) is computed below
-
-

2.5 Plant

+
+

2.5 Plant

-The transfer function from the force \(F\) applied by the nano-hexapod to the position of the sample \(D\) is shown in figure 7. +The transfer function from the force \(F\) applied by the nano-hexapod to the position of the sample \(D\) is shown in figure 7. It corresponds to the plant to control.

-
+

uniaxial-plant.png

Figure 7: Bode plot of the Plant (png, pdf)

@@ -590,21 +602,21 @@ It corresponds to the plant to control.
-
-

3 Integral Force Feedback

+
+

3 Integral Force Feedback

- +

-
+

uniaxial-model-nass-flexible-iff.png

Figure 8: Uniaxial IFF Control Schematic

-
-

3.1 Control Design

+
+

3.1 Control Design

load('./uniaxial/mat/plants.mat', 'G');
@@ -616,7 +628,7 @@ Let's look at the transfer function from actuator forces in the nano-hexapod to
 

-
+

uniaxial_iff_plant.png

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

@@ -631,7 +643,7 @@ The controller for each pair of actuator/sensor is:
-
+

uniaxial_iff_open_loop.png

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

@@ -639,8 +651,8 @@ The controller for each pair of actuator/sensor is:
-
-

3.2 Identification

+
+

3.2 Identification

Let's initialize the system prior to identification. @@ -723,18 +735,18 @@ G_iff.OutputName = {

-
-

3.3 Sensitivity to Disturbance

+
+

3.3 Sensitivity to Disturbance

-
+

uniaxial_sensitivity_dist_iff.png

Figure 11: Sensitivity to disturbance once the IFF controller is applied to the system (png, pdf)

-
+

uniaxial_sensitivity_dist_stages_iff.png

Figure 12: Sensitivity to force disturbances in various stages when IFF is applied (png, pdf)

@@ -742,11 +754,11 @@ G_iff.OutputName = {
-
-

3.4 Damped Plant

+
+

3.4 Damped Plant

-
+

uniaxial_plant_iff_damped.png

Figure 13: Damped Plant after IFF is applied (png, pdf)

@@ -754,8 +766,8 @@ G_iff.OutputName = {
-
-

3.5 Conclusion

+
+

3.5 Conclusion

@@ -767,25 +779,25 @@ Integral Force Feedback:

-
-

4 Relative Motion Control

+
+

4 Relative Motion Control

- +

In the Relative Motion Control (RMC), a derivative feedback is applied between the measured actuator displacement to the actuator force input.

-
+

uniaxial-model-nass-flexible-rmc.png

Figure 14: Uniaxial RMC Control Schematic

-
-

4.1 Control Design

+
+

4.1 Control Design

load('./uniaxial/mat/plants.mat', 'G');
@@ -797,7 +809,7 @@ Let's look at the transfer function from actuator forces in the nano-hexapod to
 

-
+

uniaxial_rmc_plant.png

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

@@ -813,7 +825,7 @@ A Low pass Filter is added to make the controller transfer function proper.
-
+

uniaxial_rmc_open_loop.png

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

@@ -821,8 +833,8 @@ A Low pass Filter is added to make the controller transfer function proper.
-
-

4.2 Identification

+
+

4.2 Identification

Let's initialize the system prior to identification. @@ -906,18 +918,18 @@ G_rmc.OutputName = { -

-

4.3 Sensitivity to Disturbance

+
+

4.3 Sensitivity to Disturbance

-
+

uniaxial_sensitivity_dist_rmc.png

Figure 17: Sensitivity to disturbance once the RMC controller is applied to the system (png, pdf)

-
+

uniaxial_sensitivity_dist_stages_rmc.png

Figure 18: Sensitivity to force disturbances in various stages when RMC is applied (png, pdf)

@@ -925,11 +937,11 @@ G_rmc.OutputName = {
-
-

4.4 Damped Plant

+
+

4.4 Damped Plant

-
+

uniaxial_plant_rmc_damped.png

Figure 19: Damped Plant after RMC is applied (png, pdf)

@@ -937,8 +949,8 @@ G_rmc.OutputName = {
-
-

4.5 Conclusion

+
+

4.5 Conclusion

@@ -950,25 +962,25 @@ Relative Motion Control:

-
-

5 Direct Velocity Feedback

+
+

5 Direct Velocity Feedback

- +

In the Relative Motion Control (RMC), a feedback is applied between the measured velocity of the platform to the actuator force input.

-
+

uniaxial-model-nass-flexible-dvf.png

Figure 20: Uniaxial DVF Control Schematic

-
-

5.1 Control Design

+
+

5.1 Control Design

load('./uniaxial/mat/plants.mat', 'G');
@@ -976,7 +988,7 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
 
-
+

uniaxial_dvf_plant.png

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

@@ -988,7 +1000,7 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
-
+

uniaxial_dvf_loop_gain.png

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

@@ -996,8 +1008,8 @@ In the Relative Motion Control (RMC), a feedback is applied between the measured
-
-

5.2 Identification

+
+

5.2 Identification

Let's initialize the system prior to identification. @@ -1080,18 +1092,18 @@ G_dvf.OutputName = {

-
-

5.3 Sensitivity to Disturbance

+
+

5.3 Sensitivity to Disturbance

-
+

uniaxial_sensitivity_dist_dvf.png

Figure 23: Sensitivity to disturbance once the DVF controller is applied to the system (png, pdf)

-
+

uniaxial_sensitivity_dist_stages_dvf.png

Figure 24: Sensitivity to force disturbances in various stages when DVF is applied (png, pdf)

@@ -1099,11 +1111,11 @@ G_dvf.OutputName = {
-
-

5.4 Damped Plant

+
+

5.4 Damped Plant

-
+

uniaxial_plant_dvf_damped.png

Figure 25: Damped Plant after DVF is applied (png, pdf)

@@ -1111,8 +1123,8 @@ G_dvf.OutputName = {
-
-

5.5 Conclusion

+
+

5.5 Conclusion

@@ -1123,12 +1135,12 @@ Direct Velocity Feedback:

-
-

6 With Cedrat Piezo-electric Actuators

+
+

6 With Cedrat Piezo-electric Actuators

-
-

6.1 Identification

+
+

6.1 Identification

We identify the dynamics of the system. @@ -1183,15 +1195,15 @@ G.OutputName = {

-
-

6.2 Control Design

+
+

6.2 Control Design

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.

-
+

uniaxial_cedrat_plant.png

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

@@ -1206,7 +1218,7 @@ The controller for each pair of actuator/sensor is:
-
+

uniaxial_cedrat_open_loop.png

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

@@ -1214,8 +1226,8 @@ The controller for each pair of actuator/sensor is:
-
-

6.3 Identification

+
+

6.3 Identification

Let's initialize the system prior to identification. @@ -1298,18 +1310,18 @@ G_cedrat.OutputName = {

-
-

6.4 Sensitivity to Disturbance

+
+

6.4 Sensitivity to Disturbance

-
+

uniaxial_sensitivity_dist_cedrat.png

Figure 28: Sensitivity to disturbance once the CEDRAT controller is applied to the system (png, pdf)

-
+

uniaxial_sensitivity_dist_stages_cedrat.png

Figure 29: Sensitivity to force disturbances in various stages when CEDRAT is applied (png, pdf)

@@ -1317,11 +1329,11 @@ G_cedrat.OutputName = {
-
-

6.5 Damped Plant

+
+

6.5 Damped Plant

-
+

uniaxial_plant_cedrat_damped.png

Figure 30: Damped Plant after CEDRAT is applied (png, pdf)

@@ -1329,8 +1341,8 @@ G_cedrat.OutputName = {
-
-

6.6 Conclusion

+
+

6.6 Conclusion

@@ -1342,15 +1354,15 @@ This gives similar results than with a classical force sensor.

-
-

7 Comparison of Active Damping Techniques

+
+

7 Comparison of Active Damping Techniques

- +

-
-

7.1 Load the plants

+
+

7.1 Load the plants

load('./uniaxial/mat/plants.mat', 'G', 'G_iff', 'G_rmc', 'G_dvf');
@@ -1359,11 +1371,11 @@ This gives similar results than with a classical force sensor.
 
-
-

7.2 Sensitivity to Disturbance

+
+

7.2 Sensitivity to Disturbance

-
+

uniaxial_sensitivity_ground_motion.png

Figure 31: Sensitivity to Ground Motion - Comparison (png, pdf)

@@ -1371,21 +1383,21 @@ This gives similar results than with a classical force sensor. -
+

uniaxial_sensitivity_direct_force.png

Figure 32: Sensitivity to disturbance - Comparison (png, pdf)

-
+

uniaxial_sensitivity_fty.png

Figure 33: Sensitivity to force disturbances - Comparison (png, pdf)

-
+

uniaxial_sensitivity_frz.png

Figure 34: Sensitivity to force disturbances - Comparison (png, pdf)

@@ -1393,8 +1405,8 @@ This gives similar results than with a classical force sensor.
-
-

7.3 Noise Budget

+
+

7.3 Noise Budget

We first load the measured PSD of the disturbance. @@ -1406,10 +1418,10 @@ We first load the measured PSD of the disturbance.

The effect of these disturbances on the distance \(D\) is computed for all active damping techniques. -We then compute the Cumulative Amplitude Spectrum (figure 35). +We then compute the Cumulative Amplitude Spectrum (figure 35).

-
+

uniaxial-comp-cas-dist.png

Figure 35: Comparison of the Cumulative Amplitude Spectrum of \(D\) for different active damping techniques (png, pdf)

@@ -1418,7 +1430,7 @@ We then compute the Cumulative Amplitude Spectrum (figure

The obtained Root Mean Square Value for each active damping technique is shown below.

- +
@@ -1461,11 +1473,11 @@ It is important to note that the effect of direct forces applied to the sample a -
-

7.4 Damped Plant

+
+

7.4 Damped Plant

-
+

uniaxial_plant_damped_comp.png

Figure 36: Damped Plant - Comparison (png, pdf)

@@ -1473,10 +1485,10 @@ It is important to note that the effect of direct forces applied to the sample a
-
-

7.5 Conclusion

+
+

7.5 Conclusion

-
Table 1: Obtain Root Mean Square value of \(D\) for each Active Damping Technique applied
+
@@ -1543,10 +1555,303 @@ It is important to note that the effect of direct forces applied to the sample a +
+

8 Voice Coil

+
+
+
+

8.1 Init

+
+

+We initialize all the stages with the default parameters. +The nano-hexapod is an hexapod with voice coils and the sample has a mass of 50kg. +

+ +

+All the controllers are set to 0 (Open Loop). +

+
+
+
+

8.2 Identification

+
+

+We identify the dynamics of the system. +

+
+
%% Options for Linearized
+options = linearizeOptions;
+options.SampleTime = 0;
+
+%% Name of the Simulink File
+mdl = 'sim_nano_station_uniaxial';
+
+
+ +

+The inputs and outputs are defined below and corresponds to the name of simulink blocks. +

+
+
%% Input/Output definition
+io(1)  = linio([mdl, '/Dw'],   1, 'input'); % Ground Motion
+io(2)  = linio([mdl, '/Fs'],   1, 'input'); % Force applied on the sample
+io(3)  = linio([mdl, '/Fnl'],  1, 'input'); % Force applied by the NASS
+io(4)  = linio([mdl, '/Fdty'], 1, 'input'); % Parasitic force Ty
+io(5)  = linio([mdl, '/Fdrz'], 1, 'input'); % Parasitic force Rz
+
+io(6)  = linio([mdl, '/Dsm'],  1, 'output'); % Displacement of the sample
+io(7)  = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
+io(8)  = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
+io(9)  = linio([mdl, '/Dgm'],  1, 'output'); % Absolute displacement of the granite
+io(10) = linio([mdl, '/Vlm'],  1, 'output'); % Measured absolute velocity of the top NASS platform
+
+
+ +

+Finally, we use the linearize Matlab function to extract a state space model from the simscape model. +

+
+
%% Run the linearization
+G_vc = linearize(mdl, io, options);
+G_vc.InputName  = {'Dw',   ... % Ground Motion [m]
+                   'Fs',   ... % Force Applied on Sample [N]
+                   'Fn',   ... % Force applied by NASS [N]
+                   'Fty',  ... % Parasitic Force Ty [N]
+                   'Frz'};     % Parasitic Force Rz [N]
+G_vc.OutputName = {'D',    ... % Measured sample displacement x.r.t. granite [m]
+                   'Fnm',  ... % Force Sensor in NASS [N]
+                   'Dnm',  ... % Displacement Sensor in NASS [m]
+                   'Dgm',  ... % Asbolute displacement of Granite [m]
+                   'Vlm'}; ... % Absolute Velocity of NASS [m/s]
+
+
+ +

+Finally, we save the identified system dynamics for further analysis. +

+
+
save('./uniaxial/mat/plants.mat', 'G_vc', '-append');
+
+
+
+
+ +
+

8.3 Sensitivity to Disturbances

+
+

+We load the dynamics when using a piezo-electric nano hexapod to compare the results. +

+
+
load('./uniaxial/mat/plants.mat', 'G');
+
+
+ +

+We show several plots representing the sensitivity to disturbances: +

+
    +
  • in figure 37 the transfer functions from ground motion \(D_w\) to the sample position \(D\) and the transfer function from direct force on the sample \(F_s\) to the sample position \(D\) are shown
  • +
  • in figure 38, it is the effect of parasitic forces of the positioning stages (\(F_{ty}\) and \(F_{rz}\)) on the position \(D\) of the sample that are shown
  • +
+ + +
+

uniaxial-sensitivity-vc-disturbances.png +

+

Figure 37: Sensitivity to disturbances (png, pdf)

+
+ + +
+

uniaxial-sensitivity-vc-force-dist.png +

+

Figure 38: Sensitivity to disturbances (png, pdf)

+
+
+
+ +
+

8.4 Noise Budget

+
+

+We first load the measured PSD of the disturbance. +

+
+
load('./disturbances/mat/dist_psd.mat', 'dist_f');
+
+
+ +

+The effect of these disturbances on the distance \(D\) is computed below. +The PSD of the obtain distance \(D\) due to each of the perturbation is shown in figure 39 and the Cumulative Amplitude Spectrum is shown in figure 40. +

+ +

+The Root Mean Square value of the obtained displacement \(D\) is computed below and can be determined from the figure 40. +

+
+4.8793e-06
+
+ + + +
+

uniaxial-vc-psd-dist.png +

+

Figure 39: PSD of the displacement \(D\) due to disturbances (png, pdf)

+
+ + +
+

uniaxial-vc-cas-dist.png +

+

Figure 40: CAS of the displacement \(D\) due the disturbances (png, pdf)

+
+ +
+

+Even though the RMS value of the displacement \(D\) is lower when using a piezo-electric actuator, the motion is mainly due to high frequency disturbances which are more difficult to control (an higher control bandwidth is required). +

+ +

+Thus, it may be desirable to use voice coil actuators. +

+ +
+
+
+
+

8.5 Integral Force Feedback

+
+
+
K_iff = -20/s;
+
+
+ + +
+

uniaxial_iff_vc_open_loop.png +

+

Figure 41: Open Loop Transfer Function for IFF control when using a voice coil actuator (png, pdf)

+
+
+
+ +
+

8.6 Identification of the Damped Plant

+
+

+Let's initialize the system prior to identification. +

+
+
initializeGround();
+initializeGranite();
+initializeTy();
+initializeRy();
+initializeRz();
+initializeMicroHexapod();
+initializeAxisc();
+initializeMirror();
+initializeNanoHexapod(struct('actuator', 'lorentz'));
+initializeSample(struct('mass', 50));
+
+
+ +

+All the controllers are set to 0. +

+
+
K = tf(0);
+save('./mat/controllers.mat', 'K', '-append');
+K_iff = -K_iff;
+save('./mat/controllers.mat', 'K_iff', '-append');
+K_rmc = tf(0);
+save('./mat/controllers.mat', 'K_rmc', '-append');
+K_dvf = tf(0);
+save('./mat/controllers.mat', 'K_dvf', '-append');
+
+
+ +
+
%% Options for Linearized
+options = linearizeOptions;
+options.SampleTime = 0;
+
+%% Name of the Simulink File
+mdl = 'sim_nano_station_uniaxial';
+
+
+ +
+
%% Input/Output definition
+io(1)  = linio([mdl, '/Dw'],    1, 'input');  % Ground Motion
+io(2)  = linio([mdl, '/Fs'],    1, 'input');  % Force applied on the sample
+io(3)  = linio([mdl, '/Fnl'],   1, 'input');  % Force applied by the NASS
+io(4)  = linio([mdl, '/Fdty'],  1, 'input');  % Parasitic force Ty
+io(5)  = linio([mdl, '/Fdrz'],  1, 'input');  % Parasitic force Rz
+
+io(6)  = linio([mdl, '/Dsm'],  1, 'output'); % Displacement of the sample
+io(7)  = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs
+io(8)  = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs
+io(9)  = linio([mdl, '/Dgm'],  1, 'output'); % Absolute displacement of the granite
+io(10) = linio([mdl, '/Vlm'],  1, 'output'); % Measured absolute velocity of the top NASS platform
+
+
+ +
+
%% Run the linearization
+G_vc_iff = linearize(mdl, io, options);
+G_vc_iff.InputName  = {'Dw',   ... % Ground Motion [m]
+                       'Fs',   ... % Force Applied on Sample [N]
+                       'Fn',   ... % Force applied by NASS [N]
+                       'Fty',  ... % Parasitic Force Ty [N]
+                       'Frz'};     % Parasitic Force Rz [N]
+G_vc_iff.OutputName = {'D',    ... % Measured sample displacement x.r.t. granite [m]
+                       'Fnm',  ... % Force Sensor in NASS [N]
+                       'Dnm',  ... % Displacement Sensor in NASS [m]
+                       'Dgm',  ... % Asbolute displacement of Granite [m]
+                       'Vlm'}; ... % Absolute Velocity of NASS [m/s]
+
+
+
+
+ +
+

8.7 Noise Budget

+
+

+We compute the obtain PSD of the displacement \(D\) when using IFF. +

+ +
+

uniaxial-cas-iff-vc.png +

+

Figure 42: CAS of the displacement \(D\) (png, pdf)

+
+
+
+ +
+

8.8 Conclusion

+
+
+

+The use of voice coil actuators would allow a better disturbance rejection for a fixed bandwidth compared with a piezo-electric hexapod. +

+ +

+Similarly, it would require much lower bandwidth to attain the same level of disturbance rejection for \(D\). +

+ +
+
+
+

Author: Dehaeze Thomas

-

Created: 2019-11-04 lun. 17:33

+

Created: 2019-11-04 lun. 18:15

Validate

diff --git a/uniaxial/index.org b/uniaxial/index.org index 67702ad..d9925c9 100644 --- a/uniaxial/index.org +++ b/uniaxial/index.org @@ -47,6 +47,8 @@ The idea is to use the same model as the full Simscape Model but to restrict the This is done in order to more easily study the system and evaluate control techniques. * Simscape Model +<> + A schematic of the uniaxial model used for simulations is represented in figure [[fig:uniaxial-model-nass-flexible]]. The perturbations $w$ are: @@ -623,6 +625,7 @@ Schematics of the active damping techniques are displayed in figure [[fig:uniaxi [[file:figs/uniaxial-model-nass-flexible-active-damping.png]] * Undamped System +<> ** Introduction :ignore: Let's start by study the undamped system. @@ -2184,6 +2187,7 @@ And initialize the controllers. Direct Velocity Feedback: #+end_important * With Cedrat Piezo-electric Actuators +<> ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> @@ -2749,3 +2753,400 @@ It is important to note that the effect of direct forces applied to the sample a | Sensitivity ($F_s$) | - (at low freq) | + | + | | Sensitivity ($F_{ty,rz}$) | + | - | + | | Overall RMS of $D$ | = | = | = | +* Voice Coil +<> +** Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +#+begin_src matlab :tangle no + simulinkproject('../'); +#+end_src + +#+begin_src matlab + open 'simscape/sim_nano_station_uniaxial.slx' +#+end_src + +** Init +We initialize all the stages with the default parameters. +The nano-hexapod is an hexapod with voice coils and the sample has a mass of 50kg. + +#+begin_src matlab :exports none + initializeGround(); + initializeGranite(); + initializeTy(); + initializeRy(); + initializeRz(); + initializeMicroHexapod(); + initializeAxisc(); + initializeMirror(); + initializeNanoHexapod(struct('actuator', 'lorentz')); + initializeSample(struct('mass', 50)); +#+end_src + +All the controllers are set to 0 (Open Loop). +#+begin_src matlab :exports none + K = tf(0); + save('./mat/controllers.mat', 'K', '-append'); + K_iff = tf(0); + save('./mat/controllers.mat', 'K_iff', '-append'); + K_rmc = tf(0); + save('./mat/controllers.mat', 'K_rmc', '-append'); + K_dvf = tf(0); + save('./mat/controllers.mat', 'K_dvf', '-append'); +#+end_src + +** Identification +We identify the dynamics of the system. +#+begin_src matlab + %% Options for Linearized + options = linearizeOptions; + options.SampleTime = 0; + + %% Name of the Simulink File + mdl = 'sim_nano_station_uniaxial'; +#+end_src + +The inputs and outputs are defined below and corresponds to the name of simulink blocks. +#+begin_src matlab + %% Input/Output definition + io(1) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion + io(2) = linio([mdl, '/Fs'], 1, 'input'); % Force applied on the sample + io(3) = linio([mdl, '/Fnl'], 1, 'input'); % Force applied by the NASS + io(4) = linio([mdl, '/Fdty'], 1, 'input'); % Parasitic force Ty + io(5) = linio([mdl, '/Fdrz'], 1, 'input'); % Parasitic force Rz + + io(6) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample + io(7) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs + io(8) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs + io(9) = linio([mdl, '/Dgm'], 1, 'output'); % Absolute displacement of the granite + io(10) = linio([mdl, '/Vlm'], 1, 'output'); % Measured absolute velocity of the top NASS platform +#+end_src + +Finally, we use the =linearize= Matlab function to extract a state space model from the simscape model. +#+begin_src matlab + %% Run the linearization + G_vc = linearize(mdl, io, options); + G_vc.InputName = {'Dw', ... % Ground Motion [m] + 'Fs', ... % Force Applied on Sample [N] + 'Fn', ... % Force applied by NASS [N] + 'Fty', ... % Parasitic Force Ty [N] + 'Frz'}; % Parasitic Force Rz [N] + G_vc.OutputName = {'D', ... % Measured sample displacement x.r.t. granite [m] + 'Fnm', ... % Force Sensor in NASS [N] + 'Dnm', ... % Displacement Sensor in NASS [m] + 'Dgm', ... % Asbolute displacement of Granite [m] + 'Vlm'}; ... % Absolute Velocity of NASS [m/s] +#+end_src + +Finally, we save the identified system dynamics for further analysis. +#+begin_src matlab + save('./uniaxial/mat/plants.mat', 'G_vc', '-append'); +#+end_src + +** Sensitivity to Disturbances +We load the dynamics when using a piezo-electric nano hexapod to compare the results. +#+begin_src matlab + load('./uniaxial/mat/plants.mat', 'G'); +#+end_src + +We show several plots representing the sensitivity to disturbances: +- in figure [[fig:uniaxial-sensitivity-vc-disturbances]] the transfer functions from ground motion $D_w$ to the sample position $D$ and the transfer function from direct force on the sample $F_s$ to the sample position $D$ are shown +- in figure [[fig:uniaxial-sensitivity-vc-force-dist]], it is the effect of parasitic forces of the positioning stages ($F_{ty}$ and $F_{rz}$) on the position $D$ of the sample that are shown + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + figure; + + subplot(2, 1, 1); + title('$D_w$ to $D$'); + hold on; + plot(freqs, abs(squeeze(freqresp(G_vc('D', 'Dw'), freqs, 'Hz'))), 'k-', 'DisplayName', 'G - VC'); + plot(freqs, abs(squeeze(freqresp(G('D', 'Dw'), freqs, 'Hz'))), 'k--', 'DisplayName', 'G - PZ'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + legend('location', 'northeast'); + ylabel('Amplitude [m/m]'); xlabel('Frequency [Hz]'); + + subplot(2, 1, 2); + title('$F_s$ to $D$'); + hold on; + plot(freqs, abs(squeeze(freqresp(G_vc('D', 'Fs'), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(G('D', 'Fs'), freqs, 'Hz'))), 'k--'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]'); +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/uniaxial-sensitivity-vc-disturbances.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial-sensitivity-vc-disturbances +#+CAPTION: Sensitivity to disturbances ([[./figs/uniaxial-sensitivity-vc-disturbances.png][png]], [[./figs/uniaxial-sensitivity-vc-disturbances.pdf][pdf]]) +[[file:figs/uniaxial-sensitivity-vc-disturbances.png]] + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + figure; + + subplot(2, 1, 1); + title('$F_{ty}$ to $D$'); + hold on; + plot(freqs, abs(squeeze(freqresp(G_vc('D', 'Fty'), freqs, 'Hz'))), 'k-', 'DisplayName', 'G - VC'); + plot(freqs, abs(squeeze(freqresp(G('D', 'Fty'), freqs, 'Hz'))), 'k--', 'DisplayName', 'G - PZ'); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + legend('location', 'northeast'); + ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]'); + + subplot(2, 1, 2); + title('$F_{rz}$ to $D$'); + hold on; + plot(freqs, abs(squeeze(freqresp(G_vc('D', 'Frz'), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(G('D', 'Frz'), freqs, 'Hz'))), 'k--'); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]'); +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/uniaxial-sensitivity-vc-force-dist.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial-sensitivity-vc-force-dist +#+CAPTION: Sensitivity to disturbances ([[./figs/uniaxial-sensitivity-vc-force-dist.png][png]], [[./figs/uniaxial-sensitivity-vc-force-dist.pdf][pdf]]) +[[file:figs/uniaxial-sensitivity-vc-force-dist.png]] + +** Noise Budget +We first load the measured PSD of the disturbance. +#+begin_src matlab + load('./disturbances/mat/dist_psd.mat', 'dist_f'); +#+end_src + +The effect of these disturbances on the distance $D$ is computed below. +#+begin_src matlab :exports none + % Power Spectral Density of the relative Displacement [m^2/Hz] + psd_vc_gm_d = dist_f.psd_gm.*abs(squeeze(freqresp(G_vc('D', 'Dw'), dist_f.f, 'Hz'))).^2; + psd_vc_ty_d = dist_f.psd_ty.*abs(squeeze(freqresp(G_vc('D', 'Fty'), dist_f.f, 'Hz'))).^2; + psd_vc_rz_d = dist_f.psd_rz.*abs(squeeze(freqresp(G_vc('D', 'Frz'), dist_f.f, 'Hz'))).^2; +#+end_src + +#+begin_src matlab :exports none + % Power Spectral Density of the relative Displacement [m^2/Hz] + psd_gm_d = dist_f.psd_gm.*abs(squeeze(freqresp(G('D', 'Dw'), dist_f.f, 'Hz'))).^2; + psd_ty_d = dist_f.psd_ty.*abs(squeeze(freqresp(G('D', 'Fty'), dist_f.f, 'Hz'))).^2; + psd_rz_d = dist_f.psd_rz.*abs(squeeze(freqresp(G('D', 'Frz'), dist_f.f, 'Hz'))).^2; +#+end_src + +The PSD of the obtain distance $D$ due to each of the perturbation is shown in figure [[fig:uniaxial-vc-psd-dist]] and the Cumulative Amplitude Spectrum is shown in figure [[fig:uniaxial-vc-cas-dist]]. + +The Root Mean Square value of the obtained displacement $D$ is computed below and can be determined from the figure [[fig:uniaxial-vc-cas-dist]]. +#+begin_src matlab :results value replace :exports results + cas_tot_d = sqrt(cumtrapz(dist_f.f, psd_vc_rz_d+psd_vc_ty_d+psd_vc_gm_d)); cas_tot_d(end) +#+end_src + +#+RESULTS: +: 4.8793e-06 + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + figure; + hold on; + plot(dist_f.f, psd_vc_gm_d, 'DisplayName', '$D_w$'); + plot(dist_f.f, psd_vc_ty_d, 'DisplayName', '$T_y$'); + plot(dist_f.f, psd_vc_rz_d, 'DisplayName', '$R_z$'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('CAS of the effect of disturbances on $D$ $\left[\frac{m^2}{Hz}\right]$'); xlabel('Frequency [Hz]'); + legend('location', 'northeast') + xlim([0.5, 500]); +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/uniaxial-vc-psd-dist.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial-vc-psd-dist +#+CAPTION: PSD of the displacement $D$ due to disturbances ([[./figs/uniaxial-vc-psd-dist.png][png]], [[./figs/uniaxial-vc-psd-dist.pdf][pdf]]) +[[file:figs/uniaxial-vc-psd-dist.png]] + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + figure; + hold on; + plot(dist_f.f, flip(sqrt(-cumtrapz(flip(dist_f.f), flip(psd_vc_gm_d)))), 'DisplayName', '$D_w$ - VC'); + plot(dist_f.f, flip(sqrt(-cumtrapz(flip(dist_f.f), flip(psd_vc_ty_d)))), 'DisplayName', '$T_y$ - VC'); + plot(dist_f.f, flip(sqrt(-cumtrapz(flip(dist_f.f), flip(psd_vc_rz_d)))), 'DisplayName', '$R_z$ - VC'); + plot(dist_f.f, flip(sqrt(-cumtrapz(flip(dist_f.f), flip(psd_vc_gm_d+psd_vc_ty_d+psd_vc_rz_d)))), 'k-', 'DisplayName', 'tot - VC'); + plot(dist_f.f, flip(sqrt(-cumtrapz(flip(dist_f.f), flip(psd_gm_d+psd_ty_d+psd_rz_d)))), 'k--', 'DisplayName', 'tot - PZ'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('CAS of the effect of disturbances on $D$ [m]'); xlabel('Frequency [Hz]'); + legend('location', 'northeast') + xlim([0.5, 500]); ylim([1e-12, 5e-6]); +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/uniaxial-vc-cas-dist.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial-vc-cas-dist +#+CAPTION: CAS of the displacement $D$ due the disturbances ([[./figs/uniaxial-vc-cas-dist.png][png]], [[./figs/uniaxial-vc-cas-dist.pdf][pdf]]) +[[file:figs/uniaxial-vc-cas-dist.png]] + +#+begin_important + Even though the RMS value of the displacement $D$ is lower when using a piezo-electric actuator, the motion is mainly due to high frequency disturbances which are more difficult to control (an higher control bandwidth is required). + + Thus, it may be desirable to use voice coil actuators. +#+end_important +** Integral Force Feedback +#+begin_src matlab + K_iff = -20/s; +#+end_src + +#+begin_src matlab :exports none + freqs = logspace(-1, 2, 1000); + + figure; + + ax1 = subplot(2, 1, 1); + plot(freqs, abs(squeeze(freqresp(K_iff*G_vc('Fnm', 'Fn'), freqs, 'Hz'))), 'k-'); + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [N/N]'); set(gca, 'XTickLabel',[]); + + ax2 = subplot(2, 1, 2); + plot(freqs, 180/pi*angle(squeeze(freqresp(K_iff*G_vc('Fnm', 'Fn'), freqs, 'Hz'))), 'k-'); + 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/uniaxial_iff_vc_open_loop.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial_iff_vc_open_loop +#+CAPTION: Open Loop Transfer Function for IFF control when using a voice coil actuator ([[./figs/uniaxial_iff_vc_open_loop.png][png]], [[./figs/uniaxial_iff_vc_open_loop.pdf][pdf]]) +[[file:figs/uniaxial_iff_vc_open_loop.png]] + +** Identification of the Damped Plant +Let's initialize the system prior to identification. +#+begin_src matlab + initializeGround(); + initializeGranite(); + initializeTy(); + initializeRy(); + initializeRz(); + initializeMicroHexapod(); + initializeAxisc(); + initializeMirror(); + initializeNanoHexapod(struct('actuator', 'lorentz')); + initializeSample(struct('mass', 50)); +#+end_src + +All the controllers are set to 0. +#+begin_src matlab + K = tf(0); + save('./mat/controllers.mat', 'K', '-append'); + K_iff = -K_iff; + save('./mat/controllers.mat', 'K_iff', '-append'); + K_rmc = tf(0); + save('./mat/controllers.mat', 'K_rmc', '-append'); + K_dvf = tf(0); + save('./mat/controllers.mat', 'K_dvf', '-append'); +#+end_src + +#+begin_src matlab + %% Options for Linearized + options = linearizeOptions; + options.SampleTime = 0; + + %% Name of the Simulink File + mdl = 'sim_nano_station_uniaxial'; +#+end_src + +#+begin_src matlab + %% Input/Output definition + io(1) = linio([mdl, '/Dw'], 1, 'input'); % Ground Motion + io(2) = linio([mdl, '/Fs'], 1, 'input'); % Force applied on the sample + io(3) = linio([mdl, '/Fnl'], 1, 'input'); % Force applied by the NASS + io(4) = linio([mdl, '/Fdty'], 1, 'input'); % Parasitic force Ty + io(5) = linio([mdl, '/Fdrz'], 1, 'input'); % Parasitic force Rz + + io(6) = linio([mdl, '/Dsm'], 1, 'output'); % Displacement of the sample + io(7) = linio([mdl, '/Fnlm'], 1, 'output'); % Force sensor in NASS's legs + io(8) = linio([mdl, '/Dnlm'], 1, 'output'); % Displacement of NASS's legs + io(9) = linio([mdl, '/Dgm'], 1, 'output'); % Absolute displacement of the granite + io(10) = linio([mdl, '/Vlm'], 1, 'output'); % Measured absolute velocity of the top NASS platform +#+end_src + +#+begin_src matlab + %% Run the linearization + G_vc_iff = linearize(mdl, io, options); + G_vc_iff.InputName = {'Dw', ... % Ground Motion [m] + 'Fs', ... % Force Applied on Sample [N] + 'Fn', ... % Force applied by NASS [N] + 'Fty', ... % Parasitic Force Ty [N] + 'Frz'}; % Parasitic Force Rz [N] + G_vc_iff.OutputName = {'D', ... % Measured sample displacement x.r.t. granite [m] + 'Fnm', ... % Force Sensor in NASS [N] + 'Dnm', ... % Displacement Sensor in NASS [m] + 'Dgm', ... % Asbolute displacement of Granite [m] + 'Vlm'}; ... % Absolute Velocity of NASS [m/s] +#+end_src + +** Noise Budget +We compute the obtain PSD of the displacement $D$ when using IFF. +#+begin_src matlab :exports none + % Power Spectral Density of the relative Displacement [m^2/Hz] + psd_vc_iff_gm_d = dist_f.psd_gm.*abs(squeeze(freqresp(G_vc_iff('D', 'Dw'), dist_f.f, 'Hz'))).^2; + psd_vc_iff_ty_d = dist_f.psd_ty.*abs(squeeze(freqresp(G_vc_iff('D', 'Fty'), dist_f.f, 'Hz'))).^2; + psd_vc_iff_rz_d = dist_f.psd_rz.*abs(squeeze(freqresp(G_vc_iff('D', 'Frz'), dist_f.f, 'Hz'))).^2; +#+end_src + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + figure; + hold on; + plot(dist_f.f, flip(sqrt(-cumtrapz(flip(dist_f.f), flip(psd_gm_d+psd_ty_d+psd_rz_d)))), '-', 'DisplayName', 'OL - PZ'); + plot(dist_f.f, flip(sqrt(-cumtrapz(flip(dist_f.f), flip(psd_vc_gm_d+psd_vc_ty_d+psd_vc_rz_d)))), 'k-', 'DisplayName', 'OL - VC'); + plot(dist_f.f, flip(sqrt(-cumtrapz(flip(dist_f.f), flip(psd_vc_iff_gm_d+psd_vc_iff_ty_d+psd_vc_iff_rz_d)))), 'k--', 'DisplayName', 'IFF - VC'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('CAS of the effect of disturbances on $D$ [m]'); xlabel('Frequency [Hz]'); + legend('location', 'northeast') + xlim([0.5, 500]); ylim([1e-12, 5e-6]); +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/uniaxial-cas-iff-vc.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial-cas-iff-vc +#+CAPTION: CAS of the displacement $D$ ([[./figs/uniaxial-cas-iff-vc.png][png]], [[./figs/uniaxial-cas-iff-vc.pdf][pdf]]) +[[file:figs/uniaxial-cas-iff-vc.png]] + +** Conclusion +#+begin_important + The use of voice coil actuators would allow a better disturbance rejection for a fixed bandwidth compared with a piezo-electric hexapod. + + Similarly, it would require much lower bandwidth to attain the same level of disturbance rejection for $D$. +#+end_important diff --git a/uniaxial/mat/plants.mat b/uniaxial/mat/plants.mat index 6ac9b2e..e8a1dbc 100644 Binary files a/uniaxial/mat/plants.mat and b/uniaxial/mat/plants.mat differ
Table 2: Comparison of proposed active damping techniques