Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -r724b64673b719eaac10b0c9dd839ad9675274911 -rf6022e86136c821709ce24b61e11e8e2bdf0b11e --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 724b64673b719eaac10b0c9dd839ad9675274911) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision f6022e86136c821709ce24b61e11e8e2bdf0b11e) @@ -60,10 +60,8 @@ #define MAX_FPGA_DIALYSATE_PUMP_DIRECTION_FAULT_WINDOW_MS ( 1 * SEC_PER_MIN * MS_PER_SECOND ) ///< FPGA dialysate pump direction fault window #define MAX_FPGA_DIALYSATE_PUMP_DIRECTION_FAULT_FAILURES 10 ///< FPGA dialysate pump direction fault failures per MAX_FPGA_DIALYSATE_PUMP_DIRECTION_FAULT_WINDOW_MS -#define FRESH_DIALYSATE_TARGET_PRESSURE_PSI 25.0F ///< Fresh dialysate pump recommended pressure(D18) in psi. -#define FRESH_DIALYSATE_MAX_PRESSURE_PSI 26.0F ///< Fresh dialysate pump maximum allowed (D18) pressure in psi. -#define SPENT_DIALYSATE_TARGET_PRESSURE_PSI 29.0F ///< Spent dialysate pump recommended pressure(PDs) in psi. -#define SPENT_DIALYSATE_MAX_PRESSURE_PSI 30.0F ///< Spent dialysate pump maximum allowed (PDs) pressure in psi. +#define DEFAULT_FRESH_DIALYSATE_TARGET_PRESSURE_PSI -12.79F ///< Default degas pump(D18) target pressure (at zero sea level)in psi. +#define DEFAULT_SPENT_DIALYSATE_TARGET_PRESSURE_PSI 30.0F ///< Default spent dialysate pump target pressure(D48) in psi. #define FRESH_DIAL_OPEN_LOOP_SPEED_RPM 2000.0F ///< fresh dialysate pump open loop speed to meet target pressure. #define SPENT_DIAL_OPEN_LOOP_SPEED_RPM 2500.0F ///< spent dialysate pump open loop speed to meet target pressure. #define DIALYSATE_PUMP_SPEED_ZERO_RPM 0 ///< Dialysate pump zero RPM speed. @@ -75,6 +73,8 @@ #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 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) #define MAX_ALLOWED_RPM_OUT_OF_RANGE 300 ///< Maximum allowed RPM out of range from target RPM in open loop. #define PUMP_TRANS_TO_RAMP_SPEED_THRESHOLD 20.0F ///< Speed change that alters the state to ramp during control state. @@ -153,6 +153,7 @@ static DIALYSATE_PUMP_STATE_T handleDialysatePumpRampToTargetState( DIALYSATE_PUMPS_T pumpId ); static DIALYSATE_PUMP_STATE_T handleDialysatePumpOffState( DIALYSATE_PUMPS_T pumpId ); static void monitorPumpDirectionErrorCount( DIALYSATE_PUMPS_T pumpId ); +static void calculateDegasPumpTargetPressure( void ); /*********************************************************************//** * @brief @@ -202,13 +203,13 @@ signalDialysatePumpHardStop( pumpId ); } - pumpTargetPressure[D12_PUMP].data = FRESH_DIALYSATE_TARGET_PRESSURE_PSI; - pumpTargetPressure[D12_PUMP].ovInitData = FRESH_DIALYSATE_TARGET_PRESSURE_PSI; + pumpTargetPressure[D12_PUMP].data = DEFAULT_FRESH_DIALYSATE_TARGET_PRESSURE_PSI; + pumpTargetPressure[D12_PUMP].ovInitData = DEFAULT_FRESH_DIALYSATE_TARGET_PRESSURE_PSI; pumpTargetPressure[D12_PUMP].ovData = 0.0F; pumpTargetPressure[D12_PUMP].override = OVERRIDE_RESET; - pumpTargetPressure[D48_PUMP].data = SPENT_DIALYSATE_TARGET_PRESSURE_PSI; - pumpTargetPressure[D48_PUMP].ovInitData = SPENT_DIALYSATE_TARGET_PRESSURE_PSI; + pumpTargetPressure[D48_PUMP].data = DEFAULT_SPENT_DIALYSATE_TARGET_PRESSURE_PSI; + pumpTargetPressure[D48_PUMP].ovInitData = DEFAULT_SPENT_DIALYSATE_TARGET_PRESSURE_PSI; pumpTargetPressure[D48_PUMP].ovData = 0.0F; pumpTargetPressure[D48_PUMP].override = OVERRIDE_RESET; @@ -251,6 +252,23 @@ /*********************************************************************//** * @brief + * The calculateDegasPumpTargetPressure function gets the barometric pressure + * sensor reading to calcualte degassing pump(D12) target control pressure for closed + * loop control. + * @details \b Inputs: none + * @details \b Outputs: pumpTargetSpeed. + * @return none + *************************************************************************/ +static void calculateDegasPumpTargetPressure( void ) +{ + F32 pressureInmmHg = getFilteredPressure( BARO_PRES ); + + //Get the degassing target pressure + pumpTargetPressure[D12_PUMP].data = ( ( DEGAS_PUMP_SLOPE_FACTOR * pressureInmmHg ) + DEGAS_PUMP_INTERCEPT_FACTOR ) + DEGAS_PUMP_TARGET_PRES_ADJ_THRESHOLD; +} + +/*********************************************************************//** + * @brief * The setDialysatePumpTargetSpeed function sets a new target RPM for the * dialysate pump. * @details \b Inputs: none @@ -281,9 +299,13 @@ pumpTargetSpeed[ pumpId ].data = MAX_DIALYSATE_PUMP_RPM; } - // Open loop or close loop control + // Assign Open loop or close loop control isDialPumpOpenLoopEnabled[ pumpId ] = isOpenLoopControlEnabled; +#ifdef __BARO_PRES_SENSOR__ + //Update Degas pump target speed + calculateDegasPumpTargetPressure(); +#endif //handle target speed update when pump is running if ( DIALYSATE_PUMP_CONTROL_TO_TARGET_STATE == dialysatePumps[ pumpId ].dialysatePumpState ) {