2、方波驱动实现:霍尔传感器的信号解读与换向逻辑
好,咱们接着聊。上一章我们把方波驱动的整体框架搭起来了,这一章要啃的,是方波驱动里最核心的「眼睛」——霍尔传感器。
说白了,没有霍尔信号,方波驱动就是个瞎子。你连转子在哪儿都不知道,怎么换向?
我个人习惯,在讲任何传感器之前,先问自己三个问题:
1. 它输出什么?
2. 我怎么读?
3. 读完了怎么用?
霍尔传感器,就是回答这三个问题的。
2.1 霍尔传感器到底在测什么?
霍尔传感器,本质上是个磁场开关。它检测的是垂直于芯片表面的磁场强度。
当磁铁的N极靠近时,输出低电平;S极靠近时,输出高电平。嗯,就这么简单。
但注意,这里有个坑——不同厂家的霍尔芯片,极性定义可能相反。我遇到过一款国产霍尔,手册上写的和实际表现完全反着来,折腾了我一整天。所以拿到新芯片,第一件事就是拿磁铁试一下,别信手册。
在无刷直流电机里,我们通常装三个霍尔传感器,间隔120度电角度。它们会输出三路方波信号,相位互差120度。
你想想看,三个霍尔,每个输出0或1,一共就有8种组合。其中6种是有效状态,对应转子在6个不同的扇区位置。剩下两种(全0和全1)是非法状态,要么是传感器坏了,要么是电机没装好。
2.2 霍尔信号的解读:从波形到扇区
咱们直接看波形,比说一万句话都管用。
假设电机匀速旋转,三个霍尔信号HA、HB、HC的波形是这样的:
HA: __|‾‾|__|‾‾|__|‾‾|__
HB: ‾‾|__|‾‾|__|‾‾|__|‾‾
HC: _|‾‾|__|‾‾|__|‾‾|__|
注意看,每个周期内,三个信号的电平组合会变化6次。每次变化,就对应转子转过60度电角度。
我把这6种状态整理成了表格,方便你对照:
| 扇区 | HA | HB | HC | 转子位置(电角度) |
|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0° ~ 60° |
| 2 | 1 | 0 | 0 | 60° ~ 120° |
| 3 | 1 | 1 | 0 | 120° ~ 180° |
| 4 | 0 | 1 | 0 | 180° ~ 240° |
| 5 | 0 | 1 | 1 | 240° ~ 300° |
| 6 | 0 | 0 | 1 | 300° ~ 360° |
这张表,建议你打印出来贴在工位上。我刚开始做电机驱动时,每次换向都要对着这张表看半天,后来背得滚瓜烂熟。
2.3 换向逻辑:从扇区到导通相
知道了转子在哪个扇区,接下来就是决定:该让哪两相通电?
方波驱动的换向逻辑,遵循一个基本原则:任何时候,只有两相绕组通电,第三相悬空。
为什么?因为这样产生的合成磁场方向最明确,转矩最大。
具体的换向表,我直接给出来:
| 当前扇区 | 导通相(正转) | 导通相(反转) |
|---|---|---|
| 1 | A+ B- | A- B+ |
| 2 | A+ C- | A- C+ |
| 3 | B+ C- | B- C+ |
| 4 | B+ A- | B- A+ |
| 5 | C+ A- | C- A+ |
| 6 | C+ B- | C- B+ |
注意看,正转和反转的导通相正好相反。这就是为什么改变电机转向,只需要把换向表反过来查就行。
我曾经犯过一个低级错误:换向表写对了,但PWM的占空比给错了方向。结果电机嗡嗡响就是不转,还发烫。后来用示波器一量,发现A相上管和B相下管同时导通了——这不就是短路嘛!
2.4 代码实现:从霍尔读到换向
理论说完了,咱们上代码。这是我在STM32上实际跑过的片段,稍微简化了一下:
// 霍尔信号读取(假设接在PA0-PA2)
uint8_t hall_value = (GPIOA->IDR & 0x07); // 只取低3位
// 换向表(正转)
const uint8_t commutation_table[8] = {
0, // 000 - 非法状态
0b001001, // 101 - 扇区1: A+B-
0b000110, // 100 - 扇区2: A+C-
0b010010, // 110 - 扇区3: B+C-
0b010100, // 010 - 扇区4: B+A-
0b100100, // 011 - 扇区5: C+A-
0b100001, // 001 - 扇区6: C+B-
0 // 111 - 非法状态
};
// 执行换向
uint8_t pwm_pattern = commutation_table[hall_value];
if (pwm_pattern == 0) {
// 非法状态,停机保护
motor_stop();
error_flag = 1;
} else {
// 将pwm_pattern写入定时器比较寄存器
TIM1->CCER = pwm_pattern;
}
这段代码的核心就两件事:读霍尔,查表换向。你看,是不是很简单?
但实际工程中,有个细节要注意:霍尔信号的抖动。
电机运行时,霍尔信号边沿会有毛刺,尤其是低速时。如果不做处理,换向会频繁抖动,导致电流波动、噪声增大。
我的做法是加一个简单的软件滤波:连续读到3次相同的霍尔值,才认为状态稳定了。代价是换向会延迟几十微秒,但对于方波驱动来说,完全能接受。
2.5 启动时的特殊处理
电机静止时,霍尔信号可能停在任意位置。这时候直接按换向表驱动,大概率会反转或者堵转。
怎么办?
我常用的方法是「三段式启动」:
- 定位阶段: 给任意两相通电,强制转子转到已知位置。保持0.5秒左右。
- 开环加速: 按照固定的换向序列,逐步提高换向频率,让电机转起来。
- 切入闭环: 当转速达到一定值(比如500RPM),切换到霍尔信号控制的闭环换向。
这个方法虽然土,但非常可靠。我做过一个风机项目,启动成功率100%,从来没失败过。
好了,这一章的内容就到这儿。霍尔信号解读和换向逻辑,是方波驱动的基石。下一章,我们会聊聊PWM调制和电流控制,让电机转得更稳、更安静。
记住,先跑通最简单的换向,再谈优化。别一上来就想搞FOC,先把方波玩明白。