百韵网 >>  正文

51单片机开发板和绝对式编码器连接测量角度的程序 旋转编码器跟51单片机连接如果需要测量出旋转角度应该怎么弄啊...

来源:www.baiyundou.net   日期:较早时间
#include <reg52.h>
#include "inc/delay.h"
#include "inc/hc595.h"

#define uchar unsigned char
#define uint unsigned int
sbit PIN_ROTARY_A = P2^0; //引脚1接口
sbit PIN_ROTARY_B = P2^1; //引脚2接口
sbit PIN_ROTARY_C = P2^2; //按下的接口

sbit PIN_ROTARY_D = P2^3; //按下的接口

//uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
/* 存储待发送的数据 */
/* 1->8的段码表 */
code unsigned char ucDis_Segmentcode[16] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/* 位码表 */
code unsigned char ucDis_Bitcode[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
uchar dis_XS[8] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d};
uchar count = 0;
uchar flag;
uchar Last_BMB_status;

uchar Current_BMB_status;

void display()
{
uchar i;

dis_XS[0] = ucDis_Segmentcode[count/100]; //百位

dis_XS[1] = ucDis_Segmentcode[count%100/10]; //十位

dis_XS[2] = ucDis_Segmentcode[count%10]; //个位

if(i < 2)
{
i++;
}
else
{
i = 0;
}

// for (i = 0; i < 3; i++ )
{
Send_Data(dis_XS[i], ucDis_Bitcode[i]);
//PIN_ROTARY_D = 0;
// Delay1ms(1);
}
}

//************************************************
void main()
{

TMOD=0x01; //定时器0,工作方式1
TH0=0xD8;
TL0=0xF0; //给定时器装上初值,10ms中断一次
ET0=1; //打开定时器中断
EA =1; //打开总中断
TR0=1; //启动定时器0

while(1)
{
//display();
Last_BMB_status=PIN_ROTARY_B;

while(!PIN_ROTARY_A) //BMA为低电平时
{
Current_BMB_status = PIN_ROTARY_B;
flag = 1; //标志位置为1说明编码开关被旋转了
}

if(flag == 1)
{
flag = 0; //时刻要注意这一点!给标志位清零
if((Last_BMB_status == 0)&&(Current_BMB_status == 1)) //BMB上升沿表示正转
{
count++;
if(count == 255)
{
count = 0;
}
}
if((Last_BMB_status == 1)&&(Current_BMB_status == 0)) //BMB下降沿表示反转
{
count--;
if(count == 0)
{
count = 255;
}
}
}
}
}

//***********************************************
void timer0() interrupt 1//定时器0的中断服务程序
{
TH0=0xF8; // TH0=0xD8;
TL0=0xF0; //再次装入初值
display(); //每隔10ms显示一次
if(!PIN_ROTARY_C) //按下旋转编码开关则计数清零
{
count = 0;
}
PIN_ROTARY_D = !PIN_ROTARY_D;
}

不知道的发送到发送到分

旋转编码器跟51单片机连接如果需要测量出旋转角度应该怎么弄啊,谢谢~

相对型旋转编码器:
将A、B路脉冲接入8051(或8031)单片机的脉冲输入端口。用程序读入脉冲的8种状态(即A为高电平;A非为低电平;A↑为A的上跳沿;A↓为A的下跳沿。B 类似),并有8种组合,其中四种组合表示旋转编码器正转,另四种组合表示旋转编码器反转(具体略)。
根据旋转编码器每转的编码数,以及选择的倍率(一般为4倍),计算脉冲当量(即每个脉冲对应的转角--度/脉冲)。
单片机发出读脉冲指令,计数器开始累加脉冲输入个数,直到单片机发出停止指令。由程序计算出旋转角度。
以上是由主程序读脉冲,也可以中断方式读脉冲。具体程序处理略。
绝对型旋转编码器:
将旋转编码器的编码信号通过并行口接入8051(或8031)单片机的数据输入端口。
旋转编码器每转对应n个编码,计算每度角度对应m个编码(即m=n/360)。
可通过中断方法读旋转编码器的编码。
通过两次读的编码,计算出旋转角度。
程序需要注意两点:旋转方向的处理和模数的处理。具体程序处理略。
简单叙述至此,希望能对你有所帮助。

楼主 什么意思?

程序 与 硬件 紧密相关

