震动来源分析:机械、电气与控制因素
做FOC无刷电机控制这些年,我踩过最多的坑就是震动问题。你想想看,明明算法调得挺顺,电流波形也漂亮,可电机一转起来就是嗡嗡响、抖得厉害。为什么会这样?说白了,震动来源就三大类:机械的、电气的、控制的。咱们一个一个掰开聊。
核心观点:震动不是单一原因造成的。我习惯先做“震动溯源”,把机械、电气、控制三类因素分开排查,否则你调死算法也白搭。
一、机械因素:看得见摸得着的震动源
机械震动是最直观的。电机一转,手摸上去就能感觉到。但很多人上来就调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,调了三天发现是轴承坏了。嗯,别问我怎么知道的。