Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r752defbb739ea0756a8bf060f00bc6b9429c2764 -r03e051ef654a1bff100da02483645c4e9d0b7a30 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 752defbb739ea0756a8bf060f00bc6b9429c2764) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 03e051ef654a1bff100da02483645c4e9d0b7a30) @@ -112,6 +112,7 @@ static U32 drainControlTimerCounter = 0; ///< Determines when to perform control on drain pump. static BOOL hasClosedLoopBeenRequested = FALSE; ///< Closed loop pump control flag. static U32 currentDrainPumpRPM = 0; ///< Current drain pump RPM from feedback. +static BOOL signalNewRPMRequest = FALSE; ///< Signal flag the indicates there is a new RPM request. static DRAIN_PUMP_STATE_T pendingDrainPumpCmd = DRAIN_PUMP_OFF_STATE; ///< Delayed (pending) drain pump command. static F32 pendingDrainPumpCmdTarget = 0.0; ///< Delayed (pending) drain pump command target (rpm or PSI depending on command). @@ -134,15 +135,17 @@ * @brief * The initDrainPump function initializes the DrainPump module. * @details Inputs: none - * @details Outputs: hasClosedLoopBeenRequested + * @details Outputs: hasClosedLoopBeenRequested, targetFlushLineVolume_L, + * signalNewRPMRequest * @return none *************************************************************************/ void initDrainPump( void ) { stopDrainPump(); hasClosedLoopBeenRequested = FALSE; - targetFlushLineVolume_L = 0.0; + targetFlushLineVolume_L = 0.0; + signalNewRPMRequest = FALSE; // Initialize the drain pump PI controller initializePIController( PI_CONTROLLER_ID_DRAIN_PUMP, DRAIN_PUMP_MIN_DAC, @@ -177,6 +180,7 @@ targetDrainPumpRPM = rpm; drainPumpControlMode = PUMP_CONTROL_MODE_OPEN_LOOP; drainPumpControlModeSet = drainPumpControlMode; + signalNewRPMRequest = TRUE; result = TRUE; } else @@ -515,6 +519,8 @@ // 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 ); @@ -578,20 +584,28 @@ /*********************************************************************//** * @brief * The handleDrainPumpOpenLoopState function handles the open loop state. - * @details Inputs: none - * @details Outputs: none + * @details Inputs: signalNewRPMRequest + * @details Outputs: signalNewRPMRequest, drainPumpDACSet * @return next state of the controller state machine *************************************************************************/ static DRAIN_PUMP_STATE_T handleDrainPumpOpenLoopState( void ) { DRAIN_PUMP_STATE_T state = DRAIN_PUMP_OPEN_LOOP_STATE; - // Check if the RPM is 0, and if it is turn off the pump + // Check if the RPM is 0, then turn off the pump if ( 0 == getTargetDrainPumpRPM() ) { state = DRAIN_PUMP_OFF_STATE; signalDrainPumpHardStop(); } + // If there is a signal for a new RPM, change to the new RPM + else if ( TRUE == signalNewRPMRequest ) + { + // Set drain pump DAC + drainPumpDACSet = drainPumpDAC; + setFPGADrainPumpSpeed( drainPumpDACSet ); + signalNewRPMRequest = FALSE; + } return state; }