震动来源分析:机械、电气与控制因素

做FOC无刷电机控制这些年,我踩过最多的坑就是震动问题。你想想看,明明算法调得挺顺,电流波形也漂亮,可电机一转起来就是嗡嗡响、抖得厉害。为什么会这样?说白了,震动来源就三大类:机械的、电气的、控制的。咱们一个一个掰开聊。

核心观点:震动不是单一原因造成的。我习惯先做“震动溯源”,把机械、电气、控制三类因素分开排查,否则你调死算法也白搭。

FOC震动来源 机械因素 偏心 · 共振 · 轴承磨损 电气因素 电流谐波 · PWM死区 控制因素 参数不匹配 · 采样噪声 转子偏心 机械共振 轴承问题 电流谐波 PWM死区 PI参数失配 采样噪声 滤波器延迟

一、机械因素:看得见摸得着的震动源

机械震动是最直观的。电机一转,手摸上去就能感觉到。但很多人上来就调PID,其实方向错了。

1. 转子偏心

说白了就是转子没装在正中心。我在一个无人机电机项目里遇到过,新电机空载跑起来声音就不对。拆开一看,转子磁钢和定子之间的气隙一边大一边小。偏心会导致磁拉力不平衡,产生跟转速同频的震动。

  • 表现:震动频率等于电机机械转速频率(1x RPM)
  • 排查方法:用千分表打转子外圆跳动量,超过0.05mm就要注意了
  • 解决:换轴承、重新压装转子,或者干脆换电机

我的习惯:新电机到手,先空载跑一下,用FFT看震动频谱。如果1x RPM处有尖峰,十有八九是偏心问题。别急着调算法,先查机械。

2. 机械共振

每个系统都有固有频率。当电机转速产生的激振频率刚好撞上这个固有频率,震动会被放大好几倍。我记得有个客户做机器人关节,转速在3000rpm时震动特别大,上下调200rpm就没事了。这就是典型的共振。

  • 表现:某个转速区间震动突然增大,过了这个区间又恢复正常
  • 排查方法:做扫频测试,记录不同转速下的震动幅值
  • 解决:避开共振转速、增加阻尼、改变安装刚度

注意:共振不是电机本身的问题,是电机+负载+安装结构整个系统的特性。换电机不一定能解决,有时候加个橡胶垫圈反而管用。

3. 轴承磨损与安装问题

轴承坏了会产生高频震动。我遇到过一台电机,跑了几百小时后开始出现“沙沙”声,FFT一看,高频段一堆杂乱的谱线。拆开轴承,滚珠已经有麻点了。

机械故障类型 震动特征 常见频段
转子偏心 1x RPM 基频震动 低频(10-100Hz)
机械共振 特定转速下幅值突增 系统固有频率附近
轴承故障 高频杂散谱线 1kHz以上

二、电气因素:看不见的电流“脏东西”

电气因素比机械因素隐蔽得多。你摸上去电机不抖,但电流波形一抓全是毛刺。这些毛刺就是震动的元凶。

1. 电流谐波

理想情况下,FOC输出的三相电流应该是完美的正弦波。但现实是,逆变器是非线性器件,电流里会夹杂5次、7次、11次谐波。这些谐波会产生6倍频、12倍频的转矩脉动。

我做过一个测试:不加任何谐波抑制,电机在低速时电流THD(总谐波失真)能到15%以上。用手捏着电机轴,能明显感觉到一顿一顿的。

  • 主要谐波:5次(-300Hz@50Hz基频)、7次(+300Hz)、11次(-600Hz)
  • 产生转矩脉动:6次(300Hz)、12次(600Hz)
  • 抑制方法:谐振控制器、重复控制、陷波滤波器

关键数据:电流THD每降低1%,转矩脉动大约降低2-3%。我一般要求电流THD控制在5%以内,震动才勉强能接受。

2. PWM死区效应

