搜索
bottom↓
回复: 6

请教傻孩子关于旋转编码器实现两倍频

[复制链接]

出0入0汤圆

发表于 2010-12-11 18:57:13 | 显示全部楼层 |阅读模式
以前在论坛看到傻孩子对编码器简洁精辟的结论:
1)需要至少用到一个外中断和一个普通引脚。在每一个中断的上升沿或下降沿(注意这里是或的关系,意思是必须
从两个边沿中选择一个边沿来触发中断)读取普通引脚的电平,高电平,计数器增加,低电平计数器减小。这两个
引脚分别接编码器的A和B两根信号。

2)如果你想实现两倍频,则需一个外中断和一个普通引脚,在每一个中断变化边沿(同时包括上升沿和下降沿),比较
中断引脚的电平与普通引脚的电平,如果相同则计数器增加,如果不同则计数器减小。

3)如果你想实现4倍频,则需要两个外中断引脚,对于A信号的外中断来说,每一个变化的边沿都检查A,B两个信号电平
是否相同,相同则计数器增加,不同则计数器减小;对于B信号的外中断来说,每一个变化的边沿都检测A、B两信号电
平是否相同,相同则计数器减小,不同则计数器增加。

我用第二种方法只用一个中断(上升沿和下降沿)实现两倍频,慢速旋转的时候,加减都很正常,快速的的时候感觉有些问题,总觉得速度太慢了,猜测可能在同一个方向快速旋转时会
抖动,加的过程中会减,减得过程中会加,导致进位很慢,快速旋转时可以看到个位的数据在不停的快速变化,可是进位(加到九进位,或者减到0退位)感觉不是这个速度,有点慢,所以猜测有没有可能快速旋转时有抖动....
程序如下
请大家给给建议  谢谢
__interrupt void interrupt_int1_isr(void)
{//上升沿和下降沿触发 test_tune1中断引脚/test_tune2普通引脚
        if ((P3PND & 2)!=0)
        {
                clr_bit(P3PND,1);
                P3INTL=0x00;                                
                if(test_tune1==test_tune2)//比较中断引脚的电平与普通引脚的电平如果相同则计数器增加
                                f_lag1.add_coder=1;//up
                else if(test_tune1!=test_tune2)//比较中断引脚的电平与普通引脚的电平如果不同则计数器减小。
                                f_lag1.sub_coder=1;//down                                               
        }
}

电路图:

编码器 (原文件名:编码器.gif)

出0入296汤圆

发表于 2010-12-12 01:09:17 | 显示全部楼层
首先,你要用示波器看波形,看看最窄的地方,脉宽有多少,是否满足90度相位差。
其次,你要看你的系统晶振是多少,我做马盘检测的系统,都是工作在至少16M频率
以上的,400线的我推荐用27M

出0入0汤圆

 楼主| 发表于 2010-12-12 09:56:53 | 显示全部楼层
谢谢傻孩子的回复,我用在收音机的飞梭上调整时间和频率,我的RC震荡只有不到1M左右(700~800khz左右),1条指令最少4个机器周期,我用的是24线的,会不会是这个原因呢,导致快速时,不能实时响应...最快的时候都还可以看到倒退的现象...
如果不满足90度相位差,这是编码器的原因吗,还是...
再次请教傻孩子大哥...谢谢

出0入296汤圆

发表于 2010-12-12 12:38:32 | 显示全部楼层
我觉得你需要检查90度相位差的问题,这通常是编码器的问题。

出0入0汤圆

 楼主| 发表于 2010-12-12 16:11:10 | 显示全部楼层
谢谢傻孩子,我用示波器检测了波形,相位是没问题的,可能是主震不够造成的,我把RC震荡的电阻改小,使主震变大,效果好多了...看来是主震的问题了.....原来的主震500khz估计都没有....现在改成1M左右,好多了...

出0入0汤圆

发表于 2010-12-12 16:48:20 | 显示全部楼层
旋转不均匀时不能保证90度相位差,所以设计假设不能基于90度相差的基础

出0入0汤圆

 楼主| 发表于 2010-12-16 19:40:33 | 显示全部楼层
谢谢各位 现在速度问题已经完全解决,不换晶振,用软件来欺骗使用者..
转一下后,停一下再转,每格速度+1或者-1;在规定的时间内连续迅速旋转编码器10圈以上时,每转一格+5或者-5,给人一种“加速”的感觉,这样做消耗了3个RAM :一个规定时间计数器,两个(顺时针/逆时针)计算旋转多少圈计数器,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 16:18

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

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