1. 抖动现象的本质:从时域和频域理解控制系统的抖动,区分高频抖动与低频漂移
做控制系统调试,最让人头疼的莫过于「抖」。明明仿真跑得好好的,一上实际环境,电机就开始嗡嗡响,或者位置来回晃。我刚开始做嵌入式控制那几年,没少被这种问题折磨得半夜改参数。
要解决抖动,首先得搞清楚它到底是什么。说白了,抖动就是系统输出在目标值附近来回波动。但同样是波动,背后的原因可能天差地别。我个人习惯把抖动拆成两个维度来看:时域和频域。
1.1 时域视角:抖动的「长相」
时域分析最简单直接——看波形。你把控制器的输出或者传感器的反馈接到示波器上,一眼就能看出问题。
我一般把时域上的不稳定分为三类:
| 类型 | 波形特征 | 典型原因 |
|---|---|---|
| 等幅振荡 | 振幅基本不变,周期稳定 | 增益过大、相位裕度不足 |
| 发散振荡 | 振幅越来越大 | 系统失稳,负反馈变正反馈 |
| 衰减振荡 | 振幅逐渐减小 | 阻尼适中,系统趋于稳定 |
举个例子。有一次我在调一个四轴飞行器的悬停控制,发现飞机总是在一个方向上来回晃。看波形,是典型的等幅振荡,频率大概 8Hz 左右。我当时第一反应就是——PID 的 P 项给大了。把比例增益降下来之后,波形立刻变成了衰减振荡,飞机也稳住了。
小技巧: 判断抖动是否来自控制器本身,可以先把积分项 I 和微分项 D 置零,只留 P。如果抖动消失,说明问题出在 P 或者系统结构上;如果抖动还在,那可能是传感器噪声或者机械共振。
1.2 频域视角:抖动的「频率成分」
时域能告诉你「抖不抖」,但频域能告诉你「为什么抖」。我个人觉得,频域分析才是调参的核心武器。
把时域信号做 FFT 变换,你就能看到抖动的频率分布。这里有个关键区分:
- 高频抖动:频率较高(比如几十到几百赫兹),振幅通常较小。常见于传感器噪声、PWM 开关噪声、机械共振。
- 低频漂移:频率很低(0.1Hz 到几赫兹),振幅可能较大。常见于积分饱和、温度漂移、负载变化。
为什么要区分这两者?因为处理方式完全相反。高频抖动需要滤波或者降低增益,低频漂移则需要增加积分作用或者前馈补偿。
核心观点: 高频抖动是「快而小」的波动,低频漂移是「慢而大」的偏移。调参时如果搞混了,越调越乱。
1.3 高频抖动 vs 低频漂移:对比清单
我整理了一个对比表,方便你在调试时快速定位问题类型:
| 特征 | 高频抖动 | 低频漂移 |
|---|---|---|
| 频率范围 | 通常 > 10Hz | 通常 < 1Hz |
| 振幅变化 | 小幅度,快速变化 | 大幅度,缓慢变化 |
| 常见来源 | 传感器噪声、PWM 纹波、机械共振 | 积分饱和、温度漂移、重力/摩擦力变化 |
| 对系统影响 | 增加功耗、产生噪音、加速磨损 | 稳态误差、位置偏移、响应滞后 |
| 调试手段 | 低通滤波、降低 P 增益、增加 D 项 | 增加 I 项、前馈补偿、积分限幅 |
你想想看,如果系统输出在目标值附近快速抖动,你第一反应是加滤波还是加积分?很多人会下意识加积分,结果越加越抖。为什么?因为积分对低频有效,对高频反而会引入相位滞后,让抖动更严重。
避坑指南: 我曾经在一个伺服电机项目里,把高频抖动误判为积分不足。加了 I 项之后,电机开始低频振荡,整个工作台都在晃。后来用 FFT 一看,才发现是编码器信号有 50Hz 的共模噪声。加了个陷波滤波器,问题立刻解决。所以,先做频域分析,再动手调参。
1.4 知识体系:抖动的分类与应对
下面这张图是我自己总结的抖动分类框架。每次遇到抖动问题,我都会先按这个思路走一遍:
1.5 实战中如何快速区分?
说了这么多理论,回到实际调试。我一般按下面几步走:
- 肉眼观察:看输出波形是「毛刺多」还是「整体偏移」。毛刺多大概率是高频抖动,整体偏移大概率是低频漂移。
- 用手摸:电机或者执行器表面,高频抖动会发热,低频漂移则感觉「有劲使不出」。
- 用耳朵听:高频抖动通常伴随尖锐的啸叫声,低频漂移则是沉闷的嗡嗡声。
- 上仪器:用示波器或者逻辑分析仪抓一段数据,做 FFT 分析。这是最靠谱的方法。
一个实用技巧: 如果你手头没有 FFT 工具,可以用一个简单的方法——改变控制周期。把控制周期翻倍,如果抖动频率也跟着减半,那大概率是控制器本身的问题;如果抖动频率不变,那可能是外部干扰或者机械共振。