Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -rbf8510b75b0e133bc3d933078f543e32e0f37c33 -rd54f4bbfdb5b751ccc661735d4586f6a2dad5d02 --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision bf8510b75b0e133bc3d933078f543e32e0f37c33) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision d54f4bbfdb5b751ccc661735d4586f6a2dad5d02) @@ -67,6 +67,8 @@ #define DIALYSATE_PUMP_MIN_PRESSURE_PSI 0.0F ///< Minimum dialysate pump pressure in psi. #define DIALYSATE_PUMP_MAX_PRESSURE_PSI 40.0F ///< Maximum dialysate pump pressure in psi. #define DIALYSATE_PUMP_SPEED_ZERO_RPM 0 ///< Dialysate pump zero RPM speed. +#define SPEED_COUNT_ZERO 0 ///< Measured speed count zero check. +#define SPEED_CONV_FACTOR 1500000 ///< Measured speed count conversion to RPM #define FRESH_DIALYSATE_PUMP_P_COEFFICIENT 1.0F ///< P term for fresh dialysate pump delta pressure control. #define FRESH_DIALYSATE_PUMP_I_COEFFICIENT 0.0F ///< I term for fresh dialysate pump delta pressure control. @@ -204,6 +206,11 @@ initializePIController( PI_CONTROLLER_ID_SPENT_DIALYSATE_PUMP, DIALYSATE_PUMP_MIN_PRESSURE_PSI, SPENT_DIALYSATE_PUMP_P_COEFFICIENT, SPENT_DIALYSATE_PUMP_I_COEFFICIENT, DIALYSATE_PUMP_MIN_PRESSURE_PSI, DIALYSATE_PUMP_MAX_PRESSURE_PSI ); + // Init the dialysate pump with valid PWM while motor is disabled. + // when enable triggers, we dont want invlid RPM set that triggers alarm in motor controller. + setFPGAFreshDialysatePumpSpeed( MIN_DIALYSATE_PUMP_RPM ); + setFPGASpentDialysatePumpSpeed( MIN_DIALYSATE_PUMP_RPM ); + // Initialize the persistent alarms for fresh dialysate pump initPersistentAlarm( ALARM_ID_DD_FRESH_DIALYSATE_PUMP_RPM_OUT_OF_RANGE, RPM_OUT_OF_RANGE_TIME_OUT, RPM_OUT_OF_RANGE_TIME_OUT ); initPersistentAlarm( ALARM_ID_DD_FRESH_DIALYSATE_PUMP_OFF_FAULT, SAFETY_SHUTDOWN_TIMEOUT, SAFETY_SHUTDOWN_TIMEOUT ); @@ -290,13 +297,13 @@ // dialysate pump control run enable dialysatePumps[ pumpId ].control = DIALYSATE_PUMP_CONTROL_STOP; setFPGAFreshDialysatePumpControl( dialysatePumps[ pumpId ].control ); - setFPGAFreshDialysatePumpSpeed( DIALYSATE_PUMP_SPEED_ZERO_RPM ); + setFPGAFreshDialysatePumpSpeed( MIN_DIALYSATE_PUMP_RPM ); } else { dialysatePumps[ pumpId ].control = DIALYSATE_PUMP_CONTROL_STOP; setFPGASpentDialysatePumpControl( dialysatePumps[ pumpId ].control ); - setFPGASpentDialysatePumpSpeed( DIALYSATE_PUMP_SPEED_ZERO_RPM ); + setFPGASpentDialysatePumpSpeed( MIN_DIALYSATE_PUMP_RPM ); } // Reset all the variables to stop mode @@ -377,23 +384,32 @@ *************************************************************************/ void execDialysatePumpMonitor( void ) { -#if 0 U16 freshDialCurrent = getFPGAFreshDialysatePumpCurrentFeedback(); - U16 spentDialCurrent = getFPGAFreshDialysatePumpCurrentFeedback(); + U16 spentDialCurrent = getFPGASpentDialysatePumpCurrentFeedback(); + U16 freshDialSpeedCnt = getFPGAFreshDialysatePumpSpeed(); + U16 spentDialSpeedCnt = getFPGASpentDialysatePumpSpeed(); BOOL isOffCurrentOut = FALSE; BOOL isCurrentOutOfRange = FALSE; DIALYSATE_PUMPS_T pumpId; + // Update the paramerters - dialysatePumps[ FRESH_DIALYSATE_PUMP ].measuredPumpSpeed.data = getFPGAFreshDialysatePumpSpeed(); - dialysatePumps[ SPENT_DIALYSATE_PUMP ].measuredPumpSpeed.data = getFPGASpentDialysatePumpSpeed(); dialysatePumps[ FRESH_DIALYSATE_PUMP ].dialysatePumpMeasuredCurrentA.data = (F32)freshDialCurrent * CURRENT_CONVERSION_COEFF; dialysatePumps[ SPENT_DIALYSATE_PUMP ].dialysatePumpMeasuredCurrentA.data = (F32)spentDialCurrent * CURRENT_CONVERSION_COEFF; dialysatePumps[ FRESH_DIALYSATE_PUMP ].measuredDirection.data = (U32)( ( getFPGAFreshDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_BIT_MASK ) >> SHIFT_BITS_BY_7 ); dialysatePumps[ SPENT_DIALYSATE_PUMP ].measuredDirection.data = (U32)( ( getFPGASpentDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_BIT_MASK ) >> SHIFT_BITS_BY_7 ); dialysatePumps[ FRESH_DIALYSATE_PUMP ].directionErrorCount = (U32)( getFPGAFreshDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_ERROR_CNT_BIT_MASK ); dialysatePumps[ SPENT_DIALYSATE_PUMP ].directionErrorCount = (U32)( getFPGASpentDialysatePumpHallDirectionStatus() & DIALYSATE_PUMP_DIR_ERROR_CNT_BIT_MASK ); + if ( freshDialSpeedCnt > SPEED_COUNT_ZERO ) + { + dialysatePumps[ FRESH_DIALYSATE_PUMP ].measuredPumpSpeed.data = SPEED_CONV_FACTOR / freshDialSpeedCnt; + } + if ( spentDialSpeedCnt > SPEED_COUNT_ZERO ) + { + dialysatePumps[ SPENT_DIALYSATE_PUMP ].measuredPumpSpeed.data = SPEED_CONV_FACTOR / spentDialSpeedCnt; + } + // Monitor dialysate pumps for ( pumpId = DIALYSATE_PUMPS_FIRST; pumpId < NUM_OF_DIALYSATE_PUMPS; pumpId++ ) { @@ -406,6 +422,7 @@ isOffCurrentOut = ( getDialysatePumpMeasuredCurrentA( pumpId ) > DIALYSATE_PUMP_MAX_CURRENT_WHEN_OFF_A ? TRUE : FALSE ); isRPMTooHigh = ( getDialysatePumpMeasuredSpeed( pumpId ) > MIN_DIALYSATE_PUMP_RPM ? TRUE : FALSE ); +#if 0 if ( FRESH_DIALYSATE_PUMP == pumpId ) { checkPersistentAlarm( ALARM_ID_DD_FRESH_DIALYSATE_PUMP_RPM_OUT_OF_RANGE, FALSE, getDialysatePumpMeasuredSpeed( pumpId ), MAX_ALLOWED_RPM_OUT_OF_RANGE ); @@ -425,6 +442,7 @@ { //activateSafetyShutdown(); } +#endif } break; @@ -438,7 +456,7 @@ BOOL isDirInvalid = ( ( direction != DIALYSATE_PUMP_FORWARD_DIR ) && ( rpm > DIALYSATE_PUMP_MIN_RPM_FOR_DIR_CHECK ) ? TRUE : FALSE ); isRPMOutOfRange = ( rpmDiff > MAX_ALLOWED_RPM_OUT_OF_RANGE ? TRUE : FALSE ); - +#if 0 if ( FRESH_DIALYSATE_PUMP == pumpId ) { checkPersistentAlarm( ALARM_ID_DD_FRESH_DIALYSATE_PUMP_RPM_OUT_OF_RANGE, isRPMOutOfRange, rpm, MAX_ALLOWED_RPM_OUT_OF_RANGE ); @@ -451,6 +469,7 @@ checkPersistentAlarm( ALARM_ID_DD_SPENT_DIALYSATE_PUMP_OFF_FAULT, FALSE, getDialysatePumpMeasuredSpeed( pumpId ), MIN_DIALYSATE_PUMP_RPM ); checkPersistentAlarm( ALARM_ID_DD_SPENT_DIALYSATE_PUMP_DIRECTION_INVALID, isDirInvalid, (F32)direction, DIALYSATE_PUMP_FORWARD_DIR ); } +#endif } break; @@ -465,6 +484,7 @@ // Check the persistent alarm for the maximum dialysate pump current F32 currentA = getDialysatePumpMeasuredCurrentA( pumpId ); isCurrentOutOfRange = ( currentA > DIALYSATE_PUMP_MAX_CURRENT_A ? TRUE : FALSE ) | isOffCurrentOut; +#if 0 if ( FRESH_DIALYSATE_PUMP == pumpId ) { checkPersistentAlarm( ALARM_ID_DD_FRESH_DIALYSATE_PUMP_CURRENT_OUT_OF_RANGE, isCurrentOutOfRange, currentA, DIALYSATE_PUMP_MAX_CURRENT_A ); @@ -473,8 +493,9 @@ { checkPersistentAlarm( ALARM_ID_DD_SPENT_DIALYSATE_PUMP_CURRENT_OUT_OF_RANGE, isCurrentOutOfRange, currentA, DIALYSATE_PUMP_MAX_CURRENT_A ); } - } #endif + } + // Publish dialysate pumps data on interval publishDialysatePumpsData(); }