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

资讯详情

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

四路可编程PMIC:多电源域供电设计与调试实战

四路可编程PMIC:多电源域供电设计与调试实战 做硬件这几年最怕的就是电路板拿回来各路电源电压不对、时序乱跳最后主控芯片死活不启动。尤其是遇到FPGA、SoC这类多电源域的系统一路一路用分立LDO拼板子面积大不说调试上电顺序能让人崩溃。后来我开始用Quad Output Programmable Universal PMIC这类四路输出可编程电源管理芯片一块芯片把四路电压、时序、甚至部分电源监控都包圆了才算是把这块硬骨头啃下来。这篇文章就聊聊我选型、设计、调试这类PMIC的经验给正在给多电源域系统做供电方案的朋友一个参考。1. 为什么“四路可编程”会成为多电源系统的主流选择1.1 多电源域设计的传统痛点前几年做一个带FPGA的采集板系统里需要四路电压0.9V的核心电压、1.8V的IO电压、1.2V的DDR电压、还有一路3.3V的模拟电源。当时我第一反应是用分立方案——两片DCDC加两片LDO各管一路。原理图看起来挺清晰但后面的事情就不太美好了。首先上电顺序完全靠RC延时和EN引脚的配合。不同批次的电容、不同温度下RC延时的漂移很大板子拿回来第一次跑经常起不来。FPGA这类器件对上电顺序是有硬性要求的比如内核电压要先于IO电压起来这个顺序一旦反了轻则启动失败重则芯片闩锁损坏。我那时候只能一遍遍调电阻电容的阻值容值还得对着示波器看波形非常痛苦。其次板上空间被吃掉一大块。每路DCDC至少要一颗电感、输入输出电容、反馈分压电阻LDO也要不少外围。四路下来电源这部分占的面积比主控还大PCB布局很难受。还有一个容易被忽略的问题每一路电源的软启动、限流、过温保护都靠自己搭保护参数不精确一旦负载异常很容易烧器件。我记得有一次一路DCDC的输出短路因为保护响应不够快后面挂的FPGA直接烧了损失不小。1.2 一块PMIC解决问题的关键点后来切换到四路可编程PMIC这些痛点基本都被解决了。PMIC把多路DCDC、LDO、上电时序控制、监控和保护功能集成到一个芯片里针对多电源域场景做了专门的优化。我体会最深的三个好处是时序控制是硬核实现的。上电顺序由内部的时序控制器和寄存器决定而不是靠外部RC的“玄学”。你写好了配置它每次都会严格遵守温度变了、芯片批次变了行为都不变这才是工程上能依赖的东西。每路输出电压通过I2C接口或者OTP配置就能调整。项目中途如果FPGA换了型号内核电压从0.9V变成0.85V不需要改PCB写个寄存器就完事省掉了重新打板的周期。芯片自带的软启动、过流保护、过温保护让系统鲁棒性好很多。PMIC内部有比较精确的电流检测和温度检测出了问题先保护自己同时拉低PWRGOOD信号告诉主控“我不行了”系统可以及时做安全处理。1.3 什么项目最适合用四路PMIC从我做过的几个项目看FPGA和SoC系统是四路PMIC最大的受益者。以常见的FPGA供电为例VCCINT一般0.85V到0.95VVCCBRAM在1.0V左右VCCAUX是1.8VVCCO根据bank电平可能是1.8V、2.5V或者3.3V。四路输出刚好一一对应而且很多PMIC还能把Power Good信号引出来直接给FPGA做上电复位整个供电方案非常干净。除了FPGA工业传感器板、多通道通信模块、带多路摄像头接口的嵌入式主板也都很适合。这些场景有个共同点电源路数多、电流不算特别大、但要求各路电压和时序都能灵活调整。如果你只是做单路输出的小板子用PMIC反而浪费一颗LDO或者DCDC足够了。2. 选型前必须吃透的几个关键参数2.1 输入电压和输出电流先算功率账选PMIC不是先看芯片多智能而是先算功率。我见过不少人拿到芯片就画原理图结果发现某一路输出的最大电流根本驱动不了后面的负载只能返工。举个例子我做过的采集板需求是0.9V/3A、1.8V/1A、1.2V/2A、3.3V/0.5A。总功率算一下0.9×3 1.8×1 1.2×2 3.3×0.5 2.7 1.8 2.4 1.65 8.55W如果输入是5V平均输入电流大约是8.55 / 5 / 效率(按85%估) ≈ 2A。如果输入是3.7V锂电池输入电流会到2.6A以上。这意味着输入路径的走线、输入电容、电感都要按这个电流来设计否则芯片还没到保护阈值铜箔先顶上来了。选型时还要注意PMIC各路输出电流不要刚好卡在负载最大值上至少要留出20%的余量。DCDC连续输出接近上限的时候效率、纹波都会恶化长期可靠性也下降。功率余量是整个供电设计最基本的底气。2.2 可编程输出范围与精度“Programmable”是这类PMIC的灵魂但各家做得深浅不同。要关注三件事输出电压调节范围、调节步进、是否支持动态调压DVS。调节范围很好理解比如某一路能输出0.6V到3.3V那基本覆盖了常见的数字和模拟电平。步进则决定你能不能精确调到目标电压常见的是10mV、12.5mV、25mV。如果你需要0.85V的核心电压而步进是25mV那你可能只能选0.85V或者0.875V这个精度需要提前确认。DVS动态调压对于跑DVFS动态电压频率调节的系统特别重要。CPU或者FPGA在不同负载下可以实时调整内核电压省电效果好。但注意DVS通常要求PMIC内部有比较快的DAC切换速度而且输出电压变化时要严格遵循斜坡时间不然会导致逻辑电平混乱。如果你有DVFS需求一定要选明确支持这个功能、并且有配套驱动的芯片。2.3 上电时序与斜坡控制能力时序控制是PMIC区别于“多路DCDC集成”的核心功能。选型时问自己几个问题各路输出的上电顺序是否可自定义各路之间的延时是否可配置输出斜坡时间是否可以调是否支持断电时序控制有些PMIC默认只有固定的几种时序模式虽然也能用但灵活性差。如果主控要求先0.9V再1.8V再1.2V而芯片只能做到先1.2V再1.8V那就很尴尬。断电时序也一样很多系统要求下电和上电是严格相反的顺序这个功能在工业控制里几乎必备。斜坡时间这个参数容易被人忽视。斜坡太陡输入浪涌电流大电源容易被拉垮斜坡太缓主控可能在上电过程中就尝试读取外部器件导致初始化失败。一般建议根据负载电容大小算一下需求负载电容大就选慢一点的斜坡但要确定在主控复位释放前电压已经稳定。2.4 I2C通信与OTP/NVMRAM和一次性烧录的区别可编程PMIC一般有两种非易失存储方案内部OTP和外部EEPROM配合RAM配置。OTP的好处是出厂就能固化上电不需要外部干预坏处是一次性烧错了芯片就废了只能换一颗。我自己用下来开发阶段尽量先用RAM配置模式通过I2C每次都写一遍寄存器。这样调试方便写错就重新写不会有任何损伤。等整个设计稳了再决定要不要通过OTP固化。这里有个坑有些芯片的OTP空间有限比如只能保存几组配置超出就得选更高等级型号选型时要把这个容量也算进需求里。通信接口除了I2C现在也有SPI、PMBus的PMIC。I2C布线简单、地址可以通过引脚配置在嵌入式系统里最常用PMBus适合服务器、通信设备这类需要远程监控电源的健康状况的场景功能更强但配置也更复杂。2.5 封装、散热与PCB布局PMIC集成度高功率密度大散热问题必须提前考虑。常见封装有QFN、WLCSP、BGA等。QFN带裸露焊盘散热条件好手工焊接也方便是原型验证的首选。WLCSP体积小、寄生参数低但焊接要求高一般量产时才用。封装还会影响电感的选型。有些PMIC的开关频率很高可以用小尺寸电感但如果频率低电感体积就大你可能需要把电感放到芯片旁边PCB布局会很紧张。这是“芯片选型影响板级设计”的典型例子千万别只盯着芯片本身的功能去选。3. 从原理图设计到寄存器配置的完整流程3.1 需求评估与选型把需求写成表格拿到项目后我习惯先把电源需求整理成一张表再拿这张表去选型。这样不容易漏项也方便和别人讨论。电源域电压要求最大电流纹波要求上电顺序是否需要DVSVDD_CORE0.9V3A小于50mV1是VDD_IO1.8V1A小于30mV2否VDD_DDR1.2V2A小于40mV3否VDD_ANA3.3V0.5A小于20mV4否这张表填完你对系统需要什么基本上就有数了。比如上面这个例子输入用5V需要至少一路大电流降压通道四路中可能有两路DCDC加两路LDO的组合就够用如果四路电流都大那就必须选四路都是降压变换器的PMIC。选型时我还会同步关注评估板。如果厂家有现成的EVB初期调试会快很多可以先在EVB上把寄存器配置调好再移植到自己的板上。没有EVB的话就得靠数据手册里的默认上电时序图一个个推工作量会大不少。3.2 原理图设计要点外围器件怎么选PMIC把大部分电源功能集成进去了外围相对分立方案少很多但也不是随便接就能工作的。以下几项是我每次都要仔细核对的输入电容PMIC的输入电流是脉冲状的输入电容的职责是吸收纹波电流稳定输入电压。一般建议选低ESR的陶瓷电容容值按数据手册要求来至少需要10uF到22uF。位置尽量靠近芯片的VIN引脚越近效果越好。输出电容决定了输出电压纹波和瞬态响应。容值太小纹波大容值太大则可能影响环路稳定性。PMIC数据手册通常会给出一个最小容值和推荐范围选型时要特别注意电容的直流偏压特性——小封装陶瓷电容在额定电压下容量可能衰减一半以上实际跑到标称值要靠大封装或者多个并联。电感感值、饱和电流、直流电阻都要看。感值太小纹波电流大效率低感值太大瞬态响应慢可能还放不下。饱和电流一定要大于最大输出电流加上纹波电流的峰值否则电感饱和后电流急剧上升芯片很容易挂掉。反馈网络如果PMIC的输出电压是外部电阻分压设定的那分压电阻的精度直接影响输出电压精度。最好用1%或者更低温漂的电阻反馈引脚附近的走线也要远离电感、开关节点等噪声源。外围器件选完后我还会在原理图里把每一路输出都用网络标签明确标出来方便后面检查电源树。有一个小习惯在每个输出端加一个测试点调试时可以直接用示波器探头点不用满板子找焊盘。3.3 I2C寄存器配置实现一段初始化代码是怎么来的拿到PMIC后第一步不是写代码而是查数据手册的默认上电时序和默认输出电压。很多PMIC出厂时是有默认配置的如果不改上电后各路输出可能不符合你的要求。这时你有两条路一条是每次上电都通过主控I2C重新配置另一条是烧OTP固化。开发阶段我基本都是走RAM配置路线也就是每次上电都由主控初始化。下面这段伪代码展示的是典型的初始化顺序以某颗四路PMIC为例具体寄存器地址略有差异思路通用#define PMIC_ADDR 0x48 // 设置BUCK1输出电压为0.9V // 寄存器0x10低5位是输出电压编码0.9V对应0x15 i2c_write(PMIC_ADDR, 0x10, 0x15); // 设置BUCK2输出电压为1.8V // 寄存器0x20低5位1.8V对应0x2C i2c_write(PMIC_ADDR, 0x20, 0x2C); // 设置BUCK3输出电压为1.2V i2c_write(PMIC_ADDR, 0x30, 0x1E); // 设置LDO1输出电压为3.3V i2c_write(PMIC_ADDR, 0x40, 0x33); // 设置上电时序BUCK1 - BUCK2 - BUCK3 - LDO1 // 寄存器0x05保存时序配置按位设置使能关联 i2c_write(PMIC_ADDR, 0x05, 0x24); // 使能所有通道寄存器0x06 bit0~bit3对应四路输出 i2c_write(PMIC_ADDR, 0x06, 0x0F); // 读回配置并校验 uint8_t val i2c_read(PMIC_ADDR, 0x10); if (val ! 0x15) { printf(PMIC configure failed: BUCK1\n); }这段代码里最关键的是时序配置寄存器。它的每一位代表“这一路延迟多少时间后再使能”或者“这一路要等到哪一路的PWRGOOD信号有效后再启动”。我在第一次调的时候没搞清楚两位的具体含义照着别人的配置抄结果上电后一路输出死活不启动折腾了很久才通过读回寄存器发现时序配置错了。配置完成后我会通过I2C逐路读回配置确保写入成功。PMIC一般不会校验你的写入是否合理你写一个不存在的输出电压编码它也会接受但实际上输出的电压是错的。所以必须读回验证这一步不能省。3.4 上电验证与动态负载测试示波器才是最好的朋友寄存器配置写完接下来是实测验证。上电后我第一步会用示波器同时抓四路输出波形确认上电顺序符合预期。一般示波器选四通道以上探头分别点四个输出电压测试点用“上升沿触发”模式捕捉上电瞬间。判断顺序是否正确的标准是先启动的那一路电压开始爬升时后启动的那一路应该还是0V直到延时结束才开始爬升。如果检查后发现两路同时启动那就要回头看时序寄存器配置。然后是纹波测试。注意示波器探头要用短地环或者弹簧地不要用长地夹子否则测量出不真实的尖峰。先看空载纹波再加动态负载看瞬态响应。我会用电子负载给主输出做动态负载切换比如从1A跳到3A再跳回来观察电压跌落和过冲。PMIC的环路响应速度决定了恢复时间如果恢复太慢说明输出电容可能需要加大或者需要调整环路补偿如果芯片支持。最后还要测效率。用功率分析仪或者两三个万用表分别测输入输出电压电流计算功率和效率。效率偏低的话优先检查电感选型和工作模式——有些PMIC有轻载省电模式小电流下效率高大电流下要确认是否自动切到PWM模式如果一直工作在省电模式重载效率会很难看。4. 调试阶段踩过的坑与排查方法实录4.1 上电时序乱套多数是EN脚和配置没同步第一次用四路PMIC做板子时我遇到一个诡异的问题寄存器里已经写好了上电顺序但每次上电四路电压都是同时起来完全没有按配置走。排查下来发现问题不在寄存器而在硬件的EN引脚。这颗PMIC有四路输出每一路都有一个外部的EN引脚并且这个EN引脚的默认逻辑是“硬件使能优先于软件配置”。我画原理图时把四个EN引脚都直接接到了输入电源上等于上电瞬间所有通道都被硬件使能了软件配置的时序当然就失效了。正确做法是要么把EN引脚接到主控GPIO上由软件控制每个通道的使能时机要么查清楚芯片详细逻辑把EN引脚配置成“仅用作状态读取”让使能逻辑完全由寄存器控制。这个坑在数据手册里其实有写但写得比较隐晦必须仔细看“Enable Control”这一章。经验调时序问题先确认硬件EN状态再研究寄存器不要一上来就怀疑代码。4.2 I2C写入不生效PWRGOOD和复位脚把你整懵了另一个常见的坑是I2C写入明明返回了ACK寄存器读回看起来也对但输出就是不变。后来发现这颗PMIC在PWRGOOD没有拉高之前会持续把寄存器状态保持在复位默认值你的配置写进去也会被重置。这涉及的逻辑是PMIC内部有一个“上电复位”过程输入电压刚建立时内部逻辑还不稳定芯片会等待一段时间期间外部I2C实际上是可以通信的但修改的内容不会生效。有些PMIC还会在输出电压稳定过程中强制拉低PWRGOOD主控如果一直在等PWRGOOD才写配置就会错过配置窗口。我的处理办法是主控启动后先读PMIC的状态寄存器确认PWRGOOD已经置位再执行配置写入。如果状态不对就延时重试最多重试三次。这样能避免“写了但没生效”的玄学问题。4.3 纹波超标电感选小了有块板子改版后0.9V输出纹波从20mV变成了60mV整个板子开始出现随机性的逻辑错误。示波器波形显示开关频率的纹波尖峰明显变大。排查过程很有意思——因为原理图几乎没改只是PMIC和电感的位置重新摆了一下。我最初怀疑是布局问题后来把新老板子对比发现电感型号被库房“自动替换”成了同感值但体积更小的型号。小体积电感的饱和电流和绕线电阻特性差不少实际工作电流下纹波电流明显增加输出电压纹波自然就超标了。处理办法是换回原始型号的电感同时把输出电容从两颗10uF增加到三颗10uF并联降低ESR。最终纹波恢复到25mV左右。这事的教训也很直白BOM里的电感、电容不能只看标称值一定要核对饱和电流、ESR、温度特性这些参数交期紧张的时候最容易在这里栽跟头。4.4 芯片过热别忽略轻载模式切换还有一次是芯片温度异常。功耗计算下来系统总功率也就8W芯片手册标称能支持12W理论上不需要加散热片。但实际摸上去烫手用热像仪一看芯片局部温度到了95度。后来查下来问题出在轻载模式上。这颗PMIC默认在轻载时进入省电模式PFM但省电模式下开关频率降低、输出纹波变大。我在寄存器里把省电模式关掉了强制让它工作在PWM模式结果整个板子在待机状态下依然满载频率工作开关损耗大幅增加芯片温度自然就上去了。解决办法是把省电模式重新打开并且在外部负载比较轻的通道上增加一点假负载让芯片始终工作在合理的负载区间。另外一个改动是扩大了芯片底部散热焊盘的过孔数量让热量能更快传到背面铜箔。第二次打板时芯片温度下降了约15度。这里要给个实在建议PMIC的散热焊盘一定要接到足够大的铜皮上过孔不要只放一圈尽量铺满焊盘可用的区域背面如果没有空间铺铜至少也要保证过孔连接到中间层的地平面。4.5 故障标志别随手悬空最后再说一个容易被忽略的点PMIC的电源正常指示和全局故障引脚最好不要悬空。哪怕你不打算用它来控制其他电路也应该把它引到主控的GPIO或者拉一个LED指示灯上。由于这些信号能明确反映PMIC工作状态调试时不理解问题的情况下它往往能帮你快速判断是电源没起来还是电源起来了但主控初始化失败。有一次板子启动到一半死机逻辑分析仪查了好久没头绪最后发现是PMIC进入过流保护后自动重启反复重启导致系统一直无法完成初始化。如果没有故障引脚这个问题得多花半天时间。5. 实测数据记录与日常使用心得上面讲了很多踩坑最后再分享一些我每次做PMIC设计都会记录的实测数据和方法希望对你有参考价值。调试完成后我会把每路输出在不同负载下的电压、纹波、效率记录成表格。别小看这个工作后面做EMC测试、热测试、故障排查这份数据就是最可靠的背景参考。比如过了一段时间有人反馈某个批次的板子功耗偏高我翻出之前的效率表对比一下就发现是某路输出在低负载时PFM/PWM切换点变了问题定位速度能快很多。关于寄存器配置我强烈建议把每次调试好的配置整理成一份独立的“配置清单”文档。内容包括芯片型号、I2C地址、每个寄存器的地址和值、注释说明为什么这么配。放在项目仓库里和原理图、PCB、固件一起管理。以后换人维护或者芯片升级这份文档比代码里的注释有用得多。另外如果你用的是支持外部EEPROM配置的PMIC可以考虑把出厂配置烧进EEPROM主控上电时读取PMIC寄存器核对一下不对再写。这种“双保险”策略在量产环境下能减少因芯片批次差异导致的配置问题。最后一个小习惯每次画PMIC原理图之前我都会先把数据手册的“Application Information”章节完整读一遍尤其是典型应用电路和布局建议部分。很多人觉得这一章可有可无但大部分“玄学问题”的答案其实都藏在这几页里只是你没认真看。四路可编程PMIC这块芯片的确帮我省了很多事但前提是你要真正把它用对。
返回列表