首页 / 驱动算法 / 高级篇

齿槽转矩补偿:查表与谐波注入

为什么断电了转子还会"自己找位置"?齿槽转矩从哪来、怎么测量、又怎么用 q 轴前馈把它"抹平"。本文覆盖查表法与谐波注入法两种工程上最常用的补偿方案。

1. 什么是齿槽转矩?

把一台永磁同步电机(PMSM)断电,用手去拧转子——你会发现它在某些角度"有吸力",会自己停在某个固定位置,转动时一顿一顿的。这个"顿挫感"就来自齿槽转矩(Cogging Torque),也叫定位转矩(Detent Torque)

它的本质是永磁体与定子铁芯齿槽之间相互作用产生的转矩,与电流无关——即使电机完全不通电,它也照样存在。

💡 物理机理

定子有齿有槽,气隙磁导不是均匀的:穿过齿的磁路磁阻小,穿过的磁路磁阻大。转子永磁体的磁通"喜欢"走磁阻最小的路径。转子转到不同位置时,气隙中存储的磁场能量 W(θ) 随之变化。齿槽转矩就是磁场能量对角度的负导数:

Tcog(θ) = −∂W(θ) / ∂θ

磁路有"趋于最小磁阻"的倾向,所以转子总想转到让磁阻最小的位置——就像小球总想滚到谷底,齿轮总想"咬合"在齿对齿的位置。

一个容易混淆的点:齿槽转矩和另两类"位置相关转矩"是不同来源,补偿思路也完全不同:

转矩类型 产生根源 是否依赖电流 补偿思路
齿槽转矩 永磁体 ↔ 定子齿槽的磁阻变化 否(断电也存在) q 轴前馈:查表 / 谐波注入
反电动势谐波转矩 反电动势含 5/7/11 次谐波,与电流作用 是(随电流增大) 电流谐波注入(在 dq 注入反相谐波)
磁阻转矩(凸极性) Ld ≠ Lq,dq 电感差异 是(依赖 id·iq MTPA / 凸极转矩利用

2. 齿槽转矩的周期与谐波成分

齿槽转矩具有严格的周期性。设定子槽数为 Z、极对数为 p(即 2p 极),则齿槽转矩一个周期的机械角度为:

齿槽转矩机械周期

θcog,mech = 360° / LCM(Z, 2p)

其中 LCM 是最小公倍数。把周期换算到电角度域,齿槽转矩的基波阶次 k(一个电角度周期内包含的齿槽周期数)为:

电角度域基波阶次

k = 2Z / gcd(Z, 2p)

几种常见槽极组合的齿槽转矩阶次:

槽极组合 极对数 p 每转齿槽周期数 LCM(Z,2p) 电角度基波阶次 k
12槽10极 5 60 12
12槽8极 4 24 6
9槽6极 3 18 6
27槽6极 3 54 18
⚠️ 阶次高,是补偿的难点

齿槽转矩的基波阶次通常高达 6~18 次甚至更高。这意味着在一个电角度周期内,转矩要波动 6~18 个来回——频率高、变化快,对角度分辨率和电流环带宽都是考验。这也是齿槽转矩补偿比普通转矩脉动抑制更"挑剔"的原因。

实际波形不是纯正弦,而是基波及其整数倍谐波的叠加,齿槽转矩可以展开为谐波级数:

齿槽转矩谐波级数

Tcoge) = Σn=1 Tn · sin(n·k·θe + φn)

通常基波(n=1)占主导,2 次、3 次谐波依次衰减。工程上补偿到基波+2次/3次谐波,一般就能抑制 80% 以上的齿槽转矩。

3. 齿槽转矩带来哪些问题?

受益最大的场景:直驱关节电机、云台/吊舱、低速高精度定位台、医疗与精密仪器——凡是"要停在精确位置、低速要稳"的应用,齿槽转矩补偿都是性价比极高的一招。

4. 如何辨识齿槽转矩?

要补偿,先得知道齿槽转矩的波形。工程上有三种常用方法:

方法一:低速匀速,观测 q 轴电流波动(最常用)

让电机以很低的转速(如 1~10 rpm)匀速旋转,电流环稳定工作。这时iq 会随着转子角度周期性波动——因为电流环为了维持匀速,必须"顶住"齿槽转矩的扰动,iq 的波动 × 转矩常数 Kt 近似就是齿槽转矩的相反数。

从 iq 提取齿槽转矩

Tcoge) ≈ −( iqe) − mean(iq) ) · Kt

注意:速度要足够低,让反电动势谐波、惯性力矩、摩擦等干扰可忽略;采集的 iq 要减去直流分量(平均电磁转矩),剩下的周期波动才是齿槽转矩。

方法二:位置锁定步进法(精度最高)

用位置环把转子锁死在某个角度,等稳态后记录 iq;然后每步进 0.5°~1° 电角度再锁一次,扫完整个电角度周期。这样得到的是"静态"的齿槽转矩,不受动态过程干扰,精度最高,适合做基准标定。

方法三:台架转矩传感器直接测量

用测功机/转矩传感器直接测输出转矩。最直接,但需要台架设备,适合研发验证。

