Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -rdb291cc22fd8f10e6e47cad468e14ed5590a94f2 -re7b1cee2f91c5c626e889a75e0b4b7d89ac3dc5e --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision db291cc22fd8f10e6e47cad468e14ed5590a94f2) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision e7b1cee2f91c5c626e889a75e0b4b7d89ac3dc5e) @@ -132,6 +132,8 @@ #define BP_FLOW_WEAR_A_TERM 0.00000000896F ///< A term used for wear portion of alpha flow coefficient. #define BP_FLOW_WEAR_B_TERM 0.000550F ///< B term used for wear portion of alpha flow coefficient. #define BP_MAX_ROTOR_COUNT_FOR_WEAR 25000 ///< Maximum rotor count for determining wear of the cartridge (negligible affect beyond this threshold). +#define BP_MIN_ART_PRESSURE_MMHG -200.0F ///< Minimum arterial pressure factored into blood flow calculation. + #define DATA_PUBLISH_COUNTER_START_COUNT 20 ///< Data publish counter start count. /// Enumeration of blood pump controller states. @@ -399,11 +401,12 @@ static F32 calcBloodFlow( void ) { F32 artPres = getLongFilteredArterialPressure(); + F32 artPresL= ( artPres > BP_MIN_ART_PRESSURE_MMHG ? artPres : BP_MIN_ART_PRESSURE_MMHG ); F32 rotSpd = filteredBloodPumpSpeed / BP_GEAR_RATIO; U32 r = getBloodPumpRotorCount(); U32 rotCnt = CAP( r, BP_MAX_ROTOR_COUNT_FOR_WEAR ); F32 wear = BP_FLOW_WEAR_A_TERM * (F32)rotCnt + BP_FLOW_WEAR_B_TERM; - F32 alpha = wear * artPres + BP_FLOW_ALPHA_Y_INTERCEPT; + F32 alpha = wear * artPresL + BP_FLOW_ALPHA_Y_INTERCEPT; F32 flow = alpha * BP_ML_PER_ROTOR_REV * rotSpd; return flow;