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.

BQ27220: Remaining Capacity (NAC) does not change

Part Number: BQ27220
Other Parts Discussed in Thread: BQSTUDIO

Hi TI team,

We have noticed there are times when the remaining capacity gets "stuck" or does not change although the average current clearly indicates current is leaving the battery. We have approximately 8000 devices in the field with over 2400 devices active over any given 24 hour period. We review the behavior of these devices daily (and have for the last 2.5 years) and know what to expect as far as battery drain based on usage. We have programmed the fuel gauge based on the GPC data submitted and in most cases found it accurately reflects the true capacity of the battery. Attached is a spreadsheet showing expected drain and 2 examples of a "stuck" NAC aka remaining capacity. 

Respectfully,

KeithNAC Drain Graph.xlsx

  • Hello Keith,

    Our expert for this part is out today but can reply tomorrow. In the meantime, can you elaborate on the failure rate? I see you are monitoring a large amount, but what percentage roughly are showing this issue? Also, why only read NAC? Do the other values change or are they frozen as well? For example RawColoumbCount may provide some useful info here.

    thanks,

    Alex M.

  • We typically only monitor the SOC, average current, voltage, battery status and NAC. You have to chase Mr./Mrs. electron to understand how the device is working. Short answer is no, the NAC/SOC are the only values that get "stuck". The failure rate is extremely low (< 0.5%) at best. I'll start looking at the RawColoumbCount but it may be some time before this happens again. It doesn't appear to be device specific and rarely happens. A reinitialization of the fuel gauge corrects the issue (new OCV measurement).

  • What's the gauge configuration? Is it possible to get the full configuration (=gg file as exported by bqStudio)? If not, please describe how you configure the gauge (all parameters that you program).

    There's quite a bit of info in your log file that isn't labeled. Do you log GaugingStatus() and OperatingStatus()?

    If BSTATUS in your log file is BatteryStatus() (with the correct endianness), then this indicates that for "Stuck NAC 9807", the gauge didn't detect a battery (BSTATUS = 0x8040, hence BATTPRES = 0).

    "Stuck NAC 8283" has BSTATUS = 0x804A, so BATTPRES = 1 for this case. However, both cases show that DSG is never set, hence the gauge will not enter discharge mode. What are the current threshold settings in your configuration?

  • I had to redact the other reported data due to the sensitive nature of our business. We only transmit the fuel gauges Vdc, Current average, NAC & gauging status because of the amount of data.

    BSTATUS is actually the gauging status - so in both cases the DSG bit is asserted

    For device 8238

    High byte -> 1000 0000b (0x80) VDQ = 1 EDV2 = 0 EDV1 = 0 RSVD = 0 RSVD = 0 FCCX = 0 (1 Hz) RSVD = 0 RSVD = 0. 

    Low byte -> 0100 1010b (0x4A) indicating CF = 0 DSG = 1 EDV0 = 0 RSVD = 0 TC = 1 TD = 0 FC = 1 FD = 0. 

    For device 9807

    High byte -> 1000 0000b (0x80) VDQ = 1 EDV2 = 0 EDV1 = 0 RSVD = 0 RSVD = 0 FCCX = 0 (1 Hz) RSVD = 0 RSVD = 0. 

    Low byte -> 0100 1000b (0x4A) indicating CF = 0 DSG = 1 EDV0 = 0 RSVD = 0 TC = 1 TD = 0 FC = 0 FD = 0. 

    Although we submitted data for the CEDV calculator, we use fixed EDV points because the customer would not be happy to see the device with a SOC of 3% but it stopped reporting to the website because Vbatt dropped below transmitting voltage (3.2 Vdc). I've included the calculated CEDV points.

    Below is the configuration information

    Keith

    BattGaugeReg_BoardOffset_Value = 0x00u, /* Board Offset Memory Value = 0 - one byte */
    BattGaugeReg_CcOffset_Value = 0x0000u, /* Coulomb Count Memory Value = 0 */
    BattGaugeReg_CcCalTemp_Value = 0x2982u, /* Coulomb Count Cal Temp Memory Value = 0 */
    BattGaugeReg_CcGain_Value = 0x0000u, /* Coulomb Count Gain Memory Value = 0 - 4 bytes */
    BattGaugeReg_CcDelta_Value = 0x0000u, /* Coulomb Count Delta Memory Value = 0 4 bytes */
    BattGaugeReg_IntModelCoef3_Value = -0xCBD4u, /* Temperature Internal Model Coefficient 3 Memory Value = -13356 */
    BattGaugeReg_IntModelCoef4_Value = 0x1A05u, /* Temperature Internal Model Coefficient 4 Memory Value = 6661 */

    BattGaugeReg_CycleCountPercent_Value = 0x5Au, /* Cycle Count Percent Memory Value = 90% - one byte */
    BattGaugeReg_ChargingCurrent_Value = 0x0400u, /* Charging Current Initial Value = 1024 mA */
    BattGaugeReg_ChargingVoltage_Value = 0x0FA0u, /* Charging Voltage Initial Value = 4000 mV */
    BattGaugeReg_SmoothingStartVoltage_Value = 0x0D07u, /* Smoothing Start Voltage Initial Value = 3335 mV */
    BattGaugeReg_TaperCurrent_Value = 0x012Cu, /* Taper Current Value = 300 mA */
    BattGaugeReg_SysDownVoltThreshold_Value = 0x0BB8u, /* System down set voltage threshold Value = 3000 mV */
    BattGaugeReg_SocDelta_Value = 0x02u, /* Soc Delta Value = 2% increments INT - one byte */
    BattGaugeReg_OverTempCharge_Value = 0x01F4u, /* OverTemp Charge Value = 500 (units in 0.1C) */
    BattGaugeReg_OverTempDisharge_Value = 0x0258u, /* OverTemp Discharge Value = 600 (units in 0.1C) */

    BattGaugeReg_OPERATION_ConfigA_Value = 0x2434u, /* Operation Config A Initial Value*/
    BattGaugeReg_OPERATION_ConfigB_Value = 0x1004u, /* Operation Config B Initial Value */
    BattGaugeReg_BTP_IO_Config_Value = 0x00u, /* I/O Config Initial Battery Trip Points Interrupt I/O Config Memory Value - one byte */
    BattGaugeReg_SOC_FLAG_ConfigA_Value = 0x0C8Cu, /* SOC_FLAG_ConfigA Value */
    BattGaugeReg_SOC_FLAG_ConfigB_Value = 0x8Cu, /* SOC_FLAG_ConfigB Value - one byte */
    BattGaugeReg_GAUGING_Config_Value = 0x1123u, /* GAUGING_Config Initial Value */
    BattGaugeReg_SMOOTHING_Config_Value = 0x0Du, /* SMOOTHING_Config Initial Value - one byte */

    BattGaugeReg_CEDV2_Value = 0x0CE4u, /* Fixed EDV2 Value = 3300 mVdc aka 7%*/
    BattGaugeReg_CEDV1_Value = 0x0CB2u, /* Fixed EDV1 Value = 3250 mVdc aka 3% */
    BattGaugeReg_CEDV0_Value = 0x0C80u, /* Fixed EDV0 Value = 3200 mVdc aka 0% */
    BattGaugeReg_CEDVFCC_Value = 0x2580u, /* Full Charge Capacity Value*/
    BattGaugeReg_CEDVDC_Value = 0x2580, /* Design Capacity Value */

    /* Values from TI CEDV Calculator */
    BattGaugeReg_CEDVEMF_Value = 0x0D73u, /* EMF Value */
    BattGaugeReg_CEDVC0_Value = 0x00E2u, /* C0 Value */
    BattGaugeReg_CEDVR0_Value = 0x0D06u, /* R0 Value */
    BattGaugeReg_CEDVT0_Value = 0x29BBu, /* T0 Value */
    BattGaugeReg_CEDVR1_Value = 0x0016u, /* R1 Value */
    BattGaugeReg_CEDVTC_Value = 0x09u, /* TC Value - one byte */
    BattGaugeReg_CEDVC1_Value = 0x00u, /* C1 Value - one byte */

    BattGaugeReg_SleepCurrent_Value = 0x0005u, /* Sleep Current = -5 mA */

  • Thanks. So you leave the Dsg Current Threshold default?

    I can't say for sure why this happens with the available log (the log interval is too long to know what the gauge really did) but it looks like this is either related to state changes (that's why I am asking about the Dsg Current Threshold) and/or the smoothing engine. Please set BattGaugeReg_SMOOTHING_Config_Value = 0x00u to disable smoothing. If this fixes it then we can look at the configuration for smoothing.

  • Hi Dominik,

    Unfortunately there are no devices having this issue currently. As I mentioned earlier, it is very rare for this to happen. Yes, we use the default Dsg Current Threshold and yes we have smoothing on when EDV2 point is reached (~7%). We have a few dev devices at the office but the ones in the field I am unable to change the configuration remotely. I will keep an eye out for one if it should happen again and I will disable the smoothing.

    Thank you,

    Keith

  • Keith,

    If possible, please set the state change thresholds (DSG, CHG and Quit) so that the gauge follows the state of the cell. From the limited info, I suspect that incorrect states cause the gauge to calculate the smoothing adjustments so that the gauging results stay constant.