6935|11

4996

帖子

19

TA的资源

裸片初长成(初级)

楼主
 

旋转编码器解码 [复制链接]

随着电子技术的发展,旋转编码器的应用越来越广泛。下面我们谈谈对旋转编码器的解码。

      旋转编码器是用来测量转速的装置,光电式旋转编码器通过光电转换,可将输出轴的角位移、角速度等机械量转换成相应的电脉冲以数字量输出(REP)。它分为单路输出和双路输出两种。技术参数主要有每转脉冲数(几十个到几千个都有),和供电电压等。单路输出是指旋转编码器的输出是一组脉冲,而双路输出的旋转编码器输出两组A/B相位差90度的脉冲,通过这两组脉冲不仅可以测量转速,还可以判断旋转的方向。


此帖出自NXP MCU论坛

最新回复

思路简单又实用,最重要的是还有滤波效果,不错   详情 回复 发表于 2021-5-4 22:51
点赞(1) 关注(5)
个人签名我的博客
 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
编码器的种类比较多,下面我们谈谈两路输出脉冲的编码器解码:




从上面的波形不难看出,左转时,A比B的波形快一些出现;而右转时,A比B的波形晚一些出现,其输出电平状态为:

左转: A - 0 1 1 0 0 1 1 0 0  
           B - 0 0 1 1 0 0 1 1 0  

右转: A - 0 0 1 1 0 0 1 1 0  
           B - 0 1 1 0 0 1 1 0 0


左转 : 当A和B的值组合(A<<1 | B)时,获取值为:-2-3-2-0
右转 : 当A和B的值组合(A<<1 | B)时,获取值为:-1-3-2-0
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
从上面的二进制可以看出,左转和右转的数据排列组合是不一样的。我们可以通过转换状态的变化只获取转换方向,并记录脉冲获取旋转幅度。

所以,可以通过获取之前状态和当前状态,来解码编码器的旋转。

例如: 之前状态为0,当前状态为2,则为左转开始;如果之前状态为0,当前状态为1,则是右转开始。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

4
 
理解了上面的内容,下面解码就非常方便了。我们知道,两路输出有4总状态,而之前状态和当前状态组合就可能出现4x4 = 16种状态,但是,从上面的帖子可以看出,一种状态只可能转化到另外两种状态,而其他两种状态是不会出现的,即使出现,也是乱码或干扰,不被采用。


  1. /**************************************************************************************
  2. * FunctionName   : KEY_ReadRotaryVal()
  3. * Description    : 旋转编码器解码(定时1ms中断调用,不会漏掉脉冲)
  4. * EntryParameter : None
  5. * ReturnValue    : None
  6. **************************************************************************************/
  7. u8 KEY_ReadRotaryVal(void)
  8. {
  9.     u8 curSta;
  10.     static u8 preSta = 0;
  11.     static u8 tmpL = 0;
  12.     static u8 tmpR = 0;
  13.     u8 keyL, keyR, key = KEY_VAL_NO;
  14.    
  15.     keyL = GPIO_ReadInputDataBit(KEY_CL_PORT, KEY_CL_PIN);
  16.     keyR = GPIO_ReadInputDataBit(KEY_CR_PORT, KEY_CR_PIN);
  17.   
  18.     curSta = (0x01 << keyL) | keyR;
  19.    
  20.     if (preSta != curSta)
  21.     {
  22.         switch ((preSta<<4) | curSta)                                           // 前一状态+当前状态
  23.         {
  24.             case 0x02:
  25.             case 0x10:
  26.             case 0x23:
  27.             case 0x31:                                                          // 左转
  28.             {
  29.                 tmpR = 0;
  30.                 if (++tmpL >= KEY_ROT_TIM)                                      
  31.                 {
  32.                     tmpL = 0;
  33.                     KEYPar.Rotary++;
  34.                     key = KEY_VAL_CL;
  35.                 }
  36.                
  37.                 break;
  38.             }

  39.             case 0x01:
  40.             case 0x13:
  41.             case 0x20:
  42.             case 0x32:                                                          // 右转
  43.             {
  44.                 tmpL = 0;
  45.                 if (++tmpR >= KEY_ROT_TIM)
  46.                 {
  47.                     tmpR = 0;
  48.                     KEYPar.Rotary++;
  49.                     key = KEY_VAL_CR;
  50.                 }
  51.                
  52.                 break;
  53.             }

  54.             default: tmpL = 0; tmpR = 0; KEYPar.Rotary = 0; break;
  55.         }
  56.         
  57.         preSta = curSta;
  58.     }
  59.    
  60.     return key;
  61. }
复制代码

[ 本帖最后由 zhaojun_xf 于 2013-8-28 10:41 编辑 ]
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

5
 
解码函数的返回值为转动方向,而全局变量KEYPar.Rotary中存放的是旋转脉冲个数,为滤波,还进行了4次计一出来,保证快速转动时,保证不会出现多余值。当然这个函数可以采用定时扫描,也可以采用中断读取。

为了保证不遗漏脉冲,建议每ms读取一次编码器。我们可以采用定时中断调用。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

6
 
本解码方法非常简单易懂,特别是之前状态与当前状态的组合方法非常容易理解,特别直观。网友可以根据自己使用的编码器进行适当的修改获取自己需要的代码。
此帖出自NXP MCU论坛

点评

不错啊:lol  详情 回复 发表于 2013-8-28 11:27
 
个人签名我的博客
 
 

回复

577

帖子

9

TA的资源

纯净的硅(中级)

7
 

回复 6楼zhaojun_xf 的帖子

不错啊
此帖出自NXP MCU论坛
 
 
 

回复

1453

帖子

18

TA的资源

纯净的硅(高级)

8
 
占座学习~~~~
此帖出自NXP MCU论坛
 
个人签名http://weibo.com/u/1391449055
 
 

回复

83

帖子

1

TA的资源

一粒金砂(中级)

9
 
这个和光电可增益编码器差不多吧!
此帖出自NXP MCU论坛
 
 
 

回复

1005

帖子

0

TA的资源

纯净的硅(高级)

10
 
学习
此帖出自NXP MCU论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

11
 
编码器,MARK,马上就要用了
此帖出自NXP MCU论坛
 
 
 

回复

27

帖子

1

TA的资源

一粒金砂(初级)

12
 

思路简单又实用,最重要的是还有滤波效果,不错

此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表