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
| Parameter | What it does |
|---|---|
| SOC-100% voltage | Cell voltage at which the state-of-charge counter is reset to 100%. |
| SOC-0% voltage | Cell voltage at which the state-of-charge counter is reset to 0%. |
| Battery capacity | Rated capacity in Ah, used by the coulomb counter to calculate SOC. |
Recommended ranges per cell, from the editor's recommendations:
| Chemistry | SOC-100% voltage | SOC-0% voltage |
|---|---|---|
| LFP | 3.41 to 3.55 V | 2.60 to 3.05 V |
| NMC | 3.95 to 4.10 V | 2.90 to 3.30 V |
| LTO | 2.45 to 2.65 V | 1.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:
| Parameter | Value |
|---|---|
| Cell OVP recovery | 3.40 V |
| SOC-100% voltage | 3.45 V |
| Cell RCV | 3.50 V |
| Cell UVP | 2.80 V |
| SOC-0% voltage | 2.90 V |
| Cell UVP recovery | 3.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
- 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.
- Set Battery capacity to the real pack capacity in Ah. For parallel cells, multiply the cell capacity by the number of parallel strings.
- 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.
- 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
- JK BMS Parameters Explained: Every Setting by GroupJK BMS parameters explained in one glossary: cell OVP, OVPR, UVP, UVPR, balance, SOC, RCV and RFV, current and temperature limits, with typical LFP ranges.
- JK BMS Sending failure: Causes and Step-by-Step FixJK BMS Sending failure on import? See why the firmware rejects settings (voltage chains, write order, SCP delay) and how to fix it step by step.
- JK BMS Cell Over Charge Protection Keeps Tripping: Causes and FixJK BMS cell over charge protection tripping and releasing every minute? See why a charger set too high causes it, how to tell it from a weak cell, and how to fix it.