Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -r5b3be58e0b2dc2ffce534363f85023d03ca561ba -r735226fefeab1dc5219d6cebee749e0c27b2ce21 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 5b3be58e0b2dc2ffce534363f85023d03ca561ba) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 735226fefeab1dc5219d6cebee749e0c27b2ce21) @@ -161,12 +161,12 @@ static U32 syringePumpSetToggleTime; ///< Set rate for syringe pump (in uSec/toggle). static U32 syringePumpRampUpToggleTime; ///< Current ramp rate for syringe pump (in uSec/toggle). static F32 syringePumpSafetyVolumeDelivered; ///< Calculated volume (in mL) (from set rate over time). +static S32 syringePumpVolumeStartPosition; ///< Start position for the current volume calculation. static S32 syringePumpHomePositionOffset; ///< FPGA reported position when at home postion. static S32 syringePumpPosition1SecAgo; ///< Position recorded at last 1 Hz speed check. static BOOL syringePumpRetractRequested; ///< Flag indicates a retract operation is requested. static BOOL syringePumpPrimeRequested; ///< Flag indicates plunger seek and Heparin prime operations are requested. -static BOOL syringePumpSeekToPrimeRequested; ///< Flag indicates plunger seek finished, pump stopped, now requesting prime operation. static BOOL syringePumpBolusRequested; ///< Flag indicates start or resume of a Heparin bolus operation is requested. static BOOL syringePumpContinuousRequested; ///< Flag indicates start or resume of a Heparin continuous delivery operation is requested. static BOOL syringePumpDACVrefSetRequested; ///< Flag indicates request to set DAC Vref for force sensor. @@ -223,6 +223,7 @@ syringePumpSetRate = 0.0; syringePumpSetToggleTime = 0; syringePumpSafetyVolumeDelivered = 0.0; + syringePumpVolumeStartPosition = 0; syringePumpHomePositionOffset = 0; syringePumpPosition1SecAgo = 0; @@ -248,7 +249,6 @@ { syringePumpRetractRequested = FALSE; syringePumpPrimeRequested = FALSE; - syringePumpSeekToPrimeRequested = FALSE; syringePumpBolusRequested = FALSE; syringePumpContinuousRequested = FALSE; syringePumpDACVrefSetRequested = FALSE; @@ -606,7 +606,7 @@ // Apply home offset to encoder position syringePumpPosition.data = encPosition - syringePumpHomePositionOffset; // Calculate volume delivered from position - syringePumpVolumeDelivered.data = (F32)(syringePumpPosition.data) / SYRINGE_ENCODER_COUNTS_PER_ML; + syringePumpVolumeDelivered.data = (F32)(syringePumpPosition.data - syringePumpVolumeStartPosition) / SYRINGE_ENCODER_COUNTS_PER_ML; calcSafetyVolumeDelivered(); // Calculate measured rate (mL/hr) calcMeasRate(); @@ -725,11 +725,6 @@ { result = SYRINGE_PUMP_SEEK_STATE; } - else if ( TRUE == syringePumpSeekToPrimeRequested ) - { - result = SYRINGE_PUMP_PRIME_STATE; - syringePumpSetRate = SYRINGE_PUMP_PRIME_RATE; - } else if ( TRUE == syringePumpBolusRequested ) { result = SYRINGE_PUMP_HEP_BOLUS_STATE; @@ -793,6 +788,7 @@ stopSyringePump(); syringePumpHomePositionOffset = getFPGASyringePumpEncoderPosition(); syringePumpPosition.data = 0; + syringePumpVolumeStartPosition = 0; syringePumpVolumeDelivered.data = 0.0; result = SYRINGE_PUMP_OFF_STATE; } @@ -824,11 +820,15 @@ rampSyringePump(); // Is plunger contact detected? - if ( ( syringePumpRampTimerCtr > 500 ) ) //|| ( getSyringePumpForceV() >= SYRINGE_FORCE_PLUNGER_THRESHOLD_V ) ) + if ( ( syringePumpRampTimerCtr > 800 ) || ( getSyringePumpForceV() >= SYRINGE_FORCE_PLUNGER_THRESHOLD_V ) ) { - stopPump = TRUE; syringePumpVolumeDelivered.data = 0.0; -// syringePumpSeekToPrimeRequested = TRUE; + syringePumpVolumeStartPosition = syringePumpPosition.data; + syringePumpSetRate = SYRINGE_PUMP_PRIME_RATE; + // Calculate target FPGA rate from set rate in mL/hr converted to microstep toggle interval in uSec + calcStepperToggleTimeForTargetRate( syringePumpSetRate ); + setFPGASyringePumpStepToggleTime( syringePumpRampUpToggleTime ); + result = SYRINGE_PUMP_PRIME_STATE; } // Has syringe been removed? @@ -868,6 +868,7 @@ { stopPump = TRUE; syringePumpVolumeDelivered.data = 0.0; + syringePumpVolumeStartPosition = syringePumpPosition.data; } // Has syringe been removed?