共计 2113 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点:为什么需要 ADRC?
在工业控制领域,PID 控制器长期以来是大多数控制系统的首选。然而,在面对非线性系统、强扰动或快速时变过程时,传统 PID 控制器的局限性逐渐暴露:
- 模型依赖性:PID 参数整定严重依赖被控对象的精确数学模型
- 抗扰能力弱:对于突加负载、参数摄动等扰动缺乏主动补偿机制
- 动态性能不足:积分饱和、超调振荡等问题在非线性系统中尤为突出
ADRC(Active Disturbance Rejection Control,自抗扰控制)通过独特的架构设计突破了这些限制。它最大的特点是:
- 无模型控制:不依赖精确的数学模型
- 扰动估计与补偿:通过 ESO 实时估计并抵消总扰动
- 非线性控制律:采用非线性组合提升动态响应品质
ADRC 核心原理拆解
1. 跟踪微分器(TD)
TD 的作用是为系统提供合理的过渡过程,避免直接跟踪阶跃信号导致的超调。其离散形式为:
\begin{cases}
v_1(k+1) = v_1(k) + h \cdot v_2(k) \\
v_2(k+1) = v_2(k) + h \cdot fst(v_1(k)-v(k), v_2(k), r, h_0)
\end{cases}
其中 r 为速度因子,决定跟踪快慢;h_0为滤波因子,影响平滑程度。
2. 扩张状态观测器(ESO)
ESO 是 ADRC 的核心创新,它将系统内部动态和外部扰动统一视为 ” 总扰动 ” 进行估计:
\begin{cases}
e = z_1 - y \\
z_1 = z_1 + h(z_2 - \beta_{01}e) \\
z_2 = z_2 + h(z_3 - \beta_{02}fal(e, \alpha_1, \delta) + b_0u) \\
z_3 = z_3 + h(-\beta_{03}fal(e, \alpha_2, \delta))
\end{cases}
其中 β 系列参数决定观测器带宽,fal()函数实现非线性误差反馈。
3. 非线性控制律(NLSEF)
通过非线性组合生成控制量,典型形式为:
u_0 = k_1 fal(e_1, \alpha, \delta) + k_2 fal(e_2, \alpha, \delta)
其中 e1 为跟踪误差,e2为微分误差,α和 δ 决定非线性强度。
参数整定方法论
带宽法整定公式
- TD 参数:
- 速度因子
r = ω_c^2 -
滤波因子
h0 = 3/ω_c -
ESO 参数:
β01 = 3ω_oβ02 = 3ω_o^2β03 = ω_o^3-
通常取
ω_o = (3~5)ω_c -
NLSEF 参数:
k1 = ω_c^2/b0k2 = 2ω_c/b0
Simulink 建模要点
% 关键参数初始化
wc = 10; % 控制器带宽
wo = 3*wc; % 观测器带宽
b0 = 1.2; % 近似控制增益
% TD 模块参数
r = wc^2;
h0 = 3/wc;
% ESO 模块参数
beta = [3*wo, 3*wo^2, wo^3];

建议命名规范:TD_out, ESO_z1/z2/z3, NLSEF_u0 等
工程实践技巧
ESO 高频噪声抑制
当观测器带宽过高时,ESO 会放大测量噪声。解决方法:
- 参数调整:
- 降低
ω_o(建议ω_o ≤ 5ω_c) -
增大
δ(非线性区间参数) -
硬件层面:
- 增加一阶 RC 滤波(截止频率 >10ω_c)
- 采用屏蔽线缆减少电磁干扰
参数自适应伪代码
def adaptive_adrc():
while True:
e = reference - actual_value
# 根据误差动态调整带宽
if abs(e) > threshold_high:
wc = wc_max
elif abs(e) < threshold_low:
wc = wc_min
else:
wc = wc_min + (wc_max-wc_min)*abs(e)/threshold_high
update_all_parameters() # 根据新 wc 更新所有派生参数
apply_control()
案例验证:电机抗扰测试
在 Simulink 中构建永磁同步电机速度控制系统,对比 PID 与 ADRC 在突加负载时的表现:
- 测试条件:
- 额定转速 1000rpm
-
0.5s 时突加 50% 额定负载
-
结果对比:
- PID 控制:速度跌落 85rpm,恢复时间 320ms
- ADRC 控制:速度跌落 12rpm,恢复时间 80ms
关键实现代码:
% 扰动观测器核心代码
function dz = ESO(y, u, beta, b0)
e = z(1) - y;
dz(1) = z(2) - beta(1)*e;
dz(2) = z(3) - beta(2)*fal(e,0.5,0.01) + b0*u;
dz(3) = -beta(3)*fal(e,0.25,0.01);
end
% 非线性函数
function f = fal(e,alpha,delta)
if abs(e) > delta
f = abs(e)^alpha * sign(e);
else
f = e / (delta^(1-alpha));
end
end
经验总结
-
参数调整顺序:建议先调 TD(确保过渡过程平滑),再调 ESO(准确观测扰动),最后优化 NLSEF(改善动态性能)
-
典型问题排查:
- 出现高频振荡 → 降低 ESO 带宽
- 响应速度慢 → 提高 TD 速度因子
-
稳态误差大 → 检查 b0 取值是否准确
-
进阶方向:
- 结合模糊逻辑实现参数自整定
- 采用粒子群算法优化非线性函数参数
- 在 FPGA 上实现硬件加速
ADRC 作为一种新兴的控制范式,其 ” 估计 - 补偿 ” 的思想正在被越来越多的工业场景验证。希望本文的实践经验能帮助工程师们更快上手这一强有力的控制工具。
