Coulomb Counting

Dec 05, 2025

Leave a message

What Is Coulomb Counting?

I've been asked about SOC estimation more times than I can count. The question usually comes up when someone's pack is showing 30% on the gauge but shuts down two minutes later. Nine times out of ten, the root cause traces back to Coulomb counting gone wrong.

 

Coulomb Counting

 

The Concept

 

Coulomb counting tracks charge in and charge out. Pretty simple on paper. You integrate current over time, keep a running tally, and that tally tells you how much juice is left in the cell.

The BMS samples current-usually somewhere between 10 Hz and 100 Hz depending on the application-and each sample gets multiplied by the time interval. Add them up. Subtract from your starting capacity. There's your SOC number.

 

Where It Gets Ugly

 

Here's what the textbooks don't emphasize enough. That current sensor you're relying on has offset drift. It has gain error. It has temperature coefficient. A typical automotive shunt might spec at ±0.5%, but that's under ideal conditions at 25°C. Stick it under a hood in Phoenix in July, and you're looking at different numbers.

I worked on a 48V mild hybrid program back in 2019. We had a Vishay shunt rated at 100 μΩ. Beautiful spec sheet. In the lab, everything tracked perfectly. Put it in a vehicle doing regenerative braking in stop-and-go traffic, and after six hours the SOC had drifted 8%. The thermal mass of the shunt couldn't keep up with the current transients. We ended up adding a dedicated temperature sensor on the shunt itself and running a compensation algorithm in the BMS firmware.

 

Coulomb Counting

 

The Low Current Problem

 

This one bites people all the time. Your Hall effect sensor or your shunt has a noise floor. Below maybe 500 mA on a typical EV pack, the signal-to-noise ratio falls apart. But the cell is still self-discharging. The BMS is still drawing quiescent current. The contactors have leakage.

Over a two-week parking period, these small currents add up. I've seen packs lose 3-4% SOC that the Coulomb counter never registered. The owner comes back from vacation, the gauge shows 85%, but the actual capacity is closer to 81%. Do that a few times, and your recalibration windows can't catch up.

Some teams run a parallel self-discharge model. Others just force an OCV recalibration after any rest period over 4 hours. There's no perfect answer. The ISO 26262 people will ask you how you handle this in your FMEA, and you better have a documented strategy.

 

Capacity Fade

 

The cell you characterized during development isn't the cell you have after 500 cycles. The nominal capacity drops. The internal resistance goes up. But the Coulomb counter doesn't know that unless you tell it.

TI's gauge ICs-the BQ34 series, for example-run internal impedance tracking and adjust the full charge capacity over time. That's a model-based approach layered on top of basic Coulomb counting. The Maxim 17205 does something similar. For custom BMS designs, you're building this yourself, and it requires validated aging data from your specific cell chemistry.

NCM cells behave differently from LFP here. LFP has that flat voltage plateau that makes OCV-based corrections almost useless in the 20-80% SOC range. You're stuck relying on Coulomb counting more heavily, which means your current sensing accuracy matters even more.

 

Coulomb Counting

 

Practical Recalibration

 

Full charge is your friend. When voltage hits the termination threshold and current tapers below C/20 or whatever your cutoff is, you reset to 100%. Simple. Reliable. Works every time assuming your charger and BMS agree on what "full" means.

End of discharge is trickier. The voltage knee is steep, temperature-dependent, and affected by recent load history. Most systems don't recalibrate at empty. They just use full charge as the anchor point and trust the counting in between.

Some stationary storage installations run periodic capacity tests. Once a month, the system does a controlled full discharge and recharge. That gives you ground truth. Fleet operators with EVs sometimes do this too. It's operationally annoying but solves the drift problem.

 

What I Tell New Engineers

 

Coulomb counting is not a sophisticated algorithm. It's addition and subtraction with a lot of error sources. The sophistication is in understanding where the errors come from and having strategies to bound them.

Get your current sensor selection right. Understand the temperature behavior. Plan your recalibration strategy before you write a single line of code. Test with real cells at real temperatures under realistic load profiles. The bench setup with a power supply and an electronic load isn't going to show you the problems you'll see in the field.

Send Inquiry