BMS技术梳理

大憨熊 提交于 2020-01-24 10:10:35

从事BMS软件设计已有3年,自觉还没有真正的入门,不过还是有一些心得是想可以分享的,也是对自己的知识做一个梳理吧。

  • 初稿

一个项目入手,我的理解:首先,必须明确项目的需求。只有真正的理解项目,从用户的角度考虑,才能做出最为适合的产品,毕竟产品最终还是为人服务的。

一听到,新能源汽车,很多人的第一印象,不就是,以电池代替汽油给汽车提供动力嘛。是的,大家都是聪明人,一下子抓住了事物的本质。对,就是这样。就像小时候,我们玩的四驱车,本质都是一样的,不要听别人忽悠,有多神秘似的。

那么以电池代替汽油有什么好处呢?这些都被专家们分析的云里雾里,十分的高大上。其实,也就这么几个优点,环保清洁(好像是一句废话),其次还是在这个国度电费比油费便宜。

概要

大家都知道要实现电池提供动力,控制终端就是电池管理系统(BMS)。

接下来,我会从信号采集,数据处理和控制逻辑,一一解析,我眼中的BMS

一、信号采集

顾名思义,电池管理系统,首先管理的对象是电池。我们就必须对当前电池的状态有一个细致的了解,也不能什么都不知道就用开始电池。电池的状态,主要表现为以下的几个方面。

  1. 电池的单芯电压
  2. 电池的温度
  3. 电池组的总电压
  4. 电池组的总电流
  5. 电池组的绝缘电阻

下面,我就对电池信息的采集,做一简单的说明:

1. 单芯电压的检测

电池的成组方式一般是串联加并联。以我的理解,串联主要是加大整个电池模组的电压,并联就是增加电池的可充放电电流。

我们都知道,想要能驱动电机工作,就必须给它一定的能量,能量怎么来的,学过物理的都知道

P = V*I

想要 P 变大,不就得使电流电压变大吗?

再说电池,一节电池的最大放电电流和最大充电电流都是固定的。并联简单的就是将这两个值成倍的放大。

那么,单芯电压到底怎么测?就是将并联的单芯当做一节电池使用,这节电池的两端电压,就是单芯电压了。很简单的,不是吗?

原理虽然说起来是很简单,不过精度要求却是挺高的,这是硬性要求。我们一般的电池OCV曲线,是上下抖中间平的的样子。电池的电压稍有变化,SOC的变化就很大了。

所以呢,检测芯片的要求也是很高的。我用到的有两款芯片一块是凌特的LTC6804,还有一块是TI的EMB1428,有兴趣的朋友可以看看他们的数据手册,了解一下。

2. 电池的温度检测

相对于电压的高精度要求,温度的检测不是那么的严格了。一般来说在2°的误差内,都是可接受的。温度的检测,相对来说也是简单多了,我了解的大多数做BMS的厂商,用的都是NTC来做检测的。

NTC检测温度的原理,就是温度值和对应温度下电阻值一一对应,一般和另一个电阻分压一个标准电压。使用单片机ADC功能就可以简单的得到温度值。

3. 电池的总电压采集

总电压,即观察电池整个模组的电压状况。一般来说,没什么太大的用处,只是作为一个参考值,来用。总电压除以电池的串联数,就是一个大概的单芯电压平均值。

总电压的大小不定,这是由车辆本身的需求决定,就我所见到的电压等级150V~800V不等。

那么,总电压如何采集?
常用的一种方法就是,将总电压使用电阻等比例分压,AD采集采样电阻的两端电压。需要注意的是,动态电压的变化是十分不稳定的,所以必须的消抖电路和消抖程序都是需要的。

4. 电池的总电流采集

工作模式有充有放,电流因此有正有负。

电流,我认为这是所有电子设计中是最需要关注的一个参数。电流,是最容易引发故障,也是最为危险的。

在BMS系统中,电流在SOC的计算,电池均衡策略中都有不可忽视的作用。

电流采集的精度和频率都有非常高的要求。这里我用过两款芯片AS8510和CS5490,有兴趣的朋友,可以了解一下。

5. 电池的绝缘电阻采集

什么是绝缘电阻? 简单来说,就是防触电保护的最小电阻。国标上的要求是0.1mA。我们一般来说都会放大余量,安全问题再怎么关注都不差。

那么,绝缘电阻又是怎么测量的呢?传统的话,有两种测试方法,使用单桥检测,或者双桥检测方式。具体的原理图我就不贴了

