您的当前位置:首页正文

循迹小车毕业设计

来源:图艺博知识网
沈阳理工大学学士学位论文

摘 要

本设计是一种基于传感器和单片机的数据采集系统,用于实现智能小车的自主循迹功能。采用反射式红外传感器来识别白色路面中央的黑色导引线,输出相应模拟电压信号,通过信号处理电路将模拟信号转化为可供单片机识别的数字信号;采用反射式激光传感器来判断小车前方一定距离处是直道还是弯道,并直接输出相应的数字信号;采用STC89C52RC单片机作为主控器,对采集到的信号予以分析判断,并控制小车产生相应的动作。

经过总体方案设计、硬件选择、程序编写以及实际调试后,最终的测试结果表明,该数据采集系统工作稳定,算法可靠。

关键词:数据采集系统;传感器;单片机;循迹

I

沈阳理工大学学士学位论文

Abstract

This design is a data acquisition system based on sensors and Single-Chip Microcomputer, it is used to realize the function of tracking line for the intelligent vehicle. The reflecting infra-red sensors are used to identify the black guiding line in the center of the white road, they output corresponding analog voltage signals which will be transformed into digital signals by the signal processing circuit, then the Single-Chip Microcomputer can read the digital signals. The reflecting laser sensor is used to judge that if the road in front of the car is curve or straight, it outputs a corresponding digital signal. The Single-Chip Microcomputer STC89C52RC is used to analyze the signals acquired and control the intelligent vehicle to move accordingly.

After designing the overall solutions, choosing the hardware devices, writing the program, and the actual debugging, the final testing result shows that the system works stably and the program runs reliably.

Key words: data acquisition system; sensor; Single-Chip Microcomputer; tracking line

II

沈阳理工大学学士学位论文

目录

摘 要 ........................................................................................................................................... I Abstract ....................................................................................................................................... II 1 绪论 ..................................................................................................................................... 1

1.1 选题的背景和意义 .................................................................................................... 1 1.2 发展现状与趋势 ........................................................................................................ 1 1.3 本论文主要研究内容 ................................................................................................ 2 2 总体方案 .............................................................................................................................. 3

2.1 底盘的选择 ................................................................................................................ 3 2.2 智能车整体模块设计 ................................................................................................ 5 2.3 信息采集模块设计 .................................................................................................... 5

2.3.1 如何判断车头位置 .......................................................................................... 6 2.3.2 如何判断弯道直道 .......................................................................................... 8 2.3.3 如何判断十字路口 .......................................................................................... 9

3 硬件设计 ............................................................................................................................ 10

3.1 传感器的选择及改进 .............................................................................................. 10

3.1.1 四路红外传感器 ............................................................................................ 10 3.1.2 一路激光传感器 ............................................................................................ 13 3.2 信号处理电路的设计 .............................................................................................. 14 3.3 单片机最小系统设计 .............................................................................................. 17

3.3.1 供电电路 ........................................................................................................ 17 3.3.2 振荡电路 ........................................................................................................ 18 3.3.3 复位电路 ........................................................................................................ 19 3.4 硬件的安装 .............................................................................................................. 19 4 软件设计 ............................................................................................................................ 22

4.1 主函数流程 .............................................................................................................. 22 4.2 循迹流程 .................................................................................................................. 23 4.3 调速流程 .................................................................................................................. 24 4.4 程序的烧录 .............................................................................................................. 24

4.4.1 程序烧录的前提 ............................................................................................ 25 4.4.2 烧录步骤 ........................................................................................................ 25

5 系统调试与改进 ................................................................................................................ 27

5.1 车模测试 .................................................................................................................. 27 5.2 激光传感器测试 ...................................................................................................... 27 5.3 红外传感器测试 ...................................................................................................... 28 5.4 简单循迹测试 .......................................................................................................... 29 5.5 调速循迹测试 .......................................................................................................... 29 5.6 最终循迹测试 .......................................................................................................... 29 6 结论 .................................................................................................................................... 31 致 谢 ........................................................................................................................................ 32

III

沈阳理工大学学士学位论文

参考文献 .................................................................................................................................. 33 附录A 英文原文 .................................................................................................................. 34 附录B 中文翻译 .................................................................................................................. 38 附录C 测试程序 .................................................................................................................. 46

C.1 车模测试程序 ......................................................................................................... 46 C.2 激光传感器测试程序 ............................................................................................. 47 C.3 循迹测试程序 ......................................................................................................... 48

C.3.1 简单循迹测试程序 ....................................................................................... 48 C.3.2 调速循迹测试程序 ....................................................................................... 50 C.3.3 最终循迹测试程序 ....................................................................................... 53

附录D 跑道 .......................................................................................................................... 59

D.1 跑道A ..................................................................................................................... 59 D.2 跑道B ...................................................................................................................... 59

IV

沈阳理工大学学士学位论文

1 绪论

1.1 选题的背景和意义

智能车在生活中有着广泛的应用,例如自动化生产线上的物料陪送机器人,医院的机器人护士,商场的导游机器人等[1]。循迹小车是智能小车的一种,它属于机器人的范畴。2006年8月20-21日在清华大学成功举办了由清华大学承办、“飞思卡尔”公司协办的第一届“飞思卡尔”杯全国大学生智能汽车邀请赛。赛后队员们反映热烈,众多媒体竞相报导[2]。近些年来,循迹小车的身影频频出现在一些电子设计大赛上,循迹小车渐渐开始大出风头。

循迹小车是一个集环境感知、规划决策、自动行驶等功能于一体的综合控制系统,它应用了微处理器、传感器、自动控制、测量控制、信息处理、机械设计、模式识别等技术[3],完整地体现了探测、制导、控制整个体系,很好地联系了探测制导与控制技术专业所学的课程知识,如自动控制原理、控制电机、传感器技术基础、探测与识别基础、嵌入式原理与基础、计算机语言、数字电子技术、数字信号处理、伺服系统等等课程。将循迹小车的工作原理搞明白,并且在现有某些产品的基础上利用所学知识去做一些改进创新,这样的实际联系理论,对于加强自己专业知识是大有裨益的。并且透过整个设计过程,可以更好地了解产品的开发思路,对于将来的学习和发展也是十分有益的。

1.2 发展现状与趋势

在我国,各地的大学也在广泛地开展智能小车的研究。清华大学汽车研究所是国内最早成立的主要从事智能汽车及智能交通的研究单位之一,在主动避撞、车载微机、汽车导航等领域有广泛而深入的研究。吉林大学(原吉林工业大学)在1992年就开始了智能小车的研究,其中自主研发的图像识别自动引导小车为我国提供了一种新型的自动引导车辆系统,为我国生产组织模式向柔性或半柔性生产组织转化提供了有意义的技术支撑和关键设备。吉林大学先后研制出4代JUTIV-3型实验型视觉导航小车,现已进入商品化开发阶段[4]。中国“一汽”集团和国防科技大学联合研制了 CITAVT型自主导航车,并已经开发到第四代,此型号的智能车在长沙市绕城公路上进行了自主试验,最高车速

1

沈阳理工大学学士学位论文

可达75.6 km/h,并具备超车功能,其技术性能指标已经达到了世界先进水平[5]。沈阳新松机器人自动化股份公司研制出的智能机器人名叫“亮亮”,身高0.8米,体重25公斤,釆用锂电池和铅酸电池作为电源,可以持续运行12小时。它具备教育、娱乐、安全和个人助理四大功能,可以自动行走并能智能躲避障碍物,联网后还可以下载新闻、天气预报等,并能接受语音指令并做出相应反馈[6]。2006年,我国开始举办“飞思卡尔”全国智能小车竞赛,该赛事是由教育部高等学校自动化专业教学指导委员会主办,在飞思卡尔半导体公司资助下举办的[7]。2013年8月25日第八届“飞思卡尔杯”智能汽车竞赛全国总决赛上,冠军小车最终以24.807秒跑完100米的成绩成为全国“跑得最快”的小车。

目前,智能小车的研究呈现出新的特点。首先,随着计算机硬件技术的提高,硬件结构由最初的专用板卡或芯片逐渐向通用板卡或芯片过渡,为了提高运算速度,出现了专用的运算指令[8]。其次,在控制系统方面,随着网络的发展和传输速度的提高,出现了基于网络传输信号控制的智能小车,而不再是以往一成不变的“单机式”控制模式[8]。而且,在探测技术方面,由简单的红外探测、电磁探测过渡到激光探测、摄像头探测等,采集的信息更丰富,前瞻性更好,也更加稳定[9]。

1.3 本论文主要研究内容

