27506|13

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教旋转编码器的编程思路。我的方法会有误检测 [复制链接]

各位大虾: 现在我手上有一颗旋转编码器,想自己学写程序读取编码器的正转,反转状态,但是,试了3种方法,都无法得到满意的结果,特在此请教用过这种编码器的大虾,程序应该怎么写,才可以让程序的误检测最小 我用的方法有: 编码器A/B接10K上拉和101电容对地,通过1K电阻连到51单片机的IO口,晶振频率11.092M,未使用中断。采用扫描方式读取编码器的输出,每2ms扫描一次。 方法如下: 1.假设静止状态为11(因为有上拉电阻),检测到变为01或者10即判别正转/反转 2。连续读取四次的输出如果是11-01-00-10或者11-10-00-01即可判断正转/反转 3.读取当前输出并与上一次的输出比较,如果符合正转判定为正转,如果符合反转判定为反转。 这3种方法如果在慢速(一格一格旋转)时,可以正确识别正转/反转,但是快速旋转(大约360度/s吧,用手转的,没有实际测过),有时明明是正转,但读出的数据带有反转数据,大约是正转2-4次反转1次。反转时也是这样。 各位有没有用过这种编码器,据我所知,在音响上用得很多,还希望各位指教。 我使用的编码器图片如下:
此帖出自单片机论坛

最新回复

使用一个D触发器就可以搞定这个问题 不必非得软件; A接D; B接CP; Q=1,顺时针 Q=0,逆时针  详情 回复 发表于 2007-12-11 10:37
点赞 关注
 

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

推荐
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

楼上的已经说得很清楚,补充一下: 1、不要用手直接去转编码器转动轴,因为手的接触会带来抖动 2、正转与反转的判断周期可以拉长一点。如你所述,11-01-00-10或者11-10-00-01即可判断正转/反转。 如:01->00: 出现一次加1,设为N 01->11: 出现一次加1,设为M 当N或M比对方大,同时也大于一个设定的周期数,即可以准确判断是正转或反转呀。
此帖出自单片机论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

旋转编码器内部就是两个触点,这其实是个按键去抖动的问题。编程思路很简单:A相电平跳高时,若B为高则发生正转,为低则发生反转。当然啦,AB都是触点,需要先经过去抖动处理再进行判断。如果你的单片机速度不够,可以用中断的方式来做去抖。
此帖出自单片机论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

楼主的提问标题明确,图文并茂,又有自己的见解,赞一个,呵呵~
此帖出自单片机论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

那编码器一圈输出多少脉冲
此帖出自单片机论坛
 
 
 

回复

24

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

加个时间限制,在时间限制内反方向无效。100ms就可以
此帖出自单片机论坛
 
 
 

回复

24

帖子

0

TA的资源

一粒金砂(初级)

7
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

101电容对地去掉
此帖出自单片机论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(初级)

8
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

用软件来处理确实有点烦 很早以前,在数字功放里用过,在程序里修修补补的,最终还是实现了单步、快速的正返转检测,方法有点另类。
此帖出自单片机论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

感谢各位的回复。 让各位 见笑了,图片是从网上抓了,不是我自己的啦。 to ocon:我思路是这样的:12个脉冲/360度,以360度/s的速度旋转,则大约83ms输出一个完整的脉冲,每2ms循环检测一次,应该不会漏检测吧(不是很肯定,毕竟没有做过)。只要AB出现低电位就延时1ms左右再读取AB的数据,应该也算有去抖动吧。 to hellomcu :“正转与反转的判断周期可以拉长一点。如你所述,11-01-00-10或者11-10-00-01即可判断正转/反转。 如:01->00: 出现一次加1,设为N 01->11: 出现一次加1,设为M 当N或M比对方大,同时也大于一个设定的周期数,即可以准确判断是正转或反转呀”这个思路不错,现在我实际仿真发现编码器在停止时未必是11,可能是10或者01,取决于停止前旋转的方向---大概是编码器质量的原因,一分钱一分货。而且在停转的瞬间“手抖动”会读得 一个与旋转方向相反的数据,快速旋转也偶尔会有,快速旋转时大概10次有4次会有相反的数据。只是单识别的方向还要知道转了多少格啊?这个有点难度。 “不要用手直接去转编码器转动轴,因为手的接触会带来抖动”。这个东西本来就是用手旋转的啊,不过实际是要加塑胶旋钮在上面的,下星期装个上去看是否会好点。 to 5880527:我现在用的是12个脉冲/360度的,也有18&24个脉冲/360度的,不过我没有用。 to 农民讲习所 "加个时间限制,在时间限制内反方向无效 100ms就可以 "我不是很明白这句话的意思。或者向hellomcu说的那样,正转反转谁的数据多就以谁为准。 “101电容对地去掉”看见别人的电路也是如此,不过别人不告诉我软件的写法---台湾的软体工程师就是这样,比较保守了。 to zusen:可否提供思路,指点一下?不需源码,只需思路,软件我自己慢慢摸索。谢谢了 还望各位有用过编码器的,指点一二,感激不尽~~~
此帖出自单片机论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

10
 

回复:请教旋转编码器的编程思路。我的方法会有误检测

使用一个D触发器就可以搞定这个问题 不必非得软件; A接D; B接CP; Q=1,顺时针 Q=0,逆时针
此帖出自单片机论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 

回复: 请教旋转编码器的编程思路。我的方法会有误检测

编码器输出波形的相位关系如下:(中间虚线是不是指旋转到卡点位置时的输出?)
此帖出自单片机论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 

回复: 请教旋转编码器的编程思路。我的方法会有误检测

编码器的最小相位差
此帖出自单片机论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 

回复: 请教旋转编码器的编程思路。我的方法会有误检测

旋转开始的抖动
此帖出自单片机论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 

回复: 请教旋转编码器的编程思路。我的方法会有误检测

旋转过程的抖动
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表