第2章:电池特性基础
各位同学,今天我们来聊聊电池特性。说实话,做BMS设计,不懂电池特性就像开车不看仪表盘——迟早要出事。我刚开始做BMS那会儿,就吃过这个亏,以为只要把电压采准了就行,结果项目测试时电池直接鼓包了...嗯,从那以后,我老老实实把电池特性啃了个透。
2.1 锂离子电池工作原理
锂离子电池说白了就是一个「摇椅式」反应。充电时,锂离子从正极「跳」出来,穿过电解液,嵌入到负极的石墨层里。放电时,它们又跑回正极。电子呢?走外电路,给我们供电。
你可能会问:为什么叫「锂离子」而不是「锂电池」?因为里面没有金属锂,只有锂离子在来回跑。这个区别很重要,直接关系到安全性。
正极材料常见的有三种:
- 磷酸铁锂(LFP):我项目中最爱用的,热稳定性好,循环寿命长,就是能量密度低点
- 三元锂(NCM):能量密度高,但热失控风险大,需要更精细的BMS管理
- 钴酸锂(LCO):消费电子用得多,动力电池领域基本被淘汰了
核心要点:锂离子电池的本质是锂离子在正负极之间的可逆嵌入和脱出。这个「可逆」二字,就是我们BMS要守护的底线。
2.2 关键参数详解
做BMS,你每天都要跟这几个参数打交道。我习惯把它们分成「直接测量」和「间接估算」两类。
2.2.1 电压(Voltage)
电压是最直接的参数。单体电压、总电压、开路电压(OCV)、工作电压,每个都有讲究。
- 开路电压(OCV):电池静置后的电压,和SOC有对应关系。我一般静置2小时以上再测,数据才准
- 工作电压:带负载时的电压,会有压降。这个压降大小,能反映电池内阻
- 截止电压:充电上限和放电下限,越界就等着换电池吧
避坑指南:我曾经遇到过采样线接触不良,导致单体电压跳变,BMS误判为过压保护。后来我强制要求:电压采样必须做滤波,而且采样线要用双绞线。
2.2.2 电流(Current)
电流反映的是电池的「出力」情况。充放电倍率(C-rate)是核心概念:1C表示1小时充满/放完的电流。
- 持续电流:电池能长期承受的电流
- 峰值电流:短时间能扛的电流,比如启动电机时的瞬间大电流
- 漏电流:电池自放电,这个值越小越好
2.2.3 温度(Temperature)
温度是电池的「脾气」。25℃是理想工作温度,每升高10℃,化学反应速度翻倍,但寿命会缩短。
| 温度范围 | 影响 | BMS应对策略 |
|---|---|---|
| < 0℃ | 充电困难,锂枝晶风险 | 低温加热,限制充电电流 |
| 0℃ ~ 45℃ | 正常工作区 | 常规管理 |
| 45℃ ~ 60℃ | 寿命加速衰减 | 降功率运行,启动散热 |
| > 60℃ | 热失控风险 | 立即切断,报警 |
2.2.4 SOC(State of Charge)
SOC就是电池还剩多少电。0%表示没电,100%表示满电。但实际中,我们很少用到0%和100%,因为会损伤电池。
估算SOC的方法我常用三种:
- 开路电压法:查表,简单但需要静置
- 安时积分法:对电流积分,但误差会累积
- 卡尔曼滤波法:融合前两种,精度高但计算量大
我的经验:实际项目中,我一般用安时积分+开路电压校正的组合。每100个周期做一次满充校准,能把SOC误差控制在3%以内。
2.2.5 SOH(State of Health)
SOH反映电池的老化程度。新电池SOH=100%,当SOH降到80%以下,就该考虑更换了。
评估SOH的指标:
- 容量衰减:当前容量/标称容量 × 100%
- 内阻增加:内阻翻倍时,SOH基本就到头了
- 循环次数:磷酸铁锂一般能扛2000-3000次
2.3 电池模型
电池模型是我们做算法的基础。说白了,就是用数学公式去模拟电池的行为。我见过三种主流模型,各有各的适用场景。
2.3.1 Rint模型(内阻模型)
最简单的模型,一个理想电压源串联一个内阻。公式:V = OCV - I × R
// Rint模型计算示例
float calc_voltage(float ocv, float current, float rint) {
return ocv - current * rint;
}
优点:计算量小,适合资源受限的MCU。缺点:精度差,动态响应模拟不了。
2.3.2 RC模型(一阶/二阶RC)
在Rint基础上,加了一组或多组RC并联电路,用来模拟电池的极化效应。
// 一阶RC模型状态更新
typedef struct {
float ocv; // 开路电压
float r0; // 欧姆内阻
float r1; // 极化内阻
float c1; // 极化电容
float v1; // 极化电压
} BatteryModelRC;
void update_rc_model(BatteryModelRC *m, float current, float dt) {
// 极化电压更新
m->v1 = m->v1 * exp(-dt/(m->r1*m->c1))
+ m->r1 * current * (1 - exp(-dt/(m->r1*m->c1)));
// 端电压 = OCV - 欧姆压降 - 极化压降
float v_terminal = m->ocv - current * m->r0 - m->v1;
}
我个人习惯用二阶RC模型,精度够用,参数辨识也不太难。
2.3.3 PNGV模型(Partnership for a New Generation of Vehicles)
这个模型是美国PNGV项目提出的,比RC模型多了一个电容,用来模拟电池容量的变化。
PNGV模型的状态方程:
// PNGV模型状态空间
// x = [SOC, V1, V2]^T
// 状态方程:dx/dt = A*x + B*u
// 输出方程:Vt = C*x + D*u
// 其中:
// A = [0, 0, 0;
// 0, -1/(R1*C1), 0;
// 0, 0, -1/(R2*C2)]
// B = [-η/Qn, 1/C1, 1/C2]^T
// C = [dOCV/dSOC, -1, -1]
// D = [-R0]
模型选型建议:
- 做简单的电量指示:Rint模型就够了
- 做BMS核心算法:一阶或二阶RC模型
- 做高精度仿真或研究:PNGV模型
2.4 知识体系总览
下面这张图,是我自己整理的电池特性知识框架。每次带新人,我都会先让他们看这张图,建立整体认知。
给新人的建议:别急着上手写代码。先花一周时间,把电池的充放电曲线看明白。我当年就是太着急,结果算法写出来,仿真跑得挺好,一上实际电池就各种偏差。后来老老实实测了200组数据,才把模型参数标定好。
好了,这一章的内容就到这里。电池特性是BMS的根基,理解得越深,后面的路走得越稳。下一章我们聊采样电路设计,那是BMS的「眼睛」,同样关键。