AT89S51单片机全地形八足机器人机械手的设计(15)
时间:2017-01-17 19:45 来源:毕业论文 作者:毕业论文 点击:次
下位机通过串口中断接收上位机传来的控制命令,其程序如下: com_interrupt(void) interrupt 4 using 3//接收 { if(RI) RI=0; //软件复位RI buffer[point]=SBUF; point++ ; } 3.下位机串行口波特率 串行口的通信波特率恰到好处地反映了串行传输数据的速率。通信波特率的选用,不仅和所选通信设备、传输距离和MODEM型号有关,还受传输线状况所制约。用户应根据实际需要加以正确选用。 本设计主要用串口方式1,下面简单介绍一下其波特率的产生和计算方法,方式1下串行口波特率是由定时器的溢出率决定的,本设计中主要用到了定时器T1。 波特率= x定时器T1溢出率 定时器T1溢出率= 波特率= x 式中:K为定时器T1的位数,它和定时器T1的设定方式有关。即: 若定时T1为方式0,则K=13 若定时器T1为方式1,则K=16 若定时器T1为方式2或方式3,则K=8 其实,定时器T1通常采用方式2,因为定时器T1在方式2下工作,THl和TLl分别设定为两个8位重装计数器(当TLl从全“1”变为全“0”时,THl重装TLl)。这种方式,不仅可以使操作方便,也可避免因重装初值(时间常数初值)而带来的定时误差。由公式可知,方式1所选波特率常常可通过计算来确定初值。 下位机串口初始化程序如下: /*****************初始化串行端口函数*********/ void UART_init() { SCON= 0x50; //串口方式1 允许接收 PCON=0; //SMOD=0 TMOD= 0x20; //定时器1定时方式2 TH1= 0xfd; //11.0592M 9600波特率 TL1= 0xfd; TR1= 1; //启动定时器 ES= 1; EA= 1; } 4.2.2 下位机步进电机程序实现 下位机接收到上位机的命令后就开始执行相关程序控制电机运行,单片机此时的任务就是产生一定频率的环形脉冲信号,这里主要用到了单片机的P0口、P1口、P2口、P3口,其中P0口控制腰部回转关节的步进电机,P1口控制肩关节的步进电机、P2口控制肘关节的步进电机,P3口控制手爪步进电机。 电机的转动方向是通过环形脉冲信号的变化顺序来实现的,本设计所用的步进电机为两相八拍型,其正反转环形脉冲为[20] uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; 电机的转动速度主要是通过控制环型脉冲信号的切换频率,电机每收到一个脉冲信号,就转动一个角度,通过控制脉冲频率可以使电机加减速,由于电机为两相八拍型,步进角为0.9,假如上位机要求电机速度为a步/S,则每个脉冲之间应该延时1/a秒,延时可以通过定时器实现,也可已通过延时函数实现,本设计中为了简化程序,直接调用延时函数(晶振11.0592MHZ),具体程序如下: /*****************************延时1ms函数*******************/ void delay(uint p) { (责任编辑:qin) |