国内智能循迹小车已经发展到较高的水平,但由于资金和研究水平有限,本论文只针对一般循迹小车的“信息采集”方面,做了一些研究学习,以及改进。

本论文第一章对智能小车的发展历史和趋势做了简单介绍,也说明了一下本次毕业设计的主要任务。第二章介绍了小车整体的设计,包括底盘和信息采集模块等。第三章重点说明了信息采集模块的硬件部分。第四章具体讲述了对信息采集模块的算法,相当于软件部分。第五章具体说明了对信息采集系统实物的实际调试与测试过程。

2

沈阳理工大学学士学位论文

2 总体方案

2.1 底盘的选择

目前常见的可供选择的车模底盘主要有以下三种:三轮、四轮驱动、四轮舵机。 三轮车模底盘,如图2.1所示,主要由两个动力标准轮差分驱动对称放置,辅助一个小脚轮支撑,这是目前小车中最多的形式之一,有的用前面的球形万向轮来代替小脚轮,或者干脆用半个圆的支点当作万向轮使用[10]。

图2.1 三轮车模底盘

其实物如图2.2所示。

图2.2 三轮车模底盘实物

这种底盘的优点是转弯灵活、效率高,缺点是走直线难。走直线的前提是保持两个差分驱动轮的速度一样,略有差异就会造成转向。而作为支撑的万向轮则无侧向阻力,不能抵消驱动速度差产生的转向力,除非使用固定标准轮作为支撑,但那样又将使转向变得困难,可控性变差。考虑到要使小车能快速沿直线循迹,本次设计放弃了这种方案。

四轮驱动底盘,主要有两种,如图2.3所示。

3

沈阳理工大学学士学位论文

图2.3 四轮驱动底盘

左边这个“四驱底盘”结构上还是比较精致的,需要两套直角齿轮传动机构,在机械上有些技术含量。右边这类“四驱底盘”就简单多了,直接用四个减速电机固定在一块板上即可,机构上基本没有技术含量,方便手工制作,但要做到控制自如并非易事。

针对上面这两种“四驱底盘”分析:当其采用两侧方向相反、转速相同驱动时,可实现原地转向,此时车轮的运动轨迹是沿着车轮轴向滑动形成一个圆形。仔细分析此时和地面的关系,车轮在滚动方向上也是处于打滑状态,如果车轮与地面之间的摩擦力较大,电机的负荷会很大,能量都消耗于克服摩擦力,驱动效率极低,对车胎磨损也较大。然而这种底盘的优点也比较突出,走直线时效果会比较好。

四轮舵机底盘是性能最好的一种底盘了,和汽车类似,以第七届飞思卡尔比赛的C车模为例进行一下说明,如图2.4所示。

图2.4 四轮舵机底盘

这种车模底盘的后两轮同轴,由直流电机直接驱动,为小车提供前进动力,能保证小车两侧速度相同;前两轮由舵机控制,左右偏转,能提供强大的侧向阻力;前、后轮组之间有悬挂系统,确保小车在常规跑道上不会出现轮子悬空的状态。这种小车底盘高效、快速又不失灵活与稳定,是追求速度与机动性的最佳选择。但是同样的,造价高昂

4

沈阳理工大学学士学位论文

便成了它最大的缺点,这种车模底盘的价位至少要在600元以上。

综合经济能力、底盘性能等等因素,本次设计选择了四轮底盘中采用四个电机的类型,即四轮驱动型底盘。

2.2 智能车整体模块设计

基于底盘之上,智能车整体主要由三个模块组成,即:信息采集模块、信息处理模块、驱动模块。整个系统的工作原理大致如下图2.5所示。

图2.5 智能车整体模块

其中,信息采集模块通过传感器以及处理电路来采集处理小车相对于理想轨迹的位

置信息。信息处理模块将采集到的位置信息与理想轨迹比较,经过分析判断,控制驱动模块。驱动模块根据驱动信号控制小车的电机,从而进行相应的动作,得到小车相对于轨迹的一个新的位置。最后通过系统经过不断的探测识别与控制使小车稳定的行驶在黑色引导线上。

2.3 信息采集模块设计

作为本次毕业设计的主要研究对象,信息采集模块是整个循迹小车系统中的首要模块,它相当于小车的眼睛,有着至关重要的作用。下面讲述一下本次毕业设计中对信息采集模块的设计。

本次循迹小车信号采集模块的任务有三个:一是判断小车车头相对于黑色导引线的位置(如果不偏离黑色导引线就继续直走,如果左偏了就向右调整,如果右偏了就向左调整);二是判断小车前方是直道还是弯道(如果前方是直道小车就以快速模式行驶,如果前方是弯道小车就以慢速模式行驶);三是判断出“8”字型交叉路口,即十字路口。

5

沈阳理工大学学士学位论文

2.3.1 如何判断车头位置

为了完成第一个任务,本次设计使用的方法是:在小车车头部分放置四个传感器,传感器对黑白路面能有不同的反应结果,通过判断反应结果,我们可以知道车头相应车道的位置。

当小车车头在路面中间时,传感器1、2、3、4显示全部是白色跑道,如图2.6所示。此时,小车往前直走即可。

图2.6 车头在路面中间的情况

当小车车头向右侧偏离路面时,传感器2显示黑色路面,而传感器1、3、4显示白色路面,如图2.7所示。此时,小车往左行驶即可。

图2.7 车头右侧偏离路面的情况

6

沈阳理工大学学士学位论文

当小车车头向左侧偏离路面时,传感器3显示黑色路面,而传感器1、2、4显示白色路面,如图2.8所示。此时,小车往右行驶即可。

图2.8 车头左侧偏离路面的情况

当然,这三种情况是针对小车遇到直道或者曲率半径较大的弯道(不是“急”转弯)。然而,当小车遇到较“急”的弯道时,传感器1和4就派上用场了。

当小车碰到很急的左弯道时,小车严重向右侧偏离路面,传感器1、2检测到黑色路面,说明小车已经往右偏很多了,如图2.9所示。这时,告诉小车快速左转即可。

图2.9 车头严重向左偏离路面的情况

当小车碰到很急的右弯道时,小车严重左侧偏离路面,传感器3、4检测到黑色路面,说明小车已经往左偏很多了,如图2.10所示。这时,告诉小车快速右转即可。

7

沈阳理工大学学士学位论文

图2.10 车头严重向右偏离路面的情况

所以,本次设计中使用了四个传感器而不是两个传感器,这样的设计能够保证小车适应更复杂的弯道。

2.3.2 如何判断弯道直道

为了完成第二个任务,考虑使用能检测到小车前方“一定距离”的传感器,使得小车能提前预知前方路况,从而判定小车前方是弯道还是直道。

当小车车头前方是直道时,传感器5检测到黑色路面,如图2.11所示。

图2.11 前方是直道的情况

8

沈阳理工大学学士学位论文

小车以快速模式行驶即可。同理,当小车过完弯道之后又恢复到直道上时,传感器5再次检测到黑色路面,再切换回到快速模式行驶即可。

当小车车头前方是弯道时,传感器5显示白色路面,如图2.12所示。小车提前切换到慢速模式行驶即可。同理,当小车在弯道中行驶时,传感器5还是显示白色路面,依旧以慢速模式行驶即可。这就保证了小车在弯道前以及弯道中都以稳定的、较慢的速度前进。

图2.12 前方是弯道的情况

2.3.3 如何判断十字路口

判断十字路口不需要添加新的传感器来实现,依旧利用车头的四个传感器就可以实现。

不难分析出,当传感器1、2、3、4都检测到黑色路面时,就表明车头到达十字路口位置了,此处不再赘述。此时只要命令小车继续前进即可。

9

沈阳理工大学学士学位论文

3 硬件设计

有了总体方案设计,接下来要落实到实际物体,即硬件设计。

本章分四小节:第一小节介绍传感器的选择;第二节介绍传感器产生的信号的处理;第三节介绍处理好信号要输入的单片机系统;第四节介绍如何将这三个模块的实物安装起来。(单片机处理完输入信号后还得输出控制信号,再控制驱动电路来驱动电机。由于控制部分不是本论文的主要研究对象,这里就不多做介绍。)

3.1 传感器的选择及改进

第二章中,我们一共提及了五个传感器,本小节主要介绍这五个传感器。其中,车头选用四个相同的传感器,车前方“一定距离”用一个单独的传感器,接下来我们分别介绍。

3.1.1 四路红外传感器

为了实现任务一、任务三,需要引进“四个对黑白路面有不同反应结果的”传感器。这里有两种方案可行:方案一是利用发光二极管与光敏电阻搭配,形成一组发射—反射—接收装置;方案二是利用红外光发射管与红外接收管搭配,形成一组发射—反射—接收装置。

