zoukankan      html  css  js  c++  java
  • 浅析锂电池保护板(BMS)系统设计思路(一)

    什么是BMS?

      首先必须弄懂一个定义,什么是BMS?

      BMS其实就是BATTERY MANAGEMENT SYSTEM的缩写,中文名字叫电池管理系统,顾名思义,是专门用来进行锂电池运行管理的模块,对象是锂电池。

      对于一般的终端用户而言,锂电池保护板其实并不存在,或者说,他们并不知道正在自己使用的产品中还有这么一个东西。比如说电动车,100%的用户都知道电动车上面有电池,因为电池提供了能源,但我敢保证,最多有1%的用户知道还有锂电池保护板这个东西的存在。

      BMS的存在感之所以如此低,完全是因为它并不能和用户产生直接的交流,也并不能与用户发生频繁的交互,就算是偶尔产生了一些数据,不过这些数据也是通过某些仪表盘传递给用户观测,当用户看见仪表盘上的红灯时只会说:“嗯,车子好像是坏掉了,质量真差。”

      话说回来,BMS虽然存在感低,不过它存在的意义却是丝毫不亚于仪表,甚至可以说是比仪表还重要,因为他可以检测出这辆车子的能源系统是否坏掉了,只有拥有BMS系统,用户才可能在不冒险的情况下知道这辆车到底是好是坏。

      如果有一个行业内的嵌入式工程师要买一辆电动车,在一辆没有显示仪表和BMS板子的电动车中进行选择,那么他肯定不敢选后者,因为如果电动车没有了仪表,那么用户体验会极差,但如果电动车没有了BMS……与其说是一辆电动车,还不如说是一辆随时可能发生被激活的炸弹。

      那么BMS在能源领域为什么如此重要?BMS的存在到底有什么意义?

    -------------------------------------------------------------------------------------------------------------

      本文便从一个底层工程师的角度,以电动车用的BMS模块作为例子专门对锂电池的保护板设计进行一些探讨,并且会给出一个参考方案,当然由于笔者能力有限,水平一般,如果文中出现了错误或者纰漏,请直接指出。

    BMS的大体需求是什么?

      当设计团队拿到一个项目,开始开发的时候,首先必须要搞清楚的便是项目的需求,这个需求可不仅仅是老板口头上说几句话,而是需要一个切实的、详细的、标准的文档,文档要以1、2、3为结构,明确的把所有的需求点给罗列出来。

      我们现在拿到了一个项目:低速电动车的BMS板。

      只要项目立项成功,那么作为产品经理,或者团队leader,则列出需求文档是必须要做的事情。

      锂电池管理系统,其中重点二字在于“管理”,要想实现管理功能,必然需要两个模块,第一:监测。第二:控制。只有在我能够监测这个系统的前提下,我才能控制这个系统。

      由此为核心点,我便可以慢慢的罗列出大致需求:

    1.   监测能源系统,能够实时读出锂电池的所有状态。
    2.   控制能源系统,根据锂电池的状态,在需要的时候进行干预(比如断开/闭合充放电回路的MOS管)。

    保护功能如何实现?

      数据采集

      电池系统的大致需求分为采集和控制,那么采集的都会有什么数据?

    1.   电压
    2.        电流
    3.   温度

      作为一个以管理锂电池的系统而言,以上3点是我们要重点监测的数据,如果系统超级简单,采集的点只有3、4个,那么直接使用MCU的AD接口进行读取信息便可,但在实际中几乎不可能存在这种情况,通常所用的采集的方式一般是使用模拟前端。

    系统信息

      电压:锂电池本身的化学特性决定了我们必须要对电压进行保护,所谓的电压保护,是我们必须要保证锂电池的电压永远在合适的范围之类,不能让电压过低,因为其内部存储电能是靠电化学一种可逆的化学变化实现的,过度的放电会导致这种化学变化有不可逆的反应发生,因此锂电池最怕过放电,一旦放电电压低于2.7V,将可能导致电池永久性损坏,也就是报废。同时也不能让电压过高,因为电池一旦过度充电,导致的危害远远大于过放,过放最多损坏电池,不会对周围造成危害,而过充则可能导致电池温度升高,以至于发生自燃甚至爆炸,这种危害是致命的。

      电流:所谓的电流保护,也是我们必须要保证,无论是充电还是放电,电流都不能过大,大家都清楚的短路便是过流的一种体现,当系统正负极直接接触,导线电阻极小,导致电流极大,极大的电流又会产生大量的热,从而引发的燃烧和爆炸是很致命的。其实,就算不是短路,但过大的电流依然会导致电池内部发热,这样也极有可能会造成永久性的损害。

      温度:温度保护不用多言,除开锂电池本身的化学特性导致它不能在极端温度下使用之外,我想任何一个类似的系统,为了安全起见都应该考虑到温度。

      看到这里大家也应该明白了,锂电池保护系统的逻辑其实很简单,无非就是一些判断,以及MOS管的控制,这些东西只要是有过软件基础的大学生应该都能实现。

      现在将上面的保护细分:

    电压保护

      一个锂电池包,本身并不是一个整体,如果拆开它的外包装就能发现,它其实是由N个18650电池经过串并连所组成。

           

      比如我们手上的48V20AH的锂电池包,它的组成是,每N个锂电池并联,作为一个子单元,然后在由16个这样的子单元串联,最终才形成一个锂电池包,若论单个18650电池的数量,至少有上百个之多。

      

      由此,如果我们想要监测并且保护系统的电压情况,自然不能简单的只采集一个总体电压,考虑到电池均衡等特性,虽然不用对每个电池进行采集和控制,但作为组成电池包的每一串的单体电压是必须要监测的。

      如果一个16串的锂电池包,那么需要监控的电压点自然不能低于16个(这就是为什么需要模拟前端的原因,系统采集点过多,一般的MCU不可能满足)。

        等采集到了单体电压和总电压以后,我们就可以进行逻辑设计了。

      电压保护相关的项目:

    1.   总体电压
      1.   总体过压保护
      2.   总体欠压保护
    2.        单体电压
      1.   单体过压保护
      2.   单体欠压保护

      ※一般更容易触发的保护当然是单体,如果每一串电池的电压的都没问题,那么总体电压自然也不会有问题。

      保护过程:系统采集电压量,进行判断,一旦检测到某项指标超过设定的保护值,并且系统的状态符合保护条件(充电时不进行欠压保护,放电时不进行过压保护),然后持续了一定时间(防止抖动),那么断开充放电回路并进行报警,至于是断开充电还是放电,根据实际情况决定。

      那么保护之后该如何恢复?总不能让电动车一次过充电后就永远报废吧?

      系统发生了保护,今后自然还有恢复的时候,如果系统发生了单体电压保护,那么可以设定恢复值,等待电压自然恢复到合适范围,并且持续了一定时间以后(防止抖动),便可以重新打开充放电回路。

      ※恢复值和保护值最好不要完全一样,这样可以给系统留出一些余量,也可以防止抖动的发生。

      以下是关于电压保护简易的逻辑表:

           

      

    电流保护

       电流的保护与电压不同,它自然不会分为总体和单体,下面的锂电池由几个串组成对电流这个信息而言毫无意义,它关心的只是一个在负载/充电机回路上的总体量。

      

      保护过程:电流是有方向的,因此我们在保护中也要考虑到这一点,放电过程中,电流从电池正极流出,经过负载后再回到电池负极,充电过程中,电流从充电机的正极流出,经过了电池后再回到充电机负极,这是两个完全相反的过程。

      假设我们设定充电过程的电流为正,那么放电时电流必然为负,在保护判断中,等进入了模块后,我们用其绝对值与保护参数比较,当超过正常值时断开充放电回路(电流保护只关心最大值,不用关心最小值),这个过程与电压保护大同小异。

      ※电流过大产生热量累积这是一个持续的过程,所以在电流上一般会有两重保护,第一重保护的设定值比较小,延时时间比较长,第二重保护的设定值比较大,延时时间很短。比如说电流>1A,500ms后保护,电流>5A,10ms后保护。

      当电流保护发生以后,我们并不能像电压恢复一样实时读取数据,因为一旦我们把充放电回路断开以后,回路上的电流瞬间就变成了0A,要想恢复保护状态,一般有两种条件:第一,不需要人工干预,在经过一段时间之后,自动打开回路,如果此刻依然为过流状态,那么系统又会进入保护,这样反复来个几次,便可以将系统的状态设置为故障了。第二,需要人工干预,等负载或者充电机移除后,打开回路。

      短路保护其实也是电流保护的一种,只不过当系统短路以后,电流理论上会变成无限大,这样产生的热量也是无限大,如果要等到软件反应过来然后保护,系统说不定早就完蛋了,因此,对于短路保护一般是采用硬件来自动触发,触发后传递给MCU一个信号即可。

    温度保护

       温度保护比较简单,一般的逻辑就可以实现,温度值有上限也有下限,甚至在细分还可以分为充电时的温度保护以及放电时的温度保护,根据项目的实际需要设计逻辑即可。

       需要注意的是,在实际的测试中发现,温度是一个比较容易抖动的值(这和选用的传感器有关,比如使用热敏电阻),所以在判断的时候保护值和恢复值一定要做出一个合理的区间,不然系统会不稳定。

    均衡控制

      锂电池系统中除了以上3个正常的保护量之外,还需要有一个保护措施,那便是均衡保护。

      上面说过,一个锂电池包由N串电池组成,根据化学特性,如果某两串电池的电压相差过大,这就会造成电量的不均衡,比如一串电池的电压是3.6V,另一串电池的电压是2.5V,相差如此之大,那么这样的电池基本上已经可以说是报废了。

      所以系统中也需要这样的判断,最大单体电压和最小单体电压的差值如果达到了某个极限,导致出现故障的概率极大,那么无论是放电还是充电都不应该在继续进行。

      为了尽量避免这种情的出现,在BMS系统中就应该设计电压均衡功能。

      电压均衡分为主动与被动,被动均衡是设计硬件电压,使用电压比较器,当某串电池电压与其它电池电压相比过高时(比如相差达到50ms),或是使用别的元件来消耗掉高电压电池的电量,或是将高电压电池的电量灌入低电压电池中。

      主动均衡在原理上也一样,只不过可以由程序来控制均衡的更多细节,用串转并的译码器作成开关电路,控制系统只在充电过程中均衡,可以更为灵活的设定均衡的电压阈值等等。

    待续……

  • 相关阅读:
    PAT之我要通过
    卡拉兹(Callatz)猜想
    数组元素循环右移问题
    Reorder List
    一个fork的面试题
    内存流和null字节
    标准C IO函数和 内核IO函数 效率(时间)比较
    由fdopen和fopen想到的
    VS经常报错的link error 2019
    VS快捷键设置
  • 原文地址:https://www.cnblogs.com/han-bing/p/9045812.html
Copyright © 2011-2022 走看看