diff --git a/figs/cedrat_piezo_identified_tf.png b/figs/cedrat_piezo_identified_tf.png new file mode 100644 index 0000000..9efe9c1 Binary files /dev/null and b/figs/cedrat_piezo_identified_tf.png differ diff --git a/figs/uniaxial_cedrat_open_loop.png b/figs/uniaxial_cedrat_open_loop.png new file mode 100644 index 0000000..0c10a33 Binary files /dev/null and b/figs/uniaxial_cedrat_open_loop.png differ diff --git a/figs/uniaxial_cedrat_plant.png b/figs/uniaxial_cedrat_plant.png new file mode 100644 index 0000000..b1e0779 Binary files /dev/null and b/figs/uniaxial_cedrat_plant.png differ diff --git a/figs/uniaxial_plant_cedrat_damped.png b/figs/uniaxial_plant_cedrat_damped.png new file mode 100644 index 0000000..6a5aafe Binary files /dev/null and b/figs/uniaxial_plant_cedrat_damped.png differ diff --git a/figs/uniaxial_sensitivity_dist_cedrat.png b/figs/uniaxial_sensitivity_dist_cedrat.png new file mode 100644 index 0000000..f6a7cd8 Binary files /dev/null and b/figs/uniaxial_sensitivity_dist_cedrat.png differ diff --git a/figs/uniaxial_sensitivity_dist_stages_cedrat.png b/figs/uniaxial_sensitivity_dist_stages_cedrat.png new file mode 100644 index 0000000..1cd71ff Binary files /dev/null and b/figs/uniaxial_sensitivity_dist_stages_cedrat.png differ diff --git a/simscape/sim_nano_station_uniaxial_cedrat.slx b/simscape/sim_nano_station_uniaxial_cedrat.slx new file mode 100644 index 0000000..fb2a481 Binary files /dev/null and b/simscape/sim_nano_station_uniaxial_cedrat.slx differ diff --git a/src/initializeCedratPiezo.m b/src/initializeCedratPiezo.m new file mode 100644 index 0000000..1c252df --- /dev/null +++ b/src/initializeCedratPiezo.m @@ -0,0 +1,38 @@ +% Cedrat Actuator +% :PROPERTIES: +% :header-args:matlab+: :tangle ../src/initializeCedratPiezo.m +% :header-args:matlab+: :comments org :mkdirp yes +% :header-args:matlab+: :eval no :results none +% :END: +% <> + +% This Matlab function is accessible [[file:../src/initializeCedratPiezo.m][here]]. + + +function [cedrat] = initializeCedratPiezo(opts_param) + %% Default values for opts + opts = struct(); + + %% Populate opts with input parameters + if exist('opts_param','var') + for opt = fieldnames(opts_param)' + opts.(opt{1}) = opts_param.(opt{1}); + end + end + + %% Stewart Object + cedrat = struct(); + cedrat.k = 10e7; % Linear Stiffness of each "blade" [N/m] + cedrat.ka = 10e7; % Linear Stiffness of the stack [N/m] + + cedrat.c = 0.1*sqrt(1*cedrat.k); % [N/(m/s)] + cedrat.ca = 0.1*sqrt(1*cedrat.ka); % [N/(m/s)] + + cedrat.L = 80; % Total Width of the Actuator[mm] + cedrat.H = 45; % Total Height of the Actuator [mm] + cedrat.L2 = sqrt((cedrat.L/2)^2 + (cedrat.H/2)^2); % Length of the elipsoidal sections [mm] + cedrat.alpha = 180/pi*atan2(cedrat.L/2, cedrat.H/2); % [deg] + + %% Save + save('./mat/stages.mat', 'cedrat', '-append'); +end diff --git a/uniaxial/index.html b/uniaxial/index.html index ced46eb..3038ed7 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,48 +280,58 @@ for the JavaScript code in this tag.

Table of Contents

@@ -336,11 +346,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.

@@ -384,7 +394,7 @@ The control signal \(u\) is: -

+

uniaxial-model-nass-flexible.png

Figure 1: Schematic of the uniaxial model used

@@ -393,11 +403,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

