ARTICLE DETAIL

资讯详情

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

1/8砖400W DC-DC与PMBus数字电源管理实战解析

1/8砖400W DC-DC与PMBus数字电源管理实战解析 一块不到六厘米长、两指宽的金属基板输入36V到75V输出12V/400W还能用两根信号线实时读电压、电流、温度、故障状态甚至在线修改输出电压——这就是我最近在48V母线项目里用的一款1/8砖DC-DC转换器。电源圈里做板卡的工程师近几年对“1/8砖PMBus”这套组合应该都不陌生AI服务器、通信设备、工业控制里凡是需要大电流低压供电的场景几乎都绕不开它。这篇文章围绕这个模块聊聊功率密度、数字电源管理协议和外围设计里的实操经验帮准备用这类模块的同行少走点弯路。1. 400W塞进1/8砖功率密度这笔账是怎么算平的1.1 尺寸、功率密度与封装演进先明确一个概念1/8砖不是重量单位是行业里约定俗成的砖型电源封装尺寸。按DOSA联盟的标准1/8砖通常外形是2.28英寸x0.9英寸也就是约58.4mmx22.9mm面积大概1337平方毫米。你可以直接在PCB上量一下大概就是两颗标准SOIC-8芯片并排放开的面积。几十年前全砖电源也是这个量级的功能现在把它压到一个角落这就是功率密度迭代的结果。把400W除以这个面积约195W每平方英寸。这个数字放在十年前是1/4砖甚至半砖才能做到的量级现在1/8砖就能到说明内部拓扑、磁性元件、功率器件都换了一代。常见的封装对比看下表封装类型典型外形尺寸长x宽常见功率范围1/16砖33mm x 13.5mm30W-120W1/8砖58.4mm x 22.9mm120W-400W1/4砖58.4mm x 36.8mm200W-600W1/2砖61mm x 57.9mm400W-1200W功率密度上去了第一个代价就是散热面积变小了。400W满载效率按96.5%算损耗是400/0.965-400大概14.5W。这14.5W要靠基板、PCB铜皮、散热片和气流带走。第二节和第四节我会展开讲热的问题这里先记住一个结论1/8砖这个尺寸下功率能不能跑满大概率不是电路能不能的问题是温度允不允许的问题。1.2 拓扑与器件选型LLC同步整流为什么是主流在1/8砖这个体积里做400W拓扑基本没有太多悬念。36V-75V输入典型48V母线12V或更高电压输出功率级超过200W之后反激、正激这类硬开关拓扑效率不够看占空比丢失和开关损耗拖后腿。主流方案是半桥LLC谐振变换器加同步整流或者移相全桥加同步整流其中LLC因为天然实现原边ZVS、副边二极管电流能自然过零更适合宽范围输入、固定电压输出的场景。LLC能在这个体积里站住脚还有一个关键原因是磁性元件可以做小。LLC的变压器可以把谐振电感集成进去配合平面变压器结构高度能压到十几毫米以内。平板变压器绕组在里面是平面铜片散热路径比圆导线好得多高频下趋肤效应也更小。功率器件方面现在很多模块开始用GaN HEMT替代Si MOSFET主要原因是GaN管的栅极电荷Qg更小、输出电容Coss更小LLC死区时间内充放电损耗明显低于硅管在高频下效率更占优。副边同步整流也要专门说明。400W输出如果是12V满载电流33A左右。同步整流管的导通压降直接决定损耗大小一个3mΩ的管子导通损耗就有3.3W两个管子并联能压到一半。所以模块内部副边往往是两颗到四颗低压大电流MOSFET并联控制器要根据原边状态精确估计副边电流过零时刻提前关断SR管防止反灌。这个控制精度直接关系到满载效率。1.3 400W只是起点效率与损耗的换算关系很多工程师看数据手册只看输出电压、电流、纹波不太关注效率曲线等到整机热测试时才后悔。这类1/8砖模块半载到满载效率一般在95%到97%之间视输入输出电压组合而定。不要小看这一个百分点96%和97%效率400W满载损耗一个约16.7W一个约12.4W差了4W多。对1/8砖这种小基板4W的损耗差异可能就是基板温度10°C的差别直接决定要不要加散热片、能不能在85°C环境跑满。我习惯拿到模块先看三张曲线效率vs负载、输出电流vs环境温度降额曲线、基板温度vs输出电流。先用效率曲线算最差工况的损耗再用热阻估算基板温度最后对照降额曲线确认能不能跑满。这样在原理图阶段就能把散热结构定下来而不是等样机热炸了再补救。2. PMBus到底给电源管理带来了什么2.1 模拟电源的痛点与数字电源的爆发PMBus是什么简单说它是一套建立在I2C/SMBus物理层之上的开放数字电源管理协议。电源模块内部有一颗控制器或专用PMBus接口芯片通过两根线SCL时钟、SDA数据和系统里的主控通信。为什么需要它想想传统的模拟电源模块输出电压靠电阻分压设定保护阈值靠厂家出厂固定运行状态只能靠引脚电平读PG信号故障原因只有一个笼统的Power Good拉低。对于一块有几十路电源的板卡这种信息量完全不够用。PMBus出现之后电源变成了一种可以“读”和“写”的外设。打开电源、关断电源、调输出电压、设过流保护点、记录故障原因全部可以通过命令完成。对系统管理软件来说电源从被动器件变成了可观测、可控制的资源。典型的使用场景包括服务器BMC读取每一路电源的电压电流和温度CPU负载变化时在线调整电压裕度电源异常时读取STATUS寄存器定位是哪一路过流还是过温。这些操作放在模拟电源时代几乎不可想象。2.2 核心PMBus命令配置、遥测、故障管理三张牌PMBus命令集很大但实际工程里经常用到的就那几条。我按功能分三类说明。第一类配置命令。0x01 OPERATION控制模块开关和裕度模式0x02 ON_OFF_CONFIG配置使能脚和PMBus指令的启动逻辑0x20 VOUT_MODE设置输出电压的数据格式0x21 VOUT_COMMAND设置输出电压目标值。0x21是用的最频繁的命令主控想在线调压就靠它。另外0x10 WRITE_PROTECT控制写保护等级防止误写配置损坏模块0x11 STORE_USER_ALL可以把用户配置保存到非易失存储断电不丢。第二类遥测命令。0x8B READ_VOUT读输出电压0x8C READ_IOUT读输出电流0x8D READ_TEMPERATURE_1读内部温度0x8F READ_FAN_SPEED_1读风扇转速如果有风扇版本。这些命令返回的数据都是线性格式或者VID格式两字节换算方式后面详述。遥测的意义不只是看数值更重要的是软件可以定时轮询形成曲线判断电源是否在健康工作状态。第三类故障管理命令。0x79 STATUS_WORD返回16位状态字bit15表示VOUT故障bit14表示IOUT故障bit13表示输入故障bit9表示温度故障bit3表示通信故障等等。0x78 STATUS_BYTE返回8位状态。0x3 CLEAR_FAULTS清除所有故障锁存。0x46到0x4F这一组是设置各类保护限值比如0x46 IOUT_OC_FAULT_LIMIT设过流故障点。故障发生后模块可以锁存故障主控去读状态寄存器再决定清故障还是继续关机。这一套机制对批量设备维护太有用了返修时不用拆机就能知道哪一路哪里出了问题。2.3 一次完整的PMBus写入从VOUT_MODE到VOUT_COMMAND拿“在线把输出电压从12.0V调到12.5V”这个最常用的操作举例说明PMBus数据是怎么拼出来的。PMBus对电压量最常用的是线性格式公式是实际电压 数据值 x 2^NN是5位补码指数由VOUT_MODE的低5位给出。一个常见的设定是N-9对应VOUT_MODE0x17。工作过程是第一步向模块写入VOUT_MODE0x17告诉它后面VOUT_COMMAND的数据按2^-9换算。第二步计算目标电压12.5V对应的数据值12.5 / 2^-9 12.5 x 512 6400十六进制是0x1900。第三步向0x21命令写入0x19 0x00两个字节。发送的完整I2C帧大概是这样的模块从地址举例0x48左移一位后写地址0x90字节内容说明Start0x90模块从地址写位0x4810x900x21VOUT_COMMAND命令码表示后跟输出电压设定0x00数据高字节0x1900的高位0x19数据低字节0x1900的低位Stop结束可选PEC校验字节实际模块可能要求先解锁写保护或者发送STORE_USER_ALL保存配置这个要看数据手册。我在实际调试中踩过的坑是改了VOUT_COMMAND立即读READ_VOUT发现输出电压有几十毫秒的过渡时间这是因为模块内部有软启动和下斜率控制不是故障别当作板子有问题。READ_VOUT返回的数据格式类似也是两字节线性格式指数N和VOUT_MODE一致。比如模块返回0x1800换算就是0x1800 x 2^-9 6144/512 12.0V。读IOUT、读温度也是线性格式只是指数由数据手册单独规定一般在对应命令描述里有一张表写代码时需要查表确定。3. 外围电路设计最容易翻车的地方不在模块本身3.1 输入侧电容与保险丝的工程计算模块本身设计得再完善外围电路做不好照样出问题。先说输入侧。数据手册上通常会给出最小输入电容建议值比如330μF电解加若干陶瓷电容但那是“能用”的下限工程上应该按实际工况算一遍。一个典型场景48V输入总线模块满载400W效率96%时输入功率约416.7W平均输入电流约8.68A。如果系统掉电后要求保持10ms输入电压从48V跌到36V不关机输入侧的Bulk电容可以粗略按能量守恒估算C 2 x P_in x t / (V_start² - V_end²) 2 x 416.7 x 0.01 / (48² - 36²) 8.334 / 1008 8270μF算出来是mF级别实际会用几颗大电解并联再叠加几颗低ESR陶瓷电容滤高频开关纹波。注意电解电容的ESR和纹波电流额定值也要查不要只看容值。我在一个项目里遇到过输入电容容值够但纹波电流额定值不够电容在满载时内部发热几个月后鼓包后来换上更大纹波电流等级的电容才解决。输入保险丝选择也别大意。满载8.68A只是稳态浪涌电流可能远高于此。保险丝额定电流一般取稳态输入电流的1.5-2倍同时注意分断能力和I²t参数避免启动瞬间就熔断。如果前端有热插拔或者浪涌抑制电路位置关系也要规划先EMI再浪涌再保险丝还是反过来的顺序直接影响防护效果。3.2 输出电容、负载瞬态与遥感线输出侧要关心的主要是负载瞬态响应。模块内部有控制环输出电容是环路的一部分加太少电压跌落大加太多可能影响环路稳定性。数据手册会给出推荐输出电容范围和ESR范围这个范围一定要遵守。工程上可以快速估算C_out ΔI x Δt / ΔV。比如负载阶跃15A允许电压跌落200mV环路响应时间按50μs估算C_out 15 x 50μs / 0.2V 3750μF。再留一倍裕量实际选用6800μF左右的电容组合。但注意如果模块数据手册对输出电容ESR有明确限制比如要求5mΩ到20mΩ之间那就要用低ESR聚合物电容或陶瓷电容阵列而不是随便上普通电解。遥感Remote Sense是这个功率等级必须重视的功能。模块的VS和VS-引脚必须接到负载最远端这样模块内部控制环才能补偿PCB走线上的压降。12V/33A满载如果输出走线有1mΩ电阻线上就掉33mV不接遥感的话负载端实际电压就少了33mV。遥感线是高压阻小信号走线必须差分走线、远离开关节点和功率走线最好用地线包围屏蔽否则容易把噪声引入反馈环路导致输出电压抖动甚至振荡。3.3 PMBus总线的电气设计上拉、电平转换与SMBus差异PMBus通信物理层是SMBus兼容I2C时序但有几点不同做硬件设计的必须要知道。首先是上拉电阻。I2C/SMBus的SCL和SDA都是开漏输出需要外部上拉。上拉电阻阻值的选择取决于总线电容和时钟频率。100kHz下总线电容200pF上拉电阻选4.7kΩ比较稳400kHz下总线电容大就要降到2.2kΩ或1kΩ。内部已经有上拉的模块外部再加会并联导致下拉能力不足所以先查数据手册有没有内置上拉。我见过不少工程师在通信不上的时候拼命换电阻最后发现是模块地址配置不对白白浪费时间。其次是电平转换。很多系统主控的I/O是3.3V而PMBus模块的SMBus接口可能是3.3V也可能是5V兼容要确认模块的VDD和I/O电平范围。如果电平不匹配需要加电平转换芯片。注意电平转换方向要双向现在常用的TXS0102、PCA9306这类芯片可以直接用但要避免在SCL/SDA上串联电阻导致信号边沿变缓、通信速率上不去。还有一个最容易忽视的点SMBus有超时机制。SMBus设备在SCL低电平超过35ms时会自动释放总线避免总线锁死但I2C主控没有这个机制。如果主控是用通用I2C外设驱动PMBus模块一旦模块在事务中途拉低SDA等响应主控没有超时释放逻辑整个总线就卡死了。软件上一定要实现超时复位或者干脆用支持SMBus模式的主控。这个坑我踩过一次当时系统每次跑几小时就出现整条总线挂死最后查到是SCL被一个从设备拉死主控没有SMBus timeout硬生生卡住了整条I2C树。4. 热设计1/8砖的真正瓶颈是散热而不是电路4.1 模块损耗的流向与热阻模型前文算过400W满载、96.5%效率时模块损耗约14.5W。这些损耗主要分布在原边开关管、副边同步整流管、变压器和电感上。1/8砖模块内部结构紧凑热量会从功率器件传导到基板再通过基板传导到系统散热结构。理解热阻模型很重要可以简化为T_board T_ambient P_loss x R_thT_board是基板温度T_ambient是环境温度P_loss是模块损耗R_th是从基板到环境的热阻。不同散热条件下R_th完全不同自然对流可能2°C/W以上加散热片400LFM风冷可能降到0.8°C/W甚至更低。以14.5W损耗为例自然对流下温升就能到29°C以上环境55°C时基板温度84°C如果基板温度上限是110°C还有26°C余量但满载跑到旁边有发热器件的位置这个余量很快会被吃掉。所以不要只看T_ambient要看模块基板温度。数据手册一般会给出一个基板温度测试点位置实际调试时用热电偶贴在指定位置测量比用红外测温仪扫模块外壳更准确。模块内部功率器件的结温通常比基板高20-40°C基板温度到110°C时内部开关管结温可能已经130°C以上已经接近硅器件极限了。4.2 散热路径的工程处理垫片、散热片与风向1/8砖模块的散热路径主要是底部基板所以PCB设计时基板对应区域不要铺满阻焊尽量露出铜皮并打过孔到背面把热引导到整个PCB再通过导热垫把基板的热传给外壳或者专门散热片。实际项目里最常见做法是模块下方PCB背面加散热铜皮模块顶部加一个导热垫垫到系统机壳或者散热器上。导热垫的导热系数一般选3W/mK到6W/mK厚度根据结构公差确定太薄压不住公差太厚热阻大。垫片压缩率要控制好压得太虚空气隙反而增加热阻。散热片翅片方向要和气流方向一致。强迫风冷时气流优先贴着翅片方向流动效率最高。如果风道里还有其他器件挡风要注意影响气流路径。我调试过一个55°C环境满载的方案散热片贴合没问题但气流方向被旁边一块子卡挡住效率下降接近10%后来调整了模块朝向温度立刻下来。这种细节在结构评审阶段就要确定不要等样机出来再改。4.3 降额曲线的正确读法数据手册里的降额曲线Derating Curve一定要学会看。它通常以输出电流为纵轴、环境温度为横轴画几条不同气流速度下的曲线。曲线拐点意思很直白在这个温度以下可以满载运行超过拐点后每升高一档温度就要降一档电流。这是模块厂在目标散热条件下测出来的限制线不是建议值而是最大值。选型时留多少余量我的经验是满载工况的基板温度要低于limit至少15°C到20°C。因为数据手册的测试条件通常是理想风道、干净环境实际系统的风道噪声、积灰、器件老化都会让散热变差。曾经处理过一个服务器电源批量返修发现的规律是距散热片入风口近的模块故障率低靠后的模块故障率高就是因为后面模块吸入的是前面模块排出的热风实际环境温度比温度传感器读到的更高。选型和结构设计时就要考虑风道先后位置的累计温升不要只看单模块的热性能。到实际测试阶段还要验证模块过温保护是否按预期工作。把输出负载逐渐往上加同时监控基板温度和输出状态确认过温阈值和故障恢复行为。有PMBus就更方便了直接读READ_TEMPERATURE_1和STATUS_WORD不用额外接线。我之前在一个项目中就靠PMBus的温度遥测发现模块在某个工况下温度接近保护限值提前改了散热设计省了一轮打样。5. 联调阶段的高频坑位与排查复盘5.1 通信不上地址、ACK、PEC和写保护先说地址问题。每个PMBus模块都有若干地址引脚常见Addr0-Addr3通过电阻或直连高/低电平组合成多个可选从机地址。多模块系统里上电第一件事就是给每个模块分配不同的PMBus地址如果两个模块地址相同总线会冲突表现为通信时好时坏或者只能读到其中一颗。排查时先用总线扫描程序把0x03到0x77之间的地址扫一遍看实际有哪些设备在线。扫描程序很简单循环发地址字节判断有无ACK响应即可。但注意PMBus标准也允许通过STORE_USER_ALL或专用命令设置地址地址可能被改过跟引脚配置不一致这种情况也是先扫描再核对。其次是ACK波形。I2C通信里每个字节之后从机应该在第九个时钟周期把SDA拉低表示ACK。如果模块因为忙、写保护、命令格式错误而不ACK主机收到的就是NACK。用示波器抓SCL/SDA能直接看到一帧数据里哪些字节被ACK了哪些被NACK了。这个信息能非常快地定位问题如果地址字节被NACK地址不对或模块没上电如果命令字节被NACK写保护开启或命令不被支持如果数据字节被NACK数据格式有误或模块处于忙状态。PEC校验码也是个常见的“幽灵问题”。SMBus标准允许在事务末尾附加一个PEC字节用于错误检测。有些模块通过配置或命令使能PEC后如果主机发的PEC字节不对整个事务会被拒绝但模块不报错主机只看到没有ACK或者数据没生效。排查时确认两端PEC开关状态一致模块开启PEC主机也必须计算并附加PEC字节模块关闭PEC主机就绝对不要多发那个字节。PEC的计算是多项式0x07的CRC-8别自己手算主控代码里用查表法或者库函数很多I2C控制器也有硬件PEC支持。写保护命令也常被忽略。0x10 WRITE_PROTECT命令的字面意思就是“禁止写入某些命令”。如果在调试阶段设置过写保护后面所有配置命令都会被忽略或者NACK但读命令不受影响。症状很典型READ_VOUT正常VOUT_COMMAND写了没反应。解决方法是先发0x10命令写入0x00解除写保护再写需要修改的配置最后用STORE_USER_ALL保存。整个流程顺序不能反我就是因为写了配置后直接掉电配置没有STORE结果重新上电又变回默认值白调了半天。5.2 启动时序与预偏置问题启动时序是另一个重灾区。这里指两方面一是模块自身的输入VIN、使能EN、PMBus总线上电的先后关系二是多路电源系统中各个模块之间的上电时序。PMBus模块的数字内核需要输入电压达到一定阈值才能正常响应通信。如果外部主控在主电源没起来的时候就去访问PMBus读到的全是不确定数据或者没有ACK。所以系统设计里PMBus主控的上电要晚于模块的VIN或者主控软件要加“等待模块就绪”的启动流程。更隐蔽的问题是预偏置启动。什么是预偏置模块输出端在启动前已经被别的电源比如另一个先上电的模块、或者系统里已有的电压灌入了电压。这时候如果模块内部的同步整流管还在双向导通状态预偏置电压会通过SR管倒灌回模块可能触发过流保护或者导致输出电压异常。很多模块数据手册会明确写“支持预偏置启动”或“不支持”不支持的话就必须在系统时序上避免输出端提前被灌电压。如果你用的是支持预偏置的模块也要看启动波形确认启动时输出电压从预偏置电压平滑爬升到目标值没有先跌到零再爬升的台阶。我见过一个典型案例两路输出并联给同一负载其中一路先启动另一路后启动后启动那路启动瞬间负载电压掉到零把负载芯片搞复位就是吃了预偏置的亏。多路电源上电时序如果由PMBus控制那就要小心ON_OFF_CONFIG的配置。这个命令决定了EN引脚和OPERATION命令的“或/与”逻辑关系。比如配置成“仅由PMBus控制”那么EN引脚悬空或无效时模块不会启动配置成“EN引脚有效且PMBus允许才启动”那主控就要先发OPERATION0x01开启再拉高EN。上电时序乱经常不是硬件的问题而是ON_OFF_CONFIG配置和系统逻辑没对齐。5.3 负载瞬态和纹波的实测优化模块跑起来、通信也正常之后还要实测满载和动态负载的电压波形。电子负载切换负载用示波器在负载远端端子测量输出电压观察过冲和下冲幅度。如果波形不达标先别急着怀疑模块按这个顺序排查第一测量点是否真的在负载远端。很多板卡上取的是模块输出端的电压而不是负载引脚上的电压由于PCB走线寄生电感实际负载端看到的电压跌落会比模块输出端大不少。第二检查遥感线的走线。遥感线从负载远端回到模块如果走线过长或者靠近噪声源会导致反馈信号被干扰电压波形上出现周期性抖噪。第三检查输出电容是否在数据手册推荐范围内。电容太少瞬态跌落大电容ESR太高电压纹波大。第四确认模块的带宽配置是否适用。部分模块支持通过PMBus配置环路参数比如降低带宽换取更平滑的阶跃响应这时就要靠示波器实测来找平衡点。纹波测量也有讲究。示波器探头要用短地线弹簧针接地不要用长的鳄鱼夹地线否则地线回路会拾取开关噪声测出来的纹波比实际值大好几倍。带宽限制打开到20MHz这是行业惯例。测量点尽量直接在模块输出引脚上加两个陶瓷电容测试探针搭在电容两端避免在长走线远端测量引入额外的纹波分量。PMBus在调试阶段的最大价值是可以不断用READ命令读遥测数据来辅助判断。比如负载切到半载后先读READ_IOUT确认模块内部电流读数和电子负载值一致如果偏差大说明采样通道或参数设置不对这时候看数据手册的电流校准系数必要时通过PMBus写校准值部分模块支持。这个校准过程不要跳过很多批量生产的板卡后面做电源管理软件时发现电压电流读数不准就是因为没有对模块的遥测校准。还有一个容易被忽略的“软件层面”问题PMBus主控轮询频率不要太高。有些模块对连续通信的频率有限制读命令之间如果间隔太短模块内部I2C控制器处理不过来可能NACK或者返回旧数据。我习惯轮询周期设置在100ms以上事件驱动型读取比如读取故障状态才用更短间隔。这样通信负载低总线稳定散热和EMI也没那么紧张。最后再分享一个调试技巧在PMBus总线上挂一个逻辑分析仪把SCL/SDA引出来实测通信帧。很多通信问题靠看波形比看软件日志更直接。比如主控认为自己在发0x21命令但逻辑分析仪显示总线上实际发的地址字节是0x91而不是0x90那就说明软件里地址左移一位的代码写错了。这种问题查代码可能要花半天抓一次波形十秒钟就能定位。我在前面那些项目里PMBus联调阶段最常用的工具就是逻辑分析仪加一个总线解码插件效率极高。1/8砖400W加PMBus这个组合做电源的、做板上电源管理软件的、做系统整机的将来大概率都会碰到。模块选型时别只看电流够不够、PMBus能不能通信要把热设计余量、PMBus地址规划、SMBus物理层差异、启动时序、遥测校准这些全流程都想清楚。我在实际使用中最深的体会是PMBus不是给测试桌上“远程调个电压、读个电流”的玩具它是批量设备可维护性的重要底座。把通信层的每个细节吃透后面电源管理软件和系统运维都会轻松很多。
返回列表