Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -r90ff6d5060b3f679d17fada9057e4dcecdecae9c -r25d7f8e93896c27797735d782a43097e5d6a5971 --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 90ff6d5060b3f679d17fada9057e4dcecdecae9c) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 25d7f8e93896c27797735d782a43097e5d6a5971) @@ -35,8 +35,6 @@ #include "DialOutFlow.h" // ********** private definitions ********** -#define DIALOUT_SIMULATOR 1 - #define DIAL_OUT_FLOW_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) // interval (ms/task time) at which the dialIn flow data is published on the CAN bus #define MAX_DIAL_OUT_FLOW_RATE 500 // mL/min @@ -47,30 +45,45 @@ #define MAX_DIAL_OUT_PUMP_PWM_DUTY_CYCLE 0.88 // controller will error if PWM duty cycle > 90%, so set max to 88% #define MIN_DIAL_OUT_PUMP_PWM_DUTY_CYCLE 0.12 // controller will error if PWM duty cycle < 10%, so set min to 12% -#define DOP_CONTROL_INTERVAL ( 500 / TASK_GENERAL_INTERVAL ) // interval (ms/task time) at which the dialOut pump is controlled +#define DOP_CONTROL_INTERVAL ( 500 / TASK_GENERAL_INTERVAL ) // interval (ms/task time) at which the dialOut pump is controlled -#define DOP_MAX_CURR_WHEN_STOPPED_MA 150.0 // motor controller current should not exceed this when pump should be stopped -#define DOP_MIN_CURR_WHEN_RUNNING_MA 150.0 // motor controller current should always exceed this when pump should be running -#define DOP_MAX_CURR_WHEN_RUNNING_MA 1000.0 // motor controller current should not exceed this when pump should be running -#define DOP_MAX_CURR_ERROR_DURATION_MS 2000 // motor controller current errors persisting beyond this duration will trigger an alarm +#define DOP_MAX_CURR_WHEN_STOPPED_MA 150.0 // motor controller current should not exceed this when pump should be stopped +#define DOP_MIN_CURR_WHEN_RUNNING_MA 150.0 // motor controller current should always exceed this when pump should be running +#define DOP_MAX_CURR_WHEN_RUNNING_MA 1000.0 // motor controller current should not exceed this when pump should be running +#define DOP_MAX_CURR_ERROR_DURATION_MS 2000 // motor controller current errors persisting beyond this duration will trigger an alarm -#define DIAL_OUT_FLOW_SAMPLE_FREQ ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) -#define DIAL_OUT_CONTROLLER_SAMPLE_FREQ ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) +#define DIAL_OUT_FLOW_SAMPLE_FREQ ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) +#define DIAL_OUT_CONTROLLER_SAMPLE_FREQ ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) -// dialOut pump stop and direction macros -#define STOP_DO_PUMP_SPI4_PORT_MASK 0x00000200 // (SPI4CLK - re-purposed as output GPIO) +/*** dialOut pump stop and direction macros ***/ +#define STOP_DO_PUMP_SPI4_PORT_MASK 0x00000200 // (SPI4CLK - re-purposed as output GPIO) +#define SET_DOP_STOP() {spiREG4->PC3 |= STOP_DO_PUMP_SPI4_PORT_MASK;} +#define CLR_DOP_STOP() {spiREG4->PC3 &= ~STOP_DO_PUMP_SPI4_PORT_MASK;} +#define STOP_DO_PUMP_GIO_PORT_PIN 6U +#define SET_DOP_DIR() gioSetBit( gioPORTA, STOP_DO_PUMP_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) +#define CLR_DOP_DIR() gioSetBit( gioPORTA, STOP_DO_PUMP_GIO_PORT_PIN, PIN_SIGNAL_LOW ) -#define SET_DOP_STOP() {spiREG4->PC3 |= STOP_DO_PUMP_SPI4_PORT_MASK;} -#define CLR_DOP_STOP() {spiREG4->PC3 &= ~STOP_DO_PUMP_SPI4_PORT_MASK;} +/*** setDialOutFlowRxTotalVolumeAndRxTime ***/ +#define DOP_REV_PER_LITER 124.0 // rotor revolutions per liter +#define DOP_ML_PER_MIN_TO_PUMP_RPM_FACTOR ( DOP_REV_PER_LITER / ML_PER_LITER ) +#define DOP_GEAR_RATIO 32.0 // dialIn pump motor to dialIn pump gear ratio +#define DOP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.0003717 // ~27 BP motor RPM = 1% PWM duty cycle +#define DOP_PWM_ZERO_OFFSET 0.1 // 10% PWM duty cycle = zero speed +#define DOP_PWM_FROM_ML_PER_MIN(rate) ( (rate) * DOP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * DOP_GEAR_RATIO * DOP_MOTOR_RPM_TO_PWM_DC_FACTOR + DOP_PWM_ZERO_OFFSET ) +#define MAX_RX_TOTAL_VOLUME_ML 8000 +#define MIN_RX_TOTAL_VOLUME_ML 100 +#define MAX_UF_RATE_ML_PER_HOUR 2500.0 +/*** Used by Simulator ***/ +#define DIALOUT_SIMULATOR 1 +#define SIMULATOR_PWM_TO_ML_PER_MIN 678.0 +#define SIMULATOR_ZERO_CROSSING_ML_PER_MIN 67.80 -#define STOP_DO_PUMP_GIO_PORT_PIN 6U +/*** getMeasuredVariable ***/ +#define DIP_SPEED_ADC_TO_RPM_FACTOR 1.375 // conversion factor from ADC counts to RPM for dialIn pump motor +#define DIP_CURRENT_ADC_TO_MA_FACTOR 2.65 // conversion factor from ADC counts to mA for dialIn pump motor -#define SET_DOP_DIR() gioSetBit( gioPORTA, STOP_DO_PUMP_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) -#define CLR_DOP_DIR() gioSetBit( gioPORTA, STOP_DO_PUMP_GIO_PORT_PIN, PIN_SIGNAL_LOW ) - - typedef enum DialOutFlow_Measured_Signals { DIALOUT_LOAD_CELL_WEIGHT = 0, @@ -245,22 +258,8 @@ *************************************************************************/ BOOL setDialOutFlowRxTotalVolumeAndRxTime( U16 rxTotalVolumeInMl, U16 rxTotalTimeInMinutes, U16 rxFlowRateinMlPerMin) { - #define DOP_REV_PER_LITER 124.0 // rotor revolutions per liter - #define DOP_ML_PER_MIN_TO_PUMP_RPM_FACTOR ( DOP_REV_PER_LITER / ML_PER_LITER ) - #define DOP_GEAR_RATIO 32.0 // dialIn pump motor to dialIn pump gear ratio - #define DOP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.0003717 // ~27 BP motor RPM = 1% PWM duty cycle - #define DOP_PWM_ZERO_OFFSET 0.1 // 10% PWM duty cycle = zero speed - #define DOP_PWM_FROM_ML_PER_MIN(rate) ( (rate) * DOP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * DOP_GEAR_RATIO * DOP_MOTOR_RPM_TO_PWM_DC_FACTOR + DOP_PWM_ZERO_OFFSET ) - - #define MAX_RX_TOTAL_VOLUME_ML 8000 - #define MIN_RX_TOTAL_VOLUME_ML 100 - - #define MAX_UF_RATE_ML_PER_HOUR 2500.0 - - BOOL returnValue = TRUE; - F32 rxUFPatientRate = ((F32) rxTotalVolumeInMl * MIN_PER_HOUR )/ rxTotalTimeInMinutes; if ( rxTotalVolumeInMl > MAX_RX_TOTAL_VOLUME_ML || rxTotalVolumeInMl < MIN_RX_TOTAL_VOLUME_ML ) @@ -322,8 +321,6 @@ *************************************************************************/ F32 getMeasuredVariable( DIALOUT_MEASURED_SIGNALS_T signal ) { - #define DIP_SPEED_ADC_TO_RPM_FACTOR 1.375 // conversion factor from ADC counts to RPM for dialIn pump motor - #define DIP_CURRENT_ADC_TO_MA_FACTOR 2.65 // conversion factor from ADC counts to mA for dialIn pump motor F32 returnValue = 0.0; switch ( signal ) @@ -382,8 +379,6 @@ */ F32 UFSimulator(F32 pwm) { - #define SIMULATOR_PWM_TO_ML_PER_MIN 678.0 - #define SIMULATOR_ZERO_CROSSING_ML_PER_MIN 67.80 F32 flow;