拿到 iq(θ) 波形后,用FFT 就能提取各阶谐波的幅值和相位:幅值+相位 → 谐波注入补偿的系数;原始波形去直流后取反 → 查表补偿的表项。

✅ 一个小技巧

标定时让 id = 0(id=0 控制),此时电磁转矩 Te ≈ 1.5·p·ψf·iq,与 iq 严格线性。若电机有凸极性(Ld≠Lq),id 不为零时还要考虑磁阻转矩项,会让标定变得复杂。

5. 补偿的核心思想:q 轴电流前馈

FOC 中(id=0 控制下)电磁转矩与 iq 近似线性:

电磁转矩

Te ≈ 1.5 · p · ψf · iq = Kt · iq

要抵消齿槽转矩,最直接的办法是在 iq 指令上叠加一个与齿槽转矩反相的补偿电流

q 轴电流前馈补偿

iq,ref = iq,speed + iq,compe),  其中 iq,compe) = −Tcoge) / Kt

补偿效果(理想情况)

Tcog(θ) ──反相──▶ iq,comp ──叠加──▶ 电流环 ──▶ 电磁转矩 = 期望转矩 − Tcog + Tcog = 期望转矩 ✔

💡 为什么用"前馈"而不是"反馈"?

齿槽转矩是与角度相关、可预知的确定性扰动,前馈直接把它"预习"出来抵消,不改变系统闭环特性、不影响稳定性。反馈(靠速度环/位置环去扛)会先有误差再纠正,且受环路带宽限制。前馈 + 反馈是标配:前馈负责"抹平",反馈负责"兜底"残余。

前馈能否奏效,取决于三个前提:① 角度 θe 精确;② 转矩常数 Kt 线性(无饱和);③ 电流环带宽足够高,能跟上补偿电流的变化。

6. 交互式演示:前馈把齿槽转矩"抹平"

下面这个演示模拟一台 PMSM 的齿槽转矩波形,你可以切换槽极组合看基波阶次变化、调节齿槽幅值和补偿谐波数,并直观对比补偿前后的转矩波形。左侧是转子与定子齿的啮合动画,右侧是电角度域转矩波形。

齿槽转矩补偿演示:查表/谐波前馈的效果
基波阶次:12次 · 未补偿峰峰值 2.80 · 补偿后 0.08 · 抑制比 35:1

观察要点:

7. 方案一:查表补偿(Look-Up Table)

查表法把齿槽转矩的完整波形"原样"存进一张表,运行时按当前电角度查表得到补偿电流。优点是不关心谐波结构,能补偿任意形状(包括非谐波的毛刺),精度上限高。

7.1 表怎么建

  1. 标定阶段(低速匀速或位置锁定)采集 iqe),减去直流分量
  2. 取反(因为前馈是反相),得到补偿电流表 iq,compe)
  3. 存为以电角度为索引、等间隔的表
⚠️ 表的分辨率

齿槽转矩基波阶次高达 6~18 次,一个电角度周期内就有好几个齿槽周期。若整表覆盖一个电周期且每 1° 一点(360 点),对 18 次基波,每个齿槽周期只剩 20 个点,插值误差明显。建议:每 0.5° 电角度一点(720 点/电周期),或表只覆盖"一个齿槽周期"(360°/k),用 θe mod (360°/k) 索引——这样能用更少的内存换更高的分辨率。

7.2 代码实现(C语言)

/* 齿槽转矩查表补偿:整电周期表,每 0.5° 一点,共 720 点 */ #define COGGING_LUT_STEP 0.5f /* 电角度步长(度) */ #define COGGING_LUT_LEN 720 /* 360 / 0.5 */ typedef struct { float table[COGGING_LUT_LEN]; /* 补偿电流 A,索引 = 电角度/步长 */ } cogging_lut_t; /* 运行时:按电角度查表 + 线性插值,得到补偿电流 */ float cogging_lut_get(const cogging_lut_t *lut, float theta_elec_deg) { float x = theta_elec_deg / COGGING_LUT_STEP; /* 折算成表索引(浮点) */ int i0 = ((int)x) % COGGING_LUT_LEN; /* 循环取模,覆盖整电周期 */ int i1 = (i0 + 1) % COGGING_LUT_LEN; float frac = x - (int)x; return lut->table[i0] * (1.0f - frac) + lut->table[i1] * frac; } /* 电流环内使用:iq_ref = iq_speed + cogging_lut_get(&cog_lut, theta_elec_deg); */

表项在标定时生成,标定一次即可反复使用。若现场工况变化(温度、装配、磨损),可周期性重新标定,或改在线自适应(见第 8 节)。

8. 方案二:谐波注入补偿(Harmonic Injection)

谐波注入法先把齿槽转矩展开为谐波级数,只取前 N 阶,在 iq 指令里注入反相谐波:

谐波注入补偿

iq,compe) = Σn=1N An · sin(n·k·θe + φn)

