搜索
bottom↓
回复: 13

EC11编码器解码问题!!!!

[复制链接]

出0入0汤圆

发表于 2010-10-19 11:00:22 | 显示全部楼层 |阅读模式
我用网上找的解码程序,发现要旋转两格才有输出,于是使用的春风里面的解码程序,发现编码器也是旋转两格才有输出,大家有没有遇到过这个问题?请大家进讨论一下,一下是我用的几种解码程序,都是旋转两个才有输出:
#define KeyA()         (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6))//GPIOC->IDR & GPIO_Pin_6       
#define KeyB()       (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7))//GPIOC->IDR & GPIO_Pin_7

//其中FlagUp FlagDown  分别代表左旋,右旋

第一种春风电源程序里得解码程序:
static vu16 key5del = 100;//按键5禁止延时       
static vu16 key6del = 100;//按键6禁止延时       
vu8 a,c,d;
static vu8 Key5Circs = 0;//按键5状态
static vu8 Key6Circs = 0;//按键6状态

for(a = 0;a < 50;a++);               
if(KeyA() == 0)  c = 0;  
else             c = 1;
for(a = 0;a < 50;a++);
if(KeyB() == 0)  d = 0;  
else             d = 1;               
if(key5del > 0) key5del --;//按键5禁止延时
if(key6del > 0) key6del --;//按键6禁止延时

if((c == 0)&&(d == 0)&&(Key5Circs == 0)&&(key5del == 0))    Key5Circs = 1;         //c0,d0
else if((c == 0)&&(d == 1)&&(Key5Circs == 1))  Key5Circs = 2;                //c0,d1
else if((c == 1)&&(d == 1)&&(Key5Circs == 2))  Key5Circs = 3;                //c1,d1
else if((c == 1)&&(d == 0)&&(Key5Circs == 3))  Key5Circs = 4;                //c1,d0   
else if((c == 0)&&(d == 0)&&(Key5Circs == 4))  {Key5Circs = 0; FlagDown = 1;Key6Circs = 0;key6del = 100;} //c0,d0 按键有效

if((c == 0)&&(d == 0)&&(Key6Circs == 0)&&(key6del == 0))    Key6Circs = 1;         //c0,d0
else if((c == 1)&&(d == 0)&&(Key6Circs == 1))  Key6Circs = 2;                //c1,d0
else if((c == 1)&&(d == 1)&&(Key6Circs == 2))  Key6Circs = 3;                //c1,d1
else if((c == 0)&&(d == 1)&&(Key6Circs == 3))  Key6Circs = 4;                //co,d1   
else if((c == 0)&&(d == 0)&&(Key6Circs == 4))  {Key6Circs = 0; FlagUp = 1;Key5Circs = 0;key5del = 100;} //c0,d0 按键有效

第二种网上的程序:
void ReadSwith(void)
{
static u8 Aold;   //定义了变量用来储蓄上一次调用此方法是编码开关两引脚的电平
  if(KeyA()==0&&Aold==1)      //如果当前编码开关的两个引脚都为底电平执行下面的步骤
  {
          if(KeyB())      //为高说明编码开关在向加大的方向转
        {
             FlagUp=1; FlagDown=0;
         }
        else
        {
             FlagUp=0; FlagDown=1;
         }                                                                                        
   }
  Aold = KeyA() ;
}

u8 ReadSwith()//
{
static u8 Aold,Bold; //定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平
static u8 st;       //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态
u8 tmp = 0;
if(KeyA() &&KeyB() )
       st = 1;    //      
if(st)             //如果st为1执行下面的步骤
{
       if(KeyA()==0&&KeyB()==0)    //如果当前编码开关的两个引脚都为底电平执行下面的步骤
       {
         if(Bold)    //为高说明编码开关在向加大的方向转
         {
         st = 0;   
         tmp++;    //
         }
         
         if(Aold)    //为高说明编码开关在向减小的方向转
         {
         st = 0;
         tmp--;    //设返回值
         }
       }
}
Aold = KeyA();
Bold = KeyB();
return tmp;
}

以上三种程序我都测试,都是旋转2格才有输出,大家来看看是什么问题,是不是编码器不对啊?

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2010-10-19 22:16:17 | 显示全部楼层
我也对编码器程序很感兴趣!

出0入0汤圆

发表于 2016-1-19 11:33:10 | 显示全部楼层
有得编码器就是两格才输出一个的,可以用示波器看下.

出0入0汤圆

发表于 2016-5-24 14:48:15 | 显示全部楼层

请教下各位大牛,如何判断编码器的正反转呢?正转,计数器增加,增加到最大值时,又从0开始。反转减小,

出0入0汤圆

发表于 2016-5-24 23:21:40 | 显示全部楼层
接在tim1-5或tim8上直接有正交解码

出0入0汤圆

发表于 2016-5-25 18:32:39 | 显示全部楼层
wangrb 发表于 2016-5-24 23:21
接在tim1-5或tim8上直接有正交解码

是的,我也是这么接的,只是定时器我们可利用的就是定时器计数器吧,如何通过定时器的变化得知方向呢?编码器是增量型的,转到最大值输出又从0开始

出0入0汤圆

发表于 2017-3-29 16:51:10 | 显示全部楼层
这个程序有问题 会误读,我使用的是2元不到的EC11,今天总算完美解决

出0入0汤圆

发表于 2017-3-29 18:45:01 | 显示全部楼层
我是使用两个中断脚做的,效果很好,不管你转多快都精准无误

出0入0汤圆

发表于 2017-5-3 10:02:28 | 显示全部楼层
转动时,不停中断,开销好大

出90入4汤圆

发表于 2017-5-3 20:11:57 来自手机 | 显示全部楼层
编码器用中断做的很多,一圈,也几十次怕啥

出0入0汤圆

发表于 2017-5-4 15:34:20 | 显示全部楼层
编码器要用好也是比较讲究的

出0入0汤圆

发表于 2017-5-8 17:45:38 | 显示全部楼层
duan2822 发表于 2017-5-3 10:02
转动时,不停中断,开销好大

应该不会快过1ms吧

出0入4汤圆

发表于 2023-7-26 22:11:23 | 显示全部楼层
yunhuisong 发表于 2017-3-29 18:45
我是使用两个中断脚做的,效果很好,不管你转多快都精准无误
(引用自8楼)

能分享一下程序么?

出0入300汤圆

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

本版积分规则

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

GMT+8, 2024-4-26 04:02

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

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