找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 40224|回复: 1
打印 上一主题 下一主题
收起左侧

智能小车控制系统设计论文(寻迹、自动往返与避障等功能)

[复制链接]
跳转到指定楼层
楼主
ID:328159 发表于 2018-5-12 12:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
别人写的 看看实例 做对比。
智能小车控制系统设计
摘要
智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车就是其中的一个体现。智能小车,也称轮式机器人,是一种以汽车电子为背景,涵盖智能控制、模式识别、传感技术、电子电气、计算机、机械等多学科的科技创意性设计。一般主要由路径识别、速度采集 、角度控制及车速控制等模块组成。
本次设计的简易电动智能小车,采用STC89C52单片机作为小车的检测和控制核心,充分利用了自动检测技术、单片机最小系统、液晶显示模块电路,以及声光信号的控制、电机的驱动电路。通过Keil C和PROTEUS的仿真,实践操作与调试,最终实现小车的寻迹、自动往返与避障等功能。综合运用单片机技术、自动控制理论、检测技术等。使小车能在无人操作情况下,借助传感器识别路面环境,由单片机控制行进,实现初步的无人控制。
单片机具有体积小、重量轻、耗电少、功能强、控制灵活方便且价格低廉等优点。单片机的应用正从根本上改变着传统的控制系统设计思想和设计方法。
本设计以单片机为核心,附以外围电路,采用反射型光电探测器进行寻迹操作,利用光电传感器检测道路上的障碍,运用单片机的运算和处理能力来实现小车的各种功能,最终实现简单的智能化。

目录
摘要……              I
Abstract              II

第1章 绪论
1.1 课题背景
1.1.1 研究目的与意义
1.2 国内外文献综述
1.3 论文研究内容
第2章 系统方案论证与分析
2.1 小车构架方案论证
2.2 电机选择方案论证
2.3 电机驱动方案论证
2.4 供电电源方案论证
2.5 寻迹检测方案论证
2.6 避障方案论证
2.7 无线遥控方案论证
2.8 控制方案论证
2.9 本章小结
第3章 硬件设计
3.1 硬件原理图
3.2 控制电路设计
3.2.1 STC89C52单片机硬件结构
3.2.2 最小系统的设计
3.2.3 下载端口设计
3.3 电源模块设计
3.4 电机驱动模块设计
3.5 寻迹模块设计
3.6 避障模块设计
3.7 遥控模块设计
3.8 本章小结
第4章 软件设计
4.1 软件设计环境简介
4.1.1 Keil开发环境介绍
4.1.2 STC_ISP程序下载说明
4.2 寻迹程序设计
4.3 避障程序设计
4.4 遥控程序设计
4.5 主程序设计
4.6 本章小结
结论
致谢
参考文献
附录A
附录B
附录C


第1章   绪论
1.1 课题背景
2010年10月1日18时59分57秒345毫秒,嫦娥2号点火,19时整成功发射。在飞行后的29分53秒时,星箭分离,卫星进入轨道。19时56分太阳能帆板成功展开……这次探月卫星的成功发射,标志着中国自动化领域进入了一个新的阶段。
随着自动化的发展,自动化开始向复杂的系统控制和高级的智能控制发展,并广泛地应用到国防、科学研究和经济等各个领域,实现更大规模的自动化,例如大型企业的综合自动化系统、全国铁路自动调度系统、国家电力网自动调度系统、空中交通管制系统、城市交通控制系统、自动化指挥系统、国民经济管理系统等。自动化的应用正从工程领域向非工程领域扩展,如医疗自动化、人口控制、经济管理自动化等。自动化将在更大程度上模仿人的智能,机器人已在工业生产、海洋开发和宇宙探测等领域得到应用,专家系统在医疗诊断、地质勘探等方面取得显著效果。工厂自动化、办公自动化、家庭自动化和农业自动化将成为新技术革命的重要内容,并得到迅速发展。
智能小车,也称轮式机器人,是一种以汽车电子为背景,涵盖智能控制、模式识别、传感技术、电子电气、计算机、机械等多学科的科技创意性设计,更是自动化的一种综合体现。一般主要由路径识别、速度采集、角度控制及车速控制等模块组成。近些年来全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究,可见其研究意义很大,也正因此掀起了智能车研究的一股热潮[1]。
1.1.1  研究目的与意义
小车,也就是轮式机器人,最适合在那些人类无法工作的环境中工作,该技术可以应用于无人驾驶机动车,无人生产线,仓库,服务机器人等领域。在危险环境下,机器人非常适合使用。在这些险恶的环境下工作,人类必需采取严密的保护措施。而机器人可以进入或穿过这些危险区域进行维护和探测工作,且不需要得到像对人一样的保护。例如美国的“勇气”号和“机遇”号,在火星探测过程中分别在其着陆区域附近找到火星上过去曾有过水的证据,为人类对火星的探测做出了巨大的贡献[1]。
机器人的应用正逐步渗入到工业和社会的各个层面,如采用带有专用新型传感器的移动式机器人,连续监视采矿状态,以便及早发现事故突发的先兆,采取相应的预防措施;智能轮椅运用口令识别与语音合成、机器人自定位、动态随机避障、多传感器信息融合、实时自适应导航控制等功能,运用了现代高新技术来改善残障人们的生活质量和生活自由度。在智能车辆领域,智能小车自动行驶功能的研究将有助于智能车辆的研究。智能车辆驾驶任务的自动完成将给人类社会的进步带来巨大的影响,例如能切实提高道路网络的利用率、降低车辆的燃油消耗量,尤其是在改进道路交通安全等方面提供了新的解决途径。
“工欲善其事,必先利其器”。人类在认识自然、改造自然、推动社会进步的过程中,不断地创造出各种各样为人类服务的工具,其中许多具有划时代的意义。作为20世纪自动化领域的重大成就,机器人已经和人类社会的生产、生活密不可分。因此为了使智能小车工作在最佳状态,进一步研究及完善其速度和方向的控制是非常有必要的。
本文所研究的内容涉及寻迹、避障、人工操控等多种功能,初步实现智能化,可做为各类科研的基础模型,具有较大的研究空间,适合于多种领域的智能化研究与开发。
1.2   国内外文献综述
智能车辆的研究始于20世纪50年代初,美国Barrett Electronics公司开发出的世界上第一台自动引导车辆系统(Automated Guided Vehicle System,AGVS)。1974年,瑞典的VolvoKalmar轿车装配工厂与Schiinder--Digitron公司合作,研制出一种可装载轿车车体的AGVS,并由多台该种AGVS组成了汽车装配线,从而取消了传统应用的拖车及叉车等运输工具。由于Kalmar工厂采用AGVS获得了明显的经济效益,许多西欧国家纷纷效仿Volvo公司,并逐步使AGVS在装配作业中成为一种流行的运输手段。在世界科学界和工业设计界中,众多的研究机构正在研发智能车辆,使智能车技术迅速展起来。
德意志联邦大学已经研发出多辆智能原型车辆。在1985年,第一辆VaMoRs智能原型车辆就已经在户外高速公路上以l00km/h的速度进行了测试。使用机器视觉来保证横向和纵向的车辆控制。1988年,在都灵的PROMETHEUS项目第一次委员会会议上,智能车辆维塔(VrrA)进行了展示,该车可以自动停车、行进,并可以向后车传送相关驾驶信息。这两种车辆都配备UBM视觉系统。这是一个双目视觉系统,具有极高的稳定性,同时还包括一些其他种类的传感器:三个加速度计、一个车轮位置编码器(可作为里程表或速度计),在VaMoRs车中,ZIPS接收机可以实现车辆位置的初步估算。
美国俄亥俄州立大学智能交通研究所所研发的三辆智能原型车辆,配备不同的传感器来实现数据融合和错误检测技术:基于视觉的系统;雷达系统(检测与车道的横向位置);激光扫描测距器(障碍物检测);其他传感器,如侧向雷达、转向陀螺仪。利用基于视觉的方法实现道路检测。利用一台安装在后视镜处的CCD摄像机,位置要尽可能高,车道检测系统可以处理这样的单幅灰度图像。算法假设道路是水平地,并且有连续或点化的车道标志线。前几帧检测的车道标志线数据也用来决定下一步兴趣热点区域,以简化图像处理。算法从图像中提取出重要的亮域,并以向量行驶存储,如道路消失点或道宽这样的数据参数,都可以作为计算车道标志线的参考,最后为了处理点划车道线,可以通过一阶多项式曲线来拟合,在进行向量计算。如果检测到左右车道标志线,就可以利用左右标志线来估计车道中心线;否则也可以利用估计的车道宽度及相关可视标志来估算中心线[2]。
在我国,吉林大学智能车辆课题组长期从事智能车辆自主导航机理及关键技术研究。20世纪90年代以来,课题组开展的组态式柔性制造单元及图像识别自动引导车的研究对我国独立自主开发一种新型自动引导车辆系统,从而为我国生产组织模式向柔性或半柔性生产组织转化提供了有意义的技术支撑和关键设备。另外,我国清华大学、北京理工大学等单位也正在研发智能车辆。汽车自主驾驶技术是集模式识别、智能控制、计算机科学和汽车操纵动力等多门学科于一体的综合性技术,汽车自主驾驶功能水平的高低常被用来作为衡量一个国家控制技术水平的重要标准之一。智能车辆的相关技术,也将为促进轮式机器人的研究。
1.3   论文研究内容
本课题主要开发一个基于路径处理的的智能小车控制系统,通过该系统,我们可以给小车给定一条轨迹,使其按预定路径行始。小车可以独自运行,也可人工及时操控调整,使其按正确的轨迹运行。本文主要有以下内容:
1.智能小车相关领域的研究现状,本文首要介绍了与智能小车相关的机器人、智能车辆的发展历史、国内外研究现状。
2.智能小车硬件系统的设计。详细介绍智能小车硬件电路的设计与实现。智能小车选择STC89C52单片机最小系统作为核心控制单元,完成电源模块、传感器模块、直流电机驱动模块、路径识别模块、等功能模块的设计。
3.障基本原理。采用光电红外对管来识别路径,红外发射管与红外一体接收头来识别障碍。
4.控制原理。采用红外识别,遥控器解码技术,来控制小车的行进方向,从而达到人工操控的目地。
5.行实车试验,对小车进行调试。
第2章   系统方案论证与分析
本章主要介绍方案的选择与分析,主要包括单片机模块、电源模块、电机驱动模块、黑线检测模块以及液晶显示模块的方案选择与分析。
2.1   小车构架方案论证
小车行走机构的方案分析与选择:
方案一:履带式行走机构:运行平稳、可靠,走直线效果很好;但结构相对复杂、移动速度较慢,转弯过程的控制性能较差。
方案二:腿式行走机构:可以走出多种复杂的路线,但结构复杂、运动中的平衡性和稳定性差、移动速度较慢。
方案三:两轮式行走机构:结构简单、运动平稳、移动速度快、转弯性能好,且易于控制,适用于小功率的行走驱动。
方案四:四轮式行走机构:结构简单、运动平稳、移动速度快、易于控制。
通过以上四种方案的优缺点,方案三与方案四可具有较大的可行性,但四轮式行走机构需要四个电机,控制算法相对复杂,且需要很大的驱动电流,对硬件要求较高,而两轮式能满足此设计要求,且结构简单,算法方便,要求驱动电流小,硬件结构简单。本设计以对称结构,简单方便为主,固综上考虑,采用方案三的设计思想。
2.2   电机选择方案论证
电动机选择方案与分析:
方案一:采用步进电机:步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角,这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。所以,若采用步进电机作为该系统的驱动电机,由于其转动的角度可以精确定位,可以实现小车前进距离和位置的精确定位。
方案二:采用直流电机:采用直流减速电机,直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便,过载能力强,能承受频繁的冲击负载,可实现无级快速启动、制动和反转;能满足各种不同的特殊运行要求。很方便的就可以实现通过单片机对直流减速电机前进、后退、停止等操作。
通过以上两种方案的比较,两种方案均具有较大的可行性,但步进电机并不能象普通的直流电机、交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。步进电机的输出力矩较低,随转速的升高而下降,且在较高的转速时会急剧下降,其转速较低时不适于小车等对速度有一定要求的系统。在价格方面,直流电机低于步进电机,易于购买,且对硬件要简单,完全可以实现此设计的要求,固综上考虑,此次设计采用直流电机作为动力源。
2.3   电机驱动方案论证
小车运行过程中要求电动机的转速在一定范围内调节,调速范围根据负载的要求而定。由公式(2-1)         
                               (2-1)
