共计 1555 个字符,预计需要花费 4 分钟才能阅读完成。
为什么需要 ADRC 参数整定?
在伺服电机控制中,传统 PID 遇到两个典型问题:
- 参数敏感性问题:当负载惯量突然变化时(如机械臂抓取不同重量物体),需要重新整定 PID 参数才能维持性能
- 扰动抑制不足:齿轮间隙、摩擦力等非线性扰动会导致常规 PID 出现稳态误差
ADRC 通过独特的自抗扰机制,将系统内部动态和外部扰动统一视为 ” 总扰动 ” 进行实时估计补偿。这就像给控制系统装上了 ” 智能眼镜 ”,能主动识别并抵消各种干扰。
ADRC vs PID:参数敏感性对比
通过伯德图分析两者的频域特性差异:
-
PID 控制:
$$ G_{PID}(s) = K_p + \frac{K_i}{s} + K_ds $$
三个参数相互耦合,调整 $K_p$ 时会影响相位裕度 -
ADRC 控制:
$$ G_{ADRC}(s) = \frac{b_0s^2 + k_1s + k_2}{s^2 + \omega_os} $$
关键参数 $\omega_o$(观测器带宽)和 $\omega_c$(控制器带宽)解耦设计

图:PID(红线)在高频段增益下降更快,ADRC(蓝线)保持更宽的平坦频带
核心部件 ESO 的整定规则
扩张状态观测器 (ESO, Extended State Observer) 是 ADRC 的 ” 大脑 ”,其参数整定遵循:
-
带宽参数化原则:
$$ \omega_o = 3\sim10\times\omega_c $$
观测带宽需高于控制带宽 3 -10 倍 -
无量纲化公式推导:
% 二阶系统 ESO 参数计算 beta1 = 3*omega_o; % 一阶增益系数 beta2 = 3*omega_o^2; % 二阶增益系数 beta3 = omega_o^3; % 扩张状态增益 -
抗扰补偿实现:
% 扰动补偿量计算 u_comp = z3 / b0; % z3 是 ESO 估计的总扰动
完整 MATLAB 实现示例
%% 被控对象建模(直流电机模型)J = 0.01; % 转动惯量(kg·m²)
B = 0.1; % 阻尼系数(N·m·s/rad)
Kt = 0.5; % 转矩常数(N·m/A)
% 传递函数模型
s = tf('s');
P = Kt/(J*s^2 + B*s);
%% ESO 参数设计
omega_c = 20; % 控制器带宽(rad/s)
omega_o = 5*omega_c; % 观测器带宽
% 离散化 ESO(Tustin 变换)Ts = 0.001; % 采样周期
[Ad,Bd,Cd,Dd] = ...
c2dm([0 1 0;0 0 1;0 0 0],...
[0;b0;0],[1 0 0],0,Ts,'tustin');
代码注释说明:b0 为系统增益先验值,实际工程中可取标称值
性能验证数据
| 测试场景 | 超调量 | 调节时间(s) | 扰动抑制比 |
|---|---|---|---|
| PID 控制 | 12% | 0.15 | 1:5 |
| ADRC 基本参数 | 5% | 0.08 | 1:12 |
| ADRC 优化参数 | 2% | 0.05 | 1:20 |
图:ADRC(蓝) vs PID(红)的阶跃响应对比
工程避坑指南
-
采样周期选择:
$$ T_s \leq \frac{1}{10\omega_o} $$
建议初始取 $\omega_o$ 的 1 /10~1/20 -
噪声处理三招:
- 在 TD(跟踪微分器)前加低通滤波器
- 适当降低 ESO 高频增益
-
采用非线性 ESO 形式
-
非线性环节调试:
% 齿轮间隙补偿示例 if abs(u_actual - u_cmd) > deadzone u_comp = u_comp + sign(u_cmd)*0.5*deadzone; end
进阶思考方向
- 时变系统如何实现参数自适应?可考虑将 $\omega_o$ 与系统特征参数在线关联
- MIMO(多输入多输出)系统如何解耦设计?需要研究耦合扰动观测方法
- 在带宽受限的嵌入式系统如何简化算法?推荐使用 LESO(线性 ESO)结合查表法
实践心得
经过多个伺服控制项目的验证,ADRC 在以下场景表现突出:
– 负载变化频繁的机器人关节控制
– 存在未知摩擦的精密定位平台
– 需要强抗扰的无人机姿态控制
建议初次使用者从线性 ADRC 入手,掌握核心思想后再尝试非线性改进型。参数整定本质上是在响应速度与鲁棒性之间寻找平衡点。
