4. 传感器与信号处理:加速度计、陀螺仪、编码器在振动检测中的应用,信号滤波(低通、带通、陷波)

各位工程师朋友,大家好。今天我们来聊聊振动检测中那几个关键的传感器,以及怎么处理它们送回来的信号。

说实话,做伺服驱动这些年,我踩过最多的坑,就是信号处理这块。传感器选对了,滤波没做好,照样白搭。反过来,传感器一般,但信号调理得当,效果也能让人满意。

咱们先看一张图,把本章的知识脉络理清楚。

传感器与信号处理知识体系 加速度计 测量振动加速度 频带宽,灵敏度高 陀螺仪 测量角速度/角度 抑制扭转振动 编码器 位置/速度反馈 分辨率决定精度 信号调理与滤波 去噪 · 提取特征 · 抑制谐振 低通滤波器 保留低频振动信号 抑制高频噪声 带通滤波器 提取特定频段振动 用于共振分析 陷波滤波器 定点消除谐振频率 伺服减振核心 目标:精准感知 → 有效滤波 → 稳定控制

4.1 加速度计:振动检测的“耳朵”

加速度计,说白了就是用来感受振动的。机器一抖,它就能输出一个跟加速度成正比的电信号。

我个人习惯把加速度计分成两类:

  • MEMS加速度计:便宜、体积小,适合做姿态检测和低频振动监测。但噪声偏大,高频响应一般。
  • 压电式加速度计:精度高、频带宽,从几赫兹到几千赫兹都能用。工业伺服减振,我首选这个。
我的经验: 有一次在高速主轴振动测试中,MEMS加速度计死活测不到那个关键的2kHz谐振峰。换成压电式的,波形一下子就出来了。所以,选型时别只看价格,要看你的振动频率范围。

加速度计安装位置也很讲究。我建议直接贴在振动源附近,比如电机端盖、负载平台。离得远了,信号衰减不说,还可能引入结构共振的干扰。

4.2 陀螺仪:角速度的“眼睛”

陀螺仪测量的是角速度,也就是旋转的快慢。在伺服系统里,它特别擅长捕捉扭转振动。

你想想看,电机轴在高速旋转时,如果负载有偏心或者联轴器不对中,就会产生扭转振动。编码器有时候反应不过来,但陀螺仪能直接感知到角速度的波动。

我记得有个项目,客户反映机器人末端抖动。编码器反馈看着挺稳,但实际就是抖。后来我在关节处加了个陀螺仪,一测,发现有个20Hz的扭转模态在作怪。用陀螺仪信号做前馈补偿,问题就解决了。

注意: 陀螺仪有零偏漂移,长时间使用需要校准。我曾经因为没做温漂补偿,导致系统在高温环境下误报振动,排查了好几天。

4.3 编码器:位置与速度的“尺子”

编码器是伺服系统的标配。它直接测量电机转子的位置和速度,分辨率越高,能检测到的振动细节就越丰富。

编码器在振动检测中的角色,主要是提供速度环位置环的反馈信号。通过分析速度环的误差信号,就能反推出机械振动的频率和幅度。

我常用的做法是:

  1. 采集编码器的速度信号,做FFT分析,看看有哪些频率成分。
  2. 如果发现某个频率的幅值异常高,那基本就是机械共振点。
  3. 然后针对这个频率设计陷波滤波器。
关键点: 编码器的分辨率决定了你能看到多细微的振动。比如,一个2500线的编码器,理论上能分辨0.144度的角度变化。对于低频小幅振动,这个精度可能不够。我建议在精密应用中,至少用17位以上的绝对值编码器。

4.4 信号滤波:去伪存真

传感器信号进来,不能直接用。为什么?因为噪声太多。电源噪声、机械噪声、电磁干扰……这些都会混在信号里。

滤波的目的,就是把有用的振动信号提取出来,把没用的噪声滤掉。常用的三种滤波器,我一个个说。

4.4.1 低通滤波器

低通滤波器,顾名思义,让低频通过,阻止高频。在伺服系统里,它主要用来滤除高频噪声。

比如,加速度计的输出,经常会有几十千赫兹的高频毛刺。这些毛刺不是真正的振动,而是传感器自身的噪声或者电路耦合进来的。加一个截止频率在1kHz左右的低通滤波器,信号就干净多了。

代码实现(一阶低通,离散化):

