Posted on Leave a comment

Measuring State-of-Charge is difficult

Measuring the state of charge of a lithium battery is difficult. Very difficult. In fact its practically impossible to just measure SOC of a lithium battery, it must be calculated from a known starting point, by continuously monitoring and integrating the charge (coulombs) in and out of the battery.

One cheap way to estimate SOC is to compare the battery voltage to a predetermined Volts-to-SOC lookup table. This is how the old JBD BMSs are gauging SOC, and it’s a rough estimate at best. It works for lead-acid batteries, but Lithium batteries have a very wide, flat region on their volts-SOC graph that means there is a lot of uncertainty when comparing voltage to state of charge.

Early in the design process for The Pathfinder BMS, I was planning on programming the User Interface controller to track State of Charge (SOC). We did some research, and my programmer told me this was going to be too complicated and take forever, so we should just buy one of the chips that are made to track battery SOC. It will just work!

I picked the Texas Instruments BQ34Z100 “fuel gauge” chip for the job. (The main BMS functions are handled by the Texas Instruments BQ76952)

TI agrees with my programmer:

A gauging algorithm with a high level of accuracy is quite complex and often requires a large amount of software development. Therefore, a stack-level gauge like the BQ34Z100-G1 can be used in unison to provide State-of-Charge and State-of-Health.

Texas Instruments application note: Battery Gauging Algorithm Comparison

This chip has given me nothing but trouble. It requires a complicated learning cycle that is supposed to be completed by an engineer and then the resulting firmware image is to be copied to identical battery packs on the production line.

We set out to build the best BMS for DIY installation, which means each installation is different, and this is making it very difficult to complete the learning cycle in the field.

Selectable SOC algorithms

To fix this situation, I’ve gone back to the drawing board and programmed a simple, basic SOC tracking algo.

It’s called “BasicSOC”

This SOC tracking algorithm uses a simple method of resetting the capacity at high and low voltage points and tracking coulombs in between the reset points.

As of firmware update V_0.301, the user can select which SOC algo is used to report SOC on the app(s) and OLED. See the updated datasheet: Pathfinder BMS datasheet PDF

This method suffers from drift if the battery experiences shallow cycles or long periods of low activity, but maintains good accuracy if the battery routinely sees a full cycle.

When the Pathfinder BMS is reset and the cell count or chemistry selection changes, default values will be loaded, and the SOC will be initialized at 50%.

To learn the battery capacity using this algo, discharge the battery until at least 1 cell is below the low voltage level, then fully charge until at least 1 cell is above the high voltage level. At that point the SOC confidence should reach 100%. It is not necessary to maintain a specific charge/discharge rate or complete the full cycle in a certain time frame.

This algo also reports which cell triggered the last 0% reset, and which cell triggered the last 100% reset. The SOC confidence level will hit 100% when it has been reset at both the high and low voltage points. The confidence level will drift down as time passes without a reset. It does not try to measure self-discharge of the battery.

Leave a Reply

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.