4. 传感器与信号处理:加速度计、陀螺仪、编码器在振动检测中的应用,信号滤波(低通、带通、陷波)
各位工程师朋友,大家好。今天我们来聊聊振动检测中那几个关键的传感器,以及怎么处理它们送回来的信号。
说实话,做伺服驱动这些年,我踩过最多的坑,就是信号处理这块。传感器选对了,滤波没做好,照样白搭。反过来,传感器一般,但信号调理得当,效果也能让人满意。
咱们先看一张图,把本章的知识脉络理清楚。
4.1 加速度计:振动检测的“耳朵”
加速度计,说白了就是用来感受振动的。机器一抖,它就能输出一个跟加速度成正比的电信号。
我个人习惯把加速度计分成两类:
- MEMS加速度计:便宜、体积小,适合做姿态检测和低频振动监测。但噪声偏大,高频响应一般。
- 压电式加速度计:精度高、频带宽,从几赫兹到几千赫兹都能用。工业伺服减振,我首选这个。
加速度计安装位置也很讲究。我建议直接贴在振动源附近,比如电机端盖、负载平台。离得远了,信号衰减不说,还可能引入结构共振的干扰。
4.2 陀螺仪:角速度的“眼睛”
陀螺仪测量的是角速度,也就是旋转的快慢。在伺服系统里,它特别擅长捕捉扭转振动。
你想想看,电机轴在高速旋转时,如果负载有偏心或者联轴器不对中,就会产生扭转振动。编码器有时候反应不过来,但陀螺仪能直接感知到角速度的波动。
我记得有个项目,客户反映机器人末端抖动。编码器反馈看着挺稳,但实际就是抖。后来我在关节处加了个陀螺仪,一测,发现有个20Hz的扭转模态在作怪。用陀螺仪信号做前馈补偿,问题就解决了。
4.3 编码器:位置与速度的“尺子”
编码器是伺服系统的标配。它直接测量电机转子的位置和速度,分辨率越高,能检测到的振动细节就越丰富。
编码器在振动检测中的角色,主要是提供速度环和位置环的反馈信号。通过分析速度环的误差信号,就能反推出机械振动的频率和幅度。
我常用的做法是:
- 采集编码器的速度信号,做FFT分析,看看有哪些频率成分。
- 如果发现某个频率的幅值异常高,那基本就是机械共振点。
- 然后针对这个频率设计陷波滤波器。
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;
}
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;
}
4.5 传感器融合:1+1 > 2
单个传感器总有局限。加速度计测直线振动好,但测扭转振动不行。陀螺仪测角速度准,但零偏漂移烦人。编码器精度高,但只能测电机端,负载端的振动它看不到。
所以,我建议把多个传感器结合起来用。比如:
- 编码器提供电机端的速度和位置,用于闭环控制。
- 加速度计贴在负载端,检测结构振动。
- 陀螺仪装在关节处,监测扭转模态。
信号进来后,各自滤波,然后通过卡尔曼滤波或者互补滤波进行融合。这样得到的信息更全面,减振效果也更好。
好了,这一章的内容就到这里。传感器选型、安装、滤波参数调试,这些都需要在实际项目中反复摸索。我讲的这些经验,希望能帮你少走一些弯路。