简单说一下优缺点:

  • 单桥检测,就是在主正或者主负一端加一个继电器,优点是节约成本,减少继电器本身两端的电压而导致的误差。缺点也很明显,如果接在主正继电器一侧,恰好主正的绝缘电阻值较大,会有较大的误差(主要是正负两端采集的倍数过大)。
  • 双桥检测,就是正负两端都加一个继电器。缺点是成本高,采集精度下降。优点,减少两端的采集倍数,算出的值相对准确

二、数据处理

之前一直在思考,什么是程序,程序的本质是什么?
我的理解“程序就是一种控制思想,一种因果变化”。

为了实现某个功能,具现化为某个状态变量的输出。就要从已有的输入变量中选择合适的变量作为输入。输入通过某种复杂的转换(控制实现/计算实现)得到输出的过程就是程序。

关键:

  1. 确保输入输出变量的准确性(数据处理)
  2. 从输入到输出实现的可能性(逻辑控制)

数据的处理可以从以下的两个方面考虑:

  • 输出变量的处理
  • 输入变量的处理

数据,我将它分为两类

  1. 功能数据
  2. 性能数据

功能数据:数据是作为算法的必要输入特意获取的数据,比如上面的采集数据,SOC等;
性能数据:数据不作为功能逻辑上的输入,更多的是对软硬件的稳定性安全性的一个评估作用。比如板子的输入电压检测,继电器开关的状态检测,CAN出错等。

变量分两类:数据和状态,有以下的几种处理方式

  1. 数据:不同状态下,多个数据,取权重。
  2. 数据:
    1. 去除在范围之外的数据,多个采样,取有效值的均值。
    2. 对于超范围的数据,设置标志位,故障处理。
  3. 状态:连续一段时间维持某一状态不变(消抖)

数据,经过处理,如果没有问题就可以作为有效输入数据。在功能被触发的条件下,直接被调用。
那出错了呢?对于这个问题,专门有一个故障处理的模块。实时的将故障点检测出来,发给整车,并且存储起来。

故障等级大致是这样的分的:

  • 一级:只是报警,不做任何处理,可消退
  • 二级:报警,限速,可消退
  • 三级:报警,限速,不可消退
  • 四级:报警,制动,不可消退

具体的哪些故障对应哪个等级,就不说了。

三、逻辑控制

逻辑控制主要有以下的几个部分:

  • 上电自检,确定系统状态
  • 继电器控制,不同状态,不同的继电器数量有不同的控制方式
  • 充电控制,分为快充和慢充,需要分开处理
  • 均衡控制
  • 电池加热控制

1. 上电自检

汽车一共有两个工作模式:放电,充电。其中充电再分为快充和慢充。确定工作模式的方式是,给BMS供电的到底是哪个24V电源,T15/快充/慢充

只有自检通过才允许上高压,也就是闭合对应的继电器。那么,观察哪些信号,就可以确认自检没问题?

  • 所有继电器状态OK
  • 总电流OK
  • 绝缘电阻OK
  • 只存在一个工作模式

自检OK,就可以使能对应的CAN通讯,也可以上高压放电和充电。

2. 继电器控制

继电器的控制逻辑更多的是一个先后顺序

  • 开始放电
  1. 吸合负极继电器
  2. 吸合预充继电器
  3. 吸合放电继电器(正极和电机之间的继电器)
  4. 断开预充继电器
  • 停止放电
  1. 断开负极继电器
  2. 断开放电继电器
  • 开始充电
  1. 吸合负极继电器
  2. 吸合充电继电器(正极和充电机之间的继电器)
  • 停止充电
  1. 断开负极继电器
  2. 断开充电继电器

先断负极,再断正极,是为了分担上下电的压力;这种说法保留

3. 电池加热控制

电池加热主要是在电池充电的时候使用。

温度过低,电池的活性降低,所以需要先给电池加热,后续再充电。

基本的流程:吸合加热继电器,向充电机需求一个电流。此时动力和充电机同时给加热继电器提供电流,只是充电机电流比较大。加热结束,断开加热继电器,同时向充电机需求一个大的充电电流。

4. 充电(快充)控制

所有的控制逻辑在国标GBT 27930-2015中定义的很清楚。严格按照国标来基本不会出什么问题

5. 均衡控制

均衡,是一个比较大的概念,后续再讲

总结

梳理了BMS的一些基本概念,通过这个过程这才发现,我了解的还是太少太生疏了。虽然做了这么长时间的BMS,我还是处于表面化的层次中。抱头痛哭!

技术啊,就怕深究!!!

留下的问题:

  1. SOC算法和均衡控制算法
  2. Simulink/Stateflow模型化设计的一些知识
  3. AutoSar架构的梳理
  4. 标准化设计的一些想法
  5. 标定和bootloader
  6. 上位机MFC/Qt上的知识
  7. 电池知识的深入了解
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!