/* 齿槽转矩谐波注入补偿 */ #define COGGING_MAX_ORDER 4 typedef struct { uint8_t order[COGGING_MAX_ORDER]; /* 谐波阶次(电角度域),如 12, 24, 36, 48 */ float amp[COGGING_MAX_ORDER]; /* 幅值 A(已含反相符号),单位 A */ float phase[COGGING_MAX_ORDER]; /* 相位 φ,单位 rad */ uint8_t n; /* 实际使用的阶数 */ } cogging_harmonic_t; float cogging_harmonic_comp(const cogging_harmonic_t *ch, float theta_elec) { float comp = 0.0f; for (uint8_t i = 0; i < ch->n; i++) { comp += ch->amp[i] * sinf(ch->order[i] * theta_elec + ch->phase[i]); } return comp; } /* 电流环内使用:iq_ref = iq_speed + cogging_harmonic_comp(&cog_harm, theta_elec); */
✅ 进阶:在线自适应谐波补偿

幅值和相位会随温度、老化漂移。工程进阶做法是运行时用扰动观测器估计残余转矩扰动,再用 RLS(递推最小二乘)/ LMS(最小均方)在线更新 An、φn,让补偿"自动跟随"工况变化。这样标定一次,长期自愈,是产品级的标准方案。

9. 两种方案对比

对比项 查表补偿(LUT) 谐波注入补偿
补偿精度 高,能补偿任意波形(含毛刺/非谐波成分) 只补偿选定阶次,非谐波成分无法处理
内存占用 大(720 点 float ≈ 2.9KB) 极小(每阶 3 个参数)
标定 需要标定,波形直接入库 需要 FFT 标定,也可在线自适应
波形平滑度 线性插值平滑,但表边界可能有拼接误差 数学上天然平滑,无拼接问题
适用场景 高精度定位、波形复杂、MCU 内存宽裕 资源受限、需要自适应、波形规整

10. 工程要点与常见误区

要点 1:角度精度是命门

齿槽转矩基波阶次高达 12、18 次,角度误差在谐波上会被放大 n·k 倍。例如 18 次基波,1° 电角度误差会在补偿中引入与 sin(18·θ) 同频的显著相位偏差,补偿不当反而引入新脉动。务必用高分辨率编码器(增量式要细分),最好用绝对位置,并保证角度同步采样。

要点 2:电流环带宽决定有效转速范围

补偿信号频率 = n·k·felec,随转速线性升高。当补偿频率接近或超过电流环带宽时,前馈电流来不及建立,还会引入相位滞后。因此齿槽转矩补偿在低速/位置场景收益最大;高速时主要靠惯性滤波作用,齿槽转矩影响自然减小(但噪音问题仍可能存在)。

要点 3:别和其它补偿"重复叠加"

死区补偿、反电动势谐波补偿、齿槽转矩补偿都可能在 iq/id 前馈上叠加。叠加时注意分工不重复、不冲突,否则同一个扰动被补偿两次,反而过补偿。建议齿槽补偿单独一表/一谐波组,与其它前馈分离管理。

要点 4:温度会改变齿槽转矩

永磁体磁通随温度变化(钕铁硼剩磁温漂约 −0.1%/℃),齿槽转矩幅值随之变化。工作温度范围大时,需分段标定或在线自适应,否则标定值会慢慢失配。

误区 1:齿槽转矩 = 磁阻转矩

不是。磁阻转矩来自 Ld≠Lq 的凸极性,依赖电流;齿槽转矩来自永磁体与齿槽的磁阻变化,与电流无关。两者位置相关但机理、补偿方法都不同。

误区 2:补偿表用机械角度索引

查表必须用电角度(或按齿槽周期折算后的角度)。机械角度下不同极对数电机会得到完全不同的表,且换极对数电机就失效。

误区 3:角度误差无所谓

恰恰相反。高阶谐波把角度误差放大了 n·k 倍,角度不准会让补偿"帮倒忙"。这是齿槽转矩补偿最容易翻车的地方。

误区 4:高速也满幅补偿

补偿信号频率超过电流环带宽后,前馈失效且引入滞后。高速时应按需降低补偿幅值或关闭补偿,避免负优化。

误区 5:齿槽转矩是固定的

温度、磨损、装配应力都会改变它。产品级方案应具备定期重标定在线自适应能力。

11. 小结

  1. 齿槽转矩是永磁体与定子齿槽磁阻变化产生的定位转矩,与电流无关,断电也存在
  2. 周期由 LCM(Z, 2p) 决定,电角度域基波阶次 k = 2Z/gcd(Z, 2p),典型 6/12/18 次,是补偿难度的根源
  3. 影响:断电定位不准、低速爬行、位置精度下降、噪音振动
  4. 辨识:低速匀速观测 iq 波动 + FFT(或位置锁定步进、台架转矩传感器)
  5. 补偿核心是 q 轴电流前馈:iq,ref 叠加 −Tcog(θ)/Kt
  6. 两种工程方案:查表法(精度高、任意波形)与谐波注入法(参数少、可自适应)
  7. 成败关键:角度精度、电流环带宽、温度自适应、不与其它前馈重复叠加

下一篇我们聊聊角度反馈的精度——磁编码器非线性校准,理解磁编角度误差从哪来、对 FOC 影响多大,以及如何把读数校准准。