JK BMS SOC Calibration: Fix SOC Drift, Jumps and Reset

JK BMS SOC calibration comes down to two cell voltages and one capacity value. The BMS counts amp-hours in and out, and when a cell reaches the SOC-100% voltage or the SOC-0% voltage, the BMS snaps the counter to 100% or 0%. If those voltages or the capacity are wrong, the SOC drifts, jumps, or shows a wrong value.

Why the SOC drifts or jumps

The JK BMS does not measure SOC directly. It uses coulomb counting: it adds the current that flows in and subtracts the current that flows out, then divides by the Battery capacity you entered. Small current sensor errors add up. After a few cycles the counter can be several percent off. This is JK BMS SOC drift.

The fix built into the firmware is a voltage reset. When a cell reaches SOC-100% voltage, SOC is set to 100%. When a cell falls to SOC-0% voltage, SOC is set to 0%. Each reset removes the accumulated error.

That reset is also why SOC can jump. If the counter says 85% and a cell hits the SOC-100% voltage, the display goes straight to 100%. A JK BMS SOC reset at the wrong voltage causes jumps every cycle.

What the SOC voltages do

ParameterWhat it does
SOC-100% voltageCell voltage at which the state-of-charge counter is reset to 100%.
SOC-0% voltageCell voltage at which the state-of-charge counter is reset to 0%.
Battery capacityRated capacity in Ah, used by the coulomb counter to calculate SOC.

Recommended ranges per cell, from the editor's recommendations:

ChemistrySOC-100% voltageSOC-0% voltage
LFP3.41 to 3.55 V2.60 to 3.05 V
NMC3.95 to 4.10 V2.90 to 3.30 V
LTO2.45 to 2.65 V1.80 to 2.00 V

The ready LFP presets use 3.50, 3.45 and 3.41 V for SOC-100% voltage (hard, medium, gentle) and 2.60, 2.90 and 3.05 V for SOC-0% voltage. See ready presets for all chemistries.

Where the SOC voltages must sit

The JK firmware only accepts the SOC voltages strictly inside the protection hysteresis. The two chains are:

  • Cell OVP recovery < SOC-100% voltage < Cell RCV (request charge voltage)
  • Cell UVP < SOC-0% voltage < Cell UVP recovery

Equal values are rejected too. Here is an LFP example that passes, based on the medium preset:

ParameterValue
Cell OVP recovery3.40 V
SOC-100% voltage3.45 V
Cell RCV3.50 V
Cell UVP2.80 V
SOC-0% voltage2.90 V
Cell UVP recovery3.00 V

On LFP the SOC-100% voltage should be reachable. The pack has to actually get a cell to that voltage during charging, or the reset never happens.

JK BMS SOC calibration step by step

  1. Set the SOC-100% voltage and SOC-0% voltage inside the ranges above and inside the chains. The LiFePO4 settings guide has full per-cell sets.
  2. Set Battery capacity to the real pack capacity in Ah. For parallel cells, multiply the cell capacity by the number of parallel strings.
  3. Write the values to the BMS, over Bluetooth from the editor or by importing the file, then charge the pack fully. Let a cell reach the SOC-100% voltage so the BMS resets SOC to 100%. Keep charging until the current tapers, so the reset actually triggers.
  4. Optional: discharge until the lowest cell reaches the SOC-0% voltage so the BMS resets to 0%. Do this only when your UVP and load allow it, and recharge soon after.

One full charge is usually enough. A full discharge is optional and hard on the pack, so most people skip it.

Common mistakes

  • SOC-100% voltage at or below Cell OVP recovery. The firmware rejects it with "This parameter does not apply to the connected device. (Sending failure)". See the Sending failure guide.
  • SOC-100% voltage too low on LFP. LFP has a flat voltage curve. At 3.35 or 3.40 V the cell is nowhere near full, so SOC resets to 100% early and the pack looks full when it is not.
  • Wrong Battery capacity. The counter then reports the wrong percentage even with perfect voltages.
  • Charging never reaches the SOC-100% voltage. If your charger stops below it, the reset never fires and drift continues.

For all other fields, see the parameter reference and the parameters explained guide.

The Detail Log shows where the pack really trips compared with your SOC-100% voltage and the UVP limits, and it flags a changed capacity setting. Load it on the log analysis page. See the JK BMS Detail Log guide for reading it and why cell overcharge protection keeps tripping for trips near full charge.

FAQ

Why is my JK BMS SOC jumping to 100% before the pack is full?

The SOC-100% voltage is set too low, or one cell is high because the pack is unbalanced. See JK BMS balance settings. A cell reaching the voltage triggers the reset.

How often should I recalibrate?

A full charge that reaches the SOC-100% voltage recalibrates it. On a pack that cycles daily this happens by itself. For a pack that never fills, do a full charge every few weeks.

Does a wrong SOC mean my cells are bad?

Not usually. A JK BMS wrong SOC is most often a capacity entry or SOC voltage problem. Check those first.

Connect your BMS or open your .jkcfg in the editor to check that both SOC chains hold before anything is written, then use the parameter reference for the rest.

Related guides

All guides