打印

看我个人信息里的《定时炸*C4的制造方法》,里边有用到这

[复制链接]
15281|46
手机看帖
扫描二维码
随时随地手机跟帖
沙发
太阳之母| | 2007-7-17 12:01 | 只看该作者

??

跟什么样的MCU连接?怎么连接的?旋转编码器和MCU之间有什么电路?

使用特权

评论回复
板凳
xzhenggen|  楼主 | 2007-7-17 12:12 | 只看该作者

也就是三端可调电位器,跟89S52的P1.7,P1.6相连.中间脚接地.

使用特权

评论回复
地板
mxh0506| | 2007-7-17 12:20 | 只看该作者

原来是电位器,我还以为是光电式的

不知道中间脚是不是滑动端

使用特权

评论回复
5
liandao| | 2007-7-17 12:21 | 只看该作者

不是吧

如果是电位器,MCU怎么测?S52有AD?旋转编码器应该是两个光偶,输出两路同频不同相方波,频率跟旋转速度有关,相位跟旋转方向有关.

使用特权

评论回复
6
xzhenggen|  楼主 | 2007-7-17 12:31 | 只看该作者

测编码器(调节旋钮)时,在两个脚上测出信号波形如下:

使用特权

评论回复
7
xzhenggen|  楼主 | 2007-7-17 12:45 | 只看该作者

跟另一张电路图相同如下。

使用特权

评论回复
8
xzhenggen|  楼主 | 2007-7-17 12:48 | 只看该作者

我的编码器应用波形如下,就是不明白它是如何判断方向及

使用特权

评论回复
9
xzhenggen|  楼主 | 2007-7-17 12:53 | 只看该作者

上一次的四个按键组合代替编码器,已经搞掂。

但还是必须加入一个编码器安装在控制面板上,请各位提供一下思路或例程,多谢了。

使用特权

评论回复
10
liao_43| | 2007-7-17 13:09 | 只看该作者

我有些资料,你可以参考参考.

那种旋转式编码器和光电旋转式编码器输出的波形都一样的(除了没有Z相信号外)
相关链接:https://bbs.21ic.com/upfiles/img/20077/200771713859658.pdf

使用特权

评论回复
11
微风| | 2007-7-17 13:37 | 只看该作者

加CPLD计数和判断方向

思路:需要对一路信号的同一个沿进行处理,对于同一个沿来说,从一个方向看过去是上升沿,那么从另一个方向看过去则是下降沿。当A为上升沿的时候,如果B是高电平,那么计数器加一;当A为下降沿的时候,如果B是高电平,那么计数器减一。

使用特权

评论回复
12
大雁塔莱农| | 2007-7-17 13:50 | 只看该作者

倒塌了,这都写不出程序的话LZ实在该打屁股

使用特权

评论回复
13
lsqdesign| | 2007-7-17 14:44 | 只看该作者

相位差90度

相位差90度判断方向

使用特权

评论回复
14
yewuyi| | 2007-7-17 15:14 | 只看该作者

嘿嘿,不仅要打,还要重重来几下……

^_^ ,下闷棍才行……

使用特权

评论回复
15
xzhenggen|  楼主 | 2007-7-17 16:49 | 只看该作者

晕啊!要打我也认了,谁叫咱这么笨!“鸟先飞”。

还是不得要领,请各位大侠支招一下,提供一个子程序或例程给我参考参考一下,多谢了!

使用特权

评论回复
16
xzhenggen|  楼主 | 2007-7-17 16:51 | 只看该作者

请提供一个C例程(子程序)吧,不要汇编的。。。。。。

使用特权

评论回复
17
太阳之母| | 2007-7-17 17:41 | 只看该作者

请我喝酒,啤的,就给你代码,C的.嘿嘿

使用特权

评论回复
18
一朝成名| | 2007-7-17 17:47 | 只看该作者

自己琢磨吧会有点收获的

基本思路

使用特权

评论回复
19
太阳之母| | 2007-7-17 18:50 | 只看该作者

啤酒准备好了没?嘿嘿

//******************************************************************************
// 旋转编码器脉冲计数程序,在8051上通过外部中断0实现
// 特别说明:适应于旋转编码器脉冲频率较低的场合(对于12MHz晶体,大致可以支持 4KHz
//           以下的旋转编码器脉冲频率),若旋转编码器脉冲频率更高,建议采用计数器
//           T0和T1分别实现正反向计数,此时一般需要附加少量外部电路的配合
// 以下代码仅供参考,由此产生的任何后果,本人不承担任何责任
//******************************************************************************
#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--;
   }
}

使用特权

评论回复
20
567| | 2007-7-17 19:29 | 只看该作者

定时查询端口电平变化

AB
正转 00->01->11->10->00->01->........
反转 00->10->11->01->00->10->........

举例说明:
上次采样AB引脚电平状态为00,本次采样的结果是01则说明正转一个脉冲,计数值加一,本次采样结果是10则说明反转,计数值减一。
依次判断
01->11  加一
11->01  减一
.
.
.
.
.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

529

帖子

1

粉丝