智能小车工程实训报告.docx
《智能小车工程实训报告.docx》由会员分享,可在线阅读,更多相关《智能小车工程实训报告.docx(40页珍藏版)》请在冰点文库上搜索。
智能小车工程实训报告
科学技术学院
SCIENCE&TECHNOLOGYCOLLEGEOF
NANCHANGUNIVERSITY
《工程训练》报告
REPORTONENGINEERINGTRAINING
题目:
智能寻迹避障小车
学科部、系:
信息学科部、电子信息系
专业班级:
071电子信息工程
学号:
7020907007
学生姓名:
万云
指导教师:
艾显钰、胡保安
起讫日期:
2010.04.19——2010.04.30
题目:
基于51系列单片机的音乐智能寻迹避障小车的设计
专业:
电子信息工程学号:
7020907007学生姓名:
万云指导教师:
艾显钰、胡保安
摘要
自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。
近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。
人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。
随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。
视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。
视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。
但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的方法。
机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。
避障控制系统是基于自动导引小车(AVG—auto-guidevehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。
使用传感器感知路线和障碍并作出判断和相应的执行动作。
第一章智能寻迹避障小车的概述
1.1设计的目的与要求
1.2技术指标
第二章设计方案的选择和确定
2.1主控系统方案
2.2传感器系统
第三章系统硬件设计
3.1整体构思
3.2直流电机的驱动电路
3.3避障传感器电路
第四章系统的软件设计
4.1主程序流程图
4.2传感器数据处理及寻迹程序流程
4.3系统完整电路图
4.4基于AltiumDesigner6.0的PCB板电路图
4.5单片机控制程序
第五章性能测试与分析
5.1测试仪器及设备
5.2功能测试
第六章单片机最小系统质量检测
第一章智能寻迹避障小车的概述
1.1设计的目的与要求
通过基于51系列单片机的音乐智能寻迹避障小车的设计与控制实训,除了加深和巩固学生课程理论学习之外,更重要的是加强实践、拓展应用,让学生了解基于51系列单片机的开发和运用的一个整体开发流程,包括在训练中要求学生能够自己根据性能指标和功能要求掌握硬件电路的设计和制作、元器件的选用和安装、软件的编写和调试,同时学会硬件仿真、软件仿真和整机联调,其中最关键的两部分:
硬件电路设计与制作和控制软件的编写以及调试,使得准产品最后达到技术指标的要求。
1.2技术指标
1、音乐智能寻迹小车需基于51系列单片机进行开发和设计。
2、能实现在椭圆轨道、S形轨道,太极图形轨道等多种规则黑线轨道上寻迹运行,并还可以实现在任意黑线轨道上运行。
3、至少两种方式启动:
一是通过掌声、口声等其它声音启动;二是能通过检测到黑线后自行启动等其它。
4、实现仿真实小车的声音和车灯效果:
小车前进时有真车前进声音和车灯效果,小车左拐弯时有真车左拐弯声音和车灯效果,小车右拐弯时时有真车右拐弯声音和车灯效果,小车后退时有真车后退声音和车灯效果,小车遇到障碍物时有真车鸣喇叭声音和车灯效果、并自动绕开障碍物前行。
5、小车寻迹避障运行完之后能伴随音乐翩翩起舞演示。
6、小车外观包装优美、电路设计制作焊接等工艺精良、软件程序可读性强。
7、可扩展其它功能。
第二章设计方案的选择和确定
2.1主控系统方案
根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。
据此,拟定了以下两种方案并进行了综合的比较论证,具体如下:
方案一:
仅采用CPLD作为核心部件的方案
如图1.2.1所示:
选用一片CPLD(如EPM7128LC84-15)作为系统的核心部件,实现控制与处理的功能。
CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。
但CPLD在控制上较单片机有较大的劣势。
同时,CPLD的处理速度非常快,而小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,在这一点上,MCU就已经可以胜任了。
若采用该方案,必将在控制上遇到许许多多不必要增加的难题。
为此,我们不采用该种方案,进而提出了第二种设想。
里程检测
红外遥控
障碍检测
CPLD
避开障碍
显示行驶里程、时间等
指示灯
显示行驶路线
图2.2.1以CPLD为核心的原理框图
方案二:
仅采用单片机作为核心部件的方案
如图1.2.2所示:
采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。
充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。
这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。
因此,这种方案是一种较为理想的方案。
图2.2.2以单片机为核心的原理框图
单片机
里程检测
红外遥控
障碍检测
避开障碍
显示行驶里程、时间等
指示灯
显示行驶路线
针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。
根据这些分析,我选定了AT80C51单片机作为本设计的主控装置,51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是51单片机价格非常低廉。
在综合考虑了传感器、两部电机的驱动、显示等诸多因素后,我们决定采用一片单片机,充分利用AT80C51单片机的资源。
2.2传感器系统
方案一:
反射式红外发射—接收装置,只有物体反射红外光时才有信号输入,其信号强度与小车距障碍物的距离成正比。
因此可利用信号强度作为避障依据。
红外探测器的选型与工作方式:
1、红外探测器的选型
红外探测器以其发射功率大、抗干扰能力强而在工业生产中有着广泛的应用,红外探测器按其工作模式可大致分为主动式与被动式,主动式红外探测器自带红外光源,通过对光源的遮挡、反射、折射等光学手段可以完成对被探测物体位置的判别。
被动式红外探测器本身没有光源,通过接受被探测物体的特征光谱辐射来测量被探测物的位置、温度或进行红外成像。
直流直接驱动方式装置简单但检测距离和抗干扰能力都比较差;交流调制方式由于可以采用交流耦合方式解决了放大器的直流漂移问题从而可以大大提高检测的距离,同时由于环境光产生的干扰多数情况是信号的直流或低频分量可以由滤波器加以隔绝,因此交流调试方式抗干扰能力也比较强,缺点是系统相对复杂。
在本体中我们要利用红外探测器检测障碍物的距离,显然选用主动式红外传感器比较合适,系统的造价可以降低可靠性可以提高。
主动式红外传感器又可分为分立元件型、透射遮挡型和反射型(如图1.2.3示),分立元件型发光管与接收管相互独立,用户在使用时可以根据需要灵活的设定发光管与接受管的位置,并可利用棱镜、透镜等完成特殊的目的,缺点是装置麻烦。
透射遮挡型和反射型通过塑料模具将发光管与接收管封装在一起,非常方便用户使用,在本题中对障碍物的检测我使用反射型。
红外发光管
红外接收管
分立元件型
透射遮挡型
反射型
图1.2.3红外探测器的形式
2、主动式红外探测器的工作方式选取
主动式红外探测器常用的驱动方式可分为直流直接驱动方式和交流调制方式,直流直接驱动方式装置简单但检测距离和抗干扰能力都比较差;交流调制方式由于可以采用交流耦合方式解决了放大器的直流漂移问题从而可以大大提高检测的距离,同时由于环境光产生的干扰多数情况是信号的直流或低频分量可以由滤波器加以隔绝,因此交流调试方式抗干扰能力也比较强,缺点是系统相对复杂。
方案二:
采用反射式超声波换能器,只有物体反射超声波时才有信号输入,测量发射接收信号间的时间差T2-T1,利用其可以得到障碍物的距离,将该信息送给单片机,单片机发出控制信号改变小车的转向,使小车不与障碍物发生接触。
该方法适合较远距离障碍物检测。
反射式超声波换能器成本高,电路设计复杂,因为不要求检测的很远,于是选自了反射式光电传感器,在本题中对前方障碍物的检测因为要求检测距离较远,受到环境光的干扰比较大,因此我们选用抗干扰能力较强的交流调制工作方式;而对小车侧面障碍物的检测由于要求检测距离较近,外界干扰相对较弱,为简化设计我们选用直流直接驱动方式。
2.3光电对管电路的设计
我们设计并论证了两种光电对管检测及调理电路,电路原理图分别如4和图5所示:
图4光电对管检测电路1
图10所示电路中,R1起限流电阻的作用,当有光反射回来时,光电对管中的三极管导通,R2的上端变为高电平,此时VT1饱和导通,三极管集电极输出低电平。
当没有光反射回来时,光电对管中的三极管不导通,VT1截至,其集电极输出高电平。
VT1在该电路中起到滤波整形的作用。
经试验和示波器验证,该电路工作性能一般,输出还有杂散干扰波的成分。
如果输出加施密特触发器就可以实现良好的输出波形。
但是这种电路用电量比较大,给此种传感器调理电路供电的电池压降较快。
究其原因,是因为光敏三极管和三极管VT1导通时的导通电流较大。
因此我们考虑用比较器的方案。
图5光电对管检测电路2
在图3中,可调电阻R3可以调节比较器的门限电压,经示波器观察,输出波形相当规则,可以直接够单片机查询使用。
而且经试验验证给此电路供电的电池的压降较小。
因此我们选择此电路作为我们的传感器检测与调理电路。
第三章系统硬件设计
3.1整体构思
经过方案论证的过程之后,我们选定了仅采用单片机作为核心部件的方案,其系统总方框图如图3.1.1所示。
具体的功能设置已通过该图做了直观的说明。
通过主控芯片控制各传感器输入的信号,控制方式由软件来实现,其中包括六个红外传感器用来检测障碍物,四个传感器用来检测侧面障碍,2个检测前方障碍。
在功能和作用上,我分成了六大部分:
主控、驱动、避障、显示和在系统编程部分。
总原理图见论文后附录2。
LED显示模块(时间、里程)
AT80C51
侧体左侧红外传感器
车体右侧红外传感器
车体左前红外传感器
车体右前红外传感器
控制直流电机驱动器
路程传感器
图3.1.1系统总原理框图
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHZ,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
在振荡器运行时,有两个及其周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个引脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
常用的复位电路图如图3.1.2所示。
开始
初始化MCU
初始化8051
启动小车前行
是否有障?
左侧
左前或前
右前
右侧
右避子程序
左避子程序
避左前障碍程序
避右前障碍程序
停止
返回
N
Y
图3.1.2主程序框图
3.2直流电机的驱动电路
设计中,驱动电路的四个输入端分别接AT80C51的P0.0-P0.3口。
P0.0和P0.1控制车的右轮,P0.2和P0.3控制车的左轮。
一驱动电路如图3.2.3。
由I/O的脉冲来控制H桥中三极管的通断,从而来控制直流电机的前进、后退、左转和右转的动作,具体如下表3.2.1。
采用普通直流电机,通过控制脉冲占空比算法,实现对小车速度的控制。
这种调速方式有调速特性优良、调整平滑、调速范围广、带载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。
由三极管Q9、Q10、Q11、Q12构成H桥驱动电路,控制着几个管子的通断就可以控制直流电机的正转、反转。
当P0.0高电平、P0.1低电平时,Q9和Q11导
表3.2.1
P0.3
P0.2
P0.1
P0.0
状态
1
0
0
1
前行
0
1
1
0
后退
1
0
1
0
左转
0
1
0
1
右转
通,电机正转,具有良好的抗干扰性能,反之,电机反转;当左轮前进,右轮后退时,车子便右拐弯,反之左拐弯。
图3.2.3小车驱动
四个输出端具有较大的电流驱动能力,当小车负载电池,启动时,每通道峰值电流能力可达2.2A(经过测试)。
在此设计中为了得到稳定的控制信号,在单片机与直流电机之间添加一个反相器74LS04,以提高控制端输出电流和反应速度,因此提高控制灵敏性。
3.3避障传感器电路
避障电路部分有六个传感器,四个可以检测近距离障碍物的传感器,检测到的信号送入到单片机的P2.0-P2.3口,两个可以检测远距离障碍物的传感器检测到的信号送入单片机的P2.5和P2.6。
3.3.1近距离避障传感器
图4.1.1反射式光电传感器电路
为提高小车检测障碍的精度,系统采用6个发射和接收一体的反射式红外光电传感器JY043W作为检测元件。
红外线具有极强的反射能力,应用广泛,采用专用的红外发射管和接收管可以有效地防止周围可见光的干扰,提高系统的抗干扰能力。
对于小车遇到的障碍物,发射管发出同样的光强,接收管接收到的光强不同,因此输出的电压值也不同;给定一个基准电压,通过对不同输出电压值进行比较,则电路的输出为高低电平。
当检测到障碍时,有红外光被反射回,光敏三极管导通,导致输出为高电平,这样不仅系统硬件电路简单,而且信号处理速度快。
反射式光电传感器
第四章系统的软件设计
4.1主程序流程图
我们所设计的软件的主程序流程图如图4.1.1所示:
图4.1.1主程序流程图
4.2传感器数据处理及寻迹程序流程
我们用一个字节来代表车底的6个光电传感器。
用每一个位来代表当前传感器的检测状态。
我们把小车直线行进时分成三种状态,当中间四个传感器都检测到白线时,小车在跑道的正上方,这时控制两电机同速度全速运行。
当检测到有一个传感器或者同侧的两个传感器偏出白线时,小车处于微偏状态,这时将一个电机速度调慢,另一电机速度调快,完成调整。
当检测到有三个电机偏出时,小车处于较大的偏离状态,这时把一个电机的速度调至极低,另一电机全速运行,从而在较短时间内完成路线的调整。
用这种三级调速的寻迹算法同单纯的判断检测到对管的位置并作出判断的方法相比,程序思路清晰,程序执行结果较好。
该检测传感器子程序的流程图如图4.2.1所示:
图4.2.1传感器信息处理子程序流程图
4.3系统完整电路图
4.4基于AltiumDesigner6.0的PCB板电路图
图4.5.1传感器PCB电路图
图4.5.2单片机PCB电路图
4.5单片机控制程序
/*头文件调用和宏定义*/
#include
#include
#include
#include
#defineucharunsignedchar//无符号字符类型定义
#defineuintunsignedint//无符号整数类型定义
/*变量初始化*/
sbitBZ=P1^1;
sbitvoicecontrol=P1^0;
sbitmusicdecode=P2^0;
sbitQDdcmotor_IA=P2^2;
sbitQDdcmotor_IB=P2^1;
sbitFXdcmotor_IA=P2^4;
sbitFXdcmotor_IB=P2^3;
ucharxunjidecode=0x00;
ucharkjflag=0;
/*函数声明*/
voidmusicdelay(uintz);
voidstopcar();
voidkjstopdecode();
voidZUOZHUANcar();
voidZUOZHUANdecode();
voidQJcar();
voidQJdecode();
voidbackcar();
voidbackdecode();
voidYOUZHUANcar();
voidYOUZHUANdecode();
voidBZdecode();
voidmusicdelay(uintz)
{inti,j;
for(i=0;ifor(j=1;j<=60;j++);
}
voidstopcar()//小车停行子程序
{QDdcmotor_IA=0;
QDdcmotor_IB=0;
FXdcmotor_IA=0;
FXdcmotor_IB=0;
}
voidkjstopdecode()//开机关机串行码
{uinti;
for(i=10;i>0;i--)
{musicdecode=1;//1
musicdelay
(1);/*每个脉冲信号0.5ms,一组共32.2ms*/
musicdecode=0;//2
musicdelay
(1);
musicdecode=1;//3
musicdelay(3);
musicdecode=0;//4
musicdelay
(1);
musicdecode=1;//5
musicdelay(3);
musicdecode=0;//6
musicdelay
(1);
musicdecode=1;//7
musicdelay(3);
musicdecode=0;//8
musicdelay
(1);
musicdecode=1;//9
musicdelay(3);
musicdecode=0;//10
musicdelay
(1);
musicdecode=1;//11
musicdelay(3);
musicdecode=0;//12
musicdelay
(1);
musicdecode=1;//13
musicdelay(3);
musicdecode=0;//14
musicdelay(3);
musicdecode=1;//15
musicdelay
(1);
musicdecode=0;//16
musicdelay
(1);
musicdecode=1;//17
musicdelay(3);
musicdecode=0;//18
musicdelay
(1);
musicdecode=1;//19
musicdelay(3);
musicdecode=0;//20
musicdelay
(1);
musicdecode=1;//21
musicdelay(3);
musicdecode=0;//22
musicdelay(3);
musicdecode=1;//23
musicdelay
(1);
musicdecode=0;//24
musicdelay
(1);
musicdecode=1;//25
musicdelay(3);
musicdecode=0;//26
musicdelay(3);
musicdecode=1;//27
musicdelay
(1);
musicdecode=0;//28
musicdelay(3);
musicdecode=1;//29
musicdelay
(1);
musicdecode=0;//30
musicdelay(3);
musicdecode=1;//31
musicdelay
(1);
musicdecode=0;//32
musicdelay(3);
}
}
voidZUOZHUANcar()//小车左转子程序
{FXdcmotor_IA=1;
FXdcmotor_IB=0;
musicdelay(10);
QDdcmotor_IA=0;
QDdcmotor_IB=0;
musicdelay(15);
QDdcmotor_IA=1;
QDdcmotor_IB=0;
musicdelay(10);
}
voidZUOZHUANdecode()//小车左转音乐车灯串行码
{
uinti;
for(i=10;i>0;i--)
{musicdecode=1;//1
musicdelay
(1);/*每个脉冲信号0.5ms,一组共32.2ms*/
musicdecode=0;//2
musicdelay
(1);
musicdecode=1;//3
musicdelay(3);
musicdecode=0;//4
musicdelay
(1);
musicdecode=1;//5
musicdelay(3);
musicdecode=0;//6
musicdelay
(1);
musicdecode=1;//7
musicdelay(3);
musicdecode=0;//8
musicdelay
(1);
musicdecode=1;//9
musicdelay(3);
musicdecode=0;//10
musicdelay
(1);
musicdecode=1;//11
musicdelay(3);
musicdecode=0;//12
musicdelay(3);
musicdecode=1;//13
musicdelay
(1);
musicdecode=0;//14
musicdelay
(1);
musicdecode=1;//15
musicdelay(3);
musicdecode=0;//16
musicdelay
(1);
musicdecode=1;//17
musicdelay(3);
musicdecode=0;//18
musicdelay
(1);
musicdecode=1;//19
musicdelay(3);
musicdecode=0;//20
musicdelay
(1);
musicdecode=1;//21
musicdelay(3);
musicdecode=0;//22
musicdelay(3);
musicdecode=1;//23
musicdelay
(1);
musicdecode=0;//24
mu