How to Use The MAX17201/MAX17211 and MAX17205/MAX17215 to Fuel-Gauge Primary Cell Batteries

Introduction

Primary cells pose a special challenge to fuel gauges. They are used in applications very sensitive to current consumption. Typical applications include smart sensors, smart meters, fire alarms, and other IoT devices that must operate for multiple months, or even years, without charging or changing batteries. Fuel gauges in these applications must not become a dominant source of power consumption. The nonrechargeable nature of the cells means the fuel gauge never has a chance to learn the capacity of the battery, and must achieve the accuracy through techniques such as accurate coulomb counting instead. For some chemistries, a flat voltage curve also means a direct voltage lookup method is not usable.

The MAX17201 and MAX17211 (MAX172x1) are low-power fuel gauges with excellent coulomb counting and temperature and voltage measurement accuracy. The analog capabilities of these ICs and their core voltage fuel gauge can be used to provide critical information in primary-cell applications. The single-cell ICs (supporting up to 5V) have a current consumption of only 9μA. This application note describes how to use the MAX172x1 fuel gauges in lithium-based primary cells. For applications with higher voltage requirements, use the MAX17205 and MAX17215. The BATT pin can measure up to 20V, and a voltage-divider can be used with the CELLX pin for higher voltage. This application note discusses the MAX17201/MAX17211, but the MAX17205/MAX17215 can be substituted for the higher voltage applications. Table 1 lists some supported cell types.

Table 1. Example Supported Cell Types
Type Chemistry Notes
CR123(A) LiMnO2 1S, requires 3V startup solution due to low voltage
Energizer Litdium AA/AAA LiFeS2 ≥ 3S, or ≥ 2S witd 3V startup solution
Tadiran/Saft LiSOCl2 Flat discharge curve
Alkaline Alkaline ≥ 3S

Schematic

The schematic for primary cells deviates from the typical implementation by connecting the chip ground (CSN) to the battery, making the fuel gauge ignore its own current consumption. This method increases the accuracy of the coulomb counter. The host requirement for this method is to either treat the positive coulomb count as discharge, or to set the current gain with a negative gain, making the coulomb counter behave normal again. To change the CGAIN to negative, the nCGain Register should be set to 0xC000, and the nNVCfg0.enCG bit (0x0040) should be set to 1 to enable restore CGAIN and COff from the nCGain Register. The schematic in Figure 1 shows the EP/GND to CSN connection highlighted to illustrate the deviation from the standard TDFN schematic.

Primary-cell application circuit schematic.

Figure 1. Primary-cell application circuit schematic.

Sense Resistor Selection

The sense resistor in Figure 1 has been set to 100mΩ. The 100mΩ vs. the 10mΩ typically used increases the resolution of the current measurement from 0.15625mA to 0.015625mA. Having a finer resolution decreases the drift of the coulomb counter and allows for better measurement in applications with lower currents. If the application uses more than 500mA discharge current, the sense resistor value should be decreased to allow the full current to be measured. Table 2 shows the current range and measured offset for various sense resistor values.

Table 2. Sense Resistor Selection
Sense Resistor
(mΩ)
Current range Current LSB (μA) Measured offset (μA) Recommended COFF value
10 ±5.12A 156.25 200 0
250 ±204.8mA 6.25 4.3 1
1000 ±51.2mA 15625 1.1 6
5000 ±10.24mA 78125 0.2 29

Minimizing Fuel Gauge Current

The quiescent current for the fuel gauge is minimized to 9μA by keeping the fuel gauge in an always-hibernate mode. To enable always hibernate, set the HibThreshold value to 0 to maximize the current allowed for hibernate mode, and set the HibExitTime to the maximum value to keep the fuel gauge in hibernate mode. The recommended value for the nHibCfg value that achieves this is 0x801B. The nNVCfg0.enHCfg bit (0x0002) should be enabled to allow copying nHibCfg to HibCfg. The COff Register can be set as described in Table 2 to make the fuel gauge count its own consumption current.

In addition, the I2C communication should be minimized to reduce the offset. Because the pulldown current for communication lines is routed through the chip ground (CSN), the communication current is all passed through the sense resistor. Excessive communication causes more current to cross RSENSE, creating virtual charge current.

End-of-Life Detection

The MAX17201/MAX17211 can also provide end-of-life detection by monitoring the voltage and reporting the open-circuit voltage processed through an internal model. Monitor the VFOCV Register (0xFB) for the open-circuit voltage to decide when the voltage is approaching the end of life, without getting false readings caused by load pulses on the battery. A special model for the battery should be used to enable the end-of-life voltage reporting.

