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

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条回答
lcl4518
1楼-- · 2020-01-24 04:00
xiaobendan 发表于 2014-9-24 13:08
http://www.amobbs.com/forum.php?mod=viewthread&tid=5591112&highlight=%E7%BC%96%E7%A0%81%E5%99%A8

谢谢发的连接!发帖前试验过这个例子,发现用这样的例子在圈起来的脉冲中还是会误计数的,圈起来的部分就是光栅盘左右晃动了几下其实并没有移动,用这个程序是不能过滤掉的
lcl4518
2楼-- · 2020-01-24 10:00
 精彩回答 2  元偷偷看……
lcl4518
3楼-- · 2020-01-24 15:11
ericw2012 发表于 2014-9-24 13:37
频率过高漏了脉冲

不属于高频率漏记
NJ8888
4楼-- · 2020-01-24 19:26
lcl4518 发表于 2014-9-24 14:00
这是我再编码器与单片机接口处捕捉到的波形,像这样的震动现象是属于编码器质量问题吗,还是完全在程序上 ...

正常波形,你要闭环控制的话驱动机构会反向伺服补偿的
xiaobendan
5楼-- · 2020-01-24 19:35
lcl4518 发表于 2014-9-24 13:58
谢谢发的连接!发帖前试验过这个例子,发现用这样的例子在圈起来的脉冲中还是会误计数的,圈起来的部分就 ...

从你波形上看,信号频率不高,但是你多久读一次数据?
那个链接里面的方法,包括我回帖说的数组的实现,理论上是不会产生误差的,除非你读数据的间隔很大,中间漏掉了一些信号的变化
sergiochen
6楼-- · 2020-01-24 19:51
参考---光电编码器输出脉冲的几种计数方法

一周热门 更多>