1. 降压BUCK变换器双闭环控制系统解析
在电力电子领域,BUCK变换器作为最基础的DC-DC降压拓扑,其控制策略的优化一直是工程师关注的重点。传统单电压环控制虽然结构简单,但在应对负载突变和输入电压波动时表现欠佳。我最近完成的一个工业电源项目中,采用电压外环LADRC(线性自抗扰控制)+电流内环PID的双闭环架构,实测效果比传统方案提升显著——负载阶跃响应时间缩短40%,输出电压纹波降低35%。
这种控制结构的精妙之处在于:电流内环负责快速抑制功率级扰动,电压外环则确保稳态精度。LADRC的加入更是让系统具备了"未病先治"的能力——通过扩张状态观测器(ESO)实时估计并补偿总扰动,包括模型不确定性、外部干扰等。下面我就结合具体实现过程,拆解这套控制系统的设计要点。
2. 硬件平台设计与参数计算
2.1 主功率电路设计
项目选用同步BUCK拓扑,关键参数如下:
- 输入电压:24V(范围18-36V)
- 输出电压:12V±1%
- 最大输出电流:10A
- 开关频率:200kHz(采用SiC MOSFET降低开关损耗)
电感计算采用伏秒平衡法:
code复制L = (Vin_max - Vout) * D_min / (ΔI * fsw)
= (36-12)*0.33/(2*200e3)
≈ 20μH (最终选用22μH合金电感)
其中ΔI取额定电流的20%(2A),D_min为最小占空比。电容选择需同时考虑纹波和负载瞬态:
code复制Cout ≥ ΔI / (8 * fsw * ΔVout)
≥ 2/(8*200e3*0.12)
≈ 10μF (实际选用100μF低ESR聚合物电容)
2.2 采样电路设计
电流采样采用50mΩ分流电阻+INA240高边电流检测芯片,电压采样用0.1%精度的电阻分压网络。特别注意:
- 电流采样需在MOSFET导通期间进行(避免体二极管导通干扰)
- 电压采样点应远离功率地,采用星型接地
- ADC采样速率至少为开关频率的10倍(本项目采用2MHz)
3. 控制算法实现细节
3.1 电流内环PID设计
电流环作为内环,带宽通常设为开关频率的1/5~1/10:
code复制带宽fc_current = 200kHz/8 = 25kHz
采用位置式PID,参数整定步骤:
- 先设Ki=Kd=0,增大Kp至出现等幅振荡(临界比例法)
- 记录临界增益Kc和振荡周期Tc
- 按Ziegler-Nichols公式:
code复制Kp = 0.6*Kc = 0.6*12 = 7.2 Ti = 0.5*Tc = 0.5*40μs = 20μs → Ki=Kp/Ti=360000 Td = 0.125*Tc = 5μs → Kd=Kp*Td=0.036
实际调试中发现微分项引入高频噪声,最终采用不完全微分形式:
c复制// 伪代码实现
float pid_current(float error) {
static float integral = 0, last_error = 0;
float p = kp * error;
integral += ki * error * dt;
float d = kd * (error - last_error) / (dt + tau); // tau为滤波系数
last_error = error;
return p + integral + d;
}
3.2 电压外环LADRC实现
LADRC核心在于扩张状态观测器(ESO)的设计。二阶系统对应的三阶ESO离散化方程为:
code复制// 状态空间方程
z1 += (z2 - β1*e) * dt;
z2 += (z3 - β2*e + b0*u) * dt;
z3 += -β3*e * dt;
其中:
- z1,z2为系统状态估计
- z3为总扰动估计
- β1,β2,β3为观测器增益,按带宽法确定:
code复制取观测器带宽ωo=2π*5000rad/sβ1 = 3*ωo, β2 = 3*ωo², β3 = ωo³
控制律实现:
c复制float ladrc_control(float ref, float feedback) {
// 更新ESO
float e = z1 - feedback;
z1 += (z2 - beta1*e) * dt;
z2 += (z3 - beta2*e + b0*last_u) * dt;
z3 += -beta3*e * dt;
// 扰动补偿
float u0 = kp*(ref - z1) - kd*z2;
float u = (u0 - z3) / b0;
last_u = saturate(u); // 限幅保护
return last_u;
}
4. 数字控制实现要点
4.1 定点数优化技巧
在STM32G474(170MHz Cortex-M4)上实现时,采用Q15格式定点数提升运算效率:
c复制// Q15格式PID实现
int16_t pid_current(int16_t error) {
static int32_t integral = 0;
static int16_t last_err = 0;
int32_t p = ((int32_t)kp * error) >> 15;
integral += ((int32_t)ki * error) >> 7; // 保留更多低位精度
int16_t d = ((int32_t)kd * (error - last_err)) / dt;
int32_t out = p + (integral >> 8) + d; // 最终输出调整
last_err = error;
return (int16_t)__SSAT(out, 16); // 饱和处理
}
4.2 抗饱和处理
积分抗饱和采用conditional integration方法:
c复制if(!( (output>=max && error>0) || (output<=min && error<0) )) {
integral += ki * error * dt;
}
5. 实测问题与解决方案
5.1 负载阶跃响应过冲
现象:5A→10A负载阶跃时出现8%电压跌落,恢复过程有2%过冲。
排查过程:
- 检查电流环响应波形正常(调节时间<20μs)
- 发现ESO带宽不足,导致扰动估计滞后
- 将ωo从5000提高到8000rad/s后改善
最终参数:
code复制电压环:kp=0.5, kd=0.01
ESO:β1=24000, β2=1.92e8, β3=5.12e11
5.2 轻载振荡问题
现象:负载<1A时出现200Hz低频振荡。
解决方案:
- 识别为电流断续模式(DCM)导致
- 增加最小占空比限制(Dmin=5%)
- 在LADRC中加入负载电流前馈:
code复制u0 = kp*(ref-z1) - kd*z2 + kff*iload
6. 仿真验证方法
在PLECS中搭建的测试场景:
- 输入电压阶跃测试:24V→30V→18V
- 负载阶跃测试:2A↔10A@1kHz方波
- 参数鲁棒性测试:电感值±30%变化
关键指标验证结果:
| 测试项目 | 传统PID | LADRC+PID | 改善幅度 |
|---|---|---|---|
| 负载调整率 | ±1.5% | ±0.8% | 47% |
| 恢复时间(10A→2A) | 400μs | 250μs | 37.5% |
| 输入电压抑制比 | 60dB | 75dB | 25% |
7. 生产测试中的经验
-
批量生产时发现5%板子有高频振荡:
- 根源:电流采样回路布局不合理
- 解决:缩短采样电阻到运放的走线,增加RC滤波(100Ω+1nF)
-
高温测试时LADRC性能下降:
- 发现参数未做温度补偿
- 增加NTC测温,对b0参数进行线性校正:
code复制b0_temp = b0_25C * (1 + 0.003*(T-25))
这套方案在工业伺服电源中已批量应用2000+台,现场反馈相比传统PID方案,在焊机等冲击性负载场合表现尤为突出。一个意外的收获是:LADRC对输入电压波动的抑制能力,使得前端PFC电路的设计余量可以降低15%,直接节省了BOM成本。
