从BUCK电路到双闭环PID:手把手打造一个高精度数控电源

张开发
2026/4/17 11:12:47 15 分钟阅读

分享文章

从BUCK电路到双闭环PID:手把手打造一个高精度数控电源
1. 从零认识BUCK电路数控电源的心脏第一次接触BUCK电路时我盯着示波器上那些跳动的波形看了整整三天。这种看似简单的降压电路实际上藏着不少门道。简单来说BUCK电路就像个智能水龙头——它能把高压直流电拧成我们需要的低压直流电而且效率能轻松做到90%以上。我见过不少初学者直接用线性稳压器做电源结果散热片烫得能煎鸡蛋这就是没搞懂开关电源优势的典型例子。BUCK电路最核心的部件就四个开关管通常是MOSFET、续流二极管、电感和滤波电容。我习惯把它们的配合比作老式压水井——MOSFET压下活塞导通时电能储存在电感里MOSFET抬起活塞关断时电感通过二极管继续给负载供电。这个过程中输出电压的高低取决于MOSFET导通和关断的时间比例专业术语叫占空比。实际搭建时有个坑我踩过好几次电感选型。去年用了个标称10A的电感结果在5A时就饱和了导致输出电压剧烈波动。后来才明白要看两个关键参数——饱和电流和温升电流。现在我的经验公式是电感值(Vin-Vout)×D/(ΔI×fsw)其中ΔI一般取输出电流的20%-40%开关频率fsw建议在100kHz-500kHz之间选择。2. 硬件设计实战关键元件选型指南打开我的元件盒你会发现光是MOSFET就分了七八种。做数控电源最常用的是N沟道MOS选型时要盯着三个参数VDS耐压、RDS(on)导通电阻和Qg栅极电荷。我常用的IRF540N在24V输入时表现不错但换成48V系统就得换IRF3205了。有个省钱的技巧旧电脑电源拆机的MOSFET往往质量很好我收集的STP80NF70就来自报废的服务器电源。电流采样是另一个容易翻车的地方。最初我用普通0.1Ω电阻采样结果5A电流时功耗就有2.5W。后来改用四线制锰铜分流器配合INA219芯片精度直接提到0.5%。电压采样则要注意分压电阻的精度我习惯用0.1%精度的金属膜电阻分压比控制在1:10以内这样对ADC的参考电压要求不会太高。过流保护电路我迭代了三个版本第一版用比较器第二版加上了锁存功能现在这版最可靠——STM32的ADC实时监控硬件PWM刹车功能。当检测到过流时能在2μs内关闭PWM输出比纯软件方案快20倍。PCB布局也有讲究我的血泪教训是开关回路面积一定要小曾经因为布局不当导致EMI超标把实验室的无线设备全干扰了。3. 双闭环PID控制让电源稳如磐石第一次听说双闭环PID时我以为是两个PID简单叠加。真正调试时才明白电压环和电流环就像汽车的方向盘和油门——电压环决定去哪电流环控制怎么去。我的工程笔记里记录着最经典的调试过程先单独调电压环把KP从0.1逐步加大直到出现轻微振荡然后取这个值的60%作为最终参数。电流环的调试更有意思。我用电子负载突然拉大电流时普通单环控制会出现电压跌落而双环系统就像有个隐形的弹簧能把电压快速拉回设定值。核心代码其实很简洁void ControlLoop() { float current GetActualCurrent(); float voltage GetActualVoltage(); if(mode CV_MODE) { pwm PID_Update(voltagePID, targetVoltage, voltage); currentPID.lastOutput pwm; if(current targetCurrent) mode CC_MODE; } else { pwm PID_Update(¤tPID, targetCurrent, current); voltagePID.lastOutput pwm; if(voltage targetVoltage) mode CV_MODE; } SetPWM(pwm); }抗饱和处理是PID实现的关键细节。我的方案是当输出达到限幅值时停止积分项累积。这就像给水桶加了溢流管避免水位过高。还有个实用技巧在切换CV/CC模式时要把另一个PID的lastOutput设为当前PWM值这样切换瞬间就不会产生输出跳变。4. 软件架构设计从裸机到RTOS的进化最早期的版本我用的是超级循环后来发现ADC采样、PID计算、保护检测这些任务互相打架。改用FreeRTOS后系统稳定性提升明显。现在我的任务划分是这样的高优先级任务处理紧急保护1kHz中等优先级运行控制算法500Hz低优先级处理用户界面和通讯。ADC采样我试过三种方案DMA定时器触发最靠谱。配置STM32的定时器触发ADC配合DMA循环存储连采样间隔抖动都能控制在10ns以内。对于12位ADC我还会做64次硬件平均这样有效位数能提到14位。采样时刻也要讲究一定要在PWM周期中间点采样避开开关噪声最大的时段。用户交互部分我走了不少弯路。最早用旋转编码器发现抖动严重换成触摸按键又容易误触。现在的方案是EC11编码器消抖算法配合OLED菜单系统。UI设计有个小心得重要参数如输出电压用大字号单位要明确显示。我还加了快捷保存功能长按编码器就能存储当前预设值。5. 进阶优化从能用变好用温飘问题困扰了我两个月。最初电源冷机时输出12.000V工作一小时后变成11.923V。后来发现是分压电阻的温漂系数不匹配换成同批次同型号的0.1%精度电阻后温飘降到0.02%。运放也要选低温漂的我对比测试后发现OPA2188比常规的LM358性能好十倍。动态响应测试最能体现电源品质。我的测试方法是用电子负载在0.5A和5A之间跳变用示波器捕捉电压跌落情况。通过优化PID参数和增加前馈补偿现在我的电源在5A阶跃变化时电压跌落不超过50mV恢复时间200μs。这个指标已经媲美某些商业电源了。有个容易被忽视的细节开机缓启动。直接给大容量电容充电会导致巨大的浪涌电流。我的解决方案是PWM占空比从0开始线性增加同时监测输入电流。这个功能曾经救了我的电源——有次输出短路缓启动电路反复尝试三次失败后自动锁定避免了MOSFET炸管。

更多文章