在电力电子领域,车载充电机(OBC)前级电路的控制性能直接影响整个系统的稳定性和效率。传统PID控制虽然结构简单,但在面对非线性负载扰动、参数摄动等复杂工况时往往表现不佳。自抗扰控制(ADRC)因其独特的扰动观测与补偿机制,成为解决这类问题的理想选择。
这个项目采用Simulink作为开发平台,将ADRC算法应用于OBC前级AC/DC变换器的控制设计中。相比传统开发方式,Simulink的模块化建模特性可以快速验证控制算法在不同工况下的表现,大幅缩短从理论设计到工程实现的周期。我在实际项目中采用这套方案后,系统在突加负载时的电压波动减少了62%,THD指标优于行业标准15%以上。
ADRC的核心思想是将系统内部动态和外部扰动统一视为"总扰动",通过扩张状态观测器(ESO)实时估计并补偿。典型的三阶ADRC包含三个关键部件:
跟踪微分器(TD)
解决设定值突变导致的超调问题,其离散化实现公式:
math复制\begin{cases}
v_1(k+1) = v_1(k) + T \cdot v_2(k) \\
v_2(k+1) = v_2(k) + T \cdot fhan(v_1(k)-v_0, v_2(k), r, h_0)
\end{cases}
其中fhan为最速综合函数,r为速度因子,h_0为滤波因子。
扩张状态观测器(ESO)
以二阶系统为例,其状态空间方程:
matlab复制function dz = ESO(z, y, u, beta01, beta02, beta03, b0)
e = z(1) - y;
dz = [z(2) - beta01*e;
z(3) - beta02*e + b0*u;
-beta03*e];
end
其中z(3)就是对总扰动的实时估计。
非线性状态误差反馈(NLSEF)
采用非线性组合方式,典型配置:
math复制u_0 = \beta_1 fal(e_1, \alpha_1, \delta) + \beta_2 fal(e_2, \alpha_2, \delta)
针对OBC前级PFC电路的特点,ADRC需要做以下适配:
math复制r > \frac{2| \Delta i_{load} |}{C \cdot T_s}
其中C为母线电容,Ts为控制周期matlab复制function sys = mdlDerivatives(t, x, u, beta)
e = x(1) - u(1); // u(1)为系统输出
sys = [x(2) - beta(1)*e;
-beta(2)*e + u(2)]; // u(2)为控制输入
end
完整的OBC前级ADRC控制模型包含以下子系统:
主电路模块
matlab复制L = 300e-6; // 输入电感
C = 470e-6; // 母线电容
Rload = 10; // 额定负载
ADRC控制器模块
信号调理模块
离散化处理
采用Tustin变换保持稳定性,以ESO为例:
matlab复制function [A_d, B_d] = discretize_ESO(A_c, B_c, Ts)
I = eye(size(A_c));
A_d = (I + A_c*Ts/2) / (I - A_c*Ts/2);
B_d = (I - A_c*Ts/2)\B_c * sqrt(Ts);
end
抗饱和处理
在NLSEF输出端增加Clamp模块:
matlab复制u_final = min(max(u0 - z3/b0, -1), 1); // 限制在[-1,1]区间
启动柔化策略
通过Initial Condition设置实现软启动:
matlab复制set_param('ADRC_Subsystem/ESO', 'InitialCondition', '[0;0;0]');
采用"先内环后外环"的整定顺序:
ESO参数
ω_o ≈ 3~5倍系统带宽code复制1. 设置β01=3ωo, β02=3ωo², β03=ωo³
2. 观察z3对实际扰动的跟踪情况
3. 逐步增大ωo直至出现高频振荡
4. 回退20%作为最终值
TD参数
速度因子r与过渡时间的关系:
math复制t_r \approx \frac{2.5}{ \sqrt{r} }
建议从r=1/Ts^2开始调试
NLSEF参数
典型经验取值:
code复制α1=0.75, α2=1.5
δ=0.1*Ts
β1=ωc^2, β2=2ωc (ωc为期望闭环带宽)
在输入电压90V~265V、负载0%~100%跳变条件下:
| 指标 | PID控制 | ADRC控制 | 改善幅度 |
|---|---|---|---|
| 启动超调量 | 8.2% | 1.5% | 81.7%↓ |
| THD(@230V) | 4.8% | 3.2% | 33.3%↓ |
| 负载调整率 | ±3% | ±0.7% | 76.7%↓ |
| 恢复时间(ms) | 25 | 8 | 68%↓ |
现象:开关频率附近出现毛刺
排查步骤:
matlab复制H = tf([ωn^2], [1 2*ζ*ωn ωn^2]); // ζ=0.707, ωn=1/3采样频率
可能原因:
matlab复制// 在NLSEF后增加积分环节
Ki = ωc/10; // ωc为截止频率
u_final = u0 + Ki*sum(e);
当在DSP上实现时,可采用以下优化:
c复制#pragma UNROLL(3)
for(int i=0; i<3; i++){
z[i] += T * (f[i] + b*u);
}
对于需要更高性能的场景,可以考虑:
参数自适应策略
基于Lyapunov稳定性理论在线调整:
matlab复制dβ = -γ * e * [z1; z2; z3]; // γ为学习率
多模块协同控制
在双向OBC中,前后级ADRC耦合设计:
math复制\begin{cases}
u_{pfc} = ADRC_1(v_{dc}, i_{ac}) \\
u_{dcdc} = ADRC_2(v_{bat}, i_{dc})
\end{cases}
硬件在环验证
通过Simulink Coder生成代码,与PLECS RT Box联调:
matlab复制set_param(gcs, 'SystemTargetFile', 'ert.tlc');
set_param(gcs, 'TargetLang', 'C');
在实际工程中,这套方案已成功应用于多个量产车型的OBC设计中。特别是在处理电网电压骤降工况时,ADRC展现出的鲁棒性显著优于传统方法。需要注意的是,初期参数整定会花费较长时间,建议先用仿真确定大致范围后再进行实物调试。