Ionworks
← All posts

Modeling

Jul 6, 2026

State of charge vs state of energy: why SoC overstates your runtime

State of charge counts coulombs; runtime under a power load depends on energy. PyBaMM simulations of an NMC cell separate the two effects that make SoC overstate time to empty, and show why the gap grows with power.

Actual runtime remaining plotted against state-of-charge reading for discharge powers from C/20 to 2C, every curve sitting below the ideal diagonal and high-power curves terminating at a positive state of charge

Your phone reads 40%. You assume you have 40% of your time left before it dies. You almost certainly have less, and if you are pushing the phone hard, meaningfully less. The number on the screen is state of charge, and state of charge counts electrons, not minutes. What you actually care about is energy, and the two do not track each other once a battery is under load.

Short answer: for anything that draws roughly constant power, state of charge overstates how much runtime is left, and the error grows with power. Two separate effects are responsible. The first comes from the shape of the open-circuit voltage curve and is present even at vanishingly small current. The second comes from the relationship between power, voltage, and current under load, and grows with discharge rate. The rest of this post uses PyBaMM simulations run by Ionworks to separate the two, quantify them on a real NMC cell, and show why the metric on your dashboard matters for power-driven applications.

Charge and energy are not the same currency

State of charge (SoC) is the ratio of charge remaining to charge capacity, measured in amp-hours. It is what a coulomb counter tracks: integrate the current, divide by capacity. State of energy (SoE) is the ratio of energy remaining to energy capacity, measured in watt-hours. The link between them is voltage. Energy is the integral of voltage over charge, so a coulomb is worth more energy when the cell is full and its voltage is high than when it is nearly empty and its voltage has sagged.

This distinction is well established in the literature. There is a substantial body of work on estimating SoE for range prediction, using Kalman-filter variants and neural networks, and a direct experimental comparison of the two metrics has shown the SoC-to-SoE difference grows with C-rate, with lower temperature, and with age. That work frames SoE as a quantity a battery management system should estimate. The framing here is different: we want to show, mechanistically, why the charge number on a display misrepresents time to empty for a power load, and what sets the size of the error.

Two effects, not one

Effect one is energy weighting, and it exists at zero current. Because the open-circuit voltage falls as the cell empties, the charge sitting at the bottom of the tank is worth less energy than the charge drawn from the top. Take the equilibrium voltage curve, integrate it, and the remaining energy fraction always sits below the remaining charge fraction. This is a property of the chemistry, not the load. It holds when the current is a microamp.

Left: open-circuit voltage of the NMC811/graphite cell as it discharges, measured from a slow C/20 sweep. Right: the resulting state of energy plotted against state of charge. The energy curve bows below the diagonal because low-SoC charge is delivered at lower voltage.

The bow in the right panel is Effect one on its own. At 50% state of charge, the equilibrium state of energy is about 46%. Modest, but it never goes away, and it is entirely invisible to a coulomb counter.

Effect two is the power-voltage-current relationship under load, and it grows with rate. A load that draws constant power draws current inversely proportional to terminal voltage: I = P / V. As the cell discharges and its voltage sags, the current must rise to hold power constant. Higher current means a larger overpotential, which drops the terminal voltage further, which raises the current again. The feedback accelerates toward the end of discharge and trips the lower voltage cutoff earlier than a charge-based estimate would predict. Some charge is still in the cell when it cuts off, but it cannot be delivered at the required power.

Simulating it on a real cell

We simulate a virtual LG M50 (NMC811/graphite, 5 Ah nominal) using the Chen 2020 parameter set, the widely used parameterization of this cell. The model is PyBaMM's DFN with a lumped thermal model, so self-heating raises the cell temperature during fast discharge and recovers capacity the way a real cell does. Reference capacity and energy come from a slow C/20 discharge: 5.09 Ah and 18.9 Wh, a mean voltage of 3.70 V.

For each discharge we hold power constant and run to the 2.5 V cutoff, tracking charge passed (which sets SoC) and energy delivered (which sets SoE). Because power is constant, the fraction of runtime remaining at any instant equals the state of energy exactly. That makes the comparison direct: plot the true runtime fraction against the charge reading a coulomb counter would show.

The mechanism is visible in a single discharge. Under constant current the current is flat by definition. Under constant power at the same nominal rate, it climbs.

Terminal voltage (left) and current (right) for a constant-current and a constant-power discharge of the same cell at a 1C nominal rate. Under constant power the current rises from 4.7 A to 7.5 A as the voltage falls, and the cell reaches cutoff sooner.

State of charge overstates the time you have left

Plotting the true runtime remaining against the state-of-charge reading, for a range of discharge powers, shows the whole story on one axis.

Actual runtime remaining versus state-of-charge reading, for discharge powers from C/20 to 2C. The dotted diagonal is the ideal case where the charge reading equals the runtime fraction. Every curve sits below it. Higher-power curves droop further and terminate early, at a positive state of charge, because the cell hits its voltage cutoff before the charge is exhausted.

Two features matter. Every curve sits below the diagonal, so the charge reading is always optimistic about runtime. And the curves fan out with power. At C/20, a 50% reading corresponds to 46% of runtime left. At 1C it is 45%. At 1.5C it is 42%. At 2C the discharge terminates while the gauge still reads 28%, so the cell dies showing more than a quarter charge remaining. The endpoints of the high-rate curves are the charge that was present but undeliverable at that power.

