Hii All, I have some problems with the Aging code I prepared. The time axis for trace voltage (vTrace) vs time and Relative capacity vs time are not appropriate as the unit there is NOT days because no battery will age to 65% its original capacity during 8*10^-3 days.. Please provide me the solution for my mistakes.Thanks in advance!
clear;
%% loading the OCV-SOC curve
load ocvSoc
f = polyfit(soc,ocv,20);
socTest = linspace(0, 100, 100);
ocvTest = polyval(f, socTest);
subplot(2,2,1)
plot(soc,ocv, socTest, ocvTest);
title('OCV-SOC curve');
xlabel('SOC (%)')
ylabel('OCV (V)')
legend('Simulink model', 'Curve-fitted');
Ah = 3.5; % Ah
%% input time-soc profile
Crate = 0.3;
DOD = 0.6;
SOCavg = 0.5;
cycles = 4000;
time = (0:1:(2*cycles-1)).*(3600*DOD/Crate);
SOC = repmat([SOCavg+DOD/2 SOCavg-DOD/2], [1 cycles]);
T = 36.94+273;
subplot(2,2,2)
plot(time, SOC)
title('SOC profile')
xlabel('time (s)')
ylabel('SOC (0 to 1)')
%% pre-process inputs to the aging model
vTrace = polyval(f, SOC*100);
V = mean(vTrace); % is it OCV or CCV?
quadVavg = sqrt(mean(vTrace.^2));
t = time(end)/3600/24; % time in days
Q = DOD*cycles*Ah; % do I have to multiply by 2 for charge?
subplot(2,2,3)
plot(time/3600/24,vTrace);
title('Aging');
xlabel('time(days)')
ylabel('vTrace (1 to 2.5)')
%% aging model evaluation
% is it additive? NO
% Calendar aging coefficients
% V: voltage at the mean SOC
% T: cycle test temperature (Let's just take the average temperature)
alpha_cap = (7.534 * V - 23.75)*10^6*exp(1)^(-6976/T);
alpha_res = (5.270 * V - 16.32)*10^5*exp(1)^(-5986/T);
% Cycle aging coefficients
% quadVavg: quadratic average voltage (RMS voltage)
% DoD: depth of discharge (0 to 1)
beta_cap = 7.348*10^-3*(quadVavg - 3.667)^2 + 7.600*10^-4 + 4.081*10^-3*DOD;
beta_res = 2.153*10^-4*(quadVavg - 3.725)^2 - 1.521*10^-5 + 2.798*10^-4*DOD;
% Resulting function, Crel and Rrel are relative capacity and resistance
% respectively
% t: time in days
% Q: charge throughput in ampere hours (how much charge has been moved in
% and out)
%CcycleRel = beta_cap * sqrt(Q);
%RcycleRel = beta_res * Q;
Crel = 1 - alpha_cap * t.^0.75 - beta_cap .* sqrt(Q);
Rrel = 1 + alpha_res * t.^0.75 + beta_res .* Q;
disp(['Crel: ' num2str(Crel)])
disp(['Rrel: ' num2str(Rrel)])
%% This cell is to plot aging pattern over time
t = (0:1:cycles).*(3600*DOD/Crate*2/3600/24);
Q = (0:1:cycles).*DOD*Ah;
%CcycleRel = beta_cap * sqrt(Q);
%RcycleRel = beta_res * Q;
Crel = 1 - alpha_cap * t.^0.75 - beta_cap * sqrt(Q);
Rrel = 1 + alpha_res * t.^0.75 + beta_res * Q;
subplot(2,2,4)
plot(t/3600/24, Crel)
title('Relative Cap')
xlabel('time (days)')

 Akzeptierte Antwort

VBBV
VBBV am 20 Apr. 2021

0 Stimmen

%if true
plot(t, Crel)
It seems you have converted the cycles to days already. Try this

1 Kommentar

VBBV
VBBV am 20 Apr. 2021
You are dividing vector t by factor of 3600/24 twice

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Data Import and Analysis finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2021a

Gefragt:

am 20 Apr. 2021

Kommentiert:

am 20 Apr. 2021

Community Treasure Hunt

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

Start Hunting!

Translated by