智能小车设计Word文件下载.docx
《智能小车设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《智能小车设计Word文件下载.docx(38页珍藏版)》请在冰点文库上搜索。
从20世纪70年代,欧美等发达国家开始进行无人驾驶车的研究,大致可以分为三个阶段:
军事用途、高速公路和城市环境
在军事用途方面,早在80年代初期,美国国防部就资助自主陆地车辆ALV(AutonomousLandVehicle)的研究。
进入21世纪,美国国防部连续举办大挑战(GrandChallenge)比赛活动,对促进智能车辆技术交流与创新起到很大激励作用。
随着现实需要,智能车辆的研究逐渐转向民用领域,最早实现在高速公路应用领域。
高速公路无人驾驶研究的典型代表有美国CMU大学的NavLab-5系统,意大利帕尔玛大学的ARGO系统和德国联邦国防大学的VAMP系统。
在城市交通方面,欧洲Yamaba公司推出了旅游接待智能车辆CyberCab
。
在2005年日本爱知世博会上,丰田公司成功演示了ITMS无人驾驶公交系统。
美国在城市环境智能车辆研发方面起步较晚,目前与欧洲和日本存在一些差距。
由于起步较晚,国内智能车研究水平总体上与发达国家相比存在不小的距离。
但经过各高校和研究单位的不懈努力,仍取得了阶段行的成果。
国内清华大学、国防科技大学、上海交通大学、西安交通大学、吉林大学、同济大学和南京理工大学等都有过智能车的研究项目。
我国的智能车发展也主要运用在军事用途、高速公路和城市交通三个领域。
“八五”、“九五”期间由国内六所重点大学联合研制成功了我国第一辆智能车ALVLAB1和第二代智能车ALVLAB2。
目前,我国正在组织研究第三代的陆地自主车ALVLAB3。
THMR-V(TsingHuaMobileRobotV)清华V型智能车是一个比较成功的范例。
它由清华大学计算机系智能技术与系统国家重点实验室在中国科学院院士张钹主持下研制的新一代智能移动机器人,兼有面向高速公路和一般道路的功能。
除了清华大学,越来越多的研究机构、学者也加入到这一新兴学科中来。
比如上海交通大学设计的自动驾驶汽车,能根据道路弯曲程度的变化,实时计算出车辆的转向盘角度输入,控制车辆按预设道路行驶。
3、课题研究内容
智能车的研究是纷繁复杂的,而无论是怎样的功能,车体的运动系统是可少的。
本文设计方案以多功能的智能小车作为载体,以单片机AT89S52
为核心,以XL02-232AP1微功率无线透明传输模块为辅助系统,由驱动执行电路完成小车的行驶,通过计算机的控制对小车状态作出实时反应,并输出相应的控制指令;
能够实现小车的前进,停止,后退,三个等级的左右转向,以及小车的弧形运动。
是智能车的基础研究领域。
第1章设计环境建设
1.1硬件环境
要迅速反应、精确计算高效率的完成复杂功能,就需要一个运作稳定良好的硬件环境。
而提升硬件环境质量。
高质量的硬件可以提供更加清晰丰富的数据,收集足够而标准的有用信息。
当然,硬件系统牢固的架构与良好的信息传导性能,将会极大地提高整个系统的信息传递速率与系统稳定性,也是提高系统有效信息传递效率的可靠保证。
硬件系统铺设过程中要预留有足够的调试空间,要有目的有计划的建设系统关键节点,足够而适当的调试空间可以提升系统的各方面适应性和可靠性。
1.1.1硬件系统铺设
图1-1
1.1.2硬件设备
本设计中用到的硬件设备包括:
可执行串口控制指令的智能小车一辆,无线收发模块一套,USB转串口设备一套,软件开发包一套,电池、导线若干。
1.2软件环境
设计中用到的软件操作系统是windowsxp,编程中用到了vc,在模拟仿真中用到了KeilC,protel,proteus等。
第2章智能小车车体
智能小车车体是整个设计中的核心,它是这个系统运作的最终执行者。
它表现了整个智能小车设计的系统执行效率。
2.1智能小车的硬件结构
2.1.1主控芯片的选择
方案一:
采用单个单片机作为主控芯片。
由于AT89S52具有32个I/O口,能满足小车各部分对I/O口的需求,另外只用一个单片机可以很好的控制小车。
方案二:
采用双单片机作为主控芯片。
利用两块AT89S52分别对小车的各部分进行检测和控制,虽然减轻了单个单片机的负担,提高了系统的工作效率,但是存在很多的I/O的资源浪费,并且两个单片机不容易控制,所以不采用该方案。
使用方案一。
2.1.2主要芯片介绍
AAT89S52芯片
图2-1
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
P0口:
P0口是一个8位漏极开路的双向I/O口。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。
在flash编程和校验时,P1口接收低8位地址字节。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:
外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
BL293D芯片
图2-2
L293D
通过内部逻辑生成使能信号。
H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。
另外,L293D将2个H-桥电路集成到1片芯片上,这就意味着用1片芯片可以同时控制2个电机。
每1个电机需要3个控制信号EN1、EN2、IN1、IN2,其中EN1、EN2是使能信号,IN1、IN2为电机转动方向控制信号,IN1、IN2分别为1,0时,电机正转,反之,电机反转。
选用一路PWM连接EN12引脚,通过调整PWM的占空比可以调整电机的转速。
选择一路I/O口,经反向器74HC14分别接IN1和IN2引脚,控制电机的正反转。
L293D额定工作电流为1A,最大可达1.5A,Vss电压最小4.5V,最大可达36V;
Vs电压最大值也是36V,但经过实验,Vs电压应该比Vss电压高,否则有时会出现失控现象。
L293D内部集成了续流二极管,因此可以直接驱动感性负载,如线圈和电机。
表2-1是其使能、输入引脚和输出引脚的逻辑关系:
表2-1
ENA(B)
IN1(IN3)
IN2(IN4)
电机运行情况
H
L
正转
反转
同IN2(IN4)
同IN1(IN3)
快速停止
X
停止
CMAX232芯片
MAX232芯片(如图2-3)是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。
图2-3
引脚介绍:
第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;
DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5v)。
主要特点:
(1)符合所有的RS-232C技术标准
(2)只需要单一+5V电源供电
(3)片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-
(4)功耗低,典型供电电流5mA
(5)内部集成2个RS-232C驱动器
(6)内部集成两个RS-232C接收器
2.1.3小车控制板电路图
涉及到的主要配件有:
300rad/min直流电机,ATmega8515L芯片,MAX232芯片,滤波器,电容,电阻,二级管,串口接口,开关等,智能小车的原理图详见附录1。
2.1.4小车电路板成品样图
图2-4智能小车车体及无线接收模块
图2-5无线发射模块图2-6USB转串口模块
2.2智能小车关键代码(见附录2)
本程序在IccAVR仿真调试IDE中由C语言编写后生成.Hex文件,再由双龙MCU下载程序SLISP下载到小车单片机上。
它的功能为接受串口传入的16位控制命令01、02、03、04、05,并根据接收到的16位控制命令实现小车的前进、后退、左转、右转及停止功能。
此程序不具有应答反馈和路径判断功能,属于完全被动的执行上位机命令的客户端程序。
2.3智能小车程序介绍
本设计程序分为上位机和下位机,上位机主要通过MFC控制窗口对小车发送运动指令,上位机通过MFC读取指令,由计算机的串口发送给XL02-232AP1无线发送模块。
无线接收模块接收命令后进行分析解码,传送给单片机AT89S52,单片机读取指令,发送控制命令给电动机驱动芯片L293D,驱动电机运转,从而实现智能小车的运动。
2.3.1上位机程序介绍
上位机是用MFC写成的应用程序,主要目的为通过COM口向串口发送数据到无线发送模块,经接收模块接收后控制小车的运行轨迹。
例如:
小车的左直角拐弯的控制代码如下
voidCRobot2Dlg:
:
OnButton7()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CSerialser;
charbuf[1];
buf[0]=Rob_left_one;
ser.Open(com,9600);
ser.SendData(buf,com);
ser.Close();
}
通过运行程序,点击此按钮可以实现小车的左转弯的运动。
2.3.2下位机程序介绍
A主要功能及实现
本设计主要实现了只能小车在运动过程中的直行,后退,停止及转弯,下面详细介绍各功能的实现情况。
sbitinput1=P1^3;
sbitinput2=P1^2;
sbitinput4=P1^0;
sbitinput3=P1^1;
sbiten=P3^6;
分别定义input1,input2,input4,input3为P1口的第3,2,0,1位,以便进行位操作,定义en为p3口的第六位。
首先进行单片机的初始化。
TMOD=0x22;
TH0=0x38;
TL0=0x38;
TH1=0xfd;
TL1=0xfd;
TR0=1;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
ET0=1;
对定时器方式选择寄存器TMOD的操作,确定是按定时器的工作模式,TH0和TL0分别是定时器0的高低8位,赋初值为0x38,TH1和TL1分别是定时器1的高低八位,赋初值为0xfd。
TR0=1,TR1=1表示分别启动T0和T1计数器REN为接收控制位,REN=1表示允许接收。
SM0=0,SM1=1表示单片机的串行口的通信方式是10位异步收发方式,所用的波特频率则由定时器控制完成。
在中断初始化方面,EA=1表示开单片机所有中断,ES=1开串行口中断,ET0=1开TO中断,初始化完毕,进入主程序循环。
主程序中,建立voidcarmov(ucharleft,ucharright)函数,方便主程序循环语句while()的调用。
利用switch语句的判断,例如小车的右转:
case0x06:
carmov(UF,US);
break;
//小车原地
case0x07:
carmov(UF,UL);
//小车右转弧形拐弯1级
case0x08:
carmov(UF,UM);
//小车右转弧形拐弯2级
单片机对接收到的指令通过上述语句进行判断,若收到的为0x08,则执行第三条语句,调用carmov函数,函数的两个初始值分别为UF和UM,在程序中已定义#defineUF1,#defineUM2,运行carmov函数,首先进行左轮运动情况的判断,在此例中,我们选择左轮的初值为UF。
if(left==UF)
{
input1=1;
input2=0;
input1和input2分别赋值为1和0,表示小车左轮全速前进。
继续运行程序进行小车的右轮运动情况的判断,此例中,我们选择右轮的初值为UM。
elseif(right==UM)
{
if(num<
60)
{
input4=1;
input3=0;
}
else
input3=1;
}
首先判断num是否小于60,若小于,则将input4和input3分别赋值为1及0,既右轮前进,否则将二者赋值为1和1,右轮停止。
通过左右轮的单独控制,完成小车的向右2级弧形拐弯。
在本程序设计中,巧用定时器中断模拟产生了PWM信号,以实现控制舵机。
voidtim0()interrupt1
num++;
if(num>
=90)
num=0;
简单介绍单片机模拟产生PWM信号。
单片机系统实现对电机的控制,必须首先完成两个任务:
首先是产生基本的PWM周期信号;
其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。
在此,我们设计num初值为0,num自加,如果num>
=90时,则将num变为0继续中断程序运行,在此我们用定时器中断模拟出PWM波,将其分成90等份,在小车转动过程中,可以限制num值的大小而调整PWM波中高电平的占空比,从而实现小车电机在一个PWM周期波中的转数控制,达到小车拐弯角度的控制
具体的设计过程:
例如想让小车转向左极限的角度,它的正脉冲为2ms,则负脉冲为脉冲周期20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到电机。
用修改定时器中断初值的方法巧妙形成了脉冲信号,调整时间段的宽度便可使小车运动。
为保证软件在定时中断里采集其他信号,并且使发生PWM信号的程序不影响中断程序的运行(如果这些程序所占用时间过长,有可能会发生中断程序还未结束,下次中断又到来的后果),所以需要将采集信号的函数放在长定时中断过程中执行,也就是说每经过两次中断执行一次这些程序,执行的周期还是20ms。
B程序流程图
图2-7产生PWM信号流程图
图2-8串口中断程序流程图
图2-9定时器中断流程图
图2-10主程序流程图
第3章无线收发模块
在小车系统中,控制系统的基本任务是:
接收系统通过无线通信发射装置传来的运动控制指令,然后根据接收到的运动指令控制小车左、右轮的停止或转动以实现规划的运动。
机器人能否正确接收运动控制指令,决定于无线通信系统的性能。
所以通信速率高、集成度好、可靠性高、抗干扰能力强的无线通信系统对于正确实现小车的运动规划具有重要的意义
3.1无线模块的选择
本设计中采用一款低功耗超高频的XL02-232AP1数据收发模块,它具有通信速率高、性能可靠、体积小的优点,只接少许外围电路即可工作,使用非常方便,既可发送又可接收。
其特点主要有
:
★300米传输距离
★工作频率在428.8-435.1MHz,(默认433.92MHZ)
★可设置I