1. 项目概述与核心设计思路
最近用STM32F103搞的这个数控Buck电源,算是把同步整流的优势发挥到了极致。作为一个经常折腾电源的老鸟,这次的设计目标很明确:要做一个能通过程序直接调压、效率高、响应快的直流降压电源。实测效率干到96%,这个成绩在DIY圈里绝对拿得出手。
整个系统的核心架构可以分为三大部分:
- 功率级:采用NRF540N MOS管搭建的同步整流Buck电路
- 控制级:STM32F103实现的数字PWM和增量式PI算法
- 采样与驱动:LM385运放构成的电流采样和IR2104半桥驱动
为什么选择同步整流方案?传统Buck电路在续流阶段使用肖特基二极管,导通压降通常在0.3V以上。而同步整流用MOS管替代二极管,NRF540N的Rds(on)只有44mΩ,在5A电流下导通损耗仅为1.1W,比二极管方案降低30%以上。这就是效率能突破95%的关键。
2. 硬件设计详解
2.1 功率电路设计
主功率电路采用标准Buck拓扑,但有两个关键改进:
- 同步整流设计:使用NRF540N MOS管作为下管替代传统二极管
- 优化布局:将输入电容、MOS管和电感形成最小回路,降低寄生电感
MOS管选型时特别注意了以下几个参数:
- Vds=40V(留够余量应对输入电压波动)
- Rds(on)=44mΩ(导通电阻直接影响效率)
- Qg=18nC(影响驱动电路设计)
输入电容采用4个10μF陶瓷电容并联,有效降低高频阻抗。输出电容选择低ESR的固态电容,配合22μH电感实现30mVpp以下的纹波。
2.2 驱动电路设计
驱动芯片选用IR2104,这个经典半桥驱动器有几个设计要点:
- 自举电路:采用0.1μF陶瓷电容并联10Ω电阻
- 电容值太小会导致自举电压不足
- 并联电阻可以抑制高频振荡
- 死区时间:设置为0.875μs(63个时钟周期)
- 必须大于IR2104的传播延迟(典型值520ns)
- 防止上下管直通
实测驱动波形上升沿仅20ns,这个速度对降低开关损耗至关重要。驱动电阻选用4.7Ω,在开关速度和EMI之间取得平衡。
2.3 采样电路设计
电流采样采用0.01Ω锰铜电阻,配合LM385运放构成差分放大电路。设计时特别注意:
- 放大倍数:100倍(3.3V ADC量程对应3.3A电流)
- 带宽限制:在反馈端并联100pF电容,抑制高频噪声
- 布局:锰铜电阻尽量靠近MOS管,缩短大电流路径
电压采样使用电阻分压,分压比1/11(最大输出电压24V对应ADC值2.18V)。分压电阻选用0.1%精度的金属膜电阻,确保采样精度。
3. 软件实现关键点
3.1 PWM生成配置
TIM1配置为中央对齐PWM模式,关键参数:
c复制void PWM_Init(uint16_t arr, uint16_t psc) {
// 72MHz/(50kHz*2) = 720
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);
TIM_OCInitTypeDef oc;
oc.TIM_OCMode = TIM_OCMode_PWM1;
oc.TIM_OutputState = ENABLE;
oc.TIM_Pulse = arr/2; // 初始50%占空比
TIM_OC1Init(TIM1, &oc); // CH1
TIM_OC2Init(TIM1, &oc); // CH2互补输出
TIM_BDTRInitTypeDef bdtr;
bdtr.TIM_DeadTime = 0x3F; // 1us死区
TIM_BDTRConfig(TIM1, &bdtr);
}
这里有几个关键点:
- 开关频率设为50kHz,在效率和纹波间取得平衡
- 死区时间必须大于MOS管开关延迟
- 采用中央对齐模式降低EMI
3.2 增量式PI算法实现
增量式PI相比位置式的优势:
- 不会产生积分饱和
- 更易实现无扰动切换
- 代码实现更简单
核心算法:
c复制typedef struct {
float Kp;
float Ki;
float Err[2]; // 记录前两次误差
} PI_Controller;
float PI_Calculate(PI_Controller *pi, float target, float actual) {
float err = target - actual;
float delta = pi->Kp*(err - pi->Err[0]) + pi->Ki*err;
pi->Err[0] = pi->Err[1];
pi->Err[1] = err;
return delta;
}
调参经验:
- 先设Ki=0,增大Kp直到系统出现临界震荡
- 取临界Kp值的1/2作为最终Kp
- Ki取Kp的1/10
- 实际测试中,Kp=0.05,Ki=0.005效果最佳
3.3 ADC采样同步
ADC配置要点:
c复制void ADC1_Init(void) {
ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_239Cycles5);
ADC_ExternalTrigConvCmd(ADC1, ENABLE);
ADC_ExternalTrigConvConfig(ADC1, ADC_ExternalTrigConv_None);
}
关键设计:
- 采样时刻避开PWM开关瞬间(239.5周期≈3.3μs)
- 使用DMA传输采样结果,降低CPU开销
- 软件滤波采用移动平均,窗口大小=8
4. 实测性能与优化技巧
4.1 效率测试数据
| 负载电流 | 输入功率(W) | 输出功率(W) | 效率 |
|---|---|---|---|
| 1A | 12.1 | 11.8 | 97.5% |
| 3A | 36.5 | 35.1 | 96.2% |
| 5A | 61.8 | 59.0 | 95.5% |
效率优化的几个关键点:
- 同步整流MOS管选低Rds(on)型号
- 优化PCB布局减小寄生参数
- 合理设置死区时间
- 选择合适开关频率(50kHz最佳)
4.2 动态响应测试
测试条件:负载从1A阶跃到5A
- 电压跌落:<0.05V
- 恢复时间:<50ms
- 超调量:<1%
提升动态响应的技巧:
- PI控制周期设为1ms
- 电流采样添加前馈补偿
- 输出电容ESR要小
4.3 常见问题排查
问题1:MOS管发热严重
- 检查死区时间是否足够
- 测量驱动波形是否正常
- 确认MOS管选型合适
问题2:输出电压振荡
- 降低PI参数Ki
- 检查采样电路是否引入噪声
- 确认PWM频率稳定
问题3:轻载效率低
- 考虑加入脉冲跳跃模式
- 优化同步整流关断时机
- 降低开关频率
5. 进阶改进方向
这个基础框架还可以进一步扩展:
- 增加恒流模式:修改PI控制器目标为电流值
- 实现USB通信:添加CH340芯片,支持上位机控制
- 加入LCD显示:用12864屏幕显示实时参数
- 多级Buck设计:提升输入电压范围
电源设计最迷人的地方在于,每一个细节的优化都能直接反映在性能指标上。这次用STM32实现的数控Buck,从最初的85%效率一步步优化到96%,每一个百分点的提升都凝结着对电路理解的深化。