Skip to main content
Firmware Stable

BEST - Battery SOC estimator

Description

The BEST (Battery ESTimator) module implements a battery state estimation algorithm. It estimates the SOC (State Of Charge) and SOH (State Of Health) of a configured battery pack based on current and voltage readings.

The estimation combines two approaches:

  • Coulomb counting — integrating the current flowing through the controller
  • Voltage estimation — estimating SOC from the battery voltage using an OCV (Open Circuit Voltage) model

These two methods work together to compute the SOC.

There are two variants of the OCV model, depending on the firmware build:

  • 4-point OCV — the cell OCV curve is approximated by 4 voltage breakpoints at 0%, 10%, 85%, and 100% SOC, with a single scalar cell resistance.
  • OCV table — the cell OCV curve is defined by a multi-point lookup table with temperature-dependent bilinear interpolation (up to 6 temperature breakpoints) and per-temperature cell resistance values. Builds with the OCV table can additionally support online SOH tracking (capacity and internal resistance), OCV slope gain scaling, an EKF estimator and SOC reserve.
The BEST module is build-configurable

The BEST module is configured at compile time. Which parameters, states, permanents and features are present depends on the particular firmware build. This page documents everything the module can provide. For the exact configuration used by a specific firmware, see the application documentation — e.g. LYNX or CAPRA.

tip
  • For controllers, the BEST parameters are located at /best.
  • For BMS, the BEST parameters are located at /driver/best.
SOC represents state of energy

The reported SOC is scaled by the OCV model so that it represents the remaining battery energy rather than the raw remaining charge.

Voltage estimation

By increasing soc_gain or reset_gain, the BEST module will rely more on voltage estimation for SOC correction.

Coulomb counting

There is no explicit setting for coulomb counting strength. It can be disabled by setting P to 0.

When to disable coulomb counting?

If the siliXcon controller is not the only power device connected to the battery, coulomb counting should be disabled since the controller cannot measure the total battery current.

Parameters

Common parameters

These parameters are present in every build.

ParameterUnitDescription
S-Number of cells in series (not present in single-cell builds)
P-Number of cells in parallel. Set to 0 to disable coulomb counting
soc_gainSOC voltage correction weight. Set to 0 to disable voltage correction during run (voltage correction will still work during BEST reset). In OCV table builds this is an array of 2 values — see the OCV Table tab below
reset_timemsSOC reset time at device startup. Negative value for manual-only reset via breset command or from the app. Set to 0 to disable the reset feature
reset_gainSOC reset correction weight. Same role as soc_gain, but applied during the BEST reset period
RsOhmPack wiring resistance (not present in single-cell builds)
CcmAhCell nominal capacity

OCV model parameters

The 4-point model approximates the cell OCV curve using four voltage breakpoints. A single scalar resistance value is used for the cell.

ParameterUnitDescription
RcOhmCell nominal resistance
U100VOCV for cell when SOC = 100%
U85VOCV for cell when SOC = 85%
U10VOCV for cell when SOC = 10%
U0VOCV for cell when SOC = 0%
OCV

OCV = Open Circuit Voltage — the voltage on a single battery cell without load.

EKF parameters

The module can be built with an Extended Kalman Filter using a 1RC equivalent circuit cell model instead of the basic observer (requires the OCV table). It adds these parameters:

ParameterUnitDescription
R1OhmRC-branch resistance per temperature (array, 1RC model)
C1FRC-branch capacitance per temperature (array, 1RC model)
Q_socEKF process noise variance for SOC
Q_vrcEKF process noise variance for the RC-branch voltage
R_vEKF measurement noise variance for voltage

SOC reserve

The module can be built with the SOC reserve feature, which remaps the reported SOC so that a configurable bottom/top part of the capacity is hidden from the user:

ParameterUnitDescription
soc_rsv%SOC reserve array (index 0 = bottom, index 1 = top). Reported SOC reaches 0% / 100% at the reserve limits
note

The remapping applies to the SOC and energy values reported to the application. The SOC state always shows the internal, unmapped value.

States

StateUnitDescription
SOC0-1Battery state of charge
OCVVExtrapolated cell open circuit voltage
SOH0-1Battery state of health (only in builds with cycle counting)
R0_estOhmOnline R0 estimate at the current temperature (OCV table only)
R0_rel-Relative R0 estimate, 1.0 = nominal (OCV table only)
ekf_soc0-1EKF internal SOC state (EKF only)
ekf_vrcVEKF RC-branch voltage state (EKF only)

Permanents

tip

Located at folder /permanents.

PermanentUnitDescription
CmaxmAhMaximum battery capacity (at 100% charge)
CactmAhActual battery capacity
cycles%Battery cycle counter. Accumulates SOC percent changes — 200 counts correspond to one full charge/discharge cycle. Only in builds with cycle counting
R0r-Relative R0 estimate, 1.0 = nominal (OCV table only)

Shell commands

CommandDescription
bresetReset the whole BEST algorithm — SOC, SOH and R0. During reset_time, SOC is corrected using reset_gain
breset socReset SOC only
breset sohReset SOH only (capacity back to nominal)
breset r0Reset the R0 estimate to nominal. Use breset r0 nan to invalidate the estimate
note

Older firmware builds do not support the breset subcommands — there, breset always resets both SOC and SOH.