解决旋转编码抖动的方案

编程过程中发现抖动问题很难消除,按论坛上方法折腾了好久,但效果都不是很理想,昨天一个朋友发给我一个方案,试了一下,果然十分有效,所以发上来,供大家参考。

其实这个方案原作者在2012年就已经在别的论坛上发出了,不过原作者用的是单片机,所以大家在网上找的时候可能容易忽略,原程序如下:

  1. void interrupt main_int(void)
  2. {  
  3.   if(RBIF)
  4.     {
  5.        if(int_nu==0 && KEY_A==0)   //第一次中断,并且A相是下降沿
  6.        {
  7.             flag=0;
  8.             if(KEY_B)    flag=1;  //根据B相,设定标志
  9.             int_nu=1;             //中断计数
  10.        }
  11.       if(int_nu && KEY_A)      //第二次中断,并且A相是上升沿
  12.        {
  13.          if(KEY_B==0 && flag==1) --power_m;
  14.          if(KEY_B && flag==0)    ++power_m;
  15.          int_nu=0;               //中断计数复位,准备下一次
  16.        }
  17.   RBIF=0;     
  18.     }
  19. 仔细学习了一下,发现作者的方法真的很巧妙,大家用旋转编码器判断方向的时候,经常只用了一个触发沿,作者同时使用了两个,一个下降沿,然后在上升沿再检查一遍,如果两次结果一样,则输出数据,否则放弃。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部