1. 项目背景与核心价值
去年在调试一个嵌入式设备时,我遇到了一个头疼的问题:需要给不同模块提供多种电压,但市面上现成的DC-DC模块要么固定输出,要么调节方式极其原始(电位器旋钮)。更糟的是,当负载突变时,那些廉价模块的输出电压能飘出±10%。这促使我萌生了自己开发数控Buck电源的想法。
STM32F103这颗芯片虽然已经面世十多年,但72MHz主频加上丰富的外设(12位ADC、定时器PWM等),对于中等精度电源控制完全够用。最关键的是它的成本优势——核心板不到20元就能拿下。经过两个月的方案迭代,最终实现的数控Buck电源具备以下硬核特性:
- 0.5V-24V宽范围输出:覆盖绝大多数嵌入式设备供电需求
- 1mV分辨率:通过12位DAC实现的精细调节
- 96%峰值效率:同步整流+自适应死区控制的功劳
- 过流保护响应时间<10μs:硬件比较器+软件双重保护机制
- 支持USB/串口指令控制:可集成到自动化测试系统中
实测对比:某品牌可调电源模块在5V/2A输出时效率仅89%,而本方案在同等条件下达到93%。当输出12V/1A时,效率差值更扩大到7个百分点。
2. 硬件设计关键点解析
2.1 功率拓扑选型
传统异步Buck电路(二极管续流)在中等负载时效率会急剧下降,这是因为肖特基二极管的正向压降(通常0.3-0.5V)在低压输出时造成显著损耗。本方案采用同步整流架构,用MOSFET(SI2302)替代续流二极管,其导通电阻仅85mΩ,大幅降低导通损耗。
MOSFET驱动设计要点:
- 高边驱动选用FDN336P,其自举电路充电时间需满足最小占空比要求
- 死区时间设置为120ns(通过TIM1的刹车功能实现),避免上下管直通
- 栅极串联电阻选用10Ω,抑制振铃的同时保证开关速度
2.2 控制回路实现
电压模式控制虽然简单,但动态响应较差。本设计采用电流模式控制,通过0.05Ω采样电阻检测电感电流,配合STM32的ADC1实现逐周期限流。关键参数计算:
code复制开关频率 = 200kHz (TIM1 ARR=72MHz/200kHz-1=359)
电流环带宽 = 开关频率/10 = 20kHz
电压环带宽 = 电流环带宽/5 = 4kHz
PID参数:
Kp = 2π×L×fBW/Vin = 2×3.14×22μH×4kHz/24V ≈ 0.023
Ki = Kp×fBW/2 ≈ 46
实际调试中发现,当负载电流突变超过1A/μs时,纯软件PID会出现调节滞后。解决方法是在硬件上增加一级误差放大器(LMV358),形成混合控制架构。
3. 软件实现与优化技巧
3.1 PWM生成配置
STM32的定时器1被配置为中心对齐模式,这样功率管的开关损耗比边沿对齐模式降低约15%。关键寄存器设置:
c复制TIM1->ARR = 359; // 200kHz开关频率
TIM1->CCR1 = 180; // 初始50%占空比
TIM1->BDTR |= TIM_BDTR_MOE | TIM_BDTR_AOE; // 使能主输出和自动输出使能
TIM1->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // PWM模式1
3.2 自适应死区控制
通过监测MOSFET栅极波形,发现固定死区时间在轻载时会造成不必要的体二极管导通损耗。开发了基于负载电流的自适应算法:
c复制void update_deadtime(uint16_t current) {
// 死区时间=基本值+电流相关补偿
uint16_t dt_ns = 80 + current/100;
TIM1->BDTR = (TIM1->BDTR & ~0xFF) | ((dt_ns * 72 / 1000) & 0xFF);
}
实测显示,该算法在0.5A负载时能减少约1.2%的损耗。
3.3 电压调节指令处理
为支持快速调压,设计了分段斜坡函数,避免突变导致电感饱和:
c复制void set_voltage(float target) {
float step = (target > current_voltage) ? 0.05 : -0.05;
while(fabs(current_voltage - target) > 0.01) {
current_voltage += step;
DAC->DHR12R1 = (uint16_t)(current_voltage * 4095 / 3.3);
delay_ms(5); // 可调参数,控制斜坡速率
}
}
4. 实测性能与问题排查
4.1 效率测试数据
| 输出电压 | 负载电流 | 效率 | 备注 |
|---|---|---|---|
| 5.0V | 1.0A | 93.2% | 同步整流优势明显 |
| 12.0V | 0.5A | 95.8% | 最佳工作点 |
| 3.3V | 2.0A | 88.7% | 低压大电流挑战性场景 |
4.2 典型故障处理记录
问题现象:输出12V时,负载超过1A会触发过流保护
- 排查步骤:
- 用电流探头观察电感电流波形,发现开关节点有振铃
- 测量高边MOSFET栅极驱动,发现上升沿有台阶
- 检查自举电容(原值100nF)充电是否充分
- 解决方案:
- 将自举电容增大到220nF
- 在高边MOSFET栅极增加2.2Ω电阻
- 修改死区时间从150ns调整为180ns
问题现象:轻载时输出电压纹波增大
- 根本原因:PWM模式在轻载时进入不连续导通模式(DCM)
- 优化方案:
- 软件增加PFM模式自动切换
- 当负载<10%时,切换为脉冲跳跃模式
- 修改电压环PID参数,降低积分分量
5. 进阶改进方向
当前设计仍有三个可优化点:
- 温度补偿:功率MOSFET的Rds(on)会随温度升高而增大,可增加NTC采样散热片温度,动态调整死区时间
- 并联均流:通过CAN总线同步多模块工作状态,实现大电流并联输出
- 数字预失真:针对已知的ADC采样延迟,在前馈路径中加入补偿滤波器
这个项目最让我惊喜的是,用成本不到百元的元件就实现了商用级性能。特别是在解决同步整流振铃问题时,通过调整PCB布局(将功率地与控制地单点连接),EMI性能甚至优于某些品牌电源。后续准备加入Wi-Fi控制功能,到时候再和大家分享实战经验。