Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -r5ce558e3f4df026c6a28bc03220d4c2641c4b5ff -r164caef29ce2882549068277843aae33298d6ef2 --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 5ce558e3f4df026c6a28bc03220d4c2641c4b5ff) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 164caef29ce2882549068277843aae33298d6ef2) @@ -74,7 +74,7 @@ #define D12_PUMP_I_COEFFICIENT 60.0F ///< I term for fresh dialysate pump delta pressure control (Diener 2000). #define D48_PUMP_P_COEFFICIENT 20.0F ///< P term for spent dialysate pump delta pressure control (Diener 2000). #define D48_PUMP_I_COEFFICIENT 60.0F ///< I term for spent dialysate pump delta pressure control (Diener 2000). -/** Diener 1000 pump gains for D48 when TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP is set. Tune as needed. */ +/** Diener 1000 pump gains for D48 when __NEW_D48_PUMP__ is defined (or TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP set). Tune as needed. */ #define D48_PUMP_P_COEFFICIENT_1000 20.0F ///< P term for D48 when Diener 1000 enabled. #define D48_PUMP_I_COEFFICIENT_1000 60.0F ///< I term for D48 when Diener 1000 enabled. #define DIAL_PUMP_NO_FEED_FORWARD 0.0F ///< Feedforward term for dialysate pump control @@ -160,22 +160,28 @@ /*********************************************************************//** * @brief - * Returns maximum dialysate pump RPM for D48 (Diener 1000: 1300 when - * TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP set, else Diener 2000: 2650). + * Returns maximum dialysate pump RPM for D48. When __NEW_D48_PUMP__ is defined this + * build is for the new pump and always returns MAX_DIALYSATE_PUMP_RPM (2800). + * Otherwise uses runtime test config (Diener 1000 vs 2000). * Used by ModeGenDialysate/BalancingChamber for D48 speed limits. * @return MAX RPM for D48 pump. *************************************************************************/ U32 getMaxDialysatePumpRpm( void ) { +#ifdef __NEW_D48_PUMP__ + /* New D48 pump build: always use 2800 RPM max; no runtime test config needed. */ + return (U32)MAX_DIALYSATE_PUMP_RPM; +#else return ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP ) ) ? (U32)DIENER_1000_MAX_RPM : (U32)DIENER_2000_MAX_RPM; +#endif } /*********************************************************************//** * @brief - * Returns maximum dialysate pump RPM for the given pump. D12 always 2650; - * D48 uses TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP (1300 vs 2650). + * Returns maximum dialysate pump RPM for the given pump. D12 always DIENER_2000_MAX_RPM (2650); + * D48 uses getMaxDialysatePumpRpm() (MAX_DIALYSATE_PUMP_RPM when new pump, else 2650). * @param pumpId D12_PUMP or D48_PUMP. * @return MAX RPM for that pump. *************************************************************************/ @@ -185,6 +191,7 @@ { return getMaxDialysatePumpRpm(); } + /* D12 always uses Diener 2000 limit (2650); do not use MAX_DIALYSATE_PUMP_RPM here. */ return (U32)DIENER_2000_MAX_RPM; } @@ -256,13 +263,20 @@ MIN_DIALYSATE_PUMP_RPM, (U32)DIENER_2000_MAX_RPM, FALSE, DIAL_PUMP_NO_FEED_FORWARD ); - // Initialize spent dialysate pump PI controller (D48: Diener 1000 when TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP, else 2000) + // Initialize spent dialysate pump PI controller (D48: when __NEW_D48_PUMP__ use new pump gains + MAX_DIALYSATE_PUMP_RPM, no test config) { +#ifdef __NEW_D48_PUMP__ + F32 d48Kp = D48_PUMP_P_COEFFICIENT_1000; + F32 d48Ki = D48_PUMP_I_COEFFICIENT_1000; + U32 d48MaxRpm = (U32)MAX_DIALYSATE_PUMP_RPM; /* New pump build: always 2800 for D48. */ +#else F32 d48Kp = ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP ) ) ? D48_PUMP_P_COEFFICIENT_1000 : D48_PUMP_P_COEFFICIENT; F32 d48Ki = ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DIENER_1000_PUMP ) ) ? D48_PUMP_I_COEFFICIENT_1000 : D48_PUMP_I_COEFFICIENT; + U32 d48MaxRpm = getMaxDialysatePumpRpm(); +#endif initializePIController( PI_CONTROLLER_ID_D48_PUMP, SPENT_DIAL_OPEN_LOOP_SPEED_RPM, d48Kp, d48Ki, MIN_DIALYSATE_PUMP_RPM, - getMaxDialysatePumpRpm(), FALSE, DIAL_PUMP_NO_FEED_FORWARD ); + d48MaxRpm, FALSE, DIAL_PUMP_NO_FEED_FORWARD ); } // Init the dialysate pump with valid PWM while motor is disabled. @@ -1218,7 +1232,8 @@ { // Handle start command if ( ( TRUE == payload.startStop ) && - ( ( payload.rpm >= MIN_DIALYSATE_PUMP_RPM ) && ( payload.rpm <= getMaxDialysatePumpRpmForPump( (DIALYSATE_PUMPS_T)payload.pumpID ) ) ) ) + ( ( payload.rpm >= MIN_DIALYSATE_PUMP_RPM ) && + ( payload.rpm <= getMaxDialysatePumpRpmForPump( (DIALYSATE_PUMPS_T)payload.pumpID ) ) ) ) { setDialysatePumpTargetRPM( (DIALYSATE_PUMPS_T)payload.pumpID, payload.rpm, (BOOL)payload.pumpControl ); result = TRUE;