Skip to main content
Firmware Stable

BEST - Battery SOC estimator

Description

The BEST (Battery ESTimator) module estimates the SOC (State Of Charge) and SOH (State Of Health) of a configured battery pack from the measured battery current, voltage and — in some builds — temperature.

The integrator describes the battery to the module (cell count, nominal capacity and resistance, and the cell OCV curve) and tunes two things: how strongly the SOC follows the measured cell voltage (soc_gain, reset_gain) and whether the measured current is used at all (P).

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

  • 4-point OCV — the cell OCV curve is entered as 4 voltages at 0%, 10%, 85% and 100% SOC, with one cell resistance value.
  • OCV table — the cell OCV curve is entered as a table per temperature breakpoint (up to 6 breakpoints), each with its own cell resistance value. Builds with the OCV table can additionally track battery ageing (capacity and internal resistance), offer advanced estimator tuning and the 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 represents the remaining battery energy rather than the raw remaining charge.

Voltage correction

soc_gain (and reset_gain during the reset phase) sets how fast the SOC follows the measured cell voltage. Higher values re-align the SOC with the voltage faster; lower values give a steadier SOC that is less affected by voltage noise. Set to 0 to disable the voltage correction during run.

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_gainHow fast the SOC follows the measured cell voltage during run. 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_timemsHow long the SOC re-sync phase at device startup lasts. Negative value for manual-only reset via breset command or from the app. Set to 0 to disable the reset feature
reset_gainHow fast the SOC re-syncs to the cell voltage during the reset phase (reset_time after startup or breset)
RsOhmPack wiring resistance (not present in single-cell builds)
CcmAhCell nominal capacity

OCV model parameters

Enter the cell OCV at four SOC points and the nominal cell resistance.

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.

Advanced estimator parameters

Some OCV table builds use an advanced estimator with additional cell parameters. These are set at the factory for the given cell type — leave them at factory values unless advised.

ParameterUnitDescription
R1OhmCell dynamic response parameter per temperature (array). Factory value
C1FCell dynamic response parameter per temperature (array). Factory value
Q_socAdvanced estimator tuning, leave at factory value
Q_vrcAdvanced estimator tuning, leave at factory value
R_vAdvanced estimator tuning, leave at factory value

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
OCVVEstimated cell open circuit voltage
SOH0-1Battery state of health (only in builds with cycle counting)
R0_estOhmEstimated cell resistance at the current temperature (OCV table only)
R0_rel-Relative cell resistance estimate, 1.0 = nominal (OCV table only)
ekf_soc0-1Internal estimator state, debug only (advanced estimator builds)
ekf_vrcVInternal estimator state, debug only (advanced estimator builds)

Permanents

tip

Located at folder /permanents.

PermanentUnitDescription
CmaxmAhMaximum battery capacity (at 100% charge)
CactmAhActual battery capacity
cycles%Battery cycle counter; divide by 200 to obtain full charge/discharge cycles. Only in builds with cycle counting
R0r-Relative cell resistance 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.