共计 1611 个字符,预计需要花费 5 分钟才能阅读完成。
为什么需要双闭环控制?
刚开始接触 Buck 变换器时,很多人会先尝试单电压环控制——毕竟结构简单,调一个 PI 参数就够了。但实际测试时会发现:当负载突变时,输出电压振荡严重,恢复时间长达几个毫秒。通过 Bode 图对比能清晰看到问题根源:
- 单闭环系统的相位裕度通常不足 45°,在 1 / 3 开关频率处会出现明显谐振峰
- 电流内环的引入相当于增加了一个 ” 快速保镖 ”,把相位滞后区域向高频推移(典型值从 10kHz 提升到 50kHz)
- 双闭环的带宽可提升 3 - 5 倍,动态响应速度明显改善

蓝色为单闭环,红色为双闭环,注意相位裕度的改善
电流内环设计:打好控制基础
建立数学模型
首先需要推导占空比 - 电流传递函数,对于连续导通模式 (CCM) 的 Buck 电路:
Gid = tf([Vin/L], [1 (rL+Ron)/L 1/(L*C)]); % rL 为电感寄生电阻,Ron 为 MOS 导通电阻
关键参数计算
按照电力电子行业经验值:
- 穿越频率选开关频率的 1 /5~1/10(例如 100kHz 开关频率取 15kHz)
- 相位裕度至少 60°,避免参数漂移导致振荡
- 积分时间常数 τ_i = tan(PM_target)/(2πf_cross),PM_target 为目标相位裕度
实际设计时建议用 MATLAB 的 sisotool 可视化调整:
% 电流环 PI 设计示例
Gpi_current = pidtune(Gid, 'pi', 15e3, 'PhaseMargin', 60);
电压外环设计:慢工出细活
电压环的带宽必须低于电流环(通常取 1 /3~1/5),否则会破坏系统稳定性。传递函数推导需考虑电流环的闭环效应:
Gcl_current = feedback(Gid*Gpi_current, 1); % 电流闭环传递函数
Gv_plant = Gcl_current * tf(1, [C 0]); % 加入输出电容特性
设计要点:
- 电压环带宽通常取 1 -3kHz
- 可适当降低相位裕度要求(50°左右)
- 比例系数 Kp_v ≈ 2πf_bandwidth*C
代码实现与验证
完整 Simulink 模型应包含:
% 参数初始化
Vin = 24; % 输入电压
Vref = 12; % 参考电压
L = 10e-6; % 滤波电感
C = 100e-6; % 输出电容
fsw = 100e3; % 开关频率
% 电流环 PI(自动整定结果)Kp_i = 0.35;
Ki_i = 2.8e4; % 根据 τ_i=1/(2*pi*15kHz*tan(60°))计算
% 电压环 PI
Kp_v = 0.6; % ≈2*π*2000*100e-6
Ki_v = 1.2e3;
实际工程中的避坑指南
数字实现注意事项
- 离散化方法:
- Tustin 变换保持稳定性但计算量大
- 前向欧拉简单但需要更高采样频率
-
推荐代码:
// Tustin 变换实现(STM32 示例)I_error = I_ref - I_actual; P_term = Kp * I_error; I_term += Ki * T_sample * (I_error + last_I_error)/2; last_I_error = I_error; -
参数漂移应对:
- 在线辨识电感值:施加小信号扰动,测量相位延迟
-
双 PI 参数表:根据工作点切换不同参数组
-
仿真与实测差异排查:
- 检查 MOS 管死区时间是否建模
- 比较 ADC 采样延迟与仿真步长
- 用电流探头验证电感电流波形
思考与拓展
当输入电压范围变化较大时(如电动车电池的 30-60V 输入),固定 PI 参数会导致:
- 低压输入时响应迟缓
- 高压输入可能振荡
可能的解决方案:
- 根据 Vin 实时调整电流环 Kp(与 Vin 成反比)
- 增益调度 (Gain Scheduling) 技术
- 基于模型预测控制 (MPC) 的自适应策略
写在最后
双闭环设计就像盖房子——电流环是地基,电压环是上层建筑。建议先用仿真验证各环节特性,再用开发板逐步测试。遇到波形抖动时,别急着调参数,先检查:
1. 采样电路是否有噪声
2. PWM 分辨率是否足够
3. 补偿网络是否被饱和
电源控制是个精细活,有时候示波器上 1% 的纹波改善,背后是三天三夜的参数微调。但当你看到负载瞬变时那条干净利落的电压曲线时,一切努力都值得了。
正文完