方案一的电路图如图3.1所示:

图3.1 方案一的电路图

其中:

D1—发光二极管,实际电路中可用5mm直径的常规发光二极管,主要负责向跑道

10

沈阳理工大学学士学位论文

发射可见光;

R3—光敏电阻,主要负责接收从跑道反射过来的可见光,然后产生相应的电阻值; R2—可调电阻,通过调整其大小可以改变p1节点的电压,使其成为一个适当的值,

即使得OUT1输出一个比较合理的电压进行下一步的比较;

C1—电容,主要作用是并联在发光二极管两端吸收冲击电压,保护二极管(由于各

种原因,线路中可能偶然会存在电压很高,时间很短的冲击电压,很容易击穿二极管。而电容两端电压不会瞬间变化,所以加上电容后能防止二极管被击穿)。

这里介绍一下这个方案中的核心器件—光敏电阻。光敏电阻又称光敏电阻器或光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。简单说,光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,又称为光电导探测器;入射光强,电阻减小,入射光弱,电阻增大[11]。

总的来说,该套装置与相应的信号处理电路搭配,可以作为简单循迹小车检测黑白跑道的开关,控制两边电机运行或停机,从而达到循迹的效果。如图3.2所示:

图3.2 某循迹小车的探测部分

方案二的电路图如图3.3所示:

图3.3 方案二的电路图

11

沈阳理工大学学士学位论文

其中:

D1—红外发射管,发射不可见的红外光,主要负责向跑道发射红外光;

D2—红外接收管,主要负责接收从跑道反射回来的红外光。当D2接收到反射回的

红外光时,D2导通,电阻几乎很小,此时输出电压值很小(相当于测一段导线的电压);当D2接收不到反射回的红外光时,D2产生很大阻抗,电压表测量的阻值可达500K欧以上,此时测得D2两端电压就比较接近电源电压了(因为R2的阻值相对D2来说很小)。 这里介绍一下红外发射管和红外接收管。

红外发射管也称红外线发射二极管,属于二极管类。它是可以将电能直接转换成近红外光(不可见光)并能辐射出去的发光器件,主要应用于各种光电开关及遥控发射电路中。红外线发射管的结构、原理与普通发光二极管相近,只是使用的半导体材料不同。红外发光二极管通常使用砷化镓、砷铝化镓等材料,采用全透明或浅蓝色、黑色的树脂封装。红外发射二级管由红外辐射效率高的材料(常用砷化镓、砷铝化镓等材料)制成PN结,外加正向偏压向PN结注入电流激发红外光。光谱功率分布为中心波长830~950nm,半峰带宽约40nm左右,它是窄带分布,为普通CCD黑白摄像机可感受的范围。其最大的优点是可以完全无红暴,(采用940~950nm波长红外管)或仅有微弱红暴(红暴为有可见红光)和寿命长。

红外线接收管是将红外线光信号变成电信号的半导体器件,它的核心部件是一个特殊材料的PN结,和普通二极管相比,在结构上采取了大的改变,红外线接收管为了更多更大面积的接受入射光线,PN结面积尽量做的比较大,电极面积尽量减小,而且PN结的结深很浅,一般小于1微米。红外线接收二极管是在反向电压作用之下工作的。没有光照时,反向电流很小(一般小于0.1微安),称为暗电流。当有红外线光照时,携带能量的红外线光子进入PN结后,把能量传给共价键上的束缚电子,使部分电子挣脱共价键,从而产生电子—空穴对(简称:光生载流子)。它们在反向电压作用下参加漂移运动,使反向电流明显变大,光的强度越大,反向电流也越大。这种特性称为“光电导”。红外线接收二极管在一般照度的光线照射下,所产生的电流叫光电流。如果在外电路上接上负载,负载上就获得了电信号,而且这个电信号随着光的变化而相应变化。红外线接收管有两种,一种是光电二极管,另一种是光电三极管。光电二极管就是将光信号转化为电信号,光电三极管在将光信号转化为电信号的同时,也把电流放大了。这里我们

12

沈阳理工大学学士学位论文

使用的是光电三极管,与光敏二极管相比,它具有很大的光电流放大作用,即很高的灵敏度。

总的来说,该套装置与信号处理电路搭配,可以检测黑白跑道,并且输出相应的高低电平,从而告诉单片机车头相对于黑白跑道的位置。

综合分析一下:方案一易受可见光影响,更有可能出现误判的情况,而且稍显复杂。方案二简单小巧,可靠度更高。所以综合考虑后,我们这里选择了方案二。

3.1.2 一路激光传感器

为了实现任务二,需要引进一个距离车头“一定距离”的传感器。这里我们也有两种实现方案。方案一还是利用一路红外传感器,但需要使用支架将其平稳可靠的安置在车头正前方“一定距离”处;方案二是使用激光传感器,只需将传感器安置在车头位置,将激光斑点打到小车正前方一定距离即可。两种方案均可实现检测弯道直道的功能。

方案一中,红外传感器在上文中已经有介绍。这种方案成本较低,但是结构略显得冗杂,需要可靠、结实的支架,对机械结构和材料的要求较高。而且头部可能会触碰到其他物体,在调试过程中难免会有传感器和支架受伤的情况。并且这种方案对信号处理电路又有要求,使得只能处理四路输入信号的信号处理电路“吃不消”了(车头位置已经有四个红外传感器的信号需要处理)。

所以综合考虑,我们选用了方案二,激光传感器,下面着重介绍一下。 方案二中,使用的是激光传感器,整个模块的电路图如图3.4所示。

激光传感器由两部分构成,一部分为发射部分,一部分为接收部分。发射部分由一个振荡管发出180KHz频率的振荡波后,控制三级管U12不断通断,从而使得发射管L11能以相应频率发射出激光。而三极管U11放大电流后,才能驱动激光管发光。接收部分由一个相匹配的180KHz频率的接收管接收返回的光线,经过电容滤波后直接接入单片机的I/O口上。由于激光传感器使用了调制处理,接收管只能接收相同频率的反射光,因而可以有效防止可见光对反射激光的影响。另外,配合大透镜使用,接收效果和抗干扰能力更强。激光传感器还有一个很重要的优点,就是省去了信号处理,可直接接入单片机。

13

沈阳理工大学学士学位论文

图3.4 激光传感器电路图

3.2 信号处理电路的设计

单片机所能识别的信号只有二近制码(1,高于3.5V的电平;0,低于0.4V的电平);有的内带AD转换器功能的芯片还能识别模拟量(如声音、电压、电流、频率等模拟量)。本次毕业设计使用的是STC89C52RC单片机,属于不含AD转换器功能的芯片,所以只能识别TTL信号。所以针对我们传感器输出的信号,我们有必要对其进行信号处理,以避免造成一些逻辑混乱导致系统运行不了的问题。

这里,我们先来了解一下TTL电平信号。

TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑“1”,0V等价于逻辑“0”,这被称为TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。TTL电平信号对于计算机处理器控制的设备内部的数据传输是很理想的,首先计算机处理器控制的设备内部的数据传输对于电源的要求不高以及热损耗也较低,另外TTL电平信号直接与集成电路连

14

沈阳理工大学学士学位论文

接而不需要价格昂贵的线路驱动器以及接收器电路;再者,计算机处理器控制的设备内部的数据传输是在高速下进行的,而TTL接口的操作恰能满足这个要求。TTL通信大多数情况下,是采用并行数据传输方式,而并行数据传输对于超过10英尺的距离就不适合了。这是由于可靠性和成本两面的原因。因为在并行接口中存在着偏相和不对称的问题,这些问题对可靠性有影响。TTL输出高电平大于2.4V,输出低电平小于0.4V。在室温下,一般输出高电平是3.5V,输出低电平是0.2V。最小输入高电平和最大输入低电平,输入高电平大于等于2.0V,输入低电平小于等于0.8V,噪声容限是0.4V。

本次设计中使用的激光传感器,经过测试,其产生的输出信号是直接可以接入单片机进行处理的,满足TTL电平的要求,不需要进行信号处理。

而对于红外传感器输出的电压进行测试,得到的结果是0~5V范围内的任意电压值,这样的信号是不能直接输入单片机进行处理的。所以这里必须使用信号处理电路对传感器的输出信号进行处理,使信号符合单片机的输入规格。在这里,我们使用四电压比较器LM339来实现这个功能。

