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-G1: Cannot Zero Out BQ34Z100-G1 and Struggle to Understand CC_Offset / Board Offset Units

Part Number: BQ34Z100-G1
Other Parts Discussed in Thread: BQ34Z100, BQ41Z90

Tool/software:

I am unable to successfully zero-out a BQ34Z100-G1 which is interfaced to a 50 micro-ohm shunt. When attempting to zero in no load conditions, the fuel gauge will briefly report 0 but will then flicker between +/100mA. I am struggling to understand the meaning of the CC_Offset and Board Offset values so I can understand what values the gauge is actually applying to subtract from it's raw coulomb count over the shunt. The TRM lists the units simply as "num" which I assumed meant raw ADC counts:



The datasheet lists the full-scale range of the coulomb count ADC as +-125mV, and the resolution being 14 bits, since the upper bit is reserved for encoding the sign of the integer. Therefore I assumed the value of a singular ADC count would be:

(.125 / (2^14))  = 7.6 microvolts


The input offset of the ADC is 10 microvolts, which would correspond to 200mA with our 50 microohm shunt. I would assume then the CC_Offset value would be able to at least zero-out 200mA of current in either polarity. However, I found the CC_Offset holds a value of 4,858 when I attempt to zero. With this CC_Offset setting, the gauge will still read 100mA of charge current intermittently. My Board Offset value is -2. 

Can someone help me understand:

