Coulomb counting estimates battery charge by adding up the current flowing into and out of a battery over time. With a known starting State of Charge (SoC) and a suitable capacity reference, that charge balance can be converted into an estimated SoC percentage.
The important word is estimated. A precise-looking percentage does not mean the monitor directly measured the battery’s remaining capacity. An incorrect starting value, a small current-sensor offset, or an outdated capacity setting can produce a believable but wrong result.
For solar storage, RV batteries and stationary systems, understanding this distinction helps explain why a display may drift during partial cycling or change after synchronization. The following calculations are hypothetical educational examples, not measurements of a particular battery or promises about BMS accuracy.
What coulomb counting measures—and what it needs
Current is the rate of charge flow. Coulomb counting integrates that rate over time to estimate charge transferred, then updates an existing charge inventory. It is a tracking method, not an independent measurement of total battery capacity.
A current sensor supplies the measurements. Some systems use a shunt resistor and measure its voltage drop; others use different sensing arrangements. TI’s technical article on battery-current monitoring describes dedicated coulomb-counter hardware and explains why measurement offset matters when readings are integrated.
Keep these quantities separate:
| Quantity | Unit | Meaning in this calculation |
|---|---|---|
| Current | A | Instantaneous or interval-average charge-flow rate |
| Transferred charge | Ah | Current accumulated over time; 1 Ah equals 3,600 coulombs |
| Capacity reference | Ah | Estimated full charge capacity on the chosen operating basis |
| SoC | % | Estimated remaining charge divided by that capacity reference |
| Energy | Wh or kWh | Charge transfer weighted by voltage, not Ah alone |
Nominal capacity is a rated value under stated test conditions. Usable capacity refers to what is available within a defined operating window and conditions. These need not be identical, especially after aging or under different temperatures and loads.
Also check what a monitor’s percentage represents: chemical SoC, an estimated full-charge capacity basis, or a user-accessible window with reserves excluded. Mixing those definitions can make otherwise correct arithmetic misleading.
The formula: current, time and a consistent sign
Here, positive current means charging and negative current means discharging. Some equipment uses the opposite convention; either works if it is applied consistently.
For an interval represented by its average current:
ΔQ (Ah) = average current (A) × duration (h)
For sampled measurements with intervals expressed in seconds:
ΔQ (Ah) ≈ Σ[Iₖ × Δtₖ / 3,600]
This is a discrete approximation to the current integral. An instantaneous sample is not automatically the true average of the following interval. Rapid load changes, gaps or inaccurate timestamps can make the approximation imperfect.
With a fixed capacity reference and ideal charge accounting:
Estimated SoC (%) = starting SoC (%) + 100 × cumulative ΔQ / capacity reference (Ah)
Energy requires voltage as well: E (Wh) = ∫V(t)I(t)dt, when time is measured in hours. Multiplying Ah by a nominal voltage gives an approximation, not a complete record of delivered energy when voltage changes. Neither equation by itself predicts the AC energy available after inverter losses.
Worked example: a time-segmented Ah ledger
Assume a hypothetical battery has 100 Ah of usable capacity on a defined monitoring basis and starts at 60% SoC. Its estimated starting inventory is therefore:
100 Ah × 0.60 = 60 Ah
For this example, capacity remains constant, current averages are exact, timing is exact, charge efficiency is 100%, and unmeasured losses are zero. The reference window is an accounting assumption—not a recommendation to operate a real battery between protection limits.