首先让我们看看比较电路最基本的用法,如图3.5(a)所示,给出了一个基本单限比较器的电路。输入信号Uin,即待比较电压,它加到同相输入端,在反相输入端接一个参考电压(门限电平)Ur。图3.5(b)为其传输特性。

图3.5 基本的单限比较器电路

当输入电压Uin>Ur时,输出为高电平UOH。当输入电压Uin但是基本的单限比较电路中,如果输入信号Uin在门限值附近有微小的干扰,则输出电压就会产生相应的抖动(起伏)。这样的话也会给小车带来严重的副作用,即抖动严重,这是我们需要避免的问题。在电路中引入正反馈可以克服这一缺点。

如图3.6(a)所示,给出了一个迟滞比较器的电路,人们所熟悉“史密特”电路即是有迟滞的比较器。图3.6(b)为迟滞比较器的传输特性。

15

沈阳理工大学学士学位论文

图3.6 迟滞比较电路

不难看出,当输出状态一旦转换后,只要在跳变电压值附近的干扰不超过ΔU之值,输出电压的值就将是稳定的。但随之而来的是分辨率降低。因为对迟滞比较器来说,它不能分辨差别小于ΔU的两个输入电压值。迟滞比较器加有正反馈可以加快比较器的响应速度,这是它的一个优点。除此之外,由于迟滞比较器加的正反馈很强,远比电路中的寄生耦合强得多,故迟滞比较器还可免除由于电路寄生耦合而产生的自激振荡[12]。 最终,我们的信号处理电路如图3.7所示(只画了其中一路,其他三路一样,所以就不详细说明了)。

图3.7 信号处理电路

其中:

Q1—1/4路电压比较器,它用来比较同向输入端和反向输入端的电压值,然后最终

输出一个TTL逻辑电平;

R5—滑动变阻器,它是用来调整参考电压Ur 的,在后期的硬件安装和调试中,起

着重要作用;

R4—连在反馈电路中的正反馈环节,构成了迟滞比较器,使得输出的高低电平不会

抖动;

16

沈阳理工大学学士学位论文

R3、R6—上拉电阻,用来解决总线驱动能力不足时提供电流,保证电平能被拉高,

一般说法是上拉增大电流,下拉电阻是用来吸收电流。

最后,我们四路红外传感器输出的四路输出信号正好可以由一个LM339组成的信号处理电路解决,使得最后的输出信号逻辑清楚,而且没有抖动,很好的保证了系统的运行以及改善了小车的抖动,这一点是目前很多循迹小车不具备的。

3.3 单片机最小系统设计

单片机的最小系统的意思就是要让单片机里面的程序运行,需要的最小配置,就是单片机启动的必须条件。

单片机最小系统有三个部分组成:电源部分,时钟部分,复位部分。这三点就可以构成单片机的最小系统了,下面我们来分别介绍一下。

3.3.1 供电电路

对于一个完整的电子设计来讲,首要问题就是为整个系统提供电源,电源模块的稳定可靠是系统平稳运行的前提和基础。51单片机虽然使用时间最早、应用范围最广,但是在实际使用过程中,一个和典型的问题就是相比其他系列的单片机,51单片机更容易受到干扰而出现程序跑飞的现象,克服这种现象出现的一个重要手段就是为单片机系统配置一个稳定可靠的电源供电模块。此最小系统中的电源供电模块的电源可以通过计算机的USB口供给,也可使用外部稳定的5V电源供电模块供给。

这里我们使用如图3.8所示的供电电路。

图3.8 供电电路图

17

沈阳理工大学学士学位论文

电源电路中接入了电源指示LED即D1;图中R1为LED的限流电阻;D2 为二极管,与电容电阻一起构成滤波电路,使得输出电压稳定;LM1为芯片LM2956,是5V稳压芯片。

3.3.2 振荡电路

单片机系统里都有晶振,在单片机系统中,晶振的作用非常大,全称叫晶体振荡器,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片机的一切指令执行都建立在单片机晶振提供的时钟频率上。

在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。晶振用一种能把电能和机械能相互转化的晶体工作在共振的状态下,以提供稳定,精确的单频振荡。

单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。

晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。

STC89C52使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。这里我们使用的晶振电路图如图3.9所示。

图3.9 晶振电路图

18

沈阳理工大学学士学位论文

3.3.3 复位电路

单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。

单片机复位电路原理是在单片机的复位引脚RST上外接电阻和电容,实现上电复位。当复位电平持续两个机器周期以上时复位有效。复位电平的持续时间必须大于单片机的两个机器周期。具体数值可以由RC电路计算出时间常数。

复位电路由按键复位和上电复位两部分组成。

(1)上电复位:STC89系列单片及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为10K和10uF。

(2)按键复位:按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。

这里我们使用的复位电路如图3.10所示。

图3.10 复位电路图

3.4 硬件的安装

本章前三节分别对小车的传感器、信号处理电路、单片机这三个模块的硬件部分做了介绍,下面说明一下这几个部分的安装过程。

首先是底盘和红外传感器的安装,如图3.11所示。

19

沈阳理工大学学士学位论文

图3.11 安装底盘和传感器

接下来是将红外传感器的信号接入到信号处理电路,所以我们接下来安装信号处理电路,并将传感器与信号处理电路连接起来,如图3.12所示。

图3.12 安装信号处理电路

接下来,处理完的信号要接入单片机系统,所以,接下来我们安装的是单片机的最小系统,并将信号处理电路与单片机连接起来,如图3.13所示。

图3.13 安装单片机系统

20

沈阳理工大学学士学位论文

再接下来,单片机处理完输入信号后,要输出控制信号给驱动模块。所以,要将驱动模块安上,并将其与单片机连接起来,如图3.14所示。

图3.14 安装驱动模块

最后,将激光传感器安装到车头,并将其与单片机系统连接起来,如图3.15所示。

图3.15 安装激光传感器

小结:硬件实现大概如此,细节上我们做了一些改变。

将红外传感器的接收管周围裹上黑色胶布,避免发射管从侧面发射过来的红外光对接收管的影响;在激光传感器的发射管上裹上胶带,防止手上的静电破坏发射装置;将众多混乱的导线整理清楚,按组按模块分开,用胶带裹一起,四对电机线组标上相应的序号,避免混乱;将电源的引接线延长一些,否则太短,每次都要把电池拆出来再充电,很不方便;还有调整四组红外传感器的位置,这需要在调试过程中不断改变位置,以寻找最佳的位置和间距等。总之,实际安装要注意很多实际问题,要做到精益求精。

21

沈阳理工大学学士学位论文

4 软件设计

软件编程是一个系统的灵魂,是循迹小车的思考方式。为了便于调试以及使得结构

明朗,本次设计中小车的程序分为主函数、循迹函数、调速函数三个部分[13]。

本章主要分四小节来介绍小车程序的流程:第一节,介绍了系统整体的运行思路,即主函数流程;第二节,介绍了整个程序中核心的循迹的思路,即循迹流程;第三节,介绍系统是如何完成调速的,即调速流程;第四节,介绍了程序的烧录,即将程序导入单片机的过程。

4.1 主函数流程

主函数的流程图如图4.1所示。

图4.1 主流程图

22

沈阳理工大学学士学位论文

4.2 循迹流程

小车开始循迹后,不断循环扫描单片机接收信号的I/O口,一旦检测某个I/O口有信号,就进入判断处理程序,先确定四个传感器中的哪一个探测到了黑线,如果左边第一级传感器探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时让小车左转;如果是右边第一级传感器探测到黑线,即小车右半部分压到黑线,车身左偏,此时让小车右转。经过了方向调整后,小车继续前行,并不断重复上述动作。

循迹流程图如图4.2所示。

启动循迹模式探测黑线N是否检测到黑线Y判断处理程序向左转Turn_left2向左转Turn_left1向右转Turn_right1向右转Turn_right2继续前进

图4.2 循迹流程图

其中左转和右转各分成了两级,即turn_left1,turn_left2,turn_right1,turn_right2。其中第二级是第一级的后备,它在超出第一级控制范围的情况下发生作用,也是最后一

23

沈阳理工大学学士学位论文

层保护,所以必须保证能使小车回到黑色路面上来,所以要求第二级的转向力度要大于第一级的转向力度(这里我们用下面的调速部分实现)。

4.3 调速流程

本次设计的调速对象是四个直流电动机。随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控型的开关功率元件进行脉宽调制PWM控制方式已成为主流[14]。本次设计使用单片机产生PWM信号控制驱动芯片,从而达到调速的效果。调速的流程图如图4.3所示。

图4.3 调速流程图

4.4 程序的烧录

程序编完之后,最后要做的就是将写完的程序导入到单片机中,这就是我们接下来要介绍的程序烧录。

