打印

正交编码的编码器开关算法求教

[复制链接]
2395|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
EAMCU|  楼主 | 2011-1-7 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用了EC16 机械编码开关作为输入,F103VET6的TIM4作为正交编码器输入。
对A、B相同时计数。在程序中编程对TIM4->CNT进行监测,发现机械编码开关旋转1个定位点,计数器变化值一般情况下为4,但是由于机械装置的特性,偶尔会出现计数器变化值为3或5的情况。
因此,为了使用该机械编码器,把初始的计数器值设定为2,周期设为4,这样无论正转还是反转,计数器变化值(3~5)加上初始值2肯定会触发更新事件中断,然后在中断程序中进行某项操作(定义为X操作),中断程序退出前再把计数器赋值为2。

但是目前发现,大部分情况下程序运行良好,但是偶尔会出现一次漏操作,偶尔会出现一次双操作。经过对TIM4->CNT的进一步检测,发现退出中断后,计数器的值并非2。初步分析,因为在进入中断时,计数器的计数并未停止,由于中断程序很短,所以当中断程序退出时,虽然计数器被赋值为2,但是机械编码开关的剩余AB相变化仍然导致了计数。

请问,有没有什么方法可以避免这种情况?谢谢!
沙发
香水城| | 2011-1-7 11:20 | 只看该作者
你最好还是把机械编码输出的波形记录下来,对照分析找出错误的原因。

使用特权

评论回复
板凳
EAMCU|  楼主 | 2011-1-7 11:27 | 只看该作者
我无语。。。
我的意思是我的算法思路是错的,我已经知道。我苦思没有更好的解决思路,所以来请教有没有大侠可以提点修改一下该算法的意见。
错误的地方在于:
1. 机械编码器旋转1个定位点,进入更新中断时,机械编码器的脉冲并没有使用完,所以当中断程序返回时,剩余的脉冲会在中断程序中的设置的初值2上重新计数,干扰了下一次对机械编码器旋转的判断。
2. 造成该错误的原因在于为了兼容机械编码器会出现3个或5个脉冲计数的情况(10k上拉,0.1uF滤波),所以进入更新中断的计数器变化值为2,造成进入更新中断时,机械编码器的脉冲并没有使用完。
所以我想请教的是使用机械编码器实现单键飞梭时,处理编码器旋转有没有更好的思路。

使用特权

评论回复
地板
mohanwei| | 2011-1-7 11:32 | 只看该作者
给你提示一下:状态机

使用特权

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

本版积分规则

38

主题

396

帖子

2

粉丝