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.

BQ34Z100-R2: Learning status bit not updating to 5 after following learning cycle steps for an LFP pack

Part Number: BQ34Z100-R2
Other Parts Discussed in Thread: BQ34Z100, BQSTUDIO, EV2400

Good day team!

I suspect that may have an issue with my learning cycle somewhere as I cannot see the Learning Status bit turn 5 after countless tries and time spent on the charging-resting-discharching-resting process. I attached my configuration and one of the log files. Could you please take a look and advise?

There are multiple sources with different sequences of events and instructions so it got confusing in the end. They are listed below. I tried following all of them but none of them helped me reach Learning Status 5.

Sources:

  1. SLUA903 (Achieving The Successful Learning Cycle)
  2. SLUA925 (How to Complete a Successful Learning Cycle for the bq34z100)
  3. Multiple E2E posts and comments

Battery and load specs:

  1. Pack of 8S2P LiFEPO4 battery. Pack specifications are found in this link
  2. The nominal voltage is 25.6 V with a capacity of 6700 mAh
  3. Constant current load is used with a standard discharge current of C/5 = 1.34 A
  4. The single-cell battery specs (IFR26650G2W) are found in this link

Software and FW:

  1. BQStudio v 1.3.101
  2. EV2400 v 0.32
  3. BQ34Z100 FW v 0100_2_02

Configuration:

  1. Taper Current = 100 mA
  2. Started with FC = -1
  3. Design voltage = 3200 mV (based on a single cell)
  4. Design Capacity = 6700 mAh (whole pack)
  5. Design Energy = 2144 cWh = [3.2V (single cell nominal) x 6.7 Ah (pack 2P configuration)] * 100 (to convert from Wh to cWh)
  6. Cell Charge Voltage T1 - T2 = 3650 mV (max V for cell)  /  T2 - T3 = 3650 mV  /  T3 - T4 = 3550mV     |      JEITA T1 = -20  /  T2 = 0  /  T3 = 45  /  T4 = 55
  7. Number of series cells = 8 (pack series configuration)
  8. Flash Update OK Cell Volt = 2500 mV (Per cell. To make sure I can make changes anytime even when fully discharged)
  9. Cell Terminate Voltage = 2750 mV (Per cell = 22 V / 8)
  10. Dsg Current Threshold = 60 mA
  11. Chg Current Threshold = 75 mA
  12. Quit Current = 40
  13. Qmax Cell 0 = manually set initially to 6700 mAh (per pack)
  14. Cell V at Chg Term = 3650 mV (max single cell voltage to result in 29.2 V for the entire pack)

Steps done so far:

  1. Discharge the battery down to 22 V (2.75 V per cell - a little above the official 2.0 V suggested in this single-cell spec sheet linked above) and set the Learning Status bit to 0
  2. Leave it to rest for a bit till the REST bit is activated (high)
  3. Issue a 0x21 command (IT_Enable button) and then a 0x41 command (RESET button). At this point, QEN and RUP_DIS activate (high) and the REST pin deactivates (low). Learning Status becomes 4 while QEN is high.
  4. Charge the battery through an MPPT charger, which provides a variable current (around C/5 or a bit more) till the battery is full (CF bit is high). It auto-terminates upon reaching 29.2 V or a little higher
  5. Leave it to rest for a while till the REST bit activates again (which I learned is a sign that it gets a valid QMAX reading). At this point, RUP_DIS deactivates again, which in my understanding allows impedance table updates. BUT, the Learned Status bit is stuck at 4. It never updates to 5. Does that mean it didn't capture a proper QMAX yet?
  6. I discharge using a constant load of 1.34 A (C/5) down to 22 V again and terminate the discharge process once VBATT goes just below 22 V through an automated Python script
  7. The system rests again for a while till the REST bit is activated once again, and no Learned Status changes again. Still at 4.

