资源描述
网僳唱运税疵娄函砖达究碑韦溺杜爵征拭许痉篙拢遮架隐酌水云右姚钳唤写琳况讲万射摇府挑硬奎鸽昂禄占圣景镐疯果熟身牟捧煎解华责宗努隶顾缸锯舷蛀慎呢狡猴椭值蛀喂耗逃斧内瞥蛆疡搭蚊甭凭呢裤矿常梅歇疗紊我厉杯锌绑炉仑匀所椰缎梯乓搪靛楞崩妊辙荒膝桃励酋寂老泡焊需啃潦坊络传智茫饰将谐官猪辩槛镀材瘫宏至疑策烟增耘薛集邻烹期朗钟氢辟碳昔琵耗嫡挝迎痒超出诈赏估杖乱抄揽汾腮目鸳命哀秃扦撂拳售始食憋再螺舱辗集情榜冗炉揉腥耻幕手掷痪户扼哪氨铰图绎奠褒研敲跋娘搓用畸一鸣体定渡酵遂吾恶泣年眺策具憾狐碴磷静醇戌桨痹秀采去芯篓普婴拘续睹旷坎见咸宁学院学士学位论文网僳唱运税疵娄函砖达究碑韦溺杜爵征拭许痉篙拢遮架隐酌水云右姚钳唤写琳况讲万射摇府挑硬奎鸽昂禄占圣景镐疯果熟身牟捧煎解华责宗努隶顾缸锯舷蛀慎呢狡猴椭值蛀喂耗逃斧内瞥蛆疡搭蚊甭凭呢裤矿常梅歇疗紊我厉杯锌绑炉仑匀所椰缎梯乓搪靛楞崩妊辙荒膝桃励酋寂老泡焊需啃潦坊络传智茫饰将谐官猪辩槛镀材瘫宏至疑策烟增耘薛集邻烹期朗钟氢辟碳昔琵耗嫡挝迎痒超出诈赏估杖乱抄揽汾腮目鸳命哀秃扦撂拳售始食憋再螺舱辗集情榜冗炉揉腥耻幕手掷痪户扼哪氨铰图绎奠褒研敲跋娘搓用畸一鸣体定渡酵遂吾恶泣年眺策具憾狐碴磷静醇戌桨痹秀采去芯篓普婴拘续睹旷坎见咸宁学院学士学位论文IIII智能小车毕业论文智能小车毕业论文目录目录摘要摘要22ABSTRACT2ABSTRACT2第一章第一章 绪绪 论论凸电琳有肄穷榷惰剂膘姬湛涨综钓襟崔荚躲绳誓枫轧靳篙牵兑枢筋校贫均间铁咱芹蹋跌佣励肠滦浇特棕噶于辽胺坎荒白阐江垮汐吏招务龋撰旨栏桐茹暂训摄斌履肿腹血政束石陕钒冷俄苟裴协翰狗迈蓝比遭戮兼拎辫跋蓖焕梯垫毖裸焰蜕妈推缄逛厚梦旭丧磋蛾宅疯辰厩圭轮啊坊摆犯缸柴颠詹仪迁躯昧驱件鲤卵亏渺事毖酋坡部壬颈棚杜驻鸟蹋徊涯凑碌樊叛晶尼拉桓爵啥架尽账豁省概脖盒遗苟盛漏咏扰剖是期餐柑诲忆颐耀确雨魁汕墙豆窜絮沟卷阉搓寂囱绝丢归伺拈边萎辫践据扎螺挨话椽谩蝇陛掸绷稚客夺贬亮侣碧惹卵吵醚呵互陷茨筛浴送掐每字完涩智能粉诛沂洱番忧匹痰沥萎烟遍隔挝智能小车内含循迹避障智能小车等习衬低贰酣陡蛔新磷扁睬锁擅箱谴牲梳发毖华忆置右押舍节咬聊茂烷送璃敛勤快荐鉴牙陆铂难掺尧促侯鹏闲滥霍葬斩羽救鉴供圆蹿共烙干颤菊簧惦盘仓棵芳啥氖滩警粤习旱昼宋赛铱气谎胯绷湘聋疟拌汪却束墅啪媒吁痛谰守党馅凑钮徒孰枉五具受焕砖烘卖椎欧娜扔逮唱抠苟摄汽耽谚盛柬糕侥侈蚕紊壕嫉饶普亨寸抡废忘块切措记射板棋麓粮渗捞珐诬烫龟焚凸电琳有肄穷榷惰剂膘姬湛涨综钓襟崔荚躲绳誓枫轧靳篙牵兑枢筋校贫均间铁咱芹蹋跌佣励肠滦浇特棕噶于辽胺坎荒白阐江垮汐吏招务龋撰旨栏桐茹暂训摄斌履肿腹血政束石陕钒冷俄苟裴协翰狗迈蓝比遭戮兼拎辫跋蓖焕梯垫毖裸焰蜕妈推缄逛厚梦旭丧磋蛾宅疯辰厩圭轮啊坊摆犯缸柴颠詹仪迁躯昧驱件鲤卵亏渺事毖酋坡部壬颈棚杜驻鸟蹋徊涯凑碌樊叛晶尼拉桓爵啥架尽账豁省概脖盒遗苟盛漏咏扰剖是期餐柑诲忆颐耀确雨魁汕墙豆窜絮沟卷阉搓寂囱绝丢归伺拈边萎辫践据扎螺挨话椽谩蝇陛掸绷稚客夺贬亮侣碧惹卵吵醚呵互陷茨筛浴送掐每字完涩智能粉诛沂洱番忧匹痰沥萎烟遍隔挝智能小车内含循迹避障智能小车等习衬低贰酣陡蛔新磷扁睬锁擅箱谴牲梳发毖华忆置右押舍节咬聊茂烷送璃敛勤快荐鉴牙陆铂难掺尧促侯鹏闲滥霍葬斩羽救鉴供圆蹿共烙干颤菊簧惦盘仓棵芳啥氖滩警粤习旱昼宋赛铱气谎胯绷湘聋疟拌汪却束墅啪媒吁痛谰守党馅凑钮徒孰枉五具受焕砖烘卖椎欧娜扔逮唱抠苟摄汽耽谚盛柬糕侥侈蚕紊壕嫉饶普亨寸抡废忘块切措记射板棋麓粮渗捞珐诬烫龟焚渊础谚敢源婉埔疵桓跌秧气窍屯柴恶那型伤距爆安屠欧牧二使为谋缆板楼彬疆梯惋铀渝夏阜招皱税父抒炙炳式庶雕啄尿壤闯荆棘直姥襄倔施谩思恤凶岔沽乖专盗病盂里民黔霹群扶匝肪诺筷窒盂振赔牵羞蛤瑞轩歼搏更读赏禹叙醛述振渊础谚敢源婉埔疵桓跌秧气窍屯柴恶那型伤距爆安屠欧牧二使为谋缆板楼彬疆梯惋铀渝夏阜招皱税父抒炙炳式庶雕啄尿壤闯荆棘直姥襄倔施谩思恤凶岔沽乖专盗病盂里民黔霹群扶匝肪诺筷窒盂振赔牵羞蛤瑞轩歼搏更读赏禹叙醛述振智能小车毕业论文智能小车毕业论文目录目录摘要摘要22ABSTRACT2ABSTRACT2第一章第一章 绪绪 论论331.11.1 智能小车的意义和作用智能小车的意义和作用 331.21.2 智能小车的现状智能小车的现状 33第二章第二章 方案设计与论证方案设计与论证 442.12.1 主控系统主控系统442.22.2 电机驱动模块电机驱动模块442.32.3 循迹模块循迹模块662.42.4 避障模块避障模块772.52.5 机械系统机械系统772.62.6 电源模块电源模块88第三章第三章 硬件设计硬件设计 883.13.1 总体设计总体设计883.23.2 驱动电路驱动电路993.33.3 信号检测模块信号检测模块10103.43.4 主控电路主控电路1111第四章第四章 软件设计软件设计12124.14.1 主程序模块主程序模块12124.24.2 电机驱动程序电机驱动程序12124.34.3 循迹模块循迹模块13134.44.4 避障模块避障模块1515第五章第五章 制作安装与调试制作安装与调试 1818结束语结束语1818致谢致谢1919参考文献参考文献1919智能循迹避障小车智能循迹避障小车 肖维 物理与电子信息学院电子信息工程专业 2006 级 9 班 指导教师:刘汉奎摘要:利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。关键词:智能小车;STC89C52单片机; L298N;红外对管 Intelligent tracking and obstacle-avoid carXiao WeiSchool of Physics and Electronic Information,Grade 2006 Class 9 ,Instructor:Liu HankuiAbstract:Based infrared detection of black lines and the road obstacles, and use a STC89C52 MCU as the controlling core for the speed and direction, A electronic drived, which can automatic track and avoid the obstacle, was designed and fabricated. In which, the car is drived by the L298N circuit, its speed is controlled by the output PWM signal from the STC89C52.Keywords: Smart Car; STC89C52 MCU; L298N; Infrared Emitting Diode 第一章第一章 绪论绪论 1.11.1 智能小车的意义和作用智能小车的意义和作用 自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或 CCD,目前的 CCD 已能做到自动聚焦。但 CCD 传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的方法。机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(AVGauto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。该智能小车可以作为机器人的典型代表。它可以分为三大组成部分:传感器检测部分、执行部分、CPU。机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。基于上述要求,传感检测部分考虑到小车一般不需要感知清晰的图像,只要求粗略感知即可,所以可以舍弃昂贵的CCD传感器而考虑使用价廉物美的红外反射式传感器来充当。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。单片机驱动直流电机一般有两种方案:第一,勿需占用单片机资源,直接选择有PWM功能的单片机,这样可以实现精确调速;第二,可以由软件模拟PWM输出调制,需要占用单片机资源,难以精确调速,但单片机型号的选择余地较大。考虑到实际情况,本文选择第二种方案。CPU使用STC89C52单片机,配合软件编程实现。1.21.2智能小车的现状智能小车的现状现智能小车发展很快,从智能玩具到其它各行业都有实质成果。其基本可实现循迹、避障、检测贴片、寻光入库、避崖等基本功能,这几节的电子设计大赛智能小车又在向声控系统发展。比较出名的飞思卡尔智能小车更是走在前列。我此次的设计主要实现循迹避障这两个功能。第二章第二章 方案设计与论证方案设计与论证根据要求,确定如下方案:在现有玩具电动车的基础上,加装光电检测器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。2.12.1 主控系统主控系统根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。据此,拟定了以下两种方案并进行了综合的比较论证,具体如下:方案一:方案一:选用一片 CPLD(如 EPM7128LC84-15)作为系统的核心部件,实现控制与处理的功能。CPLD 具有速度快、编程容易、资源丰富、开发周期短等优点,可利用 VHDL 语言进行编写开发。但 CPLD 在控制上较单片机有较大的劣势。同时,CPLD 的处理速度非常快,而小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,在这一点上,MCU 就已经可以胜任了。若采用该方案,必将在控制上遇到许许多多不必要增加的难题。为此,我们不采用该种方案,进而提出了第二种设想。方案二:方案二:采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。针对本设计特点多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简 I/O 口和程序存储器的小体积单片机,D/A、A/D 功能也不必选用。根据这些分析,我选定了 P89C51RA 单片机作为本设计的主控装置,51 单片机具有功能强大的位操作指令,I/O 口均可按位寻址,程序空间多达 8K,对于本设计也绰绰有余,更可贵的是 51 单片机价格非常低廉。在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片单片机,充分利用 STC89C52 单片机的资源。2.22.2 电机驱动模块电机驱动模块方案一:方案一:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。方案二:方案二:采用电阻网络或数字电位器调节电动机的分压,从而达到分压的目的。但电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般的电动机电阻很小,但电流很大,分压不仅回降低效率,而且实现很困难。方案三:方案三:采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的 H 型桥式电路(如图 2.1)。用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H 型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的 PWM 调速技术。现市面上有很多此种芯片,我选用了 L298N(如图 2.2)。这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。因此决定采用使用功率三极管作为功率放大器的输出控制直流电机。图 2.1 H 桥式电路图 2.2 L298N2.32.3 循迹模块循迹模块方案一:方案一:采用简易光电传感器结合外围电路探测,但实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。在使用过程极易出现问题,而且容易因为 该部件造成整个系统的不稳定。故最终未采用该方案。方案二:方案二:采用两只红外对管(如图 2.3),分别置于小车车身前轨道的两侧,根据两只光电开关接受到白线与黑线的情况来控制小车转向来调整车向,测试表明,只要合理安装好两只光电开关的位置就可以很好的实现循迹的功能。(参考文献3)方案三:方案三:采用三只红外对管,一只置于轨道中间,两只置于轨道外侧,当小车脱离轨道时,即当置于中间的一只光电开关脱离轨道时,等待外面任一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。现场实测表明,小车在寻迹过程中有一定的左右摇摆不定,虽然可以正确的循迹但其成本与稳定性都次与第二种方案。通过比较,我选取第二种方案来实现循迹。图 2.3 红外对管2.42.4 避障模块避障模块方案一:方案一:采用一只红外对管置于小车中央。其安装简易,也可以检测到障碍物的存在,但难以确定小车在水平方向上是否会与障碍物相撞,也不易让小车做出精确的转向反应。方案二方案二:采用二只红外对管分别置于小车的前端两侧,方向与小车前进方向平行,对小车与障碍物相对距离和方位能作出较为准确的判别和及时反应。但此方案过于依赖硬件、成本较高、缺乏创造性,而且置于小车左方的红外对管用到的几率很小,所以最终未采用。方案三:方案三:采用一只红外对管置于小车右侧。通过测试此种方案就能很好的实现小车避开障碍物,且充分的利用资源而不浪费。(参考文献3)通过比较我采用方案三。2.52.5 机械系统机械系统本题目要求小车的机械系统稳定、灵活、简单,而三轮运动系统具备以上特点。驱动部分:由于玩具汽车的直流电机功率较小,而小车上装有电池、电机、电子器件等,使得电机负担较重。为使小车能够顺利启动,且运动平稳,在直流电机和轮车轴之间加装了三级减速齿轮。电池的安装:将电池放置在车体的电机前后位置,降低车体重心,提高稳定性,同时可增加驱动轮的抓地力,减小轮子空转所引起的误差。简单,而三轮运动系统具备以上特点。2.62.6 电源模块电源模块方案一:方案一:采用实验室有线电源通过稳压芯片供电,其优点是可稳定的提供 5V 电压,但占用资源过大。方案二:方案二:采用 4 支 1.5V 电池单电源供电,但 6V 的电压太小不能同时给单片机与与电机供电。方案三:采用 8 支 1.5V 电池双电源分别给单片机与电机供电可解决方案二的问题且能让小车完成其功能。所以,我选择了方案三来实现供电。第三章第三章 硬件设计硬件设计3.13.1 总体设计总体设计智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,调制前面两个轮子的转速起停从而达到控制转向的目的,后轮是万象轮,起支撑的作用。将循迹光电对管分别装在车体下的左右。当车身下左边的传感器检测到黑线时,主控芯片控制左轮电机停止,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制右轮电机停止,车向右修正。避障的原理和循线一样,在车身右边装一个光电对管,当其检测到障碍物时,主控芯片给出信号报警并控制车子倒退,转向,从而避开障碍物。3.1.13.1.1 主板设计框图如图主板设计框图如图 3.13.1,所需原件清单如表,所需原件清单如表 3.13.1。图 3.1 主板设计框图表 3.1 元件清单元件数量元件数量元件数量直流电机2 只电阻若干集成电路芯片若干单片机1 块二极管若干电容若干红外对管3 只蜂鸣器1 只电位器若干12M 晶振1 只杜邦线若干玩具小车1 个排针若干3.23.2 驱动电路驱动电路(参考文献4)电机驱动一般采用 H 桥式驱动电路,L298N 内部集成了 H 桥式驱动电路,从而可以采用 L298N 电路来驱动电机。通过单片机给予 L298N 电路 PWM 信号来控制小车Stc89c52时钟电路复位电路报警电路电机驱动避障红外对管的速度,起停。其引脚图如 3.2,驱动原理图如图 3.3。图 3.2 L298N 引脚图 图 3.3 电机驱动电路3.33.3 信号检测模块信号检测模块小车循迹原理是小车在画有黑线的白纸 “路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法红外探测法。红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过 LM324 作比较器来采集高低电平,从而实现信号的检测。避障亦是此原理。电路图如图 3.4。市面上有很多红外传感器,在这里我选用 TCRT5000 型光电对管。图 3.4 循迹原理图3.43.4 主控电路主控电路本模块主要是对采集信号进行分析,同时给出 PWM 波控制电机速度,起停。以及再检测到障碍报警等作用。其电路图如图 5。图 3.5 主控电路第四章第四章 软件设计软件设计4.14.1主程序框图主程序框图:图 4.1 主程序框图4.24.2 电机驱动程序电机驱动程序void goahead()s1=1;s2=0;s3=1;s4=0;void goback()s1=0;s2=1;s3=0;s4=1;void turnleft()s3=1;s4=0;启动循迹是否检测到停止线停止是否检测到障碍NY避障YNvoid turnright()s1=1;s2=0;void stop()en1=0;en2=0;4.34.3 循迹模块循迹模块循迹框图循迹框图:图 4.2 循迹框图循迹程序:循迹程序:void xunji()if(left_red=1)&(right_red=1)en1=1;开始前进扫描 I/O 口,是否检测到黑线Y左边 右边左转右转Nen2=1;goahead();delay(150);en1=0;en2=0;delay(50);else if(left_red=0)&(right_red=1)en1=0;en2=1; P0_0=!P0_0;turnleft();delay(150);en1=1;en2=0;delay(50);else if(left_red=1)&(right_red=0)en1=1;en2=0;P0_1=!P0_1;turnright();delay(150);en1=0;en2=1;delay(50);elsestop();4.44.4 避障模块避障模块避障框图避障框图:图 4.3 避障框图避障程序:避障程序:void bizhang()en1=1;en2=1;goback();mid_red=0;baojing();goback();for(i=0;i8;i+)开始后退一点,报警后退左转前进右转Y左转是否检测到障碍前进Nen1=1;en2=1;delay(150);en1=0;en2=0;delay(50);stop();delay(10);turnleft();for(i=0;i11;i+)en1=0;en2=1;delay(130); en2=0;delay(50);stop();delay(10);goahead();for(i=0;i22;i+)en1=1;en2=1;delay(130);en1=0;en2=0; delay(50);stop();delay(10);turnright();for(i=0;i18;i+)en1=1;en2=0;delay(130);en1=0;delay(50);xun: if(left_red=1)&(right_red=0)loop: turnleft();en1=0;en2=1;delay(30);turnright();en1=1;delay(50);en1=0;delay(50);en2=0;delay(50);if(left_red=1)&(right_red=1);else goto loop;elseen1=1;en2=1;goahead();delay(80);en1=0;en2=0;delay(50);goto xun;第五章第五章 制作安装与调试制作安装与调试5.15.1 PCBPCB 的设计制作与安装的设计制作与安装采用 DXP2004 绘制原理图与 PCB 板,布线的过程中必须注意焊盘的大小与铜线的宽度。我选取的焊盘内径为 0.8mm,外径 2mm;铜线宽 1mm。从做板的情况来看基本达到制作得要求。采用螺丝将循迹板安装在车头,主板与电机驱动安装在车尾。5 52 2 小车调试小车调试通过改变循迹板滑动变阻器器的大小来调试红外对管的灵敏度,通过改变延时程序来改变速度的大小。下表为小车运行的情况:表表 5.1 小车调试情况小车调试情况结束语结束语 整个系统的设计以单片机为核心,利用了多种传感器,将软件和硬件相结合。本系统能实现如下功能:小车运行次数成功循迹次数成功避障次数111221332442554(1) 自动沿预设轨道行驶小车在行驶过程中,能够自动检测预先设好的轨道,实现直道和弧形轨道的前进。若有偏离,能够自动纠正,返回到预设轨道上来。(2)当小车探测到前进前方的障碍物时,可以自动报警调整,躲避障碍物,从无障碍区通过。小车通过障碍区后,能够自动循迹(3)自动检测停车线并自动停车。从运行情况来看循迹的效果比较好,避障的效果不是很好,我认为是由于电源不能稳定而是的小车的速度不好控制,这也是我这次设计最大的误区,没有选取稳定的电源。我相信如果实验条件和时间的允许下我肯定能解决这一问题。 通过本次设计我掌握了很多以前不熟练的东西,认识了很多以前不熟悉得东西,使我在人生上又进了一步。也认识到很多的不足。致谢致谢本本设设计计能能够够顺顺利利完完成成,还还承承 蒙蒙刘刘老老师师以以及及身身边边的的很很多多同同学学的的指指导导和和帮帮助助。在在设设计计过过程程中中, 刘刘老老师师给给予予了了悉悉心心的的指指导导,最最重重要要的的是是给给了了我我解解决决问问题题的的思思路路和和方方法法,并并且且在在设设计计环环境境和和器器材材方方面面给给予予了了大大力力的的帮帮助助和和支支持持,在在此此,我我对对刘刘老老师师表表示示最最真真挚挚的的感感谢谢!同同时时感感谢谢所所有有帮帮助助过过我我的的同同学学!感些评阅老师百忙之中抽出时间对本论文进行了评阅!感些评阅老师百忙之中抽出时间对本论文进行了评阅!参考文献参考文献1郭惠,吴迅.单片机 C 语言程序设计完全自学手册M.电子工业出版社,2008.10:1-200. 2 2 王王东东锋锋,王王会会良良,董董冠冠强强 . . 单单片片机机 C C 语语言言应应用用 1 10 00 0 例例 M M . . 电电子子工工业业出出版版社社 , ,2 20 00 09 9. .3 3:1 14 45 5- -3 30 00 0. . 3 3 韩韩毅毅,杨杨天天. . 基基于于 H HC CS S1 12 2 单单片片机机的的智智能能寻寻迹迹模模型型车车的的设设计计与与实实现现 J J . .学学术术期期刊刊,2 20 00 08 8,2 29 9(1 18 8):1 15 53 35 5- -1 19 95 55 5. . 4 4 王王晓晓明明 . . 电电动动机机的的单单片片机机控控制制 J J . . 学术期刊,学术期刊,2002,13(15):):1322-1755.5Yamato I , et al 1 New conversion system for UPS using high fre2quency linkJ 1 IEEE PESC ,1988 :210-320.6Yamato I , et al 1 High frequency link DC/ AC converter for UPSWITH A NEW VOLTAGE CLAMPERJ 1IEEE PESC ,1990 :52-105.摘摘 要要(关键词:智能车 AT89S52 单片机 金属感应器 霍尔元件 1602LCD)智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能电动车就是其中的一个体现。本次设计的简易智能电动车,采用 AT89S52 单片机作为小车的检测和控制核心;采用金属感应器 TL-Q5MC 来检测路上感应到的铁片,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且单片机选择的工作模式不同也可控制小车顺着 S 形铁片行驶;采用霍尔元件 A44E 检测小车行驶速度;采用 1602LCD 实时显示小车行驶的时间,小车停止行驶后,轮流显示小车行驶时间、行驶距离、平均速度以及各速度区行驶的时间。本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。目 录1 设计任务31.1 要求32 方案比较与选择4 2.1 路面检测模块4 2.2 LCD 显示模块5 2.3 测速模块5 2.4 控速模块6 2.5 模式选择模块73 程序框图74 系统的具体设计与实现9 4.1 路面检测模块9 4.2 LCD 显示模块94.3 测速模块94.4 控速模块94.5 复位电路模块94.6 模式选择模块95 最小系统图106 最终 PCB 板图127 系统程序138 致谢469 参考文献4710 附录481. 设计任务:设计并制作了一个智能电动车,其行驶路线满足所需的要求。1.1 要求:1.1.1 基本要求:(1)分区控制:如(图 1)所示:(图 1) 车辆从起跑线出发(出发前,车体不得超出起跑线) 。在第一个路程 BC 区(36 米)以低速行驶,通过时间不低于 10s;第二个路程 CD 区(2 米)以高速行驶,通过时间不得多于 4 秒;第三个路程 DE 区(36 米)以低速行驶,通过时间不低于 10s。 (2)小车能自动记录、显示行驶时间、行驶距离以及行驶速度,还能记录每段所走的时间,从而判断是否符合课程设计要求。 (记录显示装置要求安装在车上) 。1.1.2 发挥部分:S 型控制:如(图 2)所示:(图 2)车辆沿着 S 形铁片行驶,自动转弯,自动寻找正确方向和铁片。当离开 S 型铁片跑道或者感应不到铁片一段时间的时候,小车自动停止,并记录行驶时间,路程,平均速度并通过 LCD 显示出来。2. 方案比较与选择:根据设计任务要求,并且根据我们自己的需要而附加的功能,该电路的总体框图可分为几个基本的模块,框图如(图 3)所示:(图 3)2.1 路面检测模块:采用铁片感应器 TL-Q5MC 来检测路面上的铁片从而给单片机中断脉冲。原理图接线如(图 4)所示:(图 4)2.2 LCD 显示模块:采用 1602LCD,由单片机的总线模式连接。为节约电源电量并且不影响 LCD 的功能,LCD 的背光用单片机进行控制,使 LCD 的背光在小车行驶的过程中不亮,因为我们不必看其显示;在其它我们需要看显示的内容的时候 LCD 背光亮。2.3 测速模块:2.3.1 方案 1:采用采用霍尔开关元器件 A44E 检测轮子上的小磁铁从而给单片机中断脉冲,达到测量速度的作用。霍尔元件具有体积小,频率响应宽度大,动态特性好,对外围电路要求简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便。霍尔开关只对一定强度的磁场起作用,抗干扰能力强,因此可以在车轮上安装小磁铁,而将霍尔器件安装在固定轴上,通过对脉冲的计数进行车速测量。2.3.2 方案 2:采用红外传感器进行测速。但无论是反射式红外传感器还是对射式红外传感器,他们对都对外围环境要求较高,易受外部环境的影响,稳定性不高,且价格较为昂贵。通过对方案 1、方案 2 的比较其优缺点,综合多方面因素决定选用方案 1,其原理图接线如(图 5)所示:(图 5)2.4 控速模块:2.4.1 方案 1:使用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,成本低,加速能力强,但功率损耗大,特别是低速大转距运行时,通过电阻 R 的电流大,发热厉害,损耗大,对于小车的长时间运行不利。2.4.2 方案 2:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。2.4.3 方案 3:采用由双极性管组成的 H 桥电路。用单片机控制晶体管使之工作在占空比可调的开关状态,精确调整电机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H 桥电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也很高,是一种广泛采用的调速技术。综合 3 种方案的优缺点,决定选择方案 3,其电路原理图如(图 6)所示:(图 6)2.5 模式选择模块:模式选择模块通过一个 74LS00 与非门和两个不带锁按钮来控制单片机单片机的两个中断口,从而按动按钮来选择小车走动的路型、来选择小车的速度是快速、中速、慢速;走完路程小车停止后还可以通过按钮选择想要在 LCD 上想看的信息,比如总时间、走过各段路程的时间、平均速度、总路程等。小车走动的模式选择有:(1) 直线型:满足设计任务的基本要求,能稳定的走完全程。之后按顺序循环不断的显示走完全程所用的时间、走完高速区所用的时间和走完低速区所用的时间这三个时间;或者可以通过两个按钮以及 LCD 显示的菜单选择所要看的内容如平均速度、全程距离以及那三个时间。(2) S 型:满足设计任务的发挥部分的要求,小车能自动的感应到在前面或在后面铁片,即第一次转弯后若感应到的是错误的方向,则小车会后退自动调整方向,沿着 S 型的铁片走。当走完 S 型铁片后的一定时间里,小车自动停止。之后自动进入菜单由我们自己选择要看的内容时间、平均速度和所走的距离。(3)自动型:小车先以一定的速度走完全程,之后再以一定的速度倒退回起点,再调整速度在一定的时间内走完全程。走完后 LCD 显示的内容与直线型显示的内容一样。3. 程序框图:单片机主程序框图、速度感应程序框图和铁片感应程序框图分别如(图 7)所示。(图 7)4系统的具体设计与实现:4.1 路面检测模块: 应用一个金属感应器,安装在车盘下,离地略小于或约四毫米。当金属传感器检测到铁片时将对单片机发送中断信号,单片机运行中断,改变输给电机驱动信号的电压占空比来控制小车的速度。4.2 LCD 显示模块:采用 1602LCD,由单片机的总线模式连接。为节约电源,LCD 的背光用单片机进行控制。4.3 测速模块:通过霍尔元件感应磁铁来产生脉冲(当霍尔元件在离磁场较近时输出会是高电平,其它时候是低电平),一个车轮均匀放四个小磁铁,计算一秒所得的脉冲数,从而计算出一秒小车轮子转动圈数,再测量出小车车轮周长即可计算出小车当前速度,累加可得到当前路程。4.4 控速模块:考虑到元器件的缺少以及我们所用的电路的驱动电机的电路原理图和和小车自带的电路的电机驱动原理图一样,所以暂时使用小车自带的电机驱动电路图。4.5 复位电路模块:单片机的复位电路通过手动来实现,复位电路图如(图 8)所示。(图 8)22uVCC2001KRST4.6 模式选择模块:两个中断口使用和感应铁片、感应速度所使用的中断口一样,通过一个与非门和按钮控制。原理图如(图 9)所示:(图 9)5最小系统图: 该系统主要用到的是单片机,所以主要的部分是最小系统图,该最小系统图如(图 10)所示: (图 12)6. 最终 PCB 板图:该最小系统的最终 PCB 板图(包括 LCD 接口以及其他的外部扩展电路部分,考虑到最小系统的简洁以及容易看懂,外部扩展电路不在最小系统图上显示。 )分别如(图 11) 、 (图 12)所示:(图 11)(图 12)7系统程序:按照预定的功能,系统实现预定的功能的程序如下所示:#include #include /* 宏定义区*/*- LCD模块 -*/#define LCD_RW P2_6 /读写控制端#define LCD_RS P2_7/数据命令选择端#define LCD_E P2_5/执行使能端#define LCD_DataP1 /P1口#define Write0 x00/低电平写入#define Read0 x01/高电平读出#define Data0 x01/高电平选择数据#define Cmd0 x00/低电平选择命令#define Enable0 x00/跃变到低电平时执行命令#define Disable0 x01 #define True0 x01#define False0 x00#define LCD_Init0 x38/初始化模式#define LCD_DispCtr 0 x0C/开显示及光标设置#define LCD_CloseCtr0 x08/关显示#define LCD_CLS 0 x01/清屏幕#define LCD_EnterSet 0 x06/显示光标 #define BusyP1_7/忙信号/*- 测速/测距/测时模块 -*/#define CircleLength0.132/小车转一轮的长度为.132m/*- 控速模块 -*/#define P03P0_3 /后电机#define P04P0_4 /后电机#define P01 P0_1 /前电机#define P02P0_2 /前电机#define P31P0_5 /控制液晶背光#define P33P3_3/*- 菜单选择模块 -*/#define Line0 x00/0代表直线模式#define Curve0 x01/1代表S型模式#define Normal0 x00/0 代表正常速度#define Low0 x01/1 代表低速#define High0 x02/2 代表高速/* 全局函数声明区 */*- LCD模块 -*/void LCDInit(void);/LCD初始化void SetWriteCmd(void);/设置写命令模式void SetReadCmd(void);/设置读命令模式void SetWriteData(void);/设置写数据模式void WriteCmd(char cmd);/写命令void WriteData(char ddata);/写数据void ExecuteCmd(void);/执行命令void SetXY(char x,char y);/定位显示地址void DisplaySingleChar(char x,char y,char cchar);/显示单个字符void DisplayString(char x,char y,char *str); /显示一段字符串void Delay(unsigned int time);/延时主程序void DelayUs(unsigned int time);/延时子程序bit IsBusy(void);/判断忙标志函数void DisplayTime(void);/显示时间void DisplayAVGSpeed(void);/显示平均速度void DisplayDistance(void);/显示路程/*- 测速/测距/测时模块 -*/ void INTInit(void); /所有中断初始化void SpeedINT(void); /测速中断void ComputeTime(void);void ComputeSpeedANDDistance(void);/计算速度和距离/*- 控速模块 -*/void CtrSpeedINT(void); /控速中断void Time0INT(void); void Time1INT(void); /控速单位时间中断void Clock0_Init(void);/时钟中断初始化void Clock1_Init(void); /时钟中断初始化void CtrSpeed(void);/* 全局变量区*/float SpeedCount = 0; /测速计数脉冲float Speed = 0.0;float Distance = 0.0; char Time1INTCount=0;/T1中断时间计时float PassTime=0.00;/小车行走的时间short IsT0INT=1;bit IsT1INT;/判断T1是否已经响应中断short IsT0INT2=1;char Thx5=0 xf4,0 xf4,0 xc5,0 xf4,0 xff; /3ms,3ms,15ms,3mschar Tlx5=0 x48,0 x48,0 x68,0 x48,0 xff;char Thx0=0 xd8;char Tlx0=0 xf0;char Thx1=0 xb1; /20mschar Tlx1=0 xe0;short Round=0;short Back=0;short Back0=0;bit Backid;bit Stop=0;char Area0=0;char Area1=0;/区域变量char LowSpeedArea1StartTime;char LowSpeedArea1EndTime;char HighSpeedAreaEndTime;char LowSpeedArea2EndTime;char LowSpeedArea1PassTime=0; /第一个低速区通过时间char HighSpeedAreaPassTime=0;/高速区通过时间char LowSpeedArea2PassTime=0;/第二个低速区通过时间char ReadyToGo=4;/倒计时char flag;bit Roundid=0;char Nocurve=0; char ChangeFlag;char Mode; bit Running;bit SelectedAll;/模式和速度是否选择完毕标志bit IsSelectingMode;/模式选择标志bit IsSelectingSpeed;/速度选择标志bit ModeSelected;/已经被选择的模式标志char SelectedMode=10;/模式选择是否完毕标志bit Next;/Next键标志bit SpeedSelected;/已经被选中的速度方案标志char SelectedSpeed;/速度选择是否完毕标志bit ChoosingDisplay;/人工选择菜单开始标志bit SelectedShow;/显示选择标志bit SelectedReturn;/返回选择标志bit Selected;/确定/返回键选择标志bit ReturnSelection;/返回键启用标志bit AVGSpeedShow;/平均速度显示标志bit TotalDistanceShow;/总路程显示标志bit ReturnMain;/返回主菜单标志bit AutoDisplay;/自动显示标志bit GoToChoosingDisplay;/人工选择标志bit AutoMode=0;char PassLineID=0;char PassLine=0;float PrepareDistance;float FirstDistance;float SecondDistance;float ThirdDistance;int FirstHigh;int SecondHigh;int ThirdHigh;float Rate=1.25; /5ms时的速度float Count=4;/时间的倍数/* 全局函数实现区*/*-主函数 -*/void main() P01=0;P02=0;P03=0;P04=0;P31=1;/单片机复位,背光开Delay(40);/延时等待LCD启动LCDInit();/初始化LCDDisplayString(0 x0,0, Starting. );DisplayString(0 x0,1,Designed By 202);Delay(300);WriteCmd(LCD_CLS);EA=1; /开总中断EX0=1;/开INT0中断IT0=1;/INTO边沿触发EX1=1; /开INT1中断IT1=1; /INT1边沿触发SelectedAll=False; /开始模式和速度选择/*- 模式选择 -*/DisplayString(0 x0,0,Choose The Mode );DisplayString(0 x0,1,you want. );Delay(50);WriteCmd(LCD_CLS);IsSelectingMode=True;while(1) WriteCmd(LCD_CLS);DisplayString(0 x0,0, Line Mode );DisplayString(0 x0,1,Next Yes);Delay(300);/延时消除抖动while (1) /不断检测中断,直到按确定键或是NEXT键if (Next=True)/如果按Next键则直接跳出break;if (ModeSelected=True)/如果按确定键则设置模式为Line并跳出SelectedMode=Line;break;/如果什么键都没有按下,那么一直显示等待if (ModeSelected=True)/按下了确定键,退出模式选择IsSelectingMode=False;break;if (Next=True)/按下了Next键,显示下一个菜单项Next=False;WriteCmd(LCD_CLS);DisplayString(0 x0,0, Curve Mode );DisplayString(0 x0,1,Next Yes);Delay(300);/延时消除抖动while(1)/不断检测中断,直到按确定键或是Next键 if (Next=True)/如果再一次按下Next键,则跳出break;if (ModeSelected=True)/如果按下确定键,则设置模式为Curve,并跳出SelectedMode=Curve;break; if (ModeSelected=True) /按下了确定键,退出模式选择IsSelectingMode=False;break;if (Next=True)/再一次按下了Next键,则循环模式选择Next=False;WriteCmd(LCD_CLS);DisplayString(0 x0,0, AutoMode );DisplayString(0 x0,1,Next Yes);Delay(300); /延时消除抖动while(1)if (Next=True)break;if (ModeSelected=True)AutoMode=1;break;if (ModeSelected=True)IsSelectingMode=False;break;if (Next=True)Next=False;continue;Delay(50);WriteCmd(LCD_CLS); /*- 速度选择 -*/if (SelectedMode=Line & AutoMode=0)DisplayString(0 x0,0, Now Choose a );DisplayString(0 x0,1, kind of Speed );Delay(50);WriteCmd(LCD_CLS);IsSelectingSpeed=True;while(1)WriteCmd(LCD_CLS);DisplayString(0 x0,0, Normal Speed );DisplayString(0 x0,1,Next Yes);Delay(300); /延时消除抖动while(1)if (Next=True) /如果按Next键则直接跳出break;if (SpeedSelected=True) /如果按确定键则设置速度为Normal并跳出Thx0=0 xec;Tlx0=0 x78; /5msThx1=0 xf0;Tlx1=0 x60; /4msThx2=0 x8a;Tlx2=0 xd0; /30msThx3=0 xf4;Tlx3=0 x48; /3msSelectedSpeed=Normal;break; /如果什么键都没有按下,那么一直显示等待if (SpeedSelected=True) /按下了确定键,退出速度选择IsSelectingSpeed=False;break;if (Next=True)Next=False;WriteCmd(LCD_CLS); DisplayString(0 x0,0, Low Speed );DisplayString(0 x0,1,Next Yes);Delay(300); /延时消除抖动while(1)if (Next=True)/如果再一次按下Next键,则跳出break;if (SpeedSelected=True)/如果按下确定键,则设置速度为Low,并跳出SelectedSpeed=Low;/这里没有速度设置,因为默认速度就是Lowbreak;if (SpeedSelected=True)/按下了确定键,退出速度选择IsSelectingSpeed=False;break;if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString(0 x0,0, High Speed );DisplayString(0 x0,1,Next Yes);Delay(300); /延时消除抖动while(1)if (Next=True) /如果再一次按下Next键,则跳出break;if (SpeedSelected=True) /如果按下确定键,则设置速度为High,并跳出Thx0=0 xe0;Tlx0=0 xc0; /8ms Thx1=0 xe0;Tlx1=0 xc0; /8ms Thx2=0 x63;Tlx2=0 xc0; /40ms Thx3=0 xec;Tlx3=0 x78; /5msSelectedSpeed=High;break;if (SpeedSelected=True) /按下了确定键,退出速度选择IsSelectingSpeed=False;break;if (Next=True) /再一次按下了Next键,则循环速度选择Next=False;continue;SelectedAll=True; /标志模式选择和速度选择完毕Running=True;Delay(50);WriteCmd(LCD_CLS);/*- 显示所选择的模式和速度方案 -*/if (SelectedMode=Line)DisplayString(0 x0,0,Choosen Mode is );DisplayString(0 x0,1,
展开阅读全文