遥控小汽车的毕业设计研究.docx
《遥控小汽车的毕业设计研究.docx》由会员分享,可在线阅读,更多相关《遥控小汽车的毕业设计研究.docx(54页珍藏版)》请在冰豆网上搜索。
遥控小汽车的毕业设计研究
摘要
根据题目要求,本设计采用2片AT89C52单片机构成主从式的控制系统,双机采用串行口进行通信。
红外遥控部分采用遥控车模专用编、解码芯片TX-2/RX-2,提高控制的可靠性;同时,在遥控发射端加入了用凌阳61板做的语音识别系统,能够完成语音遥控功能。
采用红外传感器进行里程检测;超声波传感器进行障碍识别;感光电阻辅以步进电机控制的转动机构进行光源方向的检测,并能用软件控制小车行驶到光源附近。
采用步进电机对小车的转向进行精确的控制,同时用红外传感器对转向的角度进行校正。
此外,采用四位LED数码管和若干LED发光二极管显示时间、行进的里程以及小车的各种状态;采用AT24C08串行EEPROM记录小车的行驶轨迹,并能按照所记录的轨迹自动行驶。
本次设计基于完备的软硬件系统,很好的实现了小车语音遥控、任意曲线行驶、路线记录与重放、自动查找光源、自动避障,里程统计并发出指示信息等功能。
关键词:
单片机;超声波传感器;红外遥控;语音识别;凌阳61板
ABSTRACT
Accordingtothetopic,mydesignneedstoadopttwoAT89C52toformacontrolsystemofprincipalandsubordinate.ThecommunicationbetweenthetwoMCUistoadopttheserialport.Meanwhile,launchendjoinwithinsultmalegenital61soundrecognitionsystemthatboardmakeremotely,canfinishtheremotecontrolfunctionofthepronunciation,anditadoptstheinfraredsensortomeasurethemileage;Theultrasonicsensorcarriesontheobstacletodiscern;Sensitizationresistancecomplementinordertowalkintowhomelectricalmachinerycontrolrotateorganizationcarryonmeasuring,directionofthelightsource,Thesmallcarcangototheadjacentplaceofthelightsourcewiththesoftware.ThedesignadoptsserialEEPROMofAT24C08towritedowntheorbitofthecar,andcanrepeattherouteautomaticallywhichhasbeenrecorded.
TheDesignisonthebasisofthecompletesoftwareandhardwaresystem,andthesmallcarhasthefunctionofsoundremotecontrol,followinganycurve,recordingtheroutewhereithasgone,findingoutthelightsource,etc…
Keywords:
MCU;AT24C08;sensor;SPCE061A
第1章绪论……………………………………………………………1
1.1概述………………………………………………………………1
1.2设计要求及主要功能介绍………………………………………1
1.2.1手动控制功能…………………………………………2
1.2.2自动寻找光源功能……………………………………2
1.2.3超声避障功能…………………………………………2
1.2.4记录路线与重放路线功能……………………………2
1.2.5声控功能………………………………………………3
1.2.6其他功能………………………………………………3
1.3MCS-51系列单片机简介………………………………………3
1.4凌阳SPCE061A精简开发板简介………………………………5
第2章系统总体设计………………………………………………6
2.1系统功能模块的划分…………………………………………6
2.2单片机数目的选定……………………………………………6
2.3系统原理框图…………………………………………………7
2.4系统软件主要特色……………………………………………7
2.4.1软件分层结构……………………………………………8
2.4.2多任务结构………………………………………………8
2.4.3消息驱动结构…………………………………………13
2.5本章小结………………………………………………………15
第3章各模块的详细设计…………………………………………16
3.1红外遥控模块的设计…………………………………………16
3.1.1遥控模块的功能需求…………………………………16
3.1.2编解码芯片的选型……………………………………16
3.1.3遥控模块原理图………………………………………16
3.1.4遥控电路与语音识别模块的连接……………………18
3.2数码管、发光二极管显示模块的设计………………………18
3.2.1多位数码管扫描显示原理……………………………18
3.2.2工作状态指示灯及转向灯的设计……………………19
3.2.3显示模块电原理图……………………………………19
3.2.4显示任务的软件设计…………………………………20
3.3声音提示功能的设计…………………………………………20
3.4前轮转向模块的设计…………………………………………21
3.4.1前轮转向的机械结构设计……………………………21
3.4.2前轮转向中点校准功能的设计………………………22
3.4.3步进电机驱动芯片……………………………………22
3.4.4前轮转向任务的软件设计……………………………22
3.5后轮驱动模块的设计…………………………………………24
3.5.1直流电机驱动芯片L298N……………………………24
3.5.2后轮驱动任务的软件设计……………………………25
3.6里程检测模块的设计…………………………………………25
3.6.1探头的选型与安装……………………………………25
3.6.2软件消抖与硬件消抖的比较…………………………26
3.6.3里程检测任务的软件设计……………………………26
3.7超声测距模块的设计…………………………………………27
3.7.1超声测距的理论依据…………………………………27
3.7.2超声发射电路…………………………………………27
3.7.3超声接收电路…………………………………………28
3.7.4超声测距任务的软件设计……………………………29
3.8光源方向探测模块的设计……………………………………30
3.8.1旋转机构设计…………………………………………30
3.8.2亮度检测电路的选型与设计…………………………31
3.8.3寻找光源方向任务的软件设计………………………32
3.9行驶路线的记录与重放模块的设计…………………………33
3.9.1该模块的功能概述……………………………………33
3.9.2AT24C08串行EEPROM介绍……………………………33
3.9.3存储记录的格式………………………………………33
3.9.4手动模式下记录行驶路线功能的软件设计…………33
3.9.5重放行驶路线功能的软件设计………………………34
3.10双机串行通信模块的软件设计……………………………35
3.10.1通信方式的选型……………………………………35
3.10.2双机串行通信的软件设计…………………………35
3.11语音识别功能的设计………………………………………36
3.11.1凌阳语音压缩算法…………………………………37
3.11.2语音识别模块的软件设计…………………………37
3.12本章小结……………………………………………………37
第4章系统软件的设计……………………………………………39
4.1单片机的C语言程序设计简介………………………………39
4.2系统的三种工作模式…………………………………………39
4.3手动模式的设计………………………………………………40
4.4自动寻找光源模式的设计……………………………………40
4.4.1功能分析………………………………………………40
4.4.2寻找光源的策略………………………………………41
4.4.3自动寻找光源的软件设计……………………………41
4.4.5该功能模块存在的一些问题…………………………41
4.5走数字及路线重放模式的设计………………………………44
4.6本章小结………………………………………………………44
第5章系统的组装、调试和测试…………………………………45
5.1系统的组装、调试……………………………………………45
5.2遥控距离的测试………………………………………………45
5.3时间显示功能的测试…………………………………………45
5.4里程显示功能的测试…………………………………………46
5.5超声测障碍功能的测试………………………………………46
5.6走数字功能的测试……………………………………………46
5.7行驶路线记录与重放功能的测试……………………………47
5.8自动寻找光源功能的测试……………………………………47
5.9语音识别功能的测试…………………………………………47
5.10本章小结……………………………………………………48
结论………………………………………………………………………49
致谢………………………………………………………………………50
参考文献………………………………………………………………51
附录………………………………………………………………………52
第1章绪论
1.1概述
单片机以其强大的控制能力已经被广泛应用于诸多领域,配以各种接口传感器可以实现系统的智能化。
无论是在工业控制领域、医疗卫生领域、还是在国防军事领域、航天航空领域,微控制器都起着举足轻重的作用。
从最初的8位控制器到现在的16位、32位控制器都还有很大的发展和应用空间。
目前市场上已有很多种用超声波传感器制作的产品,在汽车电子领域,用超声波传感器做的倒车雷达可以提高汽车行驶的安全性。
对汽车驾驶员来说车身后方是一个视线的“死区”,倒车时得非常小心,倒车雷达的出现就解决了这一问题,当车身后方有障碍时能及时发出警告。
语音识别技术也日趋完善,在机器人领域,要想用语言和机器人“交谈”,首先就要解决语音的识别问题。
可以用语音识别技术做成电话声控拨号、声控家电、儿童玩具等。
语音识别技术还有待于进一步的发展。
本设计中采用凌阳61板做的声控系统可以用语音控制小车的前进、后退、左转、右转、停止。
1.2设计要求及主要功能介绍
根据题目要求,本设计需要完成的以下几项功能:
(1)红外遥控功能,启停、自动或手动;
(2)前或后直线行进;
(3)任意曲线行进;
(4)测距避障功能;
(5)显示行进距离;
(6)精确查找光源。
另外,在设计过程中又扩展了一些功能,比如声控功能、记录与重放行驶路线功能等。
1.2.1手动控制功能
在手动控制模式下,可以控制小车的前进、后退、左转、右转、停止、漏粉、显示时间、显示里程,若在行驶过程中遇到障碍小车将自动停止,并发出声光警告信号。
同时,在转弯或后退时相应的转向灯和倒车灯会闪烁发光,小车接收到一个按键命令后除了执行相应的动作外蜂鸣器还会响一声,以告知操作者已收到了命令。
在手动控制模式下,还设置了一个记录行驶路线的开关。
操作者按下这个开关后,先选择这一次记录的路线的名称,此后对小车的控制命令将被存入EEPROM中,直至操作者再按下一次这个开关结束这次路线的记录。
记录的路线可在重放路线模式下重放。
1.2.2自动寻找光源功能
在自动寻找光源模式下,小车可以自动查找光源的方向,然后自动行驶到光源的附近。
在自动行驶过程中若遇到障碍,小车将自动采取一些避障措施避开障碍。
此外在寻找过程中操作者若按下“显示模式切换键”数码管显示的内容将在时间和里程之间切换,若按下“停止”键,小车将立即停止寻找光源,然后等待切换到其他模式。
1.2.3超声避障功能
在手动模式、自动寻找光源模式、重放路线模式下超声测障模块始终工作。
在前进时发现前方有障碍,或在后退时发现后方有障碍小车都将立即停车,并发出声光报警信号告知操作者。
障碍检测的距离调整在20厘米内,即只有在20厘米之内有障碍时小车才会做出避让动作,在这个范围之外的障碍小车不予处理。
1.2.4记录路线与重放路线功能
在手动模式下打开记录路线开关,开始记录路线;在重放路线模式下选择重放的路线,开始重放指定的路线。
在重放过程中遇到障碍或操作者按下“停止”键将结束本条路线的重放,等待选择下一条需要重放的路线或选择另外一种模式。
1.2.5声控功能
本设计采用凌阳61板做了声控系统。
打开遥控器电源后开始训练语音命令,由于受到单片机内的SRAM容量的限制只能录制5条语音命令,分别是前进、后退、左转、右转、停止。
当识别出某条语音命令时和直接按下相应的按键等价,红外发射电路都会给小车发出相应的命令。
操作者在使用声控功能时有语音提示音,所以操作很简便、快捷。
1.2.6其他功能
小车还具有走数字功能,即小车可按照事先由程序设置好的路线行走,并洒下粉末,显示出一个数字。
除此之外,小车上还有左、右转向灯,倒车灯,障碍指示灯,模式指示灯,蜂鸣器报警电路,小车状态一目了然。
1.3MCS-51系列单片机简介
MCS51单片机的基本结构如图1.1所示,其基本结构包括:
●8位CPU;
●片内震荡器及时钟电路;
●32根I/O口线;
●外部存储器ROM和RAM寻址范围各为64KB;
●2个16位定时器/计数器;
●5个中断源,2个中断优先级;
●全双工串行口;
●布尔处理器。
8051单片机的存储器结构特点之一是程序存储器和数据存储器分开,并有各自的寻址机构和寻址方式。
这种结构的单片机称为哈佛结构单片机。
8051单片机在物理上有四个存储空间:
片内程序存储器和片外程序存储器;片内数据存储器和片外数据存储器。
8051单片机有4个8位的并行接口,记作P0,P1,P2和P3,共32根口线,实际上它们就是SFR中的4个。
这4个接口特性上主要差别是P0,P2和P3都还有第二功能,而P1口只能用做I/O口。
4个口的驱动能力也是不相同。
P1,P2和P3都能驱动3个LSTTL门,并且不需外加上拉电阻就能驱动MOS电路。
P0能驱动8个LSTTL门,但驱动MOS电路时,若作为地址/数据总线,则可以直接驱动;而作为I/O口时,需外接上拉电阻才能驱动MOS电路。
1.4凌阳SPCE061A精简开发板简介
凌阳61板是采用凌阳16位单片机为核心的开发系统,具有DSP处理功能和语音处理功能。
利用该开发板可方便的实现语音的录、放、识别等功能。
SPCE061A凌阳16位单片机的结构框图如图1.2所示:
SPECE061A的CPU工作速率为0.32MHZ-49.152MHZ;SRAM容量为2K字;程序存储器容量为32K字FLASH,使用凌阳音频压缩算法SACM_240方式(2.4Kbps),能容纳240秒语音数据;有两个16位的并行I/O接口;还具有ADC、DAC、麦克风放大器和AGC电路等。
由于IDE自带了很多有关语音录放、语音识别的API函数,所以采用61板来做声控系统比较方便。
第2章系统总体设计
2.1系统功能模块的划分
按照设计要求,系统可以分为以下几个基本功能模块:
遥控模块、显示模块、前轮转向模块、后轮驱动模块、超声测距避障模块、寻找光源模块、记录与重放路线模块、里程检测模块等。
有些模块的功能是由硬件完成,有些模块的功能由软、硬件配合完成,有些模块则是由软件、硬件、机械三部分共同完成。
将系统拆分成以上的这些基本功能模块后,再根据各个模块所要完成的功能分别去设计,也就是按照“逐步求精”的思想去设计本系统,这将使设计工作细化,也有助于制定进度安排。
2.2单片机数目的选定
由于系统需要完成的功能较多,CPU的负荷也较重,再加之单片机内的定时器/计数器、中断、I/O口等资源有限,如果选用一片单片机必将会给系统的设计带来一些困难。
所以可以考虑采用两个单片机构成主从式的结构,各分担一部分控制与运算功能,这样两个单片机可同时工作。
所谓主从式结构是指从单片机片机根据主单片机发出的命令来完成某项功能,并且把结果报告给主单片机,这样的结构在某种程度上可以简化系统。
主单片机负责红外遥控接收、显示、小车的运动以及处理遥控命令等功能;从单片机则主要负责超声测距、检测光源方位这两项比较费时的功能,在探测到障碍或探测到光源时将有关信息报告给主单片机进行处理,并由主单片机来采取相应的措施。
本设计中采用了两片AT89C52单片机,通过串行接口通信。
因为两个单片机之间的距离很近,所以串行口可以工作在较高的波特率上,可以让串行口工作在方式2,其特点是其波特率高,并且波特率可以直接从晶振32分频、或64分频而得到,不需要占用定时器资源。
2.3系统原理框图
系统原理框图如图2.1所示:
图2.1系统原理框图
2.4系统软件主要特色
软件在一个智能系统中扮演着举足轻重的作用,软件设计的好坏直接关系着整个系统的性能。
目前已经有很多种嵌入式实时多任务操作系统,如:
Linux、RTX51及UC/OS等,可以更有效的利用系统的各种资源,简化编程,缩短开发周期。
签于本系统采用AT89C52单片机为控制器,本身的各种资源都很有限,引入一个操作系统代价太大,所以考虑直接来优化系统的软件结构,同样可以达到“多任务”、“实时”等要求。
2.4.1软件分层结构
为了便于编程,将逻辑控制层和具体的硬件相分离开是很有必要的。
硬件驱动层的软件负责直接操作硬件,并且给上层的软件提供一定的接口,这样有助于上层的软件实现更复杂的功能,并且系统的硬件有所改动时也只需改动相应的驱动模块即可。
本系统中的LED显示模块、前轮转向模块、后轮驱动模块、AT24C08存取模块、寻光源转动机构都做成了一些独立的模块,并且给外部提供了一些接口函数,来实现对这些硬件或机械部件的高级操作。
分层结构如图2.2所示:
软件的分层结构是很多系统中普遍采用的一种软件结构,比如TCP/IP协议就是一种典型的分层结构。
WINDOWS、LINUX等系统中也几乎把所有的系统硬件进行了抽象,这样上层的软件就不必关心硬件的细节,可以调用相应的模块提供的服务即可,这样可把更多的精力放在高级功能的实现上。
2.4.2多任务结构
为了充分利用单片机的CPU,内存等资源,本系统中引入了多任务的软件结构,即从宏观上来看单片机同时在做多件事情。
分析一般的多任务系统的软件结构,系统的核心是任务调度器,在适当的时候任务调度器将保存当前任务的现场,并且恢复将要运行的任务的现场,并让其投入运行。
简单的说,一般的多任务系统是任务调度器循环的调用各个需要执行的任务,进而可以更有效的利用系统的各种资源。
从这里得到启发,可以用定时器每隔一定的时间中断一次,在中断处理函数中依次调用一次各个任务所对应的函数,并且各个函数都能在一个较短的时间内返回,这样在某段时间内,各个任务所对应的函数都能够被执行到,就好像多个任务同时运行了。
还有一点需要说明,就是各个任务是由一些函数和一些静态变量组成。
函数由定时器中断处理函数定期的调用一次,并且有个前提就是这个函数能够在较短的时间内返回,否则其他任务将不能及时的被调用到,也就达不到“实时”这一要求。
静态变量保存该任务的各种状态,并且其他模块和该任务进行通信也是通过置取这些静态变量来实现的。
本系统中软件的多任务结构如图2.3所示:
可以说定时器中断处理函数就是本设计中多任务的核心,即任务调度器。
以下是定时器0中断处理函数的程序清单:
/////////////////////////////////////////////////////
//定时器0中断处理函数
//每4毫秒中断一次
//产生时钟节拍
//负责维护一个系统时间变量和任务调度
/////////////////////////////////////////////////////
#defineTIME_OVERLOAD3960//定时器计数初值
//记录时间的结构的定义
typedefstruct
{
uchart_ms;//毫秒数0-99
uchart_100ms;//100毫秒数0-9
uchart_sec;//秒数0-59
uchart_min;//分钟数,0-255
}TIME;
TIMEtime;//记录系统时间的全局变量
voidtimer0(void)interrupt1
{
//重装定时器0的计数初值
TH0=(65536-TIME_OVERLOAD)/256;
TL0=(65536-TIME_OVERLOAD)%256;
//维护系统时间
time.t_ms+=4;
if(time.t_ms>99)
{
time.t_ms=0;
if(++time.t_100ms>9)
{
time.t_100ms=0;
if(++time.t_sec>59)
{
time.t_sec=0;
time.t_min++;
}
}
}
//大约每50毫秒调用一次蜂鸣器任务
//并且只有在需要发声时才调用
//n_beep全局变量表示需要发出几声
if((n_beep)&&(!
(time.t_ms%52)))beep2();
//每4毫秒调用一次显示任务
led_disp();
//每16毫秒调用一次后轮直流电机驱动程序
if(!
(time.t_ms&0x0f))dianji();
//每32毫秒调用一次里程检测任务
if(!
(time.t_ms&0x1f))licheng();
//每16ms调用一次前轮转向电机驱动函数
if(!
(time.t_ms&0x0f))gw_dianji();
}
以上的这段程序代码就是实现了任务的调度,和一般的多任务系统相比较有几点不同:
(1)任务之间的切换是通过函数的调用与返回实现的,当以上的这几个任务全调用一次之后将进入主任务执行,主任务即main()函数所对应的任务。
(2)相应的任务上、下文的保存与恢复也不是由任务调度器实现的,而是由C语言编译器在函数调用时自动保存与恢复了主任务的上、下文;其他的任务不用保存上、下文,每次