首页 / 驱动算法 / 高级篇

转矩扰动观测与补偿:DOB、龙伯格、滑模与ESO

负载突变、齿槽、摩擦、参数失配——这些"看不见的力"让速度跌落、让定位变软。本文讲透如何用观测器把扰动"算出来",再以前馈的方式把它抵消:从最直观的扰动观测器(DOB)出发,到龙伯格、滑模、扩张状态观测器,最后用仿真器看补偿前后速度响应的差别。

1. 扰动从哪来?为什么"看不见"就补不掉

伺服系统的扰动(Disturbance)是破坏速度/位置精度的元凶,常见来源:

对付扰动有两条路线:

  1. 建模前馈:知道扰动规律(如齿槽按角度查表、死区按电流极性),直接补。缺点:只能补"已知"的扰动
  2. 观测器估计:不管扰动是什么来源,用可测信号(电流、速度)把总扰动估计出来再抵消——通用、鲁棒,正是本文主题
💡 一图理解"总扰动"

在 dq 坐标下,无论扰动来自负载、摩擦还是参数失配,机械层面都表现为一个"额外转矩 Td"作用在转子上。观测器的任务就是把这个 Td(总和扰动)实时估计出来。

2. 扰动观测的本质:从机械方程"反推"

电机转子运动方程:

机械运动方程

J·dω/dt = Te − Td  ⟹  Td = Te − J·dω/dt

其中电磁转矩 Te 是已知的(Te = Kt·iq,Kt=1.5·p·ψf),转速 ω 是可测的(编码器/观测器)。所以理论上扰动直接能算出来

但问题在于 dω/dt 是对速度差分求导——编码器速度本身有量化噪声,差分一次噪声被放大,几乎没法直接用。工程解法:加一个低通滤波器 Q(s),把高频噪声滤掉,只保留低频的扰动成分:

DOB 估计式

d = Q(s)·(Te − J·s·ω) ,    Q(s) = 1/(τ·s + 1)

τ 决定观测带宽 fobs = 1/(2πτ):τ 越小观测越快,但吃进更多噪声

这就是扰动观测器 DOB(Disturbance Observer)的核心——它本质是一个"带通"的扰动估计器。DOB 是前馈性质的:扰动先于 PI 积分被抵消,所以对突然加载的抑制远好于靠速度环 PI 慢慢"追"。

2.1 观测带宽怎么选

3. 四种主流扰动观测器

3.1 DOB(扰动观测器)——最直观

结构如上:用 Te − J·s·ω 反推扰动,再经 Q(s) 低通。实现最简单、物理意义最清晰,是工业应用最广的方案。缺点:依赖 J 的准确性(J 不准则估计有偏),且直接差分速度对噪声敏感。

3.2 龙伯格扰动观测器(Luenberger Observer)——状态估计

把扰动当作一个"缓变状态",用状态空间建模:

龙伯格扰动观测器

dω̂/dt = (Kt·iq − T̂d)/J + L1·(ω − ω̂)

dT̂d/dt = L2·(ω − ω̂)

假设扰动缓变 dTd/dt≈0;用测量速度与估计速度的误差 e=ω−ω̂ 校正两个估计

增益 L1、L2极点配置决定:特征方程 s² + L1·s + L2/J = (s+ωobs)²,取临界阻尼(ζ=1)得 L1=2ωobs、L2obs²·J。相比 DOB,龙伯格观测器不直接差分速度,噪声特性更好,是工程上很实用的选择。

3.3 滑模扰动观测器(SMO)——鲁棒但抖振

用滑模项代替线性校正:把 e=ω−ω̂ 驱动到滑模面,由等效控制项得到扰动估计。优点:对参数失配和模型误差鲁棒性强;缺点:存在抖振(chattering),需要边界层/饱和函数软化,否则补偿信号高频抖动。常见于追求强鲁棒性的高端伺服。

3.4 扩张状态观测器(ESO)——ADRC 的核心

自抗扰控制(ADRC)的"心脏":把总扰动(包含模型误差)扩张成一个新状态,用一个二阶观测器同时估计转速和总扰动:

线性扩张状态观测器(LESO)

e = ω − ω̂1

ω̂̇1 = ω̂2 + β1·e + b0·u

ω̂̇2 = β2·e

ω̂2 就是总扰动估计;b0≈Kt/J 为控制增益;β1、β2 按带宽整定(β1=2ωobs、β2obs²)

ESO 的优势:不依赖精确模型,把"模型误差+外部扰动"一起估计,非常适合工况复杂、参数多变的场合(机器人关节、变负载设备)。

观测器核心思想抗参数失配实现难度典型场景
DOB反推 + 低通 Q中(依赖 J)★☆☆工业通用、入门首选
龙伯格状态估计 + 极点配置★★☆高性价比、噪声敏感场合
滑模 SMO滑模面 + 等效控制★★★强鲁棒高端伺服
ESO扰动扩张为状态强(不依赖模型)★★☆ADRC、变负载/机器人

4. 补偿策略:把估计扰动变成 iq 前馈

观测到扰动 T̂d 后,把它转换为 iq 补偿量叠加到电流指令上:

扰动前馈补偿

Δiq = T̂d / Kt ,   iq,ref = iq,PI + Δiq

