Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -rfe91ec494378a7df34e3c14853a797f9f8f044e9 -r06477e29097a60ca81d5d9382c4a773d30dedf69 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision fe91ec494378a7df34e3c14853a797f9f8f044e9) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 06477e29097a60ca81d5d9382c4a773d30dedf69) @@ -87,6 +87,7 @@ #define SYRINGE_PUMP_MAX_RATE_ERROR_ML_HR 0.1F ///< Maximum Heparin delivery rate error (in mL/hr). #define TEN_PCT_OVER_ALLOWANCE 1.1F ///< Allow 10 percent over target before alarming on over travel. #define FIVE_PCT_OVER_ALLOWANCE 1.05F ///< Allow 5 percent over target before alarming on over travel. +#define SYRINGE_PUMP_DAC_VOLTAGE_MAX_ERROR 0.05F ///< Force sensor POST check for DAC voltage - max delta. /// Expected position of empty in relation to home position. #define SYRINGE_PUMP_EMPTY_POS ( SYRINGE_ENCODER_COUNTS_PER_ML * 10.84F ) @@ -656,12 +657,13 @@ * The setSyringePumpDACVref function requests to set the DAC Vref setting. * @details Inputs: none * @details Outputs: syringePumpDACVrefSetRequested, syringePumpDACVref - * @param vRef voltage to set DAC Vref to (in V) * @return TRUE if request accepted, FALSE if not *************************************************************************/ -BOOL setSyringePumpDACVref( F32 vRef ) +BOOL setSyringePumpDACVref( void ) { - if ( ( vRef >= 0.0 ) && ( vRef <= 3.3 ) ) + F32 vRef = forceSensorCalRecord.hdHeparinForceSensorDACVoltage; + + if ( ( vRef >= 0.0 ) && ( vRef <= SYRINGE_PUMP_ADC_REF_V ) ) { if ( SYRINGE_PUMP_OFF_STATE == syringePumpState ) { @@ -956,7 +958,6 @@ *************************************************************************/ static void execSyringePumpMonitor( void ) { - F32 forceSensorBeforCal = 0.0; BOOL prevSyringeDetected = isSyringeDetected(); // Check if a new calibration is available @@ -1032,12 +1033,7 @@ } } - forceSensorBeforCal = ( (F32)getFPGASyringePumpADCChannel0() * SYRINGE_PUMP_ADC_REF_V ) / SYRINGE_PUMP_ADC_FULL_SCALE_BITS; - syringePumpMeasForce.data = pow(forceSensorBeforCal, 4) * forceSensorCalRecord.hdHeparinForceSensor.fourthOrderCoeff + - pow(forceSensorBeforCal, 3) * forceSensorCalRecord.hdHeparinForceSensor.thirdOrderCoeff + - pow(forceSensorBeforCal, 2) * forceSensorCalRecord.hdHeparinForceSensor.secondOrderCoeff + - forceSensorBeforCal * forceSensorCalRecord.hdHeparinForceSensor.gain + - forceSensorCalRecord.hdHeparinForceSensor.offset; + syringePumpMeasForce.data = ( (F32)getFPGASyringePumpADCChannel0() * SYRINGE_PUMP_ADC_REF_V ) / SYRINGE_PUMP_ADC_FULL_SCALE_BITS; // Apply home offset to encoder position syringePumpLastPosition = getSyringePumpPosition(); @@ -1167,11 +1163,15 @@ SELF_TEST_STATUS_T execSyringePumpSelfTest( void ) { SELF_TEST_STATUS_T result = SELF_TEST_STATUS_IN_PROGRESS; - + F32 DACDeltaV; + // Read/check force sensor calibration BOOL calStatus = getNVRecord2Driver( GET_CAL_HEPARIN_FORCE_SENSOR, (U08*)&forceSensorCalRecord, sizeof( HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T ), 0, ALARM_ID_HD_HEPARIN_FORCE_SENSOR_INVALID_CAL_RECORD ); - if ( TRUE == calStatus ) + // Verify calibration + DACDeltaV = fabs( forceSensorCalRecord.hdHeparinForceSensorDACVoltage - getSyringePumpForceV() ); + + if ( ( TRUE == calStatus ) && ( DACDeltaV > SYRINGE_PUMP_DAC_VOLTAGE_MAX_ERROR ) ) { result = SELF_TEST_STATUS_PASSED; }