相关要点总结:

15781738149:51单片机能和10条数据线的绝对性编码器链接吗!!
养贡答:一个方向旋转时,编码器输出格雷码所代表的值应该是递增的吧??为什么我的不是递增的呢 这样跳跃的0 ,1 ,6,,,7.。。而且0和1023也不是挨着的啊!!--- 按照这说法,这个编码器输出的,不是格雷码。否则,就应该是:楼主的接线,有错。

15781738149:编码器输出线有几根,怎么与单片机相连接,它输出的信号与测量的角度怎...
养贡答:问题太笼统了。一、1、一般增量式编码器常用有3个信号,ABZ。输出可以是ABZ三个信号输出,也可以是ABZA|B|Z|六个信号输出。接单片机一般要用电压信号。除了电源两根线外,3信号输出的应还有3根线的6信号输出的应还有6根线。2、并口绝对式编码器要看你用的是几位的。如10位的,除电源线(一般2...

15781738149:旋转编码器连接单片机
养贡答:include < reg52.h> //头文件 sbit anotherbit = P1^2; //旋转编码器另一脚 sbit rotation=P1^0; //旋转编码器中一脚 bit oldbit; //上一状态暂存位 unsigned char led1,led2,led3,led4,ztj;//LED显示缓存,扫描状态机 int xuanzhuanzhi,ctemp;//旋转值 unsigned char code leds...

15781738149:旋转编码器跟51单片机连接如果需要测量出旋转角度应该怎么弄啊,谢谢...
养贡答:单片机发出读脉冲指令,计数器开始累加脉冲输入个数,直到单片机发出停止指令。由程序计算出旋转角度。以上是由主程序读脉冲,也可以中断方式读脉冲。具体程序处理略。绝对型旋转编码器:将旋转编码器的编码信号通过并行口接入8051(或8031)单片机的数据输入端口。旋转编码器每转对应n个编码,计算每度角度对应m...

15781738149:旋转编码器怎么连接51单片机
养贡答:旋转编码器 信号主要是两个 都是方波 不过相位差有180度 一个接到外部中断上 另一个接普通IO口 当有外部中断是 中断程序里判断另一个信号是高还是低电平 依据这个判断旋转的方向 还有什么问题 可以HI我

15781738149:问下增量式旋转编码器与51单片机的接线问题。
养贡答:从而确定旋转角度和方向。需要注意的是,增量式旋转编码器的输出信号是脉冲信号,需要进行计数和处理才能得到实际的旋转角度。可以使用单片机的计数器或者其他相关模块来实现这一功能。总之,增量式旋转编码器与51单片机的接线需要注意以上几点,只有正确连接才能实现旋转位置检测的功能。

15781738149:请教光电编码器如何和单片机相连
养贡答:首先,需要了解光电编码器的工作原理。光电编码器通常由光电传感器和编码盘两部分组成。编码盘上有许多刻有黑白相间的条纹,当编码盘旋转时,光电传感器会检测到黑白条纹的变化,从而输出脉冲信号。通过计算脉冲数和方向,可以确定物体的位置和运动状态。接下来,需要选择合适的接口方式。常见的接口方式有两种:...

15781738149:编码器如何接线
养贡答:3、下图为PNP 输出增量型E6B2-CWZ6B 的实际接线图,棕色线接电源正极,蓝色线接电源负极,黑色线接输入0.00,白色线接输入0.01,橙色线接输入0.04,PLC 的COM 接电源负极。4、下图为绝对值型编码器的线与PLC 输入的点的对应图。5、下图为NPN 输出绝对值型E6C3-AG5C 的实际接线图,红色线接电源...

15781738149:问下增量式旋转编码器与51单片机的接线问题。
养贡答:输出一般有两种,一种是输出一个方向信号和一个计数信号。用单片机的一个计数器(如用T0),这样就能实现正反两方向的加减计数了。另一种是输出两个正反计数的脉冲串。用两个计数器做减法运算。两种都可以。Z信号一般不用接计数器。看你用途和用法了。2、编码器直接接单片机。如你用5V单片机那编码器...

15781738149:旋转编码器怎么连接51单片机
养贡答:可以将其A或B脉冲接入到T0/T1的输入,将定时器设置为计数模式。Z脉冲可以接入到外部中断0或1.

(编辑:本站网友)
相关推荐
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 百韵网