基于实验的电动汽车动力电池SOC

前言

本文为笔者在学习《基于MATLAB的新能源汽车仿真》过程中学习笔记,所涉及的表格数据和公式均为书籍里的。仿真数据是网上找的恒电流放电数据。本文仅作为笔者的入门学习记录。

一、分析动力电池SOC估算方法

SOC是指动力电池按照规定放电条件可以释放的容量占可用容量的百分比,对于BMS(电池管理系统)很多功能都依赖于SOC的精确估算。

SOC的估计方法有很多,具体分类如下图:

特别地,开路电压法和安时法在SOC估计方法中特别普遍,本文重点介绍。

开路电压法:开路电压是指动力电池在开路状态下的电池端电压,开路电压与SOC值在一定条件下呈比例关系。该方法对SOC值的估算精度高,且容易实现。但是只能估算静置0.5-1.5h之后的SOC值,所以该方法一般不单独使用,需要和其他方法结合。

安时法:该方法是对电流在时间上的积分,对电池容量的改变进行检测,进而估算出SOC值。该方法容易实现,缺点是受初始条件的影响,而且误差会积累,一般该方法需要与其它方法结合。

二、建立安时-开路电压补偿法数学模型

安时-开路电压补偿法式以安时法为主,开路电压法为辅。因为安时法具有不易受到电池本身影响的优点,而且不用分析电池的内部复杂反应,只需考虑外部系统的影响;而开路电压法的优点是对于静置状态下的SOC值估算非常精确,能很好弥补安时法的缺点。

该方法分为两步实现,第一步是采用开路电压法对SOC初值进行估算,第二步是对一些因素的影响进行补偿。

1.考虑充放电倍率的补偿方法

根据经验公式:I^nt=K

I为放电电流,t为放电时间,n为电池类型常数,K为活性物质常数。

只要在实验中测出电池在两种不同电流I1,I2的放电时间t1,t2就可以联立解出n和K的值。

公式为:

n=\frac{lgt_1-lgt_2}{lgI_1-lgI_2}

lgK=nlgI_1+lgt_1

由之前的经验公式可以得到容量C_t:

C_t=It=I^{1-n}K

充电补偿系数为:\eta_1=\frac{C_I}{C_N}=(\frac{I}{I_0})^{1-n}

其中I_0为最佳放电电流。

SOC=SOC_0-\frac{1}{C_N}\int_{t_0}^{t_1} \eta_1I dt

2.考虑温度的补偿方法

目前常用的公式为:

\eta_2=1-0.008|T_B-T|

考虑温度的补偿公式为:

C_T=\eta_2C_B

C_T为温度T时的电池容量,C_B为温度20℃时的电池容量。

3.考虑电池老化的补偿方法

C_2=\eta_3C_N

C_2为循环充电后电池容量衰减后的总容量。

通过上述三种补偿方式,式子可写为:

SOC=SOC_0-\frac{1}{C_N}\int_{t_0}^{t_1} \eta_1\eta_2\eta_3I dt

C_N也称为标称容量,是预先标定好的。

4.基于安时-开路电压补偿法对动力电池SOC仿真

通过上面的三组数据,使用MATLABcftool工具箱进行拟合即可,以第一个为例:

I = [0.12, 0.24, 0.48, 0.72, 0.96, 1.2, 2.4];
C = [1.232, 1.128, 0.921, 0.789, 0.659, 0.552, 0.143];
cftool

 

得到了电池SOC值与开路电压的关系。

下面通过拟合多项式绘制曲线:

u = 25:1:50;
SOC = -(9.393e-4) * u .^ 2 + 0.1122 * u - 2.207;
plot(u, SOC)
xlabel('开路电压/V')
ylabel('SOC值')

 

下面是使用MATLAB与simulink联合进行仿真: 

SOC = zeros(length(data02Cconstant(:, 1)), 2);
voltage = zeros(length(data02Cconstant(:, 1)), 2);
current = zeros(length(data02Cconstant(:, 1)), 2);


SOC(:, 1) = 0:length(data02Cconstant(:, 1)) - 1;
voltage(:, 1) = 0:length(data02Cconstant(:, 1)) - 1;
current(:, 1) = 0:length(data02Cconstant(:, 1)) - 1;
j = 0;
for i = 1:length(SOC(:, 2))
    voltage(i, 2) = data02Cconstant(i, 1);
    current(i, 2) = data02Cconstant(i, 2);
    SOC(i, 2) = data02Cconstant(i, 3);
    % 这里查看得知:j为3600,证实了数据集里的是一秒采一次样,电流满足A.h
    if current(i, 2) ~= 0
        j = j + 1;
    end

end

 

参考资料:

《基于MATLAB的新能源汽车仿真》 崔胜民

  • 63
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值