Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r3f22d883958a14b6193d6cd59c9acdbbd359b69e -rd717fd8e877c00b205621ca5ef885c9a59c47376 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 3f22d883958a14b6193d6cd59c9acdbbd359b69e) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision d717fd8e877c00b205621ca5ef885c9a59c47376) @@ -36,7 +36,7 @@ #define CONCENTRATE_PUMP_MIN_SPEED 3.0 ///< Minimum speed for concentrate pump in mL per min. #define CONCENTRATE_PUMP_MAX_SPEED 49.0 ///< Maximum speed for concentrate pump in mL per min. #define CONCENTRATE_PUMP_ERROR_TOLERANCE 0.02 ///< Measured speed needs to be within 2% of commanded speed. -#define CONCENTRATE_PUMP_ZERO_FLOW_RATE_PULSE_WIDTH 0xFFFF ///< Pulse width value when zero flow rate or pump is off. +#define CONCENTRATE_PUMP_ZERO_FLOW_RATE 0xFFFF ///< Pulse width value when zero flow rate or pump is off. #define CONCENTRATE_PUMP_VOLUME_PER_REV 0.15 ///< Volume output every revolution (mL). #define CONCENTRATE_PUMP_PULSE_PER_REV 4.0 ///< Number of pulses generate for every revolution. @@ -64,8 +64,7 @@ // ********** private data ********** static CONCENTRATE_PUMP_STATE_T concentratePumpState; ///< Concentrate pump module current state. -static BOOL isPumpOnRequested; ///< Flag indicates a request to turn concentrate pumps on. -static BOOL isPumpOffRequested; ///< Flag indicates a request to turn concentrate pumps off. +static BOOL hasTurnOnPumpsBeenRequested; ///< Flag indicates a request to turn concentrate pumps on. static U32 concentratePumpControlTimerCounter; ///< Timer counter to perform control on concentrate pump. static U32 concentratePumpMonitorTimerCounter; ///< Timer counter to perform monitor on concentrate pump. @@ -99,8 +98,7 @@ void initConcentratePump( void ) { concentratePumpState = CONCENTRATE_PUMP_OFF_STATE; - isPumpOnRequested = FALSE; - isPumpOffRequested = FALSE; + hasTurnOnPumpsBeenRequested = FALSE; concentratePumpControlTimerCounter = 0; concentratePumpMonitorTimerCounter = 0; @@ -180,7 +178,7 @@ *************************************************************************/ void requestConcentratePumpsOn( void ) { - isPumpOnRequested = TRUE; + hasTurnOnPumpsBeenRequested = TRUE; } /*********************************************************************//** @@ -193,7 +191,7 @@ *************************************************************************/ void requestConcentratePumpsOff( void ) { - isPumpOffRequested = TRUE; + hasTurnOnPumpsBeenRequested = FALSE; pumpTargetSpeed[ CONCENTRATEPUMPS_CP1 ] = 0.0; pumpTargetSpeed[ CONCENTRATEPUMPS_CP2 ] = 0.0; } @@ -264,13 +262,12 @@ { CONCENTRATE_PUMP_STATE_T state = CONCENTRATE_PUMP_OFF_STATE; - if ( isPumpOnRequested ) + if ( TRUE == hasTurnOnPumpsBeenRequested ) { setFPGACP1Control( CONCENTRATE_PUMP_ON_CONTROL ); setFPGACP2Control( CONCENTRATE_PUMP_ON_CONTROL ); state = CONCENTRATE_PUMP_ON_STATE; - isPumpOnRequested = FALSE; } return state; @@ -310,9 +307,16 @@ currentPumpSpeed[ pumpId ] += speedIncrease; } - F32 const timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV / ( currentPumpSpeed[ pumpId ] * CONCENTRATE_PUMP_STEP_PER_REV ) ; - F32 const stepPeriodCounts = timePerStep / ( CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION * CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ); - togglePeriodCount[ pumpId ] = (U16)( stepPeriodCounts + 0.5 ); + if ( currentPumpSpeed[ pumpId ] > NEARLY_ZERO ) + { + F32 const timePerStep = CONCENTRATE_PUMP_VOLUME_PER_REV / ( currentPumpSpeed[ pumpId ] * CONCENTRATE_PUMP_STEP_PER_REV ) ; + F32 const stepPeriodCounts = timePerStep / ( CONCENTRATE_PUMP_STEP_PERIOD_RESOLUTION * CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ); + togglePeriodCount[ pumpId ] = (U16)( stepPeriodCounts + 0.5 ); + } + else + { + togglePeriodCount[ pumpId ] = CONCENTRATE_PUMP_ZERO_FLOW_RATE; + } } /*********************************************************************//** @@ -339,11 +343,9 @@ setFPGACP2SetStepSpeed( togglePeriodCount[ CONCENTRATEPUMPS_CP2 ] ); } - if ( isPumpOffRequested ) + if ( FALSE == hasTurnOnPumpsBeenRequested ) { state = CONCENTRATE_PUMP_OFF_STATE; - isPumpOffRequested = FALSE; - stopConcentratePump(); } @@ -385,7 +387,7 @@ F32 const pulseWidthInSecond = (F32)( pulseWidthCount * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION ) / US_PER_SECOND; measuredPumpSpeed[ pumpId ].data = ( 1 / pulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; - if ( CONCENTRATE_PUMP_ZERO_FLOW_RATE_PULSE_WIDTH == pulseWidthCount ) + if ( CONCENTRATE_PUMP_ZERO_FLOW_RATE == pulseWidthCount ) { measuredPumpSpeed[ pumpId ].data = 0.0; }