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.

BQ76952: No balancing is happening.

Part Number: BQ76952

Tool/software:

Wer developing a Board for 8s batterie balancing and charging.
We have the charging part working, but the balancing does not work in either autonomous or host-controlled mode.

All we want from this IC Is balancing, non of the protection features are of importance.


The chip doesn't start balancing by itself, and even if manual balancing is attempted with 0x0083 subcommand,
the values stay in the register for a maximum of 1s and then get dropped to 0.

After power on, we start by entering config update, double checking config update bit in 0x12,
then 
Setting 0x9335 to 0b00001111 to enable balancing while not charging, enabling balancing while charging and disabling sleep while balancing.
Setting 0x9304 to 0x00FF cause were intending to use this in 8s configureation.
Sending 0x009A subcommand to disable sleep.

Exiting config update mode and rereading 0x12.
Then we print out all the cell voltages to make sure everything is working as expected, and enter a loop with goal to try balancing.

In this loop were reading 0x0083 and if it returns 0, we write a 0b00000100, With hopes to start balancing 3rd cell.
This bit stays high for about a second, and then gets zeroed out. this continues indefinitely.

Heres a log.

23:32:46.024 -> Starting
23:32:46.024 -> Battery Status 0x12: 1000000110000100
23:32:46.024 -> Entering config update
23:32:46.024 -> Battery Status 0x12: 110000101
23:32:46.024 -> Balancing Configuration 0x9335: 1111
23:32:46.024 -> Enabled Protections A 0x9261: 88
23:32:46.051 -> Enabled Protections B 0x9262: 0
23:32:46.051 -> Enabled Protections C 0x9263: 0
23:32:46.051 -> Exiting config update
23:32:46.051 -> Battery Status 0x12: 110000000
23:32:46.051 -> Cell voltages:
23:32:46.051 -> 0 : 4095mv
23:32:46.051 -> 1 : 4061mv
23:32:46.051 -> 2 : 4018mv
23:32:46.051 -> 3 : 3891mv
23:32:46.051 -> 4 : 3715mv
23:32:46.051 -> 5 : 3737mv
23:32:46.051 -> 6 : 3719mv
23:32:46.051 -> 7 : 3705mv
23:32:46.051 -> 8 : 0mv
23:32:46.051 -> 9 : 0mv
23:32:46.051 -> 10 : 0mv
23:32:46.051 -> 11 : 0mv
23:32:46.051 -> 12 : 0mv
23:32:46.051 -> 13 : 0mv
23:32:46.051 -> 14 : 0mv
23:32:46.051 -> 15 : 0mv
23:32:46.051 -> Connected cells 0x9304: 11111111
23:32:46.051 ->
23:32:46.092 -> cells currently balanced 0x0083: 0
23:32:46.092 -> Balancing Configuration: 0x9335: 1111
23:32:46.092 -> Battery Status 0x12: 110000100
23:32:46.092 -> latched alerts 0x62: 0
23:32:46.092 -> enabled alerts 0x66: 1111100000000000
23:32:46.092 -> PF Status D 0x11: 0
23:32:46.092 -> Safety Alert A() 0x02: 0
23:32:46.092 -> Safety Status A() 0x03: 0
23:32:46.092 -> Safety Alert B() 0x04: 0
23:32:46.092 -> Safety Status B() 0x05: 0
23:32:46.092 -> Safety Alert C() 0x06: 0
23:32:46.092 -> Safety Status C() 0x07: 0
23:32:46.092 ->
23:32:46.308 -> cells currently balanced 0x0083: 100
23:32:46.308 -> Balancing Configuration: 0x9335: 1111
23:32:46.308 -> Battery Status 0x12: 110000100
23:32:46.308 -> latched alerts 0x62: 0
23:32:46.308 -> enabled alerts 0x66: 1111100000000000
23:32:46.308 -> PF Status D 0x11: 0
23:32:46.308 -> Safety Alert A() 0x02: 0
23:32:46.308 -> Safety Status A() 0x03: 0
23:32:46.308 -> Safety Alert B() 0x04: 0
23:32:46.308 -> Safety Status B() 0x05: 0
23:32:46.308 -> Safety Alert C() 0x06: 0
23:32:46.308 -> Safety Status C() 0x07: 0
23:32:46.308 ->
23:32:46.493 -> cells currently balanced 0x0083: 0
23:32:46.493 -> Balancing Configuration: 0x9335: 1111
23:32:46.527 -> Battery Status 0x12: 110000100
23:32:46.527 -> latched alerts 0x62: 0
23:32:46.527 -> enabled alerts 0x66: 1111100000000000
23:32:46.527 -> PF Status D 0x11: 0
23:32:46.527 -> Safety Alert A() 0x02: 0
23:32:46.527 -> Safety Status A() 0x03: 0
23:32:46.527 -> Safety Alert B() 0x04: 0
23:32:46.527 -> Safety Status B() 0x05: 0
23:32:46.527 -> Safety Alert C() 0x06: 0
23:32:46.527 -> Safety Status C() 0x07: 0
23:32:46.527 ->
23:32:46.747 -> cells currently balanced 0x0083: 100
23:32:46.747 -> Balancing Configuration: 0x9335: 1111
23:32:46.747 -> Battery Status 0x12: 110000100
23:32:46.747 -> latched alerts 0x62: 0
23:32:46.747 -> enabled alerts 0x66: 1111100000000000
23:32:46.747 -> PF Status D 0x11: 0
23:32:46.747 -> Safety Alert A() 0x02: 0
23:32:46.747 -> Safety Status A() 0x03: 0
23:32:46.747 -> Safety Alert B() 0x04: 0
23:32:46.747 -> Safety Status B() 0x05: 0
23:32:46.747 -> Safety Alert C() 0x06: 0
23:32:46.747 -> Safety Status C() 0x07: 0
23:32:46.747 ->
23:32:46.953 -> cells currently balanced 0x0083: 100
23:32:46.953 -> Balancing Configuration: 0x9335: 1111
23:32:46.953 -> Battery Status 0x12: 110000100
23:32:46.953 -> latched alerts 0x62: 0
23:32:46.953 -> enabled alerts 0x66: 1111100000000000
23:32:46.953 -> PF Status D 0x11: 0
23:32:46.953 -> Safety Alert A() 0x02: 0
23:32:46.953 -> Safety Status A() 0x03: 0
23:32:46.953 -> Safety Alert B() 0x04: 0
23:32:46.953 -> Safety Status B() 0x05: 0
23:32:46.953 -> Safety Alert C() 0x06: 0
23:32:46.953 -> Safety Status C() 0x07: 0
23:32:46.953 ->
23:32:47.156 -> cells currently balanced 0x0083: 100
23:32:47.156 -> Balancing Configuration: 0x9335: 1111
23:32:47.156 -> Battery Status 0x12: 110000100
23:32:47.156 -> latched alerts 0x62: 0
23:32:47.156 -> enabled alerts 0x66: 1111100000000000
23:32:47.156 -> PF Status D 0x11: 0
23:32:47.156 -> Safety Alert A() 0x02: 0
23:32:47.156 -> Safety Status A() 0x03: 0
23:32:47.156 -> Safety Alert B() 0x04: 0
23:32:47.156 -> Safety Status B() 0x05: 0
23:32:47.156 -> Safety Alert C() 0x06: 0
23:32:47.156 -> Safety Status C() 0x07: 0
23:32:47.156 ->
3:32:47.361 -> cells currently balanced 0x0083: 0
23:32:47.361 -> Balancing Configuration: 0x9335: 1111
23:32:47.407 -> Battery Status 0x12: 110000100
23:32:47.407 -> latched alerts 0x62: 0
23:32:47.407 -> enabled alerts 0x66: 1111100000000000
23:32:47.407 -> PF Status D 0x11: 0
23:32:47.407 -> Safety Alert A() 0x02: 0
23:32:47.407 -> Safety Status A() 0x03: 0
23:32:47.407 -> Safety Alert B() 0x04: 0
23:32:47.407 -> Safety Status B() 0x05: 0
23:32:47.407 -> Safety Alert C() 0x06: 0
23:32:47.407 -> Safety Status C() 0x07: 0
This is our Schematic

