尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

BMS电流测量与AS8510高精度AFE芯片:从原理到工程落地

BMS电流测量与AS8510高精度AFE芯片:从原理到工程落地 做BMS的工程师应该都有这个体会电池管理系统的指标千千万最后用户能感知到的其实就是续航准不准、充电快不快、告警灵不灵而这些全都建立在电流和电压测量够不够准这个地基上。我这几年做电动汽车BMS方案选型把霍尔传感器、磁通门、隔离运放加分流电阻这几条路线都过了一遍最后在乘用车和商用车的动力电池项目里陆续用了AMS的AS8510高精度电池传感器前端芯片积累了不少一手经验。这篇就把这颗芯片从工作原理到硬件布局、固件驱动、校准补偿、踩坑记录完整聊一遍。AS8510本质上是一个汽车级BMS量测前端内部集成双通道16位Σ-Δ ADC一边测流过外部分流电阻的电流一边测电池电压通过SPI把原始数据交给主控MCU。它解决的核心问题是在高压大电流、电机驱动强干扰的动力电池环境里如何稳定、精确、低成本地把电流和电压变成MCU能可靠使用的数值。这篇文章适合正在做BMS硬件设计、BMS软件开发或者打算切入电池管理系统开发方向的朋友原理不会讲太深重点放在工程落地。1. BMS为什么对电流测量这么苛刻1.1 库仑计数法的误差累积比你想的还快先聊一个很多新手容易忽略的问题。目前绝大多数BMS估算SOC还是在用安时积分也叫库仑计数法公式很简单SOC等于初始SOC减去积分电量除以额定容量。问题就出在积分这个动作上。电流测量哪怕只有1%的误差一个小时累计出来的电量误差就是额定容量的1%开两小时车就是2%。如果基础误差一直保持1%跑上半天的长途SOC误差可能已经积累到8%到10%仪表盘上的续航数字就开始乱跳。所以BMS对电流传感器的核心要求不是能显示个大概电流而是长时间积分之后误差依然可控。这要求传感器的零点要稳、增益要做准、温漂要小。AS8510这种专为汽车电池设计的AFE芯片把16位Σ-Δ ADC、低漂移基准源、能和分流电阻直接对接的通道都做进一颗芯片里就是为了把这条信号链路的误差卡在可控范围内。而且它这种传感器只管测、算法交给MCU的架构天然适合做SOC精度这类需要长期迭代优化的功能。1.2 从毫安级漏电流到数百安培的跨度电动汽车电流的测量跨度非常夸张。整车休眠状态下BMS系统自己和一部分静态负载可能只有几十毫安的电流急加速或者大功率快充时电流能冲到几百安培商用车的峰值甚至上千安培。要同时照顾这两个极端动态范围超过一万倍是非常常见的。先算一笔账假设分流电阻是100µΩ电流500A时压降只有50mV而电流50mA时压降只有5µV。5µV这个量级普通运算放大器根本没有办法稳定处理必须靠高分辨率ADC加精细的调理电路。更要命的是这5µV信号旁边可能就躺着一根走几百安培的主功率母线电磁干扰环境极差。这种场景下霍尔传感器的零点漂移和温漂往往满足不了长期积分的精度要求这也是为什么真正想做高精度BMS的团队最终还是回到分流电阻加专用AFE这条路上来。1.3 传感器在BMS信号链里的角色定位一张典型的BMS结构大概是这样电芯堆由采集前端分别负责电芯电压和温度主功率回路上放分流电阻和电流传感器再配套绝缘检测、预充控制、接触器驱动、主控MCU和通信接口。电流传感器输出的数据是整个功率级和能量级的核心数据源后面所有算SOC、算功率、做保护的算法都要用它。AS8510在这条链路里充当量测前端的角色它自己不跑算法而是把电流、电压的模拟信号转换成SPI可读的数字码值SOC算法、功率计算、过流保护、热管理全部在主控MCU里完成。这种分工在工程上很有价值传感器芯片可以独立于主控靠近采样点放置模拟链路最短后续固件升级算法重算都不影响硬件的测量路径。我做方案时就很吃这一套因为BMS软件迭代速度远快于硬件改板速度前后端解耦能让项目节奏快很多。2. AS8510核心架构与工作原理2.1 双通道16位Σ-Δ ADC到底怎么工作AS8510内部的核心是一个双通道16位Σ-Δ ADC。跟传统逐次逼近SARADC相比Σ-Δ最大的特点是用时间换精度它先用远超信号频率的采样率做过采样把信号变成一串1bit流再用数字滤波器把量化噪声整形到高频段最后输出高分辨率的数字码值。为什么选这个结构因为电池电流和电压本质上都是变化很慢的信号带宽有个几kHz就足够支撑所有BMS算法了。Σ-Δ ADC在这种低频高精度场合几乎是降维打击它内置的数字滤波器本身就等效于一个低通滤波器外部抗混叠电路的压力会小很多。我在项目里做对比测试时相同量级的电流信号Σ-Δ方案的纹波明显比SAR方案小特别是空载小电流时稳定值很干净。在BMS这种信号本身就是缓慢直流量的场景这个优势会被放得很明显。2.2 分流电阻选型要算明白的三笔账选分流电阻不是随便找个大功率采样电阻了事我这边通常按三步走。第一笔是阻值和功耗的账阻值越大相同电流下ADC输入信号越大但电阻自身发热越猛。以持续300A为例100µΩ的电阻功耗是9W200µΩ就是18W温升和散热都要重新评估不是想选多大就选多大。第二笔是材料的账锰铜、康铜这类合金电阻的温度系数TCR能做到50ppm/°C以下而纯铜是3900ppm/°C做采样千万不要图便宜用铜系材料否则电流一大温度一高增益直接偏掉。第三笔是连接方式的账必须用开尔文四线制采样线和电流通道分开走否则压降全测在接触电阻上了误差完全没法控制。材料典型TCR优点缺点锰铜约15~50ppm/°C温漂小、稳定性好价格稍高康铜约40~60ppm/°C温漂小、可焊接性好热电势略大纯铜约3900ppm/°C便宜、导电好温漂大不适合做采样这些材料在实际板子里表现差异很大我有一次为了省成本试过一版铜合金采样条结果跑完高温工况后小电流段的数据完全没法看后来老老实实换回锰铜分流电阻才把精度拉回来。2.3 电压通道与温度补偿如何配合AS8510除了电流通道还提供电压测量通道和温度测量能力。电压通道可以通过外部电阻分压来采集电池总压这个数据和电流同时拿到能让功率计算和能量管理更实时。温度输入则用来接NTC热敏电阻通常贴在分流电阻附近通过它把分流电阻的实时温度换算出来这一步很关键但经常被忽略。这一组数据配合起来能解决一个很实际的工程问题分流电阻的阻值不是常数温度变了阻值就变增益误差也跟着变。硬件上最优解是选好材料的电阻软件上还要做补偿根据NTC读到的温度对增益做线性修正。我之前做过量化对比50ppm/°C的锰铜分流电阻在温度跨度80°C的场景下不做温度补偿和做补偿电流误差能差出0.4%左右对SOC积分来说这个量级已经不可忽视了。温差大的地区、快充发热严重的场合这个补偿几乎是必做项。2.4 SPI通信、循环采样与低功耗设计AS8510对外接口是标准SPIMCU通过读写寄存器来配置量程、滤波、校准参数并读取转换结果。工程上要注意的是BMS经常需要进入整车休眠但休眠期间电池的漏电流依然要统计否则第二天醒来SOC会莫名其妙地发生偏差。处理办法是让传感器工作在循环模式按固定周期自动测量、自动休眠、再测量MCU也跟着进入低功耗状态只在有事件时被唤醒。SPI这条线还要考虑电气隔离的问题。动力电池侧的地和整车低压系统地之间存在共模电压即使传感器和分流电阻都放在低压侧附近隔离依然推荐加上。成熟的数字隔离器型号很多成本可控能避免很多奇怪的通信问题。这一点我很想强调第一次做BMS的工程师特别容易忽略等到实车测试时通信帧偶尔错乱排查半天才发现是共模问题。3. 硬件设计与布局实操3.1 典型参考电路怎么搭下面是我在项目里实际用过的连接框架用表格列出来更直观。分流电阻两端走差分采样线进电流通道采样线上各串一个百欧级电阻和纳法级电容做RC滤波电容要紧贴芯片引脚电池总压通过分压电阻网络进电压通道NTC进温度通道SPI四根线加上中断脚接主控电源端直接接电池或经过调理后的电源轨VDD引脚附近要放0.1µF陶瓷电容和1µF以上的储能电容。信号连接对象作用VBAT电池端或调理电源芯片供电输入IINP/IINN分流电阻两端采样电流通道必须开尔文连接VIN分压电阻网络输出电池总压测量NTC热敏电阻分流电阻温度补偿SCL/SDI/SDO/CS主控MCU的SPI配置寄存器、读取数据WAKE/INT主控GPIO唤醒与中断信号这套架构我自己跑过商用车和乘用车两个平台测下来的感受是只要外围的RC滤波参数和电源去耦不偷懒芯片本身能把大部分噪声挡在外面。反而是电源处理功亏一篑的情况比较多比如VDD引脚少了储能电容负载突变时ADC读数会跟着抖。3.2 PCB Layout里的三个关键细节Layout的细节决定这颗芯片的真实性能我总结三个最影响实测结果的点。第一分流电阻的采样走线一定要用开尔文接法从电阻两个采样端单独引细线不要蹭功率电流的焊盘走采样回路面积越小越好。第二电流通道的RC滤波电阻电容要靠近AS8510引脚放置差分线两边尽量等长等间距地平面要连续不要在信号路径上开槽。第三走线要远离电机控制器IGBT的栅极驱动和开关管走线这些是板上最强的干扰源。这三个细节里开尔文连接是最容易出问题又最容易被忽略的。我手头一个项目前期layout没注意开尔文后来大电流测试时小电流精度完全做不过去只能重新改板这个坑一旦上线再返工代价非常大板子周期和信任成本都搭进去了。3.3 量产前必须做好的校准流程硬件设计完成之后从实验室测试精度到量产实际精度之间还有一个重要环节校准。量产时每块板子都要做流程我这边分三步。第一步做零点校准系统不通过电流切断负载或者短路分流电阻输入端连续采几百个码值取平均存成零点偏移量。第二步做增益校准用一个精度在0.05%以上的电流源或电子负载给一个已知电流读回来的码值反推增益系数必要时做两个或多个点拟合线性。第三步做温度校准把板子放进温度箱在-40°C、25°C、85°C几个典型温度点分别记录零点偏移和增益拟合一条补偿曲线存到非易失存储器。校准数据最终会跟每块板子的序列号绑定写入板载Flash或者外挂EEPROM。我在量产现场看到不少问题都是校准工位用的电流源精度不够导致校验不出来后期整车主板报SOC不准被退回返修。校准设备的精度等级一定要写进工艺文件里这块成本省不得。4. 固件驱动与数据处理4.1 SPI读写的底层要点主控端建议直接用硬件SPI波特率按datasheet上限的一半起调稳定性优先于速度。初始化时把寄存器配置写成结构体烧录后先读回检查一遍防止和芯片沟通时配置没写进去还浑然不知。下面是一段简化示例核心是抓住片选拉低、读写数据、片选拉高这个节奏// STM32风格读写单字节寄存器的通用流程 uint8_t as8510_read_reg(uint8_t reg) { uint8_t tx[2]; uint8_t rx[2]; tx[0] (reg 1) | 0x01; // 读命令按datasheet拼装 tx[1] 0x00; // 占位字节 AS8510_CS_LOW(); spi_transfer(tx, rx, 2); AS8510_CS_HIGH(); return rx[1]; // 第二个字节是寄存器内容 } uint8_t as8510_write_reg(uint8_t reg, uint8_t val) { uint8_t tx[2]; uint8_t rx[2]; tx[0] reg 1; // 写命令 tx[1] val; AS8510_CS_LOW(); spi_transfer(tx, rx, 2); AS8510_CS_HIGH(); return rx[1]; // 返回上一寄存器值可用来校验 }具体寄存器地址和命令位定义以你手里的datasheet为准不同批次固件可能还有细微差异。建议写驱动时留一个寄存器dump函数上电后把关键寄存器读回来打个log开发期能省很多事。4.2 原始码值怎么换算成电流和电压读回来的原始码值通常是带符号的整数要变成工程电流和电压需要知道满量程、位数和分流电阻这几个参数。换算公式长这样I (raw_code - offset) * FSR / (2^(N-1) * R_shunt * gain_corr) V raw_code_v * LSB_v * divider_ratio其中raw_code是读到的原始码值offset是零点校准值FSR是电流通道满量程电压N是ADC位数R_shunt是分流电阻常温阻值gain_corr是增益校准系数。电压通道更直接原始码值乘上每个LSB对应的电压再乘分压比就是电池总压。举一个例子帮助理解。假设电流通道配置成±300mV满量程16位ADC分流电阻100µΩ那么理论码值每跳一个LSB对应300mV除以2的15次方约等于9.15µV再除以100µΩ就是91.5mA。这里要特别注意实际应用时如果开了PGA增益有效分辨率会更高但你要先搞清楚当前配置下的量程再套公式不能抱着一个固定数做所有项目。我自己调程序时就出过这个错拿另一个项目的换算系数来套新板子结果电流整体偏了一半还多。4.3 软件滤波的取舍Σ-Δ ADC内部已经有数字滤波但进到MCU的数据我仍然会再处理一层常用做法是滑动平均或者一阶IIR。一阶IIR代码短、实时性好典型写法如下float filtered 0.95f * filtered 0.05f * raw_new;这个滤波系数要按采样率去调采样率越高系数可以越平滑。反过来的问题是过流保护不能用太深的滤波否则电流真正超限时保护动作会慢几十毫秒可能就把MOS管或者熔断器坑了。我这边把原始值和滤波值都保留滤波值喂给SOC积分和显示原始值加一个短窗口最大值判断喂给保护逻辑两条路径分开走。这样既保证了显示数据的平滑又保证了保护动作的速度两个需求都不牺牲。4.4 休眠唤醒与过流检测的配合整车上电流程一般是收到点火或上电唤醒信号主控从低功耗模式起来通过SPI把传感器从循环采样模式切换成连续采样模式整车休眠时再切回循环模式。如果传感器支持阈值比较或者触发唤醒可以配置成电流超过一定值就往中断脚发一个信号主控在睡梦中被叫醒不会漏掉关键事件。这里再提醒一句切换模式的时序要留足时间比如切换后等待一个转换周期再读第一笔有效数据。很多软件bug都出在模式刚切换完就抢读数据读回来的还是旧的、或者中间态的数据轻则一次误判重则触发保护逻辑误动作。我在内部评审时看到过好几起这类问题最后都是在代码里加了一个状态机明确标注切换完成之前不读取数据。5. 常见问题与排查技巧实录5.1 零点漂移为什么总校准不掉这种问题我最常遇到。零点漂移如果在校准之后又出现首先查热电势也就是Seebeck效应。分流电阻、焊点、PCB走线只要存在不同材料的连接处又在温度梯度下就会产生微伏级别的电压相当于给ADC输入叠了一个小偏移。处理方法采样走线尽量用同轴或同层材料差分两端温度尽量均匀焊盘和走线不要跨过大铜皮热断层分流电阻远离发热器件或者用导热垫把温度拉平。实测中一个明显的温度梯度可能带来几十微伏的等效偏移在小电流工况下会直接导致SOC积分杂乱。这类问题排查起来很磨人因为它不是瞬时故障而是随温升慢慢变化最有效的办法是热电偶贴在分流电阻附近一边记录温度一边看零点偏移曲线。5.2 大电流工况下数据跳变大电流时数据跳变十有八九不是ADC本身的问题而是采样回路耦合了磁场或者触发了地弹。功率母线流过几百安培时周围空间磁场很强采样线回路面积一大感应出来的电压直接叠加到信号上。解决方案就是前面反复强调的采样回路面积做小走线贴近地平面加RC滤波必要时用差分走线或者双绞线。还有一个容易忽略的点分流电阻本身在高频下存在寄生电感电流突变时比如开关管切换瞬间会在电阻两端感应出毛刺电压。因此ADC前端的RC滤波参数不能拍脑袋定要拿示波器在实际工况下测看毛刺的频率和幅度再定。我见过有人把滤波电容加得很大毛刺确实没了但响应时间也慢得离谱保护逻辑跟着失效这就是过度滤波的教训。5.3 SPI数据偶发错乱怎么办SPI偶发错乱通常是CS或时钟线受到干扰或者上拉不够强。我排查这类问题时会先用示波器同时抓CS和SCLK检查有没有毛刺和回勾。解决办法CS和SCL都加上拉电阻串33Ω左右的阻尼电阻走线远离功率回路主控侧加软件校验读回来的码值做合理性判断超出量程或者连续几帧跳变过大就丢弃重新同步。这里特别提醒SPI从设备的中断脚和CS脚上电时要注意默认电平别出现从机上电先于主控、或者片选悬空导致误触发的情况。我在一个项目里吃过这个亏主控还没初始化完传感器已经把数据推到SPI总线上直接把总线搞乱了。后来在硬件上给CS脚加了下拉软件上又做了上电复位时序问题才彻底解决。5.4 问题排查速查表把前面这些经验整理成一张表现场排查时可以直接对照现象常见原因优先排查方向零点漂移大热电势、温度梯度采样走线材料、温差来源大电流数值跳变磁场耦合、寄生电感缩小采样回路面积、调RC参数小电流偏差大分流电阻温漂NTC补偿、换低TCR材料SPI偶发错乱干扰、上拉不足、时序问题抓波形、加阻尼电阻、软件校验模式切换丢数据切换时序没等稳定加等待时间、丢弃首帧6. 最后聊点个人经验做了几个平台的项目之后我个人最大的体会是BMS电流测量这件事硬件、固件、校准、测试四个岗位的人最好从一开始就坐在一起对齐。尤其是校准数据和噪声指标别等到联调阶段才发现传感器读数和整车功率分析仪对不上那时候再回头改方向时间和成本都很难接受。另外一个很值得早期投入的事情是建一套电流-温度-读数的日志采集和回放工具。我后面做的很多BMS调优都不是靠每次改完代码就去实车跑一遍而是先把跑车数据录下来回到实验室用回放工具验证补偿算法和滤波参数。这个投入非常值做BMS软件的同学越早开始积累这类工具后面调算法就越省力。做电流采样这条链路慢工出细活前期把底子打好后面所有SOC算法、保护策略才有了可靠的根基。
返回列表