解决旋转编码抖动的方案

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

其实这个方案原作者在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. 仔细学习了一下,发现作者的方法真的很巧妙,大家用旋转编码器判断方向的时候,经常只用了一个触发沿,作者同时使用了两个,一个下降沿,然后在上升沿再检查一遍,如果两次结果一样,则输出数据,否则放弃。
  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值