Index: firmware/App/Drivers/PeristalticPump.c =================================================================== diff -u -rfc985a2080a265d14be32959fa41fb43318e4ff4 -r09352c35f1c46a7df3b86fb693fceeb834761148 --- firmware/App/Drivers/PeristalticPump.c (.../PeristalticPump.c) (revision fc985a2080a265d14be32959fa41fb43318e4ff4) +++ firmware/App/Drivers/PeristalticPump.c (.../PeristalticPump.c) (revision 09352c35f1c46a7df3b86fb693fceeb834761148) @@ -30,13 +30,13 @@ #define H4_PUMP_CMD_GAIN 0.9F ///< Gain for blood pump commanded RPM that must be applied before sending to FPGA. #define H4_PUMP_CMD_OFFSET 80.0F ///< Offset for blood pump commanded RPM that must be applied before sending to FPGA. -#define H4_PUMP_CMD_CAL(r) ((r) * H4_PUMP_CMD_GAIN + H4_PUMP_CMD_OFFSET ) ///< Macro to calibrate a commanded blood pump RPM before sending to FPGA. #define H4_PERIOD_SEC 0.00001F ///< Blood pump feedback period in seconds. #define H4_HZ_TO_RPM_SCALAR 10.0F ///< Blood pump Hz to RPM scalar. #define H4_PERIOD_TO_HZ(p) ( 1.0F / (F32)((S32)(p) * H4_PERIOD_SEC) ) ///< Blood pump period to Hz conversion macro. #define H4_HZ_TO_RPM(h) ((h) * H4_HZ_TO_RPM_SCALAR) ///< Blood pump Hz to RPM conversion macro. #define H4_ZERO_SPEED_PERIOD 0xFFFF ///< Blood pump period reported when pump is stopped. +#define H4_INVALID_SPEED_PERIOD 0x0001 ///< Blood pump invalid speed period #define H4_ROT_GEAR_RATIO 64.0F ///< Blood pump rotor to motor gear ratio. #define H4_ROT_PERIOD_SEC 0.001F ///< Blood pump rotor feedback period in seconds. @@ -98,13 +98,17 @@ S16 rotPer = getH4RotorCount(); U16 rotorRevsNow = getH4RotorRevsCounter(); - // update measured pump motor speed - if ( period != H4_ZERO_SPEED_PERIOD ) + // Update measured pump motor speed. + if ( ( H4_ZERO_SPEED_PERIOD == period ) || ( H4_INVALID_SPEED_PERIOD == period ) ) { + pumpMeasSpeedRPM = 0.0F; + } + else + { F32 Hz = H4_PERIOD_TO_HZ( period ); F32 rpm = H4_HZ_TO_RPM( Hz ); - if ( pumpSetSpeedRPM < 0 ) // TODO - can we get a real measured direction to base measured speed sign on? + if ( pumpSetSpeedRPM < 0 ) { pumpMeasSpeedRPM = rpm * -1.0F; } @@ -113,12 +117,8 @@ pumpMeasSpeedRPM = rpm; } } - else - { - pumpMeasSpeedRPM = 0.0F; - } - // update measured pump rotor speed + // This updates measured pump rotor speed. if ( rotPer != 0 ) { pumpMeasRotSpeedRPM = H4_ROT_PERIOD_TO_RPM( rotPer ); @@ -128,18 +128,18 @@ pumpMeasRotSpeedRPM = 0.0F; } - // monitor home command status if in progress, stop pump if rotor is in home position + // Monitor home command status and stop when the rotor reaches home. if ( ( TRUE == pumpHomeInProgress ) && ( TRUE == isPeristalticPumpHome() ) && ( TRUE == pumpHomeLowSignalSeen ) ) { setPeristalticPumpSetSpeed( 0 ); pumpHomeInProgress = FALSE; } - else if ( isPeristalticPumpHome() != TRUE ) + else if ( TRUE != isPeristalticPumpHome() ) { pumpHomeLowSignalSeen = TRUE; } - // update accumulated rotor revolutions count (extend 16-bit FPGA counter to 32-bit) + // Extend the 16 bit FPGA rotor revolution counter to 32 bits. delta = u16DiffWithWrap( rotorRevsPrev, rotorRevsNow ); rotorRevsAccum += (U32)delta; rotorRevsPrev = rotorRevsNow;