Understanding SOC Drift

Why your battery percentage jumps, and how to fix it.

The rest of this page explains what is happening inside the battery, why the percentage drifts and how the reset works. No electrical knowledge needed.


The problem: the flat voltage curve

SOC stands for state of charge: the percentage on your screen. To understand why it drifts, you only need to know one difference between lithium and lead-acid batteries: what the voltage does as the battery empties.

The lead-acid "fuel gauge"

A traditional lead-acid battery behaves like the fuel gauge in a car. As you use energy, the voltage falls in a steady, predictable line. A monitor only has to read the voltage to know roughly how full the battery is: 12.2V means it is about half full. Easy.

LEAD-ACID
Lead-acid voltage against charge On a lead-acid battery the voltage falls in a steady line, from about 12.7V when full to 11.7V when empty.11.8V12.2V12.6V100%75%50%25%0%CHARGE LEFT12.2Vabout half full
CHARGE LEFT
VOLTAGE
As the charge falls, the voltage falls with it. The voltage tells you how full the battery is.
Figure 1: Lead-acid voltage falls in a straight line, so a monitor can read the charge from the voltage.

The lithium "cliff edge"

Lithium does not behave like that. It holds an almost constant voltage for nearly the whole time you are using it, so it reads much the same at 80% as it does at 30%. Then, right at the end, the voltage falls off a cliff.

That is brilliant for your appliances, because the fridge sees the same steady voltage all day. It is a nightmare for a monitor, because voltage cannot tell it the percentage when the voltage is barely changing.

LITHIUM (LIFEPO4)
Lithium voltage against charge On a lithium battery the voltage stays close to 13.2V from 90% down to about 15%, then drops sharply near empty.10.0V11.0V12.0V13.0V14.0V100%75%50%25%0%CHARGE LEFT80% to 30%under 0.2V apartthe cliff
CHARGE LEFT
VOLTAGE
The charge falls from 100% to 10%, but the voltage barely moves.Near empty, the voltage suddenly drops off a cliff.
Figure 2: Lithium voltage stays almost flat, so the voltage cannot tell a monitor how full the battery is.

How the battery counts its energy (Coulomb counting)

