我做了一个双向BUCK-BOOST数字电源,双侧都采用INA240A1做高端差分采样。MCU和栅极驱动需要从系统取电,做了双路供电(母线侧Buck + 电池侧Buck,二极管或门切换)。
问题:无论哪侧供电,辅助电源的电流最终都会流经电池回路的Shunt,导致小电流时(<500mA)测量误差极大,功率计算和库仑计完全不准。
我做了一个双向BUCK-BOOST数字电源,双侧都采用INA240A1做高端差分采样。MCU和栅极驱动需要从系统取电,做了双路供电(母线侧Buck + 电池侧Buck,二极管或门切换)。
问题:无论哪侧供电,辅助电源的电流最终都会流经电池回路的Shunt,导致小电流时(<500mA)测量误差极大,功率计算和库仑计完全不准。
看看原理图
取电点接错位置了兄弟。你把 Aux Buck 的输入端接到 Shunt 靠近电池/母线接线端子那头(即 Shunt 外侧),千万别接在 Shunt 内侧(功率回路侧)。这样辅助电源电流根本就不流经采样电阻,直接从端口走掉。
如果现在板子打出来了没法改,先拿割线刀把 Aux Buck 输入端的铜箔割断,飞一条线直接拉到电池输入接线柱上试一下,小电流测量立马就干净了。
硬件能改的楼上说了,我补充软件侧——辅助电流其实是可算可测的,不是黑盒:
辅助电流构成:
补偿算法:
I_batt_real = I_shunt - I_aux_battI_batt_real = I_shunt - P_aux/(V_batt×η),注意 P_aux 要用母线侧电压折算更稳的做法:辅助 Buck 输出端串个小 Shunt + INA199(几毛钱),实时测辅助电流,软件里动态扣除。比理论计算准,因为驱动电流随工况波动。
另外提醒:<500mA 时你的采样信噪比本来就差,INA240A1 的 offset(±25µV 级别)在 10mΩ Shunt 上就是 ±2.5mA 误差,小电流下补偿完也别指望 1% 精度,硬件上 Shunt 阻值可以适当加大。
辅助电流路径为 battery+ → 分流器 → 辅助降压转换器 → 负载 → GND。它直接流过分流器,并在测量值中按算术方式叠加。修正方法:将降压转换器输入端改接到分流器的电池端子一侧(上游)。这样辅助电流就会完全绕过测量元件。零成本,只需改动一次布局。
情况 B——母线侧降压转换器工作,转换器处于放电模式(电池 → 母线):
辅助电源从母线取电,但母线由电池通过你的转换器供电。根据能量守恒,电池会额外提供等于 P_aux / (V_batt · η) 的电流。该分量确实流经电池分流器——它是物理上真实存在的,不是布局造成的假象。重新布线无法消除它。
对于情况 B,有三种工程方案:
我还想提醒一点:在关注电流小于 500 mA 时,请确认 INA240A1 的失调电压相对于你的分流器阻值本身不会造成相当可观的误差。补偿无法恢复被噪声底限淹没的信息。
罪魁祸首是 D17/D6 这对肖特基或门。
它不管你在 Buck 还是 Boost,只认"哪边电压高"。Boost 时输出侧电压高,辅助电源就从输出侧抽电流——但输出侧的能量是输入侧通过电感升压送上去的,所以输入侧 Shunt 必然要多承担 P_aux/η 的电流。
改法:把被动或门换成主动切换。
用一个 P-MOS + 小信号 NMOS 替代 D6(或两侧都换),MCU 根据当前工作模式控制通断:
核心原则:辅助电源始终从功率级的"输入侧"取电。功率电流和辅助电流同源同向,Shunt 测到的是总和,外部负载电流 = 总电流 − 辅助电流,但关键是空载时 Shunt 读数就是真实的辅助电流,你可以在软件里精确扣除,而不是被或门的自动切换搞得两边乱跳。
这个问题本质是双向拓扑里辅助电源的电流路径无法同时满足"采样纯净"和"能量不经过 Shunt"。我画一下你就明白了:
场景 A:取电点在 Shunt 外(你的现状)
场景 B:取电点在 Shunt 内
所以纯靠改取电点位置无解,必须引入"模式感知"或"物理隔离"。
方案一:模式感知主动取电(推荐)
如楼上所说,用 MOS 开关替代二极管,MCU 根据当前是 Buck 还是 Boost 控制从哪一侧取电,始终让辅助电源挂在功率级的输入侧。
方案二:软件实时扣除(最省事)
辅助电流 = MCU 静态电流(mA 级,几乎恒定)+ 栅极驱动电流(Q_g·f_sw·N,与开关频率成正比)。两部分都可以精确建模。在控制算法里:
I_load = I_shunt - I_aux / η_buck_aux
库仑计同样扣除。精度能做到 1% 以内,比你改硬件快得多。
兄弟,你把硬件抽头这事儿想复杂了。你已经设计了一套系统,让 MCU 从电压最高的那一侧取电。这是个很棒、很可靠的设计,能让“大脑”保持供电!
但你在抱怨数学“不友好”。欢迎来到物理的世界!在 Boost 模式下,你的 MCU 本身就是负载。如果你把抽头移到分流器的内侧,那么在 Buck 模式下你就会遇到完全相反、但同样头疼的问题。
别为了这个重新打一块板子。做一个快速的台架特性测试:在不同开关频率下,测量进入 LMR38020 第 3 脚(VIN)的实际电流。把它作为查找表存到你的 flash 里。
当你的代码计算效率时,直接用:
用软件修掉,然后就可以收工了!