机电综合实验履带式机器人实验报告.docx
《机电综合实验履带式机器人实验报告.docx》由会员分享,可在线阅读,更多相关《机电综合实验履带式机器人实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
机电综合实验履带式机器人实验报告
实验名称:
机电综合实验——履带式机器人
专业班级:
指导老师:
姓名:
学号:
一、实验要求
1、了解和掌握自动化系统集成的一般过程和方法,同学们在课程中逐步掌握使用、调试、维护自动化系统方面的能力。
2、了解AT89S52芯片的主要性能,学会分析和使用常用电子芯片、电子元件和仪器设备的能力。
3、掌握机器人机械工作方式,触觉开关及红外导航工作原理,掌握机器人尾随行走所需的闭环控制算法,学会将机械运动和自动化(利用软、硬件)紧密结合。
4、学会查阅科技参考资料,根据自己的设计任务和设计方法编制程序、调试程序软、硬件联机调试,达到设计要求收集实验数据,并对结论进行分析,写好实验报告。
二、硬件连接
设备硬件部分电机、直流电机控制板(主控芯片AVR)、C51教学板(AT89S52单片机)履带式机器人本体固结,只需要进行连线。
接线时,AT89S52单片机板P10口与直流电机控制板RX(接收口)连接,P13口VIN接跳电位,GND接地线;电源线AVR板+5V接AT89S52单片机+5V,GND接地线;连接时注意各口颜色。
机器人程序通过连接到PC机或者笔记本电脑的并口上的ISP下载线来下载到教学板上的单片机内。
下载线一端连接到PC机或者笔记本的并行接口上,而另一端(小端)连接到教学板上的程序下载口上。
三、相关资料及问题
(一)、PWM直流电机调速原理:
通过AVR单片机ATmega8直接产生PWM波形经过电机驱动芯片L298分别驱动两个直流电机,PWM将占空比不同的脉冲变成不同的电压驱动直流电机转动从而得到不同的转速,且实现电机启动、停止、正反转等功能。
(二)、直流电机控制模块
1、控制板的使用说明
#definePOSITIVE_DIR1//正向旋转
#defineNEGATIVE_DIR0//反向旋转
#defineLEFT_MOTOR0//左电机
#defineRIGHT_MOTOR1//右电机
#defineNOT_STOP0//不停止
#defineSTOP1//停止
#defineBY_10MS0//时间控制系数10毫秒倍率
#defineBY_100MS1//100毫秒倍率
#defineBY_1000MS2//1000毫秒倍率
#defineNOT_CONTROL_TIME3//不控制时间
2、延时:
i>=12,i的最小延时单12us
voiddelay_nus(unsignedinti)
{
i=i/10;
while(--i);
}
//延时nms
voiddelay_nms(unsignedintn)
{
n=n+1;
while(--n)
delay_nus(900);//延时1ms,同时进行补偿
}
3、通过TTL串口驱动PWM直流电机驱动模块
voidwrite_pwm(unsignedcharbDirection,unsignedcharbSide,unsignedcharbStop,unsignedcharTimeFactor,unsignedcharSpeed,unsignedcharTime)
{
unsignedcharCommand;
bSide=bSide<<1;
bStop=bStop<<2;
TimeFactor=TimeFactor<<3;
Command=bDirection|bSide|bStop|TimeFactor;//组合命令字节
soft_send_enable();//允许软串口发送
EA=1;
rs_send_byte(0xaa);//发送控制命令的头部,恒为0xaa
rs_send_byte(Command);//发送命令字节,想要了解命令格式
rs_send_byte(Speed);//发送速度描述字节,0~255
rs_send_byte(Time);//发送时间倍率,0~255
rs_send_byte(0xbb);//发送控制命令的尾部,恒为0xbb
while(rs_f_TI==0);//等待所有的命令发出完毕
EA=0;
}
4、几个基本函数
驱动电机后退函数
原理:
左电机正转,右电机反转,以同样的速度旋转,完成后退动作
参数:
Speed:
速度系数(0~255);TimeFactor:
时间系数(X10ms,X100ms,X1000ms);Seconds:
时间倍率(0~255);时间倍率*时间系数=实际时间
voidBackward(unsignedcharSpeed,unsignedcharTimeFactor,unsignedcharSeconds)
{
write_pwm(POSITIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);
write_pwm(NEGATIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);
}
驱动电机右转函数
原理:
左右电机正转,以不一样的速度旋转,完成右转动作
参数:
Speed:
速度系数(0~255);TimeFactor:
时间系数(X10ms,X100ms,X1000ms);Seconds:
时间倍率(0~255);时间倍率*时间系数=实际时间
voidRight(unsignedcharSpeed,unsignedcharTimeFactor,unsignedcharSeconds)
{
write_pwm(POSITIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);
write_pwm(POSITIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);
}
驱动电机左转函数
原理:
左右电机反转,以不一样的速度旋转,完成左转动作
参数:
Speed:
速度系数(0~255);TimeFactor:
时间系数(X10ms,X100ms,X1000ms);Seconds:
时间倍率(0~255);时间倍率*时间系数=实际时间
voidLeft(unsignedcharSpeed,unsignedcharTimeFactor,unsignedcharSeconds)
{
write_pwm(NEGATIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);
write_pwm(NEGATIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);
}
驱动电机前进函数
原理:
左电机反转,右电机正转,以同样的速度旋转,完成后退动作
参数:
Speed:
速度系数(0~255);TimeFactor:
时间系数(X10ms,X100ms,X1000ms);Seconds:
时间倍率(0~255);时间倍率*时间系数=实际时间
voidForward(unsignedcharSpeed,unsignedcharTimeFactor,unsignedcharSeconds)
{
write_pwm(NEGATIVE_DIR,LEFT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);
write_pwm(POSITIVE_DIR,RIGHT_MOTOR,NOT_STOP,TimeFactor,Speed,Seconds);
}
(三)、头文件及PWM_Init()函数说明
uart.h:
硬串口的相关程序。
包含该文件后,在程序中调用uart_Init()函数,即可完硬串口的初始化。
soft_rs232.h:
TTL-RS232的实现程序。
在该文件中,可修改TTL-RS232的通信波特率以及输出端口。
如果在设置的TTL-RS232数据输出端口外接一个RS232电平转换芯片并搭载DB9串口接口,这样相当于构建了C51平台上的第二个串口。
该程序构建的串口为单工串口。
Movement.h:
该文件提供了龙人贝塔的运动控制函数的范例。
在包含该文件之前,请包含BetaRobot.h文件。
否则,在编译程序的时候会出现错误。
PWM_Init()函数的作用是为初始化第一层与第二层之间的TTL串口连接。
其中TTL串口的数据输出口定义为P1.0口,在程序设计的过程中,请回避该端口,避免引起机器人运动控制的错误。
在KEIL工程中,如果要使用到机器人的运动控制部分,那么在主程序的开头部分,就必须首先执行该函数,进行TTL串口初始化。
(四)、匀加、减速的实现
1、匀加速运动程序片段:
for(pulseCount=10;pulseCount<=200;pulseCount=pulseCount+1)
{
P1_1=1;
delay_nus(1500+pulseCount);
P1_1=0;
P1_0=1;
delay_nus(1500-pulseCount);
P1_0=0;
delay_nms(20);
}
上述for循环语句能使机器人的速度由停止到全速。
循环每重复执行一次,变量pulseCount就增加1:
第一次循环时,变量pulseCount的值是10,此时发给P1_1、P1_0的脉冲的宽度分别为1.51ms、1.49ms;第二次循环时,变量pulseCount的值是11,此时发给P1_1、P1_0的脉冲的宽度分别为1.511ms、1.489ms。
随着变量pulseCount值的增加,电机的速度也在逐渐增加。
到执行第190次循环时,变量pulseCount的值是200,此时发给P1_1、P1_0的脉冲的宽度分别为1.7ms、1.3ms,电机全速运转。
2、匀减速可参照匀减速通过for(pulsecount=200;pulsecount)=pulsecount=pulsecount-1)来实现速度的逐渐减小。
(五)、若输出由P1.0改为P1.1需要做什么?
因为soft_rs232.h文件为软串口驱动的头文件,在这个驱动里,采用P1.0为TTL串行通信的发送口,所以其定义串口发送管脚因由
sbitrs_TXD=P1^0;改为sbitrs_TXD=P1^1;在程序设计的过程中,请回避P1.1端口,避免引起机器人运动控制的错误。
四、程序流程图
起始
前进
左转
前进
左转
前进
左转
前进
五、正方形程序
#include
#include
voidForward(void)
{
write_pwm(NEGATIVE_DIR,LEFT_MOTOR,NOT_STOP,BY_1000MS,200,60);
write_pwm(POSITIVE_DIR,RIGHT_MOTOR,NOT_STOP,BY_1000MS,200,60);
delay_nms(2000);
}
voidLeft_Turn(void)
{
write_pwm(NEGATIVE_DIR,LEFT_MOTOR,NOT_STOP,BY_1000MS,200,180);
write_pwm(NEGATIVE_DIR,RIGHT_MOTOR,NOT_STOP,BY_1000MS,200,180);
delay_nms(2000);
}
intmain(void)
{
charNavigation[16]={'F','L','F','L','F','L','F','L','F','L','F','L','F','L','F','Q'};
intaddress=0;
uart_Init();
printf("ProgramRunning!
\n");
delay_nms(100);
PWM_Init();
while(Navigation[address]!
='Q')
{
switch(Navigation[address])
{
case'F':
Forward();break;
case'L':
Left_Turn();break;
}
address++;
}
while
(1);
}
六、心得体会
通过本次实验我对机电一体化系统的基本组成,控制方式、控制对象的基本特征及工作机理,有更进一步全面地了解,拓宽了知识面,锻炼了工程应用能力,综合素质得到了较大的提高。
这次试验我们做的进度比较慢,虽然也有电脑等硬件有过一点小问题的原因,但最主要的是没有仔细阅读和学习编程所需相关资料,导致在做的过程中出现了不少问题。
现在回过头来看其实实验并不是想象的那么难,所以不该只做到正方、S这样的阶段。
通过这次试验也明白了做设么事情一点要把准备工作做好,只有这样才能把事做好。