1. EC11旋转编码器硬件解析
EC11旋转编码器是工业控制领域最常见的增量式编码器之一,它的机械结构设计非常巧妙。我拆解过多个不同品牌的EC11,发现内部结构大同小异——核心部件是一个带有导电触点的旋转圆盘和两个弹性接触片。当你旋转旋钮时,触点会与A、B相位的接触片交替接通,产生特定的脉冲序列。
实际测量波形时,用示波器可以清晰看到:顺时针旋转时,A相位的上升沿总是领先B相位90度;逆时针时则相反,B相位会领先A相位90度。这种相位差关系是方向判断的关键。我在早期项目中犯过一个错误:没有给编码器引脚加上10kΩ上拉电阻,导致信号边沿不清晰,经常误触发。后来加了RC滤波(典型值1kΩ+0.1μF)后稳定性大幅提升。
EC11的机械特性也值得注意:
- 每旋转一格会产生4个电信号边沿(A上升、A下降、B上升、B下降)
- 机械寿命通常在10万次旋转以上
- 触点抖动时间约5-10ms,需要硬件或软件消抖
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. STM32定时器编码器模式深度剖析
STM32的定时器编码器模式简直就是为旋转编码器量身定制的功能。我对比过用外部中断和GPIO轮询的方案,发现定时器编码器模式有三大优势:
- 自动方向识别:硬件自动处理相位关系
- 抗抖动:内置输入滤波器
- 零CPU开销:计数完全由硬件完成
以TIM2为例,其编码器模式工作原理是这样的:
- 当配置为TI1和TI2双沿计数时,每个信号跳变都会触发计数
- 计数方向由两个信号的相位关系决定
- 计数器在0到ARR值之间循环计数
这里有个关键点容易被忽略:ARR寄存器值需要根据应用场景合理设置。比如做音量控制时,我通常设为100,这样计数值可以直接映射为音量百分比。而在需要高精度定位的场景,则建议使用16位最大值65535。
3. 实战配置指南
下面是我在多个项目中验证过的完整配置流程,使用STM32CubeMX+HAL库:
3.1 硬件连接
c复制/* EC11引脚定义 */
#define ENC_A_GPIO_Port GPIOA
#define ENC_A_Pin GPIO_PIN_0 // TIM2_CH1
#define ENC_B_GPIO_Port GPIOA
#define ENC_B_Pin GPIO_PIN_1 // TIM2_CH2
