我做了一个双向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+ → shunt → aux Buck → load → GND。它會直接通過分流器,並以算術方式加到量測值上。修正方式:將 Buck 輸入端移到分流器的電池端一側(上游)。如此輔助電流便會完全繞過量測元件。零成本,只需修改一次佈局。
情況 B — bus-side Buck 啟用,轉換器處於放電模式(battery → bus):
輔助電源取自 bus,但 bus 是透過你的轉換器由電池供電。根據能量守恆,電池會額外提供等於 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 模式,你只會遇到反過來的一樣麻煩。
別為了這個重新做一塊板子。先快速做個 bench characterization(實測特性分析):量測你的 LMR38020 第 3 腳(VIN)在不同切換頻率下實際流入的電流。把結果存成查找表放在 flash 裡。
當你的程式碼計算效率時,直接用:
用軟體修好就好,然後就不用管它了!