N:电枢转速, :电机端电压, :电机端电流,:电枢电阻, :常数, :各极总磁通
可以看出,调速可以有三种方法:
1.改变电机端电压,即改变电枢电源电压;
2.改变磁通,即改变激磁回路的调节电阻以改变激磁电流
3.在电枢回路中串联调节电阻。此时的转速公式(2-2)为:
                                 (2-2)
在实际电路设计中,改变电机的磁通或调节枢回路中串联调节电阻并不方便、实用。因此,主要选择通过改变电机两端电压的方法来实现电机的调速控制。
下面是通过调节电机两端电压达到调速目的的三种方案:
方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大,分压不仅会降低效率且实现困难。
方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏,寿命较短、可靠性不高。
方案三:采用由达林顿管组成的H型PWM电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高。H型电路保证了可以简单的实现转速和方向的控制。电子开关的速度很快,稳定性也极强,是一种广泛采用的PWM调速技术。L298为SGS-THOMSON Microelectronics所出产的双全桥步进电机专用驱动芯片(Dual Full-Bridge Driver) ,可以方便的驱动两个直流电机,或一个两相步进电机。内含二H-Bridge的高电压、大电流双全桥式驱动器,接收标准 TTL逻辑准位信号,可驱动46V、2A以下的步进电机,输出电压最高可达50V。可以直接通过电源来调节输出电压,可以直接用单片机的IO口提供信号,而且电路简单,使用比较方便。
PWM脉宽调制实际上就是改变电机端电压的平均值从而进行调速的一种方法。这种方法便于与单片机等数字系统接口,实现方便,而前两种方法必须要配合一定的外围模拟电路才能达到单片机控制目的,基于以上分析, 在电动机驱动模块上拟选定采用PWM脉宽调制方法。选用L298双全桥驱动芯片。
2.4   供电电源方案论证
供电电源方案的选择与分析:
方案一:采用两个电源供电,将电动机驱动电源与单片机以及其周围电路电源完全隔离,利用光电耦合器传输信号。这样可以使电动机驱动所造成的干扰彻底消除,提高了系统的稳定性。
方案二:采用单一电源供电。所用器件采用12V蓄电池为直流电机供电。因电动机启动瞬间电流很大,而且PWM驱动的电动机电流波动较大,会造成电压不稳 、有毛刺等干扰,可采用将12V电压降压、稳压后给单片机系统和其它芯片供电。这样供电比较简单[3]。
基于以上的分析,两种方案均具有可行性,但方案一使用两个电源,增加了小车的重量与体积,增大了小车的惯性,虽然具有较大的优势,但综合考虑,符合设计要求的情况下,选择方案二做为小车的供电电源。
2.5   寻迹检测方案论证
寻迹检测方案的选择与分析:
方案一:采用对射式红外光电传感器。用可见发光二极管与光敏二极管组成的发射-接收分立对管光电传感器。这种方案的缺点在于,其他环境光源会对光敏二极管的工作产生很大干扰,一旦外界光亮条件改变,很可能造成误判和漏判。虽然采取超高亮发光管可以降低一定的干扰,但这又将增加额外的功率损耗。在跑道上设置检测装置很不方便,故无法应用对射式光电开关探测跑道标志,只能采用反射式光电开关。
方案二:采用反射式红外光电传感器,利用红外线发射管发射红外线,红外线二极管进行接收。采用红外线发射,外面可见光对接收信号的影响较小,寻迹电路中采用比较器LM393,信号进入后就会被放大,可以直接送给单片机进行操作,同时可以加一可调电阻,可以调节传感器的灵敏度,易于调试。本方案也易于实现,比较可靠[4]。
综上所述,方案二具有可行性,选择方案二作为寻迹方案。
2.6   避障方案论证
避障方案的选择与分析:
方案一:脉冲调制的反射式红外线接受器。由于该有交流分量的调制信号,则可大幅度减少外界干扰;另外红外红线接受的最大工作电流取决于平均电流。如果采用占空比小的调制信号,再平均电流不变的情况下,顺势电流很大(50~100mA),则大大提高了信噪比。并且其反应灵敏,外围电路也很简单。它的优点是消除了外界光线的干扰提高了灵敏度。
方案二:采用超声波传感器,如果传感器接收到反射的超声波,则通知单片机前方有障碍物,否则通知单片机可以向前行驶。市场上很多红外光电探头也是基于这个原理。这样不但能准确完成测量,而且能避免电路的复杂性[5]。
通过以上两种方案的比较,两种方案均可行,但第二种方案超声波传感器价格比格昂贵,所以与方案一相比,在要求不是很严格的情况下,方案一具有更大的选择性。
2.7   无线遥控方案论证
无线在各领域均有广泛的运用,而要实现无线控制,则要实现信号的无线接收与发送,基于无线的基本原理,提出以下几种方案进行选择与分析:
方案一:采用PT2263与PT2272芯片作为系统的编码与解码,其中PT2262为无线发送芯片,PT2272解码输出,来实现无线信号的收发,从而达到无线控制的目的。
方案二:采用NRF24L01成品收发模块。发射距离远,信号稳定,体积小,市场价格较低。
方案三:使用红外线进行遥控,采用常用的红外遥控器进行红外信号的发射,用一体化红外接收头1838芯进行信号的接收,使用软件进行红外信号的解码,以此来识别按键,控制小车的行动[6]。
以上三种方案均为常用的无线收发方式,但方案一不仅加大了硬件的需求,而且手工制作接收与发射模块,对手工要求较高,且发射距离较短。方案二采用成品的收发模块,体积小,性能稳定,可使用范围最高可达200m左右,市场价格较低。方案三采用红外一体接收头1838,解调信号输出端DOUT可直接被单片机识别,同时使用软件进行解码,大大简化了电路,发射距离 30m左右,能够满足设计需求。经过以上三种方案的比较,决定采用方案三做为小车的无线遥控方案。
2.8   控制方案论证
智能小车系统的核心模块即为主控单片机。选择一片数据处理能力强大、片内资源丰富的单片机,对设计各功能的更好实现具有极大意义。一个单片机应用系统的硬件电路设计包含有两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM﹑RAM﹑I/O口﹑定时/记数器﹑中断系统等。若不能满足应用系统的要求时,必须在片外进行扩展。二是系统配置,既按照系统功能要求配置外围设备,如液晶显示器﹑A/D﹑D/A转换器等,且需要设计合适的接口电路。控制系统是机械运行的核心,同样,在本次智能车的设计,为了实现小车的初步智能化,一个良好与否的控制芯片关系到最终的成败,而控制类的芯片多种多样,下面就以下两种进行选择与分析:
方案一:采用AT89C51芯片,具有体积小、可靠性高、功耗低、结构简单、运算速度快等优点,同时被列入教科书已进行系统的学习与分析,是最早比较了解的芯片。其片内数据存储器RAM有128B,片内程序存储器Flash ROM 有4KB;可寻址片外64KB的RAM;两个16位的定时器/计数器;五个中断源、两个优先级的中断控制系统;
方案二:采用STC89C52芯片,继承了AT89C51的功能,同时在其基础上进行了优良的改进,功能较强大。其片内8k ROM,256x8bit内部RAM,3个16位可编程定时/计数器,6个中断源,4层优先级中断结构[7]。
以上两种芯片均可行,但AT89C51与STC89C52相比,后者具有较大优势,同时基于对STC89C52较为熟悉,所以采用方案二,使用STC89C52作为智能小车的总体控制芯片。
2.9   本章小结
本章主要介绍智能小汽车的设计思想与主要功能传感器的选择,分别介绍了小车本体的选择方案,电动机的选择策略,电动机驱动芯片的选择方案,寻迹、避障传感器以及无线遥控方案的选择,并且也讲述了如何供电电源的分配情况。通过上面的详细讲述,我们就可以科学合理的制作自己的小车,并把我们需要的功能加到上面,此款智能小汽车无论从工艺制作到传感器的选择,再到电源、电机的分配都较为合理,而且结构简单方便,适合电子爱好者进一步开发与研究。
本次设计仅为智能自动化的初步研究,以展现基本自动化原理为主,具有很高的科学研究价值,在医疗器械、考古、军事、智能玩具以及机器人等方面都留有很大的研究与发展空间,相信会给更多的人提供一个研究智能电子产品的平台。智能单片机由软件和硬件结合控制,实现电路设定功能,其具有速度快、功耗低、体积小、外围器件少等优点,除此之外,智能电子产品还具有稳定性好、可靠性高,电路简单、功能实现容易,技术可升级,产品档次高等优势。随着社会不断地发展,在未来的日子里,智能化电子产品会越来越受到人们的关注与重视,此款小车就是一个简单可以从事一些设定功能的智能化电子产品。
第3章   硬件设计3.1   硬件原理图
              电动智能小车采用STC89C52单片机进行智能控制。开始先手动启动小车开关,进行模式选择,并设有复位按钮。寻迹模式下,小车采用反射型光电探测器检测黑带,将信号传给单片机进行识别,同时通过单片机控制电机使小车前进,以及左、右拐弯的操作。避障模式下,避障模块开始工作,开始进行避障处理,小车开始进行自由避障,当进入停车区时,由红外进行识别,小车自动停车。系统原理图如图3—1所示。
