单片机的应用与开发
智能循迹避障小车
摘 要:
利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的转向,从而实现自动循迹避障的功能。
关键词:
智能小车 STC89C52单片机 红外对管
第一章 绪论
1.1单片机的简介
一.微型计算机(Single Chip Microcomputer)
微型计算机的主要特点:CPU集成于一个芯片中。
单片机(Micro Controller Unit)是把组成微型计算机的各功能部件:CPU、RAM、ROM、定时/计数器、中断控制器、并行和串行接口均集成在一个芯片中。其一个芯片就构成了一个比较完整的计算机系统。
微型计算机与单片机是微电子领域的两个分支。微型计算机的特点是运算速度快、存储容量大,适合于信息管理、科学计算等领域;而单片机的特点为体积小、价格低,适合于仪器、设备的控制,常常嵌入到仪器、设备中。故单片机也称作微控制器(Microcontroller)。
二.单片机的生产与发展
1.1单片机的生产:
目前世界上单片机的生产公司有上百家,如Intel、Philips、Microchip、Motorola、Siemens、NEC、AMD、Zilog、TI、Atmel等。但在国内广泛应用的只有Intel 系列和Microchip PIC系列,
(2).单片机的发展:
第1阶段(1976~1980):单片机发展初级阶段。集成了8位CPU、RAM、ROM、定时器、并行口(无串行口)等部件,但性能低,寻址范围小(≤4KB),中断系统、定时器也简单。典型机型:Intel MCS-48系列。
第2阶段(1980~1983):高性能单片机阶段。此阶段的单片机普遍带有串行口,有多级中断处理系统,多个16位定时/计数器,片内ROM、RAM的容量加大,寻址范围达64KB。典型机型:Intel MCS-51系列。
第3阶段(1983~80年代末):16位单片机和高性能8位机并行发展阶段。此阶段Intel推出16位单片机MCS-96系列,其他公司也推出了各种16位单片机。同时高性能8位单片机的性能更为完善。
第4阶段(90年代):单片机在集成度、功能、速度、可靠性等方面全面发展,如采用Flash ROM,加入了一些特殊功能部件(AD转换器,PWM输出,监视定时器WDT,DMA,调制解调器,通信控制器,浮点运算单元等)。
至今,单片机的性能已比较完善,且专业化的特点很强,为各种应用提供了很大的方便。
1.2单片机的应用
单片机由于体积小,价格低,
功耗低、控制功能强且控制逻辑可由软件来实现,因此可以很方便地完成由一般数字电路很难实现的控制逻辑。所以在测控系统,智能仪表,机电一体化产品,智能接口,智能民用产品,机器人等领域得以广泛应用。
1.在智能仪器仪表上的应用(如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量)只需结合不同类型的传感器即可控制,使得仪表达到数字化。智能化、微型化(示波器)。
2.在工业控制中的应用(如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等)多用于构成多样的控制系统,数字采集系统。设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构,在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
3.在家用电器中的应用(洗衣机、电冰箱、空调机、彩电、及其他音响视频器材,电子秤量设备等)极大的方便了我们的生活。
4.在计算机网络和通信领域中的应用(手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、集群移动通信,无线电对讲机等)利用单片机的通讯接口可以方便的与计算机进行数据通,为在计算机网络通讯设备间的应用提供了很好的物质条件。
7.单片机在汽车设备领域中的应用(如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死系统,制动系统等)
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
8.多机应用
利用单片机的串行接口和并行接口,多个单片机子系统可以彼此进行通信,构成一个网络。可以构成一个集散式的控制系统,从而控制和处理大量的控制对象和信息,且可以通过并行运算方式来提高处理速度。
总之在单片机系统中,单片机是作为控制中枢,数字电路器件是作为外围电路,二者是相辅相成的。
1.3单片机的发展趋势
目前,为了适应各种嵌入式系统的应用需求,单片机将向着高集成度、增强工能。提高速度、降低成本和功耗等
方向发展。这组要表现在以下几个方面。
1处理性能的增强:单片机的处理性能取决于其内部数据总线宽度、指令执行速度、片内存储器容量等指标。近几年发展起来的16位和32位单片机就体现了这个发展趋势。
2增强功能:未来单片机的增强功能主要在网络功能。A/D和D/A功能、ISP功能、DMA功能、显示器驱动等方面另外为了能有效地保护嵌入式系统的知识产权,对单片机内部软件的加密是必要的,单片机的内部的程序代码存储器带有加密特性是单片机的一种增强功能。
3高集成度:随着集成电路技术的和工艺的不断提高,单片机技术的发展及其应用领域不断拓展提高单片机的集成度,增加片内功能器件,减少外围器件的扩展,实现真正的“单片”系统已成为发展趋势集成更多的I/O端口和特殊接口,直接驱动LED、VFD、LCD等显示器,带有直接中断方式键盘端口等。
近年来,单片机结合专用集成电路(Application Specific Integrated Circuit, ASIC)和精简指令集计算机(Reduced Instruction Set Computer, RISC)技术,发展为嵌入式处理器(Embedded Processor),适用于数据与数值分析、信号处理、智能机器人及图像处理等高技术领域。
1.4智能小车的意义和作用
自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。
随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的方法。
机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(AVG—auto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。
该智能小车可以作为机器人的典型代表。它可以分为三大组成部分:传感器检测部分、执行部分、CPU。机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。基于上述要求,传感检测部分考虑到小车一般不需要感知清晰的图像,只要求粗略感知即可,所以可以舍弃昂贵的CCD传感器而考虑使用价廉物美的红外反射式传感器来充当。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。单片机驱动直流电机一般有两种方案:第一,勿需占用单片机资源,直接选择有PWM功能的单片机,这样可以实现精确调速;第二,可以由软件模拟PWM输出调制,需要占用单片机资源,难以精确调速,但单片机型号的选择余地较大。考虑到实际情况,本文选择第二种方案。CPU使用STC89C52单片机,配合软件编程实现。
1.5智能小车的现状
现智能小车发展很快,从智能玩具到其它各行业都有实质成果。其基本可实现循迹、避障、检测贴片、寻光入库、避崖等基本功能,这几节的电子设计大赛智能小车又在向声控系统发展。比较出名的飞思卡尔智能小车更是走在前列。我此次的设计主要实现循迹避障这两个功能。
第二章 方案设计与论证
根据要求,确定如下方案:在现有玩具电动车的基础上,加装光电检测器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。
主控系统
根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。据此,拟定了以下两种方案并进行了综合的比较论证,具体如下:
方案一:
选用一片CPLD(如EPM7128LC84-15)作为系统的核心部件,实现控制与处理的功能。CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。但CPLD在控制上较单片机有较大的劣势。同时,CPLD的处理速度非常快,而小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,在这一点上,MCU就已经可以胜任了。若采用该方案,必将在控制上遇到许许多多不必要增加的难题。为此,我们不采用该种方案,进而提出了第二种设想。
方案二:
采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。
针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。根据这些分析,我选定了P89C51RA单片机作为本设计的主控装置,51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是51单片机价格非常低廉。
在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片单片机,充分利用STC89C52单片机的资源。
电机驱动模块
方案一:
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。
方案二:
采用电阻网络或数字电位器调节电动机的分压,从而达到分压的目的。但电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般的电动机电阻很小,但电流很大,分压不仅回降低效率,而且实现很困难。
方案三:
采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的 H型桥式电路(如图2.1)。用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的 PWM调速技术。
这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。
因此决定采用方案一
循迹模块
方案一:
采用简易光电传感器结合外围电路探测,但实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。在使用过程极易出现问题,而且容易因为 该部件造成整个系统的不稳定。故最终未采用该方案。
方案二:
采用两只红外对管(如图2.3),分别置于小车车身前轨道的两侧,根据两只光电开关接受到白线与黑线的情况来控制小车转向来调整车向,测试表明,只要合理安装好两只光电开关的位置就可以很好的实现循迹的功能。(参考文献[3])
方案三:
采用三只红外对管,一只置于轨道中间,两只置于轨道外侧,当小车脱离轨道时,即当置于中间的一只光电开关脱离轨道时,等待外面任一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。可以正确的循迹但其成本与稳定性都次与第二种方案。
通过比较,我选取第三种方案来实现循迹。
避障模块
方案一:
采用一只红外对管置于小车中央。其安装简易,也可以检测到障碍物的存在,但难以确定小车在水平方向上是否会与障碍物相撞,也不易让小车做出精确的转向反应。
方案二:
采用二只红外对管分别置于小车的前端两侧,方向与小车前进方向平行,对小车与障碍物相对距离和方位能作出较为准确的判别和及时反应。但此方案过于依赖硬件、成本较高、缺乏创造性,而且置于小车左方的红外对管用到的几率很小,所以最终未采用。
方案三:
采用三只红外对管置于小车前端左中右。通过测试此种方案就能很好的实现小车避开障碍物。
通过比较我采用方案三。
红外避障探头
电源模块
方案一:
采用实验室有线电源通过稳压芯片供电,其优点是可稳定的提供5V电压,但占用资源过大。
方案二:
采用4支1.5V电池单电源供电,但6V的电压太小不能同时给单片机与与电机供电。
方案三:
采用8支1.5V电池双电源分别给单片机与电机供电可解决方案二的问题且能让小车完成其功能。
方案四:
采用移动电源双USB接口分别给单片机与电机供电可解决方案二的问题且能让小车完成其功能。
所以,我选择了方案四来实现供电。
第三章 硬件设计
总体设计
智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,调制前面两个轮子的转速起停从而达到控制转向的目的,后轮是万象轮,起支撑的作用。将循迹光电对管分别装在车体下的左右。当车身下左边的传感器检测到黑线时,主控芯片控制左轮电机停止,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制右轮电机停止,车向右修正。
避障的原理和循线一样,在车身右边装一个光电对管,当其检测到障碍物时,主控芯片给出信号报警并控制车子倒退,转向,从而避开障碍物。
元件清单
元件
数量
元件
数量
元件
数量
直流电机
4只
电阻
3只
空白电路板
1只
单片机
1 块
二极管
若干
电容
2只
红外对管
避障
3只
红外对管
循迹
2只
继电器
2只
12M晶振
1只
杜邦线
若干
玩具小车
1个
排针
若干
信号检测模块
小车循迹原理是小车在画有黑线的白纸 “路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。
红外探测法,即利用红外线在不同颜 {MOD}的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白 {MOD}地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM324作比较器来采集高低电平,从而实现信号的检测。避障亦是此原理。电路图如图3.4。
市面上有很多红外传感器,在这里我选用TCRT5000型光电对管。
循迹程序:
void stright()
{
jdq1=0;
jdq2=0;
}
void back()
{
jdq1=1;
jdq2=1;
}
void turn_left()
{
jdq1=0;
jdq2=1;
}
void turn_right()
{
jdq1=1;
jdq2=0;
}
void xunji()
{
if(red_left==0&&red_right==0)
back();
if(red_left==1&&red_right==1)
stright();
if(red_left==1&&red_right==0)
{
delay(10);
turn_left();
}
if(red_left==0&&red_right==1)
{
delay(10);
turn_right();
}
}
void main()
{
while(1)
{
xunji();
}
}
避障程序:
void bizhang()
{
if(left==0&&mid==1&&right==1)/*左边亮往右*/
{
jdq1=0;
jdq2=1;
delay(200);
}
if(left==1&&mid==0&&right==1)/*中间亮往左*/
{
jdq1=1;
jdq2=1;
delay(200);
jdq1=1;
jdq2=0;
delay(200);
}
if(left==1&&mid==1&&right==0)/*右边亮往左*/
{
jdq1=1;
jdq2=0;
delay(200);
}
if(left==0&&mid==0&&right==1)/*左边两个亮后退往右*/
{
jdq1=1;
jdq2=1;
delay(200);
jdq1=0;
jdq2=1;
delay(200);
}
if(left==1&&mid==0&&right==0)/*右边两个亮后退往左*/
{
jdq1=1;
jdq2=1;
delay(200);
jdq1=1;
jdq2=0;
delay(200);
}
if(left==0&&mid==0&&right==0)/*三个灯亮后退往左*/
{
jdq1=1;
jdq2=1;
delay(200);
jdq1=1;
jdq2=0;
delay(200);
}
}
void main()
{
while(1)
{
jdq1=0;
jdq2=0;
bizhang();
}
}