Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r04c811aa50770c85837d89b7e661b66f33decfb9 -rfbe7e9a870c7ad78d3bd26f0f5cbb0277c733ac3 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 04c811aa50770c85837d89b7e661b66f33decfb9) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision fbe7e9a870c7ad78d3bd26f0f5cbb0277c733ac3) @@ -78,7 +78,7 @@ #define BP_RAMP_STEP_SPEED_RPM 50 ///< Blood pump ramp step size (in RPM). -#define BP_ML_PER_ROTOR_REV 13.75F ///< Blood pump volume (mL) per rotor revolution. +#define BP_ML_PER_ROTOR_REV 12.26F ///< Blood pump volume (mL) per rotor revolution. #define BP_FLOW_ALPHA_Y_INTERCEPT 1.00F ///< Y intercept used for alpha flow coefficient calculation. #define BP_FLOW_WEAR_A_TERM 0.000000F ///< A term used for wear portion of alpha flow coefficient. #define BP_FLOW_WEAR_B_TERM 0.000000F ///< B term used for wear portion of alpha flow coefficient. @@ -420,13 +420,13 @@ * @brief * The getBloodPumpRotorCount function returns the current count for the * blood pump rotor revolution counter. - * @details \b Inputs: bloodPumpRotorCounter - * @details \b Outputs: none + * @details \b Inputs: bloodPumpRotorCounter,getPeristalticPumpRotorRevs + * @details \b Outputs: bloodPumpRotorCounter * @return h4RotorRevsCounter *************************************************************************/ static U32 getBloodPumpRotorCount( void ) { - U32 h4RotorRevsCounter = (U32)getH4RotorRevsCounter(); + U32 h4RotorRevsCounter = getPeristalticPumpRotorRevs(); bloodPumpRotorCounter.data = h4RotorRevsCounter; if ( OVERRIDE_KEY == bloodPumpRotorCounter.override ) Index: firmware/App/Drivers/PeristalticPump.c =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -rfbe7e9a870c7ad78d3bd26f0f5cbb0277c733ac3 --- firmware/App/Drivers/PeristalticPump.c (.../PeristalticPump.c) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Drivers/PeristalticPump.c (.../PeristalticPump.c) (revision fbe7e9a870c7ad78d3bd26f0f5cbb0277c733ac3) @@ -19,6 +19,7 @@ #include "FpgaTD.h" #include "Messaging.h" #include "PeristalticPump.h" +#include "Utilities.h" /** * @addtogroup PeristalticPump @@ -51,6 +52,8 @@ static F32 pumpMeasRotSpeedRPM; ///< Latest measured pump rotor speed (in RPM). static BOOL pumpHomeInProgress; ///< Flag indicates a pump home operation is in progress. static BOOL pumpHomeLowSignalSeen; ///< Flag indicates a pump home operation has seen a "not home" signal. +static U16 rotorRevsPrev; ///< Previous FPGA rotor revs counter value. +static U32 rotorRevsAccum; ///< Accumulated rotor revolutions count. // ********** private function prototypes ********** @@ -70,6 +73,9 @@ pumpMeasSpeedRPM = 0.0F; pumpMeasRotSpeedRPM = 0.0F; + rotorRevsPrev = getH4RotorRevsCounter(); + rotorRevsAccum = 0; + setH4Direction( MOTOR_DIR_FORWARD ); setH4SetSpeed( 0 ); setH4Enabled( TRUE ); @@ -87,8 +93,10 @@ *************************************************************************/ void readPeristalticPumps( void ) { - U16 period = getH4Period(); - S16 rotPer = getH4RotorCount(); + U16 delta; + U16 period = getH4Period(); + S16 rotPer = getH4RotorCount(); + U16 rotorRevsNow = getH4RotorRevsCounter(); // update measured pump motor speed if ( period != H4_ZERO_SPEED_PERIOD ) @@ -130,10 +138,28 @@ { pumpHomeLowSignalSeen = TRUE; } + + // update accumulated rotor revolutions count (extend 16-bit FPGA counter to 32-bit) + delta = u16DiffWithWrap( rotorRevsPrev, rotorRevsNow ); + rotorRevsAccum += (U32)delta; + rotorRevsPrev = rotorRevsNow; } /*********************************************************************//** * @brief + * The getPeristalticPumpRotorRevs function returns the accumulated + * rotor revolutions count for the blood pump. + * @details \b Inputs: rotorRevsAccum + * @details \b Outputs: none + * @return Accumulated rotor revolutions count. + *************************************************************************/ +U32 getPeristalticPumpRotorRevs( void ) +{ + return rotorRevsAccum; +} + +/*********************************************************************//** + * @brief * The cmdPeristalticPumpHome function initiates a pump home operation. * @details \b Inputs: none * @details \b Outputs: pumpHomeInProgress, FPGA Index: firmware/App/Drivers/PeristalticPump.h =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -rfbe7e9a870c7ad78d3bd26f0f5cbb0277c733ac3 --- firmware/App/Drivers/PeristalticPump.h (.../PeristalticPump.h) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Drivers/PeristalticPump.h (.../PeristalticPump.h) (revision fbe7e9a870c7ad78d3bd26f0f5cbb0277c733ac3) @@ -45,6 +45,7 @@ S32 getPeristalticPumpSetSpeed( void ); F32 getPeristalticPumpMeasSpeed( void ); F32 getPeristalticPumpMeasRotorSpeed( void ); +U32 getPeristalticPumpRotorRevs( void ); BOOL cmdPeristalticPumpHome( void ); void cancelPeristalticPumpHome( void ); Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r04c811aa50770c85837d89b7e661b66f33decfb9 -rfbe7e9a870c7ad78d3bd26f0f5cbb0277c733ac3 --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 04c811aa50770c85837d89b7e661b66f33decfb9) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision fbe7e9a870c7ad78d3bd26f0f5cbb0277c733ac3) @@ -152,7 +152,7 @@ U08 h6RotorStatus; ///< Reg 346. H6 rotor status. U08 reserved5; ///< Reg 347. Reserved register. U16 h12Speed; ///< Reg 348. H12 speed (air pump in RPM). - U16 rotorRevsCounter; ///< Reg 350. Rotor revs counter + U16 h4RotorRevsCounter; ///< Reg 350. Rotor revs counter U16 baroManufactInfo; ///< Reg 352. Baro sensor manufacturing information. U16 baroPresSensitivity; ///< Reg 354. Baro sensor prom coefficient 1. U16 baroPresOffset; ///< Reg 356. Baro sensor prom coefficient 2. @@ -612,7 +612,7 @@ *************************************************************************/ U16 getH4RotorRevsCounter( void ) { - return fpgaSensorReadings.rotorRevsCounter; + return fpgaSensorReadings.h4RotorRevsCounter; } /*********************************************************************//**