As you can see there's no alerts nor status bits.
All we need is balancing, I have a feeling that some register is not set up somewhere, can you please assist.
These bords have to go in production in about a week, would like to use this ic and not have to switch.

Regards.



  • Hello,

    We are in US Holidays, expect answers by tomorrow.

    Best Regards,

    Luis Hernandez Salomon

  • Thank you, kindly appreciated.

  • Hello Oskars,

    I do notice you actually have VC16 shorted to VC15.

    This device requires a real cell to be attached between VC16 and VC15. VC16 is used to power the cell balancing circuitry, so this may be affecting your balancing. Otherwise balancing should occur just fine (As long as there are no fault conditions preventing it from balancing).

    How cells are connected is explained in the following FAQ:

    To give a quick example of how to manually balance Cell 1:

    • W: 10 3E 83 00 01 00   - Set Cell 1 to be balanced
    • W: 10 60 7B 06             - Send checksum and length so cell balancing takes effect
    • W: 10 3E 83 00             - Write 0x83 to 3E and 0x00 to 3F (Writing 0x0083 to 3E/3F so that we can read from it)
    • R: 10 40 2                     - Read from 0x40 transfer buffer to confirm which cells is being balanced. (Should return 0x0001)

    Best Regards,

    Luis Hernandez Salomon

  • Thanks a lot Luis,

    Will rewire and try again.

  • Hello Oskars,

    Do let me know if that fixes things! If not we can further discuss.

    Best Regards,

    Luis Hernandez Salomon

  • So we rewired the connections to have cell 8 be connected to vc15 and vc16.

    We have the same behavior as before...

    I write 0x0001 to 0x0083, then I keep reading it back until it drops to 0 around a second latter.
    This is how it looks like from our mcu point of view.

    Also for some reason cell 16 is shown as 1.3v and cell 7 is 5.9v. 
    The average of cell 7 and 8 roughly corresponds to those two cells put together.


    16:41:14.834 -> Starting
    16:41:14.834 -> Battery Status 0x12: 1000100110000100
    16:41:14.834 -> Entering config update
    16:41:14.834 -> Battery Status 0x12: 100110000101
    16:41:14.834 -> Balancing Configuration 0x9335: 1111
    16:41:14.865 -> Enabled Protections A 0x9261: 88
    16:41:14.865 -> Enabled Protections B 0x9262: 0
    16:41:14.865 -> Enabled Protections C 0x9263: 0
    16:41:14.865 -> Exiting config update
    16:41:14.865 -> Battery Status 0x12: 100110000000
    16:41:14.865 -> Cell voltages:
    16:41:14.865 -> 0 : 4095mv
    16:41:14.865 -> 1 : 4055mv
    16:41:14.865 -> 2 : 4012mv
    16:41:14.865 -> 3 : 3891mv
    16:41:14.865 -> 4 : 3717mv
    16:41:14.865 -> 5 : 3738mv
    16:41:14.865 -> 6 : 5973mv
    16:41:14.865 -> 7 : 0mv
    16:41:14.865 -> 8 : 0mv
    16:41:14.865 -> 9 : 0mv
    16:41:14.865 -> 10 : 0mv
    16:41:14.865 -> 11 : 0mv
    16:41:14.865 -> 12 : 0mv
    16:41:14.865 -> 13 : 0mv
    16:41:14.865 -> 14 : 0mv
    16:41:14.865 -> 15 : 1341mv
    16:41:14.865 -> Connected cells 0x9304: 1000000001111111
    16:41:14.904 -> cells currently balanced 0x0083: 0
    16:41:15.123 -> cells currently balanced 0x0083: 0
    16:41:15.308 -> cells currently balanced 0x0083: 0
    16:41:15.513 -> cells currently balanced 0x0083: 1
    16:41:15.719 -> cells currently balanced 0x0083: 1
    16:41:15.900 -> cells currently balanced 0x0083: 1
    16:41:16.107 -> cells currently balanced 0x0083: 0
    16:41:16.338 -> cells currently balanced 0x0083: 0
    16:41:16.560 -> cells currently balanced 0x0083: 1
    16:41:16.722 -> cells currently balanced 0x0083: 1
    16:41:16.948 -> cells currently balanced 0x0083: 1
    16:41:17.166 -> cells currently balanced 0x0083: 0
    16:41:17.341 -> cells currently balanced 0x0083: 1

    I also probed the i2c communication during this write and read of 0x0083 with an oscilloscope.

    This is the result of the communication...

    I2C Time Address R/W Data
    1 -615.201ms 0x10 W 0x3E 83
    2 -614.535ms 0x10 W 0x3F 00
    3 -614.063ms 0x10 W 0x3E
    4 -613.795ms 0x11 R 0xFF
    5 -613.494ms 0x10 W 0x3E
    6 -613.226ms 0x11 R 0x83
    7 -612.927ms 0x10 W 0x3F
    8 -612.659ms 0x11 R 0x00
    9 -612.361ms 0x10 W 0x40
    10 -612.093ms 0x11 R 0x01 00
    11 -411.204ms 0x10 W 0x3E 83
    12 -410.544ms 0x10 W 0x3F 00
    13 -410.072ms 0x10 W 0x3E
    14 -409.804ms 0x11 R 0xFF
    15 -409.503ms 0x10 W 0x3E
    16 -409.235ms 0x11 R 0x83
    17 -408.936ms 0x10 W 0x3F
    18 -408.669ms 0x11 R 0x00
    19 -408.370ms 0x10 W 0x40
    20 -408.102ms 0x11 R 0x00 00
    21 -407.634ms 0x10 W 0x3E 83
    22 -407.093ms 0x10 W 0x3F 00
    23 -406.621ms 0x10 W 0x40 01
    24 -406.151ms 0x10 W 0x41 00
    25 -405.620ms 0x10 W 0x60 7B
    26 -405.151ms 0x10 W 0x61 06
    27 -204.208ms 0x10 W 0x3E 83
    28 -203.571ms 0x10 W 0x3F 00
    29 -203.100ms 0x10 W 0x3E
    30 -202.831ms 0x11 R 0xFF
    31 -202.530ms 0x10 W 0x3E
    32 -202.263ms 0x11 R 0x83
    33 -201.963ms 0x10 W 0x3F
    34 -201.695ms 0x11 R 0x00
    35 -201.397ms 0x10 W 0x40
    36 -201.129ms 0x11 R 0x01 00
    37 -212.200us 0x10 W 0x3E 83
    38 437.200us 0x10 W 0x3F 00
    39 908.900us 0x10 W 0x3E
    40 1.17710ms 0x11 R 0xFF
    41 1.47810ms 0x10 W 0x3E
    42 1.74600ms 0x11 R 0x83
    43 2.04540ms 0x10 W 0x3F
    44 2.31450ms 0x11 R 0x00
    45 2.61290ms 0x10 W 0x40
    46 2.88110ms 0x11 R 0x01 00
    47 203.784ms 0x10 W 0x3E 83
    48 204.446ms 0x10 W 0x3F 00
    49 204.918ms 0x10 W 0x3E
    50 205.186ms 0x11 R 0xFF
    51 205.487ms 0x10 W 0x3E
    52 205.755ms 0x11 R 0x83
    53 206.054ms 0x10 W 0x3F
    54 206.322ms 0x11 R 0x00
    55 206.621ms 0x10 W 0x40
    56 206.889ms 0x11 R 0x01 00
    57 407.780ms 0x10 W 0x3E 83
    58 408.405ms 0x10 W 0x3F 00
    59 408.876ms 0x10 W 0x3E
    60 409.145ms 0x11 R 0xFF
    61 409.446ms 0x10 W 0x3E
    62 409.713ms 0x11 R 0x83
    63 410.013ms 0x10 W 0x3F
    64 410.282ms 0x11 R 0x00
    65 410.580ms 0x10 W 0x40
    66 410.848ms 0x11 R 0x01 00
    67 611.776ms 0x10 W 0x3E 83
    68 612.437ms 0x10 W 0x3F 00
    69 612.910ms 0x10 W 0x3E
    70 613.178ms 0x11 R 0xFF
    71 613.480ms 0x10 W 0x3E
    72 613.747ms 0x11 R 0x83
    73 614.047ms 0x10 W 0x3F
    74 614.315ms 0x11 R 0x00
    75 614.614ms 0x10 W 0x40
    76 614.883ms 0x11 R 0x00 00
    77 615.351ms 0x10 W 0x3E 83
    78 615.888ms 0x10 W 0x3F 00
    79 616.361ms 0x10 W 0x40 01
    80 616.832ms 0x10 W 0x41 00
    81 617.367ms 0x10 W 0x60 7B
    82 617.838ms 0x10 W 0x61 06


    Any idea of why is this so ?


  • Hello,

    I am out of office until Wednesday. Responses will be delayed until then.

    Best Regards,

    Luis Hernandez Salomon

  • Okay, 
    Will wait.

  • Hello Oskars,

    You mentioned the following:

    "Also for some reason cell 16 is shown as 1.3v and cell 7 is 5.9v. 
    The average of cell 7 and 8 roughly corresponds to those two cells put together."

    Which is a very important detail here. As I mentioned earlier, when there's a fault, cell balancing will occur, in here it seems that the voltage is going pretty low, likely triggering a CUV condition. That would cause balancing to stop completely. The CUV check occurs every second during cell balancing, so that's likely why it stops roughly every second after cell balancing starts.

    The cell behavior sounds like a hardware set-up issue. When one cell goes low and the other proportionally increases, it is likely to a high resistance on the cell input, caused by a poor wire connection or an open-wire condition to the VCx pins. 

    I would double check all of the wirings here and make sure all is properly connected and where it should be. Ideally I would recommend to spin a new board with the correct connections, if possible.

    Best Regards,

    Luis Hernandez Salomon

  • Thank you for your input Luis, Highly appreciated.
    Will see what we can do.

  • Hello Oskars,

    Let me know if you find anything!

    Best Regards,

    Luis Hernandez Salomon