获取同款模型关注公众号:新能源BMS佬大
为什么在仿真里都使用安时积分法可以作为理论的soc值?刚入门BMS的同学估计会有这样的一个疑惑,就是往往会觉得安时积分法原理简单,而卡尔曼滤波算法相比于安时积分法来说很复杂,潜意识会认为越复杂的算法精度会越高,但其实不是这样的,下面就分析一下为什么在MATLAB仿真里电流积分法可以作为理论参考值,注意这句话的前提是仿真里而不是实际中,这就需要从引起安时积分法的两个误差来说起了,第一个误差就是初始值不准确所造成的,安时积分法的公式如下式所示。
也就是公式里的SOC0会有误差,这个在仿真里面则可以完全忽略,因为仿真里的初始值一般都是100%,因为我们做的实验往往也都是从满电开始的,所以这个值是精确的。安时积分法的第二个误差就是由于在充放电的过程中,由于电流传感器的测量误差所导致的累积起来的误差,注意累积这个词,我们实验的电池数据往往是一个放电或者充电循环,经过测试,在一个充电循环里,累计误差非常非常的小,小到完全可以忽略不计。综和上面两个误差原因分析,安时积分法在仿真里作为理论SOC值的结论就可以站得住脚啦,还有粉丝会觉得为什么不用电池测量设备所测量到的SOC,因为有的实验室的测量设备是除了可以测量电流电压温度以外,还可以直接测量到soc,我觉得用这个来作为理论值也肯定是OK的,但可以回顾下初学SOC的定义的时候可能会了解到的这样一句话:“SOC是电池当前剩余电量与总电量的比值,SOC不可通过传感器直接测量,只能通过测量电流、电压、温度等参数间接获得”。这句话就说明了你的测试设备上的soc也是估计出来的,精度还不一定有MATLAB中计算出来的SOC精度高!
最后来分享两个使用安时积分法来计算SOC理论值的程序和simulink模型。获取可关注公众号:新能源BMS佬大
代码:
clc;
clear;
close all;
%%%%%%%%%%%%%%%%%%%加载数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load('LiBatt_PulseDataEVE.mat');
time = PulseData.time;
Vol = PulseData.voltage;
Cur = -PulseData.current;
Temp = -PulseData.temperature;
Capacity = 287;%%%电池容量
Len=round(length(Vol)*1);
T=1;%%%采样时间
SOC = zeros(Len,1);
SOC(1)=1;
Vocv = zeros(Len,1);
% Vocv(1)=polyval(pfit,SOC(1));
for i=2:Len
SOC(i)=SOC(i-1)-Cur(i)*T/3600/Capacity;
% Vocv(i)=polyval(pfit,SOC(i));
end
plot(SOC);
xlabel"时间/s";
ylabel"SOC";
模型: