为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于单片机的智能小车 毕业论文 好

2017-09-30 47页 doc 339KB 32阅读

用户头像

is_731942

暂无简介

举报
基于单片机的智能小车 毕业论文 好基于单片机的智能小车 毕业论文 好 基于单片机的智能小车的设计 基于单片机的智能小车的设计 摘要 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入。同时带动传统控制检测,日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。单片机是把主要计算机功能部件都集成在一块芯片上的微型计算机。它是一种集计数和多中接口于一体的微控制器。而51单片机是单片机中最为典型和最有代表性的一种。 本设计主要应用AT89S51作为控制核心,与显示器、驱动电路等相结合的系统。基于单片机设计。利用单片...
基于单片机的智能小车 毕业论文 好
基于单片机的智能小车 毕业论文 好 基于单片机的智能小车的 基于单片机的智能小车的设计 摘要 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入。同时带动传统控制,日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。单片机是把主要计算机功能部件都集成在一块芯片上的微型计算机。它是一种集计数和多中接口于一体的微控制器。而51单片机是单片机中最为典型和最有代表性的一种。 本设计主要应用AT89S51作为控制核心,与显示器、驱动电路等相结合的系统。基于单片机设计。利用单片机AT89S51作为报警装置的控制器,能充分发挥AT89S51的数据处理和实时控制功能。使系统工作处于最佳状态,提高系统的灵敏度。当产生信号驱动小车前进时,通过寻迹模块里的红外对管是否寻到黑线产生的电平信号再返回到单片机,单片机根据程序设计要求做出相应的判断送给电机驱动模块.控制小车让其在黑线上实现前进后退以及转向。 关键词 :单片机 寻迹 报警 红外 电机驱动 I 基于单片机的智能小车的设计 Abstract With the rapid development of science and technology in recent years, SCM applications are continually deepening. Traditional control test drive at the same time, the rapidly growing update. In real-time detection and control of the microcomputer application system, the microcontroller is often used as a core component. SCM is the main feature integrated computer chip in a micro-computer. It is a set of multi-counting and the interface in one of the micro-controller. The 51 single-chip microcontroller is the most typical and most representative one. The design of the main application AT89S51 as the control, and display driver integrated circuits and other systems. Based on single chip design. MCU AT89S51 using the controller as an alarm device that can give full play to AT89S51 of data processing and real-time control functions. Make the system work in the best condition, improve the system sensitivity.When two signal driven forward by car tracing module,the infrares on whether to produce level signals through the black,retutn again according to requirement of design procedure of judgment for motor driver module,it controls the car turning back forward of running on the black line. Keywords: SCM,Tracing, Alarm device, Level signals, Motor driver module II 基于单片机的智能小车的设计 目录 摘要 ....................................................................................................... I Abstract ................................................................................................. II 目录 ..................................................................................................... III 前言 ....................................................................................................... 1 1 设计任务及 ................................................................................ 2 1.1 设计任务及要求 ...................................................................... 2 1.2 论证 .......................................................................... 2 1.2.1 控制器选择......................................................................... 2 1.2.2 电机驱动芯片的选择 ......................................................... 3 1.2.3 路况检测模块 ..................................................................... 4 2 系统硬件电路与实现 ........................................................................ 5 2.1 红外遥控及解码模块 ............................................................... 5 2.1.1 二进制信号的调制 ............................................................. 6 2.1.2 二进制信号的解调 ............................................................. 7 2.1.3 二进制信号的解码 ............................................................. 7 2.2 单片机红外接收硬件电路的实现............................................ 8 2.3 电机驱动模块 ........................................................................ 9 2.4路况检测模块 ......................................................................... 13 2.4.1 寻迹模块 .......................................................................... 14 2.4.2 智能防撞报警模块 ........................................................... 16 3系统软件设计与实现 ....................................................................... 17 3.1整体程序的构架 ..................................................................... 18 3.2红外遥控解码的实现 .............................................................. 19 3.3电机驱动 ................................................................................. 21 3.4 小车寻迹 ................................................................................ 21 3.5 小车防撞报警 ........................................................................ 22 4 小车系统原理图 .............................................................................. 24 III 基于单片机的智能小车的设计 5 系统调试 .......................................................................................... 26 5.1 遥控发送接收调试 ................................................................. 26 5.2 电机驱动调试 ........................................................................ 27 5.3 寻黑线和防撞的调试 ............................................................. 27 总结 ..................................................................................................... 27 致谢 .................................................................. 错误~未定义签。28 参考文献.............................................................................................. 29 附录 ..................................................................................................... 30 元件清单 ....................................................................................... 30 系统程序 ....................................................................................... 31 IV 基于单片机的智能小车的设计 前言 当今世界,传感器技术和自动控制技术正在飞速发展,机械、电气和电子信息已经不再明显分家,自动控制在工业领域中的地位已经越来越重要,“智能”这个词也已经成为了热门词汇。现在国外的自动控制和传感器技术已经达到了很高的水平,特别是日本,比如日本本田制作的机器人,其仿人双足行走已经做得十分逼真,而且具有一定的学习能力,还据说其智商已达到6岁儿童的水平。 作为机械行业的代表产品—汽车,其与电子信息产业的融合速度也显著提高,呈现出两个明显的特点:一是电子装置占汽车整车(特别是轿车)的价值量比例逐步提高,汽车将由以机械产品为主向高级的机电一体化方向发展,汽车电子产业也很有可能成为依托整车制造业和用车提升配置而快速成为新的增长点;二是汽车开始向电子化、多媒体化和智能化方向发展,使其不仅作为一种代步工具、同时能具有交通、娱乐、办公和通讯等多种功能。 无容置疑,电子信息化人才的培养不论是在国外还是国内,都开始重视起来,主要表现在大学生的各种大型的创新比赛,比如:亚洲广播电视联盟亚太地区机器人大赛(ABU ROBCON)、全国大学生“飞思卡尔”杯智能汽车竞赛等众多重要竞赛都能很好的培养大学生对于机电一体化的兴趣与强化机电一体化的相关知识。但很现实的状况是,国内不论是在机械还是电气领域,与国外的差距还是很明显的,所以作为电子信息化学生,必须加倍努力,为逐步赶上国外先进水平并超过之而努力。 为了适应智能控制的发展在汽车智能化方向的发展要求,提出简易智能小车的构想,目的在于:通过独立设计并制作一辆具有简单智能化的简易小车,获得项目整体设计的能力,并掌握多通道多样化传感器综合控制的方法。所以立“智能循迹小车”一题作为尝试。 此项设计是在以杨老师提供的小车为基础上,采用AT89C52单片机作为控制核心,实现能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。 1 基于单片机的智能小车的设计 1 设计任务及方案 1.1 设计任务及要求 此次的设计任务是设计一款基于单片机的智能小车的设计。设计要求如下: ?具有单片机核心控制模块; ?具有红外遥控解码模块; ?具有电机驱动模块; ?具有路况检测模块; ?具有光感模块; ?具有声控模块; ?具有七段数码管显示模块; ?具有报警模块; 1.2 设计方案论证 1.2.1 控制器选择 方案一:采用MSP430单片机 MSP430是德州仪器 (TI)的一种RISC混合信号处理器,MSP430产品系列为电池供电测量应用提供了最终解决方案。作为混合信号和数字技术的领导者,TI创新生产的MSP430,使系统设计人员能够在保持独一无二的低功率的同时同步连接至模拟信号、传感器和数字组件。 MSP430优点:0.1uA RAM 保持;0.8uA实时时钟模式;250uA/MIPS有效;高性能模拟器件;是精确测量的理想选择;先进的16位RISC CPU使得新的应用仅需一段代码即可实现;系统内可编程闪存允许更 更新字段和记录数据。但是,MSP430每个管脚的驱动能力较改代码、 弱,有利于低功耗,但是在电源方面,处理器使用的功耗相对输入几 2 基于单片机的智能小车的设计 乎没有多大影响。MSP430使用的主频相对较低,处理速度较慢,在本系统中要使用电机驱动控制,对管脚输出都有较高的要求。所以在本系统中使用MSP430不利于系统的控制。 [1]方案二:采用AT89S51单片机 AT89S51是一种低功耗、高性能CMOS8位微控制器,具8K在系统可编程 Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程 Flash,使得 AT89S51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S51具有以下标准功能:8k字节Flash,256字节 RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S51可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 方案选择: 综上所述:通过以上方案比较,在本系统中控制器选用第二个方案,使用AT89S51作控制器。因为该单片机成本低廉,操作起来方便,因此本设计控制器选用此方案。 1.2.2 电机驱动芯片的选择 方案一:采用L298N L298N为SGS-THOMSON Microelectronics 所出产的双全桥步进电机专用驱动芯片( Dual Full-Bridge Driver ) ,内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机,内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46V、2A以下的步进电机,且可以直接透过电源来调节输出电压;此芯片可直接由单片机的IO端口来提供模拟时序信号,但在智能小车电路中单片机IO 端口的使用匮乏。该设计也不用于速度控制,相对来讲LG9110成本 3 基于单片机的智能小车的设计 较低。 方案二:采用LG9110 LG9110是为控制和驱动电机设计的两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片IC之中,使外围器件成本降低,整机可靠性提高。该芯片有两个TTL/CMOS兼容电平的输入,具有良好的抗干扰性;两个输出端能直接驱动电机的正反转运动,它具有较大的电流驱动能力,每通道能通过750-800mA的持续电流,峰值电流能力可达1.5-2.0A;同时它具有较低的输出饱和压降;内置的钳位二极管能释放感性负载的反向冲击电流,使它在驱动继电器、直流电机、步进电机或开关功率管的使用安全可靠。LG9110被广泛应用于玩具汽车电机驱动、步进电机驱动、和开关功率管等电路上。 方案三:使用分立原件搭建电机驱动电路 使用分立原件搭建电机驱动电路造价低廉,在大规模生产中使用广泛。但分立原件H桥电路工作性能不够稳定,较易出现硬件上的故障,故我们放弃了这一方案。 综上所述:通过以上方案比较,在本系统中电机驱动芯片选用第二个方案,使用LG9110作为驱动电路。因为该LG9110驱动能力强,成本低廉,操作起来方便,因此本设计控制器选用此方案。 1.2.3 路况检测模块 采用红外发送接收探头来检测实时路况信息,并传回单片机处理。红外发射探头发射红外信号,遇地面或障碍物反射回红外接收探头,红外接收探头接收到从地面或障碍物反射回的红外信号之后给单片给一个电平信号,来判断整体路况信息。 4 基于单片机的智能小车的设计 2 系统硬件电路与实现 本设计采用了AT89C52单片机作为主控芯片来处理各个模块的运营,系统硬件总框图如图2.1 显示模块 遥控模块 报警模块 AT89C52 路面检测模电机驱动模块 块 图2.1 系统硬件总体框图 2.1 红外遥控及解码模块 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,低成本,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。 红外遥控由发送和接收两个部分组成。发送部分由主芯片将待发的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号红外信号接收端普遍采用价格便宜,性能可靠的一体化红外接收头(如HS0038,它接收红外频率为38KHz,周期为26us)接收红外信号,它同时对信号进行放大、检波、整形,得到TTL电平的编码信号,再送给单片机,经单片机解码并执行,去控制相关对象。如图2.1.1所示。 5 基于单片机的智能小车的设计 一体化红外接收遥控器 单片机 头 发送 解码 接收解调 图2.1.1 红外遥控解码框图 2.1.1 二进制信号的调制 二进制信号的调制由遥控器的主芯片来完成,它把编码后的二进制信号调制成频率为 38KHz的间断脉冲串,相当于用二进制信号的编码乘以频率为38KHz 的脉冲信号得到的间断脉冲串,即是调制后用于红外发射二极管发送的信号。如图2.1.2所示,A是二进制信号的编码波形,B 是频率为38KHz(周期为26us) 的连续脉冲串,C是经调制后的间断脉冲串(相当于C=A×B),用于红外发射二极管发送的波形。图2.1.2中,待发送的二进制数据为 101。如图 2.1.2所示。 6 基于单片机的智能小车的设计 图2.1.2 二进制信号的调制 2.1.2 二进制信号的解调 二进制信号的解调由一体化红外接收头HS0038来完成,它把收到的红外信号经内部处理并解调复原,输出图2.1.3中波形E(正好是对图2.1.2中波形A 的取反),HS0038的解调可理解为:在输入有脉冲串时,输出端输出低电平,否则输出高电平。一体化红外接收头HS0038的 1脚GND接电源地,2脚VCC接+5V,3脚OUT为数据输出(TTL电平,反相输出),可直接与单片机相联。 图2.1.3 HS0038解调出的波形 2.1.3 二进制信号的解码 二进制信号的解码由接收单片机来完成,它把红外接收头送来的二进制编码波形通过解码,还原出发送端发送的数据。如图2.1.3,把波形E解码还原成数据信息101。图2.1.4为红外信号的编码格式 7 基于单片机的智能小车的设计 传输开始 8位数据 传输结束 20个脉冲 高位在前,低位在后 10个脉冲 图2.1.4 红外信号的编码格式 2.2 单片机红外接收硬件电路的实现 图2.2.1中,一体化红外接收头IR的圆形面为红外接收面,它与SE303红外发射管的有效收发直射距离为35m。 8 基于单片机的智能小车的设计 图2.2.1 红外接收电路 3脚接电源,2脚接地,一脚接单片机的P3.3(外部中断0),当有红外信号输入时,1脚解调之后将数据信息传送给单片机引起单片机中断,从而对红外信号进行解码。 2.3 电机驱动模块 在几乎所有的遥控车大都采用了直流电机来控制小车的行为,直流电机有两个控制端,通过改变输入电平的不同来改变电机的运转。图2.3.1为电机驱动模块的硬件电路图。 9 基于单片机的智能小车的设计 图2.3.1电机驱动模块 在图2.3.1中,单片机通过控制P0.0~P0.3引脚电平的高低来控制直流电机M1、M2的正反转。当P0.0~P0.3输入为1010时,两电机均处于正转状态,此时小车表现为整体前进;当P0.0~P0.30输入为0101时,两电机均处于反转模式,小车整体表现为后退。当P0.0~P0.3输入为1001以及0110时,一电机正转,另一电机反转,从而实现了左右转向功能。 很显然,仅仅只靠单片机来驱动小车的行为是不现实的,因为单片机自身管脚输出的高电平的电压是很微弱的,这种电压直接控制电机会使得电机马力不足,没能够带动整个小车运行,所以在这种情况之下,最适合的就是运用电机驱动芯片来完成小车的驱动,这里我们采用了一款价格低廉的电机驱动芯片L9110来完成它的使命,实际上L298N这款芯片能够更好的驱动电机,并能实现电机调速的功能,但由于小车自身重量因数和电压问题我们就采用L9110了。下面给出关 10 基于单片机的智能小车的设计 于L9110的相关数据手册。 图2.3.2 LG9110的实物图 特点: ? 低静态工作电流; ? 宽电源电压范围 2.5V-12V; ? 每通道具有800mA连续电流输出能力; ? 较低的饱和压降; ? TTL/CMOS输出电平兼容,可直接连接CPU; ? 输出内置钳位二极管,适用于感性负载; ? 控制和驱动集成于单片IC之中; ? 具备管脚高压保护功能; 11 基于单片机的智能小车的设计 图2.3.3 LG9110管脚图 管脚定义如表2.3.1 表2.3.1 LG9110的管脚定义 序号 符号 功能 1 OA A路输出管脚 2 VCC 电源电压 3 VCC 电源电压 4 OB B路输出管脚 5 GND 地线 6 IA A路输入管脚 7 IB B路输入管脚 8 GND 地线 12 基于单片机的智能小车的设计 L9110电机驱动芯片有八个管脚,其中两个电源管脚和两个接地管脚,另外有两个输入(IA/IB)、和两个输出管脚(OA/OB),两个输出管脚接,电机的两极,而两输入管脚和单片机连接,从而控制电机的状态。图2.2.4为L9110的硬件连接图。 图2.3.4 LG9110硬件连接图 2.4路况检测模块 采用了红外发射和接收探头来探测路况信息。红外发射管发射红外信号,经路面反射传回给红外接收管进行判断处理。由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”情况和前方是否存在障碍物。笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。 图2.4.1为路况检测模块的硬件设计原理图。 13 基于单片机的智能小车的设计 图2.4.1 路况检测模块硬件连接图 上电之后红外发射管V1、V6、V3导通,向地面以及前方实时发射红外信号,当遇到白色墙或路面时,红外信号经白色路面有较强发射,这时红外接收探头V2、V5、V4刚好接收到红外信号,使得这些探头导通,将低电平送给P3.5、P3.6、P3.7让单片机进行判断处理。路面检测模块分为小车寻黑线的检测和前方是否有障碍物的检测两部分。 2.4.1 寻迹模块 所谓寻迹,就是我们建立一条画画有弯曲黑线的白纸跑道,该智 利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外 14 基于单片机的智能小车的设计 光被吸收,则小车上的接收管接收不到信号。 黑线要有一定宽度,应该是大于两红外线发射探头的距离,如图2.4.2所示。 图2.4.2 小车前方探头实物 这里的红外线发射探头为前端向下伸出的透明的探头,所以黑色跑道宽度应该至少大于两透明探头的距离,才能保证小车正常运行。小车放在黑色跑道上时,打开电源时,小车前端向下伸出的红外线发射探头发射红外线,如果小车在黑线上,小车发出的红外线就遇到黑色时,不产生反射。当左边稍微跑出黑色跑道时,发出的红外线就会遇到白色而产生反射,这时旁边的黑色接收探头接收到反射信号,从而使接收探头导通。原理图如下图所示,当D2接收到红外信号时,会使P3.5产生一个低电平,进而送给单片机进行处理,单片机接收到来至左侧的接收头给的低电平时,给予小车右转操作;同理,当小车右边跑出黑线时,右侧探头识别之后会给小车低电平,提示小车应该进行左转操作。这样就完成了整个小车的寻迹功能。 15 基于单片机的智能小车的设计 2.4.2 智能防撞报警模块 智能防撞报警是现代智能小车的一个非常有研究价值的课题,十分有现实意义。智能小车能够自识别前方是否有障碍物。如果有则自动调节小车的运动轨迹来成功避免撞到障碍物所带来的损失,同时在遇到障碍物时,能够提示报警,以提示主人应注意安全。 将小车放置在空旷的路面上,小车的前端两探头感应前面是否有障碍物,与此同时,朝下的四个探头也会同时接收来自地面路况的信息,当小车运行到悬崖边上时,小车上面主控芯片单片机就会接收到此时的路况信息,进而去改变小车的运行路径。同时发出报警信号。 报警模块硬件图如图2.4.3所示。 图2.4.3 防撞探头实物 当前面有障碍物时,单片机分析之后送给P0.6一个高电平信号,使得三极管V1导通,从而引起SB1蜂鸣器导通,发出报警信号。 当前方无障碍物时,另一个红外接收探头则接收不到由发射头发射出来的红外信号,当前方遇到障碍物时,发射头发出去的红外信号 16 基于单片机的智能小车的设计 被前方障碍物反射回来,此时刚好被接受探头接收,探头接收到信号时,将会使其中一个管脚变为低电平,再传送给单片机;同理小车在判断前方是否有悬崖时也一样,当前方没有出现悬崖时,小车朝下的探头发出去的红外信号就会经路面反射,而且只要小车在路面上行驶,那么红外信号就会一直被反射进而被接收,也就会使得单片机与红外接收探头其中一脚相连的管脚一直至0,当前面遇到悬崖时,红外信号发射出去之后,由于红外接收头的接收距离有限,就会检测不到有传回的红外信号,此时就会给单片机一个高电平,单片机识别之后便会做出相应的修正动作,并给蜂鸣器一个信号,使得蜂鸣器出现报警提示。 3系统软件设计与实现 在系统软件设计时,我们将所有的模块程序嵌入到遥控器中,这种嵌入式主要是为了便于控制,且不占CPU,因为遥控模块、寻迹模块、以及避障模块等都同时用到了实时检测扫描,这样不仅占用CPU,而且多个程序一块运行还会产生冲突。各个模块衔接如图3.1所示。 电机控制(前进后退左右转) 遥单 控片 器黑线寻迹 机 输解入 码 防撞报警 17 基于单片机的智能小车的设计 图3.1 程序模块连接 遥控器发送红外信号时,开启单片机外部中断0,主程序进入中断函数,进行解码。解码处理完成之后,将遥控信息反馈给主程序,主程序对比遥控器输入值之后进入相应模块执行相关操作,各模块最终会处理是由电机驱动来完成的,所以在图3.1中最终箭头是指向电机控制模块的。 3.1整体程序的构架 程序框图如图3.1.1所示 初始化 检测红外遥控信号 否收到红外遥控信号 是 对红外信号进行解码 执行相关功能 图3.1.1 整体程序框图 18 基于单片机的智能小车的设计 3.2红外遥控解码的实现 整个控制程序都嵌入到了遥控模块这一单元里边,所以红外遥控的解码是贯穿整个设计的主线,起到了整个系统入口的作用。 当遥控器上按下按键时,1脚收到遥控器发送的红外脉冲信号并解码出脉宽波形,同时使单片机产生中断,并开启定时器、脉冲个数计数。记录出每来一个脉冲的时间和脉冲总个数,等到一帧的数据发送完成之后,单片机结束计数,并关闭定时器。之后进入判断阶段,首先判断这一帧数据中的脉冲个数,如果脉冲个数大于31个则将数据丢弃,如果刚好则判断接收的脉冲是0还是1,接收完之后将这些数据保存起来,再来比对数据的对错,首先比对前导码是否正确,也就是看一下当前遥控器是不是与小车匹配的遥控器,如果都正确之后再来将码值存起来。主程序用一个swich函数来对相应码值进行对应函数的调用就可以了,比如按下了上键,则调用前进函数来完成小车前进动作。如图3.2所示 19 基于单片机的智能小车的设计 初始化 中断口是否有遥控信号否 输入 是 是 是否有抖动 否 进入解码 计数脉冲个数同时计数单 个脉冲宽度 脉冲个数是否为否 32个 是 数据解码并判断数据码和数否 据反码取非之后是否相等 是 执行相关模块 图3.2 解码程序框图 20 基于单片机的智能小车的设计 3.3电机驱动 从宏观上讲,电机驱动在小车运行中占据主导,也是小车接收到命令之后的最终输出,任何一个模块所执行命令的外在表现。 电机驱动包括驱动电机前进、后退、左转、右转以及暂停功能,这些功能不仅仅只是遥控器按下上下左右之后才执行,而是每一个模块都会有执行电机驱动模块的操作,所以在设计程序时,最优设计应该是将这些前进、后退、左右转向单独编译成一个函数块,每一个子模块的运行就只需调用这些函数就可完成。这样做就节省了很大的程序空间。举个例子,在编写前进函数时,为了满足小车前进功能,只需将P0.0—P0.3赋值1010就可完成,其他左转右转只是改变相应P0.0—P0.3的码值则可实现。当然为了使得更准确,可以添加一下延时函数在内部,以避免操作太快给电机带了的损坏。 3.4 小车寻迹 在主程序中只要检测到遥控器上按下了寻迹功能键之后,主程序直接调用寻迹函数,来实现寻迹功能。这里介绍一下寻迹模块编写的一些思路。 要实现寻迹就必须清楚寻迹原理,在前面的技术介绍中,已经介绍了他的原理。这里不做过多说明,以免冗余。寻迹函数的编写是一个实时扫描单片机管脚P3.5/P3.6,P3.5管脚代表左方探头传回的信息,P3.6代表右边探头传回的信号。当左方探头跑出黑线时,会给P3.5至0,单片机检测到P3.5为0时,便调用右转向函数,来完成右侧转功能,当右方探头跑出黑线时,同样会使P3.6至0,这时再调用左转向函数来调节小车的位置。图3.4为小车寻迹模块的程序流程图 21 基于单片机的智能小车的设计 初始化 探头跑出黑 线了吗 否 是 前进 哪边探头有 输入 右 左 左 右 均 有 右转 后退 左转 图3.4 寻迹程序流程图 3.5 小车防撞报警 主人命令开启防撞功能时,小车主程序调用防撞报警函数,在防撞报警函数打开时进入实时检测P3.7脚,当前方遇到悬崖或障碍物时,小车内部防撞函数调用电机驱动函数来调节小车行经来避免掉入悬崖或撞击障碍物,并触发报警信号引起报警。图3.5为防撞报警模块的程序流程图。 22 基于单片机的智能小车的设计 初始化 前方有悬崖或障碍物 吗 否 是 后退并报警 前进 左转并报警 图3.5 防撞报警程序流程图 23 基于单片机的智能小车的设计 4 小车系统原理图 硬件电路总设计图如图4.1所示 123456 VCCDDC2R24R25R23R22R21R20R19R18R16R17C610K56056056056056056056056010KR1510uF10K104LG9110IC381RX12RX13RX14RX15RX16RX17RX18RX11R2M172M10K10K10K10K10K10K10K10K56063D8D7D6D5D4D3D2D1IC154C3RST9EA/VPP139P1.0P0.0/AD0XTAL1D110423881P1.1P0.1/AD1M2337193172MP1.2P0.2/AD243663P1.3P0.3AD353554P1.4P0.4/AD4634P1.5P0.5/AD5LG9110IC4733P1.6P0.6/AD6832P1.7P0.7/AD7SM130ALE/PROG729DPPSENR6R4R5R132810CCg560P2.7/A15R8RXD/P3.04.7K1M47K15K211275603fTXD/P3.1P2.6/A14R7S2S1R1R8R6R5R3R442612560e2P2.5/A13R13INT0/P3.222015K22015K22015K52513560d1P2.4/A12R12INT1/P3.382414c560P2.3/A11R11T0/P3.4IR962315560bAP2.2/A10R10T1/P3.51011622a 560WR/P3.6P2.1/A9R9AV3C51721RD/P3.7P2.0/A8B1R148050V1V2V6V5V3V422010uFXTAL2R3RL1150KAT89S5218 Z1C7C8V230PSB130P8550VCC40R2220D2BBV18550 R7560 AA 123456 图4.1 硬件电路原理图 24 基于单片机的智能小车的设计 最终主板PCB图 前板PCB 25 基于单片机的智能小车的设计 5 系统调试 把原理图画、最终PCB画好之后再根据实验室现有的实验条件进行制版,并一并把所有元器件焊接上,在焊接时应注意以下几点: 1、电解电容容有正负极之分,长正短负; ? 2、二极管有正负极之分,长正短负; ? 3、话筒有正负之分,负极与外壳相连; ? 4、蜂鸣器有正负之分,长正短负; ? 5、三极管按照电路板封装焊接; ? 6、集成电路即芯片,安装时要注意缺口对应(缺口对应位置和? 封装对应位置要一致)。(缺口在芯片或芯片底座的一端); 7、数码管焊接时注意数码管上的小数点要与电路板封装上的小? 数点对应; 8、每个电机都需要焊接瓷片电容104。 ? 焊接完之后,还需对小车各个模块进行调试,以确保硬件的完好。 5.1 遥控发送接收调试 由于遥控器是由厂家直接提供的,为了确保遥控器能够正常发送红外信号,必须提前进行测试,但遥控器是集成的,而红外线发射灯又是透明的,当发送的时候人眼观察不到任何现象,那么怎样知道遥控器是否正常呢,这里教你一小招,将遥控器装上电池,然后将你自己的手机的照相功能打开,将手机上的摄像头对准你遥控器前面的发射灯,然后按下遥控器上的任何一个按键,观察手机照相功能里面的遥控器发射灯是否点亮,如果灯已被点亮,则说明遥控器能够正常发射红外信号,否则遥控不能发射红外信号。这一招很简单,在家里也能用,平常家里面的遥控电视机遥控器不灵了就可试着采用这一方法,进而初步判断是不是遥控器已坏或者遥控器上面电池没电了。 在上面已经介绍了遥控器的测试,现在再来谈谈红外接收头的调试,如果遥控器能够正常工作,下一步就应该测试一下接收头是否正 26 基于单片机的智能小车的设计 常接收了。小车上电之后将接收头的1号管脚接上示波器,然后一直按下遥控器上面的按键,观察示波器上面波形,如果能够发现有重复的高低脉冲,但看不清具体的脉冲宽度,则说明红外线能够正常接收红外信号。如果接上之后没什么反应,也未见其波形,初步推断是接收头有问题,或许是元器件已坏,也可能是焊接时有虚焊或短路,这时应该再次检查电路连接。 以上步骤都完成且正常之后可烧写遥控小程序以此来检查所用程序是否能够正常解码。 5.2 电机驱动调试 最直接的方法来判断电机是否完好就是那一节干电池做电源,将两极分别接在直流电机的两极,来观察能否实现正转反转,当然在接之前最好在直流电机两引脚之间接上一个104的瓷片电容,这样做是防止由于电流过大将电机烧坏。完成之后再烧电机驱动程序,程序里边在执行完正转之后设置一个延迟时间,烧写完程序之后再运行小车,观察小车前进后退敏不敏捷,左右转向弧度大小怎样,如果不满足自己要求,则可改变延迟时间的长短来实现,不断进行调试。已达到最佳效果。 5.3 寻黑线和防撞的调试 首先检查前板探头是否正常,红外信号发射探头可继续采用检测器正常与否中使用的方法,黑色接收探头正常与否可参考原理图,将小车置于白色跑道上,正前方放一障碍物,注意障碍物表面一定不能为黑色,然后用万用表测量一下P3.5、P3.6、P3.7管脚电压。观察是否为0电压,如果为0,则正常工作,如果不为0,则可能电路存在问题,需检查电路完整性。然后再次烧写寻迹和防撞报警程序,并自己建立边缘为白色,跑道为黑色的实验台,观察小车在自动寻迹功能上是否能正常实现,并观察小车在弯曲跑道上的转向弧度是否合理,如果不合理则应调节内部延时间。以跑道要求。 27 基于单片机的智能小车的设计 总结 毕业设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。这次的毕业设计通过搜集相关资料和撰写论文对我来说是一次非常难得的锻炼机会,可以说已经囊括了大学期间大部分的知识,从选题到定稿,从理论到实践可以把所学的专业知识充分运用起来解决具体的问题,不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,能够使所学知识融会贯通。对于我来说这不仅仅是一次毕业设计,更重要的是在过程中提高了我学习的能力、解决问题的能力和实际工作的能力,这些技能和方法都会对将来的工作有很大的帮助。 回顾起此次毕业设计,至今我仍感慨颇多,可以说得是苦多于甜,但是可以学到很多很多的东西。在设计和写论文的过程中遇到很多问题,可以说得是困难重重,发现了自己还有很多的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,这次课程设计也让我对以前所学过的知识有了温故知新。 27 基于单片机的智能小车的设计 28 基于单片机的智能小车的设计 参考文献 [1] 宋建国:AVR单片机原理及应用[A],北京航空航天大学出版社, 1998.2,P35-P45 [2] 黄继昌:传感器工作原理及应用实例[A],北京人民邮电出版社, 1998.6,P32-P35 3] 雷辉:基于AT89C2051的智能防撞报警器设计,电气时代[J],[ 2005.1,P44-P46 [4]吴爱萍: 基于AT89S51的多功能红外遥控器设计[期刊论文]-仪表 技术与传感器 2008(8) [5]洪刚:一种简易红外遥控键盘的设计[期刊论文]-重庆科技学院学报 (自然科学版) 2008(4) [6]王建跃:红外遥控器编码方法[期刊论文]-工矿自动化 2005(z1) 29 基于单片机的智能小车的设计 附录 元件清单 位号 名称 位号 名称 M1 电机1接线座 SIUI LED数码管 M2 电机2接线座 IR1 红外接收头 X1 前端探测板接线RX1 10K排阻9脚 座 DC 15K Z1 11.0592晶振 R1 220 IC1 STC89C52RC R2 150 IC2 MAX232CPE R3 1M IC3 L9110集成电路 R4 47K IC4 L9110集成电路 R5 4.7K C1 10uF/16V R6 560 C2 104 R7 560 C3 104 R8 560 C4 104 R9 560 C5 10uF/16V R10 560 C6 10uF/16V R11 560 C7 30PF R12 560 C8 30PF R13 560 C9 104 R14 220 C10 10uF/16V R15 10K C11 10uF/16V R16 560 C12 10uF/16V R17 560 C13 10uF/16V R18 560 D1~D8 红色发光二极管 R19 560 D9 绿色发光二极管 R20 560 S1 按键开关 R21 560 S2 按键开关 30 基于单片机的智能小车的设计 R22 560 S3 按键开关 R23 560 COM1 DB9针串口 R24 560 D1~D2 LED(前板用) R25 10K V1 发射头(前板用) R26 560 V2 接收头(前板用) RL1 光敏电阻 V3 发射头(前板用) SB1 蜂鸣器 V4 接收头(前板用) B1 话筒 V5 发射头(前板用) R1 220(前板用) V6 接收头(前板用) R2 560(前板用) R3 220(前板用) R4 15K(前板用) R5 15K(前板用) R6 220(前板用) R7 560(前板用) R8 15K(前板用) 9012红外遥控发射器 V1~V2 8550 J1~J2 跳线帽 系统程序 #include //包含51单片机相关的头文件 #define uint unsigned int //重定义无符号整数类型 #define uchar unsigned char //重定义无符号字符类型 uchar code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, //定义数码管显示数据 0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9 31 基于单片机的智能小车的设计 uchar code RecvData[]={0x07,0x0A,0x1B,0x1F,0x0C,0x0D,0x0E,0x00,0x0F,0x19}; uchar IRCOM[7]; static unsigned int LedFlash; //定义闪动频率计数变量 unsigned char RunFlag=0; //定义运行标志位 bit EnableLight=0; //定义指示灯使能位 /***********完成基本数据变量定义**************/ sbit S1State=P1^0; //定义S1状态标志位 sbit S2State=P1^1; //定义S2状态标志位 sbit B1State=P1^2; //定义B1状态标志位 sbit IRState=P1^3; //定义IR状态标志位 sbit RunStopState=P1^4; //定义运行停止标志位 sbit FontIRState=P1^5; //定义FontIR状态标志位 sbit LeftIRState=P1^6; //定义LeftIR状态标志位 sbit RightIRState=P1^7; //定义RightIRState状态标志位 /*************完成状态指示灯定义*************/ 32 基于单片机的智能小车的设计 sbit S1=P3^2; //定义S1按键端口 sbit S2=P3^4; //定义S2按键端口 /*************完成按键端口的定义*************/ sbit LeftLed=P2^0; //定义前方左侧指示灯端口 sbit RightLed=P0^7; //定义前方右侧指示灯端口 /*************完成前方指示灯端口定义*********/ sbit LeftIR=P3^5; //定义前方左侧红外探头 sbit RightIR=P3^6; //定义前主右侧红外探头 sbit FontIR=P3^7; //定义正前方红外探头 /*************完成红外探头端口定义***********/ sbit M1A=P0^0; //定义电机1正向端口 sbit M1B=P0^1; //定义电机1反向端口 sbit M2A=P0^2; //定义电机2正向端口 sbit M2B=P0^3; //定义电机2反向端口 /*************完成电机端口定义***************/ sbit B1=P0^4; //定义话筒传感器端口 sbit RL1=P0^5; //定义光敏电阻端口 sbit SB1=P0^6; //定义蜂 33 基于单片机的智能小车的设计 鸣端口 /*********完成话筒,光敏电阻,蜂鸣器.端口定义**/ sbit IRIN=P3^3; //定义红外接收端口 /*********完成红外接收端口的定义*************/ #define ShowPort P2 //定义数码管显示端口 extern void ControlCar(uchar CarType); //声明小车控制子程序 void delay(unsigned char x) //0.14mS延时程序 { unsigned char i; //定义临时变量 while(x--) //延时时间循环 { for (i = 0; i<13; i++) {} //14mS延时 } } void Delay() //定义延时子程序 { uint DelayTime=30000; //定义延时时间变量 while(DelayTime--); //开始进行延时循环 return; //子程序返回 34 基于单片机的智能小车的设计 } void ControlCar(uchar CarType) //定义小车控制子程序 { M1A=0; //将电机1正向电平置低 M1B=0; //将电机1反向电平置低 M2A=0; //将电机2正向电平置低 M2B=0; //将电机2反向电平置低 LeftLed=1; //关闭前方左侧指示灯 RightLed=1; //关闭前方右侧指示灯 Delay(); //将此状态延时一段时间 switch(CarType) //判断小车控制指令类型 { case 1: //前进 //判断是否是前进 { M1A=1; //将电机1正向端口置高 M2A=1; //将电机2正向端口置高 ShowPort=LedShowData[1]; //数码管显示前进状态 break; //退出判 35 基于单片机的智能小车的设计 断 } case 2: //后退 //判断是否是后退 { M1B=1; //将电机1反向端口置高 M2B=1; //将电机2反向端口置高 ShowPort=LedShowData[2]; //数码管显示后退状态 RightLed=0; //将前方右侧指示灯置低(亮) LeftLed=0; //将前方左侧指示灯置低(亮) break; //退出判断 } case 3: //左转 //判断是否是左转 { M1B=1; //将电机1反向端口置高 M2A=1; //将电机2正向端口置高 ShowPort=LedShowData[3]; //数码管显示左转状态 LeftLed=0; //将前方左侧指示灯置低(亮) break; //退出判断 } case 4: //右转 //判断是否 36 基于单片机的智能小车的设计 是右转 { M1A=1; //将电机1正向端口置高 M2B=1; //将电机2反向端口置高 ShowPort=LedShowData[4]; //数码管显示右转状态 RightLed=0; //将前方右侧指示灯置低(亮) break; //退出判断 } default: //默认情况下的判断 { break; //直接退出判断 } } } void ComBreak() interrupt 4 //定义串口通信子程序 {unsigned char RecvData; //定义串口数据接收变量 if(RI==1) //判断是否接收数据 { RecvData=SBUF; //将接收到的数据放入暂时变量 if(RecvData<10) //判断接收到的数据是否小于10 37 基于单片机的智能小车的设计 { ShowPort=LedShowData[RecvData]; //将接收到的数据通过数码管显示出来 ControlCar(RecvData); //将串口数据置于小于状态 } SBUF=RecvData; //向电脑返回当前接收到的数据 RI=0; //清除接收中断标志位 } if(TI==1) //判断是否是发送中断 { TI=0; //清除发送中断标志位 } } void IR_IN() interrupt 2 using 0 //定义INT2外部中断函数 { unsigned char j,k,N=0; //定义临时接收变量 EX1 = 0; //关闭外部中断,防止再有信号到达 delay(15); //延时时间,进行红外消抖 if (IRIN==1) //判断红外信号是否消失 38 基于单片机的智能小车的设计 { EX1 =1; //外部中断开 return; //返回 } while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 { delay(1); //延时等待 } for (j=0;j<4;j++) //采集红外遥控器数据 { for (k=0;k<8;k++) //分次采集8位数据 { while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 { delay(1); //延时等待 } while (!IRIN) //等 IR 变为高电平 { delay(1); //延时等待 39 基于单片机的智能小车的设计 } while (IRIN) //计算IR高电平时长 { delay(1); //延时等待 N++; //计数器加加 if (N>=30) //判断计数器累加值 { EX1=1; //打开外部中断功能 return; //返回 } } IRCOM[j]=IRCOM[j] >> 1; //进行数据位移操作并自动补零 if (N>=8) //判断数据长度 { IRCOM[j] = IRCOM[j] | 0x80; //数据最高位补1 } N=0; //清零位数计录器 } } 40 基于单片机的智能小车的设计 if (IRCOM[2]!=~IRCOM[3]) //判断地址码是否相同 { EX1=1; //打开外部中断 return; //返回 } for(j=0;j<10;j++) //循环进行键码解析 { if(IRCOM[2]==RecvData[j]) //进行键位对应 { P2=LedShowData[j]; //数码管显示相应数码 } } switch(IRCOM[2]) { case 0x1A: //前进 { ControlCar(1); //小车前进 break; } case 0x05: //后退 { ControlCar(2); //小车后退 break; 41 基于单片机的智能小车的设计 } case 0x01: //左转 { ControlCar(3); //小车左转 break; } case 0x03: //右转 { ControlCar(4); //小车右转 break; } case 0x12: //电源 { ControlCar(5); //停止 break; } } EX1 = 1; //外部中断开 } void main(void) //主程序入口 { bit ExeFlag=0; //定义可执行位变量 42 基于单片机的智能小车的设计 LedFlash=3000; //对闪灯数据进行初始化 TMOD=0x01; //选择定时器0为两个16位定时器 TH0=0xFF; //对定时器进行计数值进行初始化 TL0=0x49; //同上,时间大约为25uS TR0=1; //同意开始定时器0 EX1=1; //同意开启外部中断1 IT1=1; //设定外部中断1为低边缘触发类型 ET0=0; SCON=80; //设置串口模式为8位数据 TMOD=33; //设置定时/计数器模式 TH1=0xFD; //给定时器1高八位初始化初值 TL1=0xFD; //给定时器1低八位初始化初值 TR1=1; //开启定时器1 ES=1; //开启串口通信功能 REN=1; //开启接收中断标志 EA=1; //总中断开启 43 基于单片机的智能小车的设计 ControlCar(1); //将小车置于前进状态 ShowPort=LedShowData[0]; //数码管显示数字0 while(1) //程序主循环 { while(LedFlash--) //闪灯总延时 { if(RL1==0) //判断光敏电阻的状态 { RightLed=1; //将前方右侧指示灯点亮 LeftLed=1; //将前方左侧指示灯点亮 } else //在光敏电阻为不通的状态下 { RightLed=0; //将前方右侧指示灯熄灭 LeftLed=0; //将前方左侧指示灯熄灭 } if(IRIN==0) //判断延时期间是否有红外信号输入 {ExeFlag=1; //将可执行标志位置1 } 44 基于单片机的智能小车的设计 if(S1==0) //判断是否有S1按下 { ControlCar(8); //将小车置于停止状态 RunFlag=1; //改变小车运行状态标志位 S1State=!S1State; //改变S1按键标志位 goto NextRun; //跳转到NextRun标签 } if(S2==0) //判断是否有S2按下 { ControlCar(1); //将小车置于前进状态 RunFlag=0; //改变小车运行状态标志位 S2State=!S2State; //改变S2按键标志位 goto NextRun; //跳转到NextRun标签 } FontIRState=FontIR; //前方红外指示灯显示正前方红外探头状态 LeftIRState=LeftIR; //左侧红外指示灯显示前方左侧红外探头状态 RightIRState=RightIR; //右侧红外指示灯显示前主右侧红外探头状态 if(FontIR==0 || LeftIR==1 || RightIR==1) //判断正前方, 45 基于单片机的智能小车的设计 前左侧,前右侧红外探头状态 {ControlCar(2); //改变小车状态为后退 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 ControlCar(3); //改变小车左转状态 46 基于单片机的智能小车的设计 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 Delay(); //调用延时子程序 SB1=!SB1; //将蜂鸣器取反 ControlCar(1); //改变小车为前进状态 SB1=1; //关闭蜂鸣器声音 } if(B1==0) //判断是否有话筒信号输入 { if(RunFlag==0) //判断小车当前的运行标志位 { ControlCar(8); //将小车置 47 基于单片机的智能小车的设计 于停止状态 RunFlag=1; //改变小车运行标志位 } else { ControlCar(1); //将小车置于前进状态 RunFlag=0; //改变小车运行标志位 } B1State=!B1State; //将话筒信号指示灯取反 } } NextRun: //跳转标签 RunStopState=!RunStopState; //改变小车运行停止状态标志位 } } 48
/
本文档为【基于单片机的智能小车 毕业论文 好】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索