diff --git a/docs/amplified_piezoelectric_stack.html b/docs/amplified_piezoelectric_stack.html index 556ee47..892d882 100644 --- a/docs/amplified_piezoelectric_stack.html +++ b/docs/amplified_piezoelectric_stack.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +m = 1; % [kg] @@ -154,8 +162,8 @@ IFF Controller:
Identification in open-loop. @@ -210,8 +218,8 @@ Giff.OutputName = {'Fs', 'x1'};
m = 1; % [kg] @@ -255,8 +263,8 @@ h = 0.2; % [m]
Rotating speed in rad/s: @@ -305,8 +313,8 @@ end
initializeGround(); +initializeGranite(); +initializeTy(); +initializeRy(); +initializeRz(); +initializeMicroHexapod(); +initializeAxisc(); +initializeMirror(); + +initializeSimscapeConfiguration(); +initializeDisturbances('enable', false); +initializeLoggingConfiguration('log', 'none'); + +initializeController('type', 'hac-iff'); ++
+We set the stiffness of the payload fixation: +
+Kp = 1e8; % [N/m] ++
K = tf(zeros(6)); +Kiff = tf(zeros(6)); ++
+We identify the system for the following payload masses: +
+Ms = [1, 10, 50]; ++
+The nano-hexapod has the following leg’s stiffness and damping. +
+initializeNanoHexapod('actuator', 'amplified'); ++
+
+Figure 7: Dynamics for the Integral Force Feedback for three payload masses
++
+Figure 8: Root Locus for the IFF control for three payload masses
++Damping as function of the gain +
+ ++
+Figure 9: Damping ratio of the poles as a function of the IFF gain
++Finally, we use the following controller for the Decentralized Direct Velocity Feedback: +
+Kiff = -1e4/s*eye(6); ++
Created: 2020-05-20 mer. 15:49
+Created: 2020-05-20 mer. 16:41
-
Figure 3: Root Locus for the DVF controll for three payload masses
+Figure 3: Root Locus for the DVF control for three payload masses
@@ -324,8 +324,8 @@ Decentralized Direct Velocity Feedback is shown to increase the effect of stages
@@ -512,8 +512,8 @@ And we run the simulation for all three payload Masses.
Let’s now see how this controller performs.
@@ -572,8 +572,8 @@ Finally, the time domain position error signals are shown in Figure
-
@@ -593,8 +593,8 @@ Finally, the time domain position error signals are shown in Figure 3.1 Simulation with Micro-Hexapod Offset
The micro-hexapod is inducing a 10mm offset of the sample center of mass with the rotation axis.
@@ -622,8 +622,8 @@ sim('nass_model');
A simulation is now performed with translation scans and spindle rotation at the same time.
@@ -674,8 +674,8 @@ initializeReferences('Rz_type', 'rotating', 'Rz_period', 1, ...
@@ -796,7 +796,7 @@ end
Created: 2020-05-20 mer. 15:49 Created: 2020-05-20 mer. 16:41
The model of the Ground is composed of:
First, we initialize the
The
The Simscape model of the granite is composed of:
First, we initialize the
Properties of the Material and link to the geometry of the granite.
The
The Simscape model of the Translation stage consist of:
First, we initialize the
Define the density of the materials as well as the geometry (STEP files).
The
The Simscape model of the Tilt stage is composed of:
First, we initialize the
Properties of the Material and link to the geometry of the Tilt stage.
The
The Simscape model of the Spindle is composed of:
First, we initialize the
Properties of the Material and link to the geometry of the spindle.
The
@@ -1225,9 +1224,9 @@ The
The
The Simscape model of the Center of gravity compensator is composed of:
First, we initialize the
Properties of the Material and link to the geometry files.
The
The Simscape Model of the mirror is just a solid body.
The output
First, we initialize the
The
@@ -1763,9 +1762,9 @@ The
The Simscape model of the sample environment is composed of:
First, we initialize the 2.7 Conclusion
+2.7 Conclusion
3.1.1 Simulation
+3.1.1 Simulation
3.1.2 Results
+3.1.2 Results
3.2 Simultaneous Translation scans and Spindle’s rotation
3.2.1 Simulation
+3.2.1 Simulation
3.2.2 Results
+3.2.2 Results
4.3 Simulation
+4.3 Simulation
4.4 Conclusion
+4.4 Conclusion
-
-
-
-
-
-
-
Function description
-Function description
+function [] = initializeSimscapeConfiguration(args)
@@ -265,9 +264,9 @@ These functions are defined below.
Optional Parameters
-Optional Parameters
+arguments
args.gravity logical {mustBeNumericOrLogical} = true
@@ -277,9 +276,9 @@ end
Structure initialization
-Structure initialization
+conf_simscape = struct();
@@ -287,9 +286,9 @@ end
Add Type
-Add Type
+if args.gravity
conf_simscape.type = 1;
@@ -301,9 +300,9 @@ end
Save the Structure
-Save the Structure
+save('./mat/conf_simscape.mat', 'conf_simscape');
@@ -320,9 +319,9 @@ end
Function description
-Function description
+function [] = initializeLoggingConfiguration(args)
@@ -330,9 +329,9 @@ end
Optional Parameters
-Optional Parameters
+arguments
args.log char {mustBeMember(args.log,{'none', 'all', 'forces'})} = 'none'
@@ -343,9 +342,9 @@ end
Structure initialization
-Structure initialization
+conf_log = struct();
@@ -353,9 +352,9 @@ end
Add Type
-Add Type
+switch args.log
case 'none'
@@ -380,9 +379,9 @@ end
Save the Structure
-Save the Structure
+save('./mat/conf_log.mat', 'conf_log');
@@ -399,9 +398,9 @@ end
Simscape Model
-Simscape Model
+Function description
-Function description
+function [ground] = initializeGround(args)
@@ -436,9 +435,9 @@ The model of the Ground is composed of:
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'none', 'rigid'})} = 'rigid'
@@ -449,9 +448,9 @@ end
Structure initialization
-Structure initialization
+granite
structure.
granite
structure.
Add Type
-Add Type
+switch args.type
case 'none'
@@ -501,9 +500,9 @@ ground.density = 2800; % [kg/m3]
Save the Structure
-Save the Structure
+ground
structure is saved.
ground
structure is saved.
Simscape Model
-Simscape Model
+sample_pos
corresponds to the impact point of the X-ray.
Function description
-Function description
+function [granite] = initializeGranite(args)
@@ -564,9 +563,9 @@ The output sample_pos
corresponds to the impact point of the X-ray.
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'rigid', 'flexible', 'none', 'modal-analysis', 'init'})} = 'flexible'
@@ -583,9 +582,9 @@ end
Structure initialization
-Structure initialization
+granite
structure.
Material and Geometry
-Material and Geometry
+Stiffness and Damping properties
-Stiffness and Damping properties
+granite.K = args.K; % [N/m]
granite.C = args.C; % [N/(m/s)]
@@ -650,9 +649,9 @@ granite.C = args.C; % [N/(m/s)]
Equilibrium position of the each joint.
-Equilibrium position of the each joint.
+if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init')
load('mat/Foffset.mat', 'Fgm');
@@ -665,9 +664,9 @@ end
Save the Structure
-Save the Structure
+granite
structure is saved.
granite
structure is saved.
5 Translation Stage
+5 Translation Stage
-Simscape Model
-Simscape Model
+Function description
-Function description
+function [ty] = initializeTy(args)
@@ -729,9 +728,9 @@ It is used to impose the motion in the Y direction
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init'})} = 'flexible'
@@ -742,9 +741,9 @@ end
Structure initialization
-Structure initialization
+ty
structure.
Material and Geometry
-Material and Geometry
+Stiffness and Damping properties
-Stiffness and Damping properties
+ty.K = [2e8; 1e8; 2e8; 6e7; 9e7; 6e7]; % [N/m, N*m/rad]
ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 2e4]; % [N/(m/s), N*m/(rad/s)]
@@ -834,9 +833,9 @@ ty.C = [8e4; 5e4; 8e4; 2e4; 3e4; 2e4]; % [N/(m/s), N*m/(rad/s)]
Equilibrium position of the each joint.
-Equilibrium position of the each joint.
+if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init')
load('mat/Foffset.mat', 'Ftym');
@@ -849,9 +848,9 @@ end
Save the Structure
-Save the Structure
+ty
structure is saved.
ty
structure is saved.
6 Tilt Stage
+6 Tilt Stage
-Simscape Model
-Simscape Model
+Function description
-Function description
+function [ry] = initializeRy(args)
@@ -913,9 +912,9 @@ The Ry motion is imposed by the input.
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init'})} = 'flexible'
@@ -927,9 +926,9 @@ end
Structure initialization
-Structure initialization
+ry
structure.
Material and Geometry
-Material and Geometry
+Stiffness and Damping properties
-Stiffness and Damping properties
+ry.K = [3.8e8; 4e8; 3.8e8; 1.2e8; 6e4; 1.2e8];
ry.C = [1e5; 1e5; 1e5; 3e4; 1e3; 3e4];
@@ -1013,9 +1012,9 @@ ry.C = [1e5; 1e5; 1e5; 3e4; 1e3; 3e4];
Equilibrium position of the each joint.
-Equilibrium position of the each joint.
+if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init')
load('mat/Foffset.mat', 'Fym');
@@ -1028,9 +1027,9 @@ end
Save the Structure
-Save the Structure
+ry
structure is saved.
ry
structure is saved.
7 Spindle
+7 Spindle
-Simscape Model
-Simscape Model
+Function description
-Function description
+function [rz] = initializeRz(args)
@@ -1088,9 +1087,9 @@ The Simscape model of the Spindle is composed of:
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init'})} = 'flexible'
@@ -1101,9 +1100,9 @@ end
Structure initialization
-Structure initialization
+rz
structure.
Material and Geometry
-Material and Geometry
+Stiffness and Damping properties
-Stiffness and Damping properties
+rz.K = [7e8; 7e8; 2e9; 1e7; 1e7; 1e7];
rz.C = [4e4; 4e4; 7e4; 1e4; 1e4; 1e4];
@@ -1169,9 +1168,9 @@ rz.C = [4e4; 4e4; 7e4; 1e4; 1e4; 1e4];
Equilibrium position of the each joint.
-Equilibrium position of the each joint.
+if args.Foffset && ~strcmp(args.type, 'none') && ~strcmp(args.type, 'rigid') && ~strcmp(args.type, 'init')
load('mat/Foffset.mat', 'Fzm');
@@ -1184,9 +1183,9 @@ end
Save the Structure
-Save the Structure
+rz
structure is saved.
rz
structure is saved.
8 Micro Hexapod
+8 Micro Hexapod
-Simscape Model
-Simscape Model
+rz
structure is saved.
Function description
-Function description
+function [micro_hexapod] = initializeMicroHexapod(args)
@@ -1235,9 +1234,9 @@ The rz
structure is saved.
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'modal-analysis', 'init', 'compliance'})} = 'flexible'
@@ -1279,9 +1278,9 @@ end
Function content
-Function content
+stewart = initializeStewartPlatform();
@@ -1357,9 +1356,9 @@ end
Add Type
-Add Type
+switch args.type
case 'none'
@@ -1380,9 +1379,9 @@ end
Save the Structure
-Save the Structure
+micro_hexapod
structure is saved.
Simscape Model
-Simscape Model
+Function description
-Function description
+function [axisc] = initializeAxisc(args)
@@ -1440,9 +1439,9 @@ The Simscape model of the Center of gravity compensator is composed of:
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'flexible'
@@ -1452,9 +1451,9 @@ end
Structure initialization
-Structure initialization
+axisc
structure.
axisc
structure.
Add Type
-Add Type
+switch args.type
case 'none'
@@ -1482,9 +1481,9 @@ end
Material and Geometry
-Material and Geometry
+Save the Structure
-Save the Structure
+axisc
structure is saved.
axisc
structure is saved.
Simscape Model
-Simscape Model
+mirror_center
corresponds to the center of the Sphere and is the point of measurement for the metrology
@@ -1555,9 +1554,9 @@ The output mirror_center
corresponds to the center of the Sphere an
Function description
-Function description
+function [] = initializeMirror(args)
@@ -1565,9 +1564,9 @@ The output mirror_center
corresponds to the center of the Sphere an
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible'})} = 'rigid'
@@ -1581,9 +1580,9 @@ end
Structure initialization
-Structure initialization
+mirror
structure.
Stiffness and Damping properties
-Stiffness and Damping properties
+mirror.K = zeros(6,1);
mirror.K(1:3) = mirror.mass * (2*pi*mirror.freq(1:3)).^2;
@@ -1636,9 +1635,9 @@ mirror.C(1:3) = 0.2 * sqrt(mirror.K(1:3).*mirror.mass);
Equilibrium position of the each joint.
-Equilibrium position of the each joint.
+mirror.Deq = zeros(6,1);
@@ -1722,9 +1721,9 @@ Finally, we close the shape.
Save the Structure
-Save the Structure
+mirror
structure is saved.
mirror
structure is saved.
11 Nano Hexapod
+11 Nano Hexapod
-Simscape Model
-Simscape Model
+mirror
structure is saved.
Function description
-Function description
+function [nano_hexapod] = initializeNanoHexapod(args)
@@ -1773,9 +1772,9 @@ The mirror
structure is saved.
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'none', 'rigid', 'flexible', 'init'})} = 'flexible'
@@ -1790,7 +1789,13 @@ The
mirror
structure is saved.
args.MR (1,1) double {mustBeNumeric, mustBePositive} = 90e-3
args.MTh (6,1) double {mustBeNumeric} = [-60+10, 60-10, 60+10, 180-10, 180+10, -60-10]*(pi/180)
% initializeStrutDynamics
- args.actuator char {mustBeMember(args.actuator,{'piezo', 'lorentz'})} = 'piezo'
+ args.actuator char {mustBeMember(args.actuator,{'piezo', 'lorentz', 'amplified'})} = 'piezo'
+ args.k1 (1,1) double {mustBeNumeric} = 1e6
+ args.ke (1,1) double {mustBeNumeric} = 5e6
+ args.ka (1,1) double {mustBeNumeric} = 60e6
+ args.c1 (1,1) double {mustBeNumeric} = 10
+ args.ce (1,1) double {mustBeNumeric} = 10
+ args.ca (1,1) double {mustBeNumeric} = 10
args.k (1,1) double {mustBeNumeric} = -1
args.c (1,1) double {mustBeNumeric} = -1
% initializeJointDynamics
@@ -1835,9 +1840,9 @@ end
Function content
-Function content
+stewart = initializeStewartPlatform();
@@ -1851,15 +1856,23 @@ stewart = computeJointsPose(stewart);
if args.k > 0 && args.c > 0
- stewart = initializeStrutDynamics(stewart, 'K', args.k*ones(6,1), 'C', args.c*ones(6,1));
+ stewart = initializeStrutDynamics(stewart, 'type', 'classical', 'K', args.k*ones(6,1), 'C', args.c*ones(6,1));
elseif args.k > 0
- stewart = initializeStrutDynamics(stewart, 'K', args.k*ones(6,1), 'C', 1.5*sqrt(args.k)*ones(6,1));
+ stewart = initializeStrutDynamics(stewart, 'type', 'classical', 'K', args.k*ones(6,1), 'C', 1.5*sqrt(args.k)*ones(6,1));
elseif strcmp(args.actuator, 'piezo')
- stewart = initializeStrutDynamics(stewart, 'K', 1e7*ones(6,1), 'C', 1e2*ones(6,1));
+ stewart = initializeStrutDynamics(stewart, 'type', 'classical', 'K', 1e7*ones(6,1), 'C', 1e2*ones(6,1));
elseif strcmp(args.actuator, 'lorentz')
- stewart = initializeStrutDynamics(stewart, 'K', 1e4*ones(6,1), 'C', 1e2*ones(6,1));
+ stewart = initializeStrutDynamics(stewart, 'type', 'classical', 'K', 1e4*ones(6,1), 'C', 1e2*ones(6,1));
+elseif strcmp(args.actuator, 'amplified')
+ stewart = initializeStrutDynamics(stewart, 'type', 'amplified', ...
+ 'k1', args.k1*ones(6,1), ...
+ 'c1', args.c1*ones(6,1), ...
+ 'ka', args.ka*ones(6,1), ...
+ 'ca', args.ca*ones(6,1), ...
+ 'ke', args.ke*ones(6,1), ...
+ 'ce', args.ce*ones(6,1));
else
- error('args.actuator should be piezo or lorentz');
+ error('args.actuator should be piezo, lorentz or amplified');
end
Add Type
-Add Type
+switch args.type
case 'none'
@@ -1934,9 +1947,9 @@ end
Save the Structure
-Save the Structure
+nano_hexapod = stewart;
save('./mat/stages.mat', 'nano_hexapod', '-append');
@@ -1954,9 +1967,9 @@ save('./mat/stages.mat', 'nano_hexapod', '-append');
Simscape Model
-Simscape Model
+Function description
-Function description
+function [sample] = initializeSample(args)
@@ -1994,9 +2007,9 @@ This could be the case for cable forces for instance.
Optional Parameters
-Optional Parameters
+arguments
args.type char {mustBeMember(args.type,{'rigid', 'flexible', 'none', 'init'})} = 'flexible'
@@ -2012,9 +2025,9 @@ end
Structure initialization
-Structure initialization
+