在控制机器人程序中,需要对机器人的下一位置作出预估,这时就需要知道它目前的速度,然后根据程序周期
算出下一过程需要走过的路程:S=v*T。要测量速度,一般我们用增量型旋转编码器来测量。旋转编码器输出的为脉冲信号。我们这里使用NPN输出,分别为A相,B相和Z相。AB相相差90度的相位差,用来辨识转动方向;Z相每转动一圈产生一个脉冲。
本实例是用的PM511P多功能数据采集板
/*82C54计数器的初始化,为递减计数*/
void Begin_Encoder()
{
outportb(ADAddr + 0x0f,0x34); /*初始化clock0 :工作方式为2:比率发生器;CPU读/写方式为先读/写低8位,后读写高8位;数码形式为十六位二进制*/
outportb(ADAddr + 0x0c,0x00); /*初始值定为0x2000=8192*/
outportb(ADAddr + 0x0c,0x20);
}
int In_LaserShaftPosition(void)
{
unsigned char dl,dh;
int d;
dl = 0;
dh = 0;
d = 0;
outportb(ADAddr + 0x0f,0x00); /*锁住计数器,将计数值锁存到寄存器,供CPU读取,锁存操作时,其他四位无效,计数器按原来的方式工作*/
dl = inportb(ADAddr + 0x0c); /*读clock0低字节*/
dh = inportb(ADAddr + 0x0c); /*读clock0高字节*/
d = dh * 0x100 + dl; /*组合成16位*/
d = 4096*2 -d; /*输出计数数*/
return d;
}