搜索
bottom↓
回复: 18

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

[复制链接]

出0入0汤圆

发表于 2014-9-23 17:09:15 | 显示全部楼层 |阅读模式
本帖最后由 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;
        }
}

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-9-23 17:52:32 | 显示全部楼层
有一种操作叫做搜索

出0入0汤圆

发表于 2014-9-23 18:14:19 | 显示全部楼层
编码器应该不会有明显的不准吧

出0入0汤圆

发表于 2014-9-23 19:08:57 | 显示全部楼层
STM32有码盘配置好直接可用

出0入442汤圆

发表于 2014-9-23 20:02:06 来自手机 | 显示全部楼层
xyx2012xyx 发表于 2014-9-23 18:14 编码器应该不会有明显的不准吧

stm32f1的io性能太弱,漏了呗。

出0入4汤圆

发表于 2014-9-23 20:29:58 来自手机 | 显示全部楼层
用外部中断捕捉。是不是脉冲频率过高了。

出0入0汤圆

 楼主| 发表于 2014-9-23 22:55:40 | 显示全部楼层
oner 发表于 2014-9-23 20:29
用外部中断捕捉。是不是脉冲频率过高了。

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

出0入0汤圆

 楼主| 发表于 2014-9-23 22:58:38 | 显示全部楼层
江南雨絮 发表于 2014-9-23 19:08
STM32有码盘配置好直接可用

用这个应该也是可以实现的

出0入0汤圆

发表于 2014-9-24 13:08:26 | 显示全部楼层
http://www.amobbs.com/forum.php? ... 6%E7%A0%81%E5%99%A8

出0入0汤圆

发表于 2014-9-24 13:17:24 | 显示全部楼层
本帖最后由 NJ8888 于 2014-9-24 13:20 编辑

运动码盘停下来期间会有过冲振荡(不叫抖动),但是计数器能自动加减补偿啊,所以最后就是1个字的偏差,合格的正交码盘产生的抖动对计数没有影响

出0入0汤圆

发表于 2014-9-24 13:25:51 | 显示全部楼层
手旋转可能会产生抖动,在IO上加个RC 滤一下。

出0入0汤圆

发表于 2014-9-24 13:27:15 | 显示全部楼层
wye11083 发表于 2014-9-23 20:02
stm32f1的io性能太弱,漏了呗。

这跟STM32有关系么。

出0入0汤圆

发表于 2014-9-24 13:37:36 | 显示全部楼层
频率过高漏了脉冲

出0入0汤圆

 楼主| 发表于 2014-9-24 13:58:37 | 显示全部楼层
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

谢谢发的连接!发帖前试验过这个例子,发现用这样的例子在圈起来的脉冲中还是会误计数的,圈起来的部分就是光栅盘左右晃动了几下其实并没有移动,用这个程序是不能过滤掉的

出0入0汤圆

 楼主| 发表于 2014-9-24 14:00:53 | 显示全部楼层
NJ8888 发表于 2014-9-24 13:17
运动码盘停下来期间会有过冲振荡(不叫抖动),但是计数器能自动加减补偿啊,所以最后就是1个字的偏差,合格的正 ...

这是我再编码器与单片机接口处捕捉到的波形,像这样的震动现象是属于编码器质量问题吗,还是完全在程序上可以过滤掉的?

出0入0汤圆

 楼主| 发表于 2014-9-24 14:01:25 | 显示全部楼层
ericw2012 发表于 2014-9-24 13:37
频率过高漏了脉冲

不属于高频率漏记

出0入0汤圆

发表于 2014-9-24 14:11:46 | 显示全部楼层
lcl4518 发表于 2014-9-24 14:00
这是我再编码器与单片机接口处捕捉到的波形,像这样的震动现象是属于编码器质量问题吗,还是完全在程序上 ...

正常波形,你要闭环控制的话驱动机构会反向伺服补偿的

出0入0汤圆

发表于 2014-9-24 15:17:25 | 显示全部楼层
lcl4518 发表于 2014-9-24 13:58
谢谢发的连接!发帖前试验过这个例子,发现用这样的例子在圈起来的脉冲中还是会误计数的,圈起来的部分就 ...

从你波形上看,信号频率不高,但是你多久读一次数据?
那个链接里面的方法,包括我回帖说的数组的实现,理论上是不会产生误差的,除非你读数据的间隔很大,中间漏掉了一些信号的变化

出0入0汤圆

发表于 2014-9-24 17:17:02 | 显示全部楼层
参考---光电编码器输出脉冲的几种计数方法

本帖子中包含更多资源

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

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表