· HeliKeep · Troubleshooting  · 4 min read

Why Your EPEVER Shows 50% When Your Battery is Actually Full

The EPEVER SOC reading is wrong — and it is not your fault. Here is why voltage-based SOC without coulomb counting fails, and what to use instead.

You’ve got a sunny day. Your solar panel has been pumping power into your battery for hours. The charge controller is in Float mode — which means the battery should be 100% full.

But the EPEVER display says 50%. Or 65%. Or some other number that makes no sense.

You’re not imagining it. The EPEVER SOC reading is wrong. Here’s why, and what to use instead.


Why EPEVER’s SOC Is Inaccurate

EPEVER charge controllers (Tracer AN, BN, and others) estimate State of Charge (SOC) using a voltage-based lookup table. The problem is that this table is calibrated for a specific battery chemistry — and it doesn’t match most real-world batteries.

The specific issues:

1. Wrong battery profile

EPEVER’s “Sealed” battery setting uses a voltage-to-SOC curve that’s too conservative. It expects higher voltages for 100% than most Calcium and Sealed batteries actually produce. So even when your battery is fully charged and at rest reading 12.7V, the controller might report 80% instead of 100%.

2. No resting voltage compensation

True SOC from voltage requires the battery to be at rest — no charging and no significant load — for at least 30 minutes. During charging, voltage is elevated by 0.5-1.0V above the true resting voltage. During heavy load, voltage sags below the true resting value.

EPEVER reads voltage in real-time without compensating for this. So during active charging (when voltage might be 14.4V), the SOC might read 100%. Ten minutes after sunset, as surface charge dissipates and voltage drops from 13.8V to 12.6V, the SOC might plummet from 100% to 65% — even though the battery hasn’t actually discharged at all.

3. No coulomb counting

High-end battery monitors (like Victron’s BMV-712) use a shunt resistor to measure every amp flowing in and out of the battery. This “coulomb counting” gives much more accurate SOC. EPEVER controllers don’t do this — they only have voltage to work with, and voltage alone is a poor SOC indicator during active use.


What the Numbers Actually Mean

Here’s what your EPEVER might show vs. reality, for a typical Calcium/Sealed 12V battery:

ScenarioEPEVER SaysReality
Full charge, Float mode, sunny day95-100%~100% (correct, by coincidence)
Just after sunset, surface charge dissipating60-75%Still ~100% (surface charge drop is normal)
Overnight, light load (router only)50-65%90-95% (battery barely discharged)
Morning before sunrise, after full night40-55%80-90% (depends on load)
Actually depleted battery30-40%30-40% (more accurate at low SOC)

The EPEVER SOC is most inaccurate in the 70-100% range and becomes more accurate as the battery gets lower. This is the worst possible behavior — it cries wolf all the time, so you stop trusting it, and then when it finally reads low, you might ignore it.


What to Use Instead: Voltage

Resting voltage is the simplest reliable indicator of battery health. “Resting” means:

  • No active charging (PV power = 0W or very low)
  • No heavy load (a small router is OK)
  • At least 30 minutes since the last significant charge or discharge event
Resting VoltageApproximate SOCWhat It Means
12.7-12.8V100%Fully charged
12.5V~80%Healthy, no concern
12.3V~60%Fine for daily cycling
12.2V~50%Lower limit for regular use
11.8V~20%Critical — stop discharging NOW
11.5V~5%Damage occurring

The surface charge gotcha

After sunset, your battery voltage will drop rapidly from ~13.8V (float voltage) to ~12.6V over about 1-2 hours. This is normal. It’s called “surface charge dissipation” and it’s not actual discharge.

True discharge only begins once the voltage stabilizes below ~12.7V and starts a slow, steady decline. If you check at 10 PM and see 12.65V, your battery is still essentially full.


How Helikeep Handles This

Helikeep reads the EPEVER’s SOC register (we show it as “Controller SOC” for reference), but we also calculate our own voltage-based SOC that’s calibrated for your specific battery type.

More importantly, Helikeep’s battery protection doesn’t rely on SOC at all. It watches raw voltage:

  • Below 12.1V — load is automatically cut (for Calcium/Sealed batteries)
  • Above 12.4V — load is automatically restored

No guesswork, no inaccurate percentages. Just voltage thresholds that protect your battery regardless of what the SOC display says.

The Battery Overnight Estimate also uses voltage and current draw — not SOC — to calculate how long your battery will last.


Can You Fix the EPEVER SOC?

Not really. The SOC algorithm is baked into the controller’s firmware. You can’t calibrate it or change the lookup table.

Some things that might help marginally:

  • Make sure you’ve selected the correct battery type in the controller settings
  • Perform a full charge cycle (let the battery reach Float mode for at least 2 hours) — this sometimes helps the controller recalibrate

But fundamentally, voltage-based SOC without coulomb counting will always be inaccurate during active use. The best approach is to learn to read voltage directly and treat the SOC percentage as a rough estimate at best.


Get accurate battery monitoring with Helikeep — voltage-based protection that actually works.

Back to Blog

Related Posts

View All Posts »