BlockWerk Documentación
🔋

Battery SOC EKF

Advanced

El bloque BatterySocEkf estima el estado de carga (State of Charge, SOC) de una celda de batería utilizando las dos señales de telemetría disponibles en un sistema de gestión de baterías (BMS): la corriente y la tensión en bornes. Ejecuta un filtro de Kalman extendido (EKF) sobre un circuito equivalente de una o dos mallas RC. Corrige la deriva típica de la integración coulombimétrica con la lectura de tensión y compensa el retardo de polarización mediante el modelo dinámico.

Además, el bloque puede identificar en tiempo real el sesgo u offset del sensor de corriente (la causa raíz de la deriva en el conteo de culombios) y cuantifica su propia incertidumbre (σ), permitiendo al BMS reportar el SOC con una banda de tolerancia estadística (ej. SOC ± 2 %).

La curva de tensión en circuito abierto (Open Circuit Voltage, OCV) se define mediante una tabla y se evalúa linealmente (linear) o con splines cúbicas monótonas (smooth). El filtro relinealiza la curva en cada muestra alrededor de su estimación actual, evitando divergencias sistemáticas.

Simular en BlockWerk

Simulador interactivo en tu navegador — sin instalación, motor WebAssembly.

Simular en BlockWerk →

Modelo Matemático

x=[SOC, V1, V2, b],I=Im−b (corriente real; Im medida, b sesgo del sensor)SOC˙=−η I3600 Q,V˙j=−VjRjCj+ICj (j=1,2),b˙=0V=OCV(SOC)−V1−V2−R0I,H=[d OCVd SOC, −1, −1, R0]Discretizacioˊn exacta sobre Ts con ZOH; Qd por el meˊtodo de Van LoanActualizacioˊn iterada: xi+1=x^−+Ki (z−h(xi)−Hi(x^−−xi)),Ki=P−Hi⊤/(HiP−Hi⊤+R)x = [\text{SOC},\ V_1,\ V_2,\ b],\qquad I = I_m - b\ \text{(corriente real; } I_m \text{ medida, } b \text{ sesgo del sensor)} \dot{\text{SOC}} = -\frac{\eta\, I}{3600\,Q},\qquad \dot{V}_j = -\frac{V_j}{R_j C_j} + \frac{I}{C_j}\ (j = 1, 2),\qquad \dot{b} = 0 V = \text{OCV}(\text{SOC}) - V_1 - V_2 - R_0 I,\qquad H = \left[\tfrac{d\,\text{OCV}}{d\,\text{SOC}},\ -1,\ -1,\ R_0\right] \text{Discretización exacta sobre } T_s \text{ con ZOH; } Q_d \text{ por el método de Van Loan} \text{Actualización iterada: } x_{i+1} = \hat{x}^- + K_i\,(z - h(x_i) - H_i(\hat{x}^- - x_i)),\quad K_i = P^- H_i^\top / (H_i P^- H_i^\top + R)

Donde:

  • I_m es la corriente medida en amperios (positiva en descarga) y V la tensión en bornes en voltios.
  • Q es la capacidad de la celda en Ah, y η la eficiencia coulombimétrica durante la carga.
  • La discretización continua a discreta se actualiza con precisión analítica vía Van Loan.
  • H es la derivada local de la curva OCV evaluada en el SOC predicho.
  • Si R2=0R_2 = 0 y se anula la varianza de bias, el bloque se simplifica al EKF clásico de dos estados.
  • Una iteración corresponde al EKF clásico; más iteraciones activan el EKF iterado (IEKF).

Entradas y Salidas

Direction ID Label Tipo Status
→ In in1 I number Required
→ In in2 V number Required
→ In in3 Reset number Optional
→ In in4 Dropout number Optional
← Out soc_hat SOC number Output
← Out soc_sigma σ SOC number Output
← Out v1_hat V₁ number Output
← Out v2_hat V₂ number Output
← Out bias_hat I bias number Output
← Out voc_hat OCV number Output
← Out jacobian dOCV/dSOC number Output
← Out k_gain_0 K_SOC number Output
← Out innovation Innov. number Output
← Out innovation_cov S number Output
← Out nis NIS number Output

Parámetros

Parámetros Label Tipo Por defecto Descripción
sampleTime Sample Time number 1 Filter period in seconds
socInit Initial SOC Estimate number 0.5 Fraction 0…1
v1Init Initial V1 Estimate number 0
pSoc Initial SOC Variance number 0.01 How unsure the initial SOC is; 0.01 is σ = 10 % SOC
pV1 Initial RC Voltage Variance number 0.000001 Per RC branch; small, since a rested cell has V1 ≈ V2 ≈ 0
pBias Initial Bias Variance number 0 How unsure the current sensor's offset is; 0 leaves the offset out of the model, 0.01 is σ = 0.1 A
qSoc Process Noise SOC number 1e-8 Noise density per second, so the filter does not change with the sample time
qV1 Process Noise RC Voltage number 0.000001 Noise density per second, per RC branch
qBias Process Noise Bias number 0 How fast the sensor offset may drift, as a density per second; 0 for a constant offset
rMeas Measurement Noise number 0.0001 Variance of the voltage measurement in V²
r0 R0 (Ω) number 0.05 Ohmic resistance
r1 R1 (Ω) number 0.02 Polarisation resistance of the fast branch
c1 C1 (F) number 1000 Polarisation capacitance of the fast branch
r2 R2 (Ω) number 0 Resistance of a second, slow RC branch; 0 leaves the branch out
c2 C2 (F) number 30000 Capacitance of the second RC branch
capacity Capacity (Ah) number 3.2
chargeEfficiency Charge Efficiency number 1 Coulombic efficiency while charging (current < 0); Li-ion cells are typically 0.99–0.999
ocvSoc OCV Table SOC text 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 SOC breakpoints, ascending
ocvVoltage OCV Table Voltage text 3.00 3.50 3.65 3.72 3.78 3.84 3.90 3.97 4.05 4.14 4.20 Open-circuit voltage at each breakpoint in V
ocvInterpolation OCV Interpolation select linear Linear matches a LookupTable exactly; Smooth (monotone cubic) has no slope jumps at the breakpoints, which steadies the filter's gain
iterations Update Iterations number 1 1 is the classic EKF; 3 relinearises at the corrected estimate (iterated EKF), which helps where the OCV curve bends sharply

Ejemplos de Uso

Estimación del SOC de una celda en reposo

Una celda en equilibrio a 3.72 V (30 % SOC real) es censada con ruido (σ=50 mV\sigma = 50\text{ mV}) a 10 Hz. Partiendo de una estimación errónea del 60 %, el filtro alcanza un error menor al 2 % en 1.5 s.

Compensación de sesgo del sensor de corriente

Un error constante de 0.2 A causaría divergencia continua en conteo de culombios. El bloque detecta la discrepancia con la curva de tensión, identifica b y estabiliza el SOC.

Observaciones y Buenas Prácticas

  • Salida σ SOC: SOC ± 2σ provee un intervalo de confianza del 95 %. El valor NIS monitoriza la consistencia estadística del modelo.
  • Entrada Valid: Ante fallas en la medición de tensión, el filtro continúa integrando corriente en modo puramente predictivo mientras incrementa la incertidumbre reportada.
  • Doble rama RC: Proporciona precisión superior en perfiles de corriente pulsante al capturar simultáneamente efectos capacitivos rápidos y difusión lenta.
  • Reset: Un pulso positivo reinicia instantáneamente todos los estados y covarianzas.

Bloques Relacionados