I am trying to implement an extremely simple lead acid battery state-of-charge (SOC) estimation calculation. The following values are known:

  1. \$V_F\$ for SOC=100%: Open circuit voltage of the battery when full
  2. \$V_E\$ for SOC=0%: Open circuit voltage of the battery when empty
  3. \$V\$: The real-time terminal voltage
  4. \$I\$: The real-time load current

Using \$V_F\$ and \$V_E\$, if you know the present \$V_{OC}\$ (open circuit voltage), you can calculate the SOC using this simple formula:

$$ SOC = \frac{V_{OC}-V_E}{V_F-V_E} $$

A common issue, and my problem, is that I can't afford to stop using the battery long enough (up to 12 hours according to some of the literature) to get a stable read on \$V_{OC}\$.

So, can I use the load current and terminal voltage to approximate \$V_{OC}\$, and then calculate the SOC?

I'm fine with a rough estimate (80% accurate or so), and possibly some method which calibrates periodically whenever I know (by some other means) that the battery is full or empty.

  • \$\begingroup\$ Where is your formula coming from? For what I know, oc voltage tells very little about the battery SOC. A dead battery might well have an high open voltage that rapidly drops when the load is increased. \$\endgroup\$ Oct 5, 2016 at 21:45
  • \$\begingroup\$ @VladimirCravero, I first found it here but have seen it a few other places as well. Also, the OC voltage will always be higher than loaded voltage - but it can still benchmark SOC - for lead acid, the voltage/SOC relationship is linear enough for my purposes. \$\endgroup\$
    – LShaver
    Oct 5, 2016 at 21:52
  • \$\begingroup\$ "I can't afford to stop using the battery long enough (up to 12 hours according to some of the literature) to get a stable read" - how long can you afford to stop using it for? Can you measure the current while it is in use? \$\endgroup\$ Oct 6, 2016 at 2:35
  • \$\begingroup\$ @BruceAbbott, yes, I can measure current in real-time. This is for a microgrid application, so switching off the loads periodically just to get an open-circuit voltage reading isn't really an option. \$\endgroup\$
    – LShaver
    Oct 7, 2016 at 1:31

3 Answers 3


A typical profile for a battery is shown below:

enter image description here

As you can see, say from 10% to 90% state of charge (SOC), the open circuit voltage, \$V_{oc}\$, pretty much behaves linearly. Note that the profile depends on whether you are charging or discharging, but the behavior is about the same.

Say your battery has a capacity called \$C_{nom}\$ in units of Ampere-hour. Then, the state of charge (\$soc\$) (a unitless quantity) is:


Where \$Q\$ is the charge on the battery at time \$t\$. Now, if you know the current that you are drawing from the battery, you can determine \$Q\$ since

$$\frac{dQ}{dt}=-i_{bat}(t) $$ or equivalently,

$$Q(t)=-\int{i_{bat}(t)dt} $$

The negative sign because the battery is being depleted. If you were charging the battery, this sign is positive. You could now re-write the state of charge as follows:

$$soc=-\frac{1}{C_{nom}}\int{i_{bat}(t)dt} $$

If you look closely, the state of charge remains a unitless quantity, as it should, since \$C_{nom}\$ is in Ah and so will be the integral of the current (For sure, Amps times some unit of time).

To better show what I am modeling here, look at the following circuit:


simulate this circuit – Schematic created using CircuitLab

You could easily derive what I did from that circuit, notice that I haven't added the typical loss resistor in series with \$V_{oc}(soc)\$, which I am guessing you want to omit.

As you see that \$V_{oc}\$ is a function of the \$soc\$ as expected. One caveat though, is that you need to guess an initial state. Say, you suspect the battery was initially 100% charged and measure that voltage. Then you could find the \$soc\$ with the equation provided above.

You need an estimate for the initial charge because of the constant of integration that you would get when you integrate the current. That is,

$$soc=-\frac{1}{C_{nom}}\int{i_{bat}(t)dt} + soc(0) $$

