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.

BQ27411-G1: Update of resistance in the field

Part Number: BQ27411-G1

Our product uses a bq27411-g1a gas gauge to monitor a Li-Ion battery. I have set the gauge's parameter according to our application and successfully performed a learning cycle using a GDK and our battery board. A programmed gas gauge was installed inside our product and the battery already experience some cycling. I noticed that the gauge's Qmax parameter was updated but the R_a RAM resistance profile was not. Our product is low power and consumes battery energy on a variable (not constant) current basis. The product's pulsed load profile is as follows: peak current is around 50mA, period 30s and duty cycle 25%. Since the product was made to run outside in various condition (both high and low temperatures), it must be able to update its resistance profile to match the operating condition of the battery.

My question is: Is a gauge supposed to be able update its resistance profile once deployed ?

  • The gauge will update the Ra tables during discharges.

    Can you monitor the RUP_DIS bit? Does this get set at any time during discharge?

  • dsg.log.txt

    * Texas Instruments Data Flash File
    * File created Thu Jan 12 08:49:41 2017
    *
    * Device Number 421
    * Firmware Version 1.09.80
    * Build Number not available
    * Order Number not available
    *
    * bqz Device Number 0x0421
    * bqz Firmware Version 0x0108
    * bqz Build Number 1.08
    *
    * Field Order: Class name, Subclass name, Parameter name, Parameter Value, Display Units
    "Configuration","Safety","Over Temp","55.0","°C"
    "Configuration","Safety","Under Temp","0","°C"
    "Configuration","Safety","Temp Hys","5.0","°C"
    "Configuration","Charge Termination","Min Taper Capacity","25","mAh"
    "Configuration","Charge Termination","Current Taper Window","40","s"
    "Configuration","Charge Termination","TCA Set %","99","%"
    "Configuration","Charge Termination","TCA Clear %","95","%"
    "Configuration","Charge Termination","FC Set %","-1","%"
    "Configuration","Charge Termination","FC Clear %","98","%"
    "Configuration","Charge Termination","DODatEOC Delta T","5.0","°C"
    "Configuration","Data","Initial Standby","-3","mA"
    "Configuration","Data","Initial MaxLoad","-200","mA"
    "Configuration","Discharge","SOC1 Set Threshold","10","%"
    "Configuration","Discharge","SOC1 Clear Threshold","15","%"
    "Configuration","Discharge","SOCF Set Threshold","2","%"
    "Configuration","Discharge","SOCF Clear Threshold","5","%"
    "Configuration","Registers","OpConfig","25f8","Flag"
    "Configuration","Registers","OpConfigB","0f","Flag"
    "Configuration","Registers","DF Version","128","Num"
    "Configuration","Power","Hibernate I","3","mA"
    "Configuration","Power","Hibernate V","2400","mV"
    "Configuration","Power","FS Wait","0","s"
    "Gas Gauging","IT Cfg","Sec. Relax Time","30","s"
    "Gas Gauging","IT Cfg","Average Time","8","s"
    "Gas Gauging","IT Cfg","Min DOD Res Update","70","%"
    "Gas Gauging","IT Cfg","Max Res Factor","20","Num"
    "Gas Gauging","IT Cfg","Min Res Factor","5","Num"
    "Gas Gauging","IT Cfg","Ra Filter","800","Num"
    "Gas Gauging","IT Cfg","Max V Delta","10","Num"
    "Gas Gauging","IT Cfg","Fast Qmax Start DOD %","92","%"
    "Gas Gauging","IT Cfg","Fast Qmax End DOD %","96","%"
    "Gas Gauging","IT Cfg","Fast Qmax Start Volt Delta","125","mV"
    "Gas Gauging","IT Cfg","Fast Qmax Current Threshold","4","Hr rate"
    "Gas Gauging","IT Cfg","Fast Qmax Min Points","3","Num"
    "Gas Gauging","IT Cfg","Qmax Capacity Err","1.5","%"
    "Gas Gauging","IT Cfg","Max Qmax Change","20","%"
    "Gas Gauging","IT Cfg","Qmax Max Delta %","10","%DCap"
    "Gas Gauging","IT Cfg","Max % Default Qmax","120","%DCap"
    "Gas Gauging","IT Cfg","ResRelax Time","500","s"
    "Gas Gauging","IT Cfg","User Rate-mW","0","mW"
    "Gas Gauging","IT Cfg","Reserve Cap-mWh","0","mWh"
    "Gas Gauging","IT Cfg","Max Sim Rate","1","Hr rate"
    "Gas Gauging","IT Cfg","Min Sim Rate","20","Hr rate"
    "Gas Gauging","IT Cfg","Ra Max Delta","11","4mOhm"
    "Gas Gauging","IT Cfg","Min Delta Voltage","0","mV"
    "Gas Gauging","IT Cfg","Max Delta Voltage","200","mV"
    "Gas Gauging","IT Cfg","DeltaV Max dV","100","mV"
    "Gas Gauging","IT Cfg","TermV Valid t","2","s"
    "Gas Gauging","Current Thresholds","Dsg Current Threshold","450",".1 Hr rate"
    "Gas Gauging","Current Thresholds","Chg Current Threshold","450",".1 Hr rate"
    "Gas Gauging","Current Thresholds","Quit Current","910",".1 Hr rate"
    "Gas Gauging","Current Thresholds","Dsg Relax Time","60","s"
    "Gas Gauging","Current Thresholds","Chg Relax Time","60","s"
    "Gas Gauging","Current Thresholds","Quit Relax Time","1","s"
    "Gas Gauging","Current Thresholds","Transient Factor Charge","179","Num"
    "Gas Gauging","Current Thresholds","Transient Factor Discharge","179","Num"
    "Gas Gauging","Current Thresholds","Max IR Correct","400","mV"
    "Gas Gauging","State","Qmax Cell 0","15673","Num"
    "Gas Gauging","State","Update Status","00","Hex"
    "Gas Gauging","State","Reserve Cap-mAh","0","mAh"
    "Gas Gauging","State","Load Select/Mode","01","Hex"
    "Gas Gauging","State","Q Invalid MaxV","3803","mV"
    "Gas Gauging","State","Q Invalid MinV","3752","mV"
    "Gas Gauging","State","Design Capacity","1820","mAh"
    "Gas Gauging","State","Design Energy","6734","mWh"
    "Gas Gauging","State","Default Design Cap","1340","mAh"
    "Gas Gauging","State","Terminate Voltage","3100","mV"
    "Gas Gauging","State","SOCI Delta","1","%"
    "Gas Gauging","State","Taper Rate","180",".1 Hr rate"
    "Gas Gauging","State","Taper Voltage","4100","mV"
    "Gas Gauging","State","Sleep Current","10","mA"
    "Gas Gauging","State","V at Chg Term","4209","mV"
    "Gas Gauging","State","Avg I Last Run","-50",".1 Hr rate"
    "Gas Gauging","State","Avg P Last Run","-50",".1 Hr rate"
    "Gas Gauging","State","Delta Voltage","1","mV"
    "Ra Tables","R_a NVM","R_a0 0","78","Num"
    "Ra Tables","R_a NVM","R_a0 1","78","Num"
    "Ra Tables","R_a NVM","R_a0 2","91","Num"
    "Ra Tables","R_a NVM","R_a0 3","114","Num"
    "Ra Tables","R_a NVM","R_a0 4","93","Num"
    "Ra Tables","R_a NVM","R_a0 5","85","Num"
    "Ra Tables","R_a NVM","R_a0 6","91","Num"
    "Ra Tables","R_a NVM","R_a0 7","120","Num"
    "Ra Tables","R_a NVM","R_a0 8","128","Num"
    "Ra Tables","R_a NVM","R_a0 9","142","Num"
    "Ra Tables","R_a NVM","R_a0 10","185","Num"
    "Ra Tables","R_a NVM","R_a0 11","264","Num"
    "Ra Tables","R_a NVM","R_a0 12","391","Num"
    "Ra Tables","R_a NVM","R_a0 13","1030","Num"
    "Ra Tables","R_a NVM","R_a0 14","1641","Num"
    "Ra Tables","R_a RAM","R_a0 0","78","Num"
    "Ra Tables","R_a RAM","R_a0 1","78","Num"
    "Ra Tables","R_a RAM","R_a0 2","91","Num"
    "Ra Tables","R_a RAM","R_a0 3","114","Num"
    "Ra Tables","R_a RAM","R_a0 4","93","Num"
    "Ra Tables","R_a RAM","R_a0 5","85","Num"
    "Ra Tables","R_a RAM","R_a0 6","91","Num"
    "Ra Tables","R_a RAM","R_a0 7","120","Num"
    "Ra Tables","R_a RAM","R_a0 8","128","Num"
    "Ra Tables","R_a RAM","R_a0 9","142","Num"
    "Ra Tables","R_a RAM","R_a0 10","185","Num"
    "Ra Tables","R_a RAM","R_a0 11","264","Num"
    "Ra Tables","R_a RAM","R_a0 12","391","Num"
    "Ra Tables","R_a RAM","R_a0 13","1030","Num"
    "Ra Tables","R_a RAM","R_a0 14","1641","Num"
    "Calibration","Data","Board Offset","0","Counts"
    "Calibration","Data","Int Temp Offset","0","°C"
    "Calibration","Data","Pack V Offset","0","mV"
    "Calibration","CC Cal","CC Offset","1","Counts"
    "Calibration","CC Cal","CC Cal Temp","303.0","°K"
    "Calibration","CC Cal","CC Gain","0.2379","Num"
    "Calibration","CC Cal","CC Delta","283770.5625","Num"
    "Calibration","Current","Deadband","0","mA"
    "Calibration","Current","RDL Tempco","0.0000","Num"
    "Security","Codes","Sealed to Unsealed","80008000","Hex"
    
    * Texas Instruments Data Flash File
    * File created Fri Jan 13 08:04:42 2017
    *
    * Device Number 421
    * Firmware Version 1.09.80
    * Build Number not available
    * Order Number not available
    *
    * bqz Device Number 0x0421
    * bqz Firmware Version 0x0108
    * bqz Build Number 1.08
    *
    * Field Order: Class name, Subclass name, Parameter name, Parameter Value, Display Units
    "Configuration","Safety","Over Temp","55.0","°C"
    "Configuration","Safety","Under Temp","0","°C"
    "Configuration","Safety","Temp Hys","5.0","°C"
    "Configuration","Charge Termination","Min Taper Capacity","25","mAh"
    "Configuration","Charge Termination","Current Taper Window","40","s"
    "Configuration","Charge Termination","TCA Set %","99","%"
    "Configuration","Charge Termination","TCA Clear %","95","%"
    "Configuration","Charge Termination","FC Set %","-1","%"
    "Configuration","Charge Termination","FC Clear %","98","%"
    "Configuration","Charge Termination","DODatEOC Delta T","5.0","°C"
    "Configuration","Data","Initial Standby","-3","mA"
    "Configuration","Data","Initial MaxLoad","-200","mA"
    "Configuration","Discharge","SOC1 Set Threshold","10","%"
    "Configuration","Discharge","SOC1 Clear Threshold","15","%"
    "Configuration","Discharge","SOCF Set Threshold","2","%"
    "Configuration","Discharge","SOCF Clear Threshold","5","%"
    "Configuration","Registers","OpConfig","25f8","Flag"
    "Configuration","Registers","OpConfigB","0f","Flag"
    "Configuration","Registers","DF Version","128","Num"
    "Configuration","Power","Hibernate I","3","mA"
    "Configuration","Power","Hibernate V","2400","mV"
    "Configuration","Power","FS Wait","0","s"
    "Gas Gauging","IT Cfg","Sec. Relax Time","30","s"
    "Gas Gauging","IT Cfg","Average Time","8","s"
    "Gas Gauging","IT Cfg","Min DOD Res Update","70","%"
    "Gas Gauging","IT Cfg","Max Res Factor","20","Num"
    "Gas Gauging","IT Cfg","Min Res Factor","5","Num"
    "Gas Gauging","IT Cfg","Ra Filter","800","Num"
    "Gas Gauging","IT Cfg","Max V Delta","10","Num"
    "Gas Gauging","IT Cfg","Fast Qmax Start DOD %","92","%"
    "Gas Gauging","IT Cfg","Fast Qmax End DOD %","96","%"
    "Gas Gauging","IT Cfg","Fast Qmax Start Volt Delta","125","mV"
    "Gas Gauging","IT Cfg","Fast Qmax Current Threshold","4","Hr rate"
    "Gas Gauging","IT Cfg","Fast Qmax Min Points","3","Num"
    "Gas Gauging","IT Cfg","Qmax Capacity Err","1.5","%"
    "Gas Gauging","IT Cfg","Max Qmax Change","20","%"
    "Gas Gauging","IT Cfg","Qmax Max Delta %","10","%DCap"
    "Gas Gauging","IT Cfg","Max % Default Qmax","120","%DCap"
    "Gas Gauging","IT Cfg","ResRelax Time","500","s"
    "Gas Gauging","IT Cfg","User Rate-mW","0","mW"
    "Gas Gauging","IT Cfg","Reserve Cap-mWh","0","mWh"
    "Gas Gauging","IT Cfg","Max Sim Rate","1","Hr rate"
    "Gas Gauging","IT Cfg","Min Sim Rate","20","Hr rate"
    "Gas Gauging","IT Cfg","Ra Max Delta","11","4mOhm"
    "Gas Gauging","IT Cfg","Min Delta Voltage","0","mV"
    "Gas Gauging","IT Cfg","Max Delta Voltage","200","mV"
    "Gas Gauging","IT Cfg","DeltaV Max dV","100","mV"
    "Gas Gauging","IT Cfg","TermV Valid t","2","s"
    "Gas Gauging","Current Thresholds","Dsg Current Threshold","450",".1 Hr rate"
    "Gas Gauging","Current Thresholds","Chg Current Threshold","450",".1 Hr rate"
    "Gas Gauging","Current Thresholds","Quit Current","910",".1 Hr rate"
    "Gas Gauging","Current Thresholds","Dsg Relax Time","60","s"
    "Gas Gauging","Current Thresholds","Chg Relax Time","60","s"
    "Gas Gauging","Current Thresholds","Quit Relax Time","1","s"
    "Gas Gauging","Current Thresholds","Transient Factor Charge","179","Num"
    "Gas Gauging","Current Thresholds","Transient Factor Discharge","179","Num"
    "Gas Gauging","Current Thresholds","Max IR Correct","400","mV"
    "Gas Gauging","State","Qmax Cell 0","15061","Num"
    "Gas Gauging","State","Update Status","00","Hex"
    "Gas Gauging","State","Reserve Cap-mAh","0","mAh"
    "Gas Gauging","State","Load Select/Mode","01","Hex"
    "Gas Gauging","State","Q Invalid MaxV","3803","mV"
    "Gas Gauging","State","Q Invalid MinV","3752","mV"
    "Gas Gauging","State","Design Capacity","1820","mAh"
    "Gas Gauging","State","Design Energy","6734","mWh"
    "Gas Gauging","State","Default Design Cap","1340","mAh"
    "Gas Gauging","State","Terminate Voltage","3100","mV"
    "Gas Gauging","State","SOCI Delta","1","%"
    "Gas Gauging","State","Taper Rate","180",".1 Hr rate"
    "Gas Gauging","State","Taper Voltage","4100","mV"
    "Gas Gauging","State","Sleep Current","10","mA"
    "Gas Gauging","State","V at Chg Term","4209","mV"
    "Gas Gauging","State","Avg I Last Run","-55",".1 Hr rate"
    "Gas Gauging","State","Avg P Last Run","-54",".1 Hr rate"
    "Gas Gauging","State","Delta Voltage","0","mV"
    "Ra Tables","R_a NVM","R_a0 0","78","Num"
    "Ra Tables","R_a NVM","R_a0 1","78","Num"
    "Ra Tables","R_a NVM","R_a0 2","91","Num"
    "Ra Tables","R_a NVM","R_a0 3","114","Num"
    "Ra Tables","R_a NVM","R_a0 4","93","Num"
    "Ra Tables","R_a NVM","R_a0 5","85","Num"
    "Ra Tables","R_a NVM","R_a0 6","91","Num"
    "Ra Tables","R_a NVM","R_a0 7","120","Num"
    "Ra Tables","R_a NVM","R_a0 8","128","Num"
    "Ra Tables","R_a NVM","R_a0 9","142","Num"
    "Ra Tables","R_a NVM","R_a0 10","185","Num"
    "Ra Tables","R_a NVM","R_a0 11","264","Num"
    "Ra Tables","R_a NVM","R_a0 12","391","Num"
    "Ra Tables","R_a NVM","R_a0 13","1030","Num"
    "Ra Tables","R_a NVM","R_a0 14","1641","Num"
    "Ra Tables","R_a RAM","R_a0 0","78","Num"
    "Ra Tables","R_a RAM","R_a0 1","78","Num"
    "Ra Tables","R_a RAM","R_a0 2","91","Num"
    "Ra Tables","R_a RAM","R_a0 3","114","Num"
    "Ra Tables","R_a RAM","R_a0 4","93","Num"
    "Ra Tables","R_a RAM","R_a0 5","85","Num"
    "Ra Tables","R_a RAM","R_a0 6","91","Num"
    "Ra Tables","R_a RAM","R_a0 7","120","Num"
    "Ra Tables","R_a RAM","R_a0 8","128","Num"
    "Ra Tables","R_a RAM","R_a0 9","142","Num"
    "Ra Tables","R_a RAM","R_a0 10","185","Num"
    "Ra Tables","R_a RAM","R_a0 11","264","Num"
    "Ra Tables","R_a RAM","R_a0 12","391","Num"
    "Ra Tables","R_a RAM","R_a0 13","1030","Num"
    "Ra Tables","R_a RAM","R_a0 14","1641","Num"
    "Calibration","Data","Board Offset","0","Counts"
    "Calibration","Data","Int Temp Offset","0","°C"
    "Calibration","Data","Pack V Offset","0","mV"
    "Calibration","CC Cal","CC Offset","3","Counts"
    "Calibration","CC Cal","CC Cal Temp","303.0","°K"
    "Calibration","CC Cal","CC Gain","0.2379","Num"
    "Calibration","CC Cal","CC Delta","283770.5625","Num"
    "Calibration","Current","Deadband","0","mA"
    "Calibration","Current","RDL Tempco","0.0000","Num"
    "Security","Codes","Sealed to Unsealed","80008000","Hex"
    
    I have run an accuracy test with our battery board and a GDK using a pulsed load. The gauges registers and data memory were recorded during the test. As far as I can see, the [RUP_DIS] bit was clear at the start of the test (fully charged) and stayed so until the end (fully discharged). Looking at the data memory files, I can see that the Qmax cell0 DM parameter was updated but the R_a Table was not.

    At the beginning of the test: Control Status() was 0x090 and at the end 0x290. This confirms that only Qmax was updated.

  • Our device wakes up and goes back to sleep. So it acts as a pulsed load. As a result the discharge isn't continuous.
    Will the gauge update the Ra table in this case ?
  • When your device goes back to sleep, are you also forcing the gauge into a low power mode or does your system let the gauge go to sleep or hibernate automatically?
  • Actually, the device does not sleep but is in standby, consuming around 20mA. When not in standby, the device consume an average of 50mA. The gauge DM sleep current parameter is set to 10mA so it won't sleep. The gauge DM Dsg Threshold is set to 40mA and Quit Current is set to the 25mA, so the discharge will be considered not continuous by the gauge.
  • The gauge will only update impedances if there's a current when the depth of discharge crosses a grid point. So if the gauge is in relaxation mode while the cell actually discharges (your standby current is close to your regular consumption current) then the gauge will not measure a current when the cell is discharged by your standby current and it won't update the impedance tables.

    To verify this theory, please set the quit current to 10mA and the sleep current to 5mA.
  • Actually, I cannot set the quit current to 10mA, the maximum DM Quit Current parameter of the bq27411-g1 is 1000. Since our the product uses a 1800mAh battery, a minimum quit current of 18mA can be set.

    quit current = 1800 mAh / (1000*0.1h) = 18mA

    I can try with the DM Quit Current set to 1000 (18mA) and the sleep current set to 5mA but I doubt it will work. Is there any other way around this problem ?

  • I look at the gauge's technical manual and I read the following:

    "The Quit Current is used as part of the Impedance Track™ algorithm to determine when the fuel gauge
    enters relaxation mode from a current flowing mode in either the charge direction or the discharge
    direction. [...] Either of the following criteria must be met to enter relaxation mode:
    • |AverageCurrent()| < |Quit Current| for Dsg Relax Time
    • |AverageCurrent()| > |Quit Current| for Chg Relax Time"

    In our product both Dsg Relax Time and Chg Relax Time are set to 60s. Considering the pulsed load profile of our product (High current = 50mA, Low current=18mA, period = 30s and duty cycle = 25%), the gauge should not enter relaxation mode. So if I understand correctly, the gauge should stay in discharge mode since |AverageCurrent()| < |Quit Current| for 22s, which is less than Dsg Relax Time (60s)!
  • I try to discharge with a constant current of 50mA and the gauge was not able to update R_a table either! So I suspect that the gauge did not know that the parameter were learned in the first place. According to Troubleshooting section of the document "Achieving The Successful Learning Cycle":

    « During the discharge, the Resistance table is NEVER UPDATED. If during a learning cycle the Data
    Flash log shows that the Resistance Table never changed, this indicates that the discharge load was
    too light. The gauge needs to measure a significant voltage drop across the internal battery impedance
    before it can measure the impedance. If the load is too light, the measurement fails, and it will never
    get any Resistance Table updates. »

    And on the discharge current to use when performing the learning cycle:

    "Discharge C/5 Constant Current: Make sure to use a C/5 current. This is preferred, and there can
    be some error. However, if the current drifts too high or too low, the cycle can fail. Too low is
    around C/10, too high is around C/3 to C/2. Smaller cells (<800mAH) are much less forgiving in this
    regard."

    If I understand correctly, the gauge still thinks it is in learning process so it won't update its R_a because the discharge current is too low. So there must be a way to tell the gauge that it has learned its parameters!!! Normally the DM Update Status parameter serve this purpose, but you told me to set to 0x00 in the golden image!?

    How the gauge should know that the learning cycle was successfully performed on it so that it can relax its criteria and update the R_a table in the field ?

    What value the DM Update Status parameter should be set to or it there any other way out of this ?

    Thanks for helping me with this problem that hold me for more than a week now !!!

  • The gauge will not update the impedance tables if the current is too low. It cannot learn the cell's impedance if the load current doesn't cause a large enough drop on the cell's internal impedance.

    "If the load is too light, the measurement fails, and it will never
    get any Resistance Table updates"

    >So there must be a way to tell the gauge that it has learned its parameters!!! Normally the DM Update Status parameter serve this purpose, but you told me to set to 0x00 in the golden image!?

    The gauge will learn parameters like Qmax but it won't learn the cell's impedance without a significant load current. The Update Status parameter is an indicator that shows you that the gauge learned Qmax and/or Ra. It won't affect the ability to learn Ra.

    >So there must be a way to tell the gauge that it has learned its parameters!!! Normally the DM Update Status parameter serve this purpose, but you told me to set to 0x00 in the golden image!?

    In systems where there will never be a significant discharge current, the gauge will not learn Ra. Regardless of what you set Update Status to.

    An initial learning cycle for your cell (to create a golden image - this can be done with an EVM and a GDK) should use a load current that is around C/5. If that doesn't result in impedance updates then the load current should be increased until the gauge updates the impedance tables.