图3-1  系统原理图
3.2   控制电路设计
控制电路是整个智能车的核心,相当于人类的大脑一样,控制着整量车的行车方式,通过编写程序来实现各种功能,但单片机的工作需要一定的外围电路以及下载电路才能保证单片机的正常工作以及程序的下载,下面就将介绍STC89C52单片机的基本功能以及其外围电路、下载电路的设计。
3.2.1  STC89C52单片机硬件结构
STC89C52单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。
1.中断系统:具有6个中断源,2级中断优先权。
2.定时器/计数器:片内有3个16位定时器/计数器,具有四种工作方式。
3.串行口:1个全双工的串行口,具有四种工作方式。可用来进行串行通讯,扩展并行I/O口,甚至与多个单片机相连构成多机系统,从而使单片机的功能更强且应用更广。
4.P1口、P2口、P3口、P4口为4个并行8位I/O口。使单片机对输出的控制更加灵活[7]。
STC89C52主要功能如表3-1所示。
表3-1 STC89C52主要功能
主要功能特性
兼容MCS51指令系统
8K可反复擦写Flash ROM
32个双向I/O口
256x8bit内部RAM
3个16位可编程定时/计数器中断
时钟频率0-24MHz
2个串行中断
可编程UART串行通道
2个外部中断源
共6个中断源
2个读写中断口线
3级加密位
低功耗空闲和掉电模式
软件设置睡眠和唤醒功能
3.2.2  最小系统的设计
1.时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图3-2(a) 所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
外部方式的时钟电路如图3-2(b)所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。
(a)内部方式时钟电路                 (b)外部方式时钟电路
图3-2时钟电路
2.复位及复位电路
(1)复位操作
复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。
除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表3-2所示。
表3-2 一些寄存器的复位状态
寄存器
复位状态
寄存器
复位状态
PC
0000H
TCON
00H
ACC
00H
TL0
00H
PSW
00H
TH0
00H
SP
--07H
TL1
00H
DPTR
0000H
TH1
00H
P0-P3
FFH
SCON
00H
IP
XX000000B
SBUF
不定
IE
0X000000B
PCON
0XXX0000B
TMOD
00H



(2)复位信号及其产生
RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。若使用颇率为12MHz的晶振,则复位信号持续时间应超过2μs才能完成复位操作。
整个复位电路包括芯片内、外两部分。外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。
复位操作有上电自动复位和按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图3-3(a)所示。这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。
按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图3-3(b)所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,其电路如图3-3(c)所示:
电路图中的电阻、电容参数适用于12MHz晶振,能保证复位信号高电平持续时间大于2个机器周期[8]。
本系统的复位电路采用图3-3(b)上电复位方式。

(a)上电复位          (b)按键电平复位          (c)按键脉冲复位
图3-3复位电路
3.2.3  下载端口设计
单片机程序的下载实质上就是单片机的通信,是指单片机与计算机之间的信息交换,通常单片机与计算机之间的通信我们用的有并行和串行两种通信方式,而在单片机系统以及现代单片机测控系统中,信息的交换多采用串行通信方式。
串行通信又有两种方式:异步串行通信和同步串行通信。
异步串行通信是发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步,一位接一位地顺序传送,由此可见,异步串行通信实现容易,设备开销较小,但每个字符要附加2~3位,用于起止位、校验位和停止位,各帧之间还有间隔,因此传输效率不高。
同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。它们均由同步字符、数据字符和校验字符(CRC)组成。其中同步字符位于帧开头,用于确认数据字符的开始。数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。同步通信的缺点是要求发送时钟和接收时钟保持严格的同步
在单片机与单片机,单片机与计算机之间通信时,通常采用异步串行通信方式。
PC机的串行口采用的是标准的RS-232接口,单片机的串行口电平是TTL电平,而TTL电平特性与RS-232的电气特性不匹配,因此为了使单片机的串行口能与RS-232接口通信,必须将串行口的输入/输出电平进行转换。通常用MAX232芯片来完成电平转换。
MAX232芯片是MAXIM公司生产的、包含两路接收器和驱动器的IC芯片,它的内部有一个电源电压变换器,可以把输入的+5V电源电压变换成为RS-232输出电平所需的+10V电压。所以,采用此芯片接口的品德通信系统只需单一的+5V电源就可以了。对于没有+12V电源的场合,其适应性更强,加之其价格适中,硬件接口简单,所以被广泛采用[8]。图3-4即为MAX232的基本接线图。
图3-4 MAX232基本接线图
根据MAX232的基本接线与原理,结合单片机的基础知识,采用串口9针的母头做为单片机的通信接口,电路图如图3-5下所示。
图3-5 下载通信端口原理
3.3   电源模块设计
电源模块为系统其它各个模块提供所需要的电源,主要为单片机、电机及其驱动、寻迹模块、臂章模块供电。供电电压有9V、6V、5V三种电压值。本系统采用12V的蓄电池做为供电电源,为得到所需电压需进行降压及稳压操作,采用常用的稳压芯片7809、7806、7805,分别得到9V、6V、5V稳定电压,设计电路图如图3-6所示:
图3-6 电源模块
3.4   电机驱动模块设计
智能小车区别于普通的电动玩具小车的最大特点是:可以智能调节小车运行状态。如改变其运动方向、运动速度。在接收到外部主控单片机发出的指令后,能迅速做出“应答”,这就需要电机驱动芯片发挥作用。主控单片机发出指令给电机驱动芯片,驱动芯片接收到单片机指令后,通过输出端口控制电机迅速作出相应动作。
本设计采用PWM调速技术来实现小车转向、调速控制,因为设计的电动小车采用2个直流电机,左、右两侧电机独立控制。
经过之前论证分析后,决定选用L298电机驱动芯片。 L298双全桥步进电机专用驱动芯片,比较常见的是15脚Multiwatt封装的L298如图3-7所示:
图3-7 L298N Multiwatt封装外形图
内部包含4信道逻辑驱动电路,可以方便的驱动两个直流电机,或一个两相步进电机。恒压恒流桥式2A驱动芯片L298内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准 TTL逻辑准位信号,可驱动46V、2A以下的步进电机,输出电压最高可达50V。可以直接通过电源来调节输出电压,可以直接用单片机的IO口提供信号,而且电路简单,使用比较方便。
图3-8 电机驱动控制示意图
通过图3-8,可清楚看出单片机→电机驱动芯片→直流电机的三级控制结构。采用此种控制结构,各级职责明确,结构清晰易于实现。
本设计采用的是基于PWM原理的H型驱动电路实现调速功能。采用H桥电路可以增加驱动能力,同时保证了完整的电流回路。
采用 PWM 方法调整电机的速度,首先应确定合理的脉冲频率。脉冲宽度一定时,频率对电机运行的平稳性有较大影响,脉冲频率高,马达运行的连续性好,但带负载能力差,脉冲频率低则反之。当脉冲频率在 100Hz 以下时,电机转动有明显的跳动现象,小车不能连续顺畅运行。经反复试验,选择脉冲频率1000Hz,电机转动较平稳,控制效果较佳。
脉宽调速实质上是调节加在电机两端的平均功率,其表达式(3-3)为:
                (3-3)
