Battery SOC EKF
AdvancedHet Battery SOC EKF-blok schat de laadtoestand (State of Charge, SOC) van een batterijcel op basis van twee signalen die een Battery Management System (BMS) daadwerkelijk meet: de celstroom en de klemspanning. Het voert een Extended Kalman Filter (EKF) uit op een equivalent circuitmodel met één of twee RC-takken. Daardoor wordt de drift van pure coulomb-telling gecorrigeerd met de spanning, en de polarisatie-vertraging van de cel gecompenseerd met het dynamische RC-model.
Bovendien kan het blok de nulpuntsafwijking (bias/offset) van de stroomsensor online mee-schatten — de sluipende fout waardoor coulomb-telling na verloop van tijd wegdrift. Het filter rapporteert zijn eigen onzekerheid (σ), zodat het BMS de SOC kan tonen met een betrouwbare foutmarge (bijv. SOC ± 2 %).
De nullastspanningscurve (Open Circuit Voltage, OCV) wordt gedefinieerd als een tabel en kan lineair (linear) of als een monotone kubische spline (smooth) worden geëvalueerd. Het filter her-lineariseert deze OCV-curve bij elke sample rond de actuele toestandsschatting, waardoor het zuiver en zonder bias blijft convergeren.
Wiskundig Model
Waarbij:
I_mde gemeten stroom in ampère is (positief bij ontladen) enVde klemspanning in volt.Qde nominale celcapaciteit in Ah is, enηhet coulometrisch rendement tijdens laden.- De continue systeemmatrices exact worden omgezet naar discrete tijd met behulp van Van Loan's methode.
Hde lokale richtingscoëfficiënt van de OCV-curve is bij de voorspelde SOC.- Een RC-tak met automatisch wordt weggelaten, en met
pBias = qBias = 0het model overgaat in de klassieke tweetoestands-EKF. - Eén iteratie overeenkomt met de standaard EKF; meerdere iteraties activeren het Iterated Extended Kalman Filter (IEKF).
Ingangen & Uitgangen
| Direction | ID | Label | Type | 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 |
Parameters
| Parameters | Label | Type | Standaard | Beschrijving |
|---|---|---|---|---|
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 |
Gebruiksvoorbeelden
SOC-bepaling van een Rustende Cel
Een tot rust gekomen cel op 3.72 V (werkelijke SOC 30 %) wordt bemeten met een ruizige spanningsmeter () bij 10 Hz. Het filter start met een foutieve aanname van 60 % en convergeert binnen 1.5 s tot binnen 2 % van de werkelijke waarde.
Compensatie van Stroomsensor-drift
Een stroomsensor met 0.2 A offset leidt bij gewone coulomb-telling tot continue accumulatiedrift. Het BatterySocEkf-blok herkent de afwijking tussen ladingsintegraal en klemspanning, schat de biaswaarde b correct in en stabiliseert de SOC.
Opmerkingen & Best Practices
- SOC σ-uitgang:
SOC ± 2σgeeft een 95%-betrouwbaarheidsband. De NIS-statistiek bevestigt of het ruismodel klopt (gemiddelde rond 1). - Valid-ingang: Bij sensoruitval schakelt het filter naadloos over op pure coulomb-integratie waarbij de gerapporteerde onzekerheid groeit totdat er weer klemspanningsmetingen beschikbaar zijn.
- Twee RC-takken: Biedt superieure dynamische nauwkeurigheid bij gepulste belastingen door zowel snelle elektrochemische overdracht als trage diffusieprocessen mee te modelleren.
- Herstart: Een puls op de Reset-poort (> 0) brengt alle toestanden en covarianties direct terug naar hun initiële instellingen.
Gerelateerde Componenten
- KalmanFilter" class="bw-link">KalmanFilter
- LookupTable" class="bw-link">LookupTable
- RandomNumber" class="bw-link">RandomNumber