Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -r8457e008319c5f6b20085918dd1799a7bfe841ca -rd43c4dba44f89459698cbf30bfb3ffcb89abe2c7 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 8457e008319c5f6b20085918dd1799a7bfe841ca) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision d43c4dba44f89459698cbf30bfb3ffcb89abe2c7) @@ -193,6 +193,7 @@ static F32 forceAtEndOfSeek; ///< Force sensor reading in Volts at the end of seek. 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 syringePumpRampUpPct; ///< Percentage progress of ramp to target rate. 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. @@ -293,6 +294,7 @@ syringePumpDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; syringePumpSpeedCalcTimerCounter = 0; syringePumpRampTimerCtr = 0; + syringePumpSafetyVolumeDelivered = 0.0; syringePumpPositionKnown = FALSE; syringePumpPlungerFound = FALSE; @@ -1146,6 +1148,8 @@ // Reset persistence for direction alarms while pump is off isPersistentAlarmTriggered( ALARM_ID_HD_SYRINGE_PUMP_ENCODER_DIRECTION_ERROR, FALSE ); isPersistentAlarmTriggered( ALARM_ID_HD_SYRINGE_PUMP_CONTROLLER_DIRECTION_ERROR, FALSE ); + // Reset ramp % complete + syringePumpPrimeCompleted = 0.0; // Check for request flags if ( TRUE == syringePumpRetractRequested ) @@ -1766,12 +1770,14 @@ { syringePumpRampUpToggleTime = (U32)((F32)SYRINGE_PUMP_START_RAMP_SPEED / (F32)( ( syringePumpRampTimerCtr * syringePumpRampTimerCtr * syringePumpRampTimerCtr ) / SYRINGE_PUMP_RAMP_DIVISOR ) ); + syringePumpPrimeCompleted = syringePumpSetToggleTime / syringePumpRampUpToggleTime; if ( syringePumpRampUpToggleTime > syringePumpSetToggleTime ) { setFPGASyringePumpStepToggleTime( syringePumpRampUpToggleTime ); } else { + syringePumpPrimeCompleted = 1.0; // set to 100% ramp completion setFPGASyringePumpStepToggleTime( syringePumpSetToggleTime ); } } @@ -1844,7 +1850,7 @@ *************************************************************************/ static void calcSafetyVolumeDelivered( void ) { - syringePumpSafetyVolumeDelivered += ( syringePumpSetRate / ( MIN_PER_HOUR * SEC_PER_MIN * ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ) ); + syringePumpSafetyVolumeDelivered += ( syringePumpPrimeCompleted * ( syringePumpSetRate / (F32)( MIN_PER_HOUR * SEC_PER_MIN * ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ) ) ); } /*********************************************************************//**