打印

我上次发的那个“C4定时炸*”里有用C写的例子,可以参考

[复制链接]
29747|85
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lizengmao|  楼主 | 2007-12-8 16:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾:
     现在我手上有一颗旋转编码器,想自己学写程序读取编码器的正转,反转状态,但是,试了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次。反转时也是这样。
   各位有没有用过这种编码器,据我所知,在音响上用得很多,还希望各位指教。
   我使用的编码器图片如下:

相关帖子

沙发
ocon| | 2007-12-8 17:34 | 只看该作者

旋转编码器内部就是两个触点,这其实是个按键去抖动的问

编程思路很简单:A相电平跳高时,若B为高则发生正转,为低则发生反转。
当然啦,AB都是触点,需要先经过去抖动处理再进行判断。如果你的单片机速度不够,可以用中断的方式来做去抖。

使用特权

评论回复
板凳
ocon| | 2007-12-8 17:37 | 只看该作者

楼主的提问标题明确,图文并茂,又有自己的见解,赞一个

使用特权

评论回复
地板
hellomcu| | 2007-12-8 18:59 | 只看该作者

呵呵,提问的方式的确不错

   楼上的已经说得很清楚,补充一下:
  1、不要用手直接去转编码器转动轴,因为手的接触会带来抖动
  2、正转与反转的判断周期可以拉长一点。如你所述,11-01-00-10或者11-10-00-01即可判断正转/反转。
   如:01->00:  出现一次加1,设为N
       01->11:  出现一次加1,设为M

   当N或M比对方大,同时也大于一个设定的周期数,即可以准确判断是正转或反转呀。

   
相关链接:http://shop35088126.taobao.com

使用特权

评论回复
5
5880527| | 2007-12-8 19:58 | 只看该作者

那编码器一圈输出多少脉冲

使用特权

评论回复
6
农民讲习所| | 2007-12-8 20:40 | 只看该作者

加个时间限制,在时间限制内反方向无效

100ms就可以。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
SeaSun + 1
7
农民讲习所| | 2007-12-8 20:43 | 只看该作者

101电容对地去掉

使用特权

评论回复
8
zusen| | 2007-12-8 21:06 | 只看该作者

用软件来处理确实有点烦

很早以前,在数字功放里用过,在程序里修修补补的,最终还是实现了单步、快速的正返转检测,方法有点另类

使用特权

评论回复
9
lizengmao|  楼主 | 2007-12-8 22:26 | 只看该作者

感谢各位的回复

感谢各位的回复。 让各位 见笑了,图片是从网上抓了,不是我自己的啦。


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:可否提供思路,指点一下?不需源码,只需思路,软件我自己慢慢摸索。谢谢了


还望各位有用过编码器的,指点一二,感激不尽~~~
 

使用特权

评论回复
10
hq_y| | 2007-12-8 22:33 | 只看该作者

使用一个D触发器就可以搞定这个问题

不必非得软件;
A接D;
B接CP;

Q=1,顺时针
Q=0,逆时针

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
ONE16 + 3 很给力!
11
lizengmao|  楼主 | 2007-12-8 22:43 | 只看该作者

编码器输出波形的相位关系如下

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

使用特权

评论回复
12
lizengmao|  楼主 | 2007-12-8 22:44 | 只看该作者

编码器的最小相位差。

编码器的最小相位差

使用特权

评论回复
13
lizengmao|  楼主 | 2007-12-8 22:46 | 只看该作者

编码器的开关抖动特性1---旋转开始的抖动

旋转开始的抖动

使用特权

评论回复
14
lizengmao|  楼主 | 2007-12-8 22:47 | 只看该作者

编码器的开关抖动特性1---旋转过程的抖动

旋转过程的抖动

使用特权

评论回复
15
lizengmao|  楼主 | 2007-12-8 22:51 | 只看该作者

to hq_y

to hq_y
“使用一个D触发器就可以搞定这个问题 

不必非得软件;
A接D;
B接CP;

Q=1,顺时针
Q=0,逆时针”
 加触发器要改电路啊。我看见别人做的几款都使这样直接用单片机接的。1颗新茂的51单片机接了一个红外接收头,128*64的液晶(不带字库),3个编码器,1颗音量控制IC,1个收音机模组。编码器的线路我也是照他的作的~~~别人可以做,我应该也可以做吧。

使用特权

评论回复
评论
lxa0 2018-1-15 14:20 回复TA
是谁做的?能给个连接吗?谢谢! 
16
mikezhong| | 2007-12-8 23:42 | 只看该作者

看似简单.

看似简单,要做到很好的效果,准确读出快转,慢转的数据还是要仔细研究的.............

使用特权

评论回复
17
农民讲习所| | 2007-12-9 00:00 | 只看该作者

不要精确,只要模糊

只要开始一个方向移动,短时间是不可能反方向的,所以用顺序变化过程剔除反序信号就可,不需精确判断。对高速移动最有效。

医疗用旋转编码器海了,什么样的都用过,干吗老崇拜香港设计、老外设计?他们水平不一定行,高手也不多的。

使用特权

评论回复
18
lastnew| | 2007-12-9 00:15 | 只看该作者

最近也要做

学习下先

使用特权

评论回复
19
xwj| | 2007-12-9 00:15 | 只看该作者

呵呵,LZ功课做的很足啊,

农民正解,要剔除不可能的情况

使用特权

评论回复
20
lizengmao|  楼主 | 2007-12-9 00:24 | 只看该作者

to 农门讲习所

不要精确,只要模糊---看起来是对的,等明天起床后,再写程序作验证罢。
干吗老崇拜香港设计、老外设计?----并非崇拜,只是从未有人教,都是自己学的,只能有什么吃什么,先消化别人的东西吧。水平够了在自己设计。医疗的东西没有接触过,看来还有好多东西学。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

38

帖子

0

粉丝