发新帖我要提问
123
返回列表
打印

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

[复制链接]
楼主: Jack602
手机看帖
扫描二维码
随时随地手机跟帖
41
韦斯克拉| | 2013-10-29 18:02 | 只看该作者 回帖奖励 |倒序浏览
记下了,学习

使用特权

评论回复
42
liguang02| | 2014-8-12 18:00 | 只看该作者
eydj2008 发表于 2010-11-13 09:08
yewuyi 分析得 很好 很好理解  能行得通
我来总结一下:
1.可以检测其中一线 我们假设为A线 可以检测上升  ...

如果只检测一根线,双沿中断,然后读取电平做比较判断正反转,还加了2ms滤波,快速旋转还是会误判断

使用特权

评论回复
43
eydj2008| | 2014-9-1 14:57 | 只看该作者
liguang02 发表于 2014-8-12 18:00
如果只检测一根线,双沿中断,然后读取电平做比较判断正反转,还加了2ms滤波,快速旋转还是会误判断 ...

速度快了 就要用CPU自带的编码器了

使用特权

评论回复
44
景天飞雪| | 2015-1-13 11:20 | 只看该作者
我用定时器和边缘触发中断,软件计数都存在较大误差:(

使用特权

评论回复
45
巧巧0726| | 2018-6-21 16:29 | 只看该作者
Jack602 发表于 2010-11-14 22:07
感谢LS几位兄弟耐心解答,尤其感谢yewuyi大哥,虽然我还是菜鸟,但第一次感到21IC社区确实是个好地方,让我 ...

还有没有在线啊?你的定时查询的程序能否分享一下啊??276389126@qq.com感谢感谢

使用特权

评论回复
46
a930923| | 2018-6-26 10:49 | 只看该作者
你好 ALPS  一级代理。QQ394729868

使用特权

评论回复
47
hanbing0898| | 2021-7-11 17:25 | 只看该作者

使用特权

评论回复
48
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; //释放使能,等待下一次扫描
}
     调试后,发现能快速判断正转/反转,不会有异常。转快转慢,也可以
   

使用特权

评论回复
49
ayb_ice| | 2021-8-6 11:56 | 只看该作者
用状态机判断正反转的完整过程,这样不会产生错误

使用特权

评论回复
50
ifxz0123| | 2021-8-6 17:31 | 只看该作者
[url]这种类似机械按键,存在抖动情况。还定时轮训的方式比较好。我发一下我的代码,你参考一下(这个代码有一个bug还没排除,就是上电后会触发一次),里面有原理图和接线说明。 STM3232F103RC_RD_RE_编码开关.zip (6.01 MB)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则