Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r3415fa1401df3ad8296c88269efce31b4548d200 -rc615f211e5be0bbc09c74e9f83e5c32d1a65357e --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 3415fa1401df3ad8296c88269efce31b4548d200) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision c615f211e5be0bbc09c74e9f83e5c32d1a65357e) @@ -239,6 +239,7 @@ static void checkDialInPumpMCCurrent( void ); static void checkDialInPumpFlowRate( void ); static F32 calcDialInFlow( void ); +static F32 dialysateInPumpRPMFromTargetFlowRate( F32 QdTarget ); static F32 dialysateInPumpPWMFromTargetFlowRate( F32 QdTarget ); static BOOL testSetDialInPumpWithPWM( F32 pwm ); @@ -827,23 +828,39 @@ /*********************************************************************//** * @brief - * The dialysateInPumpPWMFromTargetFlowRate function calculates a motor PWM setting + * The dialysateInPumpRPMFromTargetFlowRate function calculates a motor RPM * from the estimator based on target flow rate and tubing wear. * @details Inputs: dialInPumpRotorCounter * @details Outputs: none * @param QdTarget target dialysate flow rate - * @return Motor PWM value for given target flow rate + * @return Motor RPM value for given target flow rate *************************************************************************/ -static F32 dialysateInPumpPWMFromTargetFlowRate( F32 QdTarget ) +static F32 dialysateInPumpRPMFromTargetFlowRate( F32 QdTarget ) { U32 r = getDialInPumpRotorCount(); U32 rotCount = CAP( r, DIAL_IN_MAX_ROTOR_COUNT_FOR_WEAR ); F32 wearFactor = DIAL_IN_FLOW_WEAR_A_TERM * (F32)rotCount + DIAL_IN_FLOW_WEAR_B_TERM; F32 Pest = DIAL_IN_FLOW_PEST_A_TERM * ( QdTarget * QdTarget ) + DIAL_IN_FLOW_PEST_B_TERM * QdTarget + DIAL_IN_FLOW_PEST_C_TERM; F32 alphaTerm = wearFactor * Pest + DIAL_IN_FLOW_A_ZERO; F32 rpmTgt = QdTarget * DIAL_IN_GEAR_RATIO / ( 2 * DIAL_IN_STROKE_VOLUME * alphaTerm ); - F32 pwmDC = DIP_MOTOR_SPEED_RPM_TO_PWM( rpmTgt ); + return rpmTgt; +} + +/*********************************************************************//** + * @brief + * The dialysateInPumpPWMFromTargetFlowRate function calculates a motor PWM + * setting from a given target flow rate. + * @details Inputs: none + * @details Outputs: none + * @param QdTarget target dialysate flow rate + * @return Motor PWM value for given RPM + *************************************************************************/ +static F32 dialysateInPumpPWMFromTargetFlowRate( F32 QdTarget ) +{ + F32 rpmTgt = dialysateInPumpRPMFromTargetFlowRate( QdTarget ); + F32 pwmDC = DIP_MOTOR_SPEED_RPM_TO_PWM( rpmTgt ); + return pwmDC; } @@ -1373,7 +1390,7 @@ { F32 flow = (F32)targetDialInFlowRate; F32 speed = getMeasuredDialInPumpSpeed(); - F32 impliedSpeed = ( flow * DIP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * DIP_GEAR_RATIO ); + F32 impliedSpeed = dialysateInPumpRPMFromTargetFlowRate( flow ); F32 delta = fabs( speed - impliedSpeed ); if ( delta > DIP_MAX_FLOW_VS_SPEED_DIFF_RPM )