4、参数整定:换相角度偏移量计算、换相时序调整、死区补偿与滤波参数设置
好,咱们进入第四讲。前面几章我们把编码器原理、FOC 基本框架和换相逻辑都理了一遍。现在到了真正动手调参数的时候了。
这一章的内容,说白了就是让电机转得「准」和「稳」。我见过不少工程师,理论一套一套的,一上示波器就抓瞎。为什么?因为换相角度偏移量、时序、死区、滤波这几个参数是相互耦合的。你调一个,另外三个可能跟着变。
咱们一个一个来拆解。
4.1 换相角度偏移量计算
换相角度偏移量,也叫「对齐角」或「初始角偏移」。它的本质是:编码器的零位,和电机反电动势的零位,通常不在同一个位置。
你想想看,编码器安装的时候,你拧螺丝的手一抖,零点就偏了几度。这个偏差如果不补偿,FOC 给出的电流矢量方向就是错的。轻则电流大、力矩小,重则电机啸叫、甚至反转。
核心公式:
θ实际 = θ编码器 + θ偏移
其中 θ偏移 就是我们要找的常数。
怎么找?我常用的方法有两种:
- 直流注入法(静态):给电机定子通一个固定的直流电流矢量(比如 d 轴电流),让转子锁在一个已知的电气角度上。然后读取编码器角度,差值就是偏移量。
- 反电动势观测法(动态):让电机空载匀速旋转,用示波器抓反电动势过零点,和编码器信号对比。这个方法更准,但需要电机能转起来。
我个人习惯先用直流注入法粗调,再用反电动势法精调。我在项目里遇到过一台伺服电机,粗调完转起来还行,一加负载就抖。后来用反电动势法重新测,发现偏移量差了 3 度。就这 3 度,力矩波动从 5% 降到了 1% 以下。
小技巧:
直流注入时,电流不要太大。我一般设额定电流的 20%~30%。太大容易把转子拉过头,太小又锁不住。另外,注入时间至少保持 500ms,让机械振荡完全衰减。
4.2 换相时序调整
偏移量算对了,接下来就是时序。换相时序,说白了就是「什么时候该换相」。
在 FOC 里,换相不是靠霍尔信号跳变沿触发的,而是靠 SVPWM 在每个 PWM 周期里实时计算出来的。但这里有个坑:电流采样和 PWM 更新之间的延迟。
你想想看,你在这个 PWM 周期采了电流,算出了新的电压矢量,但等到下一个 PWM 周期才更新输出。这中间就差了 1~2 个 PWM 周期。如果电机转速很高,这个延迟就会导致换相滞后。
我曾经踩过的坑:
有一款高速主轴电机,额定转速 30000rpm。我用 10kHz 的 PWM 频率,算出来延迟对应的电气角度有 18 度。结果电机高速运行时电流波形畸变得厉害,力矩输出像过山车。后来我把 PWM 频率提到 20kHz,同时做了角度前馈补偿,才把波形拉回来。
时序调整的核心参数有两个:
| 参数 | 作用 | 调整方向 |
|---|---|---|
| PWM 更新模式 | 决定电流采样和 PWM 更新的对齐方式 | 优先使用「中心对齐」模式 |
| 角度前馈量 | 补偿计算延迟导致的相位滞后 | 随转速线性增加,需实测标定 |
具体做法:在低速时(< 1000rpm),前馈量可以设为 0。然后逐步提高转速,观察电流的 d 轴分量。如果 d 轴电流不为零,说明角度有偏差。调整前馈量,直到 d 轴电流归零。
4.3 死区补偿
死区,是逆变器上下管不能同时导通而故意插入的延迟。没有死区,上下管直通,MOSFET 瞬间冒烟。但死区也会带来问题:电压失真。
死区期间,电流通过续流二极管续流。这个续流路径会导致输出电压偏离理想值。偏离的大小和电流方向有关。说白了,死区引入了一个和电流极性相关的非线性误差。
补偿方法我总结为三步:
- 测量死区时间:从 MCU 的 PWM 输出到 MOSFET 栅极驱动,实际死区时间往往比软件设置的大。用示波器量一下栅极波形,确认真实死区。
- 计算补偿电压:补偿电压 = 死区时间 × 母线电压 × PWM 频率。这个值就是每个 PWM 周期里丢失的伏秒数。
- 根据电流极性叠加补偿:电流为正时,补偿电压加在输出上;电流为负时,减掉补偿电压。
代码示例(伪代码):
// 死区补偿计算
float dead_time = 0.5e-6; // 500ns 死区
float vbus = 24.0; // 母线电压 24V
float pwm_freq = 20000.0; // 20kHz
float v_comp = dead_time * vbus * pwm_freq; // 0.24V
// 根据电流方向补偿
if (ia > 0.01) {
va_comp = +v_comp;
} else if (ia < -0.01) {
va_comp = -v_comp;
} else {
va_comp = 0; // 过零附近不补偿,避免振荡
}
嗯,这里要注意:电流过零附近不要补偿。我试过硬补,结果在过零点附近引入了振荡,电流波形反而更差了。加一个 0.01A 的死区窗口,效果立竿见影。
4.4 滤波参数设置
滤波,主要是对电流采样和速度反馈做滤波。滤波太强,响应慢;滤波太弱,噪声大。这是个经典的 trade-off。
我一般分两层来考虑:
- 硬件滤波:在电流采样电路上加 RC 低通滤波。截止频率设为 PWM 频率的 1/10 左右。比如 20kHz PWM,RC 截止频率设在 2kHz。这能滤掉大部分开关噪声。
- 软件滤波:对 ADC 采样值做一阶低通滤波。滤波系数 α 是关键。
α 怎么选?我有个经验公式:
α = 1 - exp(-2π × fc × Ts)
其中 fc 是希望的截止频率,Ts 是采样周期。比如我想让电流环的截止频率在 500Hz,采样周期 50μs(20kHz),那么:
α = 1 - exp(-2π × 500 × 50e-6) ≈ 0.15
这个 α 值,既不会让电流环响应太慢,又能有效抑制高频噪声。
我的个人习惯:
速度环的滤波系数要比电流环大一些。因为速度反馈来自编码器,本身就有量化噪声。我通常把速度环的截止频率设在电流环的 1/5 到 1/10。比如电流环 500Hz,速度环就设在 50~100Hz。
最后,我把这一章的知识点整理成一张图,方便你对照着调参:
这张图把四个参数的关系和整定顺序都标出来了。你照着这个顺序调,基本不会出大问题。当然,实际项目中总会有意外。比如我遇到过一台电机,死区补偿做完后电流波形反而更差了。后来发现是电流采样电路有相位延迟,导致电流极性判断错了。嗯,这种问题就得靠示波器一点点排查了。