永发信息网

单片机欧姆龙编码器的问题,如何控制编码器的脉冲数定时的向上位机发送数值

答案:2  悬赏:30  手机版
解决时间 2021-02-07 19:21
  • 提问者网友:缘字诀
  • 2021-02-07 10:55
#include

unsigned int counter = 0; //转速编码计数变量

void Init_Serial()
{
TMOD = 0x20; //设定定时器1的工作方式2
TH1 = 250;
TL1 = 250; //定时器1的初值
PCON = 0x80; //把波特率的变大由原来的250增大到9600

SCON = 0x50; //串行接口控制器串口方式1允许接收

EA = 1; //开总的中断
TR1 = 1; //启动定时
}

main()
{
unsigned int i,j;
Init_Serial();
TMOD |= 0x05; //改变定时器2的工作方式3
while(1)
{
counter = 0;
for(j=0;j<10;j++)
{
TR0 = 1; //启动定时
i = 511;
while(i--);
TR0 = 0; //关闭定时 //精确延时,i的数值就决定了延时的时间长短
counter = TH0 * 256 + TL0 + counter; //把获得的计数值由两个8位寄存器重装为16位的整数
TH0 = TL0 = 0;
}

counter = counter / 10; //十次的平均值

SBUF = counter / 256; //sbuf代表串口的数据缓存,这是清缓存的操作
while(!TI);
TI = 0;

SBUF = (unsigned char)counter;
while(!TI);
TI = 0; //拆成两个字节发送。
}
}
网上找的 没看懂 是每隔5毫秒会像上位机发送数据的程序,望大神指教,在哪里写到是5毫秒发送的数据
最佳答案
  • 五星知识达人网友:毛毛
  • 2021-02-07 11:45
你说的是增量型编码器,这种类型的编码器主要就是测量速度的,其A,B相,Z相可以通过接在计数器或者PLC上,来获取其脉冲个数,从而进行转换,变成速度测量。一般说来只要一相信号就够了,B相信号和A相信好相位相差90度,通过A超前还是B超前从而判定电机是正转还是反转。如果只是测速度,Z相信号用不到的。Z相是一个零点参考信号,每旋转一圈,会输出一个脉冲,一般用来测量位移的时候才会用到,不过增量编码器测位移会出现丢脉冲的现象,造成脉冲累积不准,从而出现位置偏差。最重要的是,供电类型一定要看准,如果是5v供电,你供24v,那就直接烧了,切记切记!
全部回答
  • 1楼网友:荒野風
  • 2021-02-07 12:06
期待看到有用的回答!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