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.
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.
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.
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.
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:
- The whole battery reaches its full-charge limit (pack over-voltage protection, at about 14.4V).
- 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.
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
- 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.
- 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.
- 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.