Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -rac5e52d907ff6adad795d8f81ca8206c5cd33c77 -red96c724f65f6763233b2c427456b6efd19717e6 --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision ac5e52d907ff6adad795d8f81ca8206c5cd33c77) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision ed96c724f65f6763233b2c427456b6efd19717e6) @@ -74,7 +74,6 @@ #define D12_PUMP_I_COEFFICIENT 60.0F ///< I term for fresh dialysate pump delta pressure control. #define D48_PUMP_P_COEFFICIENT 20.0F ///< P term for spent dialysate pump delta pressure control. #define D48_PUMP_I_COEFFICIENT 60.0F ///< I term for spent dialysate pump delta pressure control. -#define D48_PUMP_CLOSED_LOOP_DEADBAND_RPM 50.0F ///< Deadband on PI output so pump speed does not fluctuate frequently. #define DIAL_PUMP_NO_FEED_FORWARD 0.0F ///< Feedforward term for dialysate pump control #define DEGAS_PUMP_SLOPE_FACTOR -0.0156F ///< Dialysate pump target pressure multiply factor ( m factor in 'y = mx + b' equation) #define DEGAS_PUMP_INTERCEPT_FACTOR 0.1153F ///< Dialysate pump target pressure addition factor ( b factor in 'y = mx + b' equation) @@ -160,37 +159,53 @@ * @brief * The getD48MinPumpRPM function returns the minimum RPM limit for the D48 pump * based on test configuration (Diener 1000 vs Diener 2000). - * @details \b Inputs: Test configuration TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP. + * @details \b Inputs: Test configuration TEST_CONFIG_DD_ENABLE_DIENER_2000_PUMP. * @details \b Outputs: none - * @return Minimum RPM for D48 pump (134 when Diener 1000 enabled, 200 otherwise). + * @param pumpId to set the pump speed accordingly + * @return Minimum RPM for D48 pump (200 when Diener 2000 enabled, 134 otherwise). *************************************************************************/ -U32 getD48MinPumpRPM( void ) +U32 getDialysatePumpMinRPM( DIALYSATE_PUMPS_T pumpId ) { U32 minRpm = MIN_DIALYSATE_PUMP_RPM; - if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP ) ) + if ( D48_PUMP == pumpId ) { + // Default to Diener 1000 min when that test config is active; + // otherwise use the common MIN_DIALYSATE_PUMP_RPM (Diener 2000 / beta systems). minRpm = D48_DIENER_1000_MIN_RPM; + + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_2000_PUMP ) ) + { + minRpm = MIN_DIALYSATE_PUMP_RPM; + } } return minRpm; } /*********************************************************************//** * @brief - * The getD48MaxPumpRPM function returns the maximum RPM limit for the D48 pump - * based on test configuration (Diener 1000 vs Diener 2000). - * @details \b Inputs: Test configuration TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP. + * The getDialysatePumpMaxRPM function returns the maximum RPM limit for a + * given dialysate pump. + * @details \b Inputs: pumpId * @details \b Outputs: none - * @return Maximum RPM for D48 pump (2770 when Diener 1000 enabled, 2650 otherwise). +* @param pumpId to set the pump speed accordingly + * @return Maximum RPM for the specified pump *************************************************************************/ -U32 getD48MaxPumpRPM( void ) +U32 getDialysatePumpMaxRPM( DIALYSATE_PUMPS_T pumpId ) { U32 maxRpm = MAX_DIALYSATE_PUMP_RPM; - if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP ) ) + if ( D48_PUMP == pumpId ) { + // Default to Diener 1000 max when that test config is active; + // otherwise use the common MAX_DIALYSATE_PUMP_RPM (Diener 2000 / beta systems). maxRpm = D48_DIENER_1000_MAX_RPM; + + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_2000_PUMP ) ) + { + maxRpm = MAX_DIALYSATE_PUMP_RPM; + } } return maxRpm; @@ -234,14 +249,7 @@ dialysatePumpMeasuredCurrentA[ pumpId ].ovInitData = 0.0F; dialysatePumpMeasuredCurrentA[ pumpId ].ovData = 0.0F; dialysatePumpMeasuredCurrentA[ pumpId ].override = OVERRIDE_RESET; - if ( D48_PUMP == pumpId ) - { - dialysatePumps[ pumpId ].currentPumpSpeed = getD48MinPumpRPM(); - } - else - { - dialysatePumps[ pumpId ].currentPumpSpeed = MIN_DIALYSATE_PUMP_RPM; - } + dialysatePumps[ pumpId ].currentPumpSpeed = getDialysatePumpMinRPM( pumpId ); dialysatePumps[ pumpId ].prevPumpTargetSpeed = 0.0F; dialysatePumps[ pumpId ].control = DIALYSATE_PUMP_CONTROL_STOP; dialysatePumps[ pumpId ].directionErrorCount = 0; @@ -276,8 +284,8 @@ // Init the dialysate pump with valid PWM while motor is disabled. // when enable triggers, we dont want invlid RPM set that triggers alarm in motor controller. - setFPGAD12PumpSpeed( MIN_DIALYSATE_PUMP_RPM ); - setFPGAD48PumpSpeed( getD48MinPumpRPM() ); + setFPGAD12PumpSpeed( getDialysatePumpMinRPM( D12_PUMP ) ); + setFPGAD48PumpSpeed( getDialysatePumpMinRPM( D48_PUMP ) ); #ifdef __PITEST__ for ( i = 0; i < NUM_OF_CONTROLLER_SIGNAL; i++ ) @@ -339,16 +347,8 @@ U32 minRPM; U32 maxRPM; - if ( D48_PUMP == pumpId ) - { - minRPM = getD48MinPumpRPM(); - maxRPM = getD48MaxPumpRPM(); - } - else - { - minRPM = MIN_DIALYSATE_PUMP_RPM; - maxRPM = MAX_DIALYSATE_PUMP_RPM; - } + minRPM = getDialysatePumpMinRPM( pumpId ); + maxRPM = getDialysatePumpMaxRPM( pumpId ); if ( pumpId < NUM_OF_DIALYSATE_PUMPS ) { @@ -411,24 +411,17 @@ { dialysatePumps[ pumpId ].control = DIALYSATE_PUMP_CONTROL_STOP; setFPGAD12PumpControl( dialysatePumps[ pumpId ].control ); - setFPGAD12PumpSpeed( MIN_DIALYSATE_PUMP_RPM ); + setFPGAD12PumpSpeed( getDialysatePumpMinRPM( D12_PUMP ) ); } else { dialysatePumps[ pumpId ].control = DIALYSATE_PUMP_CONTROL_STOP; setFPGAD48PumpControl( dialysatePumps[ pumpId ].control ); - setFPGAD48PumpSpeed( getD48MinPumpRPM() ); + setFPGAD48PumpSpeed( getDialysatePumpMinRPM( D48_PUMP ) ); } // Reset all the variables to stop mode. - if ( D48_PUMP == pumpId ) - { - dialysatePumps[ pumpId ].currentPumpSpeed = getD48MinPumpRPM(); - } - else - { - dialysatePumps[ pumpId ].currentPumpSpeed = MIN_DIALYSATE_PUMP_RPM; - } + dialysatePumps[ pumpId ].currentPumpSpeed = getDialysatePumpMinRPM( pumpId ); pumpTargetSpeed[ pumpId ].data = 0.0F; dialysatePumps[ pumpId ].dialysatePumpState = DIALYSATE_PUMP_OFF_STATE; dialysatePumps[ pumpId ].controlTimerCounter = 0; @@ -728,17 +721,8 @@ { DIALYSATE_PUMP_STATE_T result = DIALYSATE_PUMP_OFF_STATE; F32 targetSpeed = getDialysatePumpTargetSpeed( pumpId ); - U32 minRPM; + U32 minRPM = getDialysatePumpMinRPM( pumpId ); - if ( D48_PUMP == pumpId ) - { - minRPM = getD48MinPumpRPM(); - } - else - { - minRPM = MIN_DIALYSATE_PUMP_RPM; - } - if ( targetSpeed >= minRPM ) { if ( D12_PUMP == pumpId ) @@ -807,7 +791,7 @@ F32 speedIncrease = 0.0F; BOOL hasTgtBeenReached = FALSE; F32 currentToTargetDiff = fabs( getDialysatePumpTargetSpeed( pumpId ) - dialysatePumps[ pumpId ].currentPumpSpeed ); - U32 minRPM; + U32 minRPM = getDialysatePumpMinRPM( pumpId ); if ( currentToTargetDiff > ZERO_SPEED ) { @@ -836,15 +820,6 @@ // } } - if ( D48_PUMP == pumpId ) - { - minRPM = getD48MinPumpRPM(); - } - else - { - minRPM = MIN_DIALYSATE_PUMP_RPM; - } - if ( dialysatePumps[ pumpId ].currentPumpSpeed >= minRPM ) { if ( D12_PUMP == pumpId ) @@ -1266,20 +1241,9 @@ if ( (DIALYSATE_PUMPS_T)payload.pumpID < NUM_OF_DIALYSATE_PUMPS ) { - U32 minRPM; - U32 maxRPM; + U32 minRPM = getDialysatePumpMinRPM( (DIALYSATE_PUMPS_T)payload.pumpID ); + U32 maxRPM = getDialysatePumpMaxRPM( (DIALYSATE_PUMPS_T)payload.pumpID ); - if ( D48_PUMP == (DIALYSATE_PUMPS_T)payload.pumpID ) - { - minRPM = getD48MinPumpRPM(); - maxRPM = getD48MaxPumpRPM(); - } - else - { - minRPM = MIN_DIALYSATE_PUMP_RPM; - maxRPM = MAX_DIALYSATE_PUMP_RPM; - } - // Handle start command. if ( ( TRUE == payload.startStop ) && ( ( payload.rpm >= minRPM ) && ( payload.rpm <= maxRPM ) ) )