【嵌入式】编码器计数倍频,机械一格与电气计数

EC11K1525413-EC11K1525413编码器

看到的是:

  • 顺时针拧一下
  • encoder_cnt 不是 +1
  • 而是经常 +2

已经 碰到"编码器计数倍频"这个知识点了。


一、为什么不是加 1,而是加 2

编码器"拧一下"的机械手感一格,不一定等于定时器计数器只加 1。

因为这里有两个概念,容易混:

1. 机械一格

  • "咔哒"一下
  • "卡点"一下

这是机械刻度

2. 电气计数

这是 A/B 相在这一格过程中,产生了多少次有效边沿,被 TIM3 记了多少次数。

这是电气分辨率

这两个不一定一一对应。


二、为什么会出现 +2

编码器有两路信号:

  • A 相
  • B 相

拧一格时,A/B 相会经历状态变化。

比如某种方向可能是:

  • 00 -> 01 -> 11 -> 10 -> 00

这里面其实发生了多个边沿变化

而定时器编码器模式会根据配置,按边沿来计数。

所以:

  • 有的编码器一格可能记 1
  • 有的可能记 2
  • 有的可能记 4

三、为什么这次是 +2

如果代码里配置的是:

c 复制代码
sConfig.IC1Polarity  = TIM_ICPOLARITY_RISING;
sConfig.IC2Polarity  = TIM_ICPOLARITY_RISING;
sConfig.EncoderMode = TIM_ENCODERMODE_TI12;

这个组合可以这样理解:

  • CH1、CH2 两路都参与方向判断
  • 但你当前是按上升沿在计

所以最终你看到的有效计数,可能是每机械一格对应 2 个有效计数

如果换一种采样方式、换别的芯片实现细节、或者编码器本体触点结构不同,有时会看到 1、2、4 都不奇怪。


四、怎么理解

定时器 CNT 的单位,不一定是"机械一格",而是"编码器接口配置下的有效计数单位"。

所以:

  • 顺时针一格 ≈ +2
  • 逆时针一格 ≈ -2

后面写功能时,可以直接拿这个参数用:【目前环境下】

  • 一格 = 2 count
相关推荐
Hello World . .2 小时前
51单片机基础外设:GPIO(以LED、按键、数码管为例)
单片机·嵌入式硬件
阳光永恒7362 小时前
C++编程全套学习资料免费分享 | 从零基础到进阶(含视频课/PPT课件/源码/项目实战)
c++·学习·编程学习·免费资料·零基础学c++·c++资料
Дерек的学习记录2 小时前
Unreal Engine 5:前置知识和入门基础
学习·ue5
Flamingˢ2 小时前
基于ARM的裸机程序设计和开发(三):C编程基础与Zynq裸机开发常用方法
c语言·arm开发·单片机
EnglishJun2 小时前
ARM嵌入式学习(八)--- 汇编应用:点亮led
汇编·arm开发·学习
PNP Robotics2 小时前
PNP机器人亮相第二届机器人灵巧手国际创新大会
人工智能·学习·机器人·开源
2501_918126912 小时前
学习所有python写浏览器的语句
开发语言·python·学习
Crazyong4 小时前
FreeRTOS-CPU使用率统计
单片机·嵌入式硬件
_Ningye11 小时前
STM32 — 6.1 TIM定时中断
stm32·单片机·嵌入式硬件