速度环 PI 输出(iq,PI)加上扰动前馈 Δiq,共同作为电流环指令

为什么有效?没有观测器时,负载加载会让速度跌下来,速度环 PI 需要时间积分"追"回去——速度已经跌了才补。有了观测器,扰动在速度跌落之初就被估计出来并立即前馈抵消,速度几乎不掉。等效刚性大幅提升(扰动抑制能力 ≈ 观测带宽以内的频带)。

⚠️ 前馈补偿的两个前提

电流环要够快:前馈补偿要经过电流环执行,电流环带宽不足会"拖延"补偿;② 别超出电流/电压极限:扰动太大时 Δiq 可能饱和,要做限幅与速度环输出的协调。

5. 与齿槽、死区补偿的分工

本站已有两篇"补偿"文章,它们和观测器是互补关系:

工程上常常三管齐下:确定性扰动用建模前馈(齿槽/死区),残留和负载突变用观测器兜底。观测器"看不见"高于观测带宽的快速扰动,那些恰恰需要建模前馈来补——两者频带互补。

6. 交互式演示:速度环抗扰仿真

下面仿真一个带速度环 PI + 电流环惯性的伺服系统,在 t=0.3s 施加阶跃负载。对比无扰动观测(红)带观测器前馈(绿)的速度响应:看速度跌落量和恢复时间,再调观测带宽感受"快与噪"的权衡。

负载扰动观测与补偿仿真器
红=无补偿,绿=带观测前馈。t=0.3s 施加阶跃负载。

观察要点:

7. 代码实现(C语言)

7.1 龙伯格扰动观测器 + 前馈补偿

/* 龙伯格扰动观测器:同时估计转速与总扰动,极点配置于 w_obs */ typedef struct { float j; /* 折算惯量 kg·m² */ float kt; /* 转矩常数 Nm/A */ float l1, l2; /* 观测器增益 */ float w_hat; /* 估计转速 rad/s */ float td_hat; /* 估计扰动 N·m */ } torque_obs_t; void torque_obs_init(torque_obs_t *o, float j, float kt, float f_obs_hz) { const float w = 2.0f * 3.14159265f * f_obs_hz; /* 观测带宽 rad/s */ o->j = j; o->kt = kt; o->l1 = 2.0f * w; /* 临界阻尼极点配置 */ o->l2 = w * w * j; o->w_hat = 0.0f; o->td_hat = 0.0f; } void torque_obs_update(torque_obs_t *o, float iq, float w_meas, float ts) { float e = w_meas - o->w_hat; /* 速度估计误差 */ float dw = (o->kt * iq - o->td_hat) / o->j; /* 估计转速导数 */ o->w_hat += (dw + o->l1 * e) * ts; /* 校正转速估计 */ o->td_hat += (o->l2 * e) * ts; /* 校正扰动估计 */ } /* 在速度环输出处叠加扰动前馈 */ float iq_ref_with_feedforward(torque_obs_t *o, float iq_from_speed_pi) { return iq_from_speed_pi + o->td_hat / o->kt; /* Δiq = Td_hat / Kt */ }

7.2 简易 DOB(Q 滤波)

/* DOB:Td_hat = LPF(Te - J·dω/dt),一阶低通 tau_q */ typedef struct { float j; float kt; float tau_q; float w_prev; float td_hat; } dob_t; void dob_update(dob_t *d, float iq, float w_meas, float ts) { float domega = (w_meas - d->w_prev) / ts; /* 速度差分(注意噪声) */ float acc = d->kt * iq - d->j * domega; /* Te - J·dω/dt */ d->td_hat += (acc - d->td_hat) * (ts / d->tau_q); /* 一阶低通 */ d->w_prev = w_meas; }

7.3 参数与调试建议

  1. J 要准:观测器的 J 用辨识值(可用惯量辨识),J 偏差会让估计有偏
  2. 观测带宽:从速度环带宽的 3 倍起步,逐步加大到"速度跌落明显减小"且补偿信号不抖为止
  3. 前馈限幅:Δiq 与速度环输出共用 iq 限幅,防止大扰动时饱和失控
  4. 验证:加阶跃负载看速度跌落;把观测器输出 T̂d 与已知负载对比,确认估计收敛

8. 工程要点与常见误区

  1. 观测器不是万能的:它只能抑制观测带宽以内的扰动;快速扰动要靠建模前馈(齿槽/死区)补
  2. 观测带宽是核心旋钮:太慢补偿滞后,太快注入噪声。永远从慢往快调
  3. J 不准会"带偏":DOB/龙伯格都依赖 J;用惯量辨识把 J 校准到 10% 以内再上观测器
  4. 与 PI 配合:观测器解决"带宽内扰动",速度环 PI 仍负责"稳态与模型误差",二者不冲突
  5. 先保证电流环:扰动前馈要经过电流环执行,电流环带宽上不去,观测补偿也白搭
  6. 留意饱和:大负载 + 前馈可能顶到电压/电流极限,务必限幅并做抗饱和
✅ 一句话记住

扰动观测 = 用 Te 与 dω/dt 反推 Td,再用低通/状态估计滤噪声;补偿 = 把估计扰动转成 Δiq=T̂d/Kt 前馈。选型上:通用选 DOB、噪声敏感选龙伯格、强鲁棒选滑模、变负载/机器人选 ESO。