24

沈阳理工大学学士学位论文

4.4.1 程序烧录的前提

程序烧录需要:烧录器,单片机,程序下载线,电脑,烧录软件。

本次设计使用单片机开发板作烧录器,给单片机烧入程序;开发板赠有程序下载线,下载比较简单可靠;单片机和电脑也是此次设计所必须的;烧录软件使用STC-ISP(4.8版本)。

4.4.2 烧录步骤

下载并安装STC-ISP(可以在西西软件网上下载到,直接解压即可使用,不需要安装)。

将单片机插入开发板(注意一下方向),然后用程序下载线把开发板与电脑连接在一起,打开烧录软件。

第一步,在MCU Type中选择单片机类型(这里我们选用的是STC89C52RC),如图4.4所示。

图4.4 烧录过程

第二步,点击“打开程序文件”,选择要烧录的hex文件。

25

沈阳理工大学学士学位论文

第三步,点击串口选择下拉菜单,选择串口(串口可以再设备管理器-端口中查看)。 第四步,设置选项(可以直接选用默认模式)。

第五步,点击下载,此时会提醒给MCU上电,这时给单片机上电(如果此前单片机已经上电了,断电后再上电)。

最后,下方的小窗口会提醒下载成功。

26

沈阳理工大学学士学位论文

5 系统调试与改进

5.1 车模测试

车模的测试的主要内容就是测试四个电机是否转向同步。直流电机本身没有正负极,如果将电源的正负极与直流电机相连,电机会往一个方向转动,如果将电源的正负极交换位置后再与直流电机相连,电机会往另一个方向转动。所以我们可以通过编程使得单片机输出相应的高低电平,驱动电机不同的端子,使得电机往期望的方向转动。

但是,当四个电机统一方向转动时,如果控制驱动的电平也存在相应的规律,这样会给我们的编程减少混乱,减少失误。例如,控制四个电机的两个驱动芯片上,有四组输入端口,即八个输入端子,当这八个端子的电平信号分别是10101010时,四个电机全部顺时针转动,保证小车往前,这样就方便编程;但如果4号电机的输入信号是01时它才是顺时针转动的,那么我们单片机就要输出10101001控制驱动芯片,这样的话,很容易在编程中发生错误。

调试过程中,我们使用一个简单的调试程序。这个程序主要控制使单片机输出10101010的控制信号给驱动芯片,观察四个电机的转动方向。实际调试中,发现2号、4号电机往后转动,1号、3号电机往前转动。这里,我们就把2号、4号电机的端子各自对换,再接入驱动模块的输出端口,再次启动调试程序时,四个电机全部往前转动,调试完成。为了方便以后的调试或者拆解安装,我们给四个电机的端子引出线上作标记,这样能清楚地知道线该接在驱动的相应位置。

接下来,我们稍改一下程序,就可检测四个电机是否完全可控。分别让单片机输出01010101信号、10100101信号、01011010信号,观察结果,小车分别产生后退、右转、左转的现象。到此为止,可以初步判断,小车基本可控。

最后,我们检查一下小车的安装是否紧凑,轮子是否共面等细节问题。

5.2 激光传感器测试

激光传感器测试主要就是测试它输出的电压随反射激光的变化情况以及测试它的有效检测距离。

激光传感器主要由三个端子,电压端,接地端,信号输出端。另外有一个激光亮度

27

沈阳理工大学学士学位论文

调节的滑动变阻器。

首先,测试输出信号随反射激光的变化情况。将激光传感器的电压端和接地端连接好,可以看到激光传感器发出激光。然后将万用表调到相应的电压档位,测试激光传感器的信号输出端。接下来,调整激光头,使得激光打在不远处的白色路面上,测得激光传感器的输出信号为0V左右;再调整激光头,使得激光打在不远处的黑色路面上,测得激光传感器的输出信号为5V左右。这样的电压信号对于单片机来说是比较容易识别的TTL信号。

接下来,我们编写简单的测试程序,让单片机判断激光传感器输出的数字信号并控制1号电机产生相应的动作(例如,单片机判断接收到的信号是0时,输出控制信号控制电机转动,单片机判断接收到的信号是1是,输出控制信号控制电机停止)。然后利用贴有黑色胶带的白纸去试探激光传感器打出的斑点,这样可以确保电机受到激光传感器的控制,并且可以试探出传感器的有效探测距离(约为80厘米左右)。这样,我们选取一个可靠的探测距离,并将激光调整到一个适合的亮度,就可以确保激光传感器可靠稳定的工作了。

5.3 红外传感器测试

红外传感器一共有四个,每个传感器都有三个管脚:一个电压输入端,一个接地端,一个输出信号输出端。给传感器供电后,用万用表对传感器的输出端进行测试,当传感器离白色跑道较近时发现电压表显示电压在0V左右;当传感器离白色跑道较远时电压表显示电压在4.5V左右;当传感器离白色路面不近不远时,电压在两者之间,这是合理的电压范围。

但是这样的信号不可以直接输入单片机,我们必须测试信号处理电路的处理情况是否合格。处理电路上有四个指示灯,我们通过观察指示灯的明暗即可判断输出的是高电平还是低电平(传感器照在白色跑道上,接收管能接受到信号,处理电路中对应的小灯会亮;传感器照在黑色跑道上,接收管接受不到信号,处理电路中对应的小灯不亮)。

对于单纯的黑白路面,四个传感器的输出信号经过处理之后都能很明确并正确的反应出结果(白色路面灯亮,黑色路面灯不亮)。但是,实际铺设的白色路面较窄,在过部分弯道的过程中,边缘的传感器会探测到灰色的水泥路面上来,这时候的反应结果有些混乱,所以在过这些弯道时,车会有异常的“举动”。这里,我们调整信号处理电路

28

沈阳理工大学学士学位论文

上的4个滑动变阻器,使得4个红外传感器对灰色水泥路面的反应结果与他们对白色跑道的反应结果一致(即调高了传感器的敏感度,使得其将灰色水泥地判断为白色路面)。

通过这些调试与改进,小车在实际中运行的更加稳定了。

5.4 简单循迹测试

系统硬件搭建好了,程序也编写完并烧入单片机了,就要测试系统的实际运行了。 首先,我们选用一个简单的跑道和一个简单的循迹程序,看看小车能运行到何种程度。这里选的跑道是附录中的跑道A,程序是附录中的简单循迹测试程序。结果小车运行的不是很理想,左右抖动很厉害,并且常常冲出跑道。这里我们做一些小改进,将挨着黑色引导线的两个传感器之间的距离稍微调大一点,这样就不会出现小车刚拐弯另一侧的传感器就又压线的情况了(最终的传感器之间的距离是要经过多次试验来取到较合适的值的)。

抖动的问题解决了,但冲出跑道的问题,还得通过调速来解决。

5.5 调速循迹测试

在简单跑道中,小车常常冲出跑道,车速过快是一个主要原因。这里我们在程序中加入调速部分,给小车降降速度,再让其循迹。依然选用跑道A,程序选用调速循迹测试程序。测试效果良好。

然后还是使用调速循迹测试程序,选用跑道B。这时,小车还是会冲出跑道,因为明显可以看出,跑道B的弯道更“急”一些。这时候,将小车再调到一个很低的速度循迹,是可以完成任务,但是车的速度太慢了,根本无法突出采用四驱底盘的优势(尤其是在直线上行驶时)。

稳定过弯的问题解决了,但速度太慢、速度模式单一、小车不能主动调速又成为了新的问题。这些,需要通过增强信息采集系统来解决。

5.6 最终循迹测试

小车不能自主调整速度,比较死板,是其不能提前判断弯道与直道造成的,即信息采集系统的功能不够强大的原因。为了解决这个问题,我们引入激光传感器,作为弯道

29

沈阳理工大学学士学位论文

与直道的“判断器”,给小车提供一个重要信息。

测试过程中,采用跑道B,最终循迹测试程序。但问题又出现了,由于激光传感器前瞻较远,难免会将光斑打在水泥地上,而水泥地不干净,有明有暗,所以激光传感器的结果有时很不稳定,并且误判。所以这里又作了些小改善:调整激光传感器的滑动变阻器,使得射出的光斑很亮,这样,即使照在灰色的水泥地上也是显示和照在白色路面上一样的结果。只有当激光打在黑色路面上时,小车才能保证前方是直道,采用高速模式行驶。再次测试时,小车运行状况良好。

30

沈阳理工大学学士学位论文

6 结论

