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.

BQ76942: Can not turn on CHG FET and DCHG FET

Part Number: BQ76942
Other Parts Discussed in Thread: BQSTUDIO

Tool/software:

I want to ask how to turn on CHG FET and DCHG FET in BQ76942 circuit, I dont know exact conditions to turn on and turn off both FET, and I have just plugged my battery to BQ76942 circuit without charging or discharging. And I also checked some status such as SafetyStatusA with its value of 4 and SafetyStatusB with its value of 3, and it do not relate any conditions in FET Protection. Beside that, statuses like DSG, CHG, PCHG, PDSG are zeroes

  • Hello Hai,

    By default, the FETs are OFF. You can enable the FETs through Settings:Manufacturing:Mfg Status Init[FET_EN]. The subcommand 0x0022 FET_ENABLE() can also be used to toggle the [FET_EN] bit setting. More information regarding this can be found under Section 5.2.3.2 FET Control in the technical reference manual

    Best Regards,
    Alexis

  • I have used FET_ENABLE(), however, FETs still were turned off, can you explain more mechanism of turning on or off in FETs, its autonomy mechanism?

  • Hello Hai,

    checked some status such as SafetyStatusA with its value of 4 and SafetyStatusB with its value of 3

    To clarify, are you saying the registers Safety Status A is returning 0x4 and Safety Status B is returning 0x3?

    If so, they are indicating what safety faults that have been triggered which could have the FETs autonomously turn OFF if enabled in Settings:Protection:Enabled Protections A  and Settings:Protection:Enabled Protections B.

    can you explain more mechanism of turning on or off in FETs, its autonomy mechanism?

    As per Section 5.2.2 High-Side NFET Drivers of the technical reference manual (TRM), there are a few ways to control the FETs:

    The FETs can be turned ON/OFF autonomously or through a host. More information can best be found in Section 5.2 Primary Protections of the TRM.

    Are you using the BQ76942 EVM per chance or is this a custom board? If it is a custom board, can you share your schematic? 

    Best Regards,
    Alexis

  • I still can not turn on the Fets, I removed BJT at CD, I do not know its effect to mechanism of Fets? 

  • Hello Hai,

    Are you using the EVM or a custom board? If it is a custom one, do you mind sharing a pdf of your schematic so that I can see what you are referring too?

    As for the BJT at CD, are you potentially referring to the one that connects to the BREG pin?

    Best Regards,
    Alexis

  • Hello Alexis_H,

    Yes, of course

    I means BJT in BREG, I removed it and any thing work well without controlling FETs. I have more questions, whether if I removed Themal resistor in TS1, TS2, TS3, It will be in conditions that can not balance cells. I have read in *Cell Balancing With BQ769x2 Battery Monitors (Rev. A), if violating thermal conditions, cell balancing can not be activate. So, if I removed all these resistor means that I can not balance cells?

    Best regards,

    Hai Phan

  • Hello Hai,

    Thank you for sharing the image of the BREG. This previous post,BQ76942 REGIN and BREG transistor, helps explain the use of the BREG and REGIN pin more. If you do not plan on using the LDOs REG1 or REG2, then I would disable it. Even if BREG and REGIN are not being used, BREG under short-circuit conditions can draw up to 3.33mA as shown in Section 7.11 REG0 Pre-regulator of the datasheet. If you want to disable the pre-regulator, you will need to do so in the settings. Further details can be found in Section 6.3.1 Preregulator Control in the TRM.

    The device includes an internal die temperature check that can disable balancing if the die temperature exceeds a programmable threshold. Removing the resistors of the external thermistors should not affect the internal die temperature check, however, it could ruin your thermistor measurements if they do not have a pull-up resistor, and you are not using the devices’ internal pull-up resistor.

    Also, I see you mentioned using TS2 as a thermistor. This means the device will not ever be able to completely enter SHUTDOWN mode and enter a ‘soft shutdown’ mode instead if the shutdown sequence is initiated.

    Best Regards,
    Alexis

  • Hi Alexis_H, 

    Thank you for your comments, I still have problem that, I can use FET_ENABLE() to turn on the FETs, however, anytime it is turned on, it turned off immediately, I can see it toggle throuh CHG and DSG status through read command. Beside that, after I do not use this command, I have another problem is that, If my charger's voltage exceeds my charger's voltage, I hope that the Fet will turn on immediately, however, I saw through my mesure device, the difference between them really large before the Fet is turned on. In this case, Vgs of CHG FET just was around 2,6 V and it can not turn on completely. So, I want to ask you how to resolve this problem. I also share you my schematic below my comments.

    Best Regards,

    Khanh

  • Hello Hai,

    Could you share how your DSG, CHG, PCHG, and PDSG are connected as well? Are you using DDSG and DCHG as DDSG/DCHG functionality?

    If my charger's voltage exceeds my charger's voltage,

    Could you clarify what you mean by this?

    Do you have a configuration file or .gg file (from bqStudio) you can share of all the configuration changes you made? 

    Best Regards,
    Alexis

  • Hello Alexis_H, 

    Here is my schematic related to CHG, DSG and PCHG, PDSG


    If my charger's voltage exceeds my charger's voltage

    I means my understanding about autonomous activity of BQ76942 is if my charger's voltage exceeds battery voltage, the CHG Fet will turn on immediately without any command, right?. 

    Do you have a configuration file or .gg file (from bqStudio) you can share of all the configuration changes you made?

    Yes, I have just had a file that I custom from example code of BQ769x2. So, I will share you my command I used to set up BQ76942. I also used some command to check activity of BQ76942, its faults.

    BQ769x2_ReadAllVoltages();

    BQ769x2_ReadBalancingActive();

    BQ769x2_ReadAlarmStatus();

    BQ769x2_ReadAlarmRawStatus();

    BQ769x2_ReadCheckBatteryStatus();

    BQ769x2_ReadFETStatus();

    BQ769x2_ReadSafetyStatus();

    BQ769x2_ReadPFStatus();

    BQ769x2_ReadPassQ();

    void BQ769x2_Init() {

    CommandSubcommands(BQ769x2_RESET); // Resets the BQ769x2 registers

    HAL_Delay(60);

    // 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

    // This 0x2D80 includes SLEEP_EN, on-chip over temperature, more clear in 136 of TRM

    BQ769x2_SetRegister(PowerConfig, 0x2D80, 2);

    // 'REG0 Config' - set REG0_EN bit to enable pre-regulator

    // Not use LDO supplied by BQ including REG1 and REG2, leave this pin reset state: 0x00, and have to supply external to REG0 Pin

    // Use LDO including REG1, REG2, leave this pin set state: 0x01

    BQ769x2_SetRegister(REG0Config, 0x01, 1);

    // 'REG12 Config' - Enable REG1 with 3.3V output (0x0D for 3.3V, 0x0F for 5V)

    // This register reserved for Setting up how much values of REG1 and REG2

    BQ769x2_SetRegister(REG12Config, 0x0D, 1);

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

    BQ769x2_SetRegister(DFETOFFPinConfig, 0x00, 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, 0x07, 1);

    // Set TS3 to measure FET Temperature - 0x92FF = 0x0F

    //BQ769x2_SetRegister(TS3Config, 0x0F, 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

    // 'VCell Mode' - Enable 16 cells - 0x9304 = 0x0000; Writing 0x0000 sets the default of 16 cells

    //BQ769x2_SetRegister(VCellMode, 0x0000, 2);

    BQ769x2_SetRegister(VCellMode, 0x01FF, 2); // used 9 cells

    // Enable protections in 'Enabled Protections A' 0x9261 = 0xBC

    // Enables SCD (short-circuit), OCD1 (over-current in discharge), OCC (over-current in charge),

    // COV (over-voltage), CUV (under-voltage)

    BQ769x2_SetRegister(EnabledProtectionsA, 0xBC, 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);

    BQ769x2_SetRegister(EnabledProtectionsB, 0xF4, 1);

    // 'Default Alarm Mask' - 0x..82 Enables the FullScan and ADScan bits, default value = 0xF800

    BQ769x2_SetRegister(DefaultAlarmMask, 0xF886, 2);

    // 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

    // Balancing in Charging mode, relax mode, and sleep mode

    BQ769x2_SetRegister(BalancingConfiguration, 0x07, 1);// 07

    // Minimum cell temperature to prevent cell balancing is set to -127 degree

    BQ769x2_SetRegister(MinCellTemp, -127, 2);

    // Maximum cell temperature to prevent cell balancing is set to 127 degree

    BQ769x2_SetRegister(MaxCellTemp, 127, 2);

    // Maximum cell internal temperature to prevent cell balancing is set to 127 degree

    BQ769x2_SetRegister(MaxInternalTemp, 127, 2);

    // Time interval between cell balancing event is 1 s

    BQ769x2_SetRegister(CellBalanceInterval, 1, 2);

    // Number of cells are balanced in the same time is 3

    BQ769x2_SetRegister(CellBalanceMaxCells, 3, 2);

    // Maximum voltage threshold of each cell to allow balancing in charging is 2,5 V

    BQ769x2_SetRegister(CellBalanceMinCellVCharge, 2500, 2);

    // Minimum difference of cells to start balancing is 30 mV in charging mode

    BQ769x2_SetRegister(CellBalanceMinDeltaCharge, 15, 2);

    // Difference of cells to stop balancing is 20 mV in charging mode

    BQ769x2_SetRegister(CellBalanceStopDeltaCharge, 10, 2);

    // Maximum voltage threshold of each cell to allow balancing in relax is 2,5 V

    BQ769x2_SetRegister(CellBalanceMinCellVRelax, 2500, 2);

    // Minimum difference of cells to start balancing is 30 mV in relax mode

    BQ769x2_SetRegister(CellBalanceMinDeltaRelax, 15, 2);

    // Difference of cells to stop balancing is 20 mV in relax mode

    BQ769x2_SetRegister(CellBalanceStopDeltaRelax, 10, 2);

    // Charge current threshold: 500 mA, allow BQ know is in Charging

    BQ769x2_SetRegister(ChgCurrentThreshold, 10, 2);

    // Discharge current threshold: 500 mA, allow BQ know is in Discharging

    BQ769x2_SetRegister(DsgCurrentThreshold, 500, 2);

    // Set up CUV (under-voltage) Threshold - 0x9275 = 0x31 (2479 mV)

    // CUV Threshold is this value multiplied by 50.6mV

    BQ769x2_SetRegister(CUVThreshold, 0x31, 1);

    // Set up COV (over-voltage) Threshold - 0x9278 = 0x55 (4301 mV)

    // COV Threshold is this value multiplied by 50.6mV

    BQ769x2_SetRegister(COVThreshold, 0x55, 1);

    // Set up OCC (over-current in charge) Threshold - 0x9280 = 0x05 (10 mV = 10A across 1mOhm sense resistor) Units in 2mV

    BQ769x2_SetRegister(OCCThreshold, 0x05, 1);

    // Set up OCD1 Threshold - 0x9282 = 0x0A (20 mV = 20A across 1mOhm sense resistor) units of 2mV

    BQ769x2_SetRegister(OCD1Threshold, 0x0A, 1);

    // Set up SCD Threshold - 0x9286 = 0x05 (100 mV = 100A across 1mOhm sense resistor) 0x05=100mV

    BQ769x2_SetRegister(SCDThreshold, 0x05, 1);

    // Set up SCD Delay - 0x9287 = 0x03 (30 us) Enabled with a delay of (value - 1) * 15 µs; min value of 1

    BQ769x2_SetRegister(SCDDelay, 0x03, 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);

    // Exit CONFIGUPDATE mode - Subcommand 0x0092

    CommandSubcommands(EXIT_CFGUPDATE);

    HAL_Delay(10);

    CommandSubcommands(FET_ENABLE); // Enable the CHG and DSG FETs

    HAL_Delay(10);

    CommandSubcommands(SLEEP_DISABLE); // Sleep mode is enabled by default. For this example, Sleep is disabled to

    HAL_Delay(240);

    }

     

    Thank you,

    Best regards,

    Khanh.

  • Hi Alexis_H, 

    I have resolved my problem, I manually turned on FETs by CommandSubcommands(ALL_FET_ON), actually, in the past, I still used this, however, maybe faults happened leading to turn off the FETs by BQ76942. And one more reason is that my CommandSubcommands(ALL_FET_ON) contained another CommandSubcommands(FET_ENABLE), I tested in EVM, I saw that, if I used CommandSubcommands(FET_ENABLE) at certain time, I used this again, It will turn off FET_ENABLE, so my solution is I have used only one CommandSubcommands(FET_ENABLE) in BQ769x2_Init(). When I need to turn on the FETs, I only used CommandSubcommands(ALL_FET_ON). 

    Thank you, 

    Best regards,

    Khanh.