Evaluating Coulomb Counter Performance

The raw coulomb counter in the MAX17201/MAX17211 is accessible by reading the QH and QL Registers (0x4D and 0x4E). QH represents the high word and QL represents the low word of the 32-bit coulomb counter. The LSB for the QH Register is 5.0 6416_Algoritim 01. For a 10Ω sense resistor, this translates to a LSB of 0.5mAh for QH. QL has an LSB of 2-16 of the LSB of QH.

The accuracy of the coulomb counter listed in Table 2 is calculated by recording the chip coulomb counter and timer data and the start and end of the data, calculating the drift as 6416_Algoritim 02, where t2 and Q2 are the timer and coulomb counter value (QH + QL) at the end of the test, and t1 and Q1 are the timer and coulomb counter at the start of the test. Note, the Timer Register from the fuel gauge can also be used for this test by combining the Timer (0x3E) and TimerH (0xBE) Registers, or the system time can be used. These tests should be done with a fixed load and with no load to measure the offset and gain errors. The error from the coulomb counter contributes to how accurate a fuel gauge can be for an application.

Example of MAX17201/MAX17211 for a CR123 application with a one-year runtime:

Cell capacity: 1500mAh
Runtime: 1 year (8760 hours)
Average load (1500mAh/8670h) = 0.173mA 5000Ω sense resistor can be used, with an offset of 0.2μA

The error contributed to the coulomb counter by the offset in this example is 0.2μA vs. the average load of 173μA, an error of 0.115%. This offset error contributes to 1.725mAh added or subtracted from the total coulomb count over the one-year period.

Additional Circuit Requirements

Although the MAX17201/MAX17211 operate down to 2.3V, they have a 2.9V startup voltage. If an application requires a lower startup voltage, the application circuit should be modified as shown in Figure 2. This schematic requires the BATT and REG3 pin to be supplied by an external voltage > 3V. This can be from a charge pump, regulator, or any other system rail. The maximum current requirement of this IC is 10mA for approximately 400ms during factory nonvolatile memory programming.

External BATT supply schematic.

Figure 2. External BATT supply schematic.

If the application needs to monitor the cell voltage below 2V, the digital block on low voltage can be bypassed by using only the CELLx pin to do the measurements, and typing the CELL1 and CELL2 pins to the > 3V supply as illustrated in Figure 3.

Low-voltage measurement schematic.

Figure 3. Low-voltage measurement schematic.

CELLx is a high-impedance (400Ω typ) pin with a 0 to 2V voltage input range. The 2Ω and 3Ω are used to keep the LSB of the CellX Register the same as normal voltage Registers, while minimizing the current consumption added by this circuit. This mode requires using nPackCfg = 0x0D01, instead of the 0x0C01 listed in the standard configuration. The host software must read the CellX Register, located at address 0x0D9, instead of the VCell Register, which only reports the supply voltage. In this configuration, end-of-life detection with VFOCV is not supported.

Conclusion

The MAX17201/MAX17211 can be used for primary-cell applications with special considerations for the schematic and memory configurations. The minimum changes required are to set the nCGain and nHibCfg Registers and the corresponding nNVCfg0 bits. The sample INI sets up the appropriate Registers and can be tested on the MAX17201 or the MAX17211 IC.

Sample INI

