第一章:锂电池基础与BMS概述

各位同学,欢迎来到《锂电池均衡控制算法从入门到精通》的第一课。

我是你们这门课的老师,一个在BMS领域摸爬滚打了十几年的老工程师。说实话,每次带新人,我第一件事不是让他们看代码,而是先问一个问题:「你真的了解你手里这块电池吗?」

很多人觉得BMS就是写写均衡算法,调调参数。但我要告诉你,不懂电池原理,你写的算法就是空中楼阁。今天,我们就从最基础的东西聊起。

1.1 锂电池工作原理:它到底是怎么存电的?

锂电池,说白了就是一个「锂离子搬运工」。充电时,锂离子从正极跑出来,穿过电解液,钻进负极的石墨层里。放电时,它们再跑回去。

这个过程听起来简单,但里面门道很多。我当年刚入行时,以为电池就是个「大电容」,充放电就是简单的电荷堆积。后来在一次项目中,电池出现了严重的析锂现象,我才意识到——这玩意儿是化学反应,不是物理过程。

核心要点:锂电池的工作本质是锂离子在正负极之间的嵌入和脱出。这个过程伴随着电化学势能的变化,也就是我们说的电压。

你想想看,如果锂离子跑得太快,或者负极塞不下了,会发生什么?嗯,这就是后面我们要讲的析锂和热失控的根源。

1.2 关键参数:SOC、SOH、内阻

做BMS,你天天跟这三个参数打交道。我建议你把它们刻在脑子里。

1.2.1 SOC(荷电状态)

SOC就是「还剩多少电」。0%表示没电,100%表示满电。听起来简单?但实际估算起来,坑多得很。

我记得刚做第一个项目时,直接用开路电压查表法算SOC。结果客户反馈说,车子停了一晚上,第二天SOC跳了10%。为什么?因为电池极化电压消失了,开路电压变了。

我的经验:SOC估算不要只用一种方法。我习惯用安时积分法做基础,再用开路电压法做校准,最后用卡尔曼滤波兜底。三种方法互相印证,才靠谱。

1.2.2 SOH(健康状态)

SOH反映的是电池的老化程度。新电池SOH是100%,用到80%以下,就该考虑更换了。

SOH怎么算?说白了就是当前容量除以出厂容量。但这里有个坑——容量测试需要完整的充放电循环,实际系统中很难做到。所以我一般用内阻变化来辅助判断。

参数 定义 典型范围 我的建议
SOC 剩余电量百分比 0% ~ 100% 不要依赖单一算法
SOH 健康度/老化程度 80% ~ 100% 结合内阻变化判断
内阻 电池内部阻抗 几毫欧到几十毫欧 温度影响很大,注意补偿

1.2.3 内阻

内阻是电池的「健康晴雨表」。新电池内阻小,老电池内阻大。内阻大了,发热就大,效率就低。

我曾经遇到一个案例,客户说电池包充电时特别烫。我测了一下,发现有几节电芯的内阻比其他高了30%。这就是典型的「木桶效应」——最差的那节电芯决定了整个电池包的性能。

避坑指南:我曾经在低温环境下做内阻测试,结果数据完全不能用。后来才意识到,低温下电解液粘度增大,内阻会显著升高。所以做内阻测试,一定要在标准温度下进行,或者做好温度补偿。

1.3 BMS系统架构与功能

BMS是什么?说白了就是电池的「管家」和「保镖」。它要管好电池的充放电,还要在危险时及时保护。

1.3.1 BMS的核心功能

  • 数据采集:电压、电流、温度,这是BMS的「眼睛」
  • 状态估算:算SOC、SOH,这是BMS的「大脑」
  • 均衡控制:让每节电芯保持一致,这是BMS的「手」
  • 保护功能:过压、欠压、过温、过流,这是BMS的「安全气囊」
  • 通信管理:跟整车控制器、充电机对话

1.3.2 系统架构

BMS的架构,我习惯分成三层:

  1. 采集层:AFE(模拟前端)芯片,负责采集电压、温度。常用的有TI的BQ系列、NXP的MC33771等。
  2. 控制层:主控MCU,跑算法和逻辑。我一般用STM32或者英飞凌的TC系列。
  3. 应用层:跟外部系统交互,比如CAN通信、诊断等。

这里有个设计上的取舍。集中式架构简单,但线束多;分布式架构灵活,但通信复杂。我个人偏好分布式,因为每个模组独立采集,可靠性更高。

1.3.3 一个简单的数据采集代码示例

下面是一个简化的电压采集代码,用伪代码表示。实际项目中要考虑滤波、校准、故障诊断等。

// 伪代码:单节电芯电压采集
float read_cell_voltage(uint8_t cell_id) {
    // 1. 选择通道
    select_channel(cell_id);
    
    // 2. 启动ADC转换
    start_adc_conversion();
    
    // 3. 等待转换完成
    while(!adc_done());
    
    // 4. 读取原始值
    uint16_t raw = get_adc_value();
    
    // 5. 转换为实际电压(mV)
    // 假设参考电压为2.5V,ADC为12位
    float voltage = (raw / 4096.0) * 2.5 * 1000;
    
    // 6. 软件滤波(滑动平均)
    static float filter_buf[5];
    static uint8_t index = 0;
    filter_buf[index++] = voltage;
    if(index >= 5) index = 0;
    
    float sum = 0;
    for(int i=0; i<5; i++) sum += filter_buf[i];
    
    return sum / 5.0;
}

小提示:实际项目中,ADC采样会有噪声。我习惯做两件事:一是硬件上加RC滤波,二是软件上做滑动平均。双管齐下,数据才干净。

1.4 本章小结

好了,第一课的内容就到这里。我们讲了锂电池的工作原理、三个关键参数(SOC、SOH、内阻),还有BMS的架构和功能。

这些东西看起来基础,但都是后面均衡算法的地基。你想想看,如果连SOC都算不准,你怎么知道什么时候该均衡?如果连内阻都不清楚,你怎么判断均衡电流该设多大?

下一章,我们会深入讨论均衡控制的必要性——为什么电芯会不一致?不一致会带来什么后果?到时候我会分享一个我亲身经历的「血泪教训」,保证让你印象深刻。

记住:做BMS,基础不牢,地动山摇。咱们下节课见。


公众号:蓝海资料掘金营,微信deep3321