I am just explicitly showing the constant of integration which you would need to guess at the beginning of the experiment. I would start at a point which I presume the battery to be 100% charged and measure the \$V_{oc}\$ and it is also necessary to know \$V_{oc}\$ when the battery is presumed to be discharged. You may not get accurate results because both ends of the \$V_{oc}\$ vs \$soc\$ plot (less than 10% \$soc\$ and more than 90% \$soc\$) are very nonlinear.

But since you already have the values for \$V_F\$ and \$V_E\$, you can simply map the value of the \$soc\$ you find through the equation I provided to a value for \$V_{oc}\$.

So you could estimate the state of charge, if you know the current being drawn, by integrating. And the state of charge will linearly map to a value of \$V_{oc}\$ \$\in[V_E,V_F]\$, which are values you already have for the ends of the state of charge spectrum.

One last thing is the sign of the integral, the negative sign comes from discharging the battery. If you were charging the battery, the sign in front the integral would be positive.

I hope this is helpful!

  • 1
    \$\begingroup\$ Yes, this is quite helpful... I'd seen that equation in some of the literature but your explanation gives a better context. Now to build an algorithm around it... \$\endgroup\$
    – LShaver
    Oct 7, 2016 at 1:32

Picture says it all, except that the curves get lower with wear. (C = Battery capacity; e.g. 100 Ah -> 100A) enter image description here

  • \$\begingroup\$ What is "C/100", "C/20" etc? What's the source of this image? \$\endgroup\$
    – LShaver
    Oct 25, 2021 at 19:49
  • \$\begingroup\$ C is the value for your battery capacity, but in Amps instead of Amphours. Say you have a 100Ah battery capacity, then C/100 would be 1A load, C/20 5A, etc. I forgot the source of the image. Google images probably. Search for "SLA SoC under discharge" and you'll probably find the same picture and the source. \$\endgroup\$
    – e-motiv
    Oct 26, 2021 at 10:27
  • \$\begingroup\$ What if my battery is 10Ah and my load is 30A? lol \$\endgroup\$
    – php_nub_qq
    May 4 at 20:43
  • \$\begingroup\$ Then you have the wrong battery for the job or you can just imagine how it would look like based on the others.. I guess that after 10 min your battery will be dangerously low \$\endgroup\$
    – e-motiv
    May 10 at 17:58

Without getting too deep into the maths and having more real world experience than theoretial in designing battery systems in the vehicle and automotive industry from M1A1 Abrahms to Winnebago motorhomes and Baja 500 off roaders, the State of Charge (SoC) is an approximater or predictor of the capacity of the battery to deliver the current that is available. As the battery ages and is abused (depth and number of disharges), it still has the current capacity as when new, BUT its just not all availlable anymore, and the only way to find the true capacity of a battery is by destroying it in the process of testing for the true overall capacity. The capacity is equal to the available current and the non available current, so the key is to narrow down the search to the available current capacity only, and the best way is to log its use by inseption by the current drawn, depth of discharge, time in service then interpolate the charging side variables and plot a histogram with same like and type of batteries; else, its like trying to measure the quantity of water in a lake with only a depth stick. you can measure the depth (voltage, or translated a SoC), but not the girth, area, and volume below the surface, and volume taken up with all the nooks and crannies where landslides have diminished the volume of the lake (analogy to sulfation), but the stick (voltmeter) cannot possibly see, similare to sulfation of the deep pores, where a surface charge can give an erroneous assumption. Without lots of background data on the battery, the best is just to use a simple Ohms law calculation of the internal resistance (or reactance) using the maximum power theorem and interpolate on a given curve for the best curve fit and thus the best guestimate of the true SoC then you can guestimate the potential of the battery to deliver current or ease of discharge of the battery by delivering lots of current in a short period of time without loosing much to internal heat. In essence, you need to ask yourself the intended purposes, and life expectancy of the design and calculate for 150%, so it doesn't fail before your intended time, but replace it when it reaches 71% of the designed life. Similar to LEDs and photovoltaic solar cells design, life, and replacement because it begins to cost more to operate than the service you are getting. A rule of thumb we use is to replace when the internal resistance goes above 71 milliohms (0.071 ohms).After that, it still will works, but you are squeazing blood out of the rock; in other words, don't get a junk yard battery charge it and expect an equation without the variables of age, temperature, DoD, used and charged at to give you the true available capacity of the ability of the battery to deliver.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.