nass-simscape/org/optimal_stiffness.org

45 KiB

Determination of the optimal nano-hexapod's stiffness

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:

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

Conclusion   ignore

Total Change of dynamics