基于mega16智能小车GPS导航系统设计毕业设计.docx
《基于mega16智能小车GPS导航系统设计毕业设计.docx》由会员分享,可在线阅读,更多相关《基于mega16智能小车GPS导航系统设计毕业设计.docx(42页珍藏版)》请在冰点文库上搜索。
基于mega16智能小车GPS导航系统设计毕业设计
毕业设计
题目:
基于mega16的GPS智能小车GPS导航系统设计
专业:
通信工程
摘要
GPS的使用现在已经非常普及,大到航空航海系统,小到个人移动设备,都有着它的身影。
随着GPS的民用化与成本的降低,已经走入了人们的日常生活中,很多手机、PDA等手持设备都配备了GPS功能。
就功能而言,GPS就是在地球经纬座标系下对被测对象的方位进行测定,同时可以提供较高精度与实时的测定数据。
本论文设计的系统是基于GPS智能小车导航,实现目标是使用两个单片机进行指定目标导航即一个单片机实现设定目标相应的经度和纬度另一个单片机实现避障寻址,由于成本及条件限制本论文采用Mega16单片机,测试场所仅限于学校。
本论文主要研究GPS定位原理和技术,Mega16单片机编程及相关模块应用,LCD12864显示控制,单片机无线通信研究等。
关键字:
GPS;Mega16;单片机;LCD12864;无线通信
Abstract
TheuseofGPSisnowverypopular,bigtotheaviationnavigationsystem,smalltopersonalmobiledevices,hasitsshadow.AstheGPSMinYongHuaandcostreduce,haswalkedintoPeople'sDailylife,alotofmobilephones,PDAandotherhandhelddevicesareequippedwiththeGPSfunction.Intermsoffunctionality,GPSistheobjecttobemeasuredunderthelatitudeandlongitudeearthcoordinatesystemofthebearingweredetermined,andatthesametimecanprovidehighaccuracyandreal-timemeasurementdata.
ThispaperdesignstheintelligentsystemisbasedonGPScarnavigation,yourgoalistousetwospecifiedtargetnavigationisasingle-chipmicrocontrollertoachievegoalsettingcorrespondinglatitudeandlongitudeofthemicrocontrollerisanotherobstacleavoidanceaddressing,duetothecostandconditions16single-chipmicrocomputer,thispaperadoptstheMegatestplaceonlyinschools.
GPSpositioningprincipleandtechnology,thisthesismainlystudyMega16microcontrollerprogrammingandrelatedmoduleapplication,LCD12864displaycontrol,singlechipwirelesscommunicationresearch,etc.
keywords:
GPS;Mega16;Singlechipmicrocomputer;LCD12864;Wirelesscommunication
第一章绪论
基于国内外研究结果,本论文设计一个简单系统模拟汽车智能导航,该系统实现功能有:
一、实时显示小车位置即相应的经度和纬度;二、可以设定目标位置即相应的经度和纬度;三、小车寻址实现智能避障;四、实现两个单片机无线通信等。
第二章系统总体结构图
本论文设计的是智能小车导航寻址系统,基于该系统要实现的功能可以将系统划分两个部分:
一、无线收发及显示模块如图2-1所示,该模块包括:
无线模块、LCD12864、mega16最小系统,实现的功能有:
实时显示小车位置即相应的经度和纬度、发送目标位置即所要寻址目标经度和纬度;二、小车导航及控制模块如图2-2所示,该模块包括:
无线模块、GPS模块C3-470B、小车驱动模块L298、小车避障单元超声波避障和红外避障,实现的功能有:
GPS导航、小车避障、无线接送及发射命令,下面先从总体设计再到这两个方面进行设计。
图2-1无线收发及显示模块
图2-2小车导航及控制模块
第三章硬件模块设计
3.1Mega16最小系统
Mega16最小系统可分为:
复位线路、晶振线路、AD转换滤波线路、ISP下载接口、JTAG仿真接口、电源电路。
图3-1mega16最小系统设计原理图
3.1.1复位线路的设计
图3-2mega16复位电路
Mega16复位源有五种分别为:
上电复位、外部复位、看门狗复位、掉电检测复位、JTAGAVR复位。
本系统设计复位电路采用上电复位这一复位源进行复位mega16。
当mega16在工作时,按下S0开关时,复位脚变成低电平,触发mega16复位。
3.1.2晶振电路的设计
图3-3mega16晶振电路
Mega16已经内置RC振荡线路,由于RC振荡线路不稳定,特别是在要求高的情况下,例如通信速率很高的情况就需要外部晶振,该系统使用外部晶振电路,C1和C2两个电容起滤波及抗干扰的作用。
3.1.3A/D转换滤波线路的设计
图3-4mega16A/D转换滤波线路
为了减少A/D转换干扰,本系统采用独立电源对A/D供电,在AVCC上串联一只10uH的电感(L1)然后接一只0.1uF的电容到地(C3),如图3-4所示。
3.1.4ISP下载接口设计
ISP下载接口,无需额外添加器件仅使用双排2*5插座。
这种情况下PB5(MOSI)、PB6(MISO)、PB7(SCK)、复位脚仍可以正常使用,不受ISP下载接口的干扰,如图3-5所示。
图3-5mega16ISP下载接口
3.1.4JTAG仿真接口设计
图3-6mega16JTAG仿真接口
仿真接口类似ISP下载接口但需要上拉四个10K电阻,如图3-6所示。
3.1.5电源设计
图3-7mega16电源设计
本系统设计电源时采用最常见的5V和3.3V这两种电源,而且设计了这两种电源相互却换开关,如图3-7所示,当SW打在左边电源VCC为+5V此时绿色LED灯亮,反之VCC为3.3V此时红色LED灯亮。
其中二极管D1、D2是防止电源极性接反,损坏电路。
3.1.6按键设计
基于mega16的键盘设计,键盘接口为PA口如图3-8所示。
图3-8按键原理图
3.2L298模块
L298驱动模块,可以驱动一个步进电机,2个直流减速电机,原理图如图3-9所示。
图3-9L298原理图
3.3超声波模块
该模块在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。
当收到超声波反射波时,接收电路输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离,该模块实物图如图3-10所示。
图3-10超声波模块实物图
3.4红外模块
当模块检测到前方障碍物信号时,电路板上绿色指示灯点亮电平,同时OUT端口持续输出低电平信号,该模块检测距离2~80cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少。
传感器主动红外线反射探测,因此目标的反射率和形状是探测距离的关键。
其中黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大。
传感器模块输出端口OUT可直接与单片机IO口连接即可,也可以直接驱动一个5V继电器;连接方式:
VCC-VCC;GND-GND;OUT-IO。
比较器采用LM393,工作稳定,可采用3-5V直流电源对模块进行供电。
当电源接通时,红色电源指示灯点亮。
原理图如图3-11所示。
图3-11红外模块
3.5LCD12864模块
本系统使用该模块是为了实现的功能是显示智能小车当前位置信息及设定目标位置信息,LCD12864实物图如图3-12所示。
选用的是带中文字库的LCD12864,这样可以减少代码长度,提高代码效率,该模块可以使用并行或者串行接口,内部含有中文字库及ASCII字符集,方便有效。
图3-12LCD12864实物图
3.6无线模块NRF24L01
模块简介:
(1)2.4GHz全球开放ISM频段免许可证使用。
(2)最高工作速率2Mbps,高效GFSK调制,抗干扰能力强。
(3)126频道,满足多点通信和跳频通信需要。
(4)内置硬件CRC检错,和点对点通信地址控制。
(5)低功耗,1.9-3.6V工作,待机模式下22uA;掉电模式900nA。
(6)内置2.4GHz天线,体积小巧:
15mm×29mm。
(7)模块可软件设置地址,只有收到本机地址时才会输出数据(提供中断提示),可直接接各种单片机使用,软件编程非常方便。
(8)内稳压电路,使用各种电源包括DC/DC开关电源均有很好的通道效果。
(9)2.54mm间距接口,DIP封闭。
(10)工作于EnhancedShockBurst具有Automaticpackethandling,Autopackettransactionhandling,具有可选的内置包应答机制,极大地降低丢包率。
(11)与51单片机P0口连接的时候,需要加10K的上拉电阻,与其余口连接不需要。
(12)其他系列的单片机,如果是5V的,请参考该系列单片机IO口输出电流大小,如果超过10mA,需要串联电阻分压,否则容易烧毁模块!
如果是3.3V的,可以直接和RF24L01模块的IO口线连接。
比如AVR系列单片机。
如果是5V的一般串接2K的电阻实物图如图3-13所示。
图3-13无线模块NRF24L01实物图
说明:
1)VCC脚接电压范围为:
1.9V-3.6V,不能在这个敬意之外,超过3.6V将会烧毁模块。
推荐电压3.3左右。
2)除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO口直接相连,无需转换。
当然对3V左右的单片机更加适用了。
3.7GPS模块C3-470B
C3-470B是一个高效能、低耗电的智慧型卫星接收模组或称做卫星接收引擎,他采用美国瑟孚SiRFstarIII公司所设计的第三代卫星定位接收晶片,是一个完整的卫星定位接收器具备全方位功能,能满足专业定位的严格要求与个人消费需求。
特色:
(1)采用SiRF第三代高效能晶片高灵敏度、低耗电量晶片STARIII,内建ARM7TDMICPU可符合客制需求。
(2)具备快速定位及追踪20颗卫星的能力。
(3)体积超小,仅25.4×25×7公\u91d0。
(4)晶片内建200,000个卫星追踪运算器,大幅提高搜寻及运算卫星讯号能力。
(5)内建RTCMSC-104DGPS和WASS/EGNOS解调器。
(6)低耗电量,具备有省电模式(Trickle-Power)功能,以及在设定的时间才启动的定时定位(Push-to-Fix)功能。
(7)支援NMEA-0183v2.2版本规格输出。
如图3-14所示结构图,GPS模块只有4个端口与单片机连接,其中VCC、GND为供电部分,TXD、RXD为串行通信部分。
由于C3-470B属于独立模块,所以在系统原理图、PCB中未加入其封装,而是采用从PCB中的单片机串行口以及VCC、GND分别引出4条线,采用引线的方式与GPS相连接。
第四章软件设计
4.1软件平台AVR开发环境介绍
AVR的集成开发环境有很多,首当其冲的应该还是IAR,为什么呢,因为当初AVR还在ATMEL胎中酝酿的时候,IAR公司参与了AVR的设计,因此可以认为IAR有更为正统的血液,它最了解AVR,它的编译器编出来的代码应该最优秀。
好比你生的孩子还是你最了解——至少相当长一段时间是这样的。
事实上,IARforAVR确实展现了这个实力,它的功能确实最为强大,无论是源代码编写还是软件乃至硬件仿
真,编译出来的代码也十分优秀。
但是事物总是相对存在的,优点有时就意味着缺点。
IAR功能全面而强悍,代价就是它的软件界面比较复杂,设置选项多,网上的资料也比较少,最要命的是这个软件非常的贵,好吧你说你有破解版,但是破解文件一般并不通用,而且破解方法一般都稍显繁琐。
以上几条,对于新接触AVR的人来说,几乎是迈不过的坎。
AVRstudio,官方出品,因为它本身不支持C语言,一般没有人用这个软件来做开发环境,一般我们只用它的仿真功能搭配其他C编译器来用。
WINAVR,又称GCCAVR。
GCCAVR应该是目前使用率最高的AVR开发环境了,软件体积小,界面简单易用,教程资料很多,代码效率高,最重要的是,它是完全免费的。
但是它几乎没有仿真调试的功能。
所以使用GCCAVR+AVRstudio搭建AVRIDE。
WinAVR-20060421GCCAVR编译器,GCCAVR是一款免费的编译器,编译功能也挺强的。
总得来说还是一款很好的开发软件。
4.2软件总体设计
系统软件设计包括两部分:
一是:
接收显示及发送命令程序软件设计流程图如图4-1所示;二是:
接送和发送及避障程序,实现智能小车导航避障功能,软件设计流程图如图4-2所示。
图4-1显示主机程序框图
N
Y
图4-2执行主机程序框图
第五章系统实现及测试
5.1原理图及PCB绘制
该系统原理图设计采用altiumdesigned设计原理图及PCB,本章节叙述该系统怎样设计包括硬件及软件设计。
5.1.1altiumdesigned简介
AltiumDesigner是Altium公司Protel系列软件基于Windows平台的最新产品,是Altium公司总结了多年的技术研发成果,是对Protel99SE以及ProtelDXP不断修改、扩充新设计模块和多次升级完善后的产物。
AltiumDesigner6是完全一体化的电子产品开发系统下的一个版本。
AltiumDesigner是将设计流程、集体化PCB设计、可编程器件设计和基于处理器设计的嵌入式软件开发功能整合在一起的电路设计系统。
5.1.2原理图及PCB设计
由于本系统所涉及器件太多,原理图在第二章就分别列出在此就不再赘述,下面列出PCB图及3DPCB图,如图5-1、5-2。
图5-1系统PCB图
图5-2系统PCB3D效果图
5.2硬件焊接及组装
根据需要购置了所需材料,如图5-3、5-4所示。
按照电气要求进行组装完成的效果图如图5-5所示。
图5-3电路板及所需器件
图5-4小车底盘
图5-5完成后效果图
5.3实际测试
该系统实际测试在铜陵学院内进行,测试如图5-6,测试范围在图书馆及教学楼。
图5-6测试示意图
测试结果:
发送
第六章总结及致谢
在撰写本论文过程中遇到了很多困难也得到很多人的帮助,在此给予我帮助的同学老师表示对他们感谢,在撰写论文过程中我做了以下工作:
2013年3月我选定论文课题为基于mega16智能小车GPS导航系统设计,我选定这个题目是因为未来汽车会朝向智能化方向发展,所以我打算用一个简单的模型模拟智能汽车导航系统,由于AVR单片机我是第一次接触,我买了一块mega16开发板,学习了mega16各个模块的操作,深入了解了mega16这款单片机,还有GPS技术,也是我比较陌生的一个知识,我阅读了相关文献,为以后论文撰写奠定基础。
4月开始着手系统总体设计,绘制原理图及PCB图,由于绘制原理图我以前使用过altiumdesigned这款软件所以决定使用这款软件绘制原理图及PCB图,在这个过程中我遇到的好多困难,特别是PCB图绘制,同样这次论文撰写我也学会了好多知识,明白了以前不明白的知识,例如:
我在学习PCB图绘制时老师说要将模拟地和数字地两个分开我一直不明白,这次论文撰写我明白了为什么及怎样分开,这个过程是最辛苦的也是同学老师给我最多的帮助的过程,在此我由衷表示对他们的感谢。
5月是对硬件电路的调试及软件的编写,我将我做好的PCB板发到工厂做出一块样板,做好之后开始对硬件的安装和调试,焊接PCB板时我使用到各种封装的电子器件,为此我请教了我们学校实验室丁老师,在她的悉心教导下我很快掌握了各种封装的电子器件的焊接要领,焊接完毕,就是对PCB板的测试,首先,使用万用表测试,测试有没有虚焊等问题。
幸运的是焊接很好没有问题,接下来就是软件的编写,我参考了书本及网上资料编写了各个模块的程序,同时学习了AVR单片机软件开发平台;下面就是测试阶段,我选择的测试地点是图书馆到教学楼,测试很成功这是是我欣慰。
转眼间论文的撰写就要结束,也就意味着大学学习即将结束,感谢四年给我帮助的老师和同学,由于我的学术水平有限,有不妥之处希望指出。
参考文献
附录
论文部分程序
/****************************************************************************************
函数名:
voiddelay(uniti)
函数功能:
延时函数
****************************************************************************************/
voiddelay(uniti)
{
while(--i);
}
/***************************************************************************************
函数名:
voidRead_busy()
函数功能:
读忙函数
****************************************************************************************/
voidRead_busy()
{
uchartemp;
ucharflag=1;
while(flag==1)
{
DDRA=0X00;//A口设为输入,,准备读数据
//PINA=0XFF;//C口设为输出
delay(10);
RS_L;//RS=0
delay(10);
RW_H;//RW=1
delay(10);
EN_H;//EN=1
delay(100);
temp=PINA;//读端口A
delay(100);
DDRA=0XFF;//端口A改为
delay(10);
EN_L;//EN=0
delay(10);
if(temp&0x80)
flag=0;
}
}
/***************************************************************************************
函数名:
voidwrite_LCD_command(ucharCMD)
函数功能:
写命令函数
****************************************************************************************/
voidwrite_LCD_command(ucharCMD)
{
Read_busy();
delay(10);
RS_L;//RS=0
delay(10);
RW_L;//RW=0
delay(10);
LCD_databus=CMD;//输出指令
delay(10);
EN_H;//EN=1
delay(10);
EN_L;//EN=0
delay(10);
}
/***************************************************************************************
函数名:
voidwrite_LCD_data(ucharvalue)
函数功能:
写数据函数
****************************************************************************************/
voidwrite_LCD_data(ucharvalue)
{
Read_busy();
delay(10);
RS_H;//RS=1
delay(10);
RW_L;//RW=0
delay(10);
LCD_databus=value;//输出指令
delay(10);
EN_H;//EN=1
delay(10);
EN_L;//EN=0
delay(10);
}
/***************************************************************************************
函数名:
voidSet_page(ucharpage)
函数功能:
设置页
****************************************************************************************/
voidSet_page(ucharpage)
{
page=0XB8|page;
write_LCD_command(page);
}
/***************************************************************************************
函数名:
voidSet_line(ucharstartline)
函数功能:
设置显示的起始行
****************************************************************************************/
voidSet_line(ucharstartline)
{
startline=0XC0|startline;
write_LCD_command(startline);
}
/*******************************************************