浅析锂电池保护板(BMS)系统设计思路(二)SOC算法

备注:作者有bms采集板开发板出售,有意者私信我
电量(soc)算法
 除了参数的监控与保护之外,作为bms系统,其中最重要的功能还有一项,那便是soc的计算。
 soc,全称是state of charge,系统荷电状态,也叫剩余电量,代表的是电池使用一段时间或长期搁置不用后的剩余容量与其完全充电状态的容量的比值,常用百分数表示。
 其取值范围为0~100,当soc=0时表示电池放电完全,当soc=100时表示电池完全充满。
 那么soc有什么意义呢?
 任何一个产品,对于一般的终端用户而言,如果对其直接提供电压、电流之类的电池参数,那么用户可能十分费解,因为对他们来说,使用的电源产品唯一能够理解的,似乎就只有电量。
 比如当我询问你的手机还剩多少电?你肯定不会回答电池的端电压还有3.54v,而是直接告诉我还剩大概80%。电动车也是一样,我们甚至可以粗糙的用几个柱状图来表示电池当前的状况,这样也总比直接提供准确的电压要好理解很多,即使不准,但能让用户直观的理解工程师想要表达的意思。
 因此,计算出准确的soc,不仅能提升用户体验,而且好能延长产品的使用寿命,这对于任何一块产品而言意义都非常巨大。
 在一般的bms系统中,计算电量的方式大概有两种:
 ①:硬件
 所谓硬件,便是使用一些专门的电量计芯片来计算电量,比如说ti的bq34z100,这是一块基于阻抗跟踪技术的电量计,其计算精度不错,而且操作简单,只需要在前期进行一些简单的操作(使用ti官方软件进行基本参数配置,计算电池化学参数chem_id,进行充放电循环学习导出量产文件等)然后就可以直接从芯片里读出电量值。(电量计芯片的方法本文不涉及,感兴趣的同学可以自行查阅资料,或者在本文下留邮箱)
②:软件
 软件计算soc的方法也不少,有开路电压法、安时积分法、内阻法、神经网络和卡尔曼滤波法……
 开路电压法由于要预计开路电压,因此需要长时间静置电池组,内阻法存在着估算内阻的困难,在硬件上也难以实现,神经网络和卡尔曼滤波法则由于系统设置的困难,而且在电池管理系统中应用时成本很高,不具备优势,因此相对于开路电压法、内阻法、神经网络和卡尔曼滤波法本而言,安时积分由于简单、有效而常被采用。 本文主要介绍基于stm32的bms的soc的编程语言算法。
----------------------------------------------------------------------------------------------
 积分是一个数学模拟的概念,如果转化为生活语言,就是累积一端时间的量,如果转化为程序语言,就是把某个变量相乘在相加计算和。
 安时积分中的基本参量自然是电流,在任何一个能源系统运行之时,最能够体现其运行负荷状态的必然就是电流,比如一个电机,如果想要转的快,回路上的电流必然增大,比如一个灯泡,如果想要更亮更闪,回路上的电流也要增大。
 soc的数学定义是什么?