式中为电机两端的平均功率;为电机全速运转的功率;为脉宽。 当 时,相当于加入直流电压,这时电机全速运转,;当时,相当于电机两端不加电压,电机靠惯性运转。
当电机稳定开动后,有(为摩擦力 )则
                                    (3-4)
                                            (3-5)
由(3-5)式可知智能小车的速度与脉宽成正比。
由上述分析,U1、U2这对控制电压采用了1000Hz 的周期信号控制,通过对其占空比的调整,对车速进行调节。同时,可以通过U1、U2的切换来控制电动机的正转与反转。对于L298驱动芯片,内部已集成2个H桥,只需在使能控制端EN1、EN2加载PWM波,通过调节PWM波的占空比,即改变加载到电机两端的电压平均值,来实现调速功能。
当IN1端为高电平、IN2端为低电平时,二极管D1到D4导通,电机正转;反之,二极管D3到D2导通,电机反转。IN3、IN4端控制方法与IN1、IN2端相同,不再赘述。
下图3-10为Mutiwatt15封装形式的L298驱动芯片引脚及外形图。

图3-10 L298引脚及外形图
表3-3列出了L298的各引脚功能。
表3-3 L298引脚符号及功能表
引脚
功能
封装


1 、15
SEN1、SEN2
分别为两个H桥的电流反馈脚,不用是可以接地
2 、3
1Y1、1Y2
输出端,与对应输入端(IN1、IN2)同逻辑
4
Vs
驱动电压,最小值需比输入的低电平电压高2.5V
5 、7
IN1、IN2
输入端,TTL电平兼容
6 、11
EN1、EN2
使能端,低电平禁止输出
8
GND
9
Vss
逻辑电源,4.5~7V
10 、12
IN3、IN4
输入端,TTL电平兼容
13 、14
2Y1、2Y2
输出端,与对应输入端(IN3、IN4)同逻辑

下图3-11为L298驱动小车电机的PROTEUS功能仿真图。L298需要两个电压,一个为逻辑电路工作所需的5V电压Vcc,另一个为功率电路所需的驱动电压Vs。为保护电路,需加上八个续流二极管,二极管的选用要根据PWM的频率和电机的电流来确定。二极管要有足够的回复时间和足够电流承受能力。
图3-11 L298驱动电机PROTEUS仿真图
在编写完成Keil C调速、转向程序,与PROTEUS软件进行联合仿真后,通过在线调试。 经多次实际测试,采用PWM技术进行小车调速、转向操作具有如下优点:
1.电流一定连续
2.可使电动机在四象限中运行
3.电机停止时有微振电流,能消除静摩擦死区
4.低速时,每个晶体管的驱动脉冲仍较宽,有利于保证晶体管可靠导通
5.低速平稳性好,调速范围较大
3.5   寻迹模块设计
根据此前方案论证,选用红外反射式光电传感器,它是一种集发射器和接收器于一体的传感器,由1个红外发射管(发射器)和1个光电二极管(接收器)构成。红外发射管发出的红外光在遇到反光性较强的物体(表面为白色或近白色)后被折回,被光电二极管接收到,引起光电二极管光生电流的增大。将这个变化转为电压信号,就可以被处理器接受并处理,进而实现对反光性差别较大的两种颜色(如黑白两色)的识别[9]。
本次设计采用TCRT5000反射式红外光电传感器(如图3-12所示),具有以下特点:
(1)采用高发射功率红外光电二极管和高灵敏度光电晶体管组成。
(2)检测距离可调整范围大,4~13cm可用。
(3)采用非接触检测方式。
图3-12 TCRT5000红外传感器
为使反射信号可直接被单片机所识别,使用LM393进行信号的放大,原理图如图3-13所示:
图3-13寻迹模块原理图
3.6   避障模块设计
根据避障方案的先择,本次设计采用NE555电路进行红外信号的调制,经红外发射管发射后,当红外线遇到障碍物时发生漫反射,反射光被红外接收一体的1838红外接收头所识别并传给单片机,再由单片机进行判断并发出行进避障指令,使小车做出相应的动作。
我们在小车车头处装有三个光电开关,中间一个光电开关对向正前方,两侧的光电开关向两边分开。小车在行进过程中由光电开关向前方发射出红外线,小车根据三个光电开关接受信号的情况来判断前方是否有障碍物。
1.红外发射电路设计
本系统采用555构成的多谐振荡器电路来产生38KHz左右的方波,以此来控制红外信号的发射。它具有占空比可调的优点,555各管脚功能如下:
1脚:外接电源负端Vss或接地,一般情况下接地。
2脚:低触发端
3脚:输出端Vo
4脚:RD是直接清零端。当RD端接低电平,则时基电路不工作,此时不论TL、TH处于何电平,时基电路输出为“0”,该端不用时应接高电平。
5脚:VC为控制电压端。若此端外接电压,则可改变内部两个比较器的基准电压,当该端不用时,应将该端串入一只0.01μF电容接地,以防引入干扰。
6脚:TH高触发端。
7脚:放电端。该端与放电管集电集相连,用做定时器时电容的放电。
8脚:外接电源VCC
根据555的功能,使用第3引角做为红外信号触发端,具体电路如图3-14所示[10]:
图3-14 红外发射电路
2.红外接收电路设计
该模块使用一体化红外接收头1838,其电路如图3-15所示。
图3-15 红外接收电路
瓷片电容104为去耦电容,DOUT即是解调信号的输出端,直接与单片机的接口相连。有红外编码信号发射时,输出为检波整形后的方波信号,并直接提供给单片机,单片机进行识别处理后,再发出指令,控制小车的行进。
其中1838红外一体化接收头具内部电路包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号,然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出高低电平,还原出发射端的信号波形。注意输出的高低电平和发射端是反相的,这样的目的是为了提高接收的灵敏度[11]。
3.7   遥控模块设计
随着电子技术的飞速发展.无线遥控已被广泛的应用到日常生活中及工业中.电视机、电冰箱.视频监控系统、电视演播系统、电视会议系统、微能控制等多种领域都有应用。在智能控制中,无线遥控更是成为了不可或缺的一部分,同时也是为了在特殊情况下按照人为的意愿进行操作的最佳选择。
根据上文方案的选择,本次遥控方案采用红外红进行遥控,红外线特点是不干扰其它设备工作,也不会影响周边环境。电路调试简单,若对发射信号进行编码,可实现多路红外遥控功能。
本次设计,红外遥控发射采用常用的遥控器。
接收电路仍采用避障模块中的红外接收电路,如上图3-15所示,其中,红外1838接收到红外信号后,传输给单片机,由单片机采用程序处理进行红外的解码,以此来识别遥控器的按键,并发出指令执行相应的操作。
3.8   本章小结
本章主要介绍了智能小车在硬件的方案设计以及部分使用器件的功能、用法。硬件是智能小车的基础,只有一个合理、完整的硬件系统才能发挥出应有的功能,同时稳定的硬件系统也为小车的运行提供了良好的软件运行环境,从而使小车整个系统达到和谐的目的。
针对方案的论证选择,本章对主控单片机的应用进行了详细的设计,其中包括复位电路、时钟电路、以及程序下载接口电路,保证了单片机的正常运行及程序的下载。随后,由于要对电机进行控制,设计了电源模块与电机的驱动模块,以便电机的灵活应用,再加以寻迹、避障、遥控等模块的设计,完成了小车初步智能化的硬件保证,至此,小车的基本构架完成。
第4章   软件设计
在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。
在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便控制生产。
为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所需要完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。
模块程序设计法的主要优点是:
1.单个模块比起一个完整的程序易编写及调试;
2.模块可以共存,一个模块可以被多个任务在不同条件下调用;
3.模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。
本系统软件采用模块化结构,由主程序﹑定时/计数子程序、寻迹子程序﹑避障子程序﹑遥控子程序等构成。
4.1   软件设计环境简介
软件是实现编程与下载的手段,在设计中不可缺少,在本次设计中,采用Keil uVision2软件进行编程,采用STC专用的下载软件STC_ISP进 行程序的下载。
4.1.1  Keil开发环境介绍
Keil软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面将介绍Keil开发系统各部分功能和使用。
1.基本项目建立
(1) 建立项目
选择Project菜单下的New Project命令,创建新工程,在对话框中设定新工程的位置,输入新工程名字保存即可。
(2)选择CPU
在出现的为新工程选择CPU的界面,在“data base”栏下选择所使用的CPU。如图4-1所示,在此我们选择Atmel下的AT80C52,确定后,会弹出一“Copy Standard 8051 Startup Code to Project Folder and Add File to Project”信息, 一般选择“是”即可。
图4-1 芯片型号选择界面
(3)给项目加入程序文件
加入的文件可以是C文件,也可以是汇编文件。加入程序文件的过程如下。
(a)在项目管理器窗口中展开Target1文件夹,可以看到Source Group1。
(b)向Source Group1添加文件。在Source Group1点击鼠标右键,会弹出一菜单,其中有一“Add Files to Group‘Source Group1’”命令,点击后会弹出一对话框,选择需要加入的程序文件,并且一次可以加入多个文件。如图4-2所示
图4-2 添加文件界面
(c)移走项目:在欲移走的文件上点击鼠标右键,会弹出一菜单,执行其中的“Remove File ‘***’”命令即可。
(d)对文件分组:可以按功能对项目管理器中的文件分成组。先使用图4-2中的“Manage Components”命令建立组,然后用鼠标直接在组之间移动文件即可。
2. Keil基本操作
  • Keil操作界面