Title = EVKIT Configurator Profile Generated on 2016/09/19 17:42:33
0x180 = 0x0000 //nXTable0 Register
0x180 = 0x0000 //nXTable0 Register
0x181 = 0x0000 //nXTable1 Register
0x182 = 0x0000 //nXTable2 Register
0x183 = 0x0000 //nXTable3 Register
0x184 = 0x0000 //nXTable4 Register
0x185 = 0x0000 //nXTable5 Register
0x186 = 0x0000 //nXTable6 Register
0x187 = 0x0000 //nXTable7 Register
0x188 = 0x0000 //nXTable8 Register
0x189 = 0x0000 //nXTable9 Register
0x18A = 0x0000 //nXTable10 Register
0x18B = 0x0000 //nXTable11 Register
0x18C = 0x0000 //nUser18C Register
0x18D = 0x0000 //nUser18D Register
0x18E = 0x0000 //nODSCTh Register
0x18F = 0x0000 //nODSCCfg Register
0x190 = 0x0000 //nOCVTable0 Register
0x191 = 0x0000 //nOCVTable1 Register
0x192 = 0x0000 //nOCVTable2 Register
0x193 = 0x0000 //nOCVTable3 Register
0x194 = 0x0000 //nOCVTable4 Register
0x195 = 0x0000 //nOCVTable5 Register
0x196 = 0x0000 //nOCVTable6 Register
0x197 = 0x0000 //nOCVTable7 Register
0x198 = 0x0000 //nOCVTable8 Register
0x199 = 0x0000 //nOCVTable9 Register
0x19A = 0x0000 //nOCVTable10 Register
0x19B = 0x0000 //nOCVTable11 Register
0x19C = 0x0000 //nIChgTerm Register
0x19D = 0x0000 //nFilterCfg Register
0x19E = 0x0000 //nVEmpty Register
0x19F = 0x2602 //nLearnCfg Register
0x1A0 = 0x3C00 //nQRTable00 Register
0x1A1 = 0x1B80 //nQRTable10 Register
0x1A2 = 0x0B04 //nQRTable20 Register
0x1A3 = 0x0885 //nQRTable30 Register
0x1A4 = 0x0000 //nCycles Register
0x1A5 = 0x0910 //nFullCapNom Register
0x1A6 = 0x1070 //nRComp0 Register
0x1A7 = 0x263D //nTempCo Register
0x1A8 = 0xF830 //nIAvgEmpty Register
0x1A9 = 0x07D0 //nFullCapRep Register
0x1AA = 0x0000 //nVoltTemp Register
0x1AB = 0x807F //nMaxMinCurr Register
0x1AC = 0x00FF //nMaxMinVolt Register
0x1AD = 0x807F //nMaxMinTemp Register
0x1AE = 0x0000 //nSOC Register
0x1AF = 0x0000 //nTimerH Register
0x1B0 = 0x0000 //nConfig Register
0x1B1 = 0x0204 //nRippleCfg Register
0x1B2 = 0x0000 //nMiscCfg Register
0x1B3 = 0x07D0 //nDesignCap Register
0x1B4 = 0x801C //nHibCfg Register
0x1B5 = 0x0C01 //nPackCfg Register
0x1B6 = 0x0000 //nRelaxCfg Register
0x1B7 = 0x2241 //nConvgCfg Register
0x1B8 = 0x0142 //nNVCfg0 Register
0x1B9 = 0x0006 //nNVCfg1 Register
0x1BA = 0xFC0A //nNVCfg2 Register
0x1BB = 0x0002 //nSBSCfg Register
0x1BC = 0x0000 //nROMID0 Register
0x1BD = 0x0000 //nROMID1 Register
0x1BE = 0x0000 //nROMID2 Register
0x1BF = 0x0000 //nROMID3 Register
0x1C0 = 0x0000 //nVAlrtTh Register
0x1C1 = 0x0000 //nTAlrtTh Register
0x1C2 = 0x0000 //nSAlrtTh Register
0x1C3 = 0x0000 //nIAlrtTh Register
0x1C4 = 0x0000 //nUser1C4 Register
0x1C5 = 0x0000 //nUser1C5 Register
0x1C6 = 0x0000 //nFullSOCThr Register
0x1C7 = 0x0000 //nTTFCfg Register
0x1C8 = 0xC000 //nCGain Register
0x1C9 = 0x0025 //nTCurve Register
0x1CA = 0x0000 //nTGain Register
0x1CB = 0x0000 //nTOff Register
0x1CC = 0x0000 //nManfctrName0 Register
0x1CD = 0x0000 //nManfctrName1 Register
0x1CE = 0x0000 //nManfctrName2 Register
0x1CF = 0x03E8 //nRSense Register
0x1D0 = 0x0000 //nUser1D0 Register
0x1D1 = 0x0000 //nUser1D1 Register
0x1D2 = 0xD5E3 //nAgeFcCfg Register
0x1D3 = 0x0000 //nDesignVoltage Register
0x1D4 = 0x0000 //nUser1D4 Register
0x1D5 = 0x0000 //nRFastVShdn Register
0x1D6 = 0x0000 //nManfctrDate Register
0x1D7 = 0x0000 //nFirstUsed Register
0x1D8 = 0x0000 //nSerialNumber0 Register
0x1D9 = 0x0000 //nSerialNumber1 Register
0x1DA = 0x0000 //nSerialNumber2 Register
0x1DB = 0x0000 //nDeviceName0 Register
0x1DC = 0x0000 //nDeviceName1 Register
0x1DD = 0x0000 //nDeviceName2 Register
0x1DE = 0x0000 //nDeviceName3 Register
0x1DF = 0x0000 //nDeviceName4 Register