本次课题主要研究的内容是智能循迹小车的信息采集系统。以四驱小车底盘为基础,采用了一个激光传感器和四个红外传感器来探测周围路况。取得了以下三点成果:首先,采用了红外传感器,使小车成功循迹,并且通过加装使用两个红外传感器后,小车能够通过不同曲率的弯道,循迹能力大大提高;其次,采用了激光传感器判断小车前方的路况,小车初步具备了识别弯道和直道的功能;最后,利用四个红外传感器和相应的处理程序,小车能够顺畅的通过十字型路口。

除了这些成果外,此次设计中还发现了一些可以改进的地方。主要总结为以下三点:首先,单个激光传感器识别不了弯道的弯曲程度,而且可能出现误判。这里可以使用多个激光传感器,这样可以更稳定的识别弯道,并且配合一定的算法后,可以判断弯道的弯曲程度,信息采集能力会更强大。其次,传统的8位单片机处理速度有限,小车应付很急的弯道时只能牺牲速度来慢慢通过。这里可以使用更高位的单片机,比如飞思卡尔公司的16位处理器,这样可以更快的处理采集到的信息,使小车可以更快的反应,小车的信息处理能力更强大。最后,要从根本上提高车速,除了改进信息采集系统,还需要配合以结构更合理的底盘,这样会更加的完美。

31

沈阳理工大学学士学位论文

致 谢

本次毕业设计是在刘忠淳老师的指导下完成的。整个设计过程中,刘老师指导我选题,教我查找资料的方法,和我一起讨论方案,给我的论文提建议与指正,向我提供了很多的辅导和帮助。而且还教导我和其他同学,要创新,要有自己的东西,即使是简单的事情,只要是真的弄明白了或者实际动手尝试了,就很好。在这里感谢刘老师耐心的教育,感谢刘老师细心的辅导,感谢刘老师。

本次毕业设计用到了很多以前学过的课程知识,没用这些专业基础知识,我不可能很好的完成这次设计。所以,感谢探测制导专业的老师们,你们教给了我知识,让我的大学更充实,谢谢你们。

最后,我想感谢我的家人和身边的朋友们,谢谢你们对我学习和毕业设计的支持,你们让我的大学更加完美。

32

沈阳理工大学学士学位论文

参考文献

[1] 韩毅,秦绪鑫,赵轩. 基于反射式黑白码盘的模型车测速装置[J].计算机工程与设

计,2009.3(24).

[2] 卓晴,黄开胜,邵贝贝.学做智能车—挑战“飞思卡尔杯”[M].北京航天航空大学出版

社.2007.

[3] 牛闯,王翰章,赵玉立.基于STC89C52单片机的循迹智能车控制系统设计[J].电脑知识

与技术.2013.4.

[4] 石振东,吕科,喻清洲.基于红外路径识别的智能车控制系统设计[J].湖北汽车工业学院

学报,2007,21(3): 11—14.

[5] 吴斌华,黄卫华,程磊.基于路径识别的智能车系统设计[J].电子技术应用,2007(3):

60-62.

[6] 王伟,陈慧,刁增祥.基于光电导航无人驾驶电动汽车自动寻迹控制系统研究[J].汽车工

程,2008,30(2): 137-140.

[7] Mao-Fu Lai,Chen Chang,Fuzzy Logic in The Phase-Locked Loop DC Motor Speed Control

System[J].IEEE Catalog Number: 97TH8280.

[8] 朱思敏.自循迹智能小车控制系统的设计与实现[D].浙江工业大学硕士学位论

文.2013:4-6.

[9] 闫熙,韩媞,高波等.摄像头智能循迹小车设计与实现[J].电子设计工程,2014,22(5):

181-186.

[10] 嵌入之梦.智能小车DIY攻略[J]电子制作.2011,12:9-25.

[11] 杨东,轩克辉,董雪峰.光敏电阻的特性及应用研究[J].山东轻工业学院报,2013,27(2):

49-52.

[12] 刁志.LM339四电压比较器集成块介绍[J].家电检修技术.2007.61.

[13] 陈忠平.基于Proteus的51系列单片机设计与仿真[M].第2版.电子工业出版

社.2012.1-2.

[14] 王晓明.电动机的单片机控制[M].第三版.北京航天航空大学出版社.2011:134-155.

33

沈阳理工大学学士学位论文

附录A 英文原文

34

沈阳理工大学学士学位论文

35

沈阳理工大学学士学位论文

36

沈阳理工大学学士学位论文

37

沈阳理工大学学士学位论文

附录B 中文翻译

基于红外光电传感器的自动寻迹智能车的测量

和控制方法

摘 要

该设计是一个自动循迹智能车系统。在本设计中,将简化了的外部轨迹动态模型作为内嵌模型。为了确保模型扰动或随机干扰时的不确定性功能,从而保证智能车良好的质量,采用规定转向和速度的非线性控制器,来缩短智能车的响应时间。当容易产生振荡或缓慢的曲线出现问题时,增量算法采用变尺度非线性智能控制方案,以解决高速智能车走直线的问题,这种方案使得小车对斯迈尔偏差并不敏感,并且最终实现了小车自主循迹、快速移动的功能。实验结果表明,该系统可以很好地满足智能汽车的循迹要求,抗干扰能力强,速度调节响应时间快,稳态误差小,同时也具有良好的动态性能和鲁棒性能。

关键词:智能车;红外光电传感器;智能控制

B.1 绪论

智能汽车是一个高科技密集型的,在网络环境下的新型车辆。它是信息技术、智能控制技术、自动控制、模式识别、传感器技术、汽车电子、电气、计算机以及机械等多个学科的综合应用,是最新的科学与技术的研究成果。因此智能汽车具有自动识别道路、自动驾驶、自动调速等先进的特点。随着控制技术、计算机技术以及信息技术的发展,智能车辆在工业生产和日常生活中逐渐起到了重要的作用。近年来,智能汽车在道路、现代物流、柔性制造系统领域得到了广泛地应用,并且已成为研究和开发的热点领域

[1-5]

根据参考文献可知,采用CCD摄像头,红外感应器,激光,超声波等方法的车辆

自动识别系统可实现不同的功能,。近年来,随着科学技术的发展,人们对智能车辆认识和智能车辆的功能都不断深化,但若实现实际应用,还有很多工作要做。

本次设计是一个微型自动识别智能车竞赛系统。该系统控制的核心模块采用飞思卡

38

沈阳理工大学学士学位论文

尔的HCSl2系列16位微控制器,道路信息是由安装在智能车前部的红外线传感器采集。通过控制策略和算法穿越路径给伺服的方向和速度的控制信息,使得智能汽车可以准确地自动识别直线、蛇线、尺寸与方向,并最终将行驶在自定义的路线上。系统是基于代码战士集成开发环境,使用混合C语言和汇编语言来完成的编程。

B.2 智能汽车控制系统组件

该系统的硬件组成,以飞思卡尔的16位微处理器MC9S12DG128为核心的控制单元。从电源模块、主控制器模块、路径识别模块、车速检测模块、伺服控制模块和直流驱动电机控制模块如图B.2.1所示。

图B.2.1 系统框图

道路识别是通过安装在车辆前部的红外光电传感器阵列实现,经过选频波电路,微控制器对信号进行处理,并通过光编码收集汽车的速度信息。之后根据内部确立的原则模型控制算法,通过输出驱动器模块发出两路PWM波,分别控制转向主操舵装置和电机,完成智能车的功能引导、前进和刹车。供电模块由若干独立的供电电路组成。在这个体系中,除了马达驱动模块和伺服驱动器模块从电池直接供电,每一个模块的操作电压的其余部分通过电源管理芯片来实现。

B.3 传感器设计和错误检测方法

路径识别模块是智能车载系统关键模块之一,数字反射式红外线传感器是这一模块的常用的解决方案。但该方案的准确性是不可避免的问题。因为光电传感器检测到接近自己的存在物不可能是正确的远路径识别,这就降低了智能车对环境的适应能力,也影响到智能车辆的速度和稳定性。而反射式红外传感器的模拟量光电传感器阵列的路径检

39

沈阳理工大学学士学位论文

测方法,具有较高的可靠性和稳定性。应用不同的红外光电传感器,中距离的有效作用从几厘米到几十米不等。由于空间的限制,我们选择漫反射式光电传感器RPR-20来安装在电路板上,如图B.3.1(a)所示。

图B.3.1 检测电路和传感器的特性曲线

