2、编码器基础:编码器分类、分辨率与精度、常用接口
做 FOC 控制,编码器就是你的眼睛。眼睛看不清,电机就转不好。这个道理我做了好几年才真正体会到。
今天咱们把编码器的基础掰开揉碎讲清楚。你搞懂了这些,后面做换相和零位校准才能心里有底。
2.1 编码器分类:增量式 vs 绝对式
编码器分两大类:增量式和绝对式。说白了,一个只告诉你动了多少,一个直接告诉你现在在哪。
| 对比项 | 增量式编码器 | 绝对式编码器 |
|---|---|---|
| 工作原理 | 输出脉冲信号,通过计数得到位置变化 | 输出唯一编码,直接对应绝对位置 |
| 断电记忆 | 不记忆,上电需回零 | 记忆位置,上电即用 |
| 抗干扰 | 脉冲易受干扰,累计误差 | 抗干扰强,无累计误差 |
| 成本 | 低 | 高 |
| 典型应用 | 伺服电机、步进电机 | 机器人关节、高端数控 |
我个人习惯,做低成本 FOC 驱动器时用增量式,配合霍尔传感器做上电初始定位。但如果你做协作机器人或者高端伺服,绝对式是必须的——上电不用回零,安全又省事。
2.2 分辨率与精度——别搞混了
这两个概念很多人混为一谈。我面试工程师时经常问这个问题,能答清楚的不多。
分辨率是编码器能分辨的最小角度变化。比如 1000 线的增量式编码器,一圈 1000 个脉冲,四倍频后就是 4000 个计数,分辨率 = 360° / 4000 = 0.09°。
精度是实际位置和测量位置的偏差。它受机械安装、码盘刻划误差、信号处理电路影响。分辨率再高,精度跟不上也没用。
核心观点: 分辨率是理论上的细分能力,精度是实际上的测量误差。高分辨率 ≠ 高精度。
举个例子。我做过一个项目,用了 20 位绝对式编码器,分辨率高达 0.001°。结果装上去发现精度只有 0.1°。为什么?码盘偏心、轴系间隙、安装歪斜,这些机械误差把精度拉下来了。你想想看,花大价钱买高分辨率编码器,机械没做好,等于白花钱。
| 参数 | 分辨率 | 精度 |
|---|---|---|
| 定义 | 最小可检测角度变化 | 测量值与真实值的偏差 |
| 单位 | 线/圈、位(bit) | 角分、角秒 |
| 影响因素 | 码盘刻线数、电子细分 | 机械安装、码盘质量、信号噪声 |
| FOC 影响 | 决定速度环带宽上限 | 决定电流环相位精度 |
2.3 常用接口详解
接口决定了你怎么读数据,也决定了你的硬件成本和开发难度。我按使用频率从高到低讲。
2.3.1 ABZ 接口(增量式最常用)
A、B 两相正交信号,相位差 90°。通过判断 A 超前还是 B 超前,就能知道正反转。Z 相是零位脉冲,每圈一个,用于回零校准。
我习惯用 STM32 的定时器编码器模式直接读 ABZ,硬件自动计数,CPU 几乎零开销。代码很简单:
// STM32 定时器编码器模式配置示例
TIM_EncoderInterfaceConfig(TIM2, TIM_ENCODERMODE_TI12,
TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
TIM_EncoderInterfaceConfig(TIM3, TIM_ENCODERMODE_TI12,
TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
// 使能定时器
TIM_Cmd(TIM2, ENABLE);
TIM_Cmd(TIM3, ENABLE);
注意:ABZ 接口抗干扰能力一般,长线传输时建议加差分驱动(RS-422)。
2.3.2 UVW 接口(霍尔换相信号)
UVW 是三个霍尔信号,每 120° 一个。六个扇区,每个扇区 60°。主要用于无刷电机的初始换相。
做 FOC 时,UVW 信号可以用来做上电初始位置检测。我一般这样用:
- 上电读 UVW 状态,确定转子在哪个 60° 扇区
- 然后切换到 ABZ 或 SPI 做精细位置跟踪
- 如果只有 UVW 没有 ABZ,那就只能做方波控制,做不了正弦 FOC
2.3.3 SPI 接口(绝对式编码器主流)
SPI 接口的绝对式编码器,上电直接读位置数据。常见协议有 EnDat、SSI、BiSS 等。SPI 的好处是速度快、数据可靠、支持多圈。
我常用的 SPI 读取流程:
- 拉低片选 CS
- 发送读命令(通常是 16 位或 24 位)
- 接收位置数据(同时发送 dummy 时钟)
- 拉高片选 CS
- 解析数据,校验 CRC
// SPI 读取绝对式编码器示例(伪代码)
uint32_t read_encoder_position(void) {
uint32_t raw_data = 0;
CS_LOW();
// 发送读命令,同时接收数据
raw_data = SPI_ReadWrite(0x0000); // 16位或24位
CS_HIGH();
// 解析位置(根据编码器协议)
uint32_t position = raw_data & 0x3FFF; // 假设14位
return position;
}
注意:SPI 时钟频率不能太高,我一般控制在 1-5MHz,太高速容易受干扰。
2.3.4 BiSS 接口(高速绝对式编码器)
BiSS 是开源协议,速度比 SPI 快,支持更长的传输距离。它用差分信号传输,抗干扰能力强。
BiSS 的时序和 SPI 类似,但多了寄存器读写功能。你可以通过 BiSS 配置编码器的分辨率、滤波参数等。
| 接口 | 类型 | 最大速率 | 传输距离 | 典型应用 |
|---|---|---|---|---|
| ABZ | 增量式 | ~10 MHz | ~10m(差分) | 通用伺服 |
| UVW | 增量式 | ~100 kHz | ~5m | 霍尔换相 |
| SPI | 绝对式 | ~10 MHz | ~1m | 机器人关节 |
| BiSS | 绝对式 | ~50 MHz | ~50m(差分) | 高端数控 |
2.4 知识体系总览
下面这张图把编码器的基础知识串起来了。你对照着看,心里就有谱了。
这张图把编码器的分类、接口、关键参数串在了一起。你选型时,先看接口能不能匹配你的主控,再看分辨率够不够用,最后确认精度能不能满足 FOC 的电流环要求。