编辑状态的操作界面主要由5部分组成:最上面的菜单栏、菜单栏下面的工具栏、左边的工程管理窗口、中间的编辑窗口、下面的输出信息窗口。菜单项主要有:文件、编辑、视图(View)、工程、调试、片内外设(Peripherals)、工具、软件版本控制系统(SVCS)、窗口、帮助。 工具都是相应菜单项的快捷操作按钮,如图4-3所示:
图4-3 Keil操作界面
(2)项目的编译链接
设置输出.hex文件:在Target1上点击鼠标的右键,出现类似图4-9所示的菜单,点击执行“Options for Target ‘Target1’”命令,在弹出的会话界面选择“Output”标签,选中“Create HEX File”项即可。
编译链接方法:使用Project菜单下的Build target命令或Rebuild all target Files命令,或者直接点击工具栏中对应的按钮。
编译链接结果:若有错误则不能通过,并且会在信息窗口给出相应的错误信息。编译链接通过后,会产生一.hex目标文件[12]。
4.1.2  STC_ISP程序下载说明
产生的hex文件需要下载入单片机中,这样才能使单片机按照预定的程序执行相应的命令,本次设计采用的是STC的单片机,所以使用其专用的下载软件SRC-ISP,打开后的界面如图4-4所示:
图4-4 STC_ISP界面
单击左上角下拉菜单,选择单片机型号,之后选择好相应的文件及波特率,在单片机与电脑连接完好后,点击下载按扭,此时给单片机通电,等待程序完成下载,至此,程序下载完成。
4.2   寻迹程序设计
在硬件设计中,采用五个反射式光电红外管做为寻迹,当中间位置的红外管寻到黑线时,证时此时小车正在预定轨道上,直行前进,当其它红外管寻到黑线时,说明此时小车偏离,需要进行较正,具体如表4-1[13]:
表4-1 小车行进状态表
P1.0
P1.1
P1.2
P1.3
P1.4
小车状态
控制方法
0
0
1
0
0
居中
前进
0
1
1
0
0
偏右
左调
1
1
1
0
0
1
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
1
0
偏左
右调
0
0
1
1
1
0
0
0
1
1
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
没在轨道
后退
1
1
1
1
1
停车信号
停车

小车程序设计流程图如图4-5所示:
图4-5 寻迹流程图
4.3   避障程序设计
在小车车头处装有三个红外线发射管,中间一个发射管对向正前方,两侧的发射管向两边分开。小车在行进过程中由红外发射管发射出红外线,如果遇到障碍物,刚红外线反射,同样,在小车头部装有三个相应的红外线接收装置,若其接收到红外信号,则小车会根据三个接收装置接受信号的情况来判断前方是否有障碍物,再将所得信息分别传递给单片机,由单片机发出相应的指令控制小车的运行情况,其行进指令具体如表4-2所示:
表4-2 避障行进表
P2.7
P2.6
P2.5
障碍方位
控制方法
0
0
0
前行
0
1
0
正前
后退左调
1
0
0
左方
右调整
0
0
1
右方
左调整
0
1
1
右方
左调整
1
1
0
左方
右调整
1
1
1
前方无路
停车


避障程序流程图如下所示:
图4-6 避障流程图
4.4   遥控程序设计
本次设计采用的是红外遥控器进行控制,用1838一体红外接收头进行红外信号的接收,如此,红外遥控部分可分为红外的解码与遥控两个部分,下面将分别说明:
(1)红外解码
小车进行红外遥控,能否正确识别红外信号是关键,而要进行红外信号的识别,首先要将得到的红外信号进行正确的解码,如此才能保证红外信号的有效性。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”。遥控器在按键按下后,周期性地发出同一种32 位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms 之间。当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms 的编码脉冲,这108ms 发射代码由一个起始码(9ms),一个结果码(4.5ms),低8 位地址码(9ms~18ms),高8 位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8 位数据的反码(9ms~18ms)组成。如果键按下超过108ms 仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成[14]。
由红外遥控器的发射特征,设计解码程序,其中解码流程图如图4-7所示:
图4-7 红外解码
  • 红外遥控程序设计
根据红外解码程序,将红外遥控器的按键进行解码,得到一组该按键的唯一编码。考虑到小车的功能,一共8个按键进行解码,分别对其设定功能,主要有行进功能:前进、后退、左转、右转、停止;指令选择功能:寻迹选择、避障选择、遥控选择[15]。

4.5   主程序设计
根据整体思想,将各个模块进行整合,首先对红外按键进行度取,根据相应的按键设定信息,调用相应的功能模块,执行相应的指令,主程序流程图如图4-8所示:
图4-8 主程序流程图
4.6   本章小结
本章主要在硬件的基础上,对软件进行了详细的设计,主要介绍了软件的开发环境、下载方式以及针对寻迹、避障和无线红外遥控的基本原理,进行了初步的软件设计,实现了小车的初步智能化。软件程是小车行动的指挥官,是其灵魂所在,如同人类的思想一样,指引着前进的方向,但现代化的软件技术知识还未能达到如同人类一样的随心所欲,不能够完全处理任何突发事件,所以,软件技术在发展、在不断的完善,本章程序也仅是程序智能化的初步模型与设想,仍需要不断进行完善,如此才能达到人类的目标,达到完全的智能化。
结论
本文针对智能车模型进行了简单的设计,并实现了软件的控制,从而实现了小车的初步智能化。
在现在社会中,智能化日趋完善,已经深入到各个领域中,对于当代学生,学习智能化的基本原理,实现简单的智能控制,对以后的学习研究与发展有着重大的作用。对于学习智能自动化的方法,不仅要从理论入手,更要与实践相结合,如此才能更好的学习自动化知识,达到学以至用,为此,本文设计了简易的智能小车,趣味性大,同时制作简单,可以应用到教学之中,增加学生的实际动手能力。尤其在当代的大学中,智能车大赛在每个大学中都有不同程度的开展,日渐得到师生的得视,可见智能车是大学生了解智能化的一个较好途径。同时,该智能小车更是智能控制的基本模型,可以做为科研项目的基础模型,在本车的基础上,可以增加扩展,能够满足多种需求。
本次的智能小车主要实现了寻迹、避障、遥控三种功能,用以展示智能小车的基本原理,在此基础上,可以做多种扩展设计或改动,来实现其它功能,如添加射像头,用射像头来识别路径,如此不仅使路径识别更加准确,更能学习硬件知识及提高编程技术。同时也可改换避障模块,采用超声波等避障方案,也可添加金属探测、寻声、寻光、测速等等多种功能,可见本智能小车的灵活性及其发展空间。
对于本次智能小车的设计,在制做过程中,硬件起到了最基本的保证作用,为软件提供了运行环境,可见,硬件系统的稳定性也很重要,在软件智能化的同时,不能忽略硬件,只有如此才能保证一个完整的系统,在本设计中,不仅给出了硬件的方案,更详细的对硬件进行了设计与分析,同时又结合了软件的设计支持,其中本着以简化、易懂为主,在硬件选择上,采用了简单、基本的方案,在软件上同样采用了基本设计思想,最终完成了此次智能车的设计。
致谢
时光如水,岁月如梭,历时三个月的毕业设计已经告一段落。经过自己不断的搜索努力以及指导老师的耐心指导和热情帮助,本设计已经基本完成。在这段时间里,指导老师严谨的治学态度和热忱的工作作风令我十分钦佩,他的指导使我受益匪浅。同时本系单片机原理实验室的开放也为我的设计提供了实习场地。在此对实验室的全体老师表示深深的感谢。
通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学四年的学习成果。虽然在这次设计中对于知识的运用和衔接还不够熟练。但是我将在以后的工作和学习中继续努力、不断完善。这三个月的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。
由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指正。

