Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r8fc97ad09c8cbdf76dc19929c4751df3feacb40d -rf18743ef7ba9e50e0af3e34882ffae7f7ab62834 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 8fc97ad09c8cbdf76dc19929c4751df3feacb40d) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision f18743ef7ba9e50e0af3e34882ffae7f7ab62834) @@ -205,15 +205,19 @@ U08 cp1Direction = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].direction; F32 cp1SetSpeed = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].currentPumpSpeed; F32 cp1Speed = getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ); + F32 cp1TgtSpeed = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].pumpTargetSpeed; U08 cp2Direction = concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].direction; F32 cp2SetSpeed = concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].currentPumpSpeed; F32 cp2Speed = getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2_BICARB ); + F32 cp2TgtSpeed = concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].pumpTargetSpeed; // Use the above values to prepare the broadcast data data.cp1CurrentSetSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == cp1Direction ? cp1SetSpeed * -1.0 : cp1SetSpeed ); data.cp1MeasuredSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == cp1Direction ? cp1Speed * -1.0 : cp1Speed ); + data.cp1TargetSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == cp1Direction ? cp1TgtSpeed * -1.0 : cp1TgtSpeed ); data.cp2CurrentSetSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == cp2Direction ? cp2SetSpeed * -1.0 : cp2SetSpeed ); data.cp2MeasuredSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == cp2Direction ? cp2Speed * -1.0 : cp2Speed ); + data.cp2TargetSpeed = ( CONCENTRATE_PUMP_REVERSE_DIR == cp2Direction ? cp2TgtSpeed * -1.0 : cp2TgtSpeed ); data.cp1State = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].execState; data.cp2State = concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].execState; data.cp1PulseUS = concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].pulseWidthUS; @@ -591,6 +595,12 @@ } concentratePumps[ pumpId ].currentPumpSpeed += speedIncrease; + + // If the pump's target speed is set to be 0, do not ramp down set it to zero immediately + if ( fabs( concentratePumps[ pumpId ].pumpTargetSpeed < NEARLY_ZERO ) ) + { + concentratePumps[ pumpId ].currentPumpSpeed = 0.0; + } } if ( concentratePumps[ pumpId ].currentPumpSpeed > NEARLY_ZERO ) @@ -604,9 +614,16 @@ concentratePumps[ pumpId ].togglePeriodCount = CONCENTRATE_PUMP_ZERO_FLOW_RATE; } - CONCENTRATEPUMPS_CP1_ACID == pumpId ? setFPGAAcidPumpSetStepSpeed( concentratePumps[ pumpId ].togglePeriodCount ) : - setFPGABicarbSetStepSpeed( concentratePumps[ pumpId ].togglePeriodCount ); + if ( CONCENTRATEPUMPS_CP1_ACID == pumpId ) + { + setFPGAAcidPumpSetStepSpeed( concentratePumps[ pumpId ].togglePeriodCount ); + } + else + { + setFPGABicarbSetStepSpeed( concentratePumps[ pumpId ].togglePeriodCount ); + } + return hasTgtBeenReached; } @@ -652,7 +669,7 @@ *************************************************************************/ static void monitorPumpSpeed( CONCENTRATE_PUMPS_T pumpId, ALARM_ID_T alarm ) { - F32 cpTargetSpeed = concentratePumps[ pumpId ].pumpTargetSpeed; + F32 cpTargetSpeed = concentratePumps[ pumpId ].currentPumpSpeed; F32 cpError = fabs( getMeasuredPumpSpeed( pumpId ) - cpTargetSpeed ); BOOL isCpSpeedOut = FALSE; Index: firmware/App/Controllers/ConcentratePumps.h =================================================================== diff -u -r9826fc85bd1497ec617ae0e825f78b91972de2b3 -rf18743ef7ba9e50e0af3e34882ffae7f7ab62834 --- firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 9826fc85bd1497ec617ae0e825f78b91972de2b3) +++ firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision f18743ef7ba9e50e0af3e34882ffae7f7ab62834) @@ -52,6 +52,8 @@ U32 cp2State; ///< Concentrate pump CP2 current state F32 cp1PulseUS; ///< Concentrate pump CP1 pulse in microseconds F32 cp2PulseUS; ///< Concentrate pump CP2 pulse in microseconds + F32 cp1TargetSpeed; ///< Concentrate pump CP1 target speed + F32 cp2TargetSpeed; ///< Concentrate pump CP2 target speed } CONCENTRATE_PUMP_DATA_T; // ********** public function prototypes **********