共计 1732 个字符,预计需要花费 5 分钟才能阅读完成。
在电机控制系统中,编码器就像机器的 ” 眼睛 ”,它能实时反馈电机转轴的位置和速度信息。想象一下,如果没有编码器,我们就像蒙着眼睛开车,完全不知道车轮转了多少圈、速度有多快。而 ABZ 编码器作为最常用的增量式编码器,其中的 ” 线 ” 和 ” 四倍频 ” 技术直接决定了位置检测的精度。今天我们就来揭开它们的神秘面纱。

一、ABZ 信号中的 ’ 线 ’ 到底是什么?
-
物理意义 :编码器标称的 ” 线数 ”(如 100 线、500 线)指的是码盘上的物理刻线数量。每转一圈,编码器就会产生对应数量的脉冲信号。
-
AB 相输出 :
- A、B 两路信号相位差 90°(正交信号)
- Z 相每转一圈输出一个脉冲(零点信号)
-
例如 100 线编码器,转动一周产生 100 个 A 相脉冲和 100 个 B 相脉冲
-
基础分辨率 :
- 单频计数:只检测 A 相上升沿,每线 1 个计数(100 线 =100 脉冲 / 转)
- 四倍频模式:利用正交信号相位关系,每线可检测 4 个边沿(100 线 =400 脉冲 / 转)
二、四倍频技术如何提高精度?
- 相位关系解析 :
- 当 A 相领先 B 相 90°时表示正转
- 当 B 相领先 A 相 90°时表示反转
-
通过检测两个信号的上升沿和下降沿,将分辨率提高 4 倍
-
时序示意图 :
A 相: __|¯¯|____|¯¯|____|¯¯|__ B 相: ____|¯¯|____|¯¯|____|¯¯| ↑ ↑ ↑ ↑ 四倍频检测点 -
精度对比 :
- 单频计数:1.8°/ 脉冲(100 线编码器)
- 四倍频计数:0.45°/ 脉冲(同等编码器)
三、STM32 硬件实现实战
-
定时器编码器接口配置 (以 TIM3 为例):
// 初始化结构体 TIM_Encoder_InitTypeDef encoderConfig = {0}; encoderConfig.EncoderMode = TIM_ENCODERMODE_TI12; // AB 相均计数 encoderConfig.IC1Polarity = TIM_ICPOLARITY_RISING; // A 相上升沿触发 encoderConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; encoderConfig.IC1Prescaler = TIM_ICPSC_DIV1; // 不分频 encoderConfig.IC1Filter = 0x0F; // 数字滤波 (可抑制毛刺) // 类似配置 IC2(B 相)HAL_TIM_Encoder_Init(&htim3, &encoderConfig); HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL); // 启动编码器接口 -
关键寄存器说明 :
- SMCR 寄存器:设置编码器模式(TI1/TI2 边沿检测)
- CCMR1/2:配置输入捕获滤波参数
- CNT:16 位计数器(注意溢出处理)
四、开发中的避坑指南
- 信号抖动处理 :
- 硬件:在 AB 相添加 RC 滤波(典型值:1kΩ+100nF)
-
软件:启用定时器输入捕获滤波(如上例中 IC1Filter 参数)
-
转速计算防溢出 :
- 使用 32 位变量累加计数器溢出
- 示例代码:
static int32_t totalCount = 0; static uint16_t lastCnt = 0; void UpdatePosition() { uint16_t current = TIM3->CNT; int16_t delta = (int16_t)(current - lastCnt); totalCount += delta; lastCnt = current; }
五、进阶应用思考
- 倍频模式选择原则 :
- 低速高精度场景:优先四倍频(如机器人关节控制)
-
高速场景:可降级到单频或双频(避免计数器溢出)
-
Z 相校准技巧 :
- 在 Z 脉冲到来时重置计数器
- 结合机械限位实现绝对位置初始化
动手实验建议
准备材料:
– STM32 开发板(如 Nucleo 系列)
– 100 线 ABZ 编码器(带 5V 电源)
– 示波器(观察 AB 相信号)
实验步骤:
1. 分别配置单频和四倍频模式
2. 手动旋转编码器,记录 CNT 寄存器变化
3. 对比两种模式下的角度分辨率差异
4. 用示波器观察 AB 相正交波形
通过这个实验,你会直观感受到:四倍频模式下,同样的物理转动角度,计数器变化值是单频模式的 4 倍,这正是高精度控制的秘密所在。刚开始接触编码器时,我也曾被这些概念困扰,但实际动手测试后,一切就变得清晰明了。希望这篇指南能帮你少走弯路,快速掌握 ABZ 编码器的核心要点。