RPR-220是一种反射型光电检测器,该发射器是一个砷化镓红外发光二极管,接收器是一个高灵敏度的硅平面晶体管光电,最好的角色传感器距离为6-8毫米,且具有良好的光学滤波器性能,其内置的可见光过滤器可以减少分立光以及可见光的传感器上的效果。在实际应用中,为了增大检测范围,并进一步减少太阳光中的红外线的影响,我们设计了由微控制器的PWM模块产生38kHz的脉冲调制信号和所述红外发射接收电路,共同构成的路径识别模块。通过滤波电路和软件处理,使用漫反射效应传感器8,以形成一个线传感器阵列,并使其值连续,具体原理如下。

点传感器数据处理:

(1)

式中:

sen(n)—用于五次连续采样的第一个n点的传感器。 因此sen[i]max=0,sen[i]min=0,并且取中值滤波。

40

沈阳理工大学学士学位论文

传感器的阵列和相对误差e(n)的求取:

(2)

式中:

sen(n)—通过A/D转化器捕捉的第一个n点传感器的信息;

var(n)—循迹前,与周围光线变化相关的第一个n点传感器的最大值; var0(n) —循迹前,与周围光线变化相关的第一个n点传感器的最小值; cent(0)—智能车中轴线乘以100的绝对位置; e(n)—传感器阵列和智能车辆中心轴线的相对误差。

当e(n)>0时,指智能车从路径轨迹轴向左偏;当e(n)<0时,指智能车从路径轨迹轴向右偏。

采用A / D采样方法检测非线性模拟方法,可以提高智能车的前瞻性和测量精度,为智能车辆的速度控制、转向预测控制方面打下了良好的基础。

B.4 可变增量的PD算法

虽然智能车的轨迹是未知的,但也是由一些基本的直线和弧线信息组合而成的。当智能车的速度较快时,控制算法可以通过改变伺服方向,来保证智能车在一个平滑的轴向线上运动。这样抵消值则为零。

图B.4.1 轨迹分析

在路径特点方面,移动智能车并不是很准确。对于表面控制模型体系,并没有一个明确的路径,最佳的控制方案便是增量智能控制。通过对不同位置误差的正确路径估计,可以使体系达到要求的控制标准。图3是智能车轨迹分析说明图。如图所示,当智能车绕轨迹而行时,O点则表示分析所用的转折点。

41

沈阳理工大学学士学位论文

(3)

式中:

v—O点处的线速度;

—调节时间,通常设计后便不再改变; —指在内的移动距离 —指在内的偏差。

根据比赛的要求,智能汽车在运行时的误差应该是最小的,速度应该是最快的。误差项

为智能车辆的行进速度和同一时刻的方向和路径

的函数。它们的关系与调整

范围参数K的大小有关,关系是如下:

(4)

如果需要使

变小,通过改变线速度v是显然不符合系统的要求。调整

可以减少

误差,但速度过快会导致转向反应不灵活,如果者引起振荡。

调整不及时,也会使汽车冲出赛道或

通过分析,最好的办法是选择给予不同估计模式的不同的速度,以缩短运行时间。并且根据误差的大小来选择不同的调整参数,以提高对转向角的控制。为此,引入了非线性和可变参数的调整手段来控制智能车辆。

该系统采用一种强大的闭环控制的PID算法,并且控制参数采用非线性调整方案,这样可以有效地克服智能车高速行驶时产生的振动问题以及转向反应迟钝问题。图B.4.2是智能车控制系统的控制原理图。

图B.4.2 智能车控制原理框图

根据规则的要求,对于体系的长处与不足的最终衡量手段便是运行时间,因此速度则是一个重要的控制参数。在实际操作过程中,只要没有轨道车,就并不需要严格地按

42

沈阳理工大学学士学位论文

照中央轴的轨迹来运行,因此容易导致一体化的组成部分的饱和度可以从PID算法中删除,因此PD算法则成为主要的算法。为了克服高速行驶的汽车直来直去而容易产生的振荡问题,并且将持续平缓的弯道表示出来,该体系采用了非线性的控制设计,这样可以减小对振荡的敏感度,也可以较为容易地控制大的偏差问题。图B.4.3中所示出输出图形中的分线性部分的部件比例。

通过分析,根据测试得到的交通信息,外部轨迹的动态模型被简化为一个内置的模型,植入控制器内以构成高精度的反馈控制系统。该系统能保持良好的品质,当不确定性的函数如模型扰动和随机干扰的存在时,可以通过非线性控制器调节伺服的方向和速度,以缩短控制汽车的响应时间。

图B.4.3 输出的非线性部分件的比例示意图。

PD增量公式:

(5)

式中:

—第n次的输出增加;

—从中心算起的第n次偏差水平;

—第n-1次的误差项; —第n-2次的误差项。

PD非线性算法(比例),用C语言描述如下: if(-2043

沈阳理工大学学士学位论文

if(error[2]>20)&&if(error[2]<50) out_p=(error[2]+20)*Kp1; if(error[2]>-50&&error[2]<-20) out_p=(error[2]+20)*Kp1; }

if(error[2]>=50) out_p=(error[2]-50)*Kp2; if(error[2]<=-50) out_p=(error[2]+50)*Kp2;

非线性方法同上微分部分。KP1,KP2是可调节的参数,它们可以被基于轨道的难度和速度的DIP开关而设置好。在位置误差方面,对于不同的路径模型使用非线性,采用大规模的增量角度控制,速度误差可通过PD调节器根据内置的模型和位置误差来控制。

B.5 智能车控制软件设计

智能车控制系统的软件设计是基于代码CW12 V3.1的编程环境。智能车控制系统流程图,如图B.5.1所示。

主控制系统的核心部件是16位单片机MC9S12DG128,该系统的电量是通过7.2V,2000mAh的镍-镉充电电池来提供。根据各个单元电路的需要,系统的电压将被划分成5V、6V和7.2V分别供电给主控制装置、红外线检测模块、喷枪模块和转向器组件。速度电路采用欧姆龙E6A2-200P/R光电编码器,驱动电路是通过2MC33886 并行全桥驱动,从而大大提高了驱动功率和制动能力。为了确保顺利停止启动、停止,测量模块增加了红外测量设备的数量。

44

沈阳理工大学学士学位论文

图B.5.1 智能车控制系统流程图

此外,调试型号汽车的机械结构及节能设计,在汽车的运行也起到至关重要的作用。

B.6 结论

本设计系统通过内置的模型和非线性控制器的设计转向角和速度,来控制汽车的方向。实验证明可以按照任意给定的车道,进行速度控制,并且具有快速、敏捷、完美的动态性能,稳定性和系统的抗干扰能力响应的平滑路径都较强。该设计连续两年在中国的大学生智能车比赛中进入到全国总决赛。

45

沈阳理工大学学士学位论文

附录C 测试程序

C.1 车模测试程序

/**************************************************************************** 车模测试

****************************************************************************/ #include

#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走 #define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后转

#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转 #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走 #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走 #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转

/************************************************************************/ //延时函数

