M1M3 Support System
Loading...
Searching...
No Matches
LSST::M1M3::SS::ForceController Class Reference

Coordinate force actuators force calculcation. More...

#include <ForceController.h>

Public Member Functions

 ForceController (ForceActuatorApplicationSettings *forceActuatorApplicationSettings)
 
void reset ()
 
void updateTMAElevationData (MTMount_elevationC *tmaElevationData)
 Updates elevation data.
 
bool faRaiseFollowingErrorInTolerance ()
 Tests following error on all actuaturs.
 
void updateAppliedForces ()
 
void processAppliedForces ()
 Sums components and run mirror safety checks.
 
bool applyAccelerationForces ()
 Apply acceleration forces.
 
void zeroAccelerationForces ()
 
void applyActiveOpticForces (float *z)
 
void zeroActiveOpticForces ()
 
void applyAzimuthForces ()
 
void updateTMAAzimuthForces (MTMount_azimuthC *tmaAzimuthData)
 
void zeroAzimuthForces ()
 
bool applyBalanceForces ()
 
bool zeroBalanceForces ()
 
void updatePID (int id, PIDParameters parameters)
 
void resetPID (int id)
 Reset given PID settings to system default (tracking).
 
void resetPIDs ()
 Resets all PIDs to initial (tracking) settings.
 
void freezePIDs ()
 
void thawPIDs ()
 
void applyElevationForces ()
 
void zeroElevationForces ()
 
void applyOffsetForces (float *x, float *y, float *z)
 
void applyOffsetForcesByMirrorForces (float xForce, float yForce, float zForce, float xMoment, float yMoment, float zMoment)
 
void zeroOffsetForces ()
 
void applyActuatorOffset (char axis, int index, float offset)
 
void applyStaticForces ()
 
void zeroStaticForces ()
 
void applyThermalForces ()
 
void updateThermalForces (float temperature)
 
void zeroThermalForces ()
 
bool applyVelocityForces ()
 Apply velocity forces.
 
void zeroVelocityForces ()
 
void enableDisableForceComponent (int forceComponentEnum, bool enabled)
 

Detailed Description

Coordinate force actuators force calculcation.

The mirror weight and external forces acting on the mirror shall be counteracted by the force actuators. ForceController coordinates this - calculates contribution of the mirror weight and external forces (acceleration,..), distributes this between the force actuators. It also check for the mirror safety - runs various checks on the computed forces to confirm mirror stress stays within the mirror stress limits.

Mirror operation

Without any power and active corrections, M1M3 mirror is resting on the passive supports (coil springs). When the mirror shall be operated, it needs to be raised on active force controllers above the passive support. Rainsing of the mirror needs to be done in steps, progressing from passive support towards fully active support.

Mirror weight (gravitational force, which depends on elevation, so is calculated by ElevationForceComponent) can be supported (counteracted) from 0 to 100%. Mirror is active when its weight is fully supported by actuators. See RaisingLoweringInfo for methods to manipulate the support percentage. As the mirror is being raised, the support fraction is increased. When the mirror is being lowered, its support fraction is lowered.

The force actuator state and enabled ForceComponent subclass is reported in forceActuatorState event.

Various other corrections - manual offsets, dynamic force (acceleration when TMA is moving), bending mode corrections for active optics - are handled in dedicated ForceComponent subclass. Those are enabled only if mirror is active, fully supported against gravity (handled by ElevationForceComponent).

Distribution of mirror forces

Calculated force demands are stored in preclipped* events (prelippedElevationForces,..). Those are clip into allowed range, and the resulting force is stored in applied* (appliedElevationForces,..) events.

The algorithm tries to prevent large changes in applied forces. If a large change is detected, the change is distributed to multiple steps. After their execution, mirror shall end in requested position and shape.

The algorithm tries to do its best to prevent mirror panic due to violation of stress limits. Stress limits are then checked, and if violation is detected, mirror is send to State::LoweringFaultState (panic mode).

Mirror safety

Following checks are run:

  • Mirror moments - _checkMirrorMoments
  • Near neighbors - _checkNearNeighbors
  • Mirror weight - _checkMirrorWeight
  • Far neighbors - _checkFarNeighbors

Please see LBTO UA 95-02 document for description of those checks (Chapter 9 [Mirror Support Safety], Subchapter 9.2 [Methods of Protection]).

The checks are run from ForceController::processAppliedForces() method.

Check results are reported to SafetyController. Any violation of the M1M3 limits leads to SafetyController::checkSafety() returning States::LoweringFaultState as next M1M3. That forces M1M3 to panic and go to passive supports, as violations aren't allowed.

Member Function Documentation

◆ applyAccelerationForces()

bool ForceController::applyAccelerationForces ( )

Apply acceleration forces.

Returns
true if acceleration forces were already enabled

◆ applyVelocityForces()

bool ForceController::applyVelocityForces ( )

Apply velocity forces.

Returns
true if velocity forces were already enabled

◆ faRaiseFollowingErrorInTolerance()

bool ForceController::faRaiseFollowingErrorInTolerance ( )

Tests following error on all actuaturs.

Reports any violation into spdlog.

Here is the call graph for this function:

◆ processAppliedForces()

void ForceController::processAppliedForces ( )

Sums components and run mirror safety checks.

Uses FinalForceComponent to sum mirror forces obtained from AccelerationForceComponent, ActiveOpticForceComponent, AzimuthForceComponent, BalanceForceComponent, ElevationForceComponent, OffsetForceComponent, StaticForceComponent, ThermalForceComponent and VelocityForceComponent. Run mirror safety checks on summed forces, and log warning if forces are clipped.

◆ resetPID()

void ForceController::resetPID ( int id)

Reset given PID settings to system default (tracking).

Parameters
idPID id (0 based, 0-5)

◆ updateTMAElevationData()

void LSST::M1M3::SS::ForceController::updateTMAElevationData ( MTMount_elevationC * tmaElevationData)

Updates elevation data.

Parameters
tmaElevationData

The documentation for this class was generated from the following files: