Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r145fd716a856f864f39fb0f9884865f6e45b9256 -r7f56f07660862bc62524c506699193a7e5f48f96 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 145fd716a856f864f39fb0f9884865f6e45b9256) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 7f56f07660862bc62524c506699193a7e5f48f96) @@ -51,7 +51,7 @@ #define CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT 1000 ///< Hall sensors minimum allowed value. #define CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS ( 5 * MS_PER_SECOND ) ///< Hall sensors out of range time in milliseconds. -#define CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP 8.0F ///< Number of micro-steps ( fractions of step) per step. +#define CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP 64.0F ///< Number of micro-steps ( fractions of step) per step. #define CONCENTRATE_PUMP_VOLUME_TO_REVOLUTION_DIENER ( ( 1.0F / CONCENTRATE_PUMP_VOLUME_PER_REV_DIENER ) * \ ( CONCENTRATE_PUMP_STEP_PER_REV * \ CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ) ) ///< Convert volume in to number of revolutions needed. @@ -80,18 +80,40 @@ #define CONCENTRATE_PUMP_CONTROL_SLEEP_OFF 0x40 ///< Concentrate pump control sleep off. #define CONCENTRATE_PUMP_CONTROL_ENABLE_MASK 0x10 ///< Concentrate pump control enable bit mask. -static const U32 CONCENTRATE_PUMP_CONTROL_FORWARD = CONCENTRATE_PUMP_CONTROL_SLEEP_OFF | - CONCENTRATE_PUMP_CONTROL_NOT_RESET | - CONCENTRATE_PUMP_CONTROL_ENABLE | - CONCENTRATE_PUMP_CONTROL_FORWARD_DIR | - CONCENTRATE_PUMP_CONTROL_EIGHTH_STEP; ///< Concentrate pump control forward. +//NEW STEPPER DRIVER CONFIGURATION DRV8434S +#define CONCENTRATE_PUMP_CONTROL_DRV_TWOFIXTYSIXTH_STEP 0x0A ///< concentrate pump microstep control 1/256th step. +#define CONCENTRATE_PUMP_CONTROL_DRV_ONETWENTYEIGHTYTH_STEP 0x09 ///< concentrate pump microstep control 1/128th step. +#define CONCENTRATE_PUMP_CONTROL_DRV_SIXTYFOURTH_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. -static const U32 CONCENTRATE_PUMP_CONTROL_REVERSE = CONCENTRATE_PUMP_CONTROL_SLEEP_OFF | - CONCENTRATE_PUMP_CONTROL_NOT_RESET | - CONCENTRATE_PUMP_CONTROL_ENABLE | - CONCENTRATE_PUMP_CONTROL_REVERSE_DIR | - CONCENTRATE_PUMP_CONTROL_EIGHTH_STEP; ///< Concentrate pump control reverse. +#define CONCENTRATE_PUMP_CONTROL_DRV_REVERSE_DIR 0x00 ///< bit 4 = DIR, Concentrate pump control reverse direction. +#define CONCENTRATE_PUMP_CONTROL_DRV_FORWARD_DIR 0x10 ///< bit 4 = DIR, Concentrate pump control forward direction. +#define CONCENTRATE_PUMP_CONTROL_DRV_ENABLE 0x00 ///< bit 5, active low, Concentrate pump control enable pump. +#define CONCENTRATE_PUMP_CONTROL_DRV_DISABLE 0x20 ///< bit 5, active low, Concentrate pump control disable pump. +#define CONCENTRATE_PUMP_CONTROL_DRV_ENABLE_MASK 0x20 ///< bit 5 mask, Concentrate pump control enable bit mask. +#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 concentrate pump states. typedef enum ConcentratePumpState { @@ -141,7 +163,11 @@ static OVERRIDE_U32_T parked[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Concentrate pump is currently parked (T/F). static OVERRIDE_U32_T parkFaulted[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Concentrate pump park command has faulted (T/F). static BOOL isDosingCompleted[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Flag indicating dosing completed status (T/F). +static U08 Enable_DRV8434S_Stepper_Driver; ///< Enable New Stepper driver for Concentrate Pump. +static U32 CONCENTRATE_PUMP_CONTROL_FORWARD; ///< Concentrate pump control forward. +static U32 CONCENTRATE_PUMP_CONTROL_REVERSE; ///< Concentrate pump control reverse. + //static DD_ACID_CONCENTRATES_RECORD_T acidConcentrateCalRecord; ///< Acid concentrate calibration record. //static DD_BICARB_CONCENTRATES_RECORD_T bicarbConcentrateCalRecord; ///< Bicarb concentrate calibration record. //static DD_UF_PUMP_RECORD_T ultrafiltrationPumpCalRecord; ///< Ultrafiltration pump calibration record. @@ -159,6 +185,7 @@ static void checkConcentratePumpControlSet( CONCENTRATE_PUMPS_T pumpId ); static void publishConcentratePumpData( void ); static void monitorPumpParkStatus( void ); +static void checkConcentratePumpControl( void ); /*********************************************************************//** * @brief @@ -175,7 +202,10 @@ acidConcentratePumpParkPersistenceClear = FALSE; bicarbConcentratePumpParkPersistenceClear = FALSE; ufPumpParkPersistenceClear = FALSE; + Enable_DRV8434S_Stepper_Driver = FALSE; + checkConcentratePumpControl(); + for ( pumpId = CONCENTRATEPUMPS_FIRST; pumpId < NUM_OF_CONCENTRATE_PUMPS; pumpId++ ) { concentratePumps[ pumpId ].controlTimerCounter = 0; @@ -542,6 +572,8 @@ { if ( pumpId < NUM_OF_CONCENTRATE_PUMPS ) { + //Check Concentrate Pump Control and Set configuration if driver is changed. + checkConcentratePumpControl(); if ( targetSpeed_ml_min >= 0.0 ) { concentratePumps[ pumpId ].direction = CONCENTRATE_PUMP_FORWARD_DIR; @@ -1300,7 +1332,71 @@ } } +/*********************************************************************//** + * @brief + * The checkConcentratePumpControl function update concentrate pump control + * registers. + * @details \b Inputs: Enable_DRV8434S_Stepper_Driver + * @details \b Outputs: Enable_DRV8434S_Stepper_Driver, + * CONCENTRATE_PUMP_CONTROL_FORWARD, CONCENTRATE_PUMP_CONTROL_REVERSE + * @return none + *************************************************************************/ +static void checkConcentratePumpControl( void ) +{ + if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DRV8434S_STEPPER_DRIVER )) + { + if ( Enable_DRV8434S_Stepper_Driver == FALSE ) + { + setFPGAD10D11CTRL1Reg( DRV8434S_CTRL1_DEFAULT ); + setFPGAD10D11CTRL2Reg( DRV8434S_CTRL2_DEFAULT ); + setFPGAD10D11CTRL4Reg( DRV8434S_CTRL4_DEFAULT ); + setFPGAD10D11CTRL5Reg( DRV8434S_CTRL5_DEFAULT ); + setFPGAD10D11CTRL6Reg( DRV8434S_CTRL6_DEFAULT ); + setFPGAD10D11CTRL7Reg( DRV8434S_CTRL7_DEFAULT ); + + setFPGAD76CTRL1Reg( DRV8434S_CTRL1_DEFAULT ); + setFPGAD76CTRL2Reg( DRV8434S_CTRL2_DEFAULT ); + setFPGAD76CTRL4Reg( DRV8434S_CTRL4_DEFAULT ); + setFPGAD76CTRL5Reg( DRV8434S_CTRL5_DEFAULT ); + setFPGAD76CTRL6Reg( DRV8434S_CTRL6_DEFAULT ); + setFPGAD76CTRL7Reg( DRV8434S_CTRL7_DEFAULT ); + + setFPGAD10PumpControl( DRV8434S_CTRL_DEFAULT ); + setFPGAD11PumpControl( DRV8434S_CTRL_DEFAULT ); + setFPGAD76PumpControl( DRV8434S_CTRL_DEFAULT ); + + CONCENTRATE_PUMP_CONTROL_FORWARD = CONCENTRATE_PUMP_CONTROL_DRV_ENABLE | + CONCENTRATE_PUMP_CONTROL_DRV_FORWARD_DIR | + CONCENTRATE_PUMP_CONTROL_DRV_SIXTYFOURTH_STEP; + + CONCENTRATE_PUMP_CONTROL_REVERSE = CONCENTRATE_PUMP_CONTROL_DRV_ENABLE | + CONCENTRATE_PUMP_CONTROL_DRV_REVERSE_DIR | + CONCENTRATE_PUMP_CONTROL_DRV_SIXTYFOURTH_STEP; + + Enable_DRV8434S_Stepper_Driver = TRUE; + } + + + } + else + { + CONCENTRATE_PUMP_CONTROL_FORWARD = CONCENTRATE_PUMP_CONTROL_SLEEP_OFF | + CONCENTRATE_PUMP_CONTROL_NOT_RESET | + CONCENTRATE_PUMP_CONTROL_ENABLE | + CONCENTRATE_PUMP_CONTROL_FORWARD_DIR | + CONCENTRATE_PUMP_CONTROL_EIGHTH_STEP; + + CONCENTRATE_PUMP_CONTROL_REVERSE = CONCENTRATE_PUMP_CONTROL_SLEEP_OFF | + CONCENTRATE_PUMP_CONTROL_NOT_RESET | + CONCENTRATE_PUMP_CONTROL_ENABLE | + CONCENTRATE_PUMP_CONTROL_REVERSE_DIR | + CONCENTRATE_PUMP_CONTROL_EIGHTH_STEP; + + Enable_DRV8434S_Stepper_Driver = FALSE; + } +} + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/