上面说过,soc就是一颗电池还剩多少电,也就是容量,电池容量的定义是,在一定条件下,所放出的电量,即电池的容量,我们通常以安培、小时作为单位,简称安时(用 ah 表示)。
 假如有一颗电池当前的容量是20ah,就是说明,如果我们用1a的电流来进行放电,理论上它可以使用20个小时,等我们把这颗电池用光之后,再使用1a的电流来充电,理论上也需要20个小时才能充满。
 如果使用2a的电流来充放电,那么时间也会从20小时缩短到10小时……
 安时积分的基本原理就是把电流按照时间进行累计,然后记入剩余电量之中,这和用管子朝泳池里灌水是一个道理。
 系统启动,传感器开始电流采集,假如每隔20us采集一次,如果采集到的充电电流是1.5a,那么我就认为,在这20us的时间段内,充电电流一直都是1.5a,那么这段时间里增加的电量就是1.5a * 20us(这里为了表达清晰暂时不转换单位)。
 系统充电:现在的剩余电量 = 20us前的电量 + 20us内产生的电量;
 系统放电:现在的剩余电量 = 20us前的电量 - 20us内产生的电量;
 我们采集到的电流信息,是负载/充电器回路上的电流信息,当电流大于某个阈值的时候(300ma),我们认为是充电,当电流小于某个阈值的时候(-300ma),我们认为是放电,这个没有问题,不过,如果采集到的电流为0,那么系统就真的没有任何消耗吗?
 当然不是,就算是mcu本身也是需要消耗能源的,它使用的也是电池的电,只不过没有计入积分之中,如果想要算法更加精确,我认为bms板子的固定功耗是不能忽略的,虽然电流消耗不大,但毕竟是时时刻刻的在消耗,而且这个消耗几乎不会有很大的改变,如果考虑了固定功耗,那么新的算法如下:
 系统充电:现在的剩余电量 = 20us前的电量 + 20us内产生的电量 - 系统固定功耗电流;
 系统放电:现在的剩余电量 = 20us前的电量 - 20us内产生的电量 - 系统固定功耗电流;
tim_cal_ms = ostimeget() - time;//就算现在经过的时间
   time = ostimeget();             //保存现在的时间
   /* 安时积分 */
   /* 容量 = (当前功率电流 - 系统固定功耗) * 时间 */
   cap_mams = (cap_mams - (current_ma * tim_cal_ms)) - (system_fixed_power_current * tim_cal);
   /* 充电电量或者放电电量累积超过 10mah */
   if((cap_mams > 36000000) || (cap_mams calculation_vaule) && ((measure_vaule - calculation_vaule) > 10))
   {
       measure_vaule = calculation_vaule + 10;
   }
   else if ((calculation_vaule > measure_vaule) && ((calculation_vaule - measure_vaule) > 10))
   {
       measure_vaule = calculation_vaule - 10;
   }
   else
   {
       ;
   }
   x_now = calculation_vaule;
   // 先验估算值
   x_mid = calculation_vaule;
   // 先验协方差
   p_mid = p_last + q;
   // 卡尔曼增益
   kg = p_mid / (p_mid + r);
   // 最优估计值
   x_now = x_mid + kg*(measure_vaule - x_mid);
   // 最新协方差
   p_now = (1 - kg)*p_mid;
   p_last = p_now;
   x_last = x_now;
   return (uint8_t)x_now;
}
有了以上量准校准的方法,相信系统的soc在一般情况下不会偏差太大。


电热水器保安装置制作原理
51单片机“积木式”实验板的制作
美国向苹果发出的国家安全相关数据索取要求再次急剧增长
采用Quartus II软件和EP2C5芯片实现新型位同步提取电路的设计
物联网在医疗上实施经常遇到什么障碍
浅析锂电池保护板(BMS)系统设计思路(二)SOC算法
测试测量的接线细节,接线方式与电路接线
基于P89C591控制器实现实现变电站远程控制系统的设计
安防行业在2018年的十大关键词回顾
没有绝对的市场红利 车企必须要学会适应市场变化
Banana Pi BPI-Centi-S3 使用MicroPython编程显示JPG图片
光电式电流互感器的发展与应用
讨软件开发过程中关于角色、重构和质量的问题
研究表明如果周围有摄像头时,钙钛矿太阳能电池性能会更好
5G商用牌照发放后的PCB行业有什么改变
怎么去设计一种基于RT-Thread+RA6M4的光照监控设备呢?
马自达到底好在哪,为什么懂车人都推荐它?
自己在家就能做核酸检测,这样的设备即将上市
汽车ESP用传感器/接口技术是什么意思
日本开发出新型黄色荧光材料,LED尺寸将来可比白炽灯