这两个是单片机/嵌入式开发中最常用的两种编码器计数方式,我用最直白、最实用的方式给你讲清楚区别、适用场景和优缺点。
一、先搞懂两个概念
-
旋转编码器(正交编码器) 输出 A/B 两相脉冲,用来测转速、方向、位置。 每转一圈输出固定个数脉冲,需要计数 + 判断方向。
-
普通旋转编码器计次(GPIO 中断/轮询) 用普通 IO 口接编码器,靠外部中断 / 软件轮询数脉冲。
-
定时器编码器计次(硬件编码器模式) 用单片机定时器的硬件编码器接口,硬件自动计数,CPU 完全不参与。
二、核心区别(最重要的一张表)
| 对比项 | 普通旋转编码器计次(软件) | 定时器编码器计次(硬件) |
|---|---|---|
| 使用资源 | 普通 GPIO 口 | 专用定时器通道(TIMx_CH1/CH2) |
| 计数方式 | 软件中断/轮询,CPU 手动数 | 硬件自动计数,CPU 0 开销 |
| 方向判断 | 软件读 A/B 相位判断 | 硬件自动判断,自动加减计数 |
| 最高支持转速 | 低(高速容易丢脉冲) | 极高(单片机主频级速度) |
| CPU 占用 | 高(脉冲多会占满 CPU) | 几乎为 0 |
| 精度/稳定性 | 一般,高速易丢步、抖动 | 极高,不丢脉冲、无误差 |
| 代码复杂度 | 高(要写中断、消抖、判向) | 极低(初始化后直接读数值) |
| 适用场景 | 低速、低精度、简单旋钮 | 电机测速、高精度定位、高速旋转 |
三、详细通俗解释
1. 普通旋转编码器计次(软件方式)
-
原理:把 A/B 相接到普通 IO,脉冲一来就触发中断,软件里
count++/count--。 - 优点:
-
任意 IO 口都能用
-
简单小项目够用
-
- 缺点:
-
高速必丢脉冲(CPU 反应不过来)
-
要自己写方向判断
-
要处理抖动、干扰
-
中断太多会拖慢整个程序
-
适合:手动旋钮、低速调节、简单计数。
2. 定时器编码器计次(硬件方式)
-
原理:单片机定时器内部有专门的硬件正交编码器模块,A/B 脉冲直接进硬件电路,自动计数、自动判方向。
-
CPU 只需要定时读一下计数器的值就行,完全不参与计数过程。
- 优点:
-
绝不丢脉冲(硬件级响应)
-
支持极高转速
-
不占 CPU
-
自带滤波、抗干扰
-
代码极简单
-
- 缺点:
-
必须用定时器专用引脚
-
适合:电机测速、云台、机器人、数控设备、高精度位置采集。
四、最简单的判断:你该用哪种?
-
低速手动旋钮 → 普通 GPIO 中断计次就行
-
电机、高速旋转、高精度 → 必须用定时器硬件编码器模式
五、一句话终极总结
-
软件计次:CPU 亲自数脉冲,累、慢、容易漏。
-
定时器硬件编码器计次:硬件全自动数脉冲,CPU 躺平,又快又准。
总结
-
普通计次 = 软件计数 → 低速、简单、占用CPU
-
定时器编码器计次 = 硬件计数 → 高速、精准、零CPU开销
-
做电机/高精度项目一定要用定时器编码器模式

408

被折叠的 条评论
为什么被折叠?