参考文献
1  飞思卡尔半导体公司.全国大学生智能车竞赛与飞思卡尔S12单片机.单片机与入式系统应用[J].2007,(8):78-79
2  徐鹤.浅谈自动导向车(AGV)原理与应用[J].天津成人高等学校联合学报2005,7(5):50-52
3  Chen.Bo.the electric power drags along to move automatic control systemversion 2,Peking:the machine industrial publisher 2000:127-130
4  高月华.基于红外光电传感器的智能车自动寻迹系统设计[J].半导体光电,2009,30(1):134-137
5  王丹,万威,石维亮.第一届“飞思卡尔”杯全国大学生智能汽车邀请赛路虎AC队技术报告[R].东南大学,2006
6  王朝盛,基于16单片机MC9S12DG128B智能车系统设计[D],天津工业大学,2007
7   G.Zhang.the Peng pleased dollar,lately wove MCS-51 the single slice of machine applied a design,version 1,industrial university publisher in Harbin,2003:25-27,411-417
8 邵贝贝.单片机嵌入式应用的在线开发方法[M].北京:清华大学出版社,2004
9  黄开胜,邵贝贝.学做智能车[M].北京航空航天大学出版社,2007
10  X.Bo.the single slice of machine application system designs,Peking:The aerospace aviation university publisher,2-5:46-50
11 第四届全国大学生“飞思卡尔”杯智能汽车竞赛华东赛区培训会关于规则及创意竞赛事项说明[A].杭州电子科技大学.2009
12  李广弟.单片机基础.北京.北京航空航天大学出版社,2001:56—64
13 韩飞,陈放,戴春博.第三届“飞思卡尔”杯全国大学生智能汽车邀请赛CyberSmart队技术报告.上海交通大学,2008
14 刘林,杨理龙,叶虹.第二届“飞思卡尔”杯全国大学生智能汽车邀请赛AUTO-2队技术报告[R].重庆邮电大学,2007
15  Wang Xiuquan.Route Identification and Direction Control of Smart Car Based on CMOS Image Sensor.ISECS International Colloquium on Computing, Communica -tion,Control,and Management.2008


附录A
英文原文
Route Identification and Direction Control of Smart Car Based on CMOS ImageSensor
Abstract
This paper is designed for the 2nd Freescale Cup National Undergraduate Smart Car Competition. With MC9S12DG128 single chip and smart car model supplied by the committee, a CMOS image sensor is applied to detect the black track on white raceway, which extends the detection range and is helpful to predict the forward path. In this paper, ten-line pixels in an image are analyzed to locate the black track, and the PD algorithm based on PID is employed to control the direction and angle of the steering gear respectively. By repeated testing, the smart car can run stably on the given raceway at a high speed.
Keywords: route identification, direction control, smart car, MC9S12DG128 single chip, image sensor, PID
algorithm.
1. Introduction
The rules of 2nd Freescale Cup National Undergraduate Smart Car Competition [1] may be summarized as follows: the raceway consists of a lot of white boards on which a black track is attached; the smart car designed by participants runs along the black track;every car runs two circles in this game and the best times of two circles will be the final score of this car, and apparently the team whose car takes the best times will bear the palm. According to the rules, we should ensure that the car can distinguish the black track from white board in order to make the smart car run stably. There are two common methods for route identification: one is using infrared diode as the sensor, and another is using CCD/CMOS image sensor [2]. This paper using CMOS image sensor as route identification sensor, the reasons for which are as follows: (1) The range which is covered by a infrared diode sensor is much smaller than a CMOS image sensor covers, and only we can do is to use several diode sensors, but the maximum number of diode sensors used in the smart car is 16; (2) The working voltage of a CMOS image sensor(3.3V) is less than a CCD(12V) or 16 infrared diodes. Apparently, using CMOS image sensor can not only reduce the power consumption but also extend the visible range of the smart car, and also enable the car to predict the forward path. This paper presents a systemic solution for identifying the raceway and controlling the direction of smart car.
2. CMOS camera
There are several kinds of CMOS image sensors in the market. In comparison with other CMOS image sensors, the OV6130 CMOS image sensor [3] made by OmniVision Technologies Inc. is the best choice for us to design a CMOS camera for smart car whether from the viewpoint of cost and performance or power consumption. The OV6130 is a black and white sensor which has a 1/4 inch CMOS imaging device containing approximately 101,376 pixels (352×288). This sensor includes a 356×292 resolution image array, an analog signal processor, dual 8-bit A/D converters, analog video multiplexer, digital data formatter, video port, SCCB interface, registers, and digital controls that include timing block, exposure control, black level control, and white balance.By assembling the experimental circuit we test the OV6130 output ports timing (VSYNC, FODD, HERF). Figure 1 shows the experimental timing diagrams.
(a) VSYNC-FODD timing
(b) FODD-HERF timing
Figure 1 OV6130 experimental timing diagrams
Figure 2 Structure of the image capturing and displaying system
Referring to the OV6130 datasheet, these timing diagrams match well with those given in datasheet, thus we produce the OV6130 CMOS camera based on the experimental circuit. In order to check whether the images captured by camera have clear definition and sharp contrast or not, and also to confirm the visible range of the camera, we design a VB program for capturing the images and displaying them on computer screen. This program bases on three hardware devices: CMOS camera, MCU or single chip, PC. Figure 2 presents how these three devices work together.
Figure 3 compares the original image of a snake line of raceway with the image captured by CMOS camera and then displayed on screen by VB program. It can be seen that the captured image has clear definition and sharp contrast, and this lays a foundation for route identification to be discussed later.
(a) Smart car ready to scan the raceway
(b) Captured image by CMOS camera
Figure 3 Comparison between original image and captured image
3. Route identification
Route identification aims at helping the smart car to recognize the forward track by a method which picks up the black line from the image captured by CMOS camera,and in fact, this method works well in the following cases:straight line, curving line and snake line. By repeated testing, we decide to analyze 10 lines of a whole image to predict the forward condition of smart car. Figure 4 illustrates how we analyze the 10-line pixels of an image.
Figure 4 Route identification diagram
The detailed algorithm is introduced as follows:
Step 1: Calculate coordinates of the black pixel for each line ready to be analyzed. As is illustrated in figure 4, the lines (L0, L1, …, L8, L9) are to be analyzed, and the white points (P0, P1, …, P8, P9) are black pixels for each line. The origin O is superposed by P9, which means there is no black pixel in line L9. Assumed that P(x) and P(y) indicate x-coordinate and y-coordinate of point P,respectively, here both P9(x) and P9(y) equal 0.The key of this step is to find the black pixel of each line. Here, by taking the following datum which shows the gray values of all pixels in a line as example, we introduce
a new approach:
195 210 207 215 208 228 236 243 238 234 238 235 231 233 230 235 230 222 196 207 204 208 209 129 160 65 17 15 19 18 79 151 172 153 173 150 147 159 141 153 147 154 137 139 156 136 141 9 141 133 138 4 127 110 141 112 104
(1) Assumed that P is the black pixel of this line, G(i)denotes a pixel and i indicates it’s position in this line, V(i) is the gray value of G(i), j is the position of the first black pixel appearing in the line from left to right. Here both P(x) and P(y) are initiated to 0, and j is 0 from the start.
(2) As for each pixel in this line from left to right,comparing its gray value with the black value B, here we set B as 30, G(i) is a black pixel on condition that V(i)is less than B. In the line above, the pixels underlined in bold, whose gray values are 17,15,16,18, are component points of the black track, and the pixels underlined both in bold and italic, whose gray values are 9,4, are invalid or interferential pixels. If V(i) is less than B, set j as i. Then compare V(j+1) andV(j+2) with B respectively, results go to two sides: ① If both V(j+1) and V(j+2) are less than B, check the gray value for each pixel from G(j+3) to the end pixel of this line. If the total number of white pixels whose gray values are greater than B surpasses or equals to 3, then set P as G(j+1). Otherwise, go to (3); ② If not, repeat this way from the point G(j+3) on.
(3) If there is no black pixel in this line, set both P(x) and P(y) as 0.