Why the last stretch drains fastest

The everyday version of this is the phone that seems to shed its final quarter faster than its first. Break a moderate constant-power discharge into ten equal state-of-charge bands and measure how long the cell spends in each.

Minutes spent in each 10% state-of-charge band during a 0.5C constant-power discharge. The high bands each last about 13 minutes; the low bands are shorter, because delivering the same power at lower voltage means higher current and faster charge depletion.

Each ten-point drop near the top of the range takes about 13 minutes. Near the bottom it is closer to nine. The percentage falls at a constant pace only if the load is constant current. Under constant power it accelerates, because each point of charge near empty is spent at higher current. This is mostly Effect one at phone-like rates, with Effect two adding to it whenever a demanding task briefly raises the power draw.

To answer the question directly: consumer devices display state of charge, not state of energy. The percentage comes from a fuel-gauge IC doing coulomb counting anchored to voltage. That is a charge number. Some devices compute a separate time-remaining estimate that is closer to an energy calculation, which is why that estimate jumps around as the load changes while the percentage ticks down smoothly. The smooth number is the one that misleads.

The gap has a floor and a slope

Because the two effects have different origins, they add rather than trade off. Effect one sets a floor that is present at any rate. Effect two adds to it as power rises.

Runtime overestimate at a 50% state-of-charge reading, in percentage points, decomposed by effect and plotted against discharge rate. The energy-weighting floor is constant at about 3.5 points. The load-induced contribution starts near zero at low rate and grows to dominate at high rate.

At C/20 the overestimate is the floor alone, about three and a half percentage points. It grows slowly at first, reaching five points at 1C and eight at 1.5C. Above that the load term runs away as the cell approaches its power limit: at 2C the overestimate is roughly twenty points, and the discharge ends with the gauge still reading 28%. The floor is what most treatments of "SoC is misleading" miss: even a perfectly rested, slowly discharged cell delivers less runtime than its charge reading implies. The slope is what makes the problem acute for power applications.

Temperature moves both terms. Self-heating during the fast discharges above helps, raising the cell to between 43 and 74 degrees at 1C to 2C and recovering capacity. A cold start does the opposite, steepening the voltage sag and widening the gap, consistent with the measured temperature dependence of the SoC-to-SoE difference.

What this means for real applications

Most systems that matter draw power, not current. A power tool holds torque. A drone holds thrust. An EV climbing a grade holds road power. A data-center UPS holds a fixed electrical load through an outage. In each case the quantity the operator needs is time to empty at the current power, and that is state of energy. A charge-based estimate will read high, and it will read highest exactly when the load is heaviest and the margin matters most.

ApplicationLoad characterMetric that predicts runtime
Consumer electronics at idleLow, near constantSoC and SoE nearly agree
Phone or laptop under demanding tasksModerate, variable powerSoE; SoC reads a few points high
Power tools, drones, roboticsHigh constant powerSoE; SoC reads high and dies early
EV range at highway loadHigh sustained powerSoE, temperature-compensated
Backup power and UPS sizingFixed power for a set durationSoE; sizing on SoC underdelivers
Coulomb-counter calibration, capacity checksDefined by chargeSoC is the correct metric

State of charge is the right metric for what it measures: how full the tank is in coulombs. It is the wrong metric for how long the tank will last under a power load. For that, energy is the currency, and the conversion between them is the voltage curve plus the load.


Ionworks Studio simulates constant-power, constant-current, and duty-cycle discharges on a parameterized cell model, tracks charge and energy together, and compares against measured data from any cycler brand. Book a demo to see how teams build runtime and range predictions on the metric that actually governs them.

Frequently asked questions

No. It answers a charge question correctly. Coulomb counting, capacity tracking, and balancing all live in the charge domain, and state of charge is the natural metric there. The mismatch appears only when a charge number is read as a runtime or energy number under load.
For the NMC cell simulated here, a 50% reading corresponds to 46% of runtime at near-zero rate, 45% at 1C, and 42% at 1.5C. At 2C the cell reaches cutoff with the gauge still reading 28%. The floor of about three and a half points is chemistry-dependent through the shape of the voltage curve. The rate-dependent part depends on the cell's internal resistance and power capability.
Yes, through the voltage curve. A cell with a flatter discharge curve has a smaller energy-weighting floor in the mid-range but a sharper divergence near the knees. The rate-dependent effect scales with internal resistance regardless of chemistry. The mechanism is general; the numbers are cell-specific.
It can, and range-focused systems estimate it. The difficulty is that state of energy depends on the future load and temperature, not only the present state, so an accurate estimate needs either an assumption about the load or a model. This is the estimation problem the SoE literature addresses.
Higher temperature lowers the overpotential and speeds transport, so more charge and energy can be delivered before the voltage cutoff. In the simulations the cell warms to between 43 and 74 degrees at 1C to 2C, which is why the high-rate curves recover capacity relative to an isothermal cell. A cold cell shows the opposite and a wider SoC-to-SoE gap.

Continue reading

New posts by email