3. 离线标定方法一:直流注入法
直流注入法,说白了就是给电机定子通一个直流电压,让转子自己跑到一个已知位置去。这个方法我用了很多年,简单、可靠,尤其适合产品初期的角度标定。你想想看,电机刚上电时,转子在哪儿你根本不知道,但通过直流注入,就能让转子乖乖地转到你想要的位置。
3.1 基本原理
直流注入法的核心思想其实很简单:
- 给电机某两相(比如U相和V相)通入直流电流
- 定子会产生一个固定的磁场方向
- 转子永磁体会被这个磁场吸引,转到与定子磁场对齐的位置
- 此时记录编码器或霍尔传感器的读数,就是初始电角度
我在项目中遇到过一个问题:有些工程师以为随便通个电流就行,结果转子转不到位,角度偏差很大。嗯,这里要注意,直流注入的电流大小和方向都是有讲究的。
关键点:直流注入法标定的是转子磁极的d轴位置。当转子与定子磁场完全对齐时,电角度为0°(或某个已知角度)。
3.2 操作步骤
我个人习惯把直流注入法分成五个步骤,每一步都不能省:
- 电机断电确认——确保电机处于自由状态,没有外部负载拖拽
- 选择注入相序——通常选择U-V相注入,V-W相或W-U相也可以,但需要对应好角度关系
- 施加直流电压——从0开始缓慢增加,直到转子开始转动并稳定
- 等待转子稳定——一般需要1-3秒,转子会有一个微小的振荡然后停稳
- 记录位置传感器读数——此时读数就是初始电角度
我曾经在调试一个60kW的永磁同步电机时,发现转子总是停不稳。后来发现是电流给的太大,转子过冲了。所以电流大小要适中,能让转子转动就行,别太大。
3.3 注入电流的选择
电流选多大?这个没有固定公式,但我给你一个经验范围:
| 电机类型 | 额定电流比例 | 注入时间 | 注意事项 |
|---|---|---|---|
| 小功率(<100W) | 10%-20% | 1-2秒 | 电流太小可能转不动 |
| 中功率(100W-5kW) | 5%-15% | 2-3秒 | 注意电机发热 |
| 大功率(>5kW) | 3%-8% | 3-5秒 | 必须监控温度 |
警告:直流注入时间不宜过长!长时间通直流电会导致电机绕组发热,严重时可能烧毁电机。我见过有人为了省事,通10秒直流,结果电机冒烟了。
3.4 代码实现
下面是我常用的直流注入标定代码片段。注意,这里用的是SVPWM的矢量控制框架:
// 直流注入标定函数
// 输入:注入相选择(0:U-V, 1:V-W, 2:W-U)
// 输出:标定后的电角度值
float dc_injection_calibration(uint8_t phase_sel) {
float angle_calibrated = 0.0f;
// 1. 关闭电流环,直接控制占空比
svpwm_disable_current_loop();
// 2. 根据注入相选择,设置固定占空比
switch(phase_sel) {
case 0: // U-V相注入
// U相正,V相负,W相悬空
svpwm_set_duty(0.15f, -0.15f, 0.0f);
break;
case 1: // V-W相注入
svpwm_set_duty(0.0f, 0.15f, -0.15f);
break;
case 2: // W-U相注入
svpwm_set_duty(-0.15f, 0.0f, 0.15f);
break;
}
// 3. 等待转子稳定(建议200ms以上)
delay_ms(500);
// 4. 读取编码器或霍尔位置
angle_calibrated = encoder_get_position();
// 5. 关闭注入,恢复自由状态
svpwm_set_duty(0.0f, 0.0f, 0.0f);
svpwm_enable_current_loop();
return angle_calibrated;
}
技巧:实际应用中,我建议做三次标定取平均值。每次标定后让电机自由转动一下,再重新注入。这样可以消除机械摩擦带来的重复性误差。
3.5 直流注入法的核心流程
为了让你更直观地理解整个过程,我画了一张流程图:
3.6 优缺点分析
直流注入法不是万能的,它有明显的优点和缺点:
| 优点 | 缺点 |
|---|---|
| 实现简单,不需要复杂算法 | 电机必须能自由转动 |
| 标定精度较高(±1°以内) | 有负载时无法使用 |
| 适用于各种永磁同步电机 | 标定时间较长(几秒) |
| 不需要额外的硬件 | 电机发热问题 |
我的建议:如果你的电机在出厂前可以做一次空载标定,直流注入法是最省事的方案。但如果是现场标定或者电机已经装在设备里了,那就得考虑其他方法了。
3.7 避坑指南
最后,我把自己踩过的坑总结一下,你遇到了可以直接对照:
- 转子没转到位——我曾经遇到过电机摩擦力矩太大,给的电流不够,转子只转了30°就卡住了。解决办法:先用手转动一下转子,确认机械部分没问题。
- 角度重复性差——每次标定结果都不一样?大概率是电流波动太大。检查一下直流电源或者PWM的稳定性。
- 标定完电机跑飞——这个我印象很深,有一次标定完忘了把角度偏移量写入参数,结果电机一启动就飞车了。所以标定完一定要保存参数!
- 霍尔信号跳变——如果用的是霍尔传感器,标定完要检查一下霍尔边沿是否与标定角度对应。我曾经遇到过霍尔安装偏差导致角度跳变的问题。