Battery SOC EKF
AdvancedDer BatterySocEkf-Block schätzt den Ladezustand (State of Charge, SOC) einer Batteriezelle aus den beiden realen Messgrößen eines Batteriemanagementsystems (BMS): Zellstrom und Klemmenspannung. Er führt ein Extended Kalman Filter (EKF) auf Basis eines Ersatzschaltbildes mit ein oder zwei RC-Gliedern aus. Dadurch wird die Drift des reinen Coulomb-Zählens durch die Spannungsmessung korrigiert und der Polarisationsverzug der Zelle durch das dynamische Modell kompensiert.
Zusätzlich kann der Block den Nullpunktfehler (Sensor-Offset/Bias) des Stromsensors online mitlernen — den systematischen Fehler, der Coulomb-Counting sonst weglaufen lässt. Das Filter gibt seine eigene Unsicherheit (σ) aus, sodass das BMS den SOC mit verlässlichem Konfidenzband anzeigen kann.
Die Leerlaufspannungskennlinie (Open Circuit Voltage, OCV) wird tabellarisch definiert und wahlweise stückweise linear (linear) oder als stetig differenzierbare monotone kubische Spline (smooth) ausgewertet. Das Filter linearisiert die Kennlinie bei jedem Zeitschritt am aktuellen Zustandsschätzwert neu.
Mathematisches Modell
Wobei:
I_mder gemessene Zellstrom in Ampere ist (positiv beim Entladen) undVdie Klemmenspannung in Volt.Qdie Nennkapazität in Ah ist, undηder Coulomb-Wirkungsgrad beim Laden.- Die Diskretisierung exakt aus den Modellparametern über die Van-Loan-Methode berechnet wird.
Hdie lokale Steigung der OCV-Kennlinie am geschätzten Arbeitspunkt darstellt.- Bei das zweite RC-Glied entfällt und mit
pBias = qBias = 0das klassische 2-Zustands-EKF entsteht. - Eine Iteration dem klassischen EKF entspricht; mehrere Iterationen aktivieren das iterierte EKF (IEKF).
Ein- & Ausgänge
| Direction | ID | Label | Typ | 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 |
Parameter
| Parameter | Label | Typ | Standardwert | Beschreibung |
|---|---|---|---|---|
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 |
Anwendungsbeispiele
SOC-Ermittlung einer ruhenden Zelle
Eine relaxierte Zelle bei 3,72 V (30 % realer SOC) wird mit verrauschtem Spannungssensor () bei 10 Hz erfasst. Ausgehend von einem fehlerhaften Startwert von 60 % konvergiert das Filter in 1,5 s stabil auf 2 % Genauigkeit.
Online-Kompensation von Stromsensor-Drift
Ein systematischer Stromfehler von 0,2 A führt bei herkömmlicher Integration zu linear anwachsendem Fehler. Das EKF identifiziert die Diskrepanz zur Klemmenspannung, schätzt den Offset b und hält die SOC-Berechnung driftfrei.
Hinweise & Best Practices
- SOC σ-Ausgang:
SOC ± 2σbildet ein 95%-Konfidenzband. Der NIS-Wert bestätigt die stochastische Konsistenz. - Valid-Eingang: Bei Sensorausfall rechnet das Filter rein coulomb-metrisch weiter; die geschätzte Varianz steigt bis zur Wiederherstellung der Messwerte.
- Zwei RC-Glieder: Erlaubt präzise Modellierung bei schnellen Lastwechseln durch Trennung von rascher elektrochemischer Kinetik und langsamer Diffusionsrelaxation.
- Reset: Setzt bei Impulsen (> 0) alle Zustände und Kovarianzen auf die Initialwerte zurück.
Verwandte Blöcke
- KalmanFilter" class="bw-link">KalmanFilter
- LookupTable" class="bw-link">LookupTable
- RandomNumber" class="bw-link">RandomNumber