采用了EC16 机械编码开关作为输入,F103VET6的TIM4作为正交编码器输入。
对A、B相同时计数。在程序中编程对TIM4->CNT进行监测,发现机械编码开关旋转1个定位点,计数器变化值一般情况下为4,但是由于机械装置的特性,偶尔会出现计数器变化值为3或5的情况。
因此,为了使用该机械编码器,把初始的计数器值设定为2,周期设为4,这样无论正转还是反转,计数器变化值(3~5)加上初始值2肯定会触发更新事件中断,然后在中断程序中进行某项操作(定义为X操作),中断程序退出前再把计数器赋值为2。
但是目前发现,大部分情况下程序运行良好,但是偶尔会出现一次漏操作,偶尔会出现一次双操作。经过对TIM4->CNT的进一步检测,发现退出中断后,计数器的值并非2。初步分析,因为在进入中断时,计数器的计数并未停止,由于中断程序很短,所以当中断程序退出时,虽然计数器被赋值为2,但是机械编码开关的剩余AB相变化仍然导致了计数。
请问,有没有什么方法可以避免这种情况?谢谢! |