4、位置与速度传感器:霍尔传感器原理与安装、增量式编码器接口电路、磁编码器(AS5047等)SPI读取
做FOC控制,说白了就是跟磁场较劲。你得知道转子在哪儿,才能让电流产生对的力矩。位置和速度传感器,就是控制器的眼睛。没了它,你连电机转没转都不知道。
我这些年摸过的传感器,从几毛钱的霍尔到几百块的磁编码器,各有各的脾气。今天咱们就聊聊这三种最常见的:霍尔传感器、增量式编码器、还有磁编码器。嗯,都是实战中绕不开的东西。
4.1 霍尔传感器:便宜但够用
霍尔传感器,原理其实挺简单。霍尔元件放在磁场里,会产生一个跟磁场强度成正比的电压。你把它贴在电机定子上,转子上的磁钢转过来,它就输出一个高低电平。
三个霍尔元件,相隔120度安装,就能输出三路方波信号。这三路信号组合起来,能告诉你转子在哪个60度扇区里。
关键点:霍尔传感器只能提供60度电角度的分辨率。对于FOC来说,这精度其实挺粗糙的。但好在它便宜、皮实,很多低速或对成本敏感的场景都在用。
我在一个电动滑板车项目里用过霍尔传感器。当时为了省成本,没上编码器。结果发现,霍尔信号在低速时抖动得厉害,导致FOC换相不顺畅。后来加了个简单的软件滤波,才算稳住。
安装注意事项
- 机械对齐:三个霍尔元件必须严格相隔120度电角度。装偏了,扇区判断就错,电机抖得像筛子。
- 磁钢极性:霍尔元件对磁场极性敏感。N极和S极过来,输出电平是反的。接线前先确认好。
- 上拉电阻:霍尔输出通常是开漏结构,必须接上拉电阻到MCU的IO电压。我习惯用4.7kΩ,具体看信号速率。
警告:霍尔传感器在电机高速旋转时,信号会变得很窄。如果MCU的中断响应不够快,容易丢脉冲。我曾经遇到过转速超过10000RPM时,霍尔信号直接丢失的情况。后来换了更快的比较器才解决。
4.2 增量式编码器:精度与成本的平衡
增量式编码器,说白了就是输出脉冲。A相和B相,相位差90度。通过判断谁先谁后,就知道正反转。再加上Z相,每转一圈输出一个脉冲,用来做零点校准。
接口电路其实不复杂。但要注意的是,编码器信号在长距离传输时容易受干扰。我建议用差分信号,比如RS-422标准。A+、A-、B+、B-、Z+、Z-,六根线,抗干扰能力好很多。
接口电路设计要点
| 元件 | 作用 | 推荐值 |
|---|---|---|
| 上拉电阻 | 将开漏输出拉高到MCU电平 | 2.2kΩ - 4.7kΩ |
| RC滤波器 | 滤除高频噪声 | 100Ω + 100pF |
| 施密特触发器 | 整形信号,消除抖动 | 74HC14 或 MCU内部施密特输入 |
| 差分接收器 | 长距离传输时使用 | AM26LS32 或 MAX3095 |
我做过一个伺服驱动器,编码器线长5米。一开始用单端信号,结果电机一启动,编码器读数就乱跳。后来换成差分接收器,问题立刻消失。嗯,长距离传输,差分是王道。
小技巧:MCU的定时器通常有编码器模式。比如STM32的TIMx,配置成编码器模式后,硬件自动处理A/B相计数,CPU不用管。我建议能用硬件就别用软件,省下来的CPU时间干点别的不好吗?
4.3 磁编码器(AS5047等):SPI读取
磁编码器,是这几年FOC控制器的标配。它直接输出绝对角度,精度高,还抗振动。AS5047是奥地利微电子(ams)的经典款,14位分辨率,SPI接口,用起来很顺手。
AS5047内部有个霍尔阵列,检测磁钢的旋转角度。它输出的是绝对角度值,0到16383(14位)。你通过SPI读出来,直接就能用,不需要像增量式编码器那样做累加。
SPI读取时序
AS5047的SPI读取很简单。主机发一个16位的命令帧,从机回一个16位的数据帧。命令帧的高8位是寄存器地址,低8位是读写标志。数据帧的高14位是角度值,低2位是状态位。
// AS5047 SPI读取示例(伪代码)
uint16_t AS5047_ReadAngle(void) {
uint16_t cmd = 0x3FFF; // 读取角度寄存器(0x3FFF)
uint16_t data;
// CS拉低
HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);
// 发送命令,同时接收数据
HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)&cmd, (uint8_t*)&data, 2, 100);
// CS拉高
HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
// 解析角度值(高14位)
return (data >> 2) & 0x3FFF;
}
这段代码看着简单,但实际用起来有几个坑。我一个个说。
避坑指南
- SPI时钟极性:AS5047要求CPOL=1, CPHA=1。也就是时钟空闲时为高,数据在时钟上升沿采样。配错了,读出来的数据全是乱的。
- CS片选:每次读取必须拉低CS,发完命令后拉高。不能一直拉着CS不放,否则芯片会进入错误状态。
- 数据对齐:返回的16位数据,角度值在高14位。你得右移2位才能拿到真正的角度。我刚开始做的时候忘了移位,结果角度值一直在0到4095之间跳,还以为芯片坏了。
- 磁钢安装:磁钢必须居中,且与芯片表面平行。偏了或者歪了,角度误差会很大。我建议用专门的磁钢安装夹具,手工贴的话,误差很难控制。
注意:AS5047的SPI速率最高能到10MHz。但实际布线时,如果线太长或者干扰大,建议降到5MHz以下。我有个项目,SPI线走了20cm,10MHz时数据偶尔出错,降到5MHz就稳了。
4.4 三种传感器对比
做个表格,一目了然。
| 传感器类型 | 分辨率 | 输出类型 | 成本 | 适用场景 |
|---|---|---|---|---|
| 霍尔传感器 | 60度电角度 | 开关量 | 低 | 低速、低成本、对精度要求不高的场合 |
| 增量式编码器 | 取决于线数(如1024线) | 脉冲(A/B/Z) | 中 | 中高速、需要较高精度的场合 |
| 磁编码器(AS5047) | 14位(0.022度) | SPI/ABI/PWM | 高 | 高精度、高可靠性、需要绝对位置的场合 |
我个人习惯,做产品时优先考虑磁编码器。虽然贵一点,但省心。霍尔传感器适合那种对成本极度敏感、转速又不高的场景。增量式编码器嘛,介于两者之间,但要注意长线传输的干扰问题。
4.5 知识体系图
下面这张图,把三种传感器的核心逻辑串起来了。你一看就明白。
这张图把三种传感器的核心特征都标出来了。你选型的时候,对着这张图,基本就能定下来用哪种。
我的建议:如果你是做新产品,预算允许的话,直接上磁编码器。省下来的调试时间,比那几十块钱的成本值多了。我这些年吃过太多传感器的亏,最后发现,一步到位反而是最省钱的。
公众号:蓝海资料掘金营,微信deep3321