1. The actual conversion from CC Offset / Board Offset Units to shunt voltage?
2. Why the gauge is incapable of zero'ing out even it's own input offset voltage in terms of current? I.E. the input offset voltage of 10 microvolts should at least be zero'd out by CC Offset / Board Offset which means no current below or equal to 200mA in etther direction becomes 0A. 

  • Hello Elliott,

    We have assigned the trend and we are working on your response.

    Thank you,
    Alan

  • Hi Alan, this is a high-priority issue for us. I'd be happy to share our schematic of the circuit that connects the shunt to the gauge SRP/SRN pins if that would be helpful. However, it is critical that this issue be amended since it is causing our SOC to slowly drift while the battery is not being loaded. 

  • Hi,

    This thread describes CCgain and CC delta: (+) BQ34Z100-G1: CC Gain, CC Delta. - Power management forum - Power management - TI E2E support forums

    These threads describe board offset and CC offset:

    (+) BQ34Z100-G1: CC Offset / Board Offset - Power management forum - Power management - TI E2E support forums

    (+) BQ34Z100-G1: Commands for calibration procedure - Power management forum - Power management - TI E2E support forums

    (+) BQ35100: BQ35100: What does Board Offset mean? and how it is calibrated? - Power management forum - Power management - TI E2E support forums

    If you are using such a small sense resistor, I would assume the current in your system is very large, you can increase your quit current threshold so that any current below this threshold will not be taken into consideration when doing SOC calculations.

    Regards,

    Diego

  • Hey Diego,

    Our Quit Current is 500mA, well above the noise levels we’re seeing of up to 100 or so milli amps. Despite that, we still see a change in the QMaxPassedQ register of about 8 amp hours in 5 days during relaxation when QMax goes a while without updating. We have RELAX_JUMP_OK set to zero already but I’ve been told that the gauge will continue to update DOD in relaxation based on passed charge measurements between DOD0 updates. Therefore the false current seen in relax due to being unable to zero is being integrated.

  • Hi,

    Can you share a .log file and .gg file of this?

    Regards,

    Diego

  • Hey Diego, I discussed this in another forum post here, where I was told by Domink that so long as my battery saw a non-zero error current (which is obviously present even after I zero) I could not stop the integration of charge in relaxation in the flat region. That's why I'm desperate to figure out a zero'ing method that will actually work with the small shunt. 

    https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1530406/bq34z100-g1-remcap-adjustment-in-relax-despite-no-qmax-update/5907059#5907059

    I took a log of the three discharges starting from full charge, where each discharge takes out about 20AH from the battery. The battery is 104AH, 16S1P. I allowed only one hour of relaxation between each discharge cycle, with each discharge cycle ending in the flat region so no OCV to SOC guesses were made based on the chem ID (0x4201) nor any QMax updates were made. Another log was taken after the final discharge ended and during relaxation the SOC drifted up 1%. I then stopped logging, and came back 5 days later, at which point the SOC had drifted all the way up to 51% from 42%. The QMaxPassedQ value changed about 9 amp-hours. My Design Energy Scale is set to 20

    3 Discharges from Full + Some Relaxation (I had to restart logging to make sure my voltage was calibrated during relaxation):
    6278.three Tierra Rejada cycles 1 hour rest June 19 2025.log


    More relaxation logging, SOC drifts up 1%:
    8345.Gotion Relaxation Log Post VCal.log

    Like I said, logging stopped after the above log for five days. When I returned, the registers were in the state as pictured here. Note QMaxPassedQ has changed significantly since the previous log file which stopped logging 5 days prior and the battery has done nothing but relax since then


    Finally, here is the data flash csv:
    7840.gotion_104AH_data_flash.gg.csv

    To reiterate, Dominik indicated that what's likely happening is DOD0 is being updated by the noise current of up to 100mA over the 5 days which is causing my SOC drift. Once I removed the deadband of 400mA it becomes clear to me that zero'ing the gauge does not prevent the gauge from measuring noise flickering around 100mA. 

  • Hello Elliott,

    We have received your update and will follow up when possible.

    Thank you,
    Alan

  • Hi,

    50uohms is by far the smallest sense resistor I have seen used. The smallest sense resistor I have seen used successfully is 500uohms. 

    The typical input offset error is 10uV, so the device can detect down to 10uV/50uohm = 200mA with a 50uohm sense resistor. This is why the gauge is flickering between +/-200ma.

    We typically don't recommend going below 1mohm.

    Is a sense resistor this small required for you application?

    This would correspond to a max discharge current of 2500A.

    What Dominik said makes sense, it appears the noise is causing issues with your system. When the current is below the quit current threshold the gauge will be in relax mode and take ocv measurements. the noise in your system appears to be disrupting the DOD point. 

    Regards,

    Diego

  • Hey Diego,

    Our applications support maximum currents between 600A and 1kA. For this particular application, it must support up to 600A. In this case, we could bump our shunt size to 200uOhms. I guess this then at least reduces the error current from 10uV offset to only 50mA, which for a 104AH battery shouldn’t cause as much SOC drifting. 

    my questions are:

    1. Does TI support any fuel gauging IC for high current applications where you need to support between 500A and 1kA?

    2. Is there absolutely no way to prevent the gauge from integrating current in relaxation? No sleep mode? I saw the deep sleep mode still periodically wakes up and takes measurements. I’d love to disable current integration when the gauge has been idle for a prolonged time period

  • Hi,

    Our applications support maximum currents between 600A and 1kA. For this particular application, it must support up to 600A. In this case, we could bump our shunt size to 200uOhms. I guess this then at least reduces the error current from 10uV offset to only 50mA, which for a 104AH battery shouldn’t cause as much SOC drifting. 

    Yes, this will definitely help.

    1. Does TI support any fuel gauging IC for high current applications where you need to support between 500A and 1kA?

    Unfortunately, you are using the best device for the application. BQ34z100 is considered our high current device. We also have BQ41z90 which is APL but is limited to 16S. But BQ41z90 would have the same issues we are facing with BQ34z100

    2. Is there absolutely no way to prevent the gauge from integrating current in relaxation? No sleep mode? I saw the deep sleep mode still periodically wakes up and takes measurements. I’d love to disable current integration when the gauge has been idle for a prolonged time period

    Putting the device in Sleep mode will help, putting the device in Full sleep mode will help more. But if the gauge detects a relax voltage and not current (requirement to stay in sleep/full sleep mode) then the gauge will take an ocv measurement and run a capacity simulation.

    Regards,

    Diego

  • Thanks Diego.

    >"Putting the device in Sleep mode will help, putting the device in Full sleep mode will help more. But if the gauge detects a relax voltage and not current (requirement to stay in sleep/full sleep mode) then the gauge will take an ocv measurement and run a capacity simulation"

    Do you mean if the gauge senses a current greater than > Sleep Current it exits sleep mode / deep sleep mode (if the timer has expired) and does an OCV-to-DOD update *and* runs a capacity simulation? We currently have the RELAX_JUMP_OK asserted which I thought blocks OCV-to-DOD conversions when the battery is in RELAX mode and the voltage of the pack is in the flat region of the chemistry. 

    Currently, it looks like sleep and deep sleep is disabled on the gauge. That can be enabled and I believe will help. But to be clear, our sleep current, although Dominik informed me should be about 3.1A, is 500mA. Despite the offset error inducing error currents, I've never seen a noise current higher than about 140mA and mathematically we're constrained by (10uV/10uOhm) = 200mA noise maximum. So, I do not believe the error current will ever eject us from RELAX mode. I am unclear on when the capacity simulation occurs - does it ever occur in relaxation mode if the temperature is relatively stable? Or does it occur on the exist from relaxation only? I ask because I believe the source of the SOC drift is the DOD0 being updated to indicate "Passed Current" (AKA the error current) being integrated into it since DOD0 = DOD0_old + PassedCurrent / QMax. So, my questions would be:

    1. Does any capacity simulation ever occur in relaxation mode if temperature is stable?
    2. Could I re-program the Pack Configuration register "on the fly" to enable SLEEP mode in the gauge without having to reset the gauge? Currently I am able to re-program a target flash block by following the I2C comms as laid out on page 20 of the TRM
    3. Say what is occurring is that the DOD0, every 30 seconds, is updated with the "PassedCurrent". If PassedCurrent is always non-zero due to our small shunt and offset, then of course DOD0 will slowly move around and the SOC will change. If DEEP SLEEP mode is entered, and these DOD0 updates occur *far slower* due to the power mode, I should see way less drift on the DOD0 values right? Is PassedCurrent the instantaneous current reading at the time of the DOD0 update, or is it a continuous integration of all of the current readings taken even while in DEEP SLEEP? If it is the former, (instantaneous) then my DOD0 updates will become fewer and far between - which would be great for slowing DOD0 changes. If it's a continuous integration of current since last DOD0 update, even in DEEP SLEEP, I still have the same problem,
    4. In DEEP SLEEP, how often exactly would DOD0 for instance be updated in relax? I saw no proscribed frequency for dataset updates in DEEP SLEEP in the TRM. 



  • Hi,

    Do you mean if the gauge senses a current greater than > Sleep Current it exits sleep mode / deep sleep mode (if the timer has expired) and does an OCV-to-DOD update *and* runs a capacity simulation?

    This is true. but I am saying even in sleep mode and full sleep mode the gauge will still take ocv measurements and run capacity simulations if it detects relaxed battery cells.

    I am unclear on when the capacity simulation occurs - does it ever occur in relaxation mode if the temperature is relatively stable? Or does it occur on the exist from relaxation only?

    The capacity simulations are run when OCV measurements are taken. OCV measurements are taken when relaxed cells are detected. These means the voltage and temperature are stable, and there is no load (or the load is below the quit current threshold).

    1. Does any capacity simulation ever occur in relaxation mode if temperature is stable?

    Yes, see above answers

    2. Could I re-program the Pack Configuration register "on the fly" to enable SLEEP mode in the gauge without having to reset the gauge? Currently I am able to re-program a target flash block by following the I2C comms as laid out on page 20 of the TRM

    Technically yes, but we do not recommend updating the device in the field, ideally the gauge should remain sealed in the field.

    3. Say what is occurring is that the DOD0, every 30 seconds, is updated with the "PassedCurrent". If PassedCurrent is always non-zero due to our small shunt and offset, then of course DOD0 will slowly move around and the SOC will change. If DEEP SLEEP mode is entered, and these DOD0 updates occur *far slower* due to the power mode, I should see way less drift on the DOD0 values right?

    correct

    Is PassedCurrent the instantaneous current reading at the time of the DOD0 update, or is it a continuous integration of all of the current readings taken even while in DEEP SLEEP?

    continuous 

    4. In DEEP SLEEP, how often exactly would DOD0 for instance be updated in relax? I saw no proscribed frequency for dataset updates in DEEP SLEEP in the TRM. 

    With every ocv measurement 

    Regards,

    Diego

  • Okay..So DEEP SLEEP mode takes OCV measurements at a slower frequency than normal operation mode, which slows the frequency of DOD0 updates vis-a-vis passed charge integration since last update, and also slows the frequency of discharge simulations. As integration is continuous rather than instantaneous, does slowing the frequency of DOD0 updates really have any effect on how it is disturbed by small amounts of passed charge? I.E. if DEEP SLEEP updates DOD0 every hour by integrating all the passed charge seen in the last hour vs. every 30 seconds with all passed charge seen in the last 30 seconds, if the noise still exists, how does that add up to preventing greater modification of DOD0? 

    Also, is there any way to "fudge" the discharge simulations via Load Mode and Select settings so that the simulations never manifest in any adjusted DOD0 in relaxation?

  • Oh! One more thing - I just want to make sure I understand this correct. When DOD is updated via the PassedCharge since last OCV measurement, the DOD update in and of itself does NOT update Rem Cap. Am I correct in my understanding that what updates Rem Cap is the discharge simulation run once the DOD has been updated? So, If I set the discharge simulation to use the User Rate and set the User Rate to 0mW...Would that be a hacky way to disable said discharge simulation from updating Remaining Capacity? If that's not something that's viable I guess my second best option would be to use Load Select 2 so the simulated power is based on a low-pass filtered version of the current which could perhaps filter out some of the unavoidable offset noise. 

  • Hi,

    I.E. if DEEP SLEEP updates DOD0 every hour by integrating all the passed charge seen in the last hour vs. every 30 seconds with all passed charge seen in the last 30 seconds, if the noise still exists, how does that add up to preventing greater modification of DOD0? 

    Yes, because the gauge is not taking ocv measurements as frequently. The gauge is always coulomb counting. 

    Also, is there any way to "fudge" the discharge simulations via Load Mode and Select settings so that the simulations never manifest in any adjusted DOD0 in relaxation?

    No

    Am I correct in my understanding that what updates Rem Cap is the discharge simulation run once the DOD has been updated?

    No, Remcap is constantly being updated.

    o, If I set the discharge simulation to use the User Rate and set the User Rate to 0mW...Would that be a hacky way to disable said discharge simulation from updating Remaining Capacity?

    This will have large negative implications on SOC.

    Regards,

    Diego

  • Thanks Diego - So less OCV measurements = less remcap simulations; The coulomb counting is always active even in DEEP SLEEP which means DOD0 will continue to be updated which would still update RemCap. Is the reason a slower frequency of RemCap simulations likely to address drifting because the RemCap simulation is more likely to trigger a larger estimated remcap change than the small amount of error current accumulated as opposed to the DOD adjustment made every 100 seconds since last OCV measurement via PassedCharge?

  • Hi,

    Yes, Deep sleep should help reduce the likelihood of remcap/SOC error because of less frequent simulations. 

    Regards,

    Diego