用过旋转编码器的进来指导下,这样做能减少误判吗?

[复制链接]
21849|49
韦斯克拉 发表于 2013-10-29 18:02 | 显示全部楼层
记下了,学习
liguang02 发表于 2014-8-12 18:00 | 显示全部楼层
eydj2008 发表于 2010-11-13 09:08
yewuyi 分析得 很好 很好理解  能行得通
我来总结一下:
1.可以检测其中一线 我们假设为A线 可以检测上升  ...

如果只检测一根线,双沿中断,然后读取电平做比较判断正反转,还加了2ms滤波,快速旋转还是会误判断
eydj2008 发表于 2014-9-1 14:57 | 显示全部楼层
liguang02 发表于 2014-8-12 18:00
如果只检测一根线,双沿中断,然后读取电平做比较判断正反转,还加了2ms滤波,快速旋转还是会误判断 ...

速度快了 就要用CPU自带的编码器了
景天飞雪 发表于 2015-1-13 11:20 | 显示全部楼层
我用定时器和边缘触发中断,软件计数都存在较大误差:(
巧巧0726 发表于 2018-6-21 16:29 | 显示全部楼层
Jack602 发表于 2010-11-14 22:07
感谢LS几位兄弟耐心解答,尤其感谢yewuyi大哥,虽然我还是菜鸟,但第一次感到21IC社区确实是个好地方,让我 ...

还有没有在线啊?你的定时查询的程序能否分享一下啊??276389126@qq.com感谢感谢
a930923 发表于 2018-6-26 10:49 | 显示全部楼层
你好 ALPS  一级代理。QQ394729868
hanbing0898 发表于 2021-7-11 17:25 | 显示全部楼层
rankey 发表于 2021-8-6 10:19 | 显示全部楼层
旋转编码器,很感兴趣,留意这个贴,差不多快2年了。
     最近弄到了一个编码器样品,尝试编了一个程序。程序功能是这样:若发生正转,就亮一下正转指示灯,若发生反转,就亮一下反转指示灯,若停着不转,灯都熄灭。
   首先,用示波器,看一下:这正转/反转,A相和B相到底是怎么样的波形。
     算是看出了名堂,原来手头这款旋转编码器,发生正转时,A相始终比B相早发生跳变,到高电平。即使旋得非常快,A相也比 B相早3ms -5ms,跳到高电平。
                                                                          发生反转时,B相始终比A相早发生跳变,到高电平。即使旋得非常快,B相也比 A相早3ms -5ms,跳到高电平。


     程序框架按这样设计:做一个时间轮片函数,每隔1.5ms, 在主函数里启动编码器的扫描函数。同时,还设置了A相和B相电平【过去】与【当前】的状态变量。至于如何判断是正转或反转。是用了这么一段的代码:
   
  
/*****************************************************
函数功能:编码器扫描函数
***************************************************/
void Encoder_scan(void)   
{
if(Encoder_enable)  //若扫描编码器使能
{
   A_Currentstate=Encoder_A;//扫描并获取当前A相电平,
   B_Currentstate=Encoder_B;
   if(A_Currentstate!=A_Laststate)
    {  
     if((B_Currentstate==0)&&(A_Currentstate==1)) //A相发生跳变,且B相滞后,仍是0电平,为正转
       {
       Turn_Valve=0x01;  //扫描后标记为顺时针
        }
    }
   
   else if(B_Currentstate!=B_Laststate)
    {  
     if((A_Currentstate==0)&&(B_Currentstate==1)) //B相发生跳变,且A相滞后,仍是0电平,为反转
       {
       Turn_Valve=0x00;  //扫描后标记为逆时针
        }
    }
   
      else if((A_Currentstate==A_Laststate)&&(B_Currentstate==B_Laststate)) //扫描到未发生转动
    {
    Turn_Valve=0x02;   //扫描后标记为静止
    }
  
}
    A_Laststate=A_Currentstate;
    B_Laststate=B_Currentstate;
     Encoder_enable=0; //释放使能,等待下一次扫描
}
     调试后,发现能快速判断正转/反转,不会有异常。转快转慢,也可以
   
ayb_ice 发表于 2021-8-6 11:56 | 显示全部楼层
用状态机判断正反转的完整过程,这样不会产生错误
ifxz0123 发表于 2021-8-6 17:31 | 显示全部楼层
[url]这种类似机械按键,存在抖动情况。还定时轮训的方式比较好。我发一下我的代码,你参考一下(这个代码有一个bug还没排除,就是上电后会触发一次),里面有原理图和接线说明。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

快速回复 在线客服 返回列表 返回顶部