3、震动测量与评估:加速度传感器选型、数据采集方法、时域/频域分析基础、震动评价指标(RMS、峰值、FFT)
做FOC无刷电机震动抑制,第一步不是调参数,而是先搞清楚——震动到底有多大?
我见过不少工程师,上来就调PI、调陷波滤波器,调了半天效果不明显。为什么?因为没有量化。你连震动是0.1g还是1.0g都不知道,怎么知道抑制了多少?
所以这一章,咱们把测量和评估这件事聊透。说白了,就是三件事:用什么测、怎么测、测完怎么看。
3.1 加速度传感器选型:别小看这个“小东西”
加速度传感器是震动的“耳朵”。选错了,后面所有数据都是垃圾。
我个人习惯看这几个关键参数:
| 参数 | 推荐范围 | 说明 |
|---|---|---|
| 量程 | ±2g ~ ±16g | 电机震动一般不超过±8g,选±16g留余量 |
| 带宽 | ≥ 1kHz | FOC的电流环频率通常在1-5kHz,震动频率可能更高 |
| 噪声密度 | ≤ 200 μg/√Hz | 噪声太大,小震动信号会被淹没 |
| 输出接口 | SPI 或 I2C | SPI速度更快,适合实时采集 |
你想想看,如果传感器带宽只有400Hz,电机在800Hz的震动你根本测不到。那还抑制个啥?
3.2 数据采集方法:别让采样率坑了你
传感器选好了,接下来是采集。这里有个坑——采样率。
奈奎斯特定理大家都懂:采样率至少是信号最高频率的2倍。 但实际工程中,我建议至少5-10倍。
举个例子:电机转速3000RPM,极对数为4,电频率就是200Hz。但震动可能包含谐波,比如10次谐波就是2kHz。那你的采样率至少得10kHz以上。
采集流程我一般这样设计:
- 传感器初始化:设置量程、带宽、输出速率
- 数据同步:用定时器触发采集,保证等间隔采样
- 缓存管理:用环形缓冲区,避免丢数据
- 数据标定:减去零偏,转换到物理单位(m/s²或g)
// 伪代码示例:加速度数据采集
#define SAMPLE_RATE 10000 // 10kHz
#define BUFFER_SIZE 1024
float acc_buffer[BUFFER_SIZE];
int idx = 0;
void timer_isr() {
// 读取传感器数据(SPI)
int16_t raw = spi_read(ACCEL_X_OUT);
// 转换为g值(假设量程±16g,16位ADC)
float acc_g = raw * 16.0 / 32768.0;
// 存入缓冲区
acc_buffer[idx] = acc_g;
idx = (idx + 1) % BUFFER_SIZE;
}
嗯,这里要注意:采集时间窗口要足够长。比如你要分析10Hz的震动,至少采1秒的数据。我一般采2-5秒,保证低频分辨率够用。
3.3 时域分析基础:看波形就能知道个大概
数据采回来了,先别急着上FFT。时域波形能告诉你很多信息。
时域看什么?
- 波形形状: 正弦波?还是毛刺多?毛刺多说明有冲击或换相问题
- 幅值稳定性: 震动幅值是否忽大忽小?可能是机械共振或控制不稳定
- 周期性: 有没有明显的周期?周期对应什么频率?
我记得有一次调试一个无人机电机,时域波形看着像被调制了一样,包络线有规律地起伏。后来一查,是螺旋桨的桨叶不平衡导致的。这种问题在频域里反而不容易一眼看出来。
3.4 频域分析基础:FFT是震动的“照妖镜”
时域看个大概,频域才能精确定位问题。
FFT(快速傅里叶变换)把时域信号转换到频域,告诉你:哪个频率的震动最大?
做FFT时要注意几个关键点:
- 频率分辨率: Δf = 采样率 / FFT点数。比如10kHz采样,1024点FFT,分辨率约9.8Hz。想分辨更细?增加FFT点数或降低采样率
- 频谱泄漏: 加窗函数可以缓解。我常用汉宁窗(Hanning),通用性好
- 平均处理: 做多次FFT取平均,能降低噪声影响
// FFT分析伪代码
#include "arm_math.h" // ARM CMSIS-DSP库
float32_t input[1024]; // 时域数据
float32_t output[1024]; // FFT结果(复数)
// 加汉宁窗
for (int i = 0; i < 1024; i++) {
input[i] *= 0.5 * (1 - arm_cos_f32(2 * PI * i / 1023));
}
// 执行FFT
arm_rfft_f32(&fft_instance, input, output);
// 计算幅值谱
for (int i = 0; i < 512; i++) {
float real = output[2*i];
float imag = output[2*i+1];
float mag = sqrt(real*real + imag*imag) / 512;
// mag就是频率点i * (10000/1024) Hz处的幅值
}
3.5 震动评价指标:RMS、峰值、FFT
数据有了,频谱有了,怎么评价震动大小?
三个核心指标:
| 指标 | 计算公式 | 物理意义 | 适用场景 |
|---|---|---|---|
| RMS(均方根值) | √(1/N * Σx²) | 震动的“能量”大小 | 稳态震动评估,最常用 |
| 峰值(Peak) | max(|x|) | 震动的最大瞬时值 | 冲击、启动/停止过程 |
| FFT幅值 | 各频率点的幅值 | 各频率成分的贡献 | 定位具体震动源 |
我个人习惯这样用:
- 先看RMS,判断整体震动水平是否超标
- 再看峰值,确认有没有冲击性震动
- 最后看FFT,找到主要震动频率,针对性抑制
举个例子:电机在3000RPM时,RMS震动0.5g,但FFT显示在200Hz处有个1.2g的尖峰。那说明整体震动不大,但某个频率点有问题。这时候就可以针对200Hz设计陷波滤波器。
3.6 本章知识体系总览
为了让你更直观地理解这一章的内容结构,我画了一张图:
这张图把整个流程串起来了。从传感器选型开始,到数据采集,再到时域频域分析,最后输出量化指标。每一步都环环相扣。
好了,这一章的内容就到这里。震动测量是抑制的基础,基础打牢了,后面调参数才有方向。下一章咱们聊怎么根据测量结果设计滤波器——那才是真正动手干活的时候。
公众号:蓝海资料掘金营,微信deep3321