如何提高检测旋转式光电编码器的速度

[复制链接]
2044|9
 楼主| 孟孟 发表于 2014-8-26 17:19 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 孟孟 于 2014-8-28 08:23 编辑

  1. 搞了几天也没人帮助,失望啊。。。。。
chunyang 发表于 2014-8-26 18:12 | 显示全部楼层
这是你的软件编程有问题所致,速度是足够的。
 楼主| 孟孟 发表于 2014-8-26 18:42 来自手机 | 显示全部楼层
king5555 发表于 2014-8-26 17:54
要有防彈跳的措施。

请问具体有哪些措施?
 楼主| 孟孟 发表于 2014-8-26 18:59 | 显示全部楼层
chunyang 发表于 2014-8-26 18:12
这是你的软件编程有问题所致,速度是足够的。

帮我看看我的代码。。。我已经给贴出来了。。。。多谢版主大人。
 楼主| 孟孟 发表于 2014-8-26 19:00 | 显示全部楼层
king5555 发表于 2014-8-26 17:54
要有防彈跳的措施。

帮我看看我的代码存在的问题。。。我已经给贴出来了
 楼主| 孟孟 发表于 2014-8-26 19:11 | 显示全部楼层
@春阳 版主不要走,,,,我的问题还没解决啊
受不了了 发表于 2014-8-26 21:05 来自手机 | 显示全部楼层
脉冲大概有多高频率你心里都没个底吗
51scm 发表于 2014-8-26 22:51 | 显示全部楼层
不明白你的程序。我给一个我以前做的程序段(在正式产品中用过的),希望有用。说明:此程序编码器为鼠标滚轮,一旦停止转动则得到一个有效转次数,最高位代表方向。

unsigned char KeyK3Buf;                //S3编码器输入缓冲
unsigned char KeyK3Buf_Old;        //S3编码器输入缓冲旧值
unsigned char KeyK3Cnt;                //S3编码器转次数(最高位为符号位)
unsigned char KeyValidCnt;        //S3编码器有效转次数(最高位为符号位)
unsigned char KeyNATC;                //键不活动计时器

void KeyScn(void)
{
if(KeyScan)                                     //定期检测,间隔时间决定于滚轮速度
        {
        KeyScan=0;
        KeyK3Buf=KeyK3Buf<<2;                        //
        if(K3A)
                {
                KeyK3Buf|=0x01;
                }
        if(K3B)
                {
                KeyK3Buf|=0x02;
                }
        if(KeyK3Buf!=KeyK3Buf_Old)
                {
                KeyNATC=0x00;
                switch(KeyK3Buf)
                        {
                        case        80:
                        case        245:
                        case        175:
                        case        10:
                                KeyK3Cnt++;
                                break;
                        case        5:
                        case        95:
                        case        250:
                        case        160:
                                KeyK3Cnt--;
                                break;
                        }
                }
        else
                {
                if((KeyNATC<255)&&(KeyK3Cnt))
                        {
                        KeyNATC++;
                        }
                else
                        {
                        KeyValidCnt=KeyK3Cnt;
                        KeyK3Cnt=0;
                        }
                }

        KeyK3Buf_Old=KeyK3Buf;
}
651927693 发表于 2014-8-27 00:20 | 显示全部楼层
“输出数据乱跳”,那要从头一点点DEBUG呀。首先要确保数码管的显示稳定正确。
tergy2012 发表于 2014-8-27 16:44 | 显示全部楼层
这个程序,看不懂,我是新手
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部