Because voltage is no help, the BMS (the battery's built-in management system) uses a different method called Coulomb counting. It measures every amp going in and every amp coming out, and keeps a running total. Battery monitors with a shunt, such as a Victron BMV, work the same way. Every TITAN battery sends its own count over Bluetooth to the TITAN Lithium app on your phone. On models with comms ports, a Victron GX device can read the same count through the TITAN BMS to Victron VE.Can cable.

Think of someone standing at a door with a clicker, counting people in and out of a building:

  • You know the building started with 100 people in it (full).
  • You click 50 people leaving.
  • So you know 50 people are still inside.

The BMS does exactly that with energy. It counts the amp-hours going in and the amp-hours going out, and the running total is the percentage on your screen.

THE BMS COUNTER
How the BMS counts energy Energy flows from the charger into the battery and the count goes up, then flows out to the appliances and the count goes down.BATTERYCHARGERAPPLIANCESBMS+5 Ah+5 Ah+5 Ah+5 Ah+5 Ah+5 Ah-5 Ah-5 Ah-5 Ah-5 Ah-5 Ah-5 Ah
COUNTED
SCREEN SAYS
Charging from mains, solar or the engine: every amp-hour in is added to the count.Using the fridge, lights or pump: every amp-hour out is taken away.
Figure 3: The BMS adds up every amp-hour in and takes away every amp-hour out. On a 100Ah battery, the count is the percentage on your screen.

Why the "jump" happens (the drift)

Counting like this is very accurate over a day or a week. The trouble is that tiny errors add up over months.

  • A 0.1% counting error makes no difference today.
  • After three months of charging and using the battery, those small errors can add up to a 10%, 20% or even 30% gap.

Your monitor thinks the battery is at 40%, because that is what its running total says. In reality the cells are nearly empty.

The "ghost load" effect

The TITAN BMS is deliberately set to ignore very small currents, because at that level real current and electrical noise look the same. There is a good safety reason for this. After a full charge, the BMS closes the charge path and waits until it sees real power being used before it opens it again. If it reacted to tiny currents, electrical noise could look like power being used, and the BMS could reopen the charge path on a battery that is already full. Overcharging a full battery is exactly what the BMS is there to prevent.

The 0.6A threshold: the TITAN BMS treats anything below about 0.6A (roughly 8W at 12V) as zero. So a single LED light, a USB phone charger or a TV on standby can be invisible to it.

The result: a 0.4A load left on overnight (10 hours) takes 4Ah out of the battery, but the BMS counts nothing. On a 100Ah battery the screen still says 100% when the battery is really at about 96%. Repeat that over a few months and the gap becomes noticeable.

WHY THE READING JUMPS
SCREEN SAYSJUMPNOT REALLY THERE
REALLY LEFT
How ghost loads cause SOC drift Large loads are counted and both readings fall together. Small loads under 0.6A slip past the BMS, so the real charge falls while the screen stays at 40%. When a cell drops below 3.0V the screen jumps down to 12%.APPLIANCESBMSignores under 0.6ABATTERY-10%-10%-10%not counted
Big loads like the fridge are counted. Both readings fall together.Tiny loads under 0.6A slip past uncounted. The screen stays at 40% while the battery keeps emptying.A cell drops below 3.0V, so the BMS corrects itself: 40% jumps to 12%.Not a fault. One full charge puts the count right again.
Figure 4: Big loads are counted, tiny ones slip past. The screen drifts away from reality until the BMS spots a low cell and corrects it. That correction is the jump you see.

The fix: re-synchronising the count

The proper fix is to give the BMS a moment when it knows for certain how full the battery is, so it can reset its count to a true 100%. We built an explicit reset into the BMS protection logic for exactly this.

The solution: one full 100% charge

Charge the battery fully until one of two things happens:

  1. The whole battery reaches its full-charge limit (pack over-voltage protection, at about 14.4V).
  2. Any single cell reaches its limit (cell over-voltage protection, at about 3.60V).

When either happens, the BMS briefly stops the charge. At that exact moment the BMS knows for certain the battery is full.

It resets its count to 100% straight away, wiping out all the drift. From then on your monitor matches the energy actually in the cells.

THE RESET
Charger set to 14.6VCharger set to 14.2V
Charging to the reset point Two charging traces. A charger set to 14.2V levels off below the 14.4V reset point and the reading never resets. A charger set to 14.6V reaches 14.4V, the BMS stops the charge and the reading resets to 100%.13.0V13.6V14.2V14.8VCHARGING TIMERESET POINT 14.4Vnever gets there
SCREEN SAYSRESET
Charging. The screen still says 64% because the count has drifted.Set to 14.6V, the battery reaches 14.4V. The BMS stops the charge and resets to 100%.Set to 14.2V, the battery never reaches 14.4V, so the reading never resets.
Figure 5: The battery has to reach 14.4V for the BMS to reset its count. A charger set to 14.6V gets it there. Many default settings stop at 14.2V and never do.

Making the charger actually get there

Here is the part that catches almost everyone. Knowing you need a full charge is one thing. Getting your charger to deliver one is another, and most do not manage it on their factory settings.

We measured this across the fleet: of the batteries reporting usable data, roughly 87% never reach the voltage needed to trigger the reset. Nothing is wrong with them. Their charger simply stops fractionally short, and nobody has ever had a reason to look. If your percentage drifts and you have dutifully charged to what the charger calls full, this is almost certainly why.

Two voltages, and they are not the same number

Mixing these two up is the main reason this fix fails for people, so it is worth being precise:

  • 14.4V is what the battery has to reach. That is a fact about the cells, not a setting you can change. Below it, no reset happens.
  • 14.6V is what to set the charger to. A charger set to exactly 14.4V only just touches the threshold, and once you allow for the small voltage loss along the cables it may never quite get there. Setting 14.6V gives it enough headroom to cross the line properly.

Set 14.4V and you will very likely repeat the whole exercise wondering why nothing happened.

What to do, whatever charger you have

  1. If the absorption voltage can be changed, set it to 14.6V, run one full charge, then put it back where it was afterwards. One charge is enough. This is the usual answer.
  2. If it cannot be changed, find out what it actually reaches. If the answer is below 14.4V, that charger will never be able to correct the reading on its own, and you will need to borrow or fit one that can. It is worth knowing either way.
  3. If you are on a Victron system with DVCC switched on, there is a second route: turn DVCC off for a single charge so the charger follows its own profile, then turn it back on. See the Victron integration guide for why DVCC causes this.

All of these are reversible, and none of them involves opening the battery or touching anything inside it.

Is 14.6V safe?

Yes, and it is a fair question to ask. Raising a charge voltage feels like the sort of thing that ought to come with a warning.

It does not, because the BMS watches every cell individually the entire time and protects them whatever the charger is asking for. That protection is what triggers the reset in the first place. The higher setting is not pushing the battery harder. It gives the charger enough room to reach a limit the BMS was always going to enforce.

How to tell it worked

Open the Protections tab in the TITAN app and look at the cell overvoltage count. If the reset has happened, it will have gone up by one.

A counter labelled overvoltage going up sounds alarming, and it is not. It is simply the battery recording that a cell touched the top of its range, which is exactly the event you were trying to produce. Seeing that number go up is the confirmation you wanted, not a warning.