45 KiB
Determination of the optimal nano-hexapod's stiffness
- Introduction
- Spindle Rotation Speed
- Micro-Station Compliance Effect
- Payload "Impedance" Effect
- Total Change of dynamics
Introduction ignore
As shown before, many parameters other than the nano-hexapod itself do influence the plant dynamics:
- The micro-station compliance (studied here)
- The payload mass and dynamical properties (studied here and here)
- The experimental conditions, mainly the spindle rotation speed (studied here)
As seen before, the stiffness of the nano-hexapod greatly influence the effect of such parameters.
We wish here to see if we can determine an optimal stiffness of the nano-hexapod such that:
- Section sec:spindle_rotation_speed: the change of its dynamics due to the spindle rotation speed is acceptable
- Section sec:micro_station_compliance: the support compliance dynamics is not much present in the nano-hexapod dynamics
- Section sec:payload_impedance: the change of payload impedance has acceptable effect on the plant dynamics
The overall goal is to design a nano-hexapod that will allow the highest possible control bandwidth.
Spindle Rotation Speed
<<sec:spindle_rotation_speed>>
Introduction ignore
Initialization
We initialize all the stages with the default parameters.
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
The worst case scenario is a rotation speed of 60rpm with a payload mass of 10Kg.
initializeSample('mass', 10);
We don't include gravity nor disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics.
initializeSimscapeConfiguration('gravity', true);
initializeDisturbances('enable', false);
initializeLoggingConfiguration('log', 'none');
Identification when not rotating
We set the range of stiffness that we want to use.
Ks = logspace(3,9,7); % [N/m]
We don't move any stage and no controller is used.
initializeReferences();
initializeController();
Identification when rotating at maximum speed
We now set the reference path such that the Spindle is rotating at 60rpm and such that it is at the zero position at the time of the identification.
Rz_rpm = 60;
initializeReferences('Rz_type', 'rotating', ...
'Rz_period', 60/Rz_rpm, ... % Rotation period [s]
'Rz_amplitude', -0.2*(2*pi*Rz_rpm/60)); % Angle offset [rad]
load('mat/nass_references.mat', 'Rz'); % We load the reference for the Spindle
[~, i_end] = min(abs(Rz.signals.values)); % Obtain the indice where the spindle angle is zero
t_sim = Rz.time(i_end); % Simulation time before identification [s]
We here use a decentralized controller that is used to stabilize the nano-hexapod until the identification is made. This controller virtually adds stiffness in each of the nano-hexapod leg.
k_sta = -1e8;
initializeController('type', 'stabilizing');
TODO Change of dynamics
- problem of dynamics at low frequency Check if gravity is a problem Think of a before way to identify the dynamics
Change of dynamics for decentralized IFF control.
Change of dynamics from $F_x$ to $D_x$.
Change of dynamics from $F_z$ to $D_z$.
Change of coupling
Change of coupling from $F_x$ to $D_y$ when not rotating and when rotating at 60rpm.
Comparison of the coupling from $F_x$ to $D_y$ when rotating at 60rpm to the direct term $F_x$ to $D_x$.
Conclusion ignore
The leg stiffness should be at higher than $k_i = 10^4\ [N/m]$ such that the main resonance frequency does not shift too much when rotating. For the coupling, it is more difficult to conclude about the minimum required leg stiffness.
Note that we can use very soft nano-hexapod if we limit the spindle rotating speed.
Micro-Station Compliance Effect
<<sec:micro_station_compliance>>
Introduction ignore
- take the 6dof compliance of the micro-station
- simple model + uncertainty
Identification of the micro-station compliance
We initialize all the stages with the default parameters.
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod('type', 'compliance');
We put nothing on top of the micro-hexapod.
initializeAxisc('type', 'none');
initializeMirror('type', 'none');
initializeNanoHexapod('type', 'none');
initializeSample('type', 'none');
And we identify the dynamics from forces/torques applied on the micro-hexapod top platform to the motion of the micro-hexapod top platform at the same point.
%% Name of the Simulink File
mdl = 'nass_model';
%% Input/Output definition
clear io; io_i = 1;
io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Compliance/Fm'], 1, 'openinput'); io_i = io_i + 1; % Direct Forces/Torques applied on the micro-hexapod top platform
io(io_i) = linio([mdl, '/Micro-Station/Micro Hexapod/Compliance/Dm'], 1, 'output'); io_i = io_i + 1; % Absolute displacement of the top platform
%% Run the linearization
Gm = linearize(mdl, io, 0);
Gm.InputName = {'Fmx', 'Fmy', 'Fmz', 'Mmx', 'Mmy', 'Mmz'};
Gm.OutputName = {'Dx', 'Dy', 'Dz', 'Drx', 'Dry', 'Drz'};
Identification of the dynamics with a rigid micro-station
Initialization
Ks = logspace(3,9,7); % [N/m]
initializeSample('type', 'rigid', 'mass', 20);
Rigid micro-station
initializeGround('type', 'rigid');
initializeGranite('type', 'rigid');
initializeTy('type', 'rigid');
initializeRy('type', 'rigid');
initializeRz('type', 'rigid');
initializeMicroHexapod('type', 'rigid');
initializeAxisc('type', 'rigid');
initializeMirror('type', 'rigid');
Identification of the dynamics with a flexible micro-station
Flexible micro-station
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
Obtained Dynamics
IFF plant
DVF plant
X direction
Z direction
Conclusion ignore
Payload "Impedance" Effect
<<sec:payload_impedance>>
Introduction ignore
Initialization
We initialize all the stages with the default parameters.
initializeGround();
initializeGranite();
initializeTy();
initializeRy();
initializeRz();
initializeMicroHexapod();
initializeAxisc();
initializeMirror();
We don't include disturbances in this model as it adds complexity to the simulations and does not alter the obtained dynamics.
initializeSimscapeConfiguration('gravity', true);
initializeDisturbances('enable', false);
We set the controller type to Open-Loop, and we do not need to log any signal.
initializeController();
initializeLoggingConfiguration('log', 'none');
initializeReferences();
Identification of the dynamics while change the payload dynamics
- Change of mass: from 1kg to 50kg
- Change of resonance frequency: from 50Hz to 500Hz
- The damping ratio of the payload is fixed to $\xi = 0.2$
We identify the dynamics for the following payload masses Ms
and nano-hexapod leg's stiffnesses Ks
:
Ms = [1, 20, 50]; % [Kg]
Ks = logspace(3,9,7); % [N/m]
We then identify the dynamics for the following payload resonance frequencies Fs
:
Fs = [50, 200, 500]; % [Hz]
Change of optimal gain for decentralized control
For each payload, compute the optimal gain for the IFF control. The optimal value corresponds to critical damping to all the 6 modes of the nano-hexapod.
load('mat/optimal_stiffness_Gm_Gf.mat');
Change of Mass
Change of payload resonance frequency
Change of dynamics for the primary controller
For each stiffness, plot the total spread of dynamics.
load('mat/optimal_stiffness_Gm_Gf.mat');
Frequency variation
Same payload mass, but different stiffness resulting in different resonance frequency.
All curves
X direction
Z direction: We can see two mass lines for the soft nano-hexapod:
- The first mass line corresponds to $\frac{1}{(m_n + m_p)s^2}$ where $m_p = 20\ [kg]$ is the mass of the payload and $m_n = 15\ [Kg]$ is the mass of the nano-hexapod top platform and attached mirror
- The second mass line corresponds to $\frac{1}{m_n s^2}$
Mass variation
All mixed, X direction
All mixed, Z direction
Z direction
Total variation
Total change of dynamics due to change of the payload:
- mass from 1kg to 50kg
- main resonance from 50Hz to 500Hz
For a soft nano-hexapod
For a stiff nano-hexapod