检测正交光电编码器时计数有误差

2020-01-22 12:09发布

本帖最后由 lcl4518 于 2014-9-23 17:44 编辑

我把400线的光电编码器直接接入单片机的两个中断口P3.2和P3.3,在计数时发现不准确,当数值为0时我左右旋转编码器一定距离后数值总是不能回到原点,不是增加就是减少,下边是我再中断里简单写的程序。请问坛子里的高手有没有成功的案例或去抖程序分享一下呢?谢谢!感激不尽!!
两个中断都是下降沿触发



void InterruptA()interrupt 0               
{
        if(BMQ_B==1)
        {
                DIR=1;
        }
        else
        if(BMQ_B==0)
        {
                DIR=2;
        }
}
void InterruptB()interrupt 2
{
        if(DIR==1&&BMQ_A==0)
        {
                LCMStruct.InterruptCount++;
                DIR=0;
        }
        if(DIR==2&&BMQ_A==1)
        {
                LCMStruct.InterruptCount--;
                DIR=0;
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
xiaobendan
1楼-- · 2020-01-22 15:22
有一种操作叫做搜索
xyx2012xyx
2楼-- · 2020-01-22 16:47
编码器应该不会有明显的不准吧
江南雨絮
3楼-- · 2020-01-22 22:14
STM32有码盘配置好直接可用
wye11083
4楼-- · 2020-01-22 23:30
 精彩回答 2  元偷偷看……
oner
5楼-- · 2020-01-23 02:53
用外部中断捕捉。是不是脉冲频率过高了。
lcl4518
6楼-- · 2020-01-23 05:33
oner 发表于 2014-9-23 20:29
用外部中断捕捉。是不是脉冲频率过高了。

频率不高,这方波最短间隙都毫秒级的,片机能正常捕捉到并计数,倒是像最后一张图片红框圈起来的波形现在没找到好方法识别过滤掉,按照坛子里的例子建立A.B正反转的01数组再取值比较,在最后圈起来的图中还是会出错的

一周热门 更多>