SH367306 AFE 调试实录:两个关键问题与解决方案
本文基于量产 60V 20 串 BMS 代码,还原两个真实工程问题,每个都附代码级解决路径。
问题一:电流零点温漂 —— 产线标定一次不够吗?
现象
BMS 在常温(25°C)下校准完毕后电流精度很好(±50mA)。但样品放在高低温箱里测试时:
-20°C 时:0A 静止状态,电流读数约 -1.2A
60°C 时:0A 静止状态,电流读数约 +0.8A
这意味着低温下电池实际在休息,BMS 却判定"有 1.2A 放电电流",触发模式切换 和 SOC 累积误差。更糟的是,这个误差在不同板子上还不一样。
根因
SH367306 的 CADC 链路中有三个温漂源,其中 PGA 输入失调电压(Vos)的温漂是主因:
Vos 的温漂之所以严重,是因为它在信号进入 ADC 之前就被 PGA 放大了 200 倍。更隐蔽的是:零点会随芯片老化漂移(5-8 年寿命内可达 ±200mA),而且每次上电的零电流 ADC 值也不完全一样(±20mA 的随机差异)。产线标定一次、终身使用——三个维度的漂移都覆盖不了。
为什么不在产线标定零点
产线环境温度不可控——深圳夏天 35°C、冬天 15°C,标定的零点含不同量的温漂分量
产线上工装可能已连接负载,标定前提"零电流"不成立
占用产线节拍——AFE 上电后等振荡器稳定 + 首次采样 + 多次取均值,至少多 2 秒
而 BMS 每次上电天然满足零电流条件——固件 先强制关断 MOS,确保无电流通过了才学零点。
解决方案:每次上电自学习 + 温度补偿表
初始化(上电,T = T_init):
自学习: Offset_raw = CADC 零电流输出 = O₂₅ + Δ(T_init)
归一化: Offset₂₅ = Offset_raw + GetTheTempOffset(T_init)
= O₂₅ + Δ(T_init) - Δ(T_init) = O₂₅ ← 温漂分量被消掉
运行时(T = T_cur):
Corrected = CADC_raw - Offset₂₅ + GetTheTempOffset(T_cur)
= CADC_raw - O₂₅ - Δ(T_cur)
当零电流时 CADC_raw = O₂₅ + Δ(T_cur)
→ Corrected = 0 ✓
GetTheTempOffset(T) 是研发阶段高低温箱标定 10 块板子、取中位数得到的 13 点补偿表(-40°C 到 75°C)。片间温漂残差 < 50mA,所有板子共用同一张表。
为啥增益不每次标定、零点要每次学
两者的物理本质决定了对策:零点的漂移源是失调电压——受温度、老化、上电瞬态一切因素影响的模拟量,必须动态跟踪;增益的漂移源是电阻比值——受工艺和几何约束、几乎不受外部影响的数字量,产线一次标定即可。
问题二:Cell1 电压系统性偏低 —— B- 线上的"隐形电阻"
现象
同一电池包,用高精度万用表(Fluke 289,四线法)直接测量 Cell1 正负极,读数是 3.521V。但 BMS 显示的 Cell1 只有 3.498V,偏差 23mV。
而 Cell2~Cell20 的读数与万用表一致(偏差 < 5mV)。只有 Cell1 偏低,换了板子也一样。
根因
Cell1 是电池组的最负端电芯。它的负极直接连到 BMS 板的 B- 端子,中间经过了一段较长的导线(约 15-20cm)。
电池 Cell1 负极 ──── 长导线(≈20cm, ≈3mΩ) ──── BMS B- 端子 ──── 采样电阻(0.5mΩ) ──── GND
│
AFE Cell1 采样点
B- 线是所有 20 串电芯电流的必经之路。30A 放电时,B- 线上 3mΩ 的阻抗产生 3mΩ × 30A = 90mV 的压降。AFE 采到的 Cell1 电压 = 真实电压 - B-线压降。Cell2 不受影响,因为 Cell2 的采样线不过大电流。
解决方案:固定系数补偿
B- 线压降与电流成正比,用"电流 × 等效阻抗"直接补偿(AfeIf_Calculate.c:219-226):
#ifdef BMP6020S20
CellVoltage[0] -= Current_mA × 50 / 100000; // 0.50mV/A
#endif
#ifdef BMP6030S20
CellVoltage[0] -= Current_mA × 33 / 100000; // 0.33mV/A
#endif
6020 电池包的 B- 线更细/更长,等效阻抗更大(0.50mV/A);6030 线更粗,只有 0.33mV/A。系数通过实验室不同电流下对比万用表实测值与 BMS 读数、线性拟合得到。
总结
两个问题的共同点:都不是芯片本身的 bug,而是物理世界的约束在数字域的投影——温漂是物理的,B- 线的铜阻抗是物理的。量产代码和开发板 demo 的区别就在于是否处理好了这些物理约束。
本文基于 STM32F072 + SH367306 × 2 两轮车换电 BMS 量产代码分析。
————————————————
版权声明:本文为CSDN博主「kebidaixu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kebidaixu/article/details/162612105
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|