ARTICLE DETAIL

资讯详情

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

基于PMBus的µModule稳压器:精确设定与回读功能实战解析

基于PMBus的µModule稳压器:精确设定与回读功能实战解析 前阵子调一块多路供电的板卡FPGA 内核电压设定 0.85V满载时实测却到了 0.868V。万用表、示波器来回换折腾了小半天才定位到问题是负载点压降和测量点没选对共同造成的。那次之后我就下了个决心后续平台的核心电压一律优先看 PMBus 兼容的 µModule 稳压器而且要带精确设定Precision Set和回读Readback功能。这类器件解决的不是有没有电的问题而是电压到底准不准、负载电流到底多大、有没有异常报警的问题。对硬件工程师来说这意味着大量原本要靠在板测量、飞线、反复加载才能验证的事情变成了读写寄存器就能完成的软件操作。对系统工程师来说它意味着电源状态可以远程监控、批量产测可以自动化判读。这篇文章不聊那些晦涩的底层原理重点讲清楚精确设定和回读这两个功能链路里有哪些环节、实操中怎么配置、以及最容易在哪里翻车。先说明一点PMBus 是电源管理总线底层基于 SMBus/I2CµModule 是把控制器、功率管、电感、补偿网络封装在一起的模块化电源方案。标题里的 Precision Set 与 Readback正是这类模块在数字电源管理方向最有价值的两个能力。1. 为什么精确设定回读的组合拳比单纯看电压表更实用1.1 传统电源调试的隐性时间成本传统模拟电源的调试流程很多人应该都有体会先把原理图上的反馈电阻算好、焊好然后上电拿万用表测输出发现电压偏了再换电阻。一次换电阻就是一次拆焊、清洁、重新上电时间成本不高但架不住反复来。问题更大的是动态场景。负载电流从 1A 跳到 20A输出电压的跌落和恢复特性要用示波器抓多路电源要量纹波、量时序、量上升斜率温度箱里跑高低温还要把探棒伸进去看读数。这个流程里测量点选择、探头接触电阻、地线干扰都会往结果里掺噪声最后得到的只是一个大概准的数据。我见过不少新同事用示波器探头直接点输出电容两端读电压探头带宽不够、地线夹过长读出来的纹波数值大得离谱然后开始怀疑电容选型有问题。其实探头本身已经是主要误差源了。1.2 数字电源管理是如何改变工作流的PMBus 兼容的 µModule 稳压器把看电压这件事从物理测量变成了数字读取。模块内部有采样链路输出经过分压、ADC、校准之后以数字形式存在寄存器里。你只要通过 I2C/SMBus 接口读 READ_VOUT、READ_IOUT 寄存器就能拿到当前输出电压和电流的量化结果。这带来一个很实际的变化多路电源的电压测量不再依赖万用表和探头而是通过同一个调试软件或脚本读取。LTpowerPlay、PMBus 命令行工具、甚至自己写 Python 脚本 i2cget/i2cset都能完成。批量产测时原本人工逐个测电压的工序可以改成自动化测试设备逐片读 PMBus 寄存器判断是否在规格范围内。另一个容易被忽略的价值是可重复性。人工测电压换个测量点、换个探头结果就不同而回读是模块内部固定的采样网络只要校准系数一致不同板卡之间读取的数据就有可比性。这在量产筛选、老化筛选、故障追溯时价值很大。2. 精确设定电压是怎样被精确到毫伏级的2.1 从基准源到 DAC设定链路里都有谁精确设定不是简单地把反馈电阻调到某个值。PMBus 兼容的 µModule 稳压器内部设定链路大致是这样的你通过 PMBus 写入 VOUT_COMMAND 寄存器这个数字经过内部 DAC 转换成一个基准电压再与反馈分压网络的采样值比较最终控制占空比环路。这条链路上精度贡献最大的三个部分是内部基准源决定整个系统的参考是否稳定。很多模块内部基准能做到 ±0.5% 甚至更高并且带有温度补偿。DAC 的分辨率和线性度决定了你能把电压设到多细。常见的设定分辨率能做到 0.1% 左右也就是 1V 输出电压可以调到 mV 级。出厂校准这是 µModule 相比分立方案的巨大优势。模块在出厂时已经对基准、分压网络、ADC 通道做过校准误差被修正过不需要用户自己再去做系统级校准。用大白话说传统方案是你自己搭个秤还要自己找砝码校准µModule 是厂家把秤校准好了你直接读数值就行。2.2 VOUT_COMMAND 与裕度测试的实操含义PMBus 的电压设定命令遵循 PMBus 规范中的线性数据格式。很多 µModule 芯片采用 L11 格式5 位指数 N 加 11 位有效数 Y实际电压 V Y × 2^N。举一个具体例子。目标电压 0.85V如果 N -13那么 LSB 2^(-13) ≈ 0.000122V写入值 Y 0.85 / 0.000122 ≈ 6963换算成 16 进制就是 0x1B33。写操作时先写命令码 0x21再写入两个字节的数据。这个换算关系必须算清楚不然就会出现写了个电压出来完全不对的尴尬情况。与设定配套的还有裕度测试Margining。VOUT_MARGIN_HIGH0x24和 VOUT_MARGIN_LOW0x25可以快速把输出电压整体上调或下调一个百分比比如 ±5%。这个功能在产线测试里极其有用一块板卡生产出来后需要用 -5%、5% 的电源电压去验证板卡在不同输入电压下都能正常工作。传统做法是手动换电阻或调可调电源产线效率很低PMBus 方案里测试程序发一条命令电压就整体拉偏测完再发一条命令恢复正常全程不需要碰烙铁。3. 回读功能电源如何给自己做体检3.1 内部 ADC、分压网络与 DCR 采样回读功能的物理基础是模块内部的采样链路。输出电压先经过精密电阻分压器衰减到 ADC 可接受的范围再通过多路复用器切到 ADC 通道。电流回读则通常有两种方式一种是采样内部检流电阻两端的压降另一种是利用电感 DCR直流电阻作为采样元件。DCR 采样的问题是电感铜线电阻随温度变化明显如果不做温度补偿电流回读值会随着模块发热发生漂移。好的方案会在芯片内部放置温度传感器实时修正 DCR 的温度系数从而保证全温度范围内的电流回读精度。回读精度通常以百分比表示例如输出电压回读误差 ±1%、输出电流回读误差 ±2%需结合具体数据手册确认。这个精度在大多数系统监控场景里是足够的但如果你要用它做功耗核算尤其在低电压大电流场景下要把误差留足余量否则算出来的功率可能偏差百分之几。3.2 回读数据在系统联调中的价值回读最大的工程价值是看趋势。举个例子系统跑压力测试时FPGA 偶尔报时序错误但示波器又抓不到明显的电源毛刺。这时候你可以用 PMBus 以一定周期轮询 READ_VOUT、READ_IOUT 和 READ_TEMPERATURE_1把数据曲线画出来。如果发现温度升高后输出电压明显下降或者电流回读值有阶梯状跳变基本能锁定问题方向。还有一个容易忽略的点很多 PMBus 兼容的 µModule 稳压器具备故障记录功能。当发生过压、过流、过温故障时模块会把故障时的电压、电流、温度快照保存到寄存器里。系统崩溃后去读故障日志就能知道是先过流导致的掉电还是先过温导致的降额这个信息对定位偶发问题非常关键。我在调试过程中见过一个典型的案例板卡在高温老化时偶发重启示波器根本抓不到因为它发生在几十个小时的随机时刻。后来通过 PMBus 读取故障日志发现每次都是温度回读值超过设定阈值触发的过温保护进一步检查才发现是散热片没贴紧。如果没有故障日志这个问题可能要花几周才能定位。4. 硬件设计实操PCB布局、电容选型和采样点4.1 布局对电压采样精度的影响很多人以为用了 µModule 就不需要注意布局了这是误解。模块内部虽然集成了功率级和补偿网络但外部采样点的选取仍然直接影响设定和回读的精度。关键是采样线要用 Kelvin 连接也就是独立的细线从负载端引回模块的远程检测引脚Remote Sense。采样线上不允许有大电流流过否则会产生额外的压降误差。很多模块的 VOUT_SENSE 和 VOUT_SENSE- 引脚就是干这个用的把这两个引脚直接连到负载端电容而不是在模块输出引脚处就近短接。PCB 上还有一个常见问题输出电容的公共地过孔离采样点太远地弹噪声叠加到采样信号上。我的习惯是在负载端电容旁边放置一组小容值的 NP0/C0G 电容比如 0.1µF专门给采样网络做高频滤波并且采样地单独走一小段线回到模块的地引脚不要混在功率地回路里。4.2 输出电容选型与瞬态响应权衡µModule 稳压器通常已经把补偿网络固化在封装内部用户不需要算零极点但输出电容的选择仍然要遵循数据手册的推荐范围。电容容值过小瞬态响应会变差负载突变时电压跌落幅度大电容容值过大又会降低环路带宽可能出现轻微振荡。陶瓷电容的直流偏压特性要特别留意一颗 22µF/10V 的 X7R 电容在 5V 偏压下实际容量可能只剩 30%~50%算总容量时不能用标称值直接相加。我一般会先按数据手册推荐的每相最小输出电容作为起点然后根据实际负载瞬态需求往上加。同时预留位置给高频小电容比如 4.7µF 加 0.1µF 组合这样在调试阶段如果有高频振荡可以通过调整小电容数量来微调不需要改版。另外如果多路 µModule 需要同步开关频率注意看模块的 SYNC/MODE 引脚配置通常有内部检流电阻的默认上下拉设置。不要把所有模块的地址电阻都设成一样的值否则 PMBus 总线上会出现多个相同地址的设备通信直接冲突。5. PMBus上机调试实录从扫描到读回遥测数据5.1 常用 PMBus 命令速查PMBus 命令基于 SMBus/I2C 物理层常用命令码如下具体偏移量以芯片 datasheet 为准命令名命令码作用典型操作OPERATION0x01开关机、裕度开关写 0x80 开启输出VOUT_COMMAND0x21设定输出电压写入线性格式目标电压VOUT_MARGIN_HIGH0x24设定高裕度电压写入 5% 电压VOUT_MARGIN_LOW0x25设定低裕度电压写入 -5% 电压STATUS_WORD0x79读取状态字查看是否有故障报警READ_VOUT0x8B读取输出电压返回 16bit 线性数据READ_IOUT0x8C读取输出电流返回 16bit 线性数据READ_TEMPERATURE_10x8D读取芯片温度返回 16bit 线性数据CLEAR_FAULTS0x03清除故障锁存写任意值触发实际操作中读回的数据都是 11bit 或 16bit 的线性格式需要拆成高字节和低字节拼起来再做格式转换。5.2 一次典型的调试验证流程假设你已经用 I2C 适配器把 µModule 接到了电脑上下面这个流程可以帮你快速确认硬件基本正常第一扫描总线。用 i2cdetect 或 PMBus 工具的 bus scan 功能确认模块的应答地址存在。如果扫描不到先查地址配置引脚是否设置正确再查 SMBA、SCL/SDA 上拉电阻是否安装。第二读状态。发送 STATUS_WORD 命令看返回值的 bit15 是否有报警位。如果有先读具体故障寄存器可能是上电瞬间过压误报清除一下再确认。第三设电压并验证。用 VOUT_COMMAND 写入目标电压等待几毫秒然后用 READ_VOUT 读回。对比万用表在负载端电容处测得的电压两者误差应该小于模块回读规格。这里用万用表验证的是模块回读准不准不是设置准不准。第四加载验证。接上电子负载从 0 缓慢加到满载每隔一定电流档位读一次 READ_IOUT 和 READ_VOUT记录整条输出特性曲线。如果发现电流增大时电压下降过快优先检查采样点位置和输入供电能力。第五异常测试。故意触发一次过流或短路观察 STATUS_WORD 是否能正确置位清除后是否恢复正常。这一步决定了你做故障诊断时能否相信模块的健康状态汇报。6. 误差溯源与避坑回读精度从哪里流失6.1 误差来源链路中的每一环都会吃掉精度回读数据的最终精度由模块内部采样链路和外部系统共同决定。常见的误差来源可以分成几类内部基准和 ADC初始误差、温漂、量化噪声。分压电阻和采样电阻阻值公差、温漂、老化。DCR 采样电感铜线电阻的温度系数远高于精密电阻未补偿或补偿不当时电流回读值会出现明显的正温度漂移。PCB 铜箔电阻大电流路径上的铜箔会产生压降如果采样点离负载端太远测到的电压会偏低反过来如果采样点离模块引脚太近又测不到负载端的真实电压。地弹和噪声耦合采样线经过开关节点附近高频噪声会被 ADC 整流导致读数偏移。误差来源典型量级应对手段内部基准温漂10~50ppm/°C选用低温漂规格型号DCR 温漂3000~4000ppm/°C使用带温度补偿的 DCR 采样方案PCB 铜箔电阻取决于线宽/线长加宽功率走线、远端采样ADC 量化噪声取决于分辨率多次读取取平均采样线耦合噪声与布局相关远离开关节点、加 RC 滤波6.2 三个实际踩过的坑第一个坑采样线走过长距离未做滤波。曾经把 VOUT_SENSE 引到连接器的远端结果回读电压在开关频率处有明显毛刺ADC 读数比实际电压偏高约 30mV。后来在采样线靠近模块处加了一颗 100Ω 电阻和 0.1µF 电容组成低通滤波噪声被压下去读数恢复正常。第二个坑PMBus 地址冲突。板子上用了两片 µModule出厂默认地址相同上电后第两片在总线上无法访问。排查时发现地址配置引脚没有根据数据手册做不同电平设置改成不同配置后恢复正常。这类问题在单板多路供电时非常容易踩原理图 review 阶段一定要逐片核对地址。第三个坑用 1% 精度外部电阻做反馈分压。有些模块允许外部电阻设定输出电压但外部电阻的误差是模块校准覆盖不到的。如果你用 1% 电阻那么理论上输出电压误差至少有 ±1%这比模块自身的设定精度要差一个数量级。做精密度要求高的设计时要么选内部反馈设置要么选 0.1% 精度电阻。7. 适合这套方案的典型应用场景7.1 多路供电的 FPGA/ASIC 板卡FPGA/ASIC 板卡通常有内核电压、IO 电压、辅助电压等多路供电每一路的电压精度都有严格上限尤其是内核电压往往只有 0.7V~0.9V允许偏差可能只有 ±30mV。用传统模拟电源每一路都要人工验证精度和瞬态用 PMBus 兼容的 µModule 稳压器开机后脚本自动遍历所有电压域读取回读值并与规格比对几秒钟就能完成整板电源健康检查。裕度测试在这里的价值更大。FPGA 设计上通常有最小/最大电平要求量产前要验证在 -5% 和 5% 电源电压下逻辑是否都正常。PMBus 可以按顺序逐路拉偏配合 FPGA 的在线自测程序自动完成整个电压窗口验证这在传统模拟方案里需要手动配合成本和耗时会高得多。7.2 服务器、交换机与光模块的远程管理数据中心运维场景里设备一旦上架部署工程师不可能跑到机柜里拿万用表测电压。PMBus 的远程回读能力让电源状态可以作为系统管理信息的一部分通过管理总线汇聚到 BMC 或管理控制器。功耗监控是典型需求系统层面的功耗管理需要知道当前各路负载电流配合 CPU/FPGA 的负载信息做动态调度。通过 READ_IOUT 和 READ_VOUT 相乘得到实时功耗虽然精度不如专用功率计但在系统级策略调整的场景中足够。这类设备还经常需要远程复位、远程上下电PMBus 的 OPERATION 命令可以直接控制输出电压开关不需要人为进入机房。7.3 原型验证与量产测试自动化在原型阶段PMBus 最爽的一点是调电压不用换电阻。项目初期负载电流估算不准CPU 供应商要求把电压从 0.85V 改成 0.83V硬件工程师只需要改一行脚本或者 GUI 参数而不是改 BOM、重新贴片。量产测试方面PMBus 回读可以做到非接触式测量。测试治具通过探针接触 I2C 总线就能批量读取每一路电压、电流和温度。相比让产线作业员拿万用表测多点电压效率提升明显而且数据可以自动存入数据库做到全批次质量追溯。产线上还可以用裕度测试快速筛选出电源余量不足的板卡这是传统模拟电源方案很难做到的。最后再说一个我觉得很实用的工作习惯拿到 PMBus 兼容的 µModule 稳压器的数据手册先别急着看电气参数表先把 PMBus 命令列表从头到尾扫一遍把你这个项目真正会用到的最小命令集用荧光笔标出来。通常就八九个命令包括设定电压、读电压、读电流、读温度、看状态、清故障、裕度。在原理图设计阶段就把地址配置、上拉电阻、采样点位置都规划好后面调试会顺很多。我自己最早就是原理图画完才想起 PMBus 地址没分配结果改版浪费了两周时间。电源这个东西你觉得它简单的时候它往往会在最不经意的地方给你上一课。
返回列表