Compare commits
9 Commits
ba0a42be95
...
master
Author | SHA1 | Date | |
---|---|---|---|
f6194333a6 | |||
571dfbffb4 | |||
ef7d7a54d5 | |||
90d6582c7c | |||
2a6e6bab27 | |||
c4188955ba | |||
6b225a90ea | |||
f94effc9f4 | |||
5789df621b |
5
.gitignore
vendored
@@ -1,4 +1,9 @@
|
||||
*.bbl
|
||||
*.synctex.gz
|
||||
.auctex-auto/
|
||||
_minted*
|
||||
auto/
|
||||
org/*.pdf
|
||||
*.tex
|
||||
|
||||
nohup.out
|
||||
|
BIN
docs/figs/2dof_apa_model.pdf
Normal file
BIN
docs/figs/2dof_apa_model.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
docs/figs/encoder_struts.pdf
Normal file
BIN
docs/figs/encoder_struts.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
docs/figs/encoders_plates_with_apa.pdf
Normal file
BIN
docs/figs/encoders_plates_with_apa.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
docs/figs/flexible_joint_simscape.pdf
Normal file
BIN
docs/figs/flexible_joint_simscape.png
Normal file
After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 166 KiB |
BIN
docs/figs/nano_hexapod_cartesian_plant_perfect_joints.pdf
Normal file
BIN
docs/figs/nano_hexapod_cartesian_plant_perfect_joints.png
Normal file
After Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 125 KiB |
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 146 KiB |
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 116 KiB |
BIN
docs/figs/nano_hexapod_simscape_encoder_plates.pdf
Normal file
BIN
docs/figs/nano_hexapod_simscape_encoder_plates.png
Normal file
After Width: | Height: | Size: 175 KiB |
BIN
docs/figs/nano_hexapod_simscape_encoder_struts.pdf
Normal file
BIN
docs/figs/nano_hexapod_simscape_encoder_struts.png
Normal file
After Width: | Height: | Size: 200 KiB |
BIN
docs/figs/simscape_encoder_model.pdf
Normal file
BIN
docs/figs/simscape_encoder_model.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
docs/figs/simscape_encoder_model_disp.pdf
Normal file
BIN
docs/figs/simscape_encoder_model_disp.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
docs/figs/simscape_model_flexible_joint.pdf
Normal file
BIN
docs/figs/simscape_model_flexible_joint.png
Normal file
After Width: | Height: | Size: 97 KiB |
@@ -3,7 +3,7 @@
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2021-04-23 ven. 13:22 -->
|
||||
<!-- 2021-04-23 ven. 17:40 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<title>Simscape Model of the Nano-Active-Stabilization-System</title>
|
||||
<meta name="author" content="Dehaeze Thomas" />
|
||||
@@ -242,7 +242,13 @@ In this file are gathered all studies about the control the Nano-Active-Stabiliz
|
||||
|
||||
<div id="outline-container-org9b612aa" class="outline-2">
|
||||
<h2 id="org9b612aa"><span class="section-number-2">18</span> Nano-Hexapod Simscape Model (<a href="nano_hexapod.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-18">
|
||||
<p>
|
||||
The nano-hexapod simscape model is described and used for simulations.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outline-container-org97e196a" class="outline-2">
|
||||
<h2 id="org97e196a"><span class="section-number-2">19</span> Useful Matlab Functions (<a href="./functions.html">link</a>)</h2>
|
||||
<div class="outline-text-2" id="text-19">
|
||||
@@ -258,7 +264,7 @@ These functions are all defined <a href="./functions.html">here</a>.
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: Dehaeze Thomas</p>
|
||||
<p class="date">Created: 2021-04-23 ven. 13:22</p>
|
||||
<p class="date">Created: 2021-04-23 ven. 17:40</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
BIN
docs/nano_hexapod.pdf
Normal file
@@ -82,6 +82,8 @@ Active damping techniques are applied to the full Simscape model.
|
||||
In this file are gathered all studies about the control the Nano-Active-Stabilization-System.
|
||||
|
||||
* Nano-Hexapod Simscape Model ([[file:nano_hexapod.org][link]])
|
||||
The nano-hexapod simscape model is described and used for simulations.
|
||||
|
||||
* Useful Matlab Functions ([[./functions.org][link]])
|
||||
Many matlab functions are shared among all the files of the projects.
|
||||
|
||||
|
@@ -6,44 +6,51 @@ arguments
|
||||
args.flex_bot_kRx (6,1) double {mustBeNumeric} = ones(6,1)*5 % X bending stiffness [Nm/rad]
|
||||
args.flex_bot_kRy (6,1) double {mustBeNumeric} = ones(6,1)*5 % Y bending stiffness [Nm/rad]
|
||||
args.flex_bot_kRz (6,1) double {mustBeNumeric} = ones(6,1)*260 % Torsionnal stiffness [Nm/rad]
|
||||
args.flex_bot_kz (6,1) double {mustBeNumeric} = ones(6,1)*1e8 % Axial Stiffness [N/m]
|
||||
args.flex_bot_cRx (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % X bending Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cRy (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % Y bending Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cRz (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % Torsionnal Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cz (6,1) double {mustBeNumeric} = ones(6,1)*1e2 % Axial Damping [N/(m/s)]
|
||||
args.flex_bot_kz (6,1) double {mustBeNumeric} = ones(6,1)*7e7 % Axial Stiffness [N/m]
|
||||
args.flex_bot_cRx (6,1) double {mustBeNumeric} = ones(6,1)*0.001 % X bending Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cRy (6,1) double {mustBeNumeric} = ones(6,1)*0.001 % Y bending Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cRz (6,1) double {mustBeNumeric} = ones(6,1)*0.001 % Torsionnal Damping [Nm/(rad/s)]
|
||||
args.flex_bot_cz (6,1) double {mustBeNumeric} = ones(6,1)*0.001 % Axial Damping [N/(m/s)]
|
||||
|
||||
%% Top Flexible Joints
|
||||
args.flex_top_type char {mustBeMember(args.flex_top_type,{'2dof', '3dof', '4dof', 'flexible'})} = '4dof'
|
||||
args.flex_top_kRx (6,1) double {mustBeNumeric} = ones(6,1)*5 % X bending stiffness [Nm/rad]
|
||||
args.flex_top_kRy (6,1) double {mustBeNumeric} = ones(6,1)*5 % Y bending stiffness [Nm/rad]
|
||||
args.flex_top_kRz (6,1) double {mustBeNumeric} = ones(6,1)*260 % Torsionnal stiffness [Nm/rad]
|
||||
args.flex_top_kz (6,1) double {mustBeNumeric} = ones(6,1)*1e8 % Axial Stiffness [N/m]
|
||||
args.flex_top_cRx (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % X bending Damping [Nm/(rad/s)]
|
||||
args.flex_top_cRy (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % Y bending Damping [Nm/(rad/s)]
|
||||
args.flex_top_cRz (6,1) double {mustBeNumeric} = ones(6,1)*0.1 % Torsionnal Damping [Nm/(rad/s)]
|
||||
args.flex_top_cz (6,1) double {mustBeNumeric} = ones(6,1)*1e2 % Axial Damping [N/(m/s)]
|
||||
args.flex_top_kz (6,1) double {mustBeNumeric} = ones(6,1)*7e7 % Axial Stiffness [N/m]
|
||||
args.flex_top_cRx (6,1) double {mustBeNumeric} = ones(6,1)*0.001 % X bending Damping [Nm/(rad/s)]
|
||||
args.flex_top_cRy (6,1) double {mustBeNumeric} = ones(6,1)*0.001 % Y bending Damping [Nm/(rad/s)]
|
||||
args.flex_top_cRz (6,1) double {mustBeNumeric} = ones(6,1)*0.001 % Torsionnal Damping [Nm/(rad/s)]
|
||||
args.flex_top_cz (6,1) double {mustBeNumeric} = ones(6,1)*0.001 % Axial Damping [N/(m/s)]
|
||||
|
||||
%% Jacobian - Location of frame {A} and {B}
|
||||
args.MO_B (1,1) double {mustBeNumeric} = 150e-3 % Height of {B} w.r.t. {M} [m]
|
||||
|
||||
%% Relative Motion Sensor
|
||||
args.motion_sensor_type char {mustBeMember(args.motion_sensor_type,{'struts', 'plates'})} = 'struts'
|
||||
|
||||
%% Actuators
|
||||
args.actuator_type char {mustBeMember(args.actuator_type,{'2dof', 'flexible frame', 'flexible'})} = 'flexible'
|
||||
args.actuator_Ga (6,1) double {mustBeNumeric} = ones(6,1)*1 % Actuator gain [N/V]
|
||||
args.actuator_Gs (6,1) double {mustBeNumeric} = ones(6,1)*1 % Sensor gain [V/m]
|
||||
% For 2DoF
|
||||
args.actuator_k (6,1) double {mustBeNumeric} = ones(6,1)*0.35e6 % [N/m]
|
||||
args.actuator_ke (6,1) double {mustBeNumeric} = ones(6,1)*1.5e6 % [N/m]
|
||||
args.actuator_ka (6,1) double {mustBeNumeric} = ones(6,1)*43e6 % [N/m]
|
||||
args.actuator_Ga (6,1) double {mustBeNumeric} = zeros(6,1) % Actuator gain [N/V]
|
||||
args.actuator_Gs (6,1) double {mustBeNumeric} = zeros(6,1) % Sensor gain [V/m]
|
||||
% For 2DoF
|
||||
args.actuator_k (6,1) double {mustBeNumeric} = ones(6,1)*0.38e6 % [N/m]
|
||||
args.actuator_ke (6,1) double {mustBeNumeric} = ones(6,1)*1.75e6 % [N/m]
|
||||
args.actuator_ka (6,1) double {mustBeNumeric} = ones(6,1)*3e7 % [N/m]
|
||||
args.actuator_c (6,1) double {mustBeNumeric} = ones(6,1)*3e1 % [N/(m/s)]
|
||||
args.actuator_ce (6,1) double {mustBeNumeric} = ones(6,1)*1e1 % [N/(m/s)]
|
||||
args.actuator_ca (6,1) double {mustBeNumeric} = ones(6,1)*1e1 % [N/(m/s)]
|
||||
args.actuator_Leq (6,1) double {mustBeNumeric} = ones(6,1)*0.056 % [m]
|
||||
% For Flexible Frame
|
||||
% For Flexible Frame
|
||||
args.actuator_ks (6,1) double {mustBeNumeric} = ones(6,1)*235e6 % Stiffness of one stack [N/m]
|
||||
args.actuator_cs (6,1) double {mustBeNumeric} = ones(6,1)*1e1 % Stiffness of one stack [N/m]
|
||||
% For Flexible
|
||||
% Misalignment
|
||||
args.actuator_d_align (6,3) double {mustBeNumeric} = zeros(6,3) % [m]
|
||||
|
||||
args.actuator_xi (1,1) double {mustBeNumeric} = 0.01 % Damping Ratio
|
||||
|
||||
%% Controller
|
||||
args.controller_type char {mustBeMember(args.controller_type,{'none', 'iff', 'dvf'})} = 'none'
|
||||
args.controller_type char {mustBeMember(args.controller_type,{'none', 'iff', 'dvf', 'hac-iff-struts'})} = 'none'
|
||||
end
|
||||
|
||||
nano_hexapod = struct();
|
||||
@@ -114,35 +121,65 @@ switch args.actuator_type
|
||||
nano_hexapod.actuator.type = 3;
|
||||
end
|
||||
|
||||
nano_hexapod.actuator.Ga = args.actuator_Ga; % Actuator gain [N/V]
|
||||
nano_hexapod.actuator.Gs = args.actuator_Gs; % Sensor gain [V/m]
|
||||
%% Actuator gain [N/V]
|
||||
if all(args.actuator_Ga == 0)
|
||||
switch args.actuator_type
|
||||
case '2dof'
|
||||
nano_hexapod.actuator.Ga = ones(6,1)*(-30.0);
|
||||
case 'flexible frame'
|
||||
nano_hexapod.actuator.Ga = ones(6,1); % TODO
|
||||
case 'flexible'
|
||||
nano_hexapod.actuator.Ga = ones(6,1)*23.4;
|
||||
end
|
||||
else
|
||||
nano_hexapod.actuator.Ga = args.actuator_Ga; % Actuator gain [N/V]
|
||||
end
|
||||
|
||||
nano_hexapod.actuator.k = args.actuator_k; % [N/m]
|
||||
nano_hexapod.actuator.ke = args.actuator_ke; % [N/m]
|
||||
nano_hexapod.actuator.ka = args.actuator_ka; % [N/m]
|
||||
|
||||
nano_hexapod.actuator.c = args.actuator_c; % [N/(m/s)]
|
||||
nano_hexapod.actuator.ce = args.actuator_ce; % [N/(m/s)]
|
||||
nano_hexapod.actuator.ca = args.actuator_ca; % [N/(m/s)]
|
||||
|
||||
nano_hexapod.actuator.Leq = args.actuator_Leq; % [m]
|
||||
%% Sensor gain [V/m]
|
||||
if all(args.actuator_Gs == 0)
|
||||
switch args.actuator_type
|
||||
case '2dof'
|
||||
nano_hexapod.actuator.Gs = ones(6,1)*0.098;
|
||||
case 'flexible frame'
|
||||
nano_hexapod.actuator.Gs = ones(6,1); % TODO
|
||||
case 'flexible'
|
||||
nano_hexapod.actuator.Gs = ones(6,1)*(-4674824);
|
||||
end
|
||||
else
|
||||
nano_hexapod.actuator.Gs = args.actuator_Gs; % Sensor gain [V/m]
|
||||
end
|
||||
|
||||
switch args.actuator_type
|
||||
case '2dof'
|
||||
nano_hexapod.actuator.k = args.actuator_k; % [N/m]
|
||||
nano_hexapod.actuator.ke = args.actuator_ke; % [N/m]
|
||||
nano_hexapod.actuator.ka = args.actuator_ka; % [N/m]
|
||||
|
||||
nano_hexapod.actuator.c = args.actuator_c; % [N/(m/s)]
|
||||
nano_hexapod.actuator.ce = args.actuator_ce; % [N/(m/s)]
|
||||
nano_hexapod.actuator.ca = args.actuator_ca; % [N/(m/s)]
|
||||
|
||||
nano_hexapod.actuator.Leq = args.actuator_Leq; % [m]
|
||||
|
||||
case 'flexible frame'
|
||||
nano_hexapod.actuator.K = readmatrix('APA300ML_b_mat_K.CSV'); % Stiffness Matrix
|
||||
nano_hexapod.actuator.M = readmatrix('APA300ML_b_mat_M.CSV'); % Mass Matrix
|
||||
nano_hexapod.actuator.P = extractNodes('APA300ML_b_out_nodes_3D.txt'); % Node coordinates [m]
|
||||
|
||||
nano_hexapod.actuator.ks = args.actuator_ks; % Stiffness of one stack [N/m]
|
||||
nano_hexapod.actuator.cs = args.actuator_cs; % Damping of one stack [N/m]
|
||||
nano_hexapod.actuator.xi = args.actuator_xi; % Damping ratio
|
||||
|
||||
case 'flexible'
|
||||
nano_hexapod.actuator.K = readmatrix('full_APA300ML_K.CSV'); % Stiffness Matrix
|
||||
nano_hexapod.actuator.M = readmatrix('full_APA300ML_M.CSV'); % Mass Matrix
|
||||
nano_hexapod.actuator.P = extractNodes('full_APA300ML_out_nodes_3D.txt'); % Node coordiantes [m]
|
||||
|
||||
nano_hexapod.actuator.d_align = args.actuator_d_align; % Misalignment
|
||||
nano_hexapod.actuator.xi = args.actuator_xi; % Damping ratio
|
||||
|
||||
end
|
||||
|
||||
nano_hexapod.actuator.xi = args.actuator_xi; % Damping ratio
|
||||
|
||||
nano_hexapod.actuator.ks = args.actuator_ks; % Stiffness of one stack [N/m]
|
||||
nano_hexapod.actuator.cs = args.actuator_cs; % Damping of one stack [N/m]
|
||||
|
||||
nano_hexapod.geometry = struct();
|
||||
|
||||
Fa = [[-86.05, -74.78, 22.49],
|
||||
@@ -199,6 +236,8 @@ switch args.controller_type
|
||||
nano_hexapod.controller.type = 2;
|
||||
case 'dvf'
|
||||
nano_hexapod.controller.type = 3;
|
||||
case 'hac-iff-struts'
|
||||
nano_hexapod.controller.type = 4;
|
||||
end
|
||||
|
||||
if nargout == 0
|
||||
|