十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

数字电源探索板实战:从PID调参到MOS管保护

数字电源探索板实战:从PID调参到MOS管保护 第一次拿到这块Digital Power Explorer Board时我其实有点不以为然——不就是个数字电源的开发板嘛和以前玩过的那些Buck电路有什么区别。真正焊好器件、插上USB、打开上位机之后我才明白它和传统模拟电源板根本不是一回事上电之后你不再需要拧电位器调电压而是直接在上位机里输入目标电压观察PID参数的实时曲线甚至在负载跳变的时候抓取完整的瞬态响应波形。这种“把电源变成软件对象”的体验确实有一种说不出的掌控感。这篇文章我想把这几年玩数字电源、折腾这块探索板的经验完整梳理一遍。从为什么需要数字电源、板卡各模块的工作原理到固件怎么初始化、闭环PID参数怎么算、实测效率纹波数据再到我踩过的那些坑包括烧掉三块MOS管和一次差点短路的事故全部写清楚。无论你是刚接触电源的嵌入式工程师还是想从模拟电源转数字电源的硬件开发者这里面都有可以直接抄作业的内容。1. 为什么需要一块数字电源探索板1.1 数字电源和模拟电源的本质差别传统模拟电源的核心是误差放大器加补偿网络输出电压经过电阻分压后直接和基准电压比较误差信号经过PID网络之后去控制PWM占空比。这个模型的优点是非常成熟、成本低但它有一个天然问题补偿网络的电容电阻值一旦焊上去动态响应特性就固定了想改参数只能改元件或者飞线。数字电源的核心则完全不同误差信号由ADC采样得到经过MCU或者DSP内部的数字补偿器运算再通过高分辨率PWM输出控制功率级。补偿器的系数不是电阻电容而是Kp、Ki、Kd几个变量改参数只需要发一条指令或者改一行固件连示波器探头都不需要挪位置。这块Digital Power Explorer Board之所以叫“Explorer”就是因为它把数字电源的关键环节全部开放了出来你能直接看到ADC采样值、环路计算中间量、PWM占空比以及软件整定PID对瞬态响应的实际影响。这对学习数字电源的环路控制来说价值非常大。1.2 板卡规格与硬件架构总览我手上这块板子的核心配置如下主控采用STM32G474RET6功率级是同步Buck架构输入电压范围6V到18V输出电压1V到5V可调持续输出电流5A峰值能到6A开关频率500kHz。板载一个USB转串口芯片用于上位机通信同时预留了I2C接口可以模拟PMBus协议和其他系统通信。整体硬件链路可以拆成四段第一段是USB转串口和接口保护电路负责和电脑通信第二段是STM32G474主控承担ADC采样、PID运算、PWM输出三件事第三段是驱动芯片加双N-MOS管构成的同步Buck功率级第四段是输出电压和电感电流的采样调理电路。四段之间通过PCB走线连接每一段都能独立测量排查问题的时候非常方便。这块板子最让我满意的是它把所有关键信号都用测试点引出来了PWM_H、PWM_L、SW节点、Vout、Vsen、Isen你不需要拿万用表去戳芯片引脚直接夹测试点就行。我第一次调环路的时候SW节点的振铃波形实测不到30ns就衰减完板子布局的寄生参数控制得不错。1.3 目标人群与学习路径如果你是刚接触数字电源的嵌入式工程师建议先把注意力放在环路控制上不用急着改硬件默认的5A负载机加上上位机的调参功能足够你把P、I、D三个参数的含义摸透。如果你是有模拟电源设计经验的工程师这块板子更接近一个“翻译器”——你会发现以前熟悉的增益裕度、相位裕度、穿越频率这些概念在数字域里只是几个系数。我的建议是分成三个阶段来玩第一阶段只做开环实验通过上位机手动设定占空比观察输出电压和负载的关系理解Buck电路的基本工作原理第二阶段开启电压闭环用默认PID系数跑起来然后逐步改变Kp、Ki、Kd观察示波器上输出电压阶跃响应的变化第三阶段才去碰瞬态响应、效率优化、甚至通信协议这种进阶内容。不要一上来就想把功率级、环路、通信全部搞明白那样只会让你的示波器上出现一堆看不懂的波形。2. 硬件设计的选型逻辑与关键电路2.1 主控选择STM32G474的核心优势数字电源对MCU有三个硬性要求一是PWM分辨率要高开关频率500kHz时如果PWM是普通16位定时器占空比调节精度可能只有0.3%输出电压稳定度会受影响二是ADC采样要有同步触发能力不能在开关管导通瞬间采样否则噪声会直接把采样值淹没三是运算能力要够快PID运算频率应该至少两倍于LC谐振频率高端应用甚至要求环路频率和开关频率相等。STM32G474恰好在这三方面都完成了针对性设计。它内部集成了高分辨率定时器HRTIMPWM分辨率能达到数十皮秒级别远超传统定时器ADC支持外部事件触发可以精确控制采样相位让它避开开关噪声最严重的区间内置的CORDIC硬件加速器和多个运放、比较器让电流采样和过流保护也省了很多外部电路。实际测试中我在500kHz开关频率下用HRTIM输出互补PWM死区时间设为100ns占空比从0做到98%线性度很好几乎没有抖动。这在普通定时器上很难做到要么分辨率不够要么死区设置导致波形毛刺严重。2.2 功率级设计从驱动到同步Buck的选型同步Buck的功率级设计有几个关键选择上管和下管MOSFET选型、驱动芯片种类、电感参数、输入输出电容配置。我先说MOSFET的选择逻辑给定输入12V、输出3.3V、电流5A这个功率等级下的MOSFET压降损耗占比不大更关键的是开关损耗和栅极驱动损耗。我选的是两颗低导通电阻的N-MOS管Qg控制在15nC以内这样驱动芯片的输出电流不需要很大开关损耗也低。对应500kHz开关频率每周期约2us开关损耗占比大约15%在可接受范围内。驱动芯片我用的FD6288T它是三相桥式驱动自带自举电路正好可以用其中两路驱动同步Buck的上下管。自举电容取值100nF自举电阻串联1欧姆实测上管Vgs电压在满载时仍然保持在10V以上不会出现驱动不足导致上管不完全导通的情况。电感选择是整个功率级设计里最容易被低估的部分。我按输出纹波电流为目标反推在输出电压3.3V、开关频率500kHz、电感纹波控制在额定电流的30%即1.5A的条件下最小电感值约为L (Vin - Vout) * D / (2 * ΔI * fsw) (12 - 3.3) * 0.275 / (2 * 1.5 * 500000) ≈ 1.6μH考虑实际电感的饱和余量和直流电阻损耗我选了4.7μH/6A的功率电感。虽然纹波电流比理论最小值小但换来的是更低的输出纹波电压和更温和的SW节点振铃对新手来说这个余量很有必要。输入输出电容的选择需要同时考虑耐压、ESR和纹波电流定额。输入电容至少用两颗22μF/25V陶瓷电容并联输出电容用两颗47μF/10V陶瓷电容并联。陶瓷电容的直流偏压特性会导致实际容量下降所以我在布局时预留了钽电容的位置实测在3.3V输出下陶瓷电容实际电容值降了约30%最后补了一颗100μF钽电容才把输出纹波压到30mV以内。2.3 采样链路数字电源的“眼睛”模拟电源的反馈网络是电阻分压加电容补偿数字电源的采样链路则要复杂得多它不仅要测得准还要滤得掉噪声更要在正确的时刻触发ADC。输出电压采样我用的是电阻分压加一级运放跟随。分压电阻的选值很关键太大会引入噪声太小会增加功耗我取了10kΩ加5kΩ的组合分压系数1/3。运放选的是轨到轨输出类型带宽10MHz这样对电压环路的相位延迟影响可以忽略。电流采样我用了低边采样电阻方案在Buck下管MOSFET的源极串联一个10mΩ的电阻电压信号经过仪表放大器放大20倍后送入ADC。为什么不用高边采样或者电感DCR采样低边采样的优势在于共模电压低对运放的要求小而且可以直接测量电感电流的负向部分对环路分析更友好。缺点是需要额外关注地弹噪声所以我用了开尔文走线把采样电阻的电压信号单独引回运放不走功率地。ADC触发相位是采样链路里最关键的细节如果采样时刻落在开关管的导通瞬间地弹噪声和驱动串扰会让采样值波动极大。我使用的是定时器PWM输出信号的上升沿来触发ADC通过可编程延迟单元把采样点放在下管导通区间中段实测ADC值跳动从原来的40mV降到了2mV以内效果非常明显。2.4 通信接口PMBus与本地调试并行数字电源不仅仅是一个“数字控制的电源”它还应该具备通信和监控能力。板子上保留了两种通信方式本地调试用USB转串口一条简单协议直接读电压电流和设置输出电压系统集成用I2C接口模拟PMBus指令集。PMBus是一种基于I2C的管理总线标准其核心价值在于系统级监控和管理主控制器可以通过PMBus读取电源的输出电压、温度、故障状态也可以设置电源的开关、输出电压和电流限制。这套协议在服务器、通信设备、新能源汽车的电源系统中非常常见。我的实现是在固件里维护一个简单的PMBus寄存器映射表基本命令包括READ_VOUT读输出电压、VOUT_COMMAND设置输出电压、CLEAR_FAULTS清除故障标志等。I2C从机地址通过板上的拨码开关配置默认是0x21。如果你的项目暂时用不到PMBus本地USB串口是调试阶段最高效的工具。这条链路负责两件事一是在控制台打印运行状态包括ADC原始值、PID输出、PWM占空比二是接收上位机调参指令实时修改PID系数和输出电压设定值。固件里我将这两个通道彻底分离调参通道用了环形缓冲区加DMA不会因为打印日志阻塞命令响应。3. 固件架构与闭环调试全流程3.1 初始化流程与软启动固件初始化顺序决定了板子上电是否安全我的经验是严格按照“外设先于功率、功率先于环路”的顺序执行。第一步是初始化系统时钟和所有外设包括ADC、HRTIM、UART、I2C和GPIO。第二步是确认输入电压在安全范围内读取VBUS的ADC值如果在6V到18V之间才继续往下走如果超范围直接进入故障保护状态点亮红色LED并保持PWM禁用。第三步是给驱动芯片和运放供电等待100ms让电源管理芯片稳定。第四步才是使能PWM输出但此时环路仍然是开环的占空比由一个固定参数决定初始值设为0。软启动我采用了斜坡方式闭环使能后输出电压目标值从0开始以固定步长递增到用户设定值每次递增之间延时几个控制周期。这样做的好处是避免启动瞬间出现大的浪涌电流也防止输出电容充电时环路反馈产生振荡。实际测试中从目标电压0V爬到3.3V大约需要20ms输出没有过冲电流峰值只有满载的60%左右。3.2 数字PID补偿器的实现与参数计算闭环控制的核心就是数字补偿器。我的实现采用位置式PID控制周期等于开关频率500kHz也就是2us跑一次PID运算。PID输出限制在0到100%的占空比范围内并且有独立的输出限幅防止积分饱和。PID表达式u[k] Kp * e[k] Ki * sum(e[i]) Kd * (e[k] - e[k-1])这个式子本身不复杂难点在于系数怎么确定。我的方法是先用Mathcad或者在线工具算出初步值然后靠实测去校核。以3.3V输出、4.7μH电感、47μF输出电容为例电压环的穿越频率目标设为30kHz相位裕度目标45度以上。先计算控制对象的增益和时间常数。Buck电路从占空比到输出电压的小信号传递函数可以近似为Gvd(s) Vin / (1 s / Qω0 s²/ω0²)其中ω0 1/sqrt(LC)Q由负载电阻和阻尼决定。代入L4.7μH、C47μFω0约等于67.5kHz。也就是说在穿越频率30kHz处LC谐振峰还没有完全发挥作用控制对象近似为一个纯增益加一个积分器叠加。实际操作中我习惯先只加Kp从小往大调直到输出电压开始出现周期性振荡记录临界Kp值然后取它的0.5倍作为初始Kp。对于这个板子临界Kp值大约在480左右取240。接着加Ki用于消除稳态误差初始Ki设为Kp的1/50。最后加Kd改善瞬态响应Kd初始值为Kp/8。固件里我留了三个寄存器存储PID系数并且设置了参数校验下限。为什么要校验因为在调试过程中我甚至把Ki设成0导致闭环直接失稳输出电压反复拉锯。校验功能可以在系数明显离谱时拒绝写入避免烧管。3.3 上位机调参与瞬态测试固件写好后关键是上位机。我没有用现成的重型上位机而是写了一个简单的Python脚本配合串口通信。上位机功能有三块设置输出电压、实时显示电压电流曲线、调整PID参数并抓取阶跃响应。通信协议采用自定义帧格式帧头(0xAA 0x55) 数据长度(1字节) 命令字(1字节) 数据(最多16字节) CRC8校验CRC8校验是整个协议中不可省略的部分。串口在设备嘈杂的环境中很容易受到干扰没有校验的协议可能在一次错误的调参命令后直接让板子失控。我在调试中真遇到过某次换了一条劣质杜邦线上位机发过去的设置电压命令数据出现了随机翻转板子输出电压直接跳到5V要不是负载机电流限制得较快板子就出大问题了。PID参数在线调整后立即进行负载瞬态测试用一个MOSFET当作电子负载在1A和4A之间跳变。示波器接CH1抓输出电压CH2抓负载电流。记录到的波形显示在默认PID参数下电压跌落约120mV恢复时间约80us优化参数后跌落减少到85mV恢复时间缩短到40us。这里有一个容易误解的地方更小的Kp并不总是更好。Kp太小会让响应变慢太大则会引起振荡是一个典型的权衡问题。测试过程中我保存了三组不同参数下的瞬态波形后续就可以作为快速对比的参考数据。4. 实测数据效率、纹波与瞬态4.1 效率曲线与损耗分布在输入12V、输出3.3V条件下我用电子负载逐点记录了效率数据负载电流效率主要损耗位置1A86.5%开关损耗、电感铜损2A88.9%开关损耗、驱动损耗3A90.1%导通损耗、电感铜损4A89.4%导通损耗增速明显5A88.0%导通损耗、电容ESR损耗这些数据在中低负载时效率先升后降这是典型的Buck电源特性轻负载时开关损耗和驱动损耗占比高重负载时导通损耗占比逐渐上升交叉点大概在3A左右。如果你想提升重载效率优先考虑降低电感DCR和MOSFET的Rds(on)而不是盲目提高开关频率。4.2 纹波与噪声分析输出纹波是数字电源里最让人头大的指标之一。我用示波器在20MHz带宽限制下测试输出3.3V、负载1A时纹波大约18mV5A时到了38mV。这个结果不算优秀但考虑到陶瓷电容的直流偏压效应已经可以接受。如果纹波超标排查顺序很重要。第一步看探头接地方式必须使用弹簧接地不能用长地线夹否则测出来的全是探头地线环路感应噪声第二步看SW节点波形如果振铃严重需要检查死区时间和栅极电阻第三步才考虑增大输出电容或者增加LC后级滤波。4.3 负载瞬态响应实录负载瞬态是衡量环路带宽最直观的指标。测试条件输入12V输出3.3V负载从1A阶跃到4A再回到1A频率1kHz。优化参数时我同时观察电压过冲和下冲。只加大Kp时下冲从150mV降到100mV左右但继续加大后开始出现振铃加入合适的Kd后恢复时间明显缩短下冲又压到了80mV附近。最终参数组合是Kp260、Ki6、Kd30下冲85mV恢复时间43us。这个过程中我体会最深的是数字电源调参的最大优势不是“不用换电阻”而是可以记录每一次调参后的响应曲线在几十组数据里直观地看到参数变化对动态特性的影响。这是在模拟电源上很难做到的。5. 常见问题与排查技巧实录5.1 上电就烧MOS管的几个原因烧MOS管是最打击新手的故障没有之一。我在这块板子上烧过三块MOS管原因都查清楚了。第一个原因是死区时间设得太短。同步Buck上下管如果同时导通输入电压直接对地短路瞬间电流能大到几十安培。我最初死区设了50ns结果波形显示实际死区比设定值短因为HRTIM输出级本身有传播延迟。排查方法是用示波器同时抓上管和下管的栅极电压确认在所有占空比下都有一小段“双低”时间。第二个原因是自举电容失效。自举电容在上管开通时提供驱动电压如果容值太小或ESR过大上管驱动电压会掉到MOSFET的开启阈值以下导致上管在线性区工作导通损耗剧增最终热烧毁。解决方法是把自举电容加大到100nF以上并且在布局时紧贴驱动芯片。第三个原因是负载短路保护缺失。我在早期固件里没有加过流保护某次测试时负载接线松动短路MOS管直接击穿。后来我在硬件上增加了过流比较器一旦采样电压超过设定阈值HRTIM立即封锁PWM输出。这个保护路径必须走硬件不能依赖固件的PID代码去处理因为固件循环时间在微秒级别而MOS管能承受的短路时间远少于这个量级。5.2 输出电压振荡调试中最常见的现象是输出电压持续振荡频率通常远低于开关频率。我先说结论超过80%的振荡是PID参数不合适引起的。排查的第一步是用示波器观察振荡频率如果振荡频率接近LC谐振频率说明相位裕度不足典型原因是Kp过大如果振荡频率很低且幅度缓慢变大往往是Ki过大引发的积分饱和。第二步是断开闭环手动设一个固定占空比如果输出稳定那么问题确实在环路参数如果输出依然振荡问题可能在采样链路的滤波或者功率级的稳定性上。之前我遇到过一次比较隐蔽的振荡输出电压在短时间内非常稳定但每隔几十毫秒出现一次幅度跳变。后来发现是UART中断和PID计算中断发生了优先级竞争导致某个控制周期被拖延等效于环路延时突然增大环路必然失稳。解决办法是给PID计算分配最高中断优先级UART降级并把PID运算放到中断里而不是主循环。5.3 采样干扰和ADC时序ADC采样值跳动是数字电源调试中最耗时间的问题。我量化过一个数据在500kHz PWM开关频率下如果不做采样相位控制ADC电压采样值的标准差约20mV这个噪声水平会让PID输出抖动剧烈。解决办法有两个而且要同时使用。一是时序控制通过HRTIM的触发信号让ADC采样精准落在下管导通区间中段避开开关瞬态。二是模拟滤波在ADC输入引脚前加一个100Ω串联电阻和1nF并联电容组成的低通滤波器截止频率约1.6MHz。注意不能把滤波截止频率设太低过大的滤波电容会把电压环路的相位裕度吃掉造成环路不稳。5.4 常见问题速查表故障现象可能原因排查步骤解决方案上电无输出PWM未使能或输入电压超范围检查LED状态、VBUS ADC值确认输入电压在6-18V内使能PWM输出输出电压低于目标值采样分压电阻偏差、PID输出饱和断开环观看开环占空比输出校准分压系数减小Kp或Ki输出振荡PID参数不当、采样噪声过大观察振荡频率分析LC谐振点调整PID系数增加采样滤波上管MOS发热严重死区时间不足、自举电压低抓Vgs波形测量自举电容电压增大死区时间加大自举电容负载瞬态恢复慢环路带宽不足、Kd过小观察恢复时间和过冲幅度增大Kp和Kd重新整定串口调参无响应通信协议错误、CRC校验失败示波器抓UART波形确认波特率检查协议解析代码重新上电这套排查表并不是我的原始发明而是把之前调试过程中一页一页的笔记整理出来的。它覆盖了最常见的问题如果你遇到表里没有的场景建议先做一次“分离排查”把系统拆成功率级、采样级、控制级、通信级四段逐段验证不要试图直接找出整机故障点。6. 一点个人体会这块Digital Power Explorer Board我前前后后玩了将近三个月期间经历了从“跑通demo就满足”到“想彻底弄懂环路整定”的心态变化。我最大的体会是数字电源和模拟电源最大的不同不在于电路实现而在于思维方式模拟电源的补偿网络一旦焊好你只能靠经验去猜是什么环节出了问题数字电源则可以随时把内部中间变量暴露出来通过一帧一帧的数据找到问题根源。这种“可视化”能力让电源设计从一门玄学变成了一门可以被严密推理的工程学科。如果后续你还想继续玩下去可以尝试这样扩展把PMBus接口接到一块树莓派上写一个简单的系统监控脚本实时轮询电源状态并记录运行日志或者把单路输出扩展成双路输出在固件里做不同控制策略的切换有条件的话还能给板子加一个无线透传模块实现远程调参——但这个扩展要小心远程操作电源意味着一旦参数设置错误可能没有机会在烧板子之前拔掉电源线。总之数字电源是一个上手门槛不高、但深入之后非常有内容的方向。祝你们玩得开心也祝你们的MOS管都活得久一点。
返回列表