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: Setting FCC and DC Without Full Charge Cycle

Part Number: BQ27220
Other Parts Discussed in Thread: BQSTUDIO, EV2400

Tool/software:

Hi everyone,

We want to set the FCC and DC values of the BQ27220 fuel gauge in our ESP32 firmware over I²C. We’ve tried adjusting these values manually, but often saw strange battery percentage behavior, like large jumps or inaccurate readings.

Our goal is to flash the correct FCC/DC values during initialization, without requiring a full charging cycle to "learn" the battery. Has anyone successfully implemented this? What’s the reliable way to push correct FCC and DC values to the BQ27220 and get stable percentage readings from the start? If it is not possible without the full learning charge cycle, what would be the best practice to set the updated FCC and DC values?

Thanks!

  • Hello Derek, 

    Design Capacity and Full Charge Capacity can be written to the following registers:

    Regards, 

    Jonny. 

  • Hi Jonny, thanks a lot for your reply!

    We tried exactly what you suggested — reading the standard registers directly — but are still seeing the same issue: the SOC (% value) drops during discharge.

    We now recorded two full discharge cycles using the BQ27220:

    1. One immediately after a full charge.

    2. One after a full charge and disconnecting/reconnecting the battery (to fully reset the gauge).

    The second attempt gave better results, but we still saw a drop in SOC at around 3.6 V and -750 mA in both cases.
    We’re using a 606090 4,000 mAh LiPo battery.

    We also noticed something else:
    If the SOC suddenly drops from e.g. 32% to 7%, and we then recharge from that 7% level, the SOC increases gradually but never reaches 100%, even when the battery is clearly full (charging stops, no more current draw). Only after physically disconnecting and reconnecting the battery does the gauge show the correct SOC again.

    Do you have any suggestions on how to avoid this jump or improve accuracy?

    Thanks again for your help!

    First discharge

    Second discharge (after gauge reset)

  • Hello, 

    The Jump to 7% makes sense, as the gauge is likely reaching the EDV2 voltage and thus causing the SOC to jump to the 7% threshold for EDV2. Please refer to this FAQ

    Regards, 

    Jonny. 

  • Hello again,
    First of all, thank you for sharing the FAQ, it already helped a lot. Unfortunately we don't have access to an EV2400, so we cannot interact with our gauge with software like bqStudio. Right now we are experimenting with different settings and configurations, to see how they affect the SOC readings that we get. We were wondering about the gauging configuration for profile 1, found at 0x929B. The value that we read out is 0x102A, as the TRM also suggests. Could you maybe clarify what this value means? I know in the TRM in the section "4.9.14 CEDV Gauging Configuration" you can see how it is structured. Can you give more insights which of those bytes from 0x102A corresponds to the high byte and which to the low byte?

    This is how i interpret this value:


    But this would mean that EDV_CMP is already activated by default. Is that correct? Since the FAQ mentions to first start without EDV compensation i tried to write a 0 to the EDV_CMP bit. After trying to overwrite this byte with EDV_CMP set to 0, i read out the value again, only to see it hasn't changed. I made sure we correctly unsealed the device, enter full access and entering cfg update mode before writing.

    My question is, what would be the best practice to clear this bit? Another question is how mandatory an EV2400 board is, when it comes to configuring this gauge.

    Regards,
    Derek

  • Hello Derek, 

    The TRM gives the register bit map (so does BQStudio, you do not need a gauge attached to BQStudio to see the bit mapping). You can convert the hex value to binary to determine which bits are 1 and which are 0 using the register bit mapping. 

    Additionally, please follow the examples given in the BQ27220 documentation to ensure you are correctly writing to the gauge. 

    Regards, 

    Jonny.