Because of the Thanksgiving holiday in the U.S., TI E2E™ design support forum responses may be delayed from November 25 through December 2. Thank you for your patience.

This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

BQ76952EVM: BQ76952 Interface

Part Number: BQ76952EVM
Other Parts Discussed in Thread: BQSTUDIO, BQ76952

Hi Matt,

We are using BQ7695203 and its working but after some time when Cell Connector /Cell Input Connector Insertion/Removal,  device is failed to communicate with MCU.

We have observe that VREG18 o/p is .6 V and in normal case its voltage is 1.8V . and status is remain same after multiple time ON/OFF ,( After replacing the BQ with new BQ communication started again.)

We are giving the external VREGIN supply ~5.39V DC using LDO .

R199,R202 -1K

R148-4.7K

U23 --Not Mounted

R161 -4.7K

Please check the attached schematic and provides your input for correction.

2: I am also using Low Side mosfet drive and using CHRG and DCHRG Command ,Is correct or require to change this ?schematic BQ.pdf

3: BQ Initialization Code at Power ON

void BQ769x2_Init(void )
{
float tempRegValue=0;
// Configures all parameters in device RAM

// Enter CONFIGUPDATE mode (Subcommand 0x0090) - It is required to be in CONFIG_UPDATE mode to program the device RAM settings
// See TRM for full description of CONFIG_UPDATE mode
CommandSubcommands(SET_CFGUPDATE);

// After entering CONFIG_UPDATE mode, RAM registers can be programmed. When programming RAM, checksum and length must also be
// programmed for the change to take effect. All of the RAM registers are described in detail in the BQ769x2 TRM.
// An easier way to find the descriptions is in the BQStudio Data Memory screen. When you move the mouse over the register name,
// a full description of the register and the bits will pop up on the screen.

// 'Power Config' - 0x9234 = 0x2D80
// Setting the DSLP_LDO bit allows the LDOs to remain active when the device goes into Deep Sleep mode
// Set wake speed bits to 00 for best performance
BQ769x2_SetRegister(PowerConfig, 0x2D80, 2);
// 'Default Alarm Mask' - 0x..82 Enables the FullScan and ADScan bits, default value = 0xF800
BQ769x2_SetRegister(DefaultAlarmMask, 0xF882, 2);

// 'REG0 Config' - set REG0_EN bit to enable pre-regulator
BQ769x2_SetRegister(REG0Config, 0x00, 1);


// Set DFETOFF pin to control BOTH CHG and DSG FET - 0x92FB = 0x42 (set to 0x00 to disable)
BQ769x2_SetRegister(DFETOFFPinConfig, 0x42, 1);

// Set up ALERT Pin - 0x92FC = 0x2A
// This configures the ALERT pin to drive high (REG1 voltage) when enabled.
// The ALERT pin can be used as an interrupt to the MCU when a protection has triggered or new measurements are available
BQ769x2_SetRegister(ALERTPinConfig, 0x2A, 1);

// Set TS1 to measure Cell Temperature - 0x92FD = 0x07
BQ769x2_SetRegister(TS1Config, 0x00, 1);

// Set TS3 to measure FET Temperature - 0x92FF = 0x0F
BQ769x2_SetRegister(TS3Config, 0x00, 1);

// Set HDQ to measure Cell Temperature - 0x9300 = 0x07
BQ769x2_SetRegister(HDQPinConfig, 0x00, 1); // No thermistor installed on EVM HDQ pin, so set to 0x00

// Enable int Temp as FET temp /internal temp for Cell Protectinon- 0x9303 = 0x1E
//user mV =10mV and user A =10mA
BQ769x2_SetRegister(DAConfiguration, 0x1E, 1);

// 'VCell Mode' - Enable 16 cells - 0x9304 = 0x0000; Writing 0x0000 sets the default of 16 cells
BQ769x2_SetRegister(VCellMode, 0x0000, 2);

// Enable protections in 'Enabled Protections A' 0x9261 = 0xBC
// Enables SCD (short-circuit), OCD1 (over-current in discharge), OCD2,OCC (over-current in charge),
// COV (over-voltage), CUV (under-voltage)
BQ769x2_SetRegister(EnabledProtectionsA, 0xFC, 1);

// Enable all protections in 'Enabled Protections B' 0x9262 = 0xF7
// Enables OTF (over-temperature FET), OTINT (internal over-temperature), OTD (over-temperature in discharge),
// OTC (over-temperature in charge), UTINT (internal under-temperature), UTD (under-temperature in discharge), UTC (under-temperature in charge)
BQ769x2_SetRegister(EnabledProtectionsB, 0xF7, 1);
//Disable All protections in 'Enabled Protections C' 0x9263 = 0x00
BQ769x2_SetRegister(EnabledProtectionsC, 0x00, 1);

//Enable/Disable All protections in 'Charge FET' 0x9265 = 0x98
BQ769x2_SetRegister(CHGFETProtectionsA, 0x98, 1);

//Enable/Disable All protections in 'Charge FET' 0x9266 = 0xD5 //Disable All Protection
BQ769x2_SetRegister(CHGFETProtectionsB, 0xD5, 1);

//Enable/Disable All protections in 'Charge FET' 0x9267 = 0x56 //Disable All Protection
BQ769x2_SetRegister(CHGFETProtectionsC, 0x56, 1);


//Enable/Disable All protections in 'Dis Charge FET' 0x9269/0x926A/0x926B= Default Settings
BQ769x2_SetRegister(DSGFETProtectionsA, 0xE4, 1);
BQ769x2_SetRegister(DSGFETProtectionsB, 0xE6, 1);
BQ769x2_SetRegister(DSGFETProtectionsC, 0xE2, 1);

BQ769x2_SetRegister(FETOptions, 0x0D, 1);

//Enables CHARGE PUMP AND CHARGE PUMP LEVEL 5.5V,0X9309
BQ769x2_SetRegister(ChgPumpControl, 0x00, 1);

//Set Discharge Current for Discharge Status of Battery--0x9310=0x0A--1.0A
BQ769x2_SetRegister(DsgCurrentThreshold, 0x0A, 1);
//Set charge Current for charge Status of Battery--0x9312=0x0A--1.0A
BQ769x2_SetRegister(ChgCurrentThreshold, 0x0A, 1);

//Set Open Wire Check Time --0x9314=0x1E--30 Seconds
BQ769x2_SetRegister(CheckTime, 0x1E, 1);

// Set up Cell Balancing Configuration - 0x9335 = 0x03 - Automated balancing while in Relax or Charge modes
// Also see "Cell Balancing with BQ769x2 Battery Monitors" document on ti.com
BQ769x2_SetRegister(BalancingConfiguration, 0x03, 1);
//SET CELL BALANCE INTERVAL //0X9339=30 SECOND
BQ769x2_SetRegister(CellBalanceInterval, 0x1E, 1);
//SET CELL BALANCE MAX NUMBER OF CELL //0X933A=1
BQ769x2_SetRegister(CellBalanceMaxCells, 0x01, 1);
//SET CELL BALANCE Min CELL VOLTAGE during Charge//0X933B=3600 mV
BQ769x2_SetRegister(CellBalanceMinCellVCharge, 3500, 2);
//SET CELL BALANCE Min delta CELL VOLTAGE during Charge//0X933D=40 mV
BQ769x2_SetRegister(CellBalanceMinDeltaCharge, 40, 1);
//SET CELL BALANCE Min delta Stop VOLTAGE during Charge//0X933e=20 mV
BQ769x2_SetRegister(CellBalanceStopDeltaCharge, 20, 1);

//shutdown
//SET stack Voltage//0X9241=60.0V
BQ769x2_SetRegister(ShutdownStackVoltage, 600, 2);
//SET shutdown delay when stack Voltage below //9243=20 seconds
BQ769x2_SetRegister(LowVShutdownDelay, 20, 1);

//SET shut down Temperature//0X9244=70 degree
BQ769x2_SetRegister(ShutdownTemperature, 70, 1);
//SET shut down Temperature Delay //0X9245=5 Second
BQ769x2_SetRegister(ShutdownTemperatureDelay, 5, 1);
//SET FET shut down Delay //0X9252=0 means Link with RST Pin
BQ769x2_SetRegister(FETOffDelay, 0, 1);

//SET shut down Command Delay //0X9253= 8*.25Second means Link with RST Pin
BQ769x2_SetRegister(ShutdownCommandDelay, 8, 1);//2 seconds
//Auto Shut Down Time //9254=50 mA
BQ769x2_SetRegister(AutoShutdownTime, 15, 1);

//Sleep Current //9248=50 mA
BQ769x2_SetRegister(SleepCurrent, 50, 2);

//Sleep Voltage Time //924A=60 Second
BQ769x2_SetRegister(VoltageTime, 60, 1);

//Sleep wake Comparator current //924B=500mA
BQ769x2_SetRegister(WakeComparatorCurrent, 500, 2);

//Sleep Hys time //924D=60 Second
BQ769x2_SetRegister(SleepHysteresisTime, 60, 1);

//Sleep Charger Voltage Threshold //924E=2000 //2000 * 10 mV
BQ769x2_SetRegister(SleepChargerVoltageThreshold, 2000, 2);




// Set up CUV (under-voltage) Threshold - 0x9275 = SetCellUnderVoltage[3] (2000)
// CUV Threshold is this value multiplied by 50.6mV
tempRegValue=SetCellUnderVoltage[3];
tempRegValue=(tempRegValue*10)/506+.5;
BQ769x2_SetRegister(CUVThreshold, (uint8_t)tempRegValue, 1);

//CUV Delay //9276=74 //250.8 mS
BQ769x2_SetRegister(CUVDelay, 74, 2);
//CUV RECOVERY HYS //927B=4 //4*50.6 mV
BQ769x2_SetRegister(CUVRecoveryHysteresis, 4, 2);

// Set up COV (over-voltage) Threshold - 0x9278 = SetCellOverVoltage[3](3900 mV)
// COV Threshold is this value multiplied by 50.6mV
tempRegValue=SetCellOverVoltage[3];
tempRegValue=(tempRegValue*10)/506;
BQ769x2_SetRegister(COVThreshold, (uint8_t)tempRegValue, 1);
//DELAY 0x9278=74(250.8 mS)
BQ769x2_SetRegister(COVDelay, 74, 2);
//SET COV RECOVERY HYS//0X927C=5//5*50.6
BQ769x2_SetRegister(COVRecoveryHysteresis,5,1);

// Set Pack-Tos Delta Voltage - 0x92B0 = 200 //200*10 mV
BQ769x2_SetRegister(OCCPACKTOSDelta,200, 2);

// Set up OCC (over-current in charge) Threshold - 0x9280 = 0x26 (125 mV = 100A across 1.25mOhm sense resistor) Units in 2mV
BQ769x2_SetRegister(OCCThreshold, 0x26, 1);
// Set up OCC (over-current in charge) Delay - 0x9281 = 0x1E (29*3.3+6.6 mS)//102 mS
BQ769x2_SetRegister(OCCDelay, 0x1D, 1);

// Set up OCD1 Threshold - 0x9282 = 16 (32 mV = 40A across 1.25mOhm sense resistor) units of 2mV
BQ769x2_SetRegister(OCD1Threshold, 16, 1);
// Set up OCD1 Delay - 0x9283 = 127 //127*3.3+6.6 Ms
BQ769x2_SetRegister(OCD1Delay, 127, 1);

// Set up OCD2 Threshold - 0x9284 = 24 (48 mV = 60A across 1.25mOhm sense resistor) units of 2mV
BQ769x2_SetRegister(OCD2Threshold, 24, 1);
// Set up OCD2 Delay - 0x9285 = 28 //28*3.3+6.6 Ms=99mS
BQ769x2_SetRegister(OCD2Delay, 28, 1);

// Set up OCD3 Threshold - 0x928A =-1000 (-1000=100.0 A)
BQ769x2_SetRegister(OCD3Threshold, -1000, 2);
// Set up OCD2 Delay - 0x928C = 2 //2 Seconds
BQ769x2_SetRegister(OCD3Delay, 2, 1);

// Set up OCD Recovery Threshold - 0x928D = 200 //
BQ769x2_SetRegister(OCDRecoveryThreshold, 200, 2);



// Set up SCD Threshold - 0x9286 = 6 (125A = 1.25 mohm @100 A ) 6=125 mV
BQ769x2_SetRegister(SCDThreshold, 0x06, 1);

// Set up SCD Delay - 0x9287 = 7 (105 uS) Enabled with a delay of (value - 1) * 15 µs; min value of 1
BQ769x2_SetRegister(SCDDelay, 0x07, 1);

// Set up SCDL Latch Limit to 1 to set SCD recovery only with load removal 0x9295 = 0x01
// If this is not set, then SCD will recover based on time (SCD Recovery Time parameter).
BQ769x2_SetRegister(SCDLLatchLimit, 0x01, 1);

//OTC
// OTC THRESHOLD - 0x929A = 50 DEGREE
BQ769x2_SetRegister(OTCThreshold, 50, 1);
// OTC DELAY- 0x929B = 5 SECONDS
BQ769x2_SetRegister(OTCDelay, 5, 1);

// OTC RECOVERY - 0x929C = 45 DEGREE
BQ769x2_SetRegister(OTCRecovery, 45, 1);

//OTD
// OTD THRESHOLD - 0x929D = 60 DEGREE
BQ769x2_SetRegister(OTDThreshold, 60, 1);
// OTD DELAY- 0x929E = 5 SECONDS
BQ769x2_SetRegister(OTDDelay, 5, 1);

// OTC RECOVERY - 0x929F = 55 DEGREE
BQ769x2_SetRegister(OTDRecovery, 55, 1);


//OTF
// OTF THRESHOLD - 0x92A0 = 70 DEGREE
BQ769x2_SetRegister(OTFThreshold, 70, 1);
// OTF DELAY- 0x92A1 = 5 SECONDS
BQ769x2_SetRegister(OTFDelay, 5, 1);

// OTC RECOVERY - 0x92A2 = 60 DEGREE
BQ769x2_SetRegister(OTFRecovery, 60, 1);


//LOAD DETECT
// LD TIME 0x92B4 = 10 SECOND
BQ769x2_SetRegister(LoadDetectActiveTime, 10, 1);
// LD RECOVERY TIME = 50 SECONDS
BQ769x2_SetRegister(LoadDetectRetryDelay, 50, 1);
// LD RECOVERY TIME = 1 HRS
BQ769x2_SetRegister(LoadDetectTimeout, 1, 1);


//PERMANENT FAIL
// PERMANENT FAIL /DEEP DISCHARGE - 0x92C8 = 1500mV
BQ769x2_SetRegister(CUDEPThreshold, 1500, 2);
// PERMANENT FAIL /DEEP DISCHARGE- 0x92CA = 5 SECONDS
BQ769x2_SetRegister(CUDEPDelay, 5, 1);

// SUV - 0x92CB = 22000mV
BQ769x2_SetRegister(SUVThreshold, 2200, 2);
// SUV DELAY- 0x92CD = 5 SECONDS
BQ769x2_SetRegister(SUVDelay, 5, 1);

// SOV - 0x92CE = 4000mV
BQ769x2_SetRegister(SOVThreshold, 4000, 2);
// SOV DELAY- 0x92D0 = 5 SECONDS
BQ769x2_SetRegister(SOVDelay, 5, 1);

// TOS - 0x92D1 = 500mV
BQ769x2_SetRegister(TOSSThreshold, 500, 2);
// TOS DELAY- 0x92D3 = 10 SECONDS
BQ769x2_SetRegister(SOVDelay, 10, 1);

// SOCC 0x92D4 = 12500mA *10mA
BQ769x2_SetRegister(SOCCThreshold, 12500, 2);
// SOCC DELAY- 0x92D6 = 5 SECONDS
BQ769x2_SetRegister(SOCCDelay, 5, 1);

// SOCD 0x92D7 = -11000mA *10mA
BQ769x2_SetRegister(SOCDThreshold, -11000, 2);
// SOCD DELAY- 0x92D9 = 5 SECONDS
BQ769x2_SetRegister(SOCDDelay, 5, 1);

// SOT 0x92DA = 65 DEGREE
BQ769x2_SetRegister(SOTThreshold, 65, 1);
// SOT DELAY- 0x92DB = 5 SECONDS
BQ769x2_SetRegister(SOTDelay, 5, 1);

// SOTF 0x92DC = 85 DEGREE
BQ769x2_SetRegister(SOTFThreshold, 85, 1);
// SOTF DELAY- 0x92DD = 5 SECONDS
BQ769x2_SetRegister(SOTFDelay, 5, 1);


// PERMANENT FAIL CHECK VOLTAGE 0x92DE = 3500mV
BQ769x2_SetRegister(VIMRCheckVoltage, 3500, 2);

// PERMANENT FAIL CHECK CURRENT 0x92E0 = 3500mV
BQ769x2_SetRegister(VIMRMaxRelaxCurrent, 10, 2);

// PERMANENT FAIL VIMR 0x92E2 = 500mV
BQ769x2_SetRegister(VIMRThreshold, 500, 2);

// PERMANENT FAIL VIMR DELAY 0x92E4 = 5
BQ769x2_SetRegister(VIMRDelay, 5, 1);


// PERMANENT FAIL VIMR RELAX DURATION 0x92E5 = 90 SEC
BQ769x2_SetRegister(VIMRRelaxMinDuration, 90, 2);

// PERMANENT FAIL VIMA 0x92E7 = 3700
BQ769x2_SetRegister(VIMRDelay, 3700, 2);

// PERMANENT FAIL VIMA MIN ACTIVE CURRENT 0x92E9 = 50mA
BQ769x2_SetRegister(VIMAMinActiveCurrent, 50, 2);

// PERMANENT FAIL VIMA 0x92EB = 200mV
BQ769x2_SetRegister(VIMAThreshold, 200, 2);

// PERMANENT FAIL VIMA DELAY 0x92ED = 5 SECOND
BQ769x2_SetRegister(VIMADelay, 5, 1);


// PERMANENT FAIL CFET OFF 0X92EE = 50mA
BQ769x2_SetRegister(CFETFOFFThreshold, 50, 2);

// PERMANENT FAIL CFET OFF DELAY 0X92F0 = 5 SEC
BQ769x2_SetRegister(CFETFOFFDelay, 5, 1);

// PERMANENT FAIL DFET OFF 0X92F1 = -50mA
BQ769x2_SetRegister(DFETFOFFThreshold, -50, 2);

// PERMANENT FAIL DFET OFF DELAY 0X92F3 = 5 SEC
BQ769x2_SetRegister(DFETFOFFDelay, 5, 1);

// PERMANENT FAIL VSSF 0X92F4 = 100
BQ769x2_SetRegister(VSSFFailThreshold, 100, 2);

// PERMANENT FAIL VSSF DELAY 0X92F6 = 5 SEC
BQ769x2_SetRegister(VSSFDelay, 5, 1);

// Exit CONFIGUPDATE mode - Subcommand 0x0092
CommandSubcommands(EXIT_CFGUPDATE);
}

  • Hi Ramesh,

    There is a video on creating the BQ76952 schematic that may be helpful: https://training.ti.com/creating-schematic-bq769x2-battery-monitors 

    And there is a reference design for using low-side FETs here: https://www.ti.com/tool/TIDA-010216 

    If REG18 is not at 1.8V, this means the device is either damaged or maybe it is in Shutdown mode. I notice a few issues in the schematic, but I do not know if these alone are causing the issues you are seeing. I do not see any obvious issues in the register settings.

    • The resistors on the PACK and LD pins should be 10k (not 1k). 
    • Low-side FETs should be driven with the DCHG and DDSG pins using a FET driver IC. These cannot be controlled with the high-side FET control pins (which use the charge pump). Besides, the charge pump is disabled in your register settings. See the low-side FETs app note here: https://www.ti.com/lit/pdf/sluaa84

    Best regards,

    Matt

  • Hi Matt,

    Thanks for your suggestion, we will implement all .

    we are facing one more Issue in our board whenever charger is connect and battery is charging ,Cell 1 and Cell 16 voltage is increase upto 300 mV.

    Actual Cell Voltage is 3.3 V  but in board/sensing across cap is increase , Already disable the Cell Balancing

    Case 

    (1) Battery is discharging --------Cell 1 to Cell 16 Voltage is OK

    (2) Charger is connect and No current Flow-- Cell 1 to Cell 16 Voltage is OK

    (3) Charger is connected and Battery is charging -- then Cell1 and Cell 16 voltage is UP ~200mV.

    I am  sharing Gerber file for your review.TelecomBMS.zip

  • Hi Ramesh,

    It seems like you must have resistance in the charger path. I do not see the charger connection in the schematic - can you show where this is? Also, how are you able to charge if the FETs are not enabled?

    Regards,

    Matt

  • Please check the image 

    (2) Please check the value of components and suggest your recommendation

    Can I remove diode from here .

    because i am facing issue when connecting  pack+ and pack- to cell voltage terminal , gate drive resistance R237-1K heating which is used in external balancing mosfet 

  • Hi Ramesh,

    For the cell balancing FETs, you should probably use 100 Ohm cell input resistors (R236, R246, etc) so that the Vgs is high enough for the FETs to enable them. The cell balancing application report is a good document that shows examples and considerations.

    Matt

  • Hi Matt,

    Please  share the following things

    (1)rating of pmos for cell balancing

    (2) Zener is require or not

    (3) value of gate drive resistance for external cell balancing( we are using 1 K)

  • Hi Ramesh,

    1) The PMOS should have a low Vgs turn-on so that the IR drop across 100 Ohm cell input resistors is enough to enable it (see Cell balancing application report for example on how to calculate this voltage based on the cell voltage.

    2) The Zener is recommended to protect the PMOS - most transistors have a fairly low abs max rating on the gate voltage, so it is important to protect the component in the case of large transients.

    3) 1K should be fine.

    Best regards,

    Matt