According to u/Krexington_III answer from Reddit, to estimate battery state of charge in a mobile device, such as a cell phone, and do it pretty accurately (and without a need of heavy stuff like a neural network) device needs to use 2 methods - coulomb counter (integral of current over the time to get the amount of charge which left/went into the battery) and open-circuit voltage method (mapping voltage of relaxed battery [when a cell phone is sleeping] to the state of charge). The second one is used to calibrate coulomb counter drift due to constant error and find what the SoC is at the beginning.

Does anyone know how to implement coulomb counter calibration using the open-circuit voltage method? Is mixing both values using some function or some type of average enough, or is it just overriding coulomb counter estimation with a voltage-based one?

  • \$\begingroup\$ The reddit post is pretty long and it's not clear exactly what you want to do. Please add more detail to your question to explain exactly what you mean by "coulomb counter calibration". \$\endgroup\$ Commented Oct 2, 2021 at 11:38
  • \$\begingroup\$ @ElliotAlderson Done, let me know if something more need explenation. \$\endgroup\$ Commented Oct 2, 2021 at 12:01
  • \$\begingroup\$ powertechsystems.eu/home/tech-corner/… \$\endgroup\$
    – Andy aka
    Commented Oct 2, 2021 at 14:44

2 Answers 2


just adding more to the answer above , battery chemistry plays huge role in determining ocv-soc table / model . for eg NMC is easier than LFP one in OCV trend . so the readings from the table can be used to override/correct current soc value but again one needs to make sure a considerable amount of time has elapsed before updating SOC value from ocv method

as Vterminal = VOC + Vinternal + Vtransient + Vrelaxed

so the idea is to wait long enough that all the states goes to 0 , thereby haveing Vterminal = VOC . usually it is 2-3 hours of waiting time for good approximation.

by the way , feel free to share your work if you don't mind , I am actually working on this topic as my research project . We can both learn more :)

  • \$\begingroup\$ Thx for the answer. Yes, I am aware that I need to wait a few hours. I am still working on the project, but I share it once it's finished. \$\endgroup\$ Commented Feb 14, 2022 at 18:56
  • \$\begingroup\$ I am working on it too , just wanted to say it would be nice to both of us share our work so we can learn more . atleast for me , I consider it nice \$\endgroup\$
    – bh96
    Commented Feb 15, 2022 at 12:06

Often, battery voltage is associated with the "state of charge". Meantime, voltage measurement of a battery varies upon the battery internal resistance (internal structure). The internal resistance, as well, depends on the temperature, load, charge status, aging, and some other factors.

As OCV implies, after battery has been resting (no current flow) for a period of time (usually over an hour, best 24 hours), the voltage drop on internal resistance can be excluded from the voltage readout.

Since, there are well known minimum and maximum voltage for battery chemicals, we are able to find the state of charge by reading OCV. OCV to the state of charge are not linear, found/defined through experiments. Once the stage of charge is identified, coulomb counter can tell the state of charge by measuring charge and discharge current.

Coulomb counter calibration cannot be done upon a single measurement of OCV. The reason is that OCV depends on other factors as well. Better to say is; OCV provides "the best estimation from a known state (a better estimation from a stable state)", and then the coulomb counter operation can be adjusted to a better operation parameters.

Again, the state of charge depends on multiple factors. Thus, the iterations of charging & discharging (to the min & max) can provide better estimation by "learning".

Does anyone know how to implement coulomb counter calibration using the open-circuit voltage method?

  1. First, you need to establish the coulomb counter, which could be just a straight accumulator upon current, or may involve many other factors for a better estimation. Note that I am saying "estimation" in place of "calculation".

  2. Establish OCV to state-of-charge formula (process, algorithm, lookup table). You will find OCV is not enough to tell the state of charge accurately.

  3. Read OCV after a good rest, then adjust/reset the Coulomb counter according to the OCV - state_of_charge estimation process.

  • \$\begingroup\$ So it is just an override, ok thank you. \$\endgroup\$ Commented Oct 2, 2021 at 14:59
  • \$\begingroup\$ @WiktorTomanek Yes, basically it is override. I would say "correction". \$\endgroup\$
    – jay
    Commented Oct 2, 2021 at 15:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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