Goal: A weighted fusion of coulomb counting SOC and OCV SOC. A high accuracy and low-cost implementation.
Why? Coulomb counting on its own can accumulate errors due to repeated integration. We also cannot predict the current SOC using only coulomb counting, which is why we must incorporate Voltage mapping.
System inputs:
- Sampling time = dt
- Pack current = I[n]
- Previous Pack current = I[n-1]
- Pack voltage (under load) = V[n]
- Previous Pack voltage (under load) = V[n-1]
- SOC = SOC[n]
- Previous SOC = SOC[n-1]
Coulomb Counting:
...
We will use a 0.2C discharge curve. We plan on doing this with the Chroma 6200D HV power supply. Once we have the discharge curve of the pack we can map voltage values to specific SOC values. The voltage value will represent the voltage UNDER LOAD. There will be inaccuracy due to varying voltages under load.
A 0.2C curve is roughly ~7.76A, which is what we expect our car to be at during cruising speed. Also, our implementation will use a function to control the voltage weighting.
...
My reasoning for this is that at high and low SOCs the discharge curve is significantly steeper. It is also non-linear in these regions. Coulomb counting is only effective for linear regions in the discharge curve, which is why voltage mapping is superior at the extreme ends. When we are less than 20% or greater than 80%, voltage weight will begin to ramp up.
Note: The current implementation as of September 22, 2024 does not use a 0.2C discharge curve. It instead uses the discharge curve found on this website https://lygte-info.dk/review/batteries2012/LG%2021700%20M50%205000mAh%20%28Grey%29%20UK.html I have taken the data off of the 0.2A per cell. Which is ~1.6A on the pack. That is why we have a predict_voltage() function, that accounts for the voltage lost by the internal resistance.
The general math behind this is:
Use a lookup table to find 2 voltage values such that VOLTAGE_LOW <= Pack_Voltage <= VOLTAGE_HIGH.
VOLTAGE_LOW and VOLTAGE_HIGH will map to a SOC %. We can interpolate between the two values to find a better approximation of the current SOC %.
EVERYTHING BELOW THIS DID NOT HAPPEN YET:
OCV SOC FUTURE EXPLORATION:
...
https://www.youtube.com/watch?v=nkq4WkX7CFU
The transfer function for the RC circuit (eq 1) can be converted into the time domain using reverse Laplace transform (eq 2). Notice that we are multiplying the s-domain function by Ipack. This is the convolution of the RC transfer-function and pack current.
...
Discretized for embedded systems, the equation can be written as:
...
This is what will be implemented in our firmware, ; it is more accurate than the first-order Taylor series approx.
...
https://www.ansys.com/blog/building-better-batteriesTO BE CONTINUED….
Resources:
https://www.analog.com/en/resources/technical-articles/a-closer-look-at-state-of-charge-and-state-health-estimation-tech.html
https://www.linkedin.com/pulse/li-ion-battery-rc-modeling-what-how-done-part-1-testing-techlanz-lscyc/