Battery SOC EKF
AdvancedLe bloc BatterySocEkf estime l'état de charge (State of Charge, SOC) d'une cellule de batterie à partir des deux mesures physiques réelles dont dispose un système de gestion de batterie (BMS) : le courant traversant la cellule et sa tension aux bornes. Il exécute un filtre de Kalman étendu (EKF) sur un circuit électrique équivalent à une ou deux branches RC. La mesure de tension compense ainsi la dérive de l'intégration coulombienne, tandis que le modèle dynamique corrige le retard de polarisation de la cellule.
De plus, le bloc peut identifier en ligne le décalage (bias/offset) du capteur de courant — cause principale de la dérive du comptage de coulombs. Il délivre également son incertitude statistique (σ), permettant au BMS d'afficher le SOC avec une marge de tolérance garantie (ex. SOC ± 2 %).
La courbe de tension en circuit ouvert (OCV) est fournie sous forme de table, évaluée de façon linéaire par morceaux (linear) ou par spline cubique monotone (smooth). Le filtre relinéarise cette courbe à chaque période d'échantillonnage autour de son point de fonctionnement estimé.
Modèle Mathématique
Où :
I_mest le courant mesuré en ampères (positif en décharge) etVla tension aux bornes en volts.Qest la capacité nominale en Ah, etηl'efficacité faradique en charge.- La discrétisation s'adapte automatiquement à la période d'échantillonnage via Van Loan.
Hest la pente locale de l'OCV calculée au SOC prédit.- La désactivation de la deuxième branche () et de l'offset ramène l'algorithme à l'EKF classique à deux états.
- Une itération correspond à l'EKF classique ; davantage d'itérations activent l'EKF itéré (IEKF).
Entrées & Sorties
| 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 |
Paramètres
| Paramètres | Label | Type | Défaut | Description |
|---|---|---|---|---|
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 |
Exemples d'Utilisation
Détermination du SOC d'une cellule au repos
Une cellule stabilisée à 3,72 V (30 % de SOC réel) est mesurée avec un capteur de tension bruité () à 10 Hz. Partant d'une estimation erronée de 60 %, le filtre converge en 1,5 s à moins de 2 % d'erreur.
Compensation de la dérive de mesure de courant
Un offset systématique de 0,2 A provoquerait une accumulation d'erreur sans fin en simple comptage coulombien. Le filtre identifie la divergence avec la tension mesurée, compense l'offset b et stabilise l'estimation.
Remarques & Bonnes Pratiques
- Sortie σ SOC :
SOC ± 2σdonne l'intervalle de confiance à 95 %. L'indicateur NIS vérifie la validité statistique des réglages. - Entrée Valid : Permet au filtre de continuer en intégration coulombienne pure lors des coupures de signal capteur.
- Modèle à deux branches RC : Capture avec fidélité les dynamiques rapides d'activation et la diffusion lente des ions lithium.
- Reset : Une impulsion positive réinitialise tous les états et matrices de covariance.
Composants Associés
- KalmanFilter" class="bw-link">KalmanFilter
- LookupTable" class="bw-link">LookupTable
- RandomNumber" class="bw-link">RandomNumber