| Time interval (elapsed) | Average current | Charge added/removed | Cumulative Ah change | Estimated remaining charge | Estimated SoC |
|---|---|---|---|---|---|
| Start | — | — | 0 Ah | 60 Ah | 60% |
| 0–2 h | −10 A | −20 Ah | −20 Ah | 40 Ah | 40% |
| 2–3 h | +15 A | +15 Ah | −5 Ah | 55 Ah | 55% |
| 3–3.5 h | −8 A | −4 Ah | −9 Ah | 51 Ah | 51% |
| 3.5–5.5 h | 0 A | 0 Ah | −9 Ah | 51 Ah | 51% |
The first row of operation removes 10 A × 2 h = 20 Ah. The charging interval adds 15 A × 1 h = 15 Ah. The next discharge removes 8 A × 0.5 h = 4 Ah.
Thus, the net change is −20 + 15 − 4 = −9 Ah. Adding it to the starting inventory gives 60 − 9 = 51 Ah, or 51/100 × 100 = 51%.
“Remaining charge” here means the calculated inventory sometimes displayed as remaining capacity. It is not a new measurement proving that the battery’s full usable capacity is 51 Ah. The denominator remains 100 Ah throughout this ideal ledger.
A perfect ledger cannot discover an unknown starting SoC
Now suppose the initial SoC is uncertain: it could be anywhere between 50% and 70%, with all other assumptions unchanged.
The same current history still tells us that 9 Ah was removed net. On the 100 Ah basis, that is a reduction of nine percentage points. The ending estimate is therefore 41–61%, not a uniquely determined 51%.
If there is no credible starting estimate at all, the integrator knows only relative charge movement. Continuing to count does not resolve the missing absolute starting value.
This matters after a monitoring reset, battery replacement or missing data. A default percentage is not evidence of the actual starting state. An absolute estimate requires an additional justified reference, such as a product-specific synchronization event or suitable voltage/model information.
Ideal model vs real BMS estimation errors
Movassagh and colleagues’ peer-reviewed analysis of coulomb counting separates current-measurement, integration, capacity and timing uncertainties. It also identifies initial SoC as a necessary input. Its theoretical and simulation analysis is not a universal accuracy specification for commercial BMS products.
| Error source | Ideal-model assumption | Real-world effect | What a correction must address |
|---|---|---|---|
| Initial SoC uncertainty | Starting inventory is known | The whole trajectory starts too high or low; accurate integration cannot remove that initial error | A credible absolute reference, with its own uncertainty |
| Current measurement and integration drift | Correct current averages and elapsed time | Constant offset accumulates with time; gain error changes counted throughput; sampling and timing errors distort the integral | Appropriate sensing, calibration, time accounting and independent correction |
| Capacity estimation error | The Ah denominator stays correct | Aging or changed usable capacity makes the same transferred Ah represent a different SoC change | A suitable capacity estimate and clearly defined operating basis |
These errors behave differently. A starting error can remain even with perfect subsequent readings. A constant sensor bias grows with elapsed time. A capacity error scales the estimated change relative to transferred charge. Calling all three simply “drift” hides the reason a correction may fail.
How a tiny current offset becomes a large charge error
Assume, hypothetically, that the actual net current is zero but the sensor reports +0.05 A continuously for 72 hours. With our charging-positive convention, the monitor records fictitious incoming charge:
Offset error = +0.05 A × 72 h = +3.6 Ah
On a 100 Ah capacity basis:
SoC error = 3.6/100 × 100 = +3.6 percentage points
An ideal 60% starting estimate would become 63.6% even though no real charge was added. A negative offset would move it in the opposite direction. Under discharge, a positive offset also makes the measured current less negative, understating charge removed.
This example isolates a fixed bias. Random noise does not necessarily accumulate in the same deterministic way, and real devices may compensate for offset or apply other corrections. The assumed 0.05 A is neither a typical sensor specification nor an acceptable error target.
For low-current standby or long partial cycles, ask whether the documented measurement behavior covers that operating range—not merely whether the display shows small increments.
Efficiency, aging and sampling change the simple model
Coulombic efficiency concerns charge recovered relative to charge supplied under defined conditions. It is not the same as energy efficiency, which also reflects voltage behavior and losses.
For illustration only, if our charging interval used a hypothetical charge-accounting factor of 0.98, the 15 Ah terminal input would contribute 14.7 Ah to the modeled inventory. The final result becomes 60 − 20 + 14.7 − 4 = 50.7 Ah, or 50.7%. The factor must come from an appropriate model or documentation in an actual system; it is not a generic setting for lithium batteries.
Capacity errors also matter. Imagine a different battery that starts genuinely full but now provides 80 Ah on the relevant basis. After removing 20 Ah, its remaining fraction is 60/80 = 75%. A monitor still using 100 Ah would estimate 80% from a full starting anchor. Synchronizing the starting percentage alone has not repaired the wrong denominator.
Temperature and discharge conditions can change accessible capacity and voltage behavior without indicating permanent aging. Self-discharge does not flow through the external current sensor, and internal consumption or balancing may fall outside its measurement boundary. How a system accounts for these depends on its architecture.
A shorter sampling interval can capture more variation, but sampling frequency alone does not establish accuracy. Sensor bandwidth, averaging, missing samples and timebase quality still matter. The ideal ledger uses interval averages; a sparse log of instantaneous readings may not reproduce them.
How real systems reduce accumulated uncertainty
Real BMS and battery-monitor designs may combine charge tracking with other information. Available strategies differ; a product should not be assumed to implement every method below.

- Voltage and rest information: A chemistry-specific open-circuit-voltage relationship can provide an independent SoC indication after suitable relaxation. A loaded terminal voltage includes effects that must not be confused with OCV.
- Synchronization: A monitor can recognize a documented reference condition. The Victron SmartShunt operation manual, for example, describes full-charge synchronization based on voltage, tail current and time together—not voltage alone.
- Capacity learning: Qualified observations can update the estimated capacity instead of indefinitely retaining a new-battery rating. Required events and acceptance conditions are device-specific.
- Temperature-aware and model-based correction: Models can combine current, voltage and temperature information, accounting for behavior that a bare Ah sum misses. Their reliability still depends on model suitability and input quality.
LiFePO4 complicates voltage correction because much of its OCV–SoC relationship is relatively flat. PowerUp’s discussion and measured voltage curves illustrate why a small voltage uncertainty can correspond to substantial SoC uncertainty in that region. This does not mean voltage is useless; it means an isolated mid-range reading is a weak anchor.
Resting reduces load-related voltage effects but does not eliminate hysteresis, characterization error or sensor uncertainty. For the distinction between resting and loaded readings, see our lithium battery voltage chart guide.
Interpreting a displayed SoC without overtrusting it
When evaluating a monitor or unexplained reading, establish the starting reference, capacity basis, current sign, measurement boundary and correction behavior first. A gradual shift during long standby suggests different questions from an abrupt adjustment following synchronization.
Ask for validation conditions rather than an unqualified accuracy percentage: battery chemistry, temperature range, aging state, current profile, reference measurement and time since initialization all affect what a claim means. A sharp correction is not automatically a hardware failure, but repeated unexplained jumps deserve documentation-led investigation.
Coulomb counting is valuable because it follows charge movement while a battery is operating. Its limits come from the starting inventory, measurement chain and capacity model. Treat SoC as a supported estimate, not an exact fuel level or a replacement for protection limits. For the wider separation between estimation, monitoring and protection, read our battery management system guide; do not bypass protections or force charge/discharge endpoints to make a percentage look correct.
