Electronics Design AU
Batteries

How Do You Estimate Battery State of Health (SoH) and Internal Resistance in the Field?

Last updated 19 August 2026 · 15 min read

Direct Answer

State of Health (SoH) is a measure of how much a battery has aged relative to when it was new, most commonly expressed as the ratio of current full-charge capacity to original design capacity (capacity-based SoH), and sometimes as the ratio of current internal resistance (or impedance) to its beginning-of-life value (resistance-based SoH). In the field, without a lab, SoH is estimated by two complementary techniques: tracking full-charge capacity through coulomb counting anchored at known full/empty points (the approach used by fuel-gauge algorithms such as TI's Impedance Track), and measuring DC internal resistance from the voltage response to a brief current pulse (DCIR), which rises measurably as a cell ages. Neither method alone is highly accurate; combining periodic capacity re-learning with resistance-pulse checks, and compensating both for temperature and C-rate, is what practical embedded SoH implementations do.

Detailed Explanation

State of Health answers a different question from State of Charge. SoC asks "how full is the battery right now?" SoH asks "how much of the battery is left to lose?" A cell can report 100% SoC while sitting at only 70% of the capacity it had when new: full, but a smaller full. Products that only track SoC eventually run into a symptom their fuel gauge never predicted, a runtime that quietly gets shorter every month, or a cell that can no longer sustain the peak current a motor or radio transmit burst demands. For the SoC estimation methods themselves (voltage-based, coulomb-counting, and combined approaches), see how a fuel gauge IC works. This page picks up where that one leaves off, focused specifically on tracking the cell as it ages.

What "State of Health" Actually Means

There is no single universal definition of SoH, and that's worth stating plainly before citing any numbers. Two definitions dominate in practice, and they measure different things:

  • Capacity-based SoH: the ratio of the cell's current full-charge capacity (FCC) to its original design or nameplate capacity, expressed as a percentage. A cell rated at 3000 mAh new that now reaches only 2400 mAh at a full charge has a capacity-based SoH of 80%. This is the definition most fuel-gauge ICs report, because FCC is a value they already track for SoC calculation.
  • Resistance-based SoH: the ratio of the cell's current DC internal resistance (or AC impedance at a defined frequency) to its beginning-of-life value. Internal resistance rises as a cell ages, from SEI (solid electrolyte interphase) layer growth, electrode particle cracking, and loss of active material, so a resistance ratio above 1.0 indicates aging. This matters most for applications with high peak-current demands, where a cell can still hold rated capacity but sag too far under load to be usable.

The two track different failure modes and don't always move together. A cell can lose capacity from calendar aging while its resistance stays comparatively flat, or vice versa depending on chemistry and storage conditions. TI's Impedance Track algorithm documentation and Analog Devices' MAX17055 datasheet both describe SoH as tracked through more than one of these signals rather than a single number, which is worth keeping in mind before treating any one SoH percentage as complete.

How Coulomb-Counting and Impedance-Track Algorithms Estimate Aging

Fuel-gauge ICs that implement capacity-based SoH build on the same coulomb-counting mechanism used for SoC, extended to re-measure FCC periodically rather than assuming it's fixed. The general approach:

  1. Qualify a discharge (or charge) event. The algorithm looks for a period where the cell goes from a recognised "full" reference point to a recognised "empty" (or vice versa) under conditions stable enough to trust: a sustained current above a minimum threshold, without excessive rest periods or direction reversals in between.
  2. Integrate the coulombs moved during that event. This is the same current-times-time integration used for SoC, but over the full qualifying range rather than a partial one.
  3. Update FCC from the result, then derive capacity-based SoH as FCC ÷ DesignCapacity.
  4. Re-characterise impedance alongside capacity. TI's Impedance Track algorithm (implemented in the BQ27220, BQ27441, and BQ34110 families, among others) measures the cell's impedance during qualified discharge events and updates an internal impedance table across the SoC range, rather than assuming a single fixed internal-resistance value for the cell's whole life. This is what lets the algorithm keep both SoC and SoH accurate as the cell ages, at the cost of needing that first full qualifying cycle (and periodic re-qualifying cycles after) before its estimates are trustworthy, a requirement discussed in practice in the forum thread on a BQ27220 reading SoC inaccurately until its first learning cycle completes.

The practical consequence for embedded firmware: an SoH estimate from one of these gauges is only as good as the most recent qualifying cycle it managed to capture. A product that is always partially charged, always lightly loaded, or frequently rebooted before a discharge event completes may go a long time between valid re-characterisations, and its SoH figure will lag the cell's actual condition. This is a firmware and use-case design problem as much as an algorithm one; see the field-methodology section below.

Capacity-Fade Measurement: Reference Performance Tests vs In-Field Estimation

Battery manufacturers and standards bodies measure capacity fade with a reference performance test (RPT): a full, controlled, low-rate (commonly around C/3, chemistry- and manufacturer-dependent) charge-discharge cycle performed under fixed temperature and rest conditions, repeated at intervals throughout a cycle-life or calendar-life study. IEC 62660-1, which specifies performance and life testing for lithium-ion cells used in electric road vehicle propulsion, defines this kind of controlled capacity and DC-resistance measurement methodology, and is a reasonable reference even for non-automotive products because it's one of the few published standards that specifies the test conditions rather than leaving them to convention.

A deployed product cannot run an RPT: it can't pause a user's device for a slow, controlled discharge at a fixed ambient temperature on demand. In-field SoH estimation instead has to work with whatever charge and discharge events the product's actual usage pattern happens to provide, which is why coulomb-counting-based aging estimation (above) qualifies events opportunistically rather than commanding them, and why in-field capacity numbers are inherently noisier and slower to converge than a lab RPT result. Where a product's development or manufacturing process can afford it, running an actual RPT-style test on a sample of production units, even a single full low-rate cycle at final test, gives a far more trustworthy capacity baseline than anything the field algorithm can achieve on its own, and lets you validate the field algorithm's convergence against a known-good number.

Measuring Internal Resistance in the Field: The DCIR Pulse Method

The practical, low-cost way to estimate internal resistance without a lab impedance analyser is a DC internal resistance (DCIR) pulse test: apply (or measure, if the load is already doing this) a step change in current and record the corresponding step change in terminal voltage.

Rint ≈ ΔV / ΔI

Where ΔV is the voltage drop measured a short, fixed time after the current step (commonly on the order of a few seconds; pulse timing and duration vary by test methodology and are not a fixed constant, so match whatever duration you use consistently between measurements), and ΔI is the current step magnitude. This is the same principle behind the Hybrid Pulse Power Characterization (HPPC) test methodology defined in the USABC/DOE battery test manuals for EV cells, scaled down to whatever current step a given product's load naturally produces (a radio transmit burst, a motor start, a heater turning on) rather than a dedicated lab-grade pulse generator.

Two things make this measurement noisy in a real product, and both need to be controlled for consistent trending:

  • Temperature. Internal resistance is strongly temperature-dependent: a cell reads meaningfully higher resistance cold than at room temperature, independent of aging. Comparing DCIR readings taken at different temperatures without compensation will show a trend that's actually just seasonal or environmental, not aging. Tag every DCIR reading with the temperature it was taken at (most fuel-gauge and BMS ICs already report cell temperature) and either normalise the result or only compare readings taken within a similar temperature band.
  • State of charge and pulse duration. Internal resistance is not flat across SoC: it typically rises toward the low-SoC end of the discharge curve. A DCIR reading taken at 20% SoC is not directly comparable to one taken at 80% SoC. Fix the SoC window you sample in (or record it alongside the reading) so successive measurements are actually measuring the same thing. Pulse duration matters too: a very short pulse captures mostly ohmic resistance, while a longer pulse captures more of the charge-transfer and diffusion components. Consistency between measurements matters more than which exact duration is chosen.

EIS vs Simple DC Resistance: What's Actually Feasible in an Embedded Product

Electrochemical Impedance Spectroscopy (EIS) sweeps an AC excitation across a range of frequencies and measures the cell's complex impedance at each point, producing a Nyquist plot that separates ohmic resistance, charge-transfer resistance, and diffusion effects into distinct features. It is the most information-rich technique available and is standard in a lab characterisation setting, but it needs precision signal generation and synchronous measurement hardware that most embedded products simply don't carry.

A handful of fuel-gauge and BMS ICs (and some standalone impedance-measurement front ends) implement a simplified, low-frequency impedance measurement on-chip, enough to separate ohmic resistance from a slower reaction-related component without a full spectroscopy sweep, and this is genuinely useful where the BOM cost is justified. For most embedded product designs, though, the realistic choice is DC pulse resistance rather than EIS: it needs only what's usually already present (a current-sense element and a voltage ADC), it can be measured opportunistically from load transients the product already produces, and it correlates well enough with aging trends for a practical SoH indicator, even though it can't separate the underlying electrochemical mechanisms the way EIS can. Reserve EIS for characterisation work on the bench (validating a cell model, root-causing a resistance increase, or qualifying a new cell source) rather than trying to build it into a shipping product's firmware.

Calendar Aging vs Cycle Aging

A cell loses capacity and gains resistance from two largely independent aging mechanisms, and a field SoH estimate that only accounts for one will be wrong for products dominated by the other:

  • Cycle aging: capacity and resistance degradation driven by the number and depth of charge-discharge cycles the cell has been through. This is what coulomb-counted "full cycle equivalents" tracking captures.
  • Calendar aging: degradation that happens simply from time and storage conditions (state of charge held, and especially temperature) independent of cycling. A cell stored for a year at high SoC and high temperature can lose meaningful capacity even if it was barely cycled.

A product that sits mostly idle at a fixed SoC (a backup-power device, an infrequently used tool) accumulates calendar aging far faster relative to its cycle count than a frequently used one, and a fuel gauge that only re-learns capacity from cycling events may never get a chance to catch that. Where this matters, track elapsed time and average storage SoC/temperature alongside cycle count, and treat a long idle period at high SoC as a trigger to view the next capacity re-learn with more weight (or, if the product schedule allows it, to opportunistically prompt one).

What Counts as "End of Life"? The 80% Convention and Its Limits

The most commonly cited SoH end-of-life threshold, 80% of original rated capacity, originates from the electric vehicle industry: the USABC's Electric Vehicle Battery Test Procedures Manual set a 20% capacity loss as the point at which a traction battery pack was considered to have reached the end of its usable first life. It has since become a widely quoted shorthand well beyond EVs, but it is an industry convention adopted for a specific application (EV traction packs, where a 20% range/power loss materially affects the vehicle), not a universal physical or safety limit, and it should be quoted as such rather than as a defined spec for every product category.

For a consumer or industrial embedded product, the SoH threshold that actually matters is whatever level of degraded capacity or resistance would make the product fail its own functional requirements: a wearable that needs to survive a full day, a sensor node that needs to make its reporting interval before the next scheduled service visit, a tool that needs to sustain a peak current draw. Define the threshold from the product's own runtime and peak-current requirements first; borrow the 80% figure only as a starting reference point, and expect to justify or adjust it against your own product's actual failure mode.

A Practical Field SoH Estimation Methodology for Embedded Products

Putting the above together, a workable field SoH implementation for most embedded and IoT products looks like this:

  1. Use a fuel-gauge IC that already implements capacity and impedance tracking where the BOM and integration effort support it (TI's Impedance Track family or a similar model-based gauge with age tracking, such as the MAX17055's ModelGauge m5). Building an equivalent from scratch in firmware is possible but is a substantial characterisation and validation effort. See how a fuel gauge IC works for what these algorithms are already doing before deciding to reimplement it.
  2. Qualify capacity re-learns opportunistically, not on a forced schedule. Trigger the gauge's characterisation logic (or your own coulomb-counting re-anchor) whenever the product's natural usage produces a qualifying full charge or discharge event, rather than interrupting normal operation to force one.
  3. Capture DCIR pulses from transients the product already produces (a radio TX burst, a motor start, a heater or actuator turning on), tagged with the temperature and approximate SoC at the time, rather than trying to synthesise a dedicated test pulse.
  4. Normalise for temperature and SoC before trending. A single raw reading is not meaningful; a trend of readings taken under comparable conditions is.
  5. Track elapsed time and storage conditions, not just cycle count, so calendar-dominated aging in lightly used products doesn't go undetected.
  6. Define your own end-of-life threshold from the product's functional requirements, using the 80%-capacity convention only as a starting reference rather than a target to hit.
  7. Validate the field estimate against a bench reference on a sample of production units (an RPT-style controlled cycle, or at minimum a controlled DCIR measurement at a known temperature and SoC), so you know how much to trust the in-field number before shipping it to a user-facing display or a maintenance-scheduling decision.

Design Considerations

  • Don't expose a raw SoH percentage to end users without smoothing. A single noisy DCIR reading or an early, poorly qualified capacity re-learn can produce a step change in the reported number that looks alarming but isn't representative. Filter or trend the value before displaying it, and consider showing a qualitative indicator (Good / Fair / Replace Soon) rather than a precise percentage the algorithm can't actually back up early in the product's life.
  • Sense-resistor and ADC precision limit resistance-pulse resolution. A DCIR measurement is only as good as the ΔV and ΔI it's built from; a noisy current-sense path or a coarse ADC will show resistance "changes" that are really measurement noise. This is the same current-sense design discipline covered for coulomb counting generally in how a fuel gauge IC works.
  • SoH tracking is a firmware and data-retention design problem, not just an algorithm choice. Where the fuel gauge IC's own non-volatile learned parameters aren't sufficient (for example, if the gauge is ever replaced or reset independently of the cell), the product needs its own persistent store for cycle count, elapsed time, and capacity/resistance history to avoid losing aging history across a firmware update or a fuel-gauge IC fault.
  • Protection and BMS thresholds shouldn't be hard-coded against beginning-of-life resistance. A battery protection circuit or BMS that sets its overcurrent or low-voltage cutoff based only on a fresh cell's internal resistance may trip prematurely, or fail to trip in time, as the cell ages and its resistance rises. Where the design allows it, consider whether protection thresholds need margin for end-of-life resistance rather than only beginning-of-life resistance.
  • Fuel-gauge selection, firmware aging methodology, and protection-threshold margin work together as one subsystem-level tradeoff, and benefit from being designed as one system rather than assembled from independently chosen parts. This is part of what Zeus Design's electronics design service covers for battery-powered product development.

Common Mistakes

  • Treating SoC and SoH as the same thing. A gauge reporting 100% SoC only means the cell is as full as it currently can get: it says nothing about how much smaller that "full" has become. Products that surface only SoC to firmware logic (for low-power warnings, for example) without any SoH awareness will eventually surprise users with a shorter runtime than the SoC display implied all along.
  • Comparing DCIR or capacity readings taken at different temperatures or SoC windows as if they were an aging trend. Without normalising for temperature and SoC, a resistance "increase" observed over a week may be entirely explained by a colder measurement environment rather than any actual cell degradation.
  • Forcing dedicated characterisation cycles that annoy the user or waste cycle life. Deliberately draining and recharging a battery purely to force a fuel-gauge learning cycle burns a real cycle of the cell's finite cycle life and, in a user-facing product, is disruptive. Opportunistic qualification from normal usage is almost always the better tradeoff.
  • Assuming the 80% end-of-life convention applies without checking it against the product's actual requirements. A borrowed automotive-industry threshold may be far too conservative for a product that can tolerate a 40% capacity loss and still meet its runtime spec, or not conservative enough for one where even a small resistance rise causes brownouts under peak load.
  • Ignoring resistance-based aging because the fuel gauge only reports a capacity-based SoH number. A cell can retain most of its rated capacity while its resistance has risen enough to cause voltage sag and brownouts under a peak-current pulse the product depends on, a failure mode a capacity-only SoH figure won't predict.

Frequently Asked Questions

Can I estimate SoH from voltage alone, without coulomb counting or a resistance pulse?
Not reliably. Open-circuit voltage maps to state of charge, not state of health — a fresh cell and an 80%-aged cell can rest at the same voltage at the same SoC. Voltage-only tracking can pick up gross symptoms of aging indirectly (for example, a cell that reaches the charge-termination voltage after noticeably less coulomb throughput than before), but it cannot separate capacity fade from resistance rise, and it gives no early warning before the user notices reduced runtime. A dedicated capacity or resistance measurement is needed for anything beyond a rough trend.
Does SoH degrade the same way for every lithium chemistry?
No. LFP (LiFePO4) cells typically show a flatter capacity-fade curve for much of their life and a longer cycle life at a given depth of discharge than NMC or NCA cells, but LFP's very flat OCV-SoC curve also makes voltage-based re-anchoring less reliable, which affects how accurately a coulomb-counting gauge can correct itself. See the chemistry-specific tradeoffs in the LFP vs NMC vs NCA comparison before assuming an SoH threshold or aging curve from one chemistry applies to another.
How often should a product re-check SoH in the field?
There's no universal figure — it depends on duty cycle and how safety- or performance-critical the estimate is. A reasonable starting point for many consumer and industrial products is to opportunistically capture a DCIR pulse or capacity re-learn whenever a qualifying full charge-discharge cycle or an idle rest period naturally occurs (rather than forcing one on a fixed timer, which wastes cycles and energy), and to trend the result over weeks to months rather than reacting to any single reading.

References

Related Questions

Related Forum Discussions