打印

看看这片**,旋转编码开关原理和编程分析

[复制链接]
2486|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
namefull|  楼主 | 2009-4-21 00:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个是原理图。帮忙看看有何问题!感觉小问题应该不少!但是不知道哪里有
计数部分的程序以前有人提供过,大概就是这个,有些不明白

#include "reg51.h"

long counter=0;          //旋转编码器的脉冲计数值,左转为正,右转为负
void main()
{
  IT0 = 1;    //外部中断0为边沿触发
  EX0 = 1;     //使能外部中断0
  EA=1;        //使能中断
  while(1)
  {
    //                在这里写代码实现你想做的事,比如计数值的进一步处理等等等等
  }
}

//******************************************************************************
// 延时函数delay(unsigned char dly)
// 延时值与晶体频率有关,可以自己调整变量x的值以取得合适的单位延时值
//******************************************************************************
void delay(unsigned char dly)
{
  unsigned int x;
  while(dly--)
  {
    x = 1000;
    while(x--);
  }
}

//******************************************************************************
// 外部中断0的中断处理函数void ISR0()
// 注意:旋转编码器的A接P3.2,B接P1.7(跟你图上一样不变)
//******************************************************************************
void ISR0()   interrupt 0
{
   if((P1&0x80) == 0x80)
   {
     delay(10); //消抖动,延时一会,确认P1.7仍然为高,如果频率比较高,延时要缩短
     if((P1&0x80) == 0x80)
       counter++;
   }
   else
   {
     delay(10); //消抖动,延时一会,确认P1.7仍然为低,如果频率比较高,延时要缩短
     if((P1&0x80) == 0x00)
     counter--;
   }
}


有些不明白的,B接1.7和计数有何关系?
延迟X如何取值?
如果按照我接线的方式,如何修改程序?
显示程序如何做? 

谢谢了,我知道我问的问题幼稚,还请解答下。。谢谢了

相关帖子

沙发
mpuhome| | 2009-4-21 09:57 | 只看该作者

你看一下正交编码器的资料

google一下即可

这种计数方法不太理想,速度高了/快速换向会有问题

使用特权

评论回复
板凳
namefull|  楼主 | 2009-4-21 14:04 | 只看该作者

不懂我问的问题啊

我们这要求的速度不是很高~
要求简单模拟就好
还是没明白我问的问题啊

使用特权

评论回复
地板
mcufan001| | 2009-4-21 19:48 | 只看该作者

看看这片**,旋转编码开关原理和编程分析

http://www.mcu51av.com/jswz/jswz_files/360bianma001.html

使用特权

评论回复
5
red1986| | 2009-4-21 20:44 | 只看该作者

旋转编码器是按数高低电平数来的

如题,他是通过对电平转换记下来的数据

使用特权

评论回复
6
mpuhome| | 2009-4-21 22:08 | 只看该作者

我确实没看你的问题

贴的代码那么长,我看不懂哦
不过呢,你既然做编码器计数,就要明白编码器是什么原理,出来的信号是什么样子的,然后在看代码就明白了。

使用特权

评论回复
7
xhtxzxw| | 2009-4-21 23:47 | 只看该作者

嘿嘿

正交旋转编码器最终体现为两路方波输出:A和B

正向旋转时:
  高电平
    |
A: --__--__--__--__--__--__-
B:--__--__--__--__--__--__--__
   |
 下降沿

反向旋转时:
    低电平
     |
A: --__--__--__--__--__--__-
B:__--__--__--__--__--__--__
     |
   下降沿

用--标志高电平,用__表示低电平
所谓正交,就是如上所示,AB相位相差90度.

旋转编码器的两路输出,一路用来触发中断(假定用B吧),另一路(就是A了)接到P1.7上,用来做旋转方向判别的依据.

程序初始化时,已经设定中断是边沿触发的,当B出现下降沿时触发中断,进入中断处理函数以后,对P1.7(也就是A信号)做判断,(结合上面的电平表示)如果A是高,判断是正转,加1;  如果A为低,判断是反转,减1.

使用特权

评论回复
8
ming_10| | 2014-4-8 11:53 | 只看该作者
我用两个89S51的IO口做的,存在以下几点问题
1.如果旋钮旋转速度太快,有时会没有反应。
2.旋转速度太慢也没有反应。
3.旋转速度太快了,有时不能识别正反转。
IO口接的是10K电阻 104的电容。

使用特权

评论回复
评论
望断云山 2014-4-8 12:06 回复TA
用一路编码器信号产生中断才是正确的做法 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

粉丝