3、换相原理:电机换相的基本概念、霍尔传感器换相、无传感器换相
换相,说白了就是让电机转子一直转下去的关键动作。你想想看,直流无刷电机如果没有换相,转子转到某个位置就卡住了,根本转不起来。我刚开始接触伺服系统时,总觉得换相不就是按顺序通电嘛,后来踩过坑才明白——换相的时机、精度、鲁棒性,直接决定了伺服系统的性能上限。
3.1 换相的基本概念
什么是换相?简单说,就是根据转子位置,切换定子绕组的通电顺序,使定子磁场始终超前转子磁场一个角度,从而产生持续的转矩。
对于三相无刷直流电机(BLDC),标准的六步换相法是这样的:
- 每个电周期分为6个扇区,每个扇区60°电气角度
- 每个扇区内,两相导通,一相悬空
- 每60°切换一次通电组合
核心公式:换相频率 = (电机转速 × 极对数) / 60 × 6
举个例子:一台4对极的电机,转速3000 RPM,换相频率 = (3000 × 4) / 60 × 6 = 1200 Hz。也就是说,每秒钟要换相1200次。
换相的核心要素有三个:
- 位置检测——知道转子当前在哪个扇区
- 换相逻辑——根据位置决定下一组导通相
- 换相执行——PWM输出切换,电流换向
我在项目中遇到过一个问题:换相逻辑写对了,但电机低速时抖动严重。后来发现是位置检测的精度不够,换相点偏移了。嗯,这里要注意——换相不是越快越好,而是要准。
3.2 霍尔传感器换相
霍尔传感器换相,是最经典、最可靠的方式。三个霍尔元件间隔120°安装,输出三路高低电平信号,组合起来就是6种状态,正好对应6个扇区。
| 霍尔状态 (Ha:Hb:Hc) | 对应扇区 | 导通相 (正极:负极) |
|---|---|---|
| 101 | 扇区1 (0°~60°) | A+:B- |
| 100 | 扇区2 (60°~120°) | A+:C- |
| 110 | 扇区3 (120°~180°) | B+:C- |
| 010 | 扇区4 (180°~240°) | B+:A- |
| 011 | 扇区5 (240°~300°) | C+:A- |
| 001 | 扇区6 (300°~360°) | C+:B- |
个人经验:霍尔安装时,一定要做一次"霍尔校准"。我习惯的做法是:手动转动转子到某个已知位置,读取霍尔值,然后建立霍尔状态与电气角度的映射表。很多新手直接套用标准表,结果电机反转或者换相错乱——其实就是霍尔安装角度有偏差。
霍尔换相的优点很明显:
- 启动可靠,零速也能检测位置
- 算法简单,MCU资源占用少
- 抗干扰能力强
缺点也有:
- 需要额外安装霍尔传感器,增加成本和体积
- 霍尔元件有温度漂移,高温下精度下降
- 安装精度要求高,否则换相点偏移
避坑指南:我曾经在一个项目中,霍尔信号线走线过长,没有做滤波处理。结果电机高速运行时,霍尔信号上叠加了严重的共模干扰,导致换相错乱,电机直接"飞车"。后来在霍尔信号线上加了RC低通滤波(1kΩ + 10nF),问题解决。
3.3 无传感器换相
无传感器换相,说白了就是不用霍尔,通过检测电机的反电动势(BEMF)来推算转子位置。为什么需要这个技术?因为有些场合装不了霍尔——比如压缩机内部是密封的,或者电机尺寸太小装不下传感器。
无传感器换相的核心原理:
- 电机旋转时,未通电的那一相会产生反电动势
- 反电动势的过零点,正好对应换相点
- 检测到过零点后,延迟30°电气角度,执行换相
具体实现方式有三种:
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 端电压检测法 | 检测悬空相端电压与中性点电压的比较 | 中高速运行,需要中性点引出 |
| 虚拟中性点法 | 用三个电阻构建虚拟中性点 | 最常用,不需要引出中性点 |
| 相电压比较法 | 直接比较三相端电压 | 低成本方案,精度较低 |
关键点:无传感器换相最大的挑战是启动。零速时没有反电动势,无法检测位置。我常用的启动策略是"三段式启动":
- 预定位——给任意两相通电,把转子拉到已知位置
- 开环加速——按固定换相频率加速,直到反电动势足够大
- 切换闭环——检测到稳定的过零点后,切换到反电动势换相
无传感器换相的代码实现,核心是过零点检测。我贴一段伪代码,你感受一下:
// 无传感器换相 - 过零点检测
// 假设当前导通相为 A+, B-,C相悬空
void bemf_zero_cross_detect(void) {
// 1. 采样C相端电压
uint16_t v_c = adc_read(CHANNEL_C);
// 2. 获取虚拟中性点电压
uint16_t v_n = (v_a + v_b + v_c) / 3;
// 3. 比较过零点
if (v_c > v_n && last_v_c <= last_v_n) {
// 上升沿过零点
zero_cross_flag = 1;
zero_cross_timer = 0;
}
// 4. 延迟30°后换相
if (zero_cross_flag) {
zero_cross_timer++;
if (zero_cross_timer >= DELAY_30_DEG) {
commutation_next();
zero_cross_flag = 0;
}
}
// 保存上次采样值
last_v_c = v_c;
last_v_n = v_n;
}
我建议:无传感器换相的延迟30°角度,不要用固定延时。因为转速变化时,30°对应的时间是变化的。我习惯用定时器捕获过零点,然后根据当前转速动态计算延迟时间。这样在加减速过程中,换相点才准确。
无传感器换相的优缺点:
- 优点:无需传感器,成本低,可靠性高(没有传感器故障)
- 缺点:启动复杂,低速性能差,负载突变时容易失步
避坑指南:我曾经在一个风机项目中,无传感器换相在高速时一切正常,但低速(低于500 RPM)时频繁失步。排查了很久,发现是PWM占空比太低时,反电动势信号被PWM开关噪声淹没了。解决方案是:在低速段采用"PWM关断期间采样"的策略,避开开关噪声。
3.4 霍尔换相 vs 无传感器换相
两种方案没有绝对的好坏,只有适合不适合。我整理了一个对比表:
| 对比项 | 霍尔换相 | 无传感器换相 |
|---|---|---|
| 启动性能 | 优秀,零速可换相 | 较差,需要三段式启动 |
| 低速性能 | 优秀 | 较差,低于500 RPM不稳定 |
| 高速性能 | 良好,受限于霍尔响应速度 | 优秀,反电动势信号强 |
| 成本 | 较高(传感器+线束) | 低(仅需电阻分压) |
| 可靠性 | 传感器可能故障 | 无传感器,可靠性高 |
| 算法复杂度 | 低 | 高 |
我个人习惯是:如果空间允许、成本不敏感,优先用霍尔换相——省心、可靠。只有在霍尔装不了或者成本压力大的时候,才上无传感器方案。你想想看,一个伺服系统如果连启动都抖,客户能接受吗?
嗯,这一章的内容就到这里。换相原理是伺服系统的基础,理解了它,后面讲编码器换相时你才能明白——为什么编码器比霍尔更精准,为什么无传感器方案在某些场景下还是不如带编码器的方案。