2. 传感器噪声分析:加速度计、陀螺仪、编码器的噪声特性

做控制最怕什么?最怕你明明觉得参数调得挺好,一上实际系统就开始抖。我早年吃过这个亏——在仿真里跑得稳稳的PID,装到机器人上一通电,电机嗡嗡响,机身像筛糠一样。查了三天,最后发现是加速度计的噪声被控制器放大了。

说白了,传感器噪声是控制抖动的头号元凶。你调参数之前,得先搞清楚你的传感器到底有多「脏」。这一章我们就掰开揉碎,看看加速度计、陀螺仪、编码器这三种常见传感器的噪声长什么样,以及怎么从数据手册里把噪声水平挖出来。

2.1 加速度计噪声特性

加速度计测的是比力,也就是物体感受到的加速度。但实际输出里,除了真实加速度,还混着一堆乱七八糟的东西。

2.1.1 噪声来源

  • 热机械噪声:MEMS结构里的分子热运动,白噪声为主。这是物理极限,没法消除。
  • 量化噪声:ADC把模拟量转成数字量时丢掉的精度。分辨率越低,噪声越大。
  • 1/f 噪声:低频段出现的闪烁噪声,频率越低越明显。静止时输出缓慢漂移,就是它在作怪。
  • 振动整流误差:高频振动被非线性效应解调成低频误差。我遇到过无人机悬停时高度慢慢往下掉,查到最后是螺旋桨振动被加速度计整流成了直流偏置。

2.1.2 数据手册怎么看

加速度计手册里,噪声指标通常写在「Noise」或「RMS Noise」那一栏。单位一般是 µg/√Hz 或 mg rms。举个例子:

参数 典型值 单位
噪声密度 75 µg/√Hz
输出数据速率 1000 Hz
RMS噪声(@100Hz带宽) 0.75 mg

怎么算?RMS噪声 = 噪声密度 × √(带宽)。上面那个例子,75µg/√Hz × √100 = 0.75mg。嗯,这个值就是你滤波器设计时的底线——你不可能把噪声压到比它还低。

我的习惯:选加速度计时,先看噪声密度。低于 100µg/√Hz 的算不错,低于 50µg/√Hz 的算优秀。工业级应用我一般选 30µg/√Hz 以下的。

2.2 陀螺仪噪声特性

陀螺仪测角速度,它的噪声比加速度计更棘手。为什么?因为角速度积分一次就是角度,噪声会随着时间累积。

2.2.1 噪声来源

  • 角度随机游走:白噪声积分后变成随机游走,角度误差随时间以 √t 增长。这是陀螺仪噪声的核心指标。
  • 速率随机游走:低频噪声积分后产生的慢变漂移,比角度随机游走更难对付。
  • 零偏不稳定性:陀螺仪静止时输出偏离零点的程度,通常用 °/h 表示。好的工业级陀螺仪能做到 1°/h 以下。

2.2.2 数据手册怎么看

陀螺仪手册里,噪声指标通常写成 0.005 °/s/√Hz 或者 0.2 °/√h。注意单位!前者是噪声密度,后者是角度随机游走。

参数 典型值 单位
噪声密度 0.005 °/s/√Hz
角度随机游走 0.2 °/√h
零偏不稳定性 2 °/h

举个例子:如果你用这个陀螺仪做姿态估计,带宽设到 50Hz,那角速度的RMS噪声就是 0.005 × √50 ≈ 0.035 °/s。积分1秒后,角度误差大约 0.035°。但积分10秒呢?误差会涨到 0.035 × √10 ≈ 0.11°。你想想看,如果控制周期是10ms,这个误差累积速度有多快。

我曾经踩过的坑:用了一个廉价陀螺仪做云台稳定,角度随机游走标称 1.5 °/√h。实际测试时,云台静止状态下角度输出每分钟漂了将近 3°。后来换成 0.2 °/√h 的器件,问题才解决。所以,做高精度控制时,角度随机游走一定要控制在 0.5 °/√h 以内。

2.3 编码器噪声特性

编码器测位置,看起来比MEMS传感器干净,但实际用起来也有不少坑。

