Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r97eba3d39e6ddf44276b77b1aea1171805ca142d -red96c724f65f6763233b2c427456b6efd19717e6 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 97eba3d39e6ddf44276b77b1aea1171805ca142d) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision ed96c724f65f6763233b2c427456b6efd19717e6) @@ -145,7 +145,7 @@ bicarbFillStartTimeMS = 0; pendingSpentChamberFill = FALSE; pendingBicarbChamberFill = FALSE; - d48PumpSpeed = getD48MinPumpRPM(); + d48PumpSpeed = getDialysatePumpMinRPM( D48_PUMP ); //Testing bypassStateDelayStartTimeMS = 0; delayBypassStateFlag = TRUE; @@ -649,8 +649,10 @@ F32 dialFlowrate = getTDDialysateFlowrate(); F32 slope; F32 intercept; + F32 calculatedSpeed; + U32 rpm; - if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP ) ) + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_2000_PUMP ) ) { slope = PUMP_SPEED_SLOPE_FACTOR_DIENER_1000; intercept = PUMP_SPEED_INTERCEPT_FACTOR_DIENER_1000; @@ -661,7 +663,18 @@ intercept = PUMP_SPEED_INTERCEPT_FACTOR_DIENER_2000; } - return (U32)( ( slope * dialFlowrate ) + intercept ); + // Calculate nominal speed from Qd. + calculatedSpeed = ( slope * dialFlowrate ) + intercept; + + // Prevent negative before converting to unsigned and round up using ceilf. + if ( calculatedSpeed < 0.0F ) + { + calculatedSpeed = 0.0F; + } + + rpm = (U32)ceilf( calculatedSpeed ); + + return rpm; } /*********************************************************************//**