@@ -405,16 +415,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. @@ -426,8 +436,8 @@ All the controllers are set to 0 (Open Loop).

-
-

2.2 Identification

+
+

2.2 Identification

We identify the dynamics of the system. @@ -490,19 +500,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)

@@ -510,7 +520,7 @@ We show several plots representing the sensitivity to disturbances: -
+

uniaxial-sensitivity-force-dist.png

Figure 4: Sensitivity to disturbances (png, pdf)

@@ -518,16 +528,16 @@ We show several plots representing the sensitivity to disturbances:
-
-

2.4 Plant

+
+

2.4 Plant

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

-
+

uniaxial-plant.png

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

@@ -536,21 +546,21 @@ It corresponds to the plant to control.
-
-

3 Integral Force Feedback

+
+

3 Integral Force Feedback

- +

-
+

uniaxial-model-nass-flexible-iff.png

Figure 6: Uniaxial IFF Control Schematic

-
-

3.1 Control Design

+
+

3.1 Control Design

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

-
+

uniaxial_iff_plant.png

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

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

uniaxial_iff_open_loop.png

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

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

3.2 Identification

+
+

3.2 Identification

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

-
-

3.3 Sensitivity to Disturbance

+
+

3.3 Sensitivity to Disturbance

-
+

uniaxial_sensitivity_dist_iff.png

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

-
+

uniaxial_sensitivity_dist_stages_iff.png

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

