4、基于扰动观测器的前馈补偿:扰动观测器(DOB)原理、设计方法、与PID的融合
各位做电机控制的朋友,咱们继续往下聊。
上一节我们讲了前馈补偿,用模型去抵消已知的扰动。但现实世界哪有那么完美?负载突变、摩擦力变化、参数漂移……这些未知扰动才是真正的“拦路虎”。
那怎么办?
我的答案是:给它装一个“扰动观测器”(DOB)。说白了,就是让控制器自己学会“看”到扰动,然后主动去抵消它。这招我在做伺服驱动器时屡试不爽,今天就把核心干货倒给你们。
4.1 扰动观测器(DOB)原理:从“被动挨打”到“主动防御”
先问个问题:传统PID为什么怕负载突变?
因为PID是“事后诸葛亮”。它只能等误差出来了,才去调整输出。扰动来了,转速先掉下去,PID再慢慢拉回来。这个过程,就是“被动挨打”。
扰动观测器的思路完全不同——它估算出扰动的大小,然后直接在前馈路径上把它抵消掉。就像你开车时,前面有个坑,你提前打方向盘,而不是等轮子掉进去再猛打。
核心思想:将实际系统与标称模型的输出之差,视为“等效扰动”,然后反向补偿。
数学上怎么理解?
假设电机系统的传递函数为 P(s),标称模型为 Pn(s)。实际输出 y 与模型输出 yn 的差值,经过一个低通滤波器 Q(s),就得到了扰动估计值 d_hat。
d_hat = Q(s) * [ P(s)^(-1) * y - u ]
嗯,这里要注意:P(s)^(-1) 是系统的逆模型。实际中我们不会直接求逆,而是用标称模型的逆 Pn(s)^(-1) 来近似。
我个人习惯把DOB看作一个“虚拟传感器”。它不直接测量扰动,而是通过输入输出数据“反推”出扰动。我在项目中遇到过,当负载从空载突然跳到满载时,DOB能在1-2个控制周期内就估算出扰动大小,比PID快了一个数量级。
4.2 设计方法:三步走,稳如老狗
设计DOB,其实就三步。别被那些论文吓到,咱们工程师讲究实用。
第一步:确定标称模型 Pn(s)
这是DOB的“基准”。通常取系统的简化模型,比如一阶惯性环节或二阶振荡环节。我建议用系统辨识的方法,扫频得到频率响应,然后拟合出模型。别偷懒用理论计算,实际参数差很多。
第二步:设计低通滤波器 Q(s)
Q(s) 是DOB的灵魂。它决定了扰动观测的带宽和噪声抑制能力。
- Q(s) 的阶次:通常取2阶或3阶。阶次太低,高频噪声滤不干净;阶次太高,相位滞后大,影响稳定性。
- Q(s) 的截止频率:这是关键参数。我一般取速度环带宽的3-5倍。比如速度环带宽100Hz,Q(s)截止频率就设在300-500Hz。
- Q(s) 的形式:常用巴特沃斯滤波器或贝塞尔滤波器。巴特沃斯幅频特性平坦,贝塞尔相频特性线性。我个人偏爱贝塞尔,因为相位滞后小,对系统稳定性影响小。
// 以二阶巴特沃斯低通滤波器为例
// 截止频率 fc = 300 Hz, 采样周期 Ts = 0.0001 s
// 离散化后的差分方程系数
float b0 = 0.0201;
float b1 = 0.0402;
float b2 = 0.0201;
float a1 = -1.5610;
float a2 = 0.6414;
// 滤波函数
float Q_filter(float input) {
static float x[3] = {0, 0, 0};
static float y[3] = {0, 0, 0};
x[2] = x[1];
x[1] = x[0];
x[0] = input;
y[2] = y[1];
y[1] = y[0];
y[0] = b0*x[0] + b1*x[1] + b2*x[2] - a1*y[1] - a2*y[2];
return y[0];
}
避坑指南:我曾经在调试时,Q(s)截止频率设得太高,结果高频噪声被放大,系统反而抖得更厉害。后来我把截止频率降到200Hz,配合一个简单的陷波器,效果立竿见影。记住:DOB不是万能的,它只对Q(s)带宽内的扰动有效。
第三步:实现扰动补偿
将估计出的扰动 d_hat 叠加到控制器的输出上:
u_total = u_pid + u_dob
其中 u_dob = -d_hat
注意符号!是负反馈。扰动是正的,我们就加一个负的补偿量去抵消它。
4.3 与PID的融合:1+1 > 2
DOB不是要取代PID,而是给PID当“助手”。两者融合,效果远胜单独使用。
怎么融合?我总结了两种主流架构:
| 架构类型 | 结构描述 | 适用场景 | 我的评价 |
|---|---|---|---|
| 串联型 | PID输出作为DOB的输入,DOB再输出补偿量 | 对扰动抑制要求极高,且系统模型较准确 | 效果好,但调试复杂,容易引入振荡 |
| 并联型 | PID和DOB独立计算,输出直接相加 | 通用场景,模型不精确时更鲁棒 | 我推荐新手先用这个,稳定第一 |
我个人更常用并联型。为什么?因为调试起来更“温柔”。你可以先调好PID,再慢慢加入DOB的权重,不会出现“一加DOB系统就崩”的尴尬。
具体实现时,我会在DOB输出端加一个增益系数 K_dob,从0开始慢慢往上加:
u_total = u_pid + K_dob * u_dob
你想想看,这样做的好处是什么?
- 如果系统模型不准,K_dob小一点,DOB只起辅助作用,不会破坏稳定性。
- 如果模型很准,K_dob可以调到1.0甚至更高,实现近乎完美的扰动抑制。
警告:千万不要一上来就把K_dob设成1.0!我见过太多工程师,理论算完直接上全量补偿,结果系统啸叫、电机抖动、甚至过流保护。记住:DOB的补偿量是“估计值”,不是“真值”。保守一点,从0.3开始试。
4.4 实战效果:一个真实案例
说个我自己的经历。之前做一款工业缝纫机伺服,要求布料厚度突变时,转速波动小于±5转/分。纯PID根本做不到,负载一上来,转速掉30转,再慢慢恢复。
后来我加了DOB,Q(s)截止频率设在400Hz,K_dob从0.2开始调,最终稳定在0.7。结果呢?负载突变时,转速波动控制在±3转/分以内,而且恢复时间从原来的200ms缩短到50ms。
说白了,DOB就是给PID装了一双“透视眼”。它让控制器提前看到扰动,而不是等误差出来了再补救。
4.5 核心逻辑图:DOB与PID融合框架
下面这张图,是我自己画的DOB与PID融合的完整框架。你看一眼,就能明白整个信号流。
从图中可以看到,DOB从系统输出 y(t) 和控制器输出 u 中提取信息,经过逆模型和Q滤波器,估算出扰动 d_hat,然后叠加到PID的输出上。这样,PID只需要处理残余的误差,而大部分扰动已经被DOB提前抵消了。
好了,关于DOB的原理、设计和融合,我就讲这么多。记住一句话:DOB不是银弹,但它绝对是电机控制工具箱里最锋利的刀之一。下次遇到负载突变的问题,别急着调PID参数,先想想能不能用DOB“看”到扰动。
核心要点回顾:
- DOB通过逆模型和Q滤波器估算扰动,实现前馈补偿
- Q(s)的截止频率是关键,取速度环带宽的3-5倍
- 并联型融合更鲁棒,K_dob从0.3开始调试
- DOB只对Q(s)带宽内的扰动有效,高频噪声需额外处理