ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

BQ25798双电源无缝切换设计:光伏与适配器供电的MPPT充电方案

BQ25798双电源无缝切换设计:光伏与适配器供电的MPPT充电方案 1. 双电源供电系统的设计动机与整体思路1.1 为什么需要光伏与适配器双路输入做嵌入式硬件或者便携储能设备的朋友大概率都遇到过这样一个尴尬场景设备同时支持太阳能板充电和DC适配器充电但两路电源的电压范围、输出阻抗、动态响应完全不同。如果只是简单地把两路电源用二极管“或”在一起会出现几个很烦人的问题——适配器插拔瞬间输出电压跌落导致后级MCU复位、光伏板在弱光下电压被适配器倒灌、两路同时接入时电流分配不可控。这些问题在实验室里可能不明显一旦到了户外实际使用就是“设备莫名其妙重启”“电池充不满”“光伏板发热”这类让人抓狂的故障。BQ25798这颗芯片就是冲着这个痛点来的。它是TI推出的一款带MPPT最大功率点跟踪的升降压充电控制器支持太阳能板和适配器双输入内置动态电源路径管理DPPM能自动在两路输入之间做优先级仲裁并且切换过程对后级负载几乎无感。换句话说它把“双电源无缝切换”这件事从一堆分立MOSFET加比较器的复杂电路集成到了一颗芯片加少量外围器件的方案里。这个项目适合谁看如果你正在做户外储能电源、太阳能充电宝、便携式IoT网关、农业传感器节点这类需要“有光就充、有适配器就优先用适配器”的设备那这套方案基本可以直接抄作业。如果你只是好奇双电源切换的底层逻辑文章里的原理拆解和参数计算过程也能帮你把这件事想明白。1.2 方案选型为什么是BQ25798而不是分立方案在BQ25798出现之前常见的双电源切换方案有三种。第一种是理想二极管控制器加背靠背MOSFET比如LTC4412这类优点是简单缺点是只能做“或”逻辑没有充电管理也没有MPPT。第二种是用两颗独立的充电IC分别接光伏和适配器输出端再做电源路径切换缺点是BOM成本高、PCB面积大、两颗芯片之间的协调逻辑需要MCU介入。第三种就是BQ25798这种单芯片双输入方案把充电控制、路径管理、MPPT、I2C通信全部集成。我选BQ25798的核心理由有三个。第一它的输入电压范围是3.6V到24V覆盖了常见的5V适配器、12V适配器以及大多数18V光伏板的工作电压不需要额外的预稳压。第二它支持I2C编程充电电压、充电电流、输入电流限制、MPPT工作点都可以通过寄存器动态调整这意味着同一套硬件可以适配不同规格的光伏板和电池组量产时不用改板。第三它的动态电源路径管理可以在适配器插入时自动把系统负载切到适配器供电同时根据适配器剩余能力给电池充电适配器拔掉后瞬间切回电池供电切换时间在微秒级后级DC-DC完全感知不到。注意BQ25798的“无缝切换”指的是系统输出端SYS引脚的电压不会出现明显跌落而不是说两路输入之间可以随意热插拔。光伏板输入端如果要做热插拔建议在输入端加TVS和缓启动电路否则光伏板插拔瞬间的电压尖峰可能触发芯片的过压保护。1.3 系统框图和关键节点定义整个系统的信号流向可以这样理解光伏板和适配器分别经过输入滤波和电压检测进入BQ25798的两路输入引脚VAC1和VAC2。芯片内部根据寄存器配置的优先级和输入电压有效性决定用哪一路作为主输入。主输入经过升降压变换器后一部分能量送到SYS引脚给系统负载供电另一部分送到BAT引脚给电池充电。电池在输入不足时通过同一套升降压电路反向放电维持SYS电压稳定。关键节点有四个。VAC1接光伏板VAC2接适配器SYS接后级DC-DC或直接接负载BAT接电池组。I2C总线接MCU用于配置充电参数和读取状态寄存器。此外还有几个重要的检测点输入电流检测电阻AC1和AC2各自独立、电池电流检测电阻、以及用于MPPT的输入电压分压采样。这里有一个设计上的取舍需要说明BQ25798的两路输入并不是完全对称的。VAC1通常配置为光伏输入支持MPPTVAC2配置为适配器输入不支持MPPT但支持更高的输入电流。如果你把两路都接光伏板那只有VAC1能做MPPTVAC2只能做固定电压输入。这个细节在分配引脚时就要想清楚不然后面改板很麻烦。2. BQ25798核心寄存器配置与参数计算2.1 输入优先级与切换阈值的寄存器设置BQ25798的输入源优先级通过ChargeOption0寄存器地址0x00的bit[7:6]来配置。默认值是00表示VAC1优先如果设为01则VAC2优先。对于光伏加适配器的场景我通常把适配器设为优先也就是VAC2优先。这样做的逻辑是适配器是“稳定且充足”的能源光伏是“波动且有限”的能源优先用适配器可以延长电池寿命光伏只在没有适配器时才全力工作。切换阈值涉及两个关键参数输入欠压锁定阈值VINDPM和输入电流限制IIN_DPM。VINDPM通过寄存器0x0B和0x0C配置单位是mV步进64mV。对于18V光伏板我一般把VINDPM设在14V左右这样弱光下光伏板电压跌到14V以下时芯片会自动减小充电电流甚至暂停充电避免光伏板被拉垮。对于12V适配器VINDPM设在9V左右留足余量。输入电流限制通过寄存器0x0A配置单位是mA步进50mA。适配器这一路我通常设为适配器额定电流的80%比如2A适配器设1.6A留20%余量给系统负载波动。光伏这一路则根据光伏板的最大功率点电流来设比如18V/10W的光伏板最大功率点电流约0.55AIIN_DPM就设500mA左右。提示VINDPM和IIN_DPM这两个参数是双电源切换“无感”的关键。如果VINDPM设得太低光伏板在弱光下会被拉到很低电压效率极差如果设得太高光伏板稍微有点阴影就停止充电。实测下来VINDPM设在光伏板开路电压的75%到80%之间比较合适。2.2 MPPT工作点扫描的实现逻辑BQ25798的MPPT不是硬件自动追踪的而是通过I2C让MCU定期扫描输入电压来实现的。具体做法是MCU每隔几秒读取一次输入电压和输入电流然后微调VINDPM寄存器观察输入功率的变化。如果功率增加就继续往同一方向调如果功率减小就反向调。这就是经典的扰动观察法PO只不过执行者是MCU而不是芯片内部状态机。扫描的步进和周期需要根据光伏板的特性来定。对于小功率光伏板10W到50W步进64mV、周期2到5秒比较合适。步进太大工作点会在最大功率点附近震荡平均效率下降步进太小追踪速度慢光照快速变化时跟不上。我试过用32mV步进、1秒周期在云层快速移动的场景下追踪效果反而不好因为扰动太频繁导致输入电压一直在变后级DC-DC的输入也跟着抖。一个实用的优化是在电池接近充满时降低扫描频率因为这时候充电电流本来就小MPPT的收益不明显频繁扫描反而增加功耗。可以在MCU里加一个判断当充电电流小于200mA时把扫描周期从3秒延长到10秒。2.3 充电电压和电流的参数计算过程充电参数的计算取决于电池类型和容量。以3串锂离子电池为例标称电压11.1V满充电压12.6V。BQ25798的充电电压寄存器0x05和0x06的单位是mV步进8mV。12.6V对应12600mV写入值就是12600/81575即0x0627。充电电流寄存器0x03和0x04的单位是mA步进50mA。假设电池容量是5000mAh按0.5C充电电流就是2500mA。写入值2500/5050即0x0032。但这里要注意充电电流不能超过输入电流限制减去系统负载电流。如果适配器限流1.6A系统负载平均300mA那最大充电电流只能设1.3A。所以实际写入值应该是1300/5026即0x001A。还有一个容易被忽略的参数是终止电流Termination Current寄存器0x07单位mA步进50mA。对于5000mAh电池终止电流一般设0.05C到0.1C也就是250mA到500mA。设得太小充电时间会很长设得太大电池充不满。我一般设300mA兼顾时间和容量。参数寄存器地址计算值写入值说明充电电压0x05/0x0612600mV0x06273串锂电满充充电电流0x03/0x041300mA0x001A受适配器限流约束终止电流0x07300mA0x0006约0.06C适配器输入限流0x0A1600mA0x00202A适配器80%光伏输入限流0x0A500mA0x000A10W光伏板光伏VINDPM0x0B/0x0C14000mV0x00DB18V板75%开路电压3. 外围电路设计与关键器件选型3.1 输入滤波与电压采样电路光伏板输入端和适配器输入端都需要滤波。光伏板因为线缆长、面积大容易引入共模噪声我一般在VAC1引脚前加一个共模电感加两个X7R陶瓷电容10uF和100nF并联。适配器输入端相对干净但如果是插拔式适配器插拔瞬间会有振铃加一个TVS管SMBJ30A和22uF电解电容就能压住。电压采样方面BQ25798内部有输入电压ADC但精度只有±2%做MPPT扫描够用做精确的输入功率计算就不太够。我在实际项目中会额外加一路分压采样到MCU的ADC分压电阻用1%精度的金属膜电阻上电阻100k、下电阻10k分压比11:1。这样18V输入对应MCU端1.64V在3.3V ADC量程内。分压电阻旁边并联100nF电容做RC滤波截止频率约160Hz能滤掉开关噪声但不会影响MPPT扫描的响应速度。注意分压电阻的功耗要算一下。18V输入、100k加10k串联电流约0.16mA上电阻功耗约2.9mW用0603封装足够了。但如果输入电压可能到24V上电阻功耗会到5.2mW还是0603的范围内不用换0805。3.2 升降压电感与MOSFET选型BQ25798是控制器架构MOSFET和电感都是外置的。升降压拓扑需要四个MOSFET两个上管、两个下管。选型时主要看三个参数耐压、导通电阻、栅极电荷。耐压方面输入最高24V考虑开关尖峰MOSFET耐压至少30V我一般选40V的。导通电阻方面充电电流3A左右选10mΩ以内的就能把导通损耗控制在90mW以下。栅极电荷影响开关损耗选Qg在10nC到20nC之间的比较平衡。电感选型看饱和电流和直流电阻。升降压拓扑在输入输出电压接近时电感电流纹波最大。以18V输入、12.6V输出、3A充电电流为例电感电流平均值约2.1A纹波按30%算约0.63A峰值电流约2.4A。电感饱和电流至少要有3A留20%余量。直流电阻选30mΩ以内的否则导通损耗会很明显。感值方面BQ25798推荐2.2uH到4.7uH我一般用3.3uH开关频率设在600kHz这样电感体积和损耗比较平衡。器件型号示例关键参数选型理由上管MOSFETAO440640V/12mΩ/Qg8nC低导通电阻适合3A下管MOSFETAO4406同上对称设计简化BOM电感XAL5030-3323.3uH/5.5A/21mΩ饱和电流足DCR低输入电容GRM31CR61E10610uF/25V/X7R低ESR耐压足电池电流检测WSL2512R01010mΩ/1%2512封装功率余量大3.3 I2C总线上拉与MCU接口BQ25798的I2C地址由ADDR引脚决定接地是0x6B接VCC是0x6A。我一般接地用0x6B。上拉电阻用4.7k接3.3V。如果总线上还有其他I2C设备上拉电阻可以共用但要注意总线电容不要超过400pF。走线方面SCL和SDA尽量等长远离电感和MOSFET开关节点如果实在避不开中间加地线隔离。MCU这边我用的是STM32G030I2C速率设100kHz。虽然BQ25798支持400kHz但100kHz更稳而且MPPT扫描对通信速率要求不高。中断引脚INT接到MCU的外部中断当芯片检测到输入源变化、过温、过流等事件时INT拉低MCU在中断服务程序里读取状态寄存器决定下一步动作。提示BQ25798的INT引脚是开漏输出需要上拉。如果MCU的IO口支持内部上拉可以用内部上拉省一个电阻但内部上拉通常偏弱40k左右在噪声环境下可能误触发。我建议还是用外部4.7k上拉稳一点。4. 双电源切换实测与问题排查4.1 适配器插入和拔出的动态响应实测场景是这样的系统带500mA负载电池电压11.4V光伏板在室内光照下输出约8V/0.3A。先只接光伏板系统由光伏板经过BQ25798给负载供电同时给电池充电。然后插入12V适配器用示波器看SYS引脚电压。实测波形显示适配器插入后约200us内SYS电压从光伏板供电时的11.2V切换到适配器供电时的12.1V中间没有跌落只有约50mV的过冲持续不到10us。这个过冲是适配器插入瞬间的浪涌电流引起的在适配器输入端加22uF电解电容后过冲降到20mV以内。拔掉适配器时SYS电压从12.1V切回电池供电的11.4V切换时间约150us同样没有跌落。后级的3.3V DC-DC输出用示波器看纹波始终在±20mV以内MCU没有复位。这个结果说明BQ25798的动态电源路径管理确实做到了“无缝”。但有一个细节要注意如果适配器拔掉时电池电压低于VINDPM阈值芯片会先进入欠压保护SYS电压会短暂依赖电池放电维持。如果电池也接近过放SYS电压可能跌落。所以电池过放保护阈值要设得比VINDPM低至少500mV留足切换余量。4.2 光伏板弱光下的MPPT震荡问题室内测试时发现一个问题光伏板在弱光下输出电流小于100mAMPPT扫描会导致输入电压在12V到16V之间来回跳充电电流也跟着跳。用示波器看VAC1引脚电压纹波有2V峰峰值。这个问题的原因是弱光下光伏板的输出阻抗很高MPPT扰动观察法的步进64mV对应的功率变化很小MCU的ADC噪声±2LSB会误判功率变化方向导致工作点来回跑。解决办法有两个。第一个是降低扫描步进从64mV降到32mV但这样追踪速度会变慢。第二个是加一个“死区”判断如果功率变化小于某个阈值比如5mW就不调整VINDPM保持当前工作点。我在MCU里加了死区判断后弱光下的震荡基本消失输入电压稳定在14.5V左右充电电流稳定在80mA。注意死区阈值不能设太大否则光照快速变化时追踪跟不上。我试过10mW死区在云层遮挡恢复后MPPT需要约15秒才能重新追踪到最大功率点。5mW死区下恢复时间约8秒比较平衡。4.3 常见问题速查表现象可能原因排查方法解决措施适配器插入后不充电VAC2优先级未配置读0x00寄存器bit[7:6]设为01VAC2优先光伏板充电电流始终很小VINDPM设得太高测VAC1电压对比VINDPM降低VINDPM到开路电压75%SYS电压在切换时跌落电池过放保护阈值太高测BAT电压和SYS波形降低过放阈值留500mV余量I2C通信失败上拉电阻太大或总线电容大测SCL/SDA上升沿换2.2k上拉缩短走线芯片发热严重电感DCR大或MOSFET导通电阻大测电感两端压降换低DCR电感换低Rds(on) MOSFETMPPT震荡弱光下ADC噪声误判看VAC1电压纹波加功率变化死区判断适配器拔掉后系统重启切换时间过长或电池响应慢测SYS电压跌落深度加大SYS电容检查电池连接4.4 实操心得与避坑经验第一个坑是输入电容的布局。BQ25798的VAC1和VAC2引脚旁边一定要放100nF陶瓷电容而且离引脚越近越好最好在5mm以内。我第一版板子把电容放在芯片背面结果适配器插拔时芯片偶尔会复位。后来把电容移到正面紧贴引脚问题消失。这个电容的作用是吸收输入端的瞬态电流布局不好等于没放。第二个坑是电池电流检测电阻的走线。BQ25798的SRP和SRN引脚是差分输入走线必须严格等长、平行、靠近中间不能有过孔。我试过用普通走线结果充电电流读数偏差超过10%。后来改成差分对走线偏差降到2%以内。如果板子空间允许检测电阻最好用四端子封装开尔文连接这样焊盘接触电阻不影响精度。第三个坑是MPPT扫描和I2C通信的冲突。如果MCU在MPPT扫描期间频繁读寄存器I2C通信的时钟噪声可能耦合到输入电压采样上导致MPPT误判。我的做法是MPPT扫描期间暂停I2C读取扫描完成后再读状态。扫描周期3秒I2C读取在扫描间隙完成互不干扰。第四个坑是光伏板的反向漏电流。晚上没有光照时光伏板相当于一个反向偏置的二极管如果BQ25798的VAC1引脚没有反向阻断电池电流会通过光伏板漏掉。BQ25798内部有反向阻断MOSFET但前提是VAC1电压低于VINDPM时芯片进入休眠。实测下来晚上电池自放电电流约50uA主要是芯片休眠功耗和采样电阻漏电流可以接受。如果对自放电要求极高可以在光伏板输入端加一个理想二极管。最后分享一个调试技巧BQ25798的状态寄存器0x20到0x2F包含了输入源状态、充电状态、故障标志等丰富信息。调试时不要只看充电电流要养成读状态寄存器的习惯。比如0x20的bit[2:0]表示当前输入源是VAC1、VAC2还是电池0x21的bit[7]表示MPPT是否在扫描。这些信息能帮你快速定位问题比用示波器盲测效率高得多。
返回列表