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)')

 Respuesta aceptada

VBBV
VBBV el 20 de Abr. de 2021

0 votos

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

1 comentario

VBBV
VBBV el 20 de Abr. de 2021
You are dividing vector t by factor of 3600/24 twice

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Data Import and Analysis en Centro de ayuda y File Exchange.

Productos

Versión

R2021a

Etiquetas

Preguntada:

el 20 de Abr. de 2021

Comentada:

el 20 de Abr. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by