I have also done the steps below but to no avail:

  1. Start with a full battery and let it rest till REST bit is high and the impedance tables are ready to update
  2. Without setting any bit or issuing any command, just discharge the battery at C/5 till termination voltage and rest till REST bit is high again
  3. Then issue a 0x21 (IT_ENABLE) and 0x41 (RESET) commands to start the charging process till 29.2 V or a bit higher (FC = high) and wait till REST = high
  4. I was willing to do another discharge afterwords to move status 5 to 6, but Learn Status is still stuck at 4 anyway!!

Questions:

  1. Could you please verify whether my configuration is correct to begin with?
  2. Could you look at the learning cycle log and inform me of any issues to address the Learning Status situation?
  3. I learned from one of the support team's comments on someone's issue that impedance tables will not update until a QMAX reading is taken after a full charge, does that mean that the second list of steps above is incorrect since it starts with a full battery and first step is discharging?
  4. Please suggest the correct steps if the above are incorrect

Thank you!

Data_Memory_Settings_2024-01-30.gg.csv      LearningCycle_2024-01-26.log

  • Observations:

    I am doing another cycle to send some more logs (in case it would be necessary) and started with a full battery. I am currently discharging as I type this.

    1. I noticed that VOK bit does not go high when discharging occurs. But it does go high during charging. Would that affect anything?
    2. So far after trying everything, Max Error never went below 100. QEN is always enabled and the gauge is always unsealed.
    3. Average P Last Run remained at 0 all the time during my cycles.
    4. The gauge is calibrated. Voltage and currents are being monitored through external equipment and the gauge returned V and I readings seem to be on point
  • Hello Ali,

    Thank you for sending gg file and log file. Please give me some time to look over everything and debug this problem.

    Sincerely,
    Nick Richards

  • Thank you. Let me know if there is insufficient information in the log and I will add the columns you need and redo a cycle to help you get more insight.

  • Good Morning Ali,

    I have looked over everything and have some questions and concerns.

    Did you program a ChemID onto the gauge? If so what ChemID did you program.

    For your configuration in data memory, change Design Voltage to 25.6V (design voltage is based on the entire voltage of the pack not a single cell). Also change design energy to 17152 cWh (based on design voltage of 25.6).

    Now, for my hypothesis for why the learning cycle is not updating to 5 is because before the first charge, you are not discharging the battery low enough. According to the single cell datasheet, The terminate voltage is 2V. Which means that the terminate voltage of the pack is 16V (2V * 8 cells in series). For learn status to change to 5, there's needs to be a 90% change in DOD of the battery's rated capacity.

    To learn more about this, read this FAQ post: e2e.ti.com/.../faq-why-is-the-update-status-not-updating-from-4-to-5

    Therefore, change the Cell Terminate Voltage terminate voltage to 16V in data memory, and retry the learning cycle, but try to discharge the battery to 16V.

    Also, I looked at the log file you sent and there wasn't a column for current. Please make sure current is reported in the log file as this is important for debugging purposes.

    Let me know the results after running a new test.

    Sincerely,
    Nick Richards

  • Thank you for your response!

    1. ChemID is 4013 (from chem update 1074 that you have on TI website) exactly that of the battery model shared in the link (for single cell - there is no ChemID for the whole pack): IFR26650G2W in this link: https://westerberg.pl/wp-content/uploads/2019/12/IFR26650G2W3350.pdf.
    2. I tried changing the design voltage to 25600 mV but it throws an error (Value is beyond the maximum defined value for parameter)
    3. I set the design energy back to 17152 cWh successfully
    4. I set the Cell Terminate Voltage to 16000 mV and it throws the same error again (Value is beyond the maximum defined value for parameter)

    I will happily try another cycle with the new settings after I hear back regarding the above failures I am getting.

  • Hello Ali,

    Sorry for the confusion on the settings. Design Voltage and Cell Terminate Voltage should be set for a single cell.
    Therefore, Design Voltage should be set to 3.2V and Cell Terminate Voltage should be set to 2.0 V

    Sincerely,
    Nick Richards

  • Thank you Nick! 

    Just to confirm, should the design energy still be calculated based on one cell in this case?

    I learned that BQ34z100 parameters are all single-cell based hence asking. My references are in the links below. They calculated design energy using cell nominal voltage x design capacity (total mAh for the parallel cell configuration). So in my case I calculated 3.2 V x 6.7 Ah = 21.44 Wh = 2144 cWh.

    1. https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/519529/how-to-calculate-design-energy-for-bq34z100-g1
    2. https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/557922/bq34z100g1-optimization-cycles-with-scaling
    3. https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/351364/bq34z100-soc-and-remaining-capacity-always-at-0

    Can you check that and let me know, please?

    Thank you in advance!

  • Hello Ali,

    Yes, you are correct, you will also need to change Design Energy back to 2144 cWh. I forgot to mention that in my previous response.

    Sincerely,
    Nick Richards

  • Thank you for the quick confirmation!

    So now I have a freshly charged battery. Can you list down the correct learning cycle steps to lead me to the successful status update of 5 please? I am frustrated as I spent a ton of time trying that out and it takes me more than a day for a cycle to finish and my deadlines are getting pretty tight. Just want to be sure to start on the right foot.

    Please include the registers and/or data memory values that I need to watch closely as I go through the charging/resting/discharging/resting steps to know that all my mini steps are right. I will follow them closely and see what happens.

    Thank you once again!

  • Hello Ali,

    Ok, so make sure to send the gauge (IT) enable. Then send the reset command. When you send the reset command R_DIS flag should be set to 1 (RED).
    1. Discharge the battery to empty, you can discharge at a rate of C/2 to make this set faster. (So a discharge current of 3.35A) Make sure the battery discharges to 16V.
    2. Rest for 5 hours. The VOK and R_DIS bits should be set to 0 at the end of the 5 hours.
    3a. Charge the battery using a CC/CV charge method. So for CC charge at C/2 (3.35A) and charge until the voltage reach 29.2V. Then do the CV charge at 29.2V until the current reaches below 50mA (This is important for LFP batteries that the taper current is very low). The VOK bit should be set to 1 when charge states.
    3b. Make sure the FC bit is set to 1. If the FC bit is not set then stop the process and send me the new log file and gg file.
    4. Rest for 5 hours. The VOK bit should clear and be set to 0. If the bit does not clear then the battery might need to rest for longer. However, 5 hours should be long enough.
    5. Discharge the battery at a rate of C/5 (1.52A) until you reach 16V.
    6. Rest for 5 hours.

    A common problem I see when people uses the type of big battery pack that you have is that there is integrated protections that will not allow the battery to discharge below a certain voltage. It is imperative that the battery discharges down to 16V for the learning cycle to work. The only solution to that is to find a way to bypass the protection within the battery pack. However, hopefully you won't have to go to that step.

    Sincerely,
    Nick Richards

  • I forgot to mention that the only issue with discharging the battery to that level is that the pack will completely disable the output. It will literally fall to close to zero and won't wake up again till I give it a little charge for some seconds to lift it back up. I tried optimizing this point till I found that 22V is the most optimal. Even 21V can bring it to that breakdown point. I believe it is the protection circuitry or something in it that is doing this.

    Conclusively, I cannot discharge to 16V. What do you suggest to do instead and what settings/registers/data memory values to change to ensure successful learning in this case?

  • Hello Ali,

    Unfortunately, there is no settings on the gauge that will ensure a completely successful learning cycle if you can not discharge at least 90% of the rated capacity of the battery. This is how the gauge is programed and its how our gauges are able to perform accurate gauging. The only solution would be to find a way to bypass the protections within the battery pack which means that you will have to forcefully open the pack.

    Sincerely,
    Nick Richards

  • Thank you!

    Then would it make sense that I set the Cell Terminate Voltage to something higher like 2750 mV (22V overall) so when I stop the discharging process below 22 V the system would sense that it went below the termination voltage set?

    Also, if my next cycle fails again due to DOD0 difference between two resting periods being less than 90%, would it be a good idea to maybe reduce the overall capacity settings instead of trying to override the battery's protection? I want to make sure we're hitting that capacity upon charging and discharging and we can give up some of this capacity as it is more than what the system needs anyway.

    I will update you on the results of the next cycle in the meantime.

  • Hello Ali,

    Reducing the overall capacity setting will not fix the issue, as well as other data memory changes. The gauge uses the OCV table that is programed onto the gauge when you select the ChemID for your battery. This OCV table is what is used to determine the 90% change in the rated capacity. These values can not be changed because they are a close match to the characteristics of your battery. The OCV table correlates a DOD point and Open Circuit Voltage(OCV). For example, an open circuit voltage of 3.2V might correlate to 25% DOD.

    Sincerely,
    Nick Richards

  • Thank you Nick!

    I performed the learning cycle according to the steps you mentioned and could not get to Learned Status = 5 until I finished the discharging stage, strange enough! I attached the log and data memory files here for your reference. Below I explain what happened including all register bit statuses. My issue now is that I cannot reach Learned Status = 6.

    1. Started with a full battery. Sent a reset command. RUP_DIS turned ON. Started discharging. DSG flag turned ON during discharge. Finished discharging. FIRSTDOD turned ON. BATLOW turned ON.
    2. After waiting for a few hours, RUP_DIS turned OFF, FIRSTDOD turned OFF, and REST turned ON
    3. Charged the battery to ~31V and auto terminated when charging current was < 0.005 A. VOK turned ON. FC turned ON after charging finished. FIRSTDOD turned ON again. BATLOW turned OFF. CHG turned OFF. SOC1 turned OFF. SOCF turned OFF. REST is OFF.
    4. Waited for a few hours and the following happened: VOK turned OFF. FC turned OFF. CHG turned ON. SOCF turned ON. SOC1 turned ON. FIRSTDOD turned OFF. REST turned ON.
    5. As far as the status bits, whatever you mentioned is exactly what happened. However, Learning Status is still 4 at this point!
    6. I still went ahead and discharged it @ C/5 (1.34 A). As it was charging, VOK turned ON again. DSG turned ON. SLEEP turned OFF. REST turned OFF.
    7. After discharging was complete (down to 22V), I waited for a few hours, SLEEP turned ON, VOK turned OFF, DSG turned OFF, BATLOW turned ON, CF turned OFF and REST turned ON. Luckily this time though, and finally, Learned Status turned 5!!
    8. Started charging a little higher than C/5 (~1.4 Amps). CCA turned ON. VOK turned ON. SLEEP turned OFF. BATLOW turned OFF. BATHI turned ON. FIRSTDOD turned ON.
    9. Charging auto terminated. Waited for a few hours. SLEEP turned ON. VOK turned OFF. FIRSTDOD turned OFF. REST turned ON. Learned Status is still 5.

    Currently, I am going through another discharging step trying to chase Learned Status 6.

    In the meantime, I sent you what I have to take a look.

    I would appreciate knowing what is not looking right in there.

    Thanks for taking the time!

    Data_Memory_Settings_2024-02-05_before learning cycle.gg.csv     LearningCycle_2024-02-05.log

  • Hey Ali,

    That's great! Finish the current discharge you are doing. Learned Status might update to 6 after this discharge cycle. If it does not, please go through the learning process again but lower the discharge rate to around C/7 (950mA). But don't send the reset command going forward.

    Sincerely,
    Nick Richards

  • Hi Nick,

    Thank you for the reassurance.

    After item 9 in the steps above, I performed the below.

    1. Started discharging again at C/5 (1.34 Amp). VOK turned ON. DSG turned ON. SLEEP turned OFF. REST turned OFF.

    2. Once discharging finished: SLEEP turned ON. DSG turned OFF. FIRSTDOD turned ON. BATLOW turned ON.

    3. Waited for a few hours and then: VOK turned OFF. FIRSTDOD turned OFF. REST turned ON... and finally, Learned Status just hit 6 !!

    4. Manually changed Update Status to 2, Cycle Count under Configuration/Data to 0, Cycle Count under Gas Gauging/State to 0. Exported data memory and golden image. RUP_DIS turned ON. FIRSTDOD turned ON. REST turned OFF. QEN turned OFF.

    My Questions:

    1. Anything unusual in the above items, including the last step of disabling the gauge impedance tables, resetting the cycle count and writing the golden image?
    2. Would the fuel gauge continuously learn and adjust as the system works over time? 
    3. Do I have to seal it so it does not learn or adjust before writing the golden files on another gauge?

    I attached my final config and log files.

    SuccessfulLearningCycle_2024-02-05_Lstatus2_CycleCounts0.log     Data_Memory_Settings_2024-02-05_after successful learning_LStatus2_CycleCounts0.gg.csv

  • Hey Ali,

    1 & 2.You should enable gauge impedance tables. So RUP_DIS should stay low after learning cycle is completed. The gauge will continually update Qmax and resistance values throughout the life of the battery. This is because it is known as a battery ages the internal impedance slowly increases.
    3. Once you have made all the necessary changes to data memory, then you can seal the gauge.


    Sincerely,
    Nick Richards

  • Hi Nick,

    How to enable gauge impedance and keep it enabled so it continually learns? RUP_DIS still goes low when I leave the battery to rest (whether full or discharged). Currently, Updates Status in the data memory is set to 02.

    Thanks for answering the rest!

  • Hey Ali,

    That's perfect, as long as RUP_DIS goes low that is set up correctly. To enable gauge impedance make sure that the IT_ENABLE command was sent. Impedance track is enabled when the ControlStatus()[QEN] = 1

    Sincerely,
    Nick Richards

  • Sure will do as usual.

    Now that the learning finished successfully with a Max Error of 1, I tried testing the SOC accuracy and fully charged the battery. When fully charged, it displays 93% SOC instead of 100%. Where could the issue be?

  • Hey Ali,

    Can you send a log file of this occurring and the gg file.

    Sincerely,
    Nick Richards

  • Hey Ali,

    In that log file it shows SOC going to 100%

    Sincerely,
    Nick Richards

  • I simply recharged the same battery to full and let the charger auto-terminate, just as was done during the learning process. By the time it terminated, SOC topped @ 93%. Now I left it for some 5 hours to rest, the SOC fell to 90%.

    When looking at the Full Charge Capacity and Remaining Capacity values that only changed after the learning cycle, I see something wrong. Note that I started with Qmax Cell 0 = 6700 initially.

    Remaining Capacity: 6589
    Full Charge Capacity: 7357

    Pretty sure it was not discharged later.

    Below I attached the config and log files.

    Rested after Successful Learning Cycle_2024-02-06_CapacityValuesAreOff.log   Data_Memory_Settings_Rested after Successful Learning Cycle_2024-02-06_CapacityValuesAreOff.gg.csv

  • Hey Ali,

    I would change the Cell Charge Voltage to 3600 mV (this is to ensure that the gauge is reading a voltage value above this). After this change please gather a new log file that shows the charging actually take place so I can further debug this issue.

    Sincerely,
    Nick Richards

  • Hi Nick,

    I changed Cell Charge Voltage to 3600 mV for T1-T2 and T2-T3 and keptT3-T4 as 3550 mV.

    1. Charged the battery to max till the charger automatically terminated and let it rest till VOK cleared and REST flag turned ON - No update status 5
    2. Discharged it again at ~ C/5 rate and waited till VOK was cleared and REST flag turned ON - No update status 5 yet, again.

    Not sure what is happening this time. I attached the log and config files.

    Rested after Failed Learning Cycle_2024-02-08_NoUpdateStatus5.log   Data_Memory_Settings_Before Learning Cycle_2024-02-07.gg.csv

  • Hey Ali,

    I checked your log file and I do not see the battery being properly charged. There is not a CV charge after the CC charge. Please make sure to do a proper CC/CV charge.

    Sincerely,
    Nick Richards