Index: firmware/App/Controllers/SubstitutionPump.c =================================================================== diff -u -r3b64586791accd0b9e8d8978b40e2509bb86dfbe -r7f56f07660862bc62524c506699193a7e5f48f96 --- firmware/App/Controllers/SubstitutionPump.c (.../SubstitutionPump.c) (revision 3b64586791accd0b9e8d8978b40e2509bb86dfbe) +++ firmware/App/Controllers/SubstitutionPump.c (.../SubstitutionPump.c) (revision 7f56f07660862bc62524c506699193a7e5f48f96) @@ -63,18 +63,31 @@ #define MAX_ALLOWED_ML_OUT_OF_RANGE 10 ///< Maximum allowed mL/min out of range from target ml/min in open loop. #define RPM_OUT_OF_RANGE_TIME_OUT ( 2 * MS_PER_SECOND ) ///< Open loop RPM out of range time out in ms. -static const U32 SUBSTITUTION_PUMP_CONTROL_FORWARD = SUBSTITUTION_PUMP_CONTROL_SLEEP_OFF | - SUBSTITUTION_PUMP_CONTROL_NOT_RESET | - SUBSTITUTION_PUMP_CONTROL_ENABLE | - SUBSTITUTION_PUMP_CONTROL_REVERSE_DIR | - SUBSTITUTION_PUMP_CONTROL_SIXTY_FOUR_STEP; +//Stepper Motor driver configuration (DRV8434S) +#define SUBSTITUTION_PUMP_CONTROL_DRV_REVERSE_DIR 0x00 ///< bit 4 = DIR, Substitution pump reverse direction configuration. +#define SUBSTITUTION_PUMP_CONTROL_DRV_FORWARD_DIR 0x10 ///< bit 4 = DIR, Substitution pump forward direction configuration. +#define SUBSTITUTION_PUMP_CONTROL_DRV_ENABLE 0x00 ///< bit 5, Substitution pump control enable pump. +#define SUBSTITUTION_PUMP_CONTROL_DRV_DISABLE 0x20 ///< bit 5, active low, disabled. (DRV8434S) -static const U32 SUBSTITUTION_PUMP_CONTROL_STOP = SUBSTITUTION_PUMP_CONTROL_SLEEP_OFF | - SUBSTITUTION_PUMP_CONTROL_NOT_RESET | - SUBSTITUTION_PUMP_CONTROL_DISABLE | - SUBSTITUTION_PUMP_CONTROL_REVERSE_DIR | - SUBSTITUTION_PUMP_CONTROL_SIXTY_FOUR_STEP; +#define CONCENTRATE_PUMP_CONTROL_DRV_TWOFIXTYSIXTH_STEP 0x0A ///< concentrate pump microstep control 1/256th step. +#define CONCENTRATE_PUMP_CONTROL_DRV_ONE_TWENTY_EIGHTH_STEP 0x09 ///< concentrate pump microstep control 1/128th step. +#define SUBSTITUTION_PUMP_CONTROL_DRV_SIXTY_FOUR_STEP 0x08 ///< concentrate pump microstep control 1/64th step. +#define CONCENTRATE_PUMP_CONTROL_DRV_THIRTYSECOND_STEP 0x07 ///< concentrate pump microstep control 1/32nd step. +#define CONCENTRATE_PUMP_CONTROL_DRV_SIXTEENTH_STEP 0x06 ///< concentrate pump microstep control 1/16th step. +#define CONCENTRATE_PUMP_CONTROL_DRV_EIGHTH_STEP 0x05 ///< concentrate pump microstep control 1/8th step +#define CONCENTRATE_PUMP_CONTROL_DRV_NONCIRCULAR_HALF_STEP 0x02 ///< Concentrate pump microstep control non-circular 1/2 step. +#define CONCENTRATE_PUMP_CONTROL_DRV_HALF_STEP 0x03 ///< Concentrate pump microstep control 1/2 step. +#define CONCENTRATE_PUMP_CONTROL_DRV_QUARTER_STEP 0x04 ///< Concentrate pump microstep control 1/4 step. +#define CONCENTRATE_PUMP_CONTROL_DRV_FULL_STEP_71PCT 0x01 ///< Concentrate pump microstep control full step with 71% current. +#define CONCENTRATE_PUMP_CONTROL_DRV_FULL_STEP_100PCT 0x00 ///< Concentrate pump microstep control full step with 100% current. +#define DRV8434S_CTRL1_DEFAULT 0x00 ///< Full motor current, normal open-load fault behavior. +#define DRV8434S_CTRL2_DEFAULT 0x8F ///< Motor outputs on, 16us off-time, smart auto-tuning current control (quietest/smoothest mode). +#define DRV8434S_CTRL4_DEFAULT 0x30 ///< Registers unlocked/writable, basic over current and over temperature protection settings. +#define DRV8434S_CTRL5_DEFAULT 0x08 ///< Stall detection off by default, but if turned on it will show up as a fault +#define DRV8434S_CTRL6_DEFAULT 0x03 ///< Stall detection sensitivity threshold (low byte). +#define DRV8434S_CTRL7_DEFAULT 0x20 ///< Low current ripple setting, spread-spectrum switching enabled (reduces EMI noise). +#define DRV8434S_CTRL_DEFAULT 0x7F ///< Stop State indicator flag. /// Enumeration of Substitution pump states. typedef enum SubstituionPumpState @@ -103,7 +116,7 @@ { U32 pumpID; ///< Substitution pump ID U32 startStop; ///< Substitution pump start:1,stop :0. - F32 rate; ///< rate in ml/min + F32 rate; ///< rate in ml/min } SUB_PUMP_START_STOP_CMD_PAYLOAD_T; // ********** private data ********** @@ -112,6 +125,9 @@ static SUBSTITUTION_PUMP_T substitutionPumps[ NUM_OF_SUB_PUMPS ]; ///< Array of Substitution pumps' data structure. static OVERRIDE_F32_T pumpTargetRate[ NUM_OF_SUB_PUMPS ]; ///< Target substitution pumps' rate (mL/min). static U32 substitutionPumpPublishTimerCounter; ///< Substitution pump data publication counter. +static U08 Enable_DRV8434S_Stepper_Driver; ///< Enable new stepper driver for Substitution Pump. +static U32 SUBSTITUTION_PUMP_CONTROL_FORWARD; ///< Substitution Pump forward Control. +static U32 SUBSTITUTION_PUMP_CONTROL_STOP; ///< Substitution pump stop state control. // ********** private function prototypes ********** @@ -121,6 +137,7 @@ static BOOL stepSubstitutionPumpToTargetRate( SUBSTITUTION_PUMPS_T pumpId ); static void checkSubstitutionPumpControlSet( SUBSTITUTION_PUMPS_T pumpId ); static void publishSubstitutionPumpData( void ); +static void checkSubstitutionPumpControl( void ); /*********************************************************************//** * @brief @@ -149,7 +166,9 @@ substitutionPumpDataPublishInterval.ovInitData = SUBSTITUTION_PUMP_DATA_PUBLISH_INTERVAL; substitutionPumpDataPublishInterval.ovData = 0; substitutionPumpDataPublishInterval.override = OVERRIDE_RESET; + Enable_DRV8434S_Stepper_Driver = FALSE; + checkSubstitutionPumpControl(); initPersistentAlarm( ALARM_ID_DD_D92_PUMP_RPM_OUT_OF_RANGE, RPM_OUT_OF_RANGE_TIME_OUT, RPM_OUT_OF_RANGE_TIME_OUT ); } @@ -468,6 +487,9 @@ *************************************************************************/ void setSubstitutionPumpTargetRate( SUBSTITUTION_PUMPS_T pumpId, F32 targetRate_ml_min ) { + //Check Substitution Pump Control + checkSubstitutionPumpControl(); + if ( pumpId < NUM_OF_SUB_PUMPS ) { if ( targetRate_ml_min >= 0.0 ) @@ -515,7 +537,57 @@ } } +/*********************************************************************//** + * @brief + * The checkSubstitutionPumpControl function update concentrate pump control + * registers. + * @details \b Inputs: Enable_DRV8434S_Stepper_Driver + * @details \b Outputs: Enable_DRV8434S_Stepper_Driver, + * SUBSTITUTION_PUMP_CONTROL_FORWARD, SUBSTITUTION_PUMP_CONTROL_STOP + * @return none + *************************************************************************/ +static void checkSubstitutionPumpControl( void ) +{ + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DRV8434S_STEPPER_DRIVER ) ) + { + if( Enable_DRV8434S_Stepper_Driver == FALSE ) + { + SUBSTITUTION_PUMP_CONTROL_FORWARD = SUBSTITUTION_PUMP_CONTROL_DRV_ENABLE | + SUBSTITUTION_PUMP_CONTROL_DRV_REVERSE_DIR | + SUBSTITUTION_PUMP_CONTROL_DRV_SIXTY_FOUR_STEP; + SUBSTITUTION_PUMP_CONTROL_STOP = SUBSTITUTION_PUMP_CONTROL_DRV_DISABLE | + SUBSTITUTION_PUMP_CONTROL_DRV_REVERSE_DIR | + SUBSTITUTION_PUMP_CONTROL_DRV_SIXTY_FOUR_STEP; + + setFPGAD92CTRL1Reg( DRV8434S_CTRL1_DEFAULT ); + setFPGAD92CTRL2Reg( DRV8434S_CTRL2_DEFAULT ); + setFPGAD92CTRL4Reg( DRV8434S_CTRL4_DEFAULT ); + setFPGAD92CTRL5Reg( DRV8434S_CTRL5_DEFAULT ); + setFPGAD92CTRL6Reg( DRV8434S_CTRL6_DEFAULT ); + setFPGAD92CTRL7Reg( DRV8434S_CTRL7_DEFAULT ); + + Enable_DRV8434S_Stepper_Driver= TRUE; + } + } + else + { + SUBSTITUTION_PUMP_CONTROL_FORWARD = SUBSTITUTION_PUMP_CONTROL_SLEEP_OFF | + SUBSTITUTION_PUMP_CONTROL_NOT_RESET | + SUBSTITUTION_PUMP_CONTROL_ENABLE | + SUBSTITUTION_PUMP_CONTROL_REVERSE_DIR | + SUBSTITUTION_PUMP_CONTROL_SIXTY_FOUR_STEP; + + SUBSTITUTION_PUMP_CONTROL_STOP = SUBSTITUTION_PUMP_CONTROL_SLEEP_OFF | + SUBSTITUTION_PUMP_CONTROL_NOT_RESET | + SUBSTITUTION_PUMP_CONTROL_DISABLE | + SUBSTITUTION_PUMP_CONTROL_REVERSE_DIR | + SUBSTITUTION_PUMP_CONTROL_SIXTY_FOUR_STEP; + + Enable_DRV8434S_Stepper_Driver= FALSE; + } +} + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/