@@ -688,11 +698,11 @@ G_iff.OutputName = {
-
-

3.4 Damped Plant

+
+

3.4 Damped Plant

-
+

uniaxial_plant_iff_damped.png

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

@@ -700,8 +710,8 @@ G_iff.OutputName = {
-
-

3.5 Conclusion

+
+

3.5 Conclusion

@@ -713,25 +723,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 12: Uniaxial RMC Control Schematic

-
-

4.1 Control Design

+
+

4.1 Control Design

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

-
+

uniaxial_rmc_plant.png

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

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

uniaxial_rmc_open_loop.png

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

@@ -767,8 +777,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. @@ -852,18 +862,18 @@ G_rmc.OutputName = { -

-

4.3 Sensitivity to Disturbance

+
+

4.3 Sensitivity to Disturbance

-
+

uniaxial_sensitivity_dist_rmc.png

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

-
+

uniaxial_sensitivity_dist_stages_rmc.png

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

@@ -871,11 +881,11 @@ G_rmc.OutputName = {
-
-

4.4 Damped Plant

+
+

4.4 Damped Plant

-
+

uniaxial_plant_rmc_damped.png

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

@@ -883,8 +893,8 @@ G_rmc.OutputName = {
-
-

4.5 Conclusion

+
+

4.5 Conclusion

@@ -896,25 +906,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 18: Uniaxial DVF Control Schematic

-
-

5.1 Control Design

+
+

5.1 Control Design

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

uniaxial_dvf_plant.png

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

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

uniaxial_dvf_loop_gain.png

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

@@ -942,8 +952,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. @@ -1026,18 +1036,18 @@ G_dvf.OutputName = {

-
-

5.3 Sensitivity to Disturbance

+
+

5.3 Sensitivity to Disturbance

-
+

uniaxial_sensitivity_dist_dvf.png

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

-
+

uniaxial_sensitivity_dist_stages_dvf.png

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

@@ -1045,11 +1055,11 @@ G_dvf.OutputName = {
-
-

5.4 Damped Plant

+
+

5.4 Damped Plant

-
+

uniaxial_plant_dvf_damped.png

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

@@ -1057,8 +1067,8 @@ G_dvf.OutputName = {
-
-

5.5 Conclusion

+
+

5.5 Conclusion

@@ -1069,16 +1079,235 @@ Direct Velocity Feedback:

-
-

6 Comparison of Active Damping Techniques

+
+

6 With Cedrat Piezo-electric Actuators

+
+
+

6.1 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_cedrat';
+
+
+ +

+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 = linearize(mdl, io, options);
+G.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.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]
+
+
+
+
+ +
+

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 24: Transfer function from forces applied in the legs to force sensor (png, pdf)

+
+ +

+The controller for each pair of actuator/sensor is: +

+
+
K_cedrat = 1000/s;
+
+
+ + +
+

uniaxial_cedrat_open_loop.png +

+

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

+
+
+
+ +
+

6.3 Identification

+
+

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

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

+All the controllers are set to 0. +

+
+
K = tf(0);
+save('./mat/controllers.mat', 'K', '-append');
+K_iff = -K_cedrat;
+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_cedrat';
+
+
+ +
+
%% 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_cedrat = linearize(mdl, io, options);
+G_cedrat.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_cedrat.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]
+
+
+ +
+
save('./uniaxial/mat/plants.mat', 'G_cedrat', '-append');
+
+
+
+
+ +
+

6.4 Sensitivity to Disturbance

+
+ +
+

uniaxial_sensitivity_dist_cedrat.png +

+

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

+
+ + +
+

uniaxial_sensitivity_dist_stages_cedrat.png +

+

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

+
+
+
+ +
+

6.5 Damped Plant

+
+ +
+

uniaxial_plant_cedrat_damped.png +

+

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

+
+
+
+ +
+

6.6 Conclusion

+
+
+

+This gives similar results than with a classical force sensor. +

+ +
+
+
+
+ +
+

7 Comparison of Active Damping Techniques

+
+

+

-
-

6.1 Load the plants

-
+
+

7.1 Load the plants

+
load('./uniaxial/mat/plants.mat', 'G', 'G_iff', 'G_rmc', 'G_dvf');
 
@@ -1086,56 +1315,59 @@ Direct Velocity Feedback:
-
-

6.2 Sensitivity to Disturbance

-
+
+

7.2 Sensitivity to Disturbance

+
-
+

uniaxial_sensitivity_ground_motion.png

-

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

+

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

-
+

uniaxial_sensitivity_direct_force.png

-

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

+

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

-
+

uniaxial_sensitivity_fty.png

-

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

+

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

-
+

uniaxial_sensitivity_frz.png

-

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

+

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

-
-

6.3 Damped Plant

-
+
+

7.3 Damped Plant

+
-
+

uniaxial_plant_damped_comp.png

-

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

+

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

-
-

6.4 Conclusion

-
- +
+

7.4 Conclusion

+
+

+#name: tab:activedampingcomparison +

+
@@ -1205,7 +1437,7 @@ The next step is to take into account the power spectral density of each disturb

Author: Dehaeze Thomas

-

Created: 2019-10-25 ven. 16:02

+

Created: 2019-10-28 lun. 17:34

Validate

diff --git a/uniaxial/index.org b/uniaxial/index.org index 6c1ece8..05283b0 100644 --- a/uniaxial/index.org +++ b/uniaxial/index.org @@ -2106,6 +2106,314 @@ And initialize the controllers. #+begin_important 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) + <> +#+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_cedrat.slx' +#+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_cedrat'; +#+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 = linearize(mdl, io, options); + G.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.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 + +** 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. + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + figure; + + ax1 = subplot(2, 1, 1); + plot(freqs, abs(squeeze(freqresp(G('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(G('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_cedrat_plant.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial_cedrat_plant +#+CAPTION: Transfer function from forces applied in the legs to force sensor ([[./figs/uniaxial_cedrat_plant.png][png]], [[./figs/uniaxial_cedrat_plant.pdf][pdf]]) +[[file:figs/uniaxial_cedrat_plant.png]] + +The controller for each pair of actuator/sensor is: +#+begin_src matlab + K_cedrat = 1000/s; +#+end_src + +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + figure; + + ax1 = subplot(2, 1, 1); + plot(freqs, abs(squeeze(freqresp(K_cedrat*G('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_cedrat*G('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_cedrat_open_loop.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial_cedrat_open_loop +#+CAPTION: Loop Gain for the Integral Force Feedback ([[./figs/uniaxial_cedrat_open_loop.png][png]], [[./figs/uniaxial_cedrat_open_loop.pdf][pdf]]) +[[file:figs/uniaxial_cedrat_open_loop.png]] + +** Identification +Let's initialize the system prior to identification. +#+begin_src matlab + initializeGround(); + initializeGranite(); + initializeTy(); + initializeRy(); + initializeRz(); + initializeMicroHexapod(); + initializeAxisc(); + initializeMirror(); + initializeNanoHexapod(struct('actuator', 'piezo')); + 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_cedrat; + 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_cedrat'; +#+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_cedrat = linearize(mdl, io, options); + G_cedrat.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_cedrat.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 + +#+begin_src matlab + save('./uniaxial/mat/plants.mat', 'G_cedrat', '-append'); +#+end_src + +** Sensitivity to Disturbance +#+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('D', 'Dw'), freqs, 'Hz'))), 'k-', 'DisplayName', 'OL'); + plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Dw'), freqs, 'Hz'))), 'k--', 'DisplayName', 'CEDRAT'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/m]'); xlabel('Frequency [Hz]'); + legend('location', 'northeast'); + + subplot(2, 1, 2); + title('$F_s$ to $D$'); + hold on; + plot(freqs, abs(squeeze(freqresp(G('D', 'Fs'), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(G_cedrat('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_dist_cedrat.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial_sensitivity_dist_cedrat +#+CAPTION: Sensitivity to disturbance once the CEDRAT controller is applied to the system ([[./figs/uniaxial_sensitivity_dist_cedrat.png][png]], [[./figs/uniaxial_sensitivity_dist_cedrat.pdf][pdf]]) +[[file:figs/uniaxial_sensitivity_dist_cedrat.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('D', 'Fty'), freqs, 'Hz'))), 'k-', 'DisplayName', 'OL'); + plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Fty'), freqs, 'Hz'))), 'k--', 'DisplayName', 'CEDRAT'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); xlabel('Frequency [Hz]'); + legend('location', 'northeast'); + + subplot(2, 1, 2); + title('$F_{rz}$ to $D$'); + hold on; + plot(freqs, abs(squeeze(freqresp(G('D', 'Frz'), freqs, 'Hz'))), 'k-'); + plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Frz'), 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_dist_stages_cedrat.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial_sensitivity_dist_stages_cedrat +#+CAPTION: Sensitivity to force disturbances in various stages when CEDRAT is applied ([[./figs/uniaxial_sensitivity_dist_stages_cedrat.png][png]], [[./figs/uniaxial_sensitivity_dist_stages_cedrat.pdf][pdf]]) +[[file:figs/uniaxial_sensitivity_dist_stages_cedrat.png]] + +** Damped Plant +#+begin_src matlab :exports none + freqs = logspace(0, 3, 1000); + + figure; + + ax1 = subplot(2, 1, 1); + hold on; + plot(freqs, abs(squeeze(freqresp(G('D', 'Fn'), freqs, 'Hz'))), 'k-', 'DisplayName', 'OL'); + plot(freqs, abs(squeeze(freqresp(G_cedrat('D', 'Fn'), freqs, 'Hz'))), 'k--', 'DisplayName', 'CEDRAT'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]); + legend('location', 'northeast'); + + ax2 = subplot(2, 1, 2); + hold on; + plot(freqs, 180/pi*angle(squeeze(freqresp(G('D', 'Fn'), freqs, 'Hz'))), 'k-'); + plot(freqs, 180/pi*angle(squeeze(freqresp(G_cedrat('D', 'Fn'), freqs, 'Hz'))), 'k--'); + 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/uniaxial_plant_cedrat_damped.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:uniaxial_plant_cedrat_damped +#+CAPTION: Damped Plant after CEDRAT is applied ([[./figs/uniaxial_plant_cedrat_damped.png][png]], [[./figs/uniaxial_plant_cedrat_damped.pdf][pdf]]) +[[file:figs/uniaxial_plant_cedrat_damped.png]] + +** Conclusion +#+begin_important +This gives similar results than with a classical force sensor. +#+end_important + * Comparison of Active Damping Techniques <> ** Matlab Init :noexport:ignore: @@ -2278,7 +2586,7 @@ Direct Velocity Feedback: ** Conclusion -#+name: tab:active_damping_comparison +#name: tab:active_damping_comparison #+caption: Comparison of proposed active damping techniques | | IFF | RMC | DVF | |---------------------------+-----------------+-----------------+----------|
Table 1: Comparison of proposed active damping techniques