1. 项目概述
最近在做一个工业电源项目,需要将12-32V的输入电压降压到5-28V可调输出,最大电流要求达到5.5A。经过反复验证,最终选择了基于STM32F334的同步Buck方案。这个设计有几个亮点:采用200kHz开关频率、PID+两零点三极点补偿控制、输出纹波控制在200mV以内,还集成了完善的保护功能。下面我就把这个项目的完整设计过程分享给大家。
这个电源模块特别适合需要精确电压调节的场合,比如实验室电源、工业控制设备供电等。相比传统Buck电路,同步整流方案效率更高,特别是在大电流输出时优势明显。整个设计从硬件选型到控制算法都经过精心优化,实测效率最高能达到94%。
2. 硬件设计详解
2.1 主电路拓扑选择
同步Buck电路的核心在于用两个MOSFET替代了传统的二极管整流。上管(Q1)负责开关控制,下管(Q2)在Q1关断时导通,形成续流回路。这种设计有三大优势:
- 导通损耗低:MOSFET的Rds(on)远小于二极管正向压降
- 效率提升:特别是在低压大电流场合
- 热设计简单:减少了散热器体积
实际选型时,我用了IRLR8743作为开关管,其Rds(on)仅8.7mΩ,Vds耐压30V,完全满足设计要求。这里有个选型技巧:MOSFET的Vds额定值应该至少是输入电压的1.5倍,我们这个设计最大输入32V,所以选30V器件是合理的。
2.2 关键参数计算
电感选型计算
电感值直接影响纹波电流,计算公式为:
code复制L = (Vin - Vout) × D / (ΔI × fsw)
其中:
- Vin取最大值32V
- Vout取5V(最恶劣工况)
- 占空比D=5/32≈0.156
- 纹波电流ΔI取输出电流的30%(1.65A)
- fsw=200kHz
计算得L≈6.8μH,实际选用7μH一体成型电感,饱和电流10A。
注意:电感饱和电流必须大于最大输出电流+纹波电流峰值(5.5A+1.65A=7.15A),否则在大电流时电感值会骤降导致失控。
输出电容计算
输出电容主要影响纹波电压,计算公式:
code复制Cout ≥ ΔI / (8 × fsw × ΔV)
设纹波电压ΔV=200mV,得Cout≥5.16μF。实际选用两个47μF MLCC并联,利用MLCC低ESR特性进一步降低纹波。
2.3 保护电路设计
保护功能是工业电源的关键,我们实现了四级保护:
- 输入欠压保护(UVLO):通过电阻分压监测输入电压,当Vin<10V时关闭PWM
- 输出过压保护(OVP):ADC实时采样输出电压,超过设定值10%立即关断
- 过流保护(OCP):采用50mΩ采样电阻+差分放大电路,精度达±3%
- 短路保护(SCP):硬件比较器实现ns级快速响应,与软件保护形成双重保障
特别提醒:短路保护一定要用硬件电路实现!仅靠软件采样保护的话,从故障发生到MCU响应至少需要几十μs,这段时间足够烧毁MOSFET了。
3. 控制算法实现
3.1 PWM配置要点
STM32F334的HRTIM定时器非常适合电源应用,我们用它生成互补PWM信号:
c复制// PWM初始化代码片段
TIM_HandleTypeDef htim;
htim.Instance = HRTIM1;
htim.Init.Prescaler = 0;
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = 79; // 200kHz @ 16MHz
htim.Init.RepetitionCounter = 0;
HAL_TIM_PWM_Init(&htim);
// 死区时间配置
HAL_TIMEx_ConfigBreakDeadTime(&htim, 0x44);
这里有几个关键点:
- 死区时间设为100ns,防止上下管直通
- 采用中心对齐模式降低EMI
- 最小占空比限制在5%,确保控制稳定性
3.2 PID算法优化
数字PID实现有几个注意事项:
c复制float PID_Update(PID_Handle *hpid, float setpoint, float feedback)
{
float error = setpoint - feedback;
// 抗积分饱和处理
if(fabs(error) > hpid->anti_windup_thresh){
hpid->integral = 0;
} else {
hpid->integral += error * hpid->Ki;
}
// 微分项采用反馈微分而非误差微分
float derivative = (feedback - hpid->last_feedback) * hpid->Kd;
hpid->last_error = error;
hpid->last_feedback = feedback;
return error * hpid->Kp + hpid->integral + derivative;
}
实测发现,对Buck电路来说:
- Kp值过大会导致振荡
- Ki值影响稳态精度
- Kd采用反馈微分比误差微分更稳定
3.3 补偿网络设计
两零点三极点补偿的传递函数为:
code复制Gc(s) = (1 + s/ωz1)(1 + s/ωz2) / [s(1 + s/ωp1)(1 + s/ωp2)(1 + s/ωp3)]
通过PSIM仿真确定:
- 零点ωz1=2π×1kHz,ωz2=2π×5kHz
- 极点ωp1=2π×10kHz,ωp2=2π×50kHz,ωp3=2π×200kHz
数字实现时用双线性变换转换为离散形式:
c复制// 补偿滤波器实现
float Compensator_Update(Comp_Handle *h, float error)
{
float output = h->b0 * error
+ h->b1 * h->x1
+ h->b2 * h->x2
- h->a1 * h->y1
- h->a2 * h->y2;
h->x2 = h->x1;
h->x1 = error;
h->y2 = h->y1;
h->y1 = output;
return output;
}
4. 实测问题与解决方案
4.1 启动冲击电流问题
现象:上电瞬间输出出现电压过冲,最大达到设定值的130%
解决方法:
- 增加软启动电路 - 通过DAC缓慢提升参考电压
- 修改控制算法 - 启动阶段降低PID参数
- 硬件上加缓启动电容 - 延长PWM占空比爬升时间
最终采用三管齐下的方案,过冲控制在5%以内。
4.2 轻载振荡问题
现象:负载电流<0.5A时输出电压出现周期性波动
根本原因:电感电流进入断续模式(DCM),系统动态特性突变
解决方案:
- 增加最小负载电阻
- 动态调整PID参数
- 采用脉冲跳跃模式(PFM)
我们选择了方案2,通过负载电流检测自动切换PID参数组。
4.3 温度漂移问题
现象:长时间工作后输出电压会漂移±2%
排查过程:
- 采样电阻温漂 - 改用±1%精度金属膜电阻
- 基准电压漂移 - 使用REF5025基准源
- PCB热设计 - 优化布局降低热耦合
最终将温漂控制在±0.5%以内。
5. 性能测试数据
5.1 效率测试
| 输入电压(V) | 输出电压(V) | 负载电流(A) | 效率(%) |
|---|---|---|---|
| 12 | 5 | 1 | 92.3 |
| 24 | 12 | 3 | 93.8 |
| 32 | 28 | 0.5 | 89.7 |
5.2 纹波测试
测试条件:Vin=24V, Vout=12V, Iout=5A
- 低频纹波:<50mV
- 高频开关纹波:<150mV
- 总纹波:<180mV
5.3 动态响应
负载阶跃变化1A→5A:
- 恢复时间:<200μs
- 过冲电压:<300mV
- 跌落电压:<400mV
6. 设计经验总结
-
布局布线要点:
- 功率回路面积最小化
- 采样走线远离开关节点
- 地平面分割要合理
-
调试技巧:
- 先用电子负载测试再接真实负载
- 示波器探头要用接地弹簧
- 调PID时先设Ki=Kd=0,从纯P开始
-
元件选型教训:
- 输出电容要留足余量
- MOSFET驱动电阻要优化
- 采样电路要加滤波
这个项目从设计到调试花了近两个月时间,最大的体会是:电源设计是理论计算与实验调试的结合,仿真可以解决70%的问题,剩下的30%必须通过实际测试来验证。特别是在补偿网络设计和PCB布局方面,很多问题只有在实际工作中才会暴露出来。
