Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r1aeab08c1baf6445514b81fe51fc60a3e536e782 -r2bb3eb5316eef6a7eccf41f8815de100aa6abee7 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 1aeab08c1baf6445514b81fe51fc60a3e536e782) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 2bb3eb5316eef6a7eccf41f8815de100aa6abee7) @@ -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; } @@ -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;