共计 1444 个字符,预计需要花费 4 分钟才能阅读完成。
背景与痛点
Buck 变换器作为最常见的 DC-DC 降压拓扑,广泛应用于电源管理领域。其开环控制虽简单,但存在明显的局限性:

- 无法应对输入电压波动
- 负载突变时输出电压跌落严重
- 输出阻抗较大导致调整率差
而双闭环控制(电流内环 + 电压外环)通过 PI 调节器能有效解决这些问题。但 PI 参数设计不当会导致:
- 系统振荡(相位裕度不足)
- 响应迟缓(带宽过低)
- 稳态误差(积分增益不合适)
技术方案
1. 小信号建模
首先建立 Buck 变换器的状态空间平均模型:
\begin{cases}
L\frac{di_L}{dt} = Dv_{in} - v_{out} \\
C\frac{dv_{out}}{dt} = i_L - \frac{v_{out}}{R}
\end{cases}
线性化后得到传递函数:
G_{vd}(s) = \frac{v_{out}(s)}{d(s)} = \frac{V_{in}}{LCs^2 + \frac{L}{R}s + 1}
2. 电流内环设计
电流环作为内环需快速响应:
- 采样电感电流信号
- 设计 PI 控制器(转折频率设为开关频率的 1 /5~1/10):
G_{i}(s) = K_{p}\left(1 + \frac{1}{T_i s}\right)
3. 电压外环设计
电压环作为外环关注稳态精度:
- 带宽设为电流环的 1 /5~1/10
- 采用 PI 控制器:
G_{v}(s) = K_{p}\left(1 + \frac{1}{T_i s}\right)
实现细节
MATLAB 仿真配置
% Buck 电路参数
L = 100e-6; % 电感
C = 470e-6; % 输出电容
R = 5; % 负载电阻
Vin = 24; % 输入电压
Vref = 12; % 参考电压
% 电流环 PI 参数
Kp_i = 0.05;
Ki_i = 500;
% 电压环 PI 参数
Kp_v = 0.8;
Ki_v = 200;
C 语言伪代码
// 离散化 PI 控制器实现
typedef struct {
float Kp;
float Ki;
float integral;
float out_max;
float out_min;
} PIController;
float PI_Update(PIController *pi, float error) {
// 积分项更新
pi->integral += pi->Ki * error * Ts;
// 抗饱和处理
if(pi->integral > pi->out_max) pi->integral = pi->out_max;
else if(pi->integral < pi->out_min) pi->integral = pi->out_min;
return pi->Kp * error + pi->integral;
}
性能考量
稳定性分析
- 轻载时相位裕度会降低
- 建议保持相位裕度 >45°
- 开关频率越高,控制带宽可设置越高
数字实现要点
- ADC 采样时序要严格同步
- 计算延迟需控制在 1 个开关周期内
- 建议采用定点数运算优化速度
避坑指南
常见错误
- 电流环带宽过高导致开关噪声放大
- 电压环响应过快引发系统振荡
- 忽略采样延迟影响
抗饱和处理
// 在积分项更新前增加边界检查
if((output > max_limit && error > 0) ||
(output < min_limit && error < 0)) {// 停止积分} else {integral += Ki * error * Ts;}
总结与延伸
通过本文介绍的方法,可以系统化地完成 Buck 变换器的双闭环 PI 参数设计。实际应用中还可以考虑:
- 自适应 PID(根据负载变化自动调整参数)
- 增加前馈补偿提高动态响应
- 尝试模糊控制等非线性策略
建议读者在开发板上实践时,先用仿真验证参数,再逐步移植到硬件平台。遇到问题欢迎在技术社区交流讨论。
正文完