2.3.1 噪声来源

  • 量化误差:增量式编码器的分辨率有限,比如 1000线,每转只能输出 4000 个脉冲。位置误差就是 ±1/2 个脉冲。
  • 抖动:码盘刻线不均匀、安装偏心、读数头振动,都会导致输出脉冲边沿位置随机抖动。
  • 电磁干扰:长线传输时,电机驱动产生的共模噪声会耦合到编码器信号上。我见过一个案例,编码器线没做屏蔽,电机一加速位置反馈就跳变几十个脉冲。
  • 速度估算噪声:用位置差分求速度时,量化误差会被放大。公式是 v = Δx/Δt,Δx 只有 ±1 个脉冲的误差,但 Δt 越小,速度噪声越大。

2.3.2 数据手册怎么看

编码器手册里,噪声指标通常不直接写「噪声」两个字,而是藏在精度和分辨率里。

参数 典型值 说明
分辨率 1000 PPR 每转脉冲数,决定了位置量化步长
精度 ±0.1° 位置误差,包含刻线误差和安装误差
最大响应频率 200 kHz 决定了最高可测转速

量化步长怎么算?360° / (4 × PPR)。1000线的编码器,步长 = 360/4000 = 0.09°。也就是说,你看到的位置反馈永远以 0.09° 为台阶跳变。如果控制周期很短,这个台阶就会在速度环里产生明显的噪声。

我的做法:做速度环时,不要直接用差分速度。我会在编码器后面加一个低通滤波器,截止频率设在速度环带宽的 3~5 倍。或者用测速法——在固定时间窗口内数脉冲个数,这样速度噪声和窗口时间成反比,窗口越长越平滑。

2.4 噪声评估实战:从手册到代码

光看手册还不够,你得把噪声水平换算成控制环路里实际看到的值。我一般按这个步骤来:

  1. 查手册:找到噪声密度或RMS噪声值。
  2. 算带宽:确定传感器输出数据速率,或者你打算用的滤波器带宽。
  3. 算RMS噪声:噪声密度 × √(带宽)。
  4. 换算到控制量:比如加速度噪声换算成角度噪声,或者位置噪声换算成速度噪声。
  5. 对比控制精度要求:如果噪声RMS值超过控制精度的 1/10,你就得考虑滤波或者换传感器了。

举个例子,假设你用加速度计做倾角测量,噪声密度 100µg/√Hz,带宽 20Hz:

RMS噪声 = 100µg/√Hz × √20Hz ≈ 447µg ≈ 0.447mg
换算成角度:假设倾角很小,sin(θ) ≈ θ
θ_noise ≈ 0.447mg / 1g ≈ 0.000447 rad ≈ 0.0256°

如果你的控制精度要求 0.1°,那这个噪声水平可以接受。如果要求 0.01°,那你就得换传感器或者把带宽压到 1Hz 以下。

核心原则:传感器噪声是控制系统的「底噪」。你调PID时,比例增益越大,噪声被放大的倍数就越大。所以,调参之前先评估噪声水平,能帮你提前知道控制器的性能上限在哪里。

2.5 知识体系:传感器噪声分析框架

下面这张图是我自己总结的噪声分析框架,每次做新项目我都会先过一遍:

传感器噪声分析框架 加速度计 陀螺仪 编码器 噪声来源 热机械噪声 量化噪声 · 1/f噪声 振动整流误差 噪声来源 角度随机游走 速率随机游走 零偏不稳定性 噪声来源 量化误差 抖动 · 电磁干扰 速度估算噪声 数据手册评估 噪声密度 → RMS噪声 → 换算到控制量 对控制环路的影响 限制PID增益上限 · 决定滤波器设计 · 影响控制精度

这张图把整个分析流程串起来了。从左到右是三种传感器,从上到下是从噪声来源到控制影响的链路。每次做新项目,我都会按这个框架走一遍,心里就有底了。

一个小技巧:如果你手头没有数据手册,或者手册参数不全,可以自己做个简单测试。让传感器静止,采集 10 秒数据,算标准差。这个标准差就是实际RMS噪声。我经常用这个方法验证手册参数是否靠谱——有一次发现某款国产加速度计实测噪声比手册标称大了 3 倍,果断换方案。