打印
[技术讨论]

旋转编码器思路

[复制链接]
939|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qhtflsw|  楼主 | 2025-4-28 22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qhtflsw 于 2025-4-28 22:52 编辑

在网上找了很多,按照写了,还是抖动厉害。还有漏响应的。

弄了两天,按照自己思路写了才弄出来。

之前以为开双路下降沿检测,后面仔细研究了一下。

只要一路外部中断即可。开双边沿检测。这样每转一次,都可以检测到,不会漏响应

A相   
B相   

简单看成2个按键,按下时候有相位差,用这个相位差判定是正转还是反转。

然后执行响应动作。

初始化打开A相外部中断开上升沿和下降沿外部中断,B相不用开。另外开一个1ms定时器,做3-5ms的延时开启中断

外部中断函数里:
假设PA0检测到A相下降沿或者上升沿才进来
if(0 == PA0)
{
      if(PB0)//判定B相电平,高则正转,低则反转,正转计数+1,反转计数-1
     {            cnt++;
     }
     else
    {
             cnt--;
     }
}
else//A相上升沿
{
     if(0==PB0)//判定B相电平,低则正转,高则反转,正转计数+1,反转计数-1
     {            cnt++;
     }
     else
    {
             cnt--;
     }

}
执行完后置位延时标志
delay=1;
关闭外部中断;//抖动持续1-3ms


1ms定时器中断里:

if(delay)
{
    if(++A5ms》=5)
    {
        A5MS=0;
        delay=0;
        开A相外部中断;
       }
}

OK,搞定。解决了



使用特权

评论回复

相关帖子

沙发
qhtflsw|  楼主 | 2025-5-7 23:08 | 只看该作者
后面发现外部中断有抖动,抖动0.25us,这时候进入中断会重复进去,导致方向判定错误,正反转计数不准。还是有问题,因为抖动无处不在,光关中断后延时判定一次是不行的,要多次判定电平不变化才对。
通过抓取波形,大致看到相位差在1.7ms,抖动130us以内也有持续小于3ms,9.5ms是最小电平变化值,进入瞬间1ms内有频繁抖动。
按照这种现象程序办法是中断里只置位标志开始延时5ms,然后把中断里判定方向放到定时器1ms里面
即有双边沿时候就关中断5ms,开始赋值delay=5,1ms后判定正反转。
有正反转后连续3次当前电平不变化就算有效,执行当前正转或者反转函数功能。
实测快速和慢速旋转计数都不会反跳回来了。
最后硬件上加上101电容,防止器件差异性抖动不一致。

使用特权

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

本版积分规则

60

主题

167

帖子

4

粉丝