# Why aging of generic battery model is inconsistent with respect to battery initial state-of-charge?

12 views (last 30 days)
Harri Aaltonen on 15 Dec 2021
Answered: Joel Van Sickel on 22 Dec 2021
The task of my model is to charge battery from initial state-of charge close to 50%. The charging is done with Controlled Current Source, so that i(t)=p(t)/u(t), where i is the signal from controlled current source, u is the voltage of the battery and p is constant 50. When the battery state of charge is close enough to 50%, the controlled current source will send p(t)=0 -> i(t)=0 to battery.
The signal to current source comes through following matlab function. the rest is an indicator to stop the charging, when battery state-of-charge is close to 50%. Two other conditions in first if limits the state-of-charge of the battery between 5 and 95%
function i = fcn(p,soc,u,initSoc,rest)
if or(and(abs(soc-50)<0.1,rest),or(and(soc<=5,p<0),and(soc>=95,p>0)))
i = 0;
else
i = -p/u;
end
The initial state-of-charge varies between 1 and 50%. The initial Soc is given to batter via base Workspace. The Simulink model is following:
Parameters of the model are following:
General:
Simulation time: 3600
powergui:
discrete, 1 second sample time
Battery:
Nominal voltage (V) = 7.2
Rated capacity (Ah) = 5.4
Battery response time (s) = 1
Discharge:
Determine from the nominal parameters of the battery
Aging:
Battery initial values, except Aging model sampling time (s) = 1
Unit delay:
Initial condition: 7.2 (Nominal voltage)
Controlled current source
DC, without initialization
When running the simulation, the aging is inconsistent with few initial state-of-charges
I assume that when initial State-of-charge is close to zero, the aging might not be consistent, but I don’t understand the inconsistent parts closer to 50%
The aging of the battery is gathered with the following code:
a=[]
for i = 1:50
initSoc = i
assignin('base','initSoc',initSoc)
batteryOut =sim('TestBattery.slx','StartTime','1','StopTime','3600','FixedStep','1');
a(i)=batteryOut.age.data(end)
end
plot(a)
xlabel("initial SoC")
ylabel("aging in terms of life cycle")

Joel Van Sickel on 22 Dec 2021
It looks like your data sets are following two linear lines and results fall either on the top or bottom one. If you look at your SOC graph, you can see that. Both lines indicate that as SOC is larger and therefor less charging is done, the agining is less, which is intuitive. however, As to why some models provide data points for the top line vs the bottom needs to be debugged. It could be that the time steps or solver settings are making it so different runs aren't getting consisten results based on initial conditions (in which case the discrete step size should be reduced as a good first attempt to fix things). Honestly, the fact that you've set your battery response time to 1 s and your fixed step to 1 s would indicate the parameters for your model and solver settings are not set correctly to provide realistic simulaiton results. Your fixed time step always needs to be smaller than a response time.
Additionally, you should take one of the runs that ends up on the top line, and one of the runs on the bottom line, and do a deep dive into the results and see why this is happening. You can right click the battery model and look under the hood using the look under mask and see all the implementation of the aging model used in Simulink. You could also share your model here.

R2020b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by