Step 2: Calculate the average coordinates of 10 black pixels. As is showed in Figure 4, M is the average point, M(x) and M(y) are expressed as follows:
Step 3: According to the position of M in the image,we can decide in which direction (ahead, left, or right) the smart car should turn. In Figure 4, the smart car should turn right obviously.
Step 4: Calculate how many angles the car should turn.Further descriptions is illustrated in Figure 5, where α is the very angle by which the car should turn right, F is the central point of two front wheels, M is the average point mentioned previously (see Figure 4), D and L1 indicate the width and height of the visible range of CMOS camera respectively, L2 is the distance between visible range and front wheels, L3 is a half of front wheel’s diameter, L2+L3 means the distance between visible range and the axis of front wheels. Referring to Figure 5, it is very easy to calculate the angle α.
Figure 5 Calculating the angle for turning
4. Direction control
The central unit for direction control of smart car is steering gear, its input signal is PWM (Pulse-Width Modulation) pulse, and it outputs corresponding angle in radian. This paper uses the PWM output port of MC9S12DG128 single chip [4] as the input signal of steering gear. By inputting the given discrete width of pulse, we test the relationship between the input and the output. The formula below expresses it:


where X is tangential value of the output angle, Y is width of the input pulse, y0 is the corresponding value when the output angel equals 0 and k is slope. Using this linear relationship we can operate the smart car simply just by inputting the target angel, thus the width of pulse which is the input signal of steering gear can be computed easily,this method, however, doesn’t work well in the following cases: curving line and snake track. Therefore we apply the PID [5] (Proportional, Integral, and Differential) controller which is very popular in fields of automation and control technology. The kernel theory of PID is to do proportional, integral and differential operations on the input difference respectively, then join the three results as the final output value. In practice, it is very flexible for us to use according to features and demands of the object to be controlled. We may choose one or two or all of PID modules, for example, we can use proportional and integral modules to make up of PI controller.As for the smart car, it is no necessary to consider the tracks which have been gone across, so we only use proportional and differential modules as PD adjuster, and P adjuster has been described previously (see Formula(2)), and the following formula shows the D adjuster:
where enew , eold define the differences of this time and last time when the angle is computed (here difference means the angel by which the steering gear should turn), t is scanning period of CMOS camera, kd is differential coefficient which runs from 0.5 to 1.5, D_out is the output of D adjuster.
5. Conclusions
The challenge of this work is a systemic solution for identifying the black route and controlling the direction of smart car. The performance of CMOS camera is apparently superior to infrared diode whether in scanning range or whether in power consumption, and the clear definition and sharp contrast of image are also important for the further recognition and control. By repeated testing, it is proved that the PD adjuster works well when
the car runs whether on curving line or on snake track at a high speed, and the stability of smart car is also promoted.

中文译文
基于CMOS摄像头的智能车路径识别与方向控制
摘要
本文是为第二届飞思卡尔杯全国大学生智能车大赛而设计的。用单片机MC9S12DG128和由组委会提供的智能车模型,一个用于检查白色底板上的黑线的CMOS图像传感器,增大了检测范围和前瞻距离。本文,每帧图像数据采集10行进行分析,确定黑线位置,用基于PID算法的PD控制器应用于舵机的方向和角度控制。通过反复测试,智能车能以高速稳定的巡线。
关键字:路径识别,方向控制,智能车,MC9S12DG128单片机,图像传感器,PID
1、引言
第二届飞思卡尔杯全国大学生智能车大赛规则可归纳如下:赛道由多个白色底板并在上面粘上黑色胶带构成;由参赛队员设计的只能车需沿黑线运行;每辆车在赛道上跑两圈,两圈中的最好成绩算作最终得分,显然哪支队伍取得的成绩最好则赢得比赛。根据规则,我们可以确定的是车必须能从白色底板上识别出黑线才能让智能车稳定运行。一般有两种方式检测路径:一种是用红外对管作为传感器,另外一种就是用CCD/CMOS图像传感器。本文使用CMOS图像传感器作为路径识别传感器,原因有以下几点:(1)红外对管检测范围远小于CMOS图像传感器,众所周知,要想增大红外对管检测范围只有增加红外对管数量才能达到目标,但是传感器使用的最大数目不得超过16个;(2)CMOS图像传感器的工作电压(3.3V)远小于CCD(12V)或者16个红外对管。很明显,用CMOS图像传感器不仅会减小功耗而且还能增加智能车的视野,另外也提高了智能车的前瞻性。本文提出了一种智能车的路径识别和方向控制的系统性解决方案。
2、CMOS摄像头
市场上有多种CMOS图形传感器。与其他CMOS图像传感器相比,由OmniVision科技有限公司制造的OV6130 CMOS传感器,无论从价格或者是性能、功耗方面都是我们设计智能车的最好选择。OV6130是一个黑白图像传感器,内部有1/4英寸的CMOS感光设备,包含了101376个像素点(352×288)。此传感器包含了一个356×292分辨率的图像阵列,一个模拟信号处理器,双8位精度A/D转换器,模拟信号多路复用器,二进制数据格式器,视频输出口,SCCB接口,寄存器和数字控制寄存器,该寄存器包括时钟模块,曝光控制,黑色电平控制和白平衡。
通过连接实验性电路,我们开始测试OV6130输出口的时序(VSYNC, FODD,HERF)。图1表示了实验得到的时序表
  • VSYNC-FODD 时序图
(b) FODD-HERF 时序图
图1 OV6130实验所得时序图
图2 图像采集和现实系统结构
根据OV6130的数据手册,这些时序图与手册上给出的数据非常吻合,因此,我们开发了基于实验电路的OV6130电路板。为了核实摄像头获得的图像是否有较高清晰度和对比度,以及确认摄像头的可视区域,我们为拍摄到的图像设计了VB上位机程序以方便在计算机屏幕上显示所得数据。此程序基于三个硬件设备:CMOS摄像头,单片机,PC。图2表示了三个设备是如何同时在一起工作的。
图3比较了CMOS摄像头获得的弯道原始图像,之后用VB程序将其显示在计算机上。从它可以看出获得的图像有较高清晰度和对比度,这为以后的路径识别奠定了基础。

(a)智能车准备扫面赛道
(b)由CMOS摄像头拍摄到的图像
图3 原始图像与拍摄到的图像对比
3、路径识别
路径识别的目的是通过从获得的图像中提取一条黑线帮助智能车感知前方路径信息。事实上,这种方法用在以下几种赛道上都工作的很好:直到,弯道,S道。通过重复测试,我们觉定每幅图像提取10行来预知智能车前方的路况信息。图4说明了我们如何分析一幅图像中的10行数据。
图4 路径识别示意图
详细的算法介绍如下:
Step1:计算每行中黑点的坐标准备分析。如同图4所示,每行(L0,L1,…,L8,L9)都要分析。图中的白点(P0,P1,…,P8,P9)表示每行测得的黑点。原点O与P9叠加,意味着字L9没有黑点。假定P(x)和P(y)表示P点的x坐标和y坐标,故此,知P9(x)和P9(y)均等0。
本步的关键在于如何找到各行的黑色像素点。这里,以一行的灰度值为例我们介绍一种新方法:
195 210 207 215 208 228 236 243 238 234 238 235 231 233 230 235 230 222 196 207 204 208 209 129 160 65 17 15 19 1879 151 172 153 173 150 147 159 141 153 147 154 137 139 156 136 141 9141 133 138 4127 110 141 112 104
(1)假定P是此行的黑色像素点,G(i)表示一个像素点,i表示该像素点在此行的位置,V(i)是点G(i)的灰度值,j就是此行从左到右出现的第一个黑色像素点。这里P(x)和P(y)均是从0开始,j也是从0开始。
(2)对于此行从左到右的每个像素点,用阈值B比较他的灰度值,这里B设置值为30,如果V(i)小于B,则G(i)就是一个黑色像素点。在这一行靠前的部分,加粗且带下划线的像素17、15、16、18,就是组成黑线的点。斜体加粗且带下划线的像素点,9、4,是无效点或者干扰点。如果V(i)比B小,则让j等于i。然后各自与B比较V(j+1)和V(j+2),只有两种结果:①如果V(j+1)和V(j+2)均小于B,从G(j+3)开始核对每个像素点的灰度值直到此行的最后一个像素点。如果白色像素点总数,也就是那些灰度值大于B的像素点超过或等于3,则设P等于G(j+1)。否则跳到(3);②如果不是,则从点G(j+3)重复此方法。
(3)如果此行没有黑色像素点,将P(x),P(y)均设为0。

