8416|3

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

正交编码的编码器开关算法求教 [复制链接]

采用了EC16 机械编码开关作为输入,F103VET6的TIM4作为正交编码器输入。
对A、B相同时计数。在程序中编程对TIM4->CNT进行监测,发现机械编码开关旋转1个定位点,计数器变化值一般情况下为4,但是由于机械装置的特性,偶尔会出现计数器变化值为3或5的情况。
因此,为了使用该机械编码器,把初始的计数器值设定为2,周期设为4,这样无论正转还是反转,计数器变化值(3~5)加上初始值2肯定会触发更新事件中断,然后在中断程序中进行某项操作(定义为X操作),中断程序退出前再把计数器赋值为2。

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

请问,有没有什么方法可以避免这种情况?谢谢!
此帖出自stm32/stm8论坛

最新回复

                                 给你提示一下:状态机  详情 回复 发表于 2011-1-7 11:32
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 你最好还是把机械编码输出的波形记录下来,对照分析找出错误的原因。
此帖出自stm32/stm8论坛
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

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

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 给你提示一下:状态机
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

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