死区是防止上下桥臂直通而插入的延迟时间。但死区会引入电压误差,导致电流波形畸变。尤其是在低速轻载时,死区效应特别明显。

我曾经在一个伺服项目里,死区设了2μs,低速运行时电流波形像锯齿一样。后来加了死区补偿,波形立马平滑了。

  • 死区影响:产生3次、5次、7次等低次谐波
  • 低速时更严重:因为死区时间占PWM周期的比例更大
  • 补偿方法:基于电流极性的死区补偿、脉冲宽度补偿
// 简单的死区补偿示例(基于电流极性)
if (ia > 0) {
    // 正电流时,补偿+死区时间
    comp_a = +dead_time;
} else {
    // 负电流时,补偿-死区时间
    comp_a = -dead_time;
}
// 实际应用中需要加滤波和滞回,防止过零振荡

我的经验:死区补偿不是万能的。电流过零检测不准,补偿反而会引入更大误差。我建议先测一下实际死区时间,很多MCU的死区设置值和实际值有偏差。

三、控制因素:算法自己“抖”出来的问题

这部分最让人头疼。机械和电气问题排查完了,震动还在,那八成是控制参数没调好。

1. PI参数不匹配

PI参数太激进,电流环会震荡;太保守,响应慢、有静差。我见过有人把电流环Ki设得特别大,结果电机低速时嗡嗡响,电流波形像波浪一样。

  • 比例增益过大:高频震荡,电流噪声大
  • 积分增益过大:低频震荡,转速波动
  • 参数不匹配:d轴和q轴PI参数差异大,导致转矩波动

我习惯用“带宽法”整定电流环。先估算电机电气时间常数,然后设定目标带宽,反推PI参数。这样至少能保证稳定性。

注意:不同转速下电机参数会变。高速时反电动势增大,电感饱和,PI参数可能需要在线调整。我一般在高速段加一个增益调度表。

2. 采样噪声

电流采样是FOC的“眼睛”。采样噪声直接进到电流环,经过PI放大,变成转矩波动。我遇到过用便宜霍尔电流传感器的情况,噪声峰峰值有50mA,电机低速时抖得不行。

  • 噪声来源:传感器本身噪声、ADC量化噪声、PCB走线耦合噪声
  • 影响:产生高频转矩脉动,尤其在低速时明显
  • 抑制方法:硬件滤波、软件滤波(移动平均、低通滤波)、过采样
// 简单的移动平均滤波
#define FILTER_WINDOW 8
uint16_t buf[FILTER_WINDOW];
uint8_t idx = 0;
int32_t sum = 0;

int16_t filter(int16_t sample) {
    sum -= buf[idx];
    buf[idx] = sample;
    sum += buf[idx];
    idx = (idx + 1) % FILTER_WINDOW;
    return (int16_t)(sum / FILTER_WINDOW);
}

我的建议:采样噪声不要全靠软件滤。硬件上先做好:差分采样、屏蔽线、远离功率走线。软件滤波会引入延迟,延迟大了电流环带宽就上不去。

3. 滤波器延迟与相位滞后

为了抑制噪声,我们加滤波器。但滤波器会引入延迟,导致电流环的相位裕度下降。严重时,系统会震荡。

我记得有一次,为了把电流噪声压下去,我加了一个二阶低通滤波器,截止频率设到500Hz。结果电流环带宽从2kHz掉到800Hz,电机一加速就抖。后来换成陷波滤波器,只滤掉特定频率的噪声,带宽保住了。

滤波器类型 延迟(@1kHz) 适用场景
一阶低通(1kHz截止) 约160μs 通用噪声抑制
二阶低通(1kHz截止) 约320μs 强噪声环境
陷波滤波器 约50μs(仅目标频段) 特定频率谐波抑制

总结一下:震动抑制,先查机械,再查电气,最后调控制。这个顺序不能乱。我见过太多人上来就调PID,调了三天发现是轴承坏了。嗯,别问我怎么知道的。

专注资料整理