Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r6915ff465d44eb7bc1552016c4dd5321a51e3402 -r6a1cc50b6b021fd416783d76df53cbfcfdb44a1b --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 6915ff465d44eb7bc1552016c4dd5321a51e3402) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 6a1cc50b6b021fd416783d76df53cbfcfdb44a1b) @@ -63,14 +63,14 @@ #define MIN_ALLOWED_TARGET_OUTLET_PRESSURE -10.0 ///< Minimum allowed outlet pressure for closed loop control. #define MAX_ALLOWED_TARGET_OUTLET_PRESSURE 10.0 ///< Maximum allowed outlet pressure for closed loop control. -#define OPEN_LOOP_RPM_OUT_OF_RANGE_PERCENT 0.1 ///< Maximum allowed RPM out of range from target RPM in open loop percent. +#define OPEN_LOOP_RPM_OUT_OF_RANGE 0.1 ///< Maximum allowed RPM out of range from target RPM in open loop percent. #define OPEN_LOOP_RPM_OUT_OF_RANGE_TIME_OUT ( 5 * MS_PER_SECOND ) ///< Open loop RPM out of range time out in ms. #define DRAIN_PUMP_ENABLE_SPI3_PORT_MASK 0x00000020 ///< CS5 - Out put GPIO for pump enable. -#define SET_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 |= DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} ///< drain pump enable set macro. -#define CLR_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 &= ~DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} ///< drain pump enable clear macro. +#define SET_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 |= DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} ///< Drain pump enable set macro. +#define CLR_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 &= ~DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} ///< Drain pump enable clear macro. -#define SAFETY_SHUTDOWN_TIMEOUT_COUNT ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< drain pump safety shutdown activation timeout in counts. +#define SAFETY_SHUTDOWN_TIMEOUT_COUNT ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Drain pump safety shutdown activation timeout in counts. /// Enumeration of drain pump states. typedef enum DrainPump_States @@ -92,16 +92,16 @@ // ********** private data ********** -static DRAIN_PUMP_STATE_T drainPumpState = DRAIN_PUMP_OFF_STATE; ///< current state of drain pump controller state machine. -static U32 drainPumpDataPublicationTimerCounter = 0; ///< used to schedule drain pump data publication to CAN bus. -static U32 drainPumpDAC = 0; ///< initial drain pump DAC value. -static U32 drainPumpDACSet = 0; ///< currently set drain pump DAC value. -static PUMP_CONTROL_MODE_T drainPumpControlMode = NUM_OF_PUMP_CONTROL_MODES; ///< requested drain pump control mode. -static PUMP_CONTROL_MODE_T drainPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< currently set drain pump control mode. +static DRAIN_PUMP_STATE_T drainPumpState = DRAIN_PUMP_OFF_STATE; ///< Current state of drain pump controller state machine. +static U32 drainPumpDataPublicationTimerCounter = 0; ///< Used to schedule drain pump data publication to CAN bus. +static U32 drainPumpDAC = 0; ///< Initial drain pump DAC value. +static U32 drainPumpDACSet = 0; ///< Currently set drain pump DAC value. +static PUMP_CONTROL_MODE_T drainPumpControlMode = NUM_OF_PUMP_CONTROL_MODES; ///< Requested drain pump control mode. +static PUMP_CONTROL_MODE_T drainPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< Currently set drain pump control mode. static OVERRIDE_U32_T drainPumpDataPublishInterval = { DRAIN_PUMP_DATA_PUB_INTERVAL, DRAIN_PUMP_DATA_PUB_INTERVAL, - 0, 0 }; ///< interval (in ms) at which to publish RO flow data to CAN bus. + 0, 0 }; ///< Interval (in ms) at which to publish RO flow data to CAN bus. static U32 targetDrainPumpRPM = 0; ///< Target drain pump RPM. static F32 targetDrainPumpOutletPressure = 0.0; ///< Target outlet pressure for the drain pump. @@ -111,8 +111,8 @@ static U32 safetyShutdownTimeoutCounter = 0; ///< Timeout counter to activate safety shutdown. /* TODO These variables are used for POST. POST will be implemented later -static DRAIN_PUMP_SELF_TEST_STATE_T drainPumpSelfTestState = DRAIN_PUMP_SELF_TEST_STATE_START; ///< current drain pump self test state. -static U32 drainPumpSelfTestTimerCount = 0; ///< timer counter for drain pump self test. +static DRAIN_PUMP_SELF_TEST_STATE_T drainPumpSelfTestState = DRAIN_PUMP_SELF_TEST_STATE_START; ///< Current drain pump self test state. +static U32 drainPumpSelfTestTimerCount = 0; ///< Timer counter for drain pump self test. */ /// ADC to RPM conversion coefficient or RPM to ADC conversion. @@ -257,16 +257,17 @@ // when the pump is turned on and it takes a while to ramp up to target RPM. if( drainPumpControlModeSet == PUMP_CONTROL_MODE_OPEN_LOOP ) { - F32 threshold = OPEN_LOOP_RPM_OUT_OF_RANGE_PERCENT * getTargetDrainPumpRPM(); + U32 targetRPM = getTargetDrainPumpRPM(); + F32 threshold = OPEN_LOOP_RPM_OUT_OF_RANGE * targetRPM; // Check if RPM is out of range. Using fabs since the read RPM can be above or below the target. - BOOL isRPMOutOfRange = fabs( getTargetDrainPumpRPM() - currentDrainPumpRPM ) > threshold; + BOOL isRPMOutOfRange = fabs( targetRPM - currentDrainPumpRPM ) > threshold; checkPersistentAlarm( PERSISTENT_ALARM_DRAIN_PUMP_RPM_OUT_OF_RANGE, isRPMOutOfRange, currentDrainPumpRPM, threshold ); } // Check if the pump is in off state and the RPM is greater than the minimum RPM - if ( drainPumpState == DRAIN_PUMP_OFF_STATE && currentDrainPumpRPM > MIN_DRAIN_PUMP_RPM ) + if ( ( drainPumpState == DRAIN_PUMP_OFF_STATE ) && ( currentDrainPumpRPM > MIN_DRAIN_PUMP_RPM ) ) { // Check if the RPM is not 0 for more that the specified time and if it is, activate the safety shutdown if ( ++safetyShutdownTimeoutCounter > SAFETY_SHUTDOWN_TIMEOUT_COUNT )