How Does a Fuel Gauge IC Measure Battery State of Charge?
Last updated 29 June 2026 · 10 min read
Direct Answer
A fuel gauge IC estimates the battery's state of charge (SoC) — how full it is as a percentage — using one of two techniques: voltage-based estimation (comparing open circuit voltage to a known discharge curve for that cell chemistry) or coulomb counting (integrating charge in and out using a sense resistor in the current path). Modern gauges combine both techniques: they use a voltage model to establish the initial SoC, then track coulombs to follow it accurately during discharge and charge. The result is a real-time SoC estimate, typically ±1–5% accurate, delivered over I2C.
Detailed Explanation
A Li-ion battery's state of charge is not directly measurable — you can't simply read it off a terminal. Voltage is a rough proxy at rest, but under charge or discharge current the terminal voltage shifts away from the open circuit voltage (OCV) due to internal resistance, making it unreliable for anything requiring accuracy. A dedicated fuel gauge IC solves this problem by running a model of the cell's electrochemical behaviour in firmware, updating it continuously from measurements of voltage, current, and temperature.
The foundation for understanding why this is hard is the Li-ion voltage curve described in what a lithium-ion battery is and how it works: the discharge curve is very flat between about 20% and 80% SoC, meaning a small change in measured voltage corresponds to a large and uncertain range of SoC. At 3.7V, the cell could be anywhere from about 30% to 70% full depending on temperature, C-rate, and age — far too wide a range to be useful.
The Two Estimation Techniques
Voltage-based SoC (OCV method)
At zero current, a Li-ion cell's open circuit voltage is a repeatable function of its SoC at a given temperature. A fuel gauge IC like the MAX17048 stores a lookup table of OCV vs. SoC for a specific cell model, derived from characterisation data. At startup, the IC reads the OCV (waiting until the voltage has settled from any prior load) and looks up the initial SoC.
The problem is that the OCV-SoC relationship is only valid at zero current. As soon as the cell discharges, the terminal voltage drops below OCV by I × Rint (load current times internal resistance), which shifts the measured voltage without a corresponding change in SoC. Without compensation, a voltage-based gauge significantly underestimates SoC under load and overestimates it during charging.
Coulomb counting
Coulomb counting places a precision sense resistor (typically 5–20 mΩ) in series with the battery and integrates the current flowing through it over time. Each coulomb of charge removed from the cell decreases the remaining capacity by one coulomb; each coulomb added increases it. The accumulated integral tracks the actual electrons moved, not the terminal voltage, making it load-independent. For designs that need raw current data without a dedicated fuel gauge — such as monitoring multiple power rails rather than a single battery — a standalone INA219 or INA226 I2C current monitor performs the same shunt measurement with direct register access and no cell model required.
The limitation: coulomb counting accumulates error over time. Any offset in the current sensor, any temperature drift in the sense resistor, or any missed correction at the start of a charge cycle leads to a slowly drifting SoC estimate. Most coulomb-counting gauges use a voltage "re-anchor" at known SoC points — most reliably at end of charge (full) and end of discharge (empty) — to reset the accumulated error.
Combination (model-based) approaches
Modern gauges combine both. The Maxim/Analog Devices ModelGauge algorithm (used in MAX17048, MAX17055, MAX17263) tracks the compensated terminal voltage using a model that accounts for internal resistance and its variation with temperature and load. The result is closer to "voltage-based coulomb counting" than either technique alone: it doesn't need a sense resistor (simpler BOM), but it maintains accuracy under real load conditions by modelling the voltage-to-SoC relationship across operating conditions.
Texas Instruments' Impedance Track algorithm (used in BQ27220, BQ27441, BQ34110) performs full coulomb counting combined with continuous impedance measurement — it tracks cell degradation over the battery's life by re-characterising the cell's impedance as it ages, adjusting the full-charge capacity accordingly. This produces very accurate lifetime SoC and State of Health (SoH) estimates, at the cost of more firmware integration work.
Key ICs
MAX17048 / MAX17049 (Analog Devices)
The simplest fuel gauge on the market. It uses ModelGauge with no sense resistor — just Vin, GND, SDA, SCL, and the ALRT pin. One-cell (MAX17048) and two-cell series (MAX17049) variants. SoC accuracy is typically ±2–3% at room temperature. The IC requires a cell model file (a set of coefficients characterising the specific cell chemistry), which Maxim's EZ application provides from measured cell data or from their existing model library. Integration is genuinely simple: 6-pin SOT-23, minimal external components, and a short I2C initialisation sequence.
BQ27220 (Texas Instruments)
A single-cell gauge implementing Impedance Track. Requires a sense resistor (0.01 Ω is typical), SDA/SCL, and a BAT pin that monitors cell voltage. The BQ27220 runs TI's GPCCHEM algorithm, calibrating itself to the specific cell over the first few full charge-discharge cycles. Reports SoC, remaining capacity in mAh, time-to-empty, time-to-full, temperature, and State of Health. Requires a TI configuration file (.gg.csv format, programmed via the BQ Studio tool). More capable than the MAX17048 but requires more integration work.
BQ27441-G1 (Texas Instruments)
A simpler Impedance Track gauge in a smaller package (12-pin SON) with an integrated sense resistor. Uses TI's Golden Image programming flow. A good middle-ground choice for designs that want TI's lifetime accuracy tracking without the full BQ27220 integration effort.
I2C Interface and Integration
All three ICs above communicate over I2C. The registers of interest for a typical embedded application:
| Register | Description |
|---|---|
StateOfCharge | Battery percentage, 0–100% |
Voltage | Cell terminal voltage in mV |
AverageCurrent | Filtered current (positive = charging, negative = discharging) |
TimeToEmpty / TimeToFull | Estimated minutes remaining |
Temperature | Internal die temperature (approximation of cell temperature) |
The ALRT or GPOUT pin asserts when SoC crosses a programmed threshold (e.g. low battery at 15%) — useful for triggering a hardware interrupt rather than polling the I2C bus continuously. See how I2C works for the protocol basics if you need a refresher on addressing and read sequences.
Relationship to a Battery Management System
A fuel gauge IC estimates SoC — it does not protect the cell or balance multi-cell packs. A battery management system (BMS) handles protection (overvoltage, undervoltage, overcurrent, temperature cutoffs) and cell balancing. In a complete battery pack design, the gauge and the BMS are complementary: the BMS ensures the cell operates within safe limits; the gauge tracks how much usable capacity remains.
In a single-cell Li-ion product (the most common embedded design), a standalone protection IC (e.g. DW01A) handles protection, and a separate fuel gauge IC handles SoC. In multi-cell designs or commercial batteries, the BMS often incorporates SoC estimation internally.
Calibration and First-Use Accuracy
Fuel gauge ICs give the most accurate readings after one or more full charge-then-discharge cycles from the specific cell in the final design, at the operating temperature. Until that calibration cycle, the SoC estimate may be off by 10% or more at extremes, particularly if the cell model was not characterised against the actual cell chemistry or capacity.
For the MAX17048, running Maxim's EZ software with the actual cell and measuring a full OCV curve produces a custom model file that gives better accuracy than the nearest generic model. For BQ27220 and similar TI gauges, the first charge/discharge cycle performs Impedance Track learning, after which the estimates significantly improve.
If your product ships with a pre-charged cell, the first SoC reading at startup will be a best-guess based on OCV; it should converge to an accurate estimate within one full cycle.
Estimating Battery Life vs. Measuring SoC
A fuel gauge IC tells you the current SoC; calculating predicted battery life for your product still requires knowing the typical duty-cycle weighted current consumption. The fuel gauge's TimeToEmpty output does this automatically based on the recent average current, but it will converge slowly under rapidly varying loads (sleep/active duty cycling), which is common in embedded IoT designs. For design-time estimates, the hand-calculation approach in the battery life article gives you a faster, load-pattern-aware answer.
Design Considerations
- Sense resistor tolerance and placement (for coulomb-counting gauges): the current measurement accuracy depends on the sense resistor's precision (1% or better) and its thermal stability. Place the sense resistor close to the gauge IC with short, direct Kelvin connection traces — a long sense path adds trace resistance that shifts the current reading.
- Cell model quality: for voltage-model gauges like the MAX17048, the accuracy of the cell model is the primary limiting factor. Using a generic model for a different cell chemistry or capacity can produce ±10–15% SoC errors at partial states. Always characterise against the specific cell if the product needs better than ±5% accuracy.
- I2C pull-up values: fuel gauge ICs typically operate at 3.3V or lower supply voltages. I2C pull-ups to 3.3V (typically 4.7 kΩ) are standard; pull-ups to 5V with a 3.3V device require a level shifter.
- ALRT interrupt on the microcontroller's wake-up pin: for deep-sleep designs, route the ALRT or GPOUT pin to an external interrupt pin that can wake the MCU. This lets the device sleep without polling the I2C bus, only waking to act on a low-battery or charge-complete event.
- Low-power operation: most small fuel gauge ICs draw under 0.1 mA continuously, which is acceptable for most designs. However, in extremely power-constrained devices (multi-year coin cell lifetimes), even a 50 µA quiescent gauge represents 1.2 mAh per day — comparable to an entire year's capacity of a small cell. In those cases, a simple periodic voltage measurement without a fuel gauge is often the right choice.
If your product requires a complete power management subsystem — fuel gauge selection, cell protection, charging IC integration, and embedded firmware to report battery health — Zeus Design's electronics design service covers this as part of an end-to-end portable electronics design engagement.
Common Mistakes
- Not including a cell model / using the wrong cell model: the MAX17048 and similar voltage-model gauges ship with default models that may not match your cell. Shipping with a wrong model produces wildly inaccurate SoC readings that users report as "battery percentage jumping" or "device dying at 20%."
- Using terminal voltage alone for SoC under load: a simple ADC reading of the battery voltage does not give usable SoC during discharge. Under even moderate load the terminal voltage can read 200–400 mV lower than OCV, corresponding to a 30–50% SoC error at the flat part of the discharge curve.
- Floating the ALRT/GPOUT pin: if the alert pin is configured to assert on a threshold but the pin is left floating (no pull-up, no GPIO connection), the alert feature provides no benefit. Always route it to a GPIO, even if you don't initially use it — leaving it connected means you can add low-battery interrupt functionality in firmware without a hardware respin.
- Polling the I2C bus too frequently: the fuel gauge's output typically updates every 1–5 seconds. Polling at 100 ms or faster wastes power and bus bandwidth with no improvement in accuracy.
- Ignoring temperature compensation: Li-ion cell capacity drops significantly below 0°C and at high temperatures. A fuel gauge that doesn't receive temperature data (or uses the default die temperature assumption) will overestimate remaining capacity in the cold — a common complaint in products used outdoors in winter.
Frequently Asked Questions
- Can I just measure battery voltage and calculate SoC from that?
- For Li-ion cells, measuring terminal voltage directly is unreliable under load because the cell's internal resistance creates a voltage drop that shifts the apparent SoC. At rest (no current), open circuit voltage (OCV) maps reasonably well to SoC via a lookup table for that cell chemistry, but you need to wait at least 30 minutes after removing load for the voltage to settle — impractical for a live device. Under charge or discharge current, the terminal voltage diverges significantly from the OCV curve. This is why fuel gauge ICs use compensated voltage models or coulomb counting rather than simple voltage measurement.
- Do I need a fuel gauge IC on every battery-powered device?
- Not necessarily. If your product only needs a low-battery warning at a rough threshold (e.g. cut off at 3.2V) and doesn't display a battery percentage, a simple comparator or voltage divider to an ADC pin can be sufficient and much simpler to implement. Fuel gauge ICs are warranted when the product needs an accurate percentage indicator, when the application needs to estimate remaining runtime, or when accurate SoC tracking is required for a power management decision that would be wrong if the estimate were off by 20%.
References
Related Questions
What Is a Battery Management System (BMS)?
A BMS monitors and protects multi-cell Li-ion packs with cell balancing, state-of-charge estimation, temperature monitoring, and communication.
What Is a Battery Protection Circuit?
A Li-ion protection circuit prevents overcharge, overdischarge, overcurrent, and short circuits using a dedicated IC and back-to-back MOSFETs.
How Do You Calculate Battery Life for an Embedded Device?
Battery life = capacity (mAh) ÷ average current (mA). Learn how to calculate average current for embedded devices with active and sleep states.
How Do Lithium-Ion Batteries Charge?
Li-ion batteries charge via CC/CV method to 4.2V per cell. Learn how each charge phase works, what terminates charging, and what charger ICs handle.
What Is a Lithium-Ion Battery and How Does It Work?
Li-ion batteries have a 3.6–3.7V nominal cell voltage and high energy density. Learn how they work, what C-rate means, and essential Li-ion safety rules.
What Is I2C (Inter-Integrated Circuit)?
I2C is a two-wire serial bus for addressing multiple peripherals over shared SDA/SCL lines. Learn how addressing, speed grades, and pull-up resistors work.