Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r1aeab08c1baf6445514b81fe51fc60a3e536e782 -r3b5080777e3dac1b5802ee18227f66a0b49deefa --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 1aeab08c1baf6445514b81fe51fc60a3e536e782) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 3b5080777e3dac1b5802ee18227f66a0b49deefa) @@ -67,7 +67,7 @@ #define MAX_ALLOWED_TARGET_OUTLET_PRESSURE 15.0 ///< Maximum allowed outlet pressure for closed loop control. #define MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE 100 ///< Maximum allowed RPM out of range from target RPM in open loop. -#define OPEN_LOOP_RPM_OUT_OF_RANGE_TIME_OUT ( 5 * MS_PER_SECOND ) ///< Open loop RPM out of range time out in ms. +#define OPEN_LOOP_RPM_OUT_OF_RANGE_TIME_OUT ( 10 * 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. @@ -175,11 +175,14 @@ if ( ( 0 == rpm ) || ( ( rpm >= MIN_DRAIN_PUMP_RPM ) && ( rpm <= MAX_DRAIN_PUMP_RPM ) ) ) { - drainPumpDAC = (U32)GET_RPM_2_DAC_CONVERSION(rpm); - targetDrainPumpRPM = rpm; - drainPumpControlMode = PUMP_CONTROL_MODE_OPEN_LOOP; - drainPumpControlModeSet = drainPumpControlMode; - signalNewRPMRequest = TRUE; + drainPumpDAC = (U32)GET_RPM_2_DAC_CONVERSION(rpm); + targetDrainPumpRPM = rpm; + drainPumpControlMode = PUMP_CONTROL_MODE_OPEN_LOOP; + drainPumpControlModeSet = drainPumpControlMode; + signalNewRPMRequest = TRUE; + // If this function was called, delayed command does not need to be executed + // so the pending count down is zeroed. + pendingDrainPumpCmdCountDown = 0; result = TRUE; } else @@ -207,8 +210,8 @@ if ( ( 0 == rpm ) || ( ( rpm >= MIN_DRAIN_PUMP_RPM ) && ( rpm <= MAX_DRAIN_PUMP_RPM ) ) ) { - pendingDrainPumpCmd = DRAIN_PUMP_OPEN_LOOP_STATE; - pendingDrainPumpCmdTarget = (F32)rpm; + pendingDrainPumpCmd = DRAIN_PUMP_OPEN_LOOP_STATE; + pendingDrainPumpCmdTarget = (F32)rpm; pendingDrainPumpCmdCountDown = delayMs / TASK_GENERAL_INTERVAL; result = TRUE; } @@ -299,14 +302,14 @@ stopDrainPump(); // Reset all the variables to stop mode - targetDrainPumpRPM = 0; - drainPumpState = DRAIN_PUMP_OFF_STATE; - hasClosedLoopBeenRequested = FALSE; - drainPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; - drainPumpControlModeSet = drainPumpControlMode; - drainControlTimerCounter = 0; - pendingDrainPumpCmd = DRAIN_PUMP_OFF_STATE; - pendingDrainPumpCmdTarget = 0.0; + targetDrainPumpRPM = 0; + drainPumpState = DRAIN_PUMP_OFF_STATE; + hasClosedLoopBeenRequested = FALSE; + drainPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; + drainPumpControlModeSet = drainPumpControlMode; + drainControlTimerCounter = 0; + pendingDrainPumpCmd = DRAIN_PUMP_OFF_STATE; + pendingDrainPumpCmdTarget = 0.0; pendingDrainPumpCmdCountDown = 0; } @@ -356,7 +359,7 @@ checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, isRPMTooHigh, getDrainPumpMeasuredRPM(), MIN_DRAIN_PUMP_RPM ); // If the off fault alarm has become active, trigger the safety shutdown - if ( isAlarmActive( ALARM_ID_DRAIN_PUMP_OFF_FAULT ) ) + if ( TRUE == isAlarmActive( ALARM_ID_DRAIN_PUMP_OFF_FAULT ) ) { activateSafetyShutdown(); } @@ -396,9 +399,10 @@ targetDrainPumpRPM = (U32)pendingDrainPumpCmdTarget; drainPumpControlMode = PUMP_CONTROL_MODE_OPEN_LOOP; drainPumpControlModeSet = drainPumpControlMode; + signalNewRPMRequest = TRUE; } pendingDrainPumpCmdTarget = 0.0; - pendingDrainPumpCmd = DRAIN_PUMP_OFF_STATE; + pendingDrainPumpCmd = DRAIN_PUMP_OFF_STATE; } } @@ -539,8 +543,6 @@ // Set drain pump enable pin SET_DRAIN_PUMP_ENABLE(); - // Turn off the new RPM signal - signalNewRPMRequest = FALSE; // Set drain pump DAC drainPumpDACSet = drainPumpDAC; setFPGADrainPumpSpeed( drainPumpDACSet ); @@ -609,9 +611,9 @@ if ( TRUE == signalNewRPMRequest ) { // Set drain pump DAC - drainPumpDACSet = drainPumpDAC; - setFPGADrainPumpSpeed( drainPumpDACSet ); + drainPumpDACSet = drainPumpDAC; signalNewRPMRequest = FALSE; + setFPGADrainPumpSpeed( drainPumpDACSet ); } return state;