void delay(unsigned int k) {

unsigned int x,y; for(x=0;x/************************************************************************/ //全速前进

void run(void) { Left_moto_go ; //左电机往前走 Right_moto_go ; //右电机往前走 }

/************************************************************************/ //全速后退

void backrun(void) { Left_moto_back ; //左电机往后走 Right_moto_back ; //右电机往后走 }

/************************************************************************/

46

沈阳理工大学学士学位论文

//左转

void leftrun(void) { Left_moto_back ; //左电机往后走 Right_moto_go ; //右电机往前走 }

/************************************************************************/ //右转

void rightrun(void) { Left_moto_go ; //左电机往前走 Right_moto_back ; //右电机往后走 }

/*********************************************************************/ //主函数 void main(void) { delay(100); while(1) /*无限循环*/ { run(); //backrun(); //leftrun(); //rightrun(); } }

C.2 激光传感器测试程序

/**************************************************************************** 激光传感器测试

****************************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

sbit IN =P0^0; //P0^0连接激光传感器的输出端

sbit OUT1=P1^0; //P1^0连接第一个驱动端口的一个端子 sbit OUT2=P1^1; //P1^1连接第一个驱动端口的另一个端子

47

沈阳理工大学学士学位论文

/****************************************************************************/ //主函数

void main(void) {

while(1) {

if(IN==0) //如果输入信号为0 {

OUT1=1; //则驱动电机 OUT2=0; } else //如果输入信号为1 { OUT1=0; //则不驱动电机 OUT2=0; } } }

C.3 循迹测试程序

C.3.1 简单循迹测试程序

/**************************************************************************** 简单循迹测试程序

****************************************************************************/ #include

#define Left_led P3_5 //P3_5接四路寻迹模块接口第三路输出信号即OUT2 #define Right_led P3_6 //P3_6接四路寻迹模块接口第四路输出信号即OUT3

#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走 #define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后转

#define Left_moto_stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转 #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走 #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走 #define Right_moto_stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转

/************************************************************************/

48

沈阳理工大学学士学位论文

//延时函数

void delay(unsigned int k) {

unsigned int x,y; for(x=0;x/************************************************************************/ //前进

void run(void) { Left_moto_go ; Right_moto_go ; }

/************************************************************************/ //停止

void stop(void) { Left_moto_stop ; Right_moto_stop ; }

/************************************************************************/ //左转

void turnleft(void) { Left_moto_back ; Right_moto_stop ; }

/************************************************************************/ //右转

void turnright(void) { Left_moto_stop ; Right_moto_back ; }

/*********************************************************************/ /*--主函数--*/ void main(void)

49

沈阳理工大学学士学位论文

{ delay(100); //延时一段时间 run(); while(1) /*无限循环*/ { if (Left_led==0&&Right_led==0) //左边不压线,右边不压线 { run(); }

if (Left_led==0&&Right_led==1) //左边不压线,右边压线 { turnright(); } if (Left_led==1&&Right_led==0) //左边压线,右边不压线 { turnleft(); }

} }

C.3.2 调速循迹测试程序

/************************************************************ 调速循迹程序

************************************************************/ #include

#define uchar unsigned char #define uint unsigned int

#define start {P1_0=1,P1_1=0,P1_2=1,P1_3=0,P1_4=1,P1_5=0,P1_6=1,P1_7=0;}

#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走 #define Left_moto_back {P1_0=0,P1_1=0,P1_2=0,P1_3=1;} //左边两个电机向后转

#define Left_moto_stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转 #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走 #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走 #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转

unsigned char left_zkb=0; //左侧占空比 unsigned char right_zkb=0; //右侧占空比 unsigned t=0; //变量赋初值

50

沈阳理工大学学士学位论文

sbit Left_led=P3^5;

sbit Right_led=P3^6;

sbit ENA=P0^4; //驱动的四个使能端定义 sbit ENB=P0^5; sbit ENA1=P0^6; sbit ENB1=P0^7;

/*************************延时*******************************/ void delay(int k) {

while (k--); }

/**************************初始化****************************/ void init() {

TMOD=0X01; TH0=0XFc; //1Ms定时 TL0=0X18; EA=1; ET0=1; TR0=1; }

/*********************定时器产生PWM信号**********************/ void timer0() interrupt 1 { TH0=0XFc; //1Ms定时 TL0=0X18;

if(t51

沈阳理工大学学士学位论文

{ENA1=0; ENB1=0;} t++; if(t>=10) {t=0;} }

/***********************调速前进*******************************/ void go_ahead() {

left_zkb=3; //定义前进速度为三档

right_zkb=3; //如需调整速度大小,只需调整left_zkb、right_zkb的值(0~9) Left_moto_go; // Left_moto_back;

// Left_moto_stop; Right_moto_go; // Right_moto_back; // Right_moto_Stop; }

/************************调速左转******************************/ void turn_left() {

left_zkb=7; //定义左转速度为七档 right_zkb=7;

// Left_moto_go; Left_moto_back;

// Left_moto_stop; Right_moto_go; // Right_moto_back; // Right_moto_Stop; }

/*************************调速右转*****************************/ void turn_right() {

left_zkb=7; //定义右转速度为七档 right_zkb=7;

Left_moto_go; // Left_moto_back;

// Left_moto_stop; // Right_moto_go;

52

沈阳理工大学学士学位论文

Right_moto_back; // Right_moto_Stop; }

/*************************主函数*********************************/ void main() {

init(); //初始化 start; //前进 while(1) /*无限循环*/ { if(Left_led==0&&Right_led==0) //左右都不压线 { go_ahead(); //调速前进 } else { if(Right_led==1&&Left_led==0) //右边检测到黑线 { turn_left(); //调速左转 } if(Left_led==1&&Right_led==0) //左边检测到黑线 { turn_right(); //调速右转 } } }

C.3.3 最终循迹测试程序

/********************************************************** 最终循迹测试程序

**********************************************************/ #include

#define uchar unsigned char #define uint unsigned int

#define start {P1_0=1,P1_1=0,P1_2=1,P1_3=0,P1_4=1,P1_5=0,P1_6=1,P1_7=0;}

#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走

53

沈阳理工大学学士学位论文

#define Left_moto_back {P1_0=0,P1_1=0,P1_2=0,P1_3=1;} //左边两个电机向后转

#define Left_moto_stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转 #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走 #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走 #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转

unsigned char left_zkb=0; unsigned char right_zkb=0; unsigned t=0;

sbit led1=P3^4; sbit led2=P3^5; sbit led3=P3^6; sbit led4=P3^7; sbit Head=P0^0; //接激光传感器的输出端 sbit ENA=P0^4; sbit ENB=P0^5; sbit ENA1=P0^6; sbit ENB1=P0^7;

/**************************初始化******************************/ void init() {

TMOD=0X01; TH0=0XFc; //1Ms定时 TL0=0X18; EA=1; ET0=1; TR0=1; }

/********************定时器产生PWM信号**********************/ void timer0() interrupt 1 { TH0=0XFc; //1Ms定时 TL0=0X18;

if(t54

沈阳理工大学学士学位论文

ENB=0;} if(t=10) {t=0;} }

/***********************慢速前进*******************************/ void go_ahead_slowly() {

left_zkb=2; right_zkb=2;

Left_moto_go; // Left_moto_back;

// Left_moto_stop; Right_moto_go; // Right_moto_back; // Right_moto_Stop; }

/***********************快速前进*******************************/ void go_ahead_fast() {

left_zkb=5; right_zkb=5;

Left_moto_go; // Left_moto_back;

// Left_moto_stop; Right_moto_go; // Right_moto_back; // Right_moto_Stop; }

/************************左转1******************************/ void turn_left1() {

55

沈阳理工大学学士学位论文

left_zkb=5; right_zkb=5;

// Left_moto_go; Left_moto_back;

// Left_moto_stop; Right_moto_go; // Right_moto_back; // Right_moto_Stop; }

/************************左转2******************************/ void turn_left2() {

left_zkb=9; right_zkb=9;

// Left_moto_go; Left_moto_back;

// Left_moto_stop; Right_moto_go; // Right_moto_back; // Right_moto_Stop; }

/*************************右转1*****************************/ void turn_right1() {

left_zkb=5; right_zkb=5;

Left_moto_go; // Left_moto_back;

// Left_moto_stop; // Right_moto_go; Right_moto_back; // Right_moto_Stop; }

/************************右转2******************************/ void turn_right2() {

left_zkb=9; right_zkb=9;

Left_moto_go; // Left_moto_back;

56

沈阳理工大学学士学位论文

// Left_moto_stop; // Right_moto_go; Right_moto_back; // Right_moto_Stop; }

/**************************循迹函数***************************/ void run() {

uchar flag; if((led1==0)&&(led2==0)&&(led3==0)&&(led4==0)) { flag=0; }

else if((led1==0)&&(led2==1)&&(led3==0)&&(led4==0)) { flag=1; } else if((led1==0)&&(led2==0)&&(led3==1)&&(led4==0)) { flag=2; } else if((led1==1)&&(led2==1)&&(led3==0)&&(led4==0)) { flag=3; } else if((led1==0)&&(led2==0)&&(led3==1)&&(led4==1)) { flag=4; } else if((led1==1)&&(led2==0)&&(led3==0)&&(led4==0)) { flag=5; } else if((led1==0)&&(led2==0)&&(led3==0)&&(led4==1)) { flag=6; } else if((led1==1)&&(led2==1)&&(led3==1)&&(led4==1)) { flag=7; }

switch (flag) {

case 0: go_ahead_slowly(); //慢速前进 break; case 1: turn_left1(); //左转1 break;

57

沈阳理工大学学士学位论文

case 2: turn_right1(); //右转1 break; case 3: turn_left2(); //左转2 break; case 4: turn_right2(); //右转2 break; case 5: turn_left2(); //左转2 break; case 6: turn_right2(); //右转2 break; case 7: go_ahead_slowly(); //慢速前进 break; default: break; } }

/*************************主函数*********************************/ void main() {

init(); start; while(1) { if(Head==1) //如果前方是直道 { go_ahead_fast(); //快速前进 } else //前方不是直道 { run(); //进入循迹模式 } } }

58

沈阳理工大学学士学位论文

附录D 跑道

D.1 跑道A

图D.1 跑道A

D.2 跑道B

图D.2 跑道B

59

因篇幅问题不能全部显示,请点此查看更多更全内容

Top