// 一阶低通滤波器
float lowpass_filter(float input, float prev_output, float fc, float Ts) {
    float alpha = Ts / (Ts + 1.0f / (2.0f * 3.14159f * fc));
    return alpha * input + (1.0f - alpha) * prev_output;
}

这里 fc 是截止频率,Ts 是采样周期。alpha 越小,滤波效果越强,但延迟也越大。我一般把 alpha 设在0.1到0.3之间,具体看现场调试。

4.4.2 带通滤波器

带通滤波器只让某个频段的信号通过。在振动分析中,它用来提取特定频率的振动分量。

举个例子,你想分析电机在100Hz附近的振动特性。用带通滤波器,中心频率设为100Hz,带宽设为20Hz,那么80Hz到120Hz之间的信号被保留,其他频率都被衰减。

我习惯用二阶带通滤波器,效果比一阶好,计算量也不大。

// 二阶带通滤波器(直接II型)
float bandpass_filter(float input, float w0, float Q, float Ts) {
    static float x1 = 0, x2 = 0, y1 = 0, y2 = 0;
    float b0, b1, b2, a0, a1, a2;
    float K = tan(3.14159f * w0 * Ts);
    float norm = 1.0f / (1.0f + K / Q + K * K);
    b0 = K / Q * norm;
    b1 = 0;
    b2 = -K / Q * norm;
    a1 = 2.0f * (K * K - 1.0f) * norm;
    a2 = (1.0f - K / Q + K * K) * norm;
    float output = b0 * input + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2;
    x2 = x1; x1 = input;
    y2 = y1; y1 = output;
    return output;
}
小技巧: Q值(品质因数)决定了带宽。Q值越大,带宽越窄,选择性越好,但相位延迟也越大。我一般取Q=10,既能有效提取特征频率,又不会让系统响应太慢。

4.4.3 陷波滤波器

陷波滤波器,也叫带阻滤波器。它专门用来干掉某一个特定频率的信号。

在伺服减振中,陷波滤波器是核心武器。机械系统总会有几个共振频率,比如200Hz、500Hz。这些共振频率如果不处理,伺服系统一激励,就会产生剧烈振动。

我的做法是:先用扫频或者FFT找到共振点,然后在速度环或者电流环里串联一个陷波滤波器,把那个频率的信号衰减掉。

曾经有个项目,一台龙门铣床在300Hz处共振,加工表面出现振纹。我在伺服驱动器里加了一个300Hz的陷波滤波器,深度设为-20dB,振纹立马消失。客户竖起了大拇指。

// 二阶陷波滤波器
float notch_filter(float input, float f0, float Q, float Ts) {
    static float x1 = 0, x2 = 0, y1 = 0, y2 = 0;
    float w0 = 2.0f * 3.14159f * f0;
    float K = tan(w0 * Ts / 2.0f);
    float norm = 1.0f / (1.0f + K / Q + K * K);
    float b0 = (1.0f + K * K) * norm;
    float b1 = 2.0f * (K * K - 1.0f) * norm;
    float b2 = (1.0f - K / Q + K * K) * norm;
    float a1 = b1;
    float a2 = (1.0f - K / Q + K * K) * norm;
    float output = b0 * input + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2;
    x2 = x1; x1 = input;
    y2 = y1; y1 = output;
    return output;
}
避坑指南: 我曾经把陷波滤波器的Q值设得太高(比如Q=100),结果滤波器变得非常敏感,稍微偏离中心频率就失效。而且相位突变很大,导致系统不稳定。后来我学乖了,Q值一般取1到5之间,够用就好。

4.5 传感器融合:1+1 > 2

单个传感器总有局限。加速度计测直线振动好,但测扭转振动不行。陀螺仪测角速度准,但零偏漂移烦人。编码器精度高,但只能测电机端,负载端的振动它看不到。

所以,我建议把多个传感器结合起来用。比如:

  • 编码器提供电机端的速度和位置,用于闭环控制。
  • 加速度计贴在负载端,检测结构振动。
  • 陀螺仪装在关节处,监测扭转模态。

信号进来后,各自滤波,然后通过卡尔曼滤波或者互补滤波进行融合。这样得到的信息更全面,减振效果也更好。

总结一下: 传感器是减振控制的眼睛和耳朵,信号处理是大脑。没有好的传感器,你什么都看不到;没有好的滤波,你看到的东西全是假的。两者缺一不可。

好了,这一章的内容就到这里。传感器选型、安装、滤波参数调试,这些都需要在实际项目中反复摸索。我讲的这些经验,希望能帮你少走一些弯路。


专注资料整理