3. 离线校准方法:直流定位法(DC alignment)的原理与实现步骤
直流定位法,圈里人常叫它 DC alignment。这名字听着挺唬人,其实原理特别朴素——你给电机定子绕组通一个固定的直流电流,让它自己产生一个静止的磁场,把转子硬生生“拽”到一个已知的电气角度上。
说白了,就是暴力对零位。我刚开始做 FOC 的时候,总觉得这方法太粗暴,会不会把电机搞坏?后来发现,只要参数选对,这反而是最可靠、最不容易出幺蛾子的校准方式。
3.1 原理:为什么直流能把转子“锁”住?
咱们先回忆一下电机的基本原理。你给三相绕组通入直流电,比如 A 相接正,B 相和 C 相接负,定子内部就会形成一个固定的合成磁动势矢量。这个矢量指向一个确定的方向,比如 0° 电角度。
转子是永磁体,它自己也有磁场。两个磁场之间会产生转矩,让转子转到和定子磁场对齐的位置。一旦对齐,转矩就变成零,转子就停在那儿不动了。
核心结论: 直流定位法就是利用磁阻最小原理,让转子自然收敛到定子磁场的方向。此时,编码器读到的位置,就是我们要找的零位偏移量。
这里有个细节我提一下。你通入的电流必须足够大,能克服电机的齿槽转矩和负载摩擦力。否则转子可能卡在半路上,对不准。嗯,后面我会讲电流怎么选。
3.2 实现步骤:手把手教你做 DC alignment
我个人习惯把 DC alignment 拆成 5 步。每一步都有坑,我踩过不少,下面给你列清楚。
- 步骤一:确定注入电流矢量方向
通常我们选择 A 相轴线作为 0° 参考。也就是让定子磁场指向 A 相绕组的正方向。对应的电流分配是:
I_A = I_ref,I_B = -0.5 * I_ref,I_C = -0.5 * I_ref。这样合成矢量就在 0°。 - 步骤二:注入直流电流
通过 PWM 控制逆变器,把上面算好的电流注入到电机绕组里。注意,要使用电流闭环控制,确保实际电流等于目标值。
- 步骤三:等待转子稳定
转子从当前位置转到目标位置需要时间。你需要等待它完全停稳。怎么判断停稳?看编码器读数,连续 N 个采样周期的数值变化小于 1 个脉冲,就算稳定了。
- 步骤四:记录编码器位置
稳定后,读取编码器的原始计数值。这个值就是对应 0° 电角度的位置。
- 步骤五:计算偏移量并保存
偏移量 = 0° 对应的编码器值。把这个值写入非易失性存储器(比如 Flash 或 EEPROM),以后每次上电直接读取。
我的经验: 步骤三里,不要只靠延时等待。我见过有人延时 500ms 就认为稳定了,结果负载大的时候根本没到位。一定要用编码器读数做判稳条件,这才是工程思维。
3.3 注入电流大小选择:小了拉不动,大了烧电机
电流选多大?这是 DC alignment 里最关键的参数。选小了,转子被齿槽转矩卡住,对不准;选大了,绕组发热严重,搞不好会烧 MOS 管。
我一般按下面这个逻辑来选:
| 考虑因素 | 说明 | 推荐做法 |
|---|---|---|
| 齿槽转矩 | 电机本身的定位力矩,需要克服 | 电流产生的转矩至少是齿槽转矩的 3 倍 |
| 负载摩擦力 | 外部负载带来的阻力 | 如果带载校准,需要额外增加电流 |
| 绕组热容量 | 电流流过绕组会发热 | 定位时间短,可以用额定电流的 50%~80% |
| 磁路饱和 | 电流太大,铁芯饱和,定位精度反而下降 | 不要超过额定电流的 100% |
我常用的经验公式:
I_dc_alignment = 0.7 * I_rated
其中 I_rated 是电机的额定相电流(有效值)
举个例子,一个额定电流 5A 的电机,我一般用 3.5A 做 DC alignment。这个值既能克服大多数齿槽转矩,又不会让绕组在几秒钟内过热。
我曾经踩过的坑: 有一次给一个 200W 的小电机做校准,我图省事用了 1A 电流。结果转子死活对不准,编码器读数来回跳。后来一查,那个电机的齿槽转矩特别大,1A 根本拉不动。换成 2.5A 后,一次就稳了。
3.4 定位时间设定:不是越长越好
定位时间包括两部分:转子从初始位置转到目标位置的动态过程时间,加上稳定判定的等待时间。
动态过程时间取决于电机的机械时间常数和负载惯量。对于大多数中小功率电机(几十瓦到几百瓦),这个时间通常在 100ms~500ms 之间。
稳定判定时间我一般设 50ms~100ms。也就是连续 5~10 个采样周期(每个周期 10ms)编码器读数都不变,就认为稳定了。
总定位时间建议:
- 空载:200ms ~ 500ms
- 带轻载:500ms ~ 1s
- 带重载:1s ~ 2s
你可能会问,时间设长一点不是更保险吗?理论上是的,但实际工程中要考虑产线节拍。如果每个电机校准花 2 秒,一天生产 10000 台,那就是 5.5 小时的纯校准时间。所以,在保证精度的前提下,时间越短越好。
3.5 整体流程:一张图看懂
下面这张 SVG 流程图,把 DC alignment 的完整逻辑串起来了。你可以对照着看,每一步做什么、判断条件是什么,一目了然。
3.6 几个容易忽略的细节
最后,我再唠叨几个实战中容易翻车的地方:
- 电流环带宽要够: 注入电流时,电流环的带宽至少要 1kHz,否则实际电流跟不上指令,定位效果会打折扣。
- PWM 死区补偿: 小电流时,死区效应会导致电流波形畸变。我建议在 DC alignment 时把死区补偿打开,或者干脆用较大的电流来规避这个问题。
- 多极对电机: 对于极对数大于 1 的电机,DC alignment 只能确定一个电角度周期内的位置。如果编码器是多圈绝对值型,还需要额外的逻辑来确认机械零位。
- 温度影响: 绕组电阻随温度变化,同样的电压指令在不同温度下产生的电流不一样。所以一定要用电流闭环,不要用开环电压。
我的习惯: 每次做完 DC alignment,我都会把编码器值打印出来看一眼。如果连续做 5 次,每次偏差都在 1~2 个脉冲以内,说明校准质量很好。如果偏差很大,那就要检查电流是否稳定、机械连接是否松动。
好了,DC alignment 的原理和实现就讲到这里。这个方法虽然简单,但用好了,能解决 FOC 里 80% 的角度偏差问题。剩下的 20%,我们后面几章再聊。