Index: firmware/App/Controllers/Ejector.c =================================================================== diff -u -rb0ae8e670f18913bf88da41394ac28b111d184ea -rfe9b77e60850fe37da225d4348f0a6a8defc28db --- firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision b0ae8e670f18913bf88da41394ac28b111d184ea) +++ firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision fe9b77e60850fe37da225d4348f0a6a8defc28db) @@ -31,13 +31,13 @@ // ********** private definitions ********** #define EJECTOR_RETRACT_OP_TIME ( ( MS_PER_SECOND * 5 ) / TASK_GENERAL_INTERVAL ) ///< Ejector retract operation interval. -#define EJECTOR_EXTEND_OP_TIME ( ( MS_PER_SECOND * 4 ) / TASK_GENERAL_INTERVAL ) ///< Ejector extend operation interval. +#define EJECTOR_EXTEND_OP_TIME ( ( MS_PER_SECOND * 10 ) / TASK_GENERAL_INTERVAL ) ///< Ejector extend operation interval. #define EJECTOR_BACKOFF_OP_TIME ( 50 / TASK_GENERAL_INTERVAL ) ///< Ejector back-off operation interval. #define EJECTOR_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Ejector data publish interval. #define DATA_PUBLISH_COUNTER_START_COUNT 13 ///< Ejector data publish start counter. #define EJECTOR_RETRACT_MOTOR_SPEED_RPM -350.0F ///< Ejector motor retract speed (in RPM). -#define EJECTOR_EXTEND_MOTOR_SPEED_RPM 350.0F ///< Ejector motor extend speed (in RPM). +#define EJECTOR_EXTEND_MOTOR_SPEED_RPM 162.5F ///< Ejector motor extend speed (in RPM). #define EJECTOR_OFF_MOTOR_SPEED_RPM 0.0F ///< Ejector motor extend speed (in RPM). /// Enumeration of ejector states. @@ -73,6 +73,7 @@ static EJECTOR_STATE_T handleEjectorRetractBackoffState( void ); static EJECTOR_STATE_T handleEjectorDirChangeStopState( void ); static EJECTOR_STATE_T handleEjectorAbortState( void ); +static void setEjectorSpeed( F32 speed ); static void resetEjectorFlags( void ); static void publishEjectorData( void ); @@ -118,6 +119,21 @@ /*********************************************************************//** * @brief + * The setEjectorSpeed function records the requested ejector speed and + * sets the ejector motor speed to that speed. + * @details \b Inputs: none + * @details \b Outputs: currentEjectorSetSpeed + * @param speed Target speed for ejector motor. + * @return none + *************************************************************************/ +static void setEjectorSpeed( F32 speed ) +{ + currentEjectorSetSpeed = speed; + setEjectorMotorSpeed( currentEjectorSetSpeed ); +} + +/*********************************************************************//** + * @brief * The homeEjector function requests an ejector home operation. * @details \b Inputs: currentEjectorState * @details \b Outputs: ejectorHomeRequested @@ -132,6 +148,10 @@ ejectorHomeRequested = TRUE; result = TRUE; } + else + { + result = retractEjector(); + } return result; } @@ -282,9 +302,13 @@ if ( TRUE == ejectorHomeRequested ) { ejectorOperationTimerCounter = 0; - setEjectorMotorSpeed( EJECTOR_RETRACT_MOTOR_SPEED_RPM ); + setEjectorSpeed( EJECTOR_RETRACT_MOTOR_SPEED_RPM ); state = EJECTOR_STATE_HOMING; } + else + { + disableEjectorMotor(); + } return state; } @@ -304,7 +328,7 @@ if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) { ejectorOperationTimerCounter = 0; - setEjectorMotorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); + setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); state = EJECTOR_STATE_DIR_CHANGE_STOP; } @@ -326,9 +350,13 @@ if ( TRUE == ejectorExtendRequested ) { ejectorOperationTimerCounter = 0; - setEjectorMotorSpeed( EJECTOR_EXTEND_MOTOR_SPEED_RPM ); + setEjectorSpeed( EJECTOR_EXTEND_MOTOR_SPEED_RPM ); state = EJECTOR_STATE_EXTENDING; } + else + { + disableEjectorMotor(); + } return state; } @@ -348,9 +376,13 @@ if ( TRUE == ejectorRetractRequested ) { ejectorOperationTimerCounter = 0; - setEjectorMotorSpeed( EJECTOR_RETRACT_MOTOR_SPEED_RPM ); + setEjectorSpeed( EJECTOR_RETRACT_MOTOR_SPEED_RPM ); state = EJECTOR_STATE_RETRACTING; } + else + { + disableEjectorMotor(); + } return state; } @@ -370,7 +402,7 @@ if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) { ejectorOperationTimerCounter = 0; - setEjectorMotorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); + setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); state = EJECTOR_STATE_DIR_CHANGE_STOP; } @@ -392,7 +424,7 @@ if ( ++ejectorOperationTimerCounter >= EJECTOR_BACKOFF_OP_TIME ) { ejectorOperationTimerCounter = 0; - setEjectorMotorSpeed( EJECTOR_EXTEND_MOTOR_SPEED_RPM ); + setEjectorSpeed( EJECTOR_EXTEND_MOTOR_SPEED_RPM ); state = EJECTOR_STATE_RETRACT_BACKOFF; } @@ -414,7 +446,7 @@ if ( ++ejectorOperationTimerCounter >= EJECTOR_BACKOFF_OP_TIME ) { ejectorOperationTimerCounter = 0; - setEjectorMotorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); + setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); state = EJECTOR_STATE_RETRACTED; } @@ -433,10 +465,10 @@ { EJECTOR_STATE_T state = EJECTOR_STATE_EXTENDING; - if ( ++ejectorOperationTimerCounter >= EJECTOR_RETRACT_OP_TIME ) + if ( ++ejectorOperationTimerCounter >= EJECTOR_EXTEND_OP_TIME ) { ejectorOperationTimerCounter = 0; - setEjectorMotorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); + setEjectorSpeed( EJECTOR_OFF_MOTOR_SPEED_RPM ); state = EJECTOR_STATE_EXTENDED; }