Battery SOC EKF
AdvancedEl 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.
Modelo Matemático
Donde:
I_mes la corriente medida en amperios (positiva en descarga) yVla tensión en bornes en voltios.Qes 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.
Hes la derivada local de la curva OCV evaluada en el SOC predicho.- Si 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 () 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
- KalmanFilter" class="bw-link">KalmanFilter
- LookupTable" class="bw-link">LookupTable
- RandomNumber" class="bw-link">RandomNumber