Step2:计算10个像素点的平均坐标。参考图4,M就是平均得到的坐标点,M(x)和M(y)被展开如下:
图5 计算转角α
Step3:通过图像中M点的位置我们可以确定出智能车要往那个方向走(直走,左拐,右拐)。在图4中,很明显的就可以判断智能车要往右拐。
Step4:计算智能车要转多大的角度。更多的描述可以从图5看出,α是智能车应该转向的确切控制量,F是两个前轮的中心点,M是先前提到的平均点(见图4),D和L1表示CMOS摄像头可见区域的宽度和高度,分别的,L2就是可视区域与前轮到的距离,L3是前轮的半径,L2+L3意味着可视区域与前轮轴线的距离。如图5所示,可非常容易的计算出角度α。
4、方向控制
智能车方向控制最核心的担忧就是舵机,它的输入信号是PWM(Pulse-Width Modulation),它的输出与角度的大小成正比。本文用MC9S12DG128单片机的的PWM输出脚作为舵机的输入信号。通过输入给定的离散脉冲宽度,我们测得输入和输出之间的关系。下面的算式就是用来表示输入与输出之间的关系:

这里X就是输出角度的正切值,Y就是输入脉冲宽度,y0就是输出角度为0时,相应的脉冲宽度,k就是斜率。用这个线性关系,我们可以简单的通过目标角度来操作智能车,因此舵机输入的脉冲宽度可被简单的计算出来。这个方法,尽管如此,在下列情况不能工作的很好:弯道和S道。因此我们应用了PID(比例,积分,微分)控制器,此方法在自动控制领域应用相当普遍。PID的核心理论是分别对输入偏差量做比例,积分,微分操作,然后将三个结果联合起来作为最终输出值。实际上,对我们来说根据被控物体的特征及需要来实现PID是非常灵活的。我们可以选取一个或两个或所有的PID模块来应用,例如,我们可以用比例和积分模块组成PI控制器。

对于智能车,不必考虑我们已走过的路径,所以我们只用比例和微分模块组成PD控制器即可,P调节前面已经描述过(见公式2),下面的公式则是D调节:
这里当角度被计算时enew , eold定义作此刻和前一时刻的差值(这里差值的意思是指舵机应转的角度和实际角度的差值),t是CMOS摄像头的扫描周期,kd就是脉冲宽度由0.5ms到1.5ms的微分系数,D_out是D调节器的输出值。
5、结论
此项工作的挑战性在于找到一个解决路径识别和智能车方向控制的一个系统方法。CMOS摄像头就目前来看是优于红外对管的,无论从扫描范围还是功耗方面。高清晰度和对比度对于更超前的识别和控制是非常有用的。通过反复测试,证明PD调节器在智能车运行时工作良好。无论是弯道还是S道均能以高速完美过弯,并且智能车的稳定性也得到了提高。

附录C
部分硬件原理图
附图一 寻迹原理图
(a)发射原理图

(b)接收原理图
附图二 避障原理图

附图三 电机驱动原理图
附录B
部分原理程序
寻迹程序:


  1. void xunji()
  2. {
  3.    switch(P1)
  4.     {
  5.       case 0xe4: PWM(10);ahead();break;              //00 1 00
  6.       case 0xf0:                                 //10 0 00
  7.       case 0xe8:                                   //01 0 00
  8.       case 0xf8:                                 //11 0 00
  9.       case 0xec: while(!(P1==0xe4)&&!(P1==0xff))      //01 1 00
  10.                  {turn(0,10);}
  11.                  break;           
  12.       case 0xfc:                                   //11 1 00
  13.       case 0xfe: while(!(P1==0xe0)&&!(P1==0xff))      //11 1 10
  14. {
  15.                      PWM(10);
  16. ahead();
  17. }
  18.               while(!(P1==0xe4)&&!(P1==0xff))            
  19. {
  20.                   turn(0,10);
  21.   }                           
  22.                  break;            
  23.       case 0xe2:                                  //00 0 10
  24.       case 0xe1:                                  //00 0 01
  25.       case 0xe3:                                  //00 0 11
  26.       case 0xe6: while(!(P1==0xe4)&&!(P1==0xff))   //00 1 10
  27.                  {turn(10,0);}
  28.                  break;                        
  29.       case 0xe7:                                  //00 1 11
  30.       case 0xef: while(!(P1==0xe0)&&!(P1==0xff))     //01 1 11   
  31. {
  32.                      PWM(10);
  33. ahead();
  34. }
  35. while(!(P1==0xe4)&&!(P1==0xff))                    
  36. {
  37.                       turn(10,0);
  38. }         
  39.                  break;
  40.       case 0xff: PWM(10);back();while(1){stop();}break;   //11 1 11
  41.       default:PWM(10);ahead();break;
  42.     }
  43. 避障程序:
  44. void bizhang()
  45. {
  46.   while(b1==0)                             //左侧有障碍
  47.     {
  48.       PWM(7);
  49.       stop();
  50.       back();delay(100);
  51.       turn_angle(2,45);
  52.     }
  53.   while(b1==0&&b2==0)                     //左侧有障碍
  54.     {
  55.       PWM(7);
  56.       stop();
  57.       back();delay(100);
  58.       turn_angle(2,60);
  59.     }
  60.   while(b2==0||(b1==0&&b2==0&&b3==0))      //正前方有障碍
  61.     {
  62.       PWM(7);
  63.       stop();
  64.       back();delay(200);
  65.       turn_angle(1,45);
  66.       while(b1==0)
  67.        {
  68.                               while(b1==0&&b3==0)
  69.                                  {
  70.                                    ahead();delay(100);
  71.                                    while(b1==0&&b3==0)
  72.                                     {
  73.                                       back();delay(100);
  74.                                       turn_angle(2,120);
  75.                                     }
  76.                                  }
  77.          turn_angle(2,5);
  78.          ahead();delay(100);
  79.          while(b1==0&&b2==0&&b3==0)
  80.           {
  81.             back();delay(100);
  82.             turn_angle(2,120);
  83.           }
  84.        }
  85.     }
  86.   while(b1==0&&b3==0)
  87.      {
  88.        ahead();delay(100);
  89.        while(b1==0&&b3==0)
  90.         {
  91.           back();delay(100);
  92.           turn_angle(2,120);
  93.         }
  94.      }
  95.   while(b3==0)                             //右侧有障碍
  96.     {
  97.       PWM(7);
  98.       stop();
  99.       back();delay(100);
  100.       turn_angle(1,45);
  101.     }
  102.   while(b2==0&&b3==0)                    //右侧有障碍
  103.     {
  104.       PWM(7);
  105.       stop();
  106.       back();delay(100);
  107.       turn_angle(1,60);
  108.     }
  109.   while(b1==1&&b2==1&&b3==1)           //无障碍
  110.     {
  111.       PWM(10);
  112.       ahead();
  113.     }
  114. }
  115. 红外解码程序模块:
  116. 进入中断,进行红外的解码,识别红外信号的周期,为红外信号的数据处理与识别做准备
  117. void int1() interrupt 2
  118. {
  119.    if(startflag)
  120.     {
  121.        if(infraredtime>45)      //检测引导码
  122.         {
  123.            bitnum=0;
  124.         }
  125.         irdata[bitnum]=infraredtime;
  126.         infraredtime=0;
  127.         bitnum++;
  128.         if(bitnum==33)
  129.          {
  130.            bitnum=0;
  131.            irreceiveok=1;
  132.          }
  133.     }
  134.    else
  135.     {
  136.       startflag=1;
  137.       infraredtime=0;
  138.     }
  139. }
  140. 红外信号的初步处理,准读取到的红外信号值进行存储,为下一步数据的转化做准备
  141. void irdeal()
  142. {
  143.    uchar j,i,k,value;
  144.    k=1;
  145.    for(j=0;j<4;j++)
  146.      {
  147.                  for(i=0;i<8;i++)
  148.                   {
  149.                                value=value>>1;
  150.                                if(irdata[k]>6)
  151.                                {
  152.                                  value=value | 0x80;
  153.                                }
  154.                    }
  155.                 ircode[j]=value;
  156.        }
  157.    irdealok=1;
  158. }
  159. 红外信号的处理,将读取到的红外信号转化为十六进制的数据,以便于识别与显示。
  160. void irwork()
  161. {
  162.    dis[0]=ircode[0]/16;
  163.    dis[1]=ircode[0]%16;
  164.    dis[2]=ircode[1]/16;
  165.    dis[3]=ircode[1]%16;
  166.    dis[4]=ircode[2]/16;
  167.    dis[5]=ircode[2]%16;
  168.    dis[6]=ircode[3]/16;
  169.    dis[7]=ircode[3]%16;
  170. }
复制代码

完整的Word格式文档51黑下载地址:
智能小车控制系统设计-哈尔滨理工大学毕业论文.doc (1.35 MB, 下载次数: 109)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:721016 发表于 2020-4-11 15:21 | 只看该作者
请问一下有整个的原理图吗。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表