您的当前位置:首页重庆邮电大学AUTO-2第二届全国大学生智能汽车竞赛技术报告(AUTO-2)

重庆邮电大学AUTO-2第二届全国大学生智能汽车竞赛技术报告(AUTO-2)

2020-11-17 来源:爱问旅游网
第二届“飞思卡尔”杯第二届“飞思卡尔”全国大学生智能汽车竞赛

技术报告

PID实现速度控制附件:PID附件:学校名称:重庆邮电大学队伍名称:AUTO-2参赛队员:刘林

杨理龙叶虹

带队老师:吕霞付

陈勇

关于技术报告和研究论文使用授权的说明

本人完全了解第二届全国大学生“飞思卡尔”杯智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。

参赛队员签名:

带队教师签名:

日期:

I

........................................................................VIAbstract...................................................................VII第一章引言..............................................................-1-1.1发展现状.........................................................-1-1.2方案简介.........................................................-1-1.3文章结构.........................................................-2-第二章系统整体框架......................................................-3-2.1系统整体框架.....................................................-3-2.2系统硬件参数.....................................................-4-2.3车模外形.........................................................-5-第三章模块的基本方案及论证..............................................-7-3.1图像采集模块.....................................................-7-3.2速度采集模块.....................................................-8-3.3加速度传感器模块.................................................-8-3.4电机驱动模块.....................................................-9-3.5舵机驱动模块.....................................................-9-3.6电源管理模块....................................................-10-3.7调试模块........................................................-10-3.7.1LCD显示电路设计..........................................-10-3.7.2键盘电路设计.............................................-10-3.8最终决策方案....................................................-10-第四章机械结构调整.....................................................-13-4.1总体机械结构....................................................-13-4.2摄像头的安装.....................................................-13-4.3系统PCB板的安装................................................-14-4.4稳定性调整......................................................-15-4.4.1主销后倾角................................................-15-4.4.1前轮前束..................................................-15-4.5底盘抬高策略....................................................-15-4.5.1后轮底盘升高..............................................-15-

后轮位置的固定............................................-16-4.5.3前轮底盘升高..............................................-17-第五章系统总体硬件电路.................................................-19-硬件电路总述........................................................-19-第六章信息采集模块.....................................................-21-6.1摄像头及其采集电路设计..........................................-21-6.1.1摄像头简介................................................-21-6.1.2摄像头的工作原理..........................................-22-6.1.3摄像头路径识别原理........................................-27-6.1.4摄像头的选取..............................................-28-6.1.5摄像头提取信号............................................-30-6.1.6摄像头的安装..............................................-31-6.2速度检测电路....................................................-32-6.2.1检测电路..................................................-32-6.2.2脉冲计数检测速度..........................................-33-6.3加速度传感器....................................................-34-6.3.1加速度传感器简介..........................................-34-6.3.2检测电路..................................................-35-第七章执行模块电路设计.................................................-37-7.1电机驱动电路....................................................-37-7.2舵机............................................................-38-第八章电源模块.........................................................-39-8.1总体电源电路....................................................-39-8.2单片机等5V稳压芯片的选择.......................................-39-8.2.1芯片的选择................................................-39-8.2.2电路实现..................................................-40-8.3CMOS摄像头用电源................................................-41-8.4舵机电源........................................................-41-第九章调试模块.........................................................-43-9.1LCD显示模块.....................................................-43-9.2调速键盘........................................................-44-9.3速度和转向灯....................................................-44-III

系统软件设计.....................................................-45-10.1概述...........................................................-45-10.2整体过程.......................................................-45-10.3MCU简介........................................................-46-10.4图像采集.......................................................-46-10.5黑线中心位置的提取.............................................-48-10.5.1中心提取过程.............................................-48-10.5.2实现流程图...............................................-50-10.6电机空载实验测试...............................................-51-10.7速度控制准备工作一.............................................-55-10.7.1赛道形状的区分...........................................-55-10.7.2相应的速度和角度控制策略.................................-57-10.7.3普通赛道的情况...........................................-58-10.8速度控制准备工作二.............................................-60-10.8.1速度控制.................................................-60-10.8.2舵机控制.................................................-62-10.9速度控制方案...................................................-62-10.10应用PID算法控制电机..........................................-63-10.10.1PID简介.................................................-63-10.10.2PID控制原理.............................................-64-10.10.3PID流程图...............................................-65-10.11赛车跑法简析..................................................-67-10.12小结..........................................................-70-第十一章开发工具与调试.................................................-71-第十二章结论...........................................................-75-致谢....................................................................-77-参考文献.....................................................................I附录.........................................................................I

A主要芯片模块及数量.....................................................IB端口分配情况..........................................................IIC系统电路图...........................................................IIID程序源代码............................................................IV

摘要

本文详细介绍了一套智能车的寻线设计方案。由总到分的先从整体上介绍了该系统的硬件和软件设计思想,继而细分各模块详尽介绍具体设计。该智能车系统以MC9S12DG128B作为整个系统信息处理和发出控制命令的核心,基于摄像头采集的赛道信息,提取出黑线中心位置,并求得小车偏离黑线的程度,区分出道路形状,对此信息进一步处理以控制舵机的转向,通过速度传感器获得实时速度信息,利用增量式数字PID控制算法实现闭环反馈控制。文章详细介绍了图像采集模块、速度采集模块等信息采集模块和电机驱动模块和舵机驱动模块等动作执行模块的方案选取和电路设计原理,还介绍了系统调试方法策略。测试表明,该智能车能够很好的跟随黑色引导线,可以实现对应于不同形状的道路予以相应的控制策略,可快速稳定的完成的整个赛道的行程。

关键字:单片机摄像头速度传感器PID

V

Abstract

Thisarticlebringsacompletemodelofintelligentcardesignwhichfollowstheblacklinecloselyandalsodescribestheprocessofdetailofthedesign.Fromthewholetodetail,weintroducethedesignmethodofthehardwareandsoftware,andthenwepresenteverymoduleofthemodelatlarge.Theintelligentcarsystem,withsingle-chipMC9S12DG128asitsinformationmanagementandsendingoutcontrolcommandcenter,usesimage-sensormodulebasedoncameratoobtainlaneimageinformation,thenabstracttheblacklineonthecontestlane,andcalculatesthepositiondifferencebetweenthecarandtheblackline,distinguishesthedifferentshapeofthelane,thenweanalyzeanddealwiththeinformationfarthertocontrolthesteeringangle.Weobtaintherealtimespeedbyspeedsensor,andthenwewilluseincrementPIDcontrolarithmetictorealizethespeedfeedback.Thisarticleintroducestheschemeselectionandthecircuitdesigntheoryoftheinformationcollectionmodulewhichcomprisestheimagecollectingmoduleandspeedcollectingmoduleandactionexecutingmodulewhichincludesthemotordrivemoduleandsteerdrivemodule.Italsotalksofthedebugstrategyofthesystem.Theexperimentalevaluationindicatesthatthemodelcarisabletofollowtheblacklineonthelaneclosely,realizethefunctionthatitexecutescorrespondingcontrolstrategytowarddifferentshapelane,andaccomplishesthewholejourneyfastandsteadily.

Keywords:Single-chip,microcamera,speedsensor,PID

第一章引言

1.1发展现状

智能汽车,是一种集环境感知、规划决策、自动行驶等功能于一体的综合系统,集中地应用到自动控制、模式识别、传感器技术、汽车电子、电气、计算机、机械等多个学科,是典型的高新技术综合体,具有重要的军用及民用价值。

目前,智能车领域的研究已经能够在具有一定标记的道路上为司机提供辅助驾驶系统甚至实现无人驾驶。这些智能车的设计通常依靠特定道路标记完成识别,通过推理判断模仿人工驾驶进行操作。通常,智能车接受辅助定位系统提供的信息完成路径规划,如由GPS等提供的地图,交通拥堵状况,道路条件等信息。

1.2方案简介

在本次竞赛中,参赛队伍需要制作出一个能够自主识别道路并行驶的智能车模。那么在模型车的制作过程中,最关键的问题就是如何探寻黑线,如何施以合适的控制策略来确保小车在不违背比赛规则的前提下沿赛道尽可能快速稳定前进。而探寻黑线的准确与否将直接影响小车行进的稳定效果,故而,设计出准确的寻线系统是该智能车制作过程中最重要的环节。

而寻线一般有两种方案,即光电传感器和摄像头,光电传感器[7]简单易行,抗干扰能力强,但是其探测距离较短,不能对前方道路信息作成很好的预测判断,而且单个光电传感器的功能有限,需要较多的传感器构成光电阵列来检测,这样不仅增加了车辆的重量,不利于快速前行,而且也会使得小车过宽,容易撞倒道旁边的插杆,严重影响其安全性。

本队采用摄像头,充分利用其探测距离长,道路可预测信息强的优点,对其采集到的道路信息进行分析处理,利用PID算法实现对小车行进的控制。根据摄像头对黑白灰度值不同的分辨率采集赛道的黑色引导线信息,根据得到的每帧图像信息,判断小车偏离黑线的程度,并确定前方赛道是直道、弯道抑或是S道,再根据各种不同的赛道,予以相应的控制策略,基于“进弯减速,出弯加速”的原则,并且以直线方式冲过S道以减少转弯浪费的时间,利用摄像头得

第二届全国大学生智能汽车竞赛技术报告

到信息的预测方向,使小车能够提前准备转弯等动作,从而防止小车因为直道加速过大而使得转弯时速度难以减下来而冲出赛道,分析摄像头获得的图像信息,读入速度传感器获得的速度,利用增量式PID算法实现速度的闭环反馈控制。

1.3文章结构

本文详细介绍了智能车模型的设计方案,由总到分的先从整体上介绍了该系统的硬件和软件设计思想,继而细分各模块详尽介绍具体设计。第二章介绍了系统的整体框架;第三章分析和论证了各模块的选择方案;第四章介绍了系统机械结构的调整情况;第五章介绍了系统总体硬件电路设计;第六章介绍了信息采集模块的电路设计;第七章介绍了执行模块的电路设计;第八章介绍了电源模块的电路设计;第九章介绍了调试模块的电路设计;第十章介绍了整个系统软件设计;第十一章介绍了开发工具及调试过程;第十二章对整个制作过程做一总结,并对该模型车的不足之处提出改进。

-2-

第二章系统整体框架

2.1系统整体框架

为了使小车沿着规定的赛道自动寻找黑色引导线并尽可能地高速前进,小车必须具备一套集导引线检测并实时控制汽车速度、姿态的智能处理单元。小车主要由以下几大部分组成:信息处理芯片MC9S12DG128,图像采集模块,速度采集模块,电机驱动模块,舵机驱动模块,电源管理模块,加速度传感器模块,调试模块(LCD和调速键盘)。整个系统的结构示意图2.1所示:

图2.1整体框架

工作过程:系统将图像采集模块,速度采集模块以及加速度传感器模块采集到的路况信息、速度信息和小车状态信息等送以整个系统的核心部分MC9S12DG128进行分析处理,然后发出相应控制命令输出到执行模块的电机和舵机执行适宜的速度和转向动作,配以LCD和键盘方便实时调试,进而实现整个系统的闭环反馈控制。

在整个系统中,信息处理芯片MC9S12DG128是控制整个系统的大脑,负责信息的接收,处理以及执行命令的发出;电源管理模块是该系统的能源中心,负

第二届全国大学生智能汽车竞赛技术报告

责向系统中各个模块提供其功能实现所需能量;调试模块是系统功能实现的辅助模块,通过其实时显示道路信息和小车行驶情况,并根据显示信息实时调试。

2.2系统硬件参数

经过多次的调试验证,在遵守参赛规则的基础上,根据本设计的软件算法,并综合硬件设计思想,我们最终确定了小车系统的各硬件参数:系统PCB板的设计安装,摄像头安装的倾斜角度、高度及距离前轮距离等,

表2.1硬件参数

项目长(毫米)车模几何尺寸宽(毫米)高(毫米)轴距(毫米)车模轮距(毫米)电路电容总量(微法)摄像头(个)传感器速度传感器(个)伺服电机个数(个)赛道信息检测空间精度(毫米)赛道信息检测频率(次/秒)除MC9S12DG128之外其它主要芯片车模重量(带有电池)(千克)参数2811594501981371869.87611116.25/20ms50LM1881,LM2575,MAX632,LM2940,LM1117,MC33886,MMA1260D1.05-4-

第二章系统总体框架

2.3车模外形

经过多次的程序调试与硬件改造之后,最终确定了车模硬件各个模块的安装方式,从各个角度看,系统安装如下图示:

图2.2总体结构图2.3车模前面

图2.4车模侧面图2.5车模后面

-5-

第三章模块的基本方案及论证

3.1图像采集模块

为了探测小车前进过程中的路况信息,以及小车在沿黑线行走过程中的偏离黑线的程度等行驶状态信息,以便通过此信息来指导MCU应该怎样对执行部分发出命令,我们有以下几种方案:方案一、使用红外发射—接收管

用红外发射管发射出的红外线,经过赛道反射回来后,由于白纸和黑线吸收红外线的强度不等,不同位置上的红外接受管会接收到强弱不同的红外光,对于白纸,红外发射管发出红外线信号,经白色反射后,被接收管接收,一旦接受管接受到红外线,三极管导通,比较器输出低电平,而对于黑线,红外线被黑色吸收,三极管截至,比较器输出高电平,由此可以判断出黑线相对小车的位置。

优点:抗干扰能力强、可靠性高,不会因为周围环境的差别而产生不同的结果,

可以减少在安装时产生的差异带来的误差和干扰,使安装更加简便。缺点:作用距离有限,不能对黑线进行远距离探测,预测性弱,速度快时很容

易冲出跑道;而且规定红外传感器最多只可以用16个,所以它对黑线的探测不能完全覆盖,可能出现漏检。方案二、采用红外传感器与CCD(CMOS)摄像头相结合

优点:兼顾了红外传感器抗干扰能力强以及摄像头作用距离远、视角范围大的

长处。

缺点:设计难度大,红外传感器与摄像头需要配合寻迹,它们对舵机和电机在

方向和速度上的控制需要巧妙的仲裁算法(对采集的信息判断优先级)进行区分;运算量大,需要占用相当多的MCU资源。方案三、直接采用摄像头

优点:作用距离远,道路信息预测能力强,不易出现由于黑线检测不及时而冲

出赛道的情况;而且摄像头对道路的探测精细,视角范围大不易出现黑线漏检的情况。

第二届全国大学生智能汽车竞赛技术报告

缺点:容易被干扰,受周围光线的影响大;运算量大,算法复杂,需要占用较

多的MCU资源。

决策方案:方案三从CCD(CMOS)摄像头采集的赛道图像中提取中心线位置,取代了光电传感器阵列,该方法彻底摆脱了光电传感器视野狭窄,分辨率低的特点,能够提供全面的路况信息。同时,由于电路的简化,缩小了体积,减轻了重量,使整车的功率分配更加合理有效,有利于小车更加快速稳定的行进。因此,本设计选用了方案三。

3.2速度采集模块

为了能够提高小车的总体速度,就需要使其能在直道上全速行驶,在弯道上也能够以比较快的速度前进,这就需要有准确的速度信息采集方案,将小车的速度值随时采集送到MCU,对速度进行闭环反馈控制,以使小车能够稳定高速的行驶。

方案一、采用霍尔传感器

在车轮上嵌入若干粒永磁铁,使用霍尔传感器进行检测。优点:检测速度快,不会受光、温度等影响。

缺点:在车轮上合适的地方嵌入足够多的数量永磁铁相当困难。方案二、采用速度传感器脉冲计数

将测速传感器安装在小车左后轮附近,在小车的靠近车轮的轴上安装一编码盘,这样就可用传感器检测黑线,产生脉冲,通过对脉冲进行计数的方式来测量小车的速度。

优点:原理简单,实现容易。缺点:占用ECT资源。

决策方案:从各个方面综合考虑,以简单易行有效起见,我们最终选择采用方案二,而且我们对速度的检测并不需要完全的准确,利用脉冲计数的方式获得的速度值精度足够。

3.3加速度传感器模块

考虑到赛道增加了坡度的问题,为了识别赛道的坡度,采用加速度传感器,

-8-

第三章模块的基本方案及论证

有两种选择方案:一种是三轴的加速度传感器,该传感器能够很准确的;另一种是采用单轴的加速度传感器。

决策方案:三轴加速度传感器能够检测空间三个方向的加速度,电路实现复杂,成本高,而在本设计中只需要检测赛道坡度,只要检测到单一方向的加速度即可判断赛道坡度情况,故而采用单轴的加速度传感器即可。

3.4电机驱动模块

电机驱动对速度起着决定性的作用,考虑以下两种方案。方案一、电枢串电阻调速

优点:原理简单,控制设备也不复杂。

缺点:速指标不高,调速范围不大,特别是低速时机械特性较软,调速的平滑性不高。同时,大量的能量消耗在串入的电阻上,不能满足电池供电系统低功耗的要求。

方案二、直流脉宽调速(PWM)

优点:主电路简单,需要的功率器件少;开关频率高,电流容易连续,电机损耗和发热都小;动态响应快,动态抗干扰能力强;功率开关器件工作在开关状态,导通损耗小。

缺点:在开关过渡过程损耗大,会在供电回路中产生谐波。

决策方案:电机驱动芯片采用飞思卡尔半导体公司的半桥式驱动器MC33886。MC33886为桥式驱动电路,通过控制输入的信号,可以控制两个半桥的通断来实现电机的顺转与倒转。详细分析比较后,最后确定电机驱动电路由两片MC33886芯片并联构成,使用双路PWM信号进行驱动。

3.5舵机驱动模块

方案一:

因为舵机的电源在4.5-6V的范围内,电流100mA左右,故而我们从电池电压通过串联两组二极管来获得,为了防止电流过大烧坏二极管,每一组二极管有3个二极管并联而成。

方案二:采用稳压芯片将电池电源直接降压并稳定到6V。

-9-

第二届全国大学生智能汽车竞赛技术报告

决策方案:经过实验测试,使用稳压芯片将电压降到6V对舵机进行供电这种方法,其驱动力不足。而采用方案一则简单且易实现。故确定采用方案一实现对舵机的供电。

3.6电源管理模块

为了保证各个部件的正常工作,电源的供给是十分重要的,需要对配发的标准车模用蓄电池进行电压调节。单片机系统、摄像头、车速传感器电路,LCD显示电路等各个电路的工作电压不同,需要想办法来使得电压满足各自的要求,一种方法是利用升压或降压的芯片来达到它们的要求,另一种方法是利用双电源供电的方法,来实现各模块的不同需要,由于电路模块较多,该方案中仍需要升压或降压芯片。实际应用中,我们确定采用升压降压芯片等来实现对各个模块的供电要求。而且,在电路设计中,考虑到由于电机驱动所引起的电源不稳定,在电源输入端,各芯片电源引脚都加入滤波电路。

3.7调试模块

为方便实时调试参数,我们设计采用LCD显示电路和键盘电路,在调试过程中将小车的当前状态参数实时显示,并可方便地通过键盘输入来调节参数和切换小车的状态,而不必将其连接到PC机通过软件调节。3.7.1LCD显示电路设计

显示电路采用液晶显示模块,模块体积小,功耗低,操作方便。使用液晶显示模块,可以对模式选择位写入命令,从而调节LCD的工作模式,分时进行命令和数据写入。3.7.2键盘电路设计

将键盘做成几种速度的选择,高速,中速,慢速,确定等几个功能。可根据不同的赛道,立即设定不同的速度。可在不改变任何软件的条件下,即时的根据周围环境的情况而设以相应的速度值。键盘输出口与单片机IO口相连。

3.8最终决策方案

经过如上所述分析选择,最终确定各模块方案如下:(1)采用摄像头获取道路图像信息;

-10-

第三章模块的基本方案及论证

(2)利用速度脉冲计数实现对速度的检测;(3)采用单轴加速度传感器检测坡度;(4)双路PWM驱动电机;(5)串二极管降电压为舵机供电;

(6)采用各种稳压芯片为各模块供电,实现电源管理;(7)利用LCD和键盘实现实时调试。

-11-

第四章机械结构调整

4.1总体机械结构

在最初的空体车模的基础上,我们在车的靠前部安装了采集道路信息的摄像头,在车模顶部安装了自己绘制的控制整个系统的PCB板(包括主办方提供的单片机最小系统),并在后轮(左轮)安装了编码盘,并在其对应位置装上了速度传感器。

4.2摄像头的安装

本设计在模型车的最前端安装了一铝合金方柱来固定摄像头的安装,为了使得摄像头的探测范围合适,在离地端1/3处将方柱向小车中心位置弯曲至靠近前轮的位置,并置以三角增加其稳定性,柱子总高度为500mm,摄像头距前轮轴心距离为90mm,为了方便摄像头位置的调整,从顶端向下每隔20mm给予钻孔,将摄像头用螺钉螺母稳定的固定于支架上,如果发现摄像头的视野范围太大或太小,可通过调整摄像头的上下高度和摄像头离支架的距离远近来实现对摄像头最佳位置的确定。实际安装情况见下图所示:

图4.1摄像头的安装

第二届全国大学生智能汽车竞赛技术报告

4.3系统PCB板的安装

控制整个系统的PCB板安装于小车车体的顶部,利用电路板上的过孔与车模本身的定位孔相配合,将其固定。在车模最前部安装了一自制的方形铝合金空块,实现防撞功能,确保小车能够安全可靠的快速行驶。在小车左后轮轴上安装了64等分的编码盘,并在其对应位置上装上了一速度传感器模块,实现速度的实时检测。将电池固定于车模底盘上,整个系统重心稳定。主要的连线有:(1)摄像头的电源线和信号线,包括视频信号线和9V电源线;(2)舵机和电机接线,电机和舵机的电源和控制信号线;(3)测速装置的连线,光电管的发射和接收电路引线以及电源线;(4)电池的接线。

图4.2PCB的安装

-14-

第四章机械结构调整

4.4稳定性调整[18]

4.4.1主销后倾角

主销后倾角在车轮偏转后形成一回正力矩,阻碍车轮偏转。主销后倾角越大,车速愈高,车轮偏转后自动回正力越强,但回正力矩过大,将会引起前轮回正过猛,加速前轮摆振,并使转向沉重。可以通过增加垫片的数量来增大主销后倾角,共有4片垫片,前2后2时,后倾角为0度;前1后3时,后倾角为2度—3度;前0后4,后倾角为4度—6度。

为保证小车偏转后,能够较好的自动回正,本设计采用的是前1后3,使得前轮倾斜角度为2度—3度。4.4.1前轮前束

俯视车轮,汽车的两个前轮的旋转平面并不完全平行,而是稍微带一些角度,这种现象称为前轮前束。车轮前束的作用是减轻或消除因前轮外倾角所造成的不良后果,二者相互协调,保证前轮在汽车行驶中滚动而无滑动。前轮是由舵机带动左右横拉杆实现转向的。主销在垂直方向的位置确定后,改变左右横拉杆的长度即可改变前轮前束的大小。

为保证小车在行驶中,不易出现滑动的不良情况,故在本设计中,调整前轮前束使得前轮向内倾1度左右。

4.5底盘抬高策略

因为赛道中增加了坡道,为保证小车能够安全平稳的爬上坡道并顺利通过,抬高车模底盘显得十分必要。

-15-

第二届全国大学生智能汽车竞赛技术报告

4.5.1后轮底盘升高

图4.3升高后轮底盘

仔细对比图示中的高度调节块1和高度调节块2,块1的左右两个缺口1-1和1-2离中间空环心的距离相等,而块2的两个缺口2-1和2-1距离其中间空环心位置远近不同,2-1比2-2离其环心距离远,通过将高度调节块1更换为高度调节块2,可以实现将后轮底盘抬高。4.5.2后轮位置的固定

图4.4固定后轮位置

图示为后轮轴上的螺母,可以通过紧固该螺母来调整后轮稳定性和电机性能。需要将该螺母位置调整到一个合适的程度保证后轮的稳定性,否则会出现后轮

-16-

第四章机械结构调整

乱摆动的严重情况。4.5.3前轮底盘升高

图4.5底盘抬高情况图4.6非底盘抬高情况

对比以上两种前轮底盘的安装,左图为提高底盘的安装方式,右图为未提高底盘的安装方式,其区别在于前者将左右底盘连接杆L和R交换,而后者保持原本连接,不交换L和R。因此,通过交换左右底盘连接杆即可实现提高前轮底盘的功能。

-17-

第五章系统总体硬件电路

硬件电路总述

硬件电路的设计是整个系统实现其功能的基础,是该系统最核心的部分,所以我们需要在硬件设计这一块仔细的选好做好每一个模块单元。系统的硬件总体电路如下:

图5.1硬件总体电路

系统先对摄像头获得的模拟图像信号,速度传感器测得的速度值,加速度传感器检测到的坡度信息,以及调速键盘输入的脉冲值等送入单片机最小系统进行分析处理,发出命令驱动舵机,并使用两片全桥电机驱动芯片MC33886并联驱动电机,输出PWM波形实现对于电机的控制,使用lm2575等稳压芯片对各模

第二届全国大学生智能汽车竞赛技术报告

块提供电源。

我们参照各个功能模块的硬件功能需求,选定了各模块对应元器件的类型和数量如下表2.2所示。

表5.2主要芯片及其数量序号1234567芯片型号LM1881LM2575-5.0MAX632LM2940-9.0LM1117-ADJMC33886MMA1260D数量1211121作用视频信号分离提供5V稳压提供12V稳压提供9V稳压提供6V稳压电机驱动芯片识别坡度-20-

第六章信息采集模块

6.1摄像头及其采集电路设计

摄像头具有探测距离远,获取信息量大的优点。通过摄像头输入的数据,处理算法不仅可以提前预知前方道路的方向,而且还可以判断前方的道路是直道还是弯道,指导车速,执行拐弯动作等策略。6.1.1摄像头简介1、摄像头的发展

摄像头作为一种视频输入设备,在过去被广泛的运用于视频会议、远程医疗及实时监控等方面。近年来,随着互联网技术的发展,网络速度的不断提高,再加上感光成像器件技术的成熟并大量用于摄像头的制造上,这使得它的应用已变得越来越广泛。2、摄像头的分类

摄像头分为数字摄像头和模拟摄像头两大类。模拟摄像头可以将视频采集设备产生的模拟视频信号转换成数字信号,进而将其储存在计算机里。模拟摄像头捕捉到的视频信号必须经过特定的视频捕捉卡将模拟信号转换成数字模式,并加以压缩后才可以转换到计算机上运用。数字摄像头可以直接捕捉影像,然后通过串、并口或者USB接口传输到计算机里。3、摄像头的工作原理

摄像头的工作原理大致为——光线照射景物,景物上的光线反射通过镜头聚焦生成的光学图像投射到图像传感器表面上,产生光电反应然后转为电信号,经过模数转换转换后变为数字图像信号,再送到数字信号处理芯片中加工处理。4、摄像头的主要结构和组件

(1)镜头透镜结构:由几片透镜组成,有塑胶透镜或玻璃透镜。

(2)图像传感器可以分为两类:CCD(电荷耦合器件);CMOS(互补金属氧化物半导体)。

(3)数字信号处理芯片(DSP)

第二届全国大学生智能汽车竞赛技术报告

6.1.2摄像头的工作原理[11][20]

基于本次设计中对黑线的识别,只需要提取出被探测画面的灰度信息,不需要获取赛道色彩等其他信息,所以我们选择黑白模拟摄像头即可。黑白模拟摄像头的工作原理与黑白全电视信号的图像采集处理方式相同。

因此,下面介绍黑白电视信号的工作方式,并借以一同说明了摄像头的工作原理。

1、全电视波形信号

1)将图像信号、复合同步、复合消隐、槽脉冲和均衡脉冲等叠加,即构成黑白全电视信号,通常也称其为视频信号.2)我国现行电视标准规定:

以同步信号的幅值电平作为100%;则黑色电平和消隐电平的相对幅度为75%;白色电平相对幅度为10%~12.5%;图像信号电平介于白色电平与黑色电平之间。各脉冲的宽度为:A.行同步4.7μs;B.场同步160μs(2.5行,H表示行,V表示场);C.均衡脉冲2.35μs;D.槽脉冲4.7μs;E.场消隐脉冲1612μs;F.行消隐脉冲12μs。在本设计中的摄像头各信号属性参数与上述电视标准相同。3)我国广播电视扫描参数扫描方式:隔行扫描;行频:15625HZ;行周期:64us;行正程时间:>=52us;行逆程时间:<=12us;每帧扫描行数:625行;每场扫描行数:312.5行;2、隔行扫描

所谓隔行扫描,就是在每帧扫描行数不变的情况下,将每帧图像分为两场来传送,这两场分别称为奇场和偶场。奇数场传送1、3、5、…奇数行;偶数场传送2、4、6、…偶数行。在我国电视信号中,隔行扫描解决带宽与闪烁感及

场频:50HZ(帧频25HZ);场周期:20ms;场正程时间:>=18.4ms;场逆程时间:<=16ms;每帧显示行数:575行;每场显示行数:287.5行。

-22-

第六章信息采集模块

清晰度的矛盾。这种扫描方式每秒传送50场,即场频为50Hz,因而将有效地降低闪烁感,帧频却为25Hz,隔行扫描即减小了闪烁感,并使图像信号的带宽仅为逐行扫描的一半。3、电视图像函数

标准电视图像每帧是由625行组成的,分两场传送,奇数场传送第1,3,5,…625行;偶数场传送第0,2,4,6,...,624行(第0行和第625行实际只有半行);可用图像函数表示为f(x,y),其中x取连续值;而y取整数

0,1,2,3,...,625,也就是令y=行号。如果令y=2m+z,(m=0,1,2,...,312;z=0或1),那么,z=0就表示偶数场图像;z=1就表示奇数场,如图4所示。

图6.1行号与m数

标准电视体制还规定:场同步脉冲宽度为2.5行(每行时间=64微秒);场消隐脉冲宽度为25行,因此,m=0,1,2为场同步脉冲占用;m=310,311,312,0,1,2,3,....,21,22为场消隐脉冲占用,如图5和图6所示。

图6.2场消隐占用行号(奇数场首)图6.3场消隐占用行号(偶数场首)

-23-

第二届全国大学生智能汽车竞赛技术报告

4、帧坐标系与场坐标系

在前面提到了每帧图像包含625行,分为奇偶两场传送,这样,可以采用两种坐标系来进行表达与分析计算。

(1)帧坐标系如6.1.2.3节中所叙述的就是帧坐标系,它以奇数场场同步脉冲前沿所对的行为y=1,各行行号就是y的值,范围是0至625,取整数;以行同步脉冲前沿所在的列为x=0,从左向右按等间隔点数递增,其间隔和取值范围依需要的解算精度或分辨力而定。

(2)场坐标系不分奇偶场,都以每场场同步脉冲前沿所对的行为y=0,各行的m数就是y的值,范围是0至312,取整数;x坐标的规定仍与帧坐标系相同。比较:采用帧坐标系解算精度较高,但只能每帧解算一次,也就是每隔40毫秒输出一组数据。采用场坐标系解算精度较低,但可以每场解算一次,也就是每隔20毫秒输出一组数据;所用电路硬件也简化许多,跟踪快速运动目标的系统中常被采用。

在我们本次的设计中,使用的是场坐标系,每隔20ms输出一帧图像数据。5、时间与空间的对应

一幅电视画面的传送是从左上角开始按照从左向右,从上到下的顺序(并遵照隔行扫描的规定)传送的。这样,在电视信号(时间序列)中的一个时间点就与电视画面中的一个空间位置点有一一对应的关系。在帧坐标系中,若以奇数场场同步脉冲前沿为计时起点t=0,则电视图像上坐标为(x,y)的一点P对应的扫描时间为:

t(y1)T/2xT/N(y奇数);

t(312y/2)TxT/N(y偶数)。

公式1

其中,T=64微秒,为行扫描周期;N为每行x刻度点数。在场坐标系中,奇数场以场同步脉冲前沿为计时起点t=0;偶数场以场同步脉冲前沿为t=T/2=32(微秒),则(x,y)点p对应的扫描时间t为:t=yT+xT/N

公式2

-24-

第六章信息采集模块

6、图象信号

图象信号是由摄像头采集到的一行行、一场场被探测物信息的电信号。①摄象管经电子束扫描将一幅图象的亮度分布进行象素分解,使之转变成按逐行逐场时间顺序排列的电信号。②摄象管某时刻输出的电流信号正比于该时刻电子束所扫描象素的亮度大小。如图6.4(a)所示,其特点是:只有水平方向变化,而无垂直方向变化,所以它是按行周期变化的。

图6.4垂直条图形信号图6.5水平条图形信号

按照信号幅度正比于亮度大小的原则画出一行的信号波形如图6.4(b)所示。由于图6.5(a)所示的只有垂直方向变化,而无水平方向变化,显然它是按场周期变化的。类似的,画出一场的信号波形如图6.5(b)所示。

由此可见,因为图象亮度只有正值而无负值,所以图象信号也是单极性的。黑色的信号电平对应为零,灰色和白色的信号电平都是正值而无负值。图象信号的极性在电路传送与处理过程中是经常变化的,如电路某处为正极性,经过一次放大倒相后,就变成负极性的了。7、复合消隐脉冲

前面已经指出:为了消去行、场逆程扫描线(简称回扫线),必须由同步机产生行、场消隐脉冲。行消隐脉冲使摄象管与显象管的电子束在行逆程期间截止,消去行回扫线:场消隐脉冲在场逆程期间使电子束截止,消去场回扫线,

-25-

第二届全国大学生智能汽车竞赛技术报告

从而避免它们对正常图象的干扰。按时间顺序将行消隐脉冲序列和场消隐脉冲序列组合在一起称为复合消隐脉冲,如图9所示。我国广播电视规定:行消隐脉宽为12μs,场消隐脉宽为:25H+12=1,612μs。由于广播电视采用奇数行隔行扫描,相邻两场行消隐的相对位置差半行,所以复合消隐脉冲是按帧(两场)周期重复变化的。

图6.6复合消隐脉冲

8、总结

黑白全电视信号(同本设计中所使用的黑白摄像头信号)由图象信号、复合同步信号和复合消隐信号组合而成。为了使三者互不干扰,并且在接收端能够方便可靠地进行分离,黑白全电视信号按下列方式组成:

1.图象信号安排在行、场扫描的正程,复合消隐和复合同步信号安排在行、场扫描的逆程。

2.图象信号位于白色和黑色电平之间,复合消陷信号的电平规定比黑色电平稍黑。消隐电平和图象黑色电平之差称为黑色电平提升。黑色电平提升量D等于图象白色电平与消隐电平差值的0~5%,如图10所示。

-26-

第六章信息采集模块

图6.7一行全电视信号

3.复合同步电平比复合消隐电平具有更黑的电平,即“比黑还黑”。这样复合同步信号与图象信号、消隐信号在幅度上有较大的差别,便于在接收端用简单的限幅器(即同步分离级),从全电视信号中分离出复合同步信号。图象信号和复合消隐信号不必要再分开,可以直接送给显象管作为图象信号使用。图6.7画出一行全电视信号,从中可见,图象信号、行消隐信号、行同步信号三者在时间与幅度上的差别;黑色电平提升量D等于消隐电平与白色电平差值(70%)的0~5%。

综上所述,摄像头图像信号具有三大特征:周期性、单极性和脉冲性。由于周期性的扫描,所以其具有明显的行、场周期性或准周期性。由于图象亮度只有正值而无负值;所以信号是单极性的。信号的脉冲性表面为两点:其一,图象信号本身是一系列象素所产生的电脉冲信号组合而成的。其二,复合消隐和复合同步信号都是周期性的脉冲信号。

6.1.3摄像头路径识别原理

小车在行驶过程中,识别路径时,需要单片机将CMOS传感器采集到的原始数据进行二值化与视频数据去噪处理,以保证路径数据的准确性。单片机对处理后的数据进行分析得到路径识别结果,从而控制直流电机进行速度调节与舵机的转向控制。在对CMOS视频传感器采集的视频数据进行二值化处理时,涉及到

-27-

第二届全国大学生智能汽车竞赛技术报告

视频阈值的选择。本系统在视频阈值的选择上采取自适应动态调整的方式,即采用动态阈值的方法,这是因为考虑到CMOS传感器易受环境光线的影响,该方式能够依据环境光线进行自动调整,为系统提供可靠的二值化阈值。根据自适应方式设置系统的视频阈值,采取如下方式进行二值化分割:1u(x,y)f(x,y)

0u(x,y)式中的u(x,y)为原始数据,f(x,y)为二值化后的数据,为视频阈值。视频数据去噪处理在再现真实的路径信息方面有着不容忽视的作用,正是由于CMOS视觉传感器易受环境影响,才需要去噪算法进行去噪处理,保证视频数据的准确性。

CMOS图像传感器[1]的典型工作流程:

公式3

图6.8CMOS的工作流程

6.1.4摄像头的选取

目前,市场上主要有CCD(电荷耦合器件)和CMOS(互补金属氧化物半导体)

-28-

第六章信息采集模块

两类图像传感器,因此,我们有以下两种选择方案:1)采用CCD摄像头

CCD传感器中每一行中每一个象素的电荷数据都会依次传送到下一个象素中,由最底端部分输出,再经由传感器边缘的放大器进行放大输出。优点:成像质量好,灵敏度、分辨率高、噪声影响弱。缺点:要求的供电电源高,功耗很大。2)采用CMOS摄像头

在CMOS传感器中,每个象素都会邻接一个放大器及A/D转换电路,用类似内存电路的方式将数据输出。

优点:要求的供电电源低,功耗很小,低成本,高整合度。缺点:成像质量不及CCD摄像头好。CMOS与CCD图像传感器的性能比较如下表:

表6.1CMOS与CCD图像传感器的性能

CMOS成像器件噪声电子数工艺难度像敏单元放大器信号输出ADC逻辑电路接口电路驱动电路<=20小有行、列开关控制,可随机采样在同一芯片中可设置ADC芯片内可设置若干逻辑电路芯片内可以设有接口电路同一芯片内设有驱动电路CCD<=50大无CCD为逐个像敏单元输出,只能按规定的程序输出只能在器件外部设置ADC只能在器件外部设置只能在器件外设置只能在器件外设置,很复杂-29-

第二届全国大学生智能汽车竞赛技术报告

上表说明:CMOS成像器件的功能多,工艺方法简单,成像质量也与CCD接近,而在我们实际的应用过程中,由于S12芯片的处理能力不足以达到PC的运算能力,而且CMOS的功能已足够满足性能要求,故我们最后决定使用只有黑白制式分辨率为320×240的CMOSXB-2001B型摄像头,该摄像头具有自动增益控制、内同步、自动背光补偿和低功率消耗等优点。其相关技术参数如下(摄像头型号:XB-2001B型):

表6.2XB-2001B型摄像头技术参数

技术参数解像度照度输出制式有效像素图像区域扫描频率镜头焦距及视角自动快门供电电压/消耗功率0.5LUX参数值380TV线0.01LUX(带红外管)CCIREIA(PALNTSC)标准视频信号628×5825.78×4.19mm50HZ3.6mm921/60秒-1-15.000秒DC9V100Ma由XB-2001B的相关技术参数分析可知,其性能能够满足我们检测道路黑色引导线信息,故而可以确定使用该型号的摄像头。6.1.5摄像头提取信号1、信号提取方式

我们考虑以下两种信号提取方式:

方案一:将摄像头输出的模拟信号直接通过硬件电路(如比较器等)提取出行场消隐信号,并与原视频信号相减,消除消隐信号及同步信号对提取“黑线”冲击信号的干扰,提取出黑线脉冲信号。

方案二:直接将模拟的行场同步信号输入到单片机,利用单片机内的A/D转换

-30-

第六章信息采集模块

模块,实现模数转换,提取出黑线信号。两种方法的比较:

前者直接通过硬件电路实现黑线脉冲的提取,反映速度快,节约CPU资源,缺点是硬件电路较复杂,实现困难;而后者直接将模拟信号输入单片机用软件实现A/D转换,实现简单方便,尽管会占用一定的CPU资源,但是由于一帧图像的采集时间仅为20ms,在这20ms中完成相关图像处理的所有动作,不会对系统的资源占用产生大的影响。经过比较,我们选用了后者来实现。2、电路实现

摄像头采集到的模拟信号从PAD00端输入,经过0.1u电容C1滤波后输入LM1881(行场同步信号分离器)2号引脚进行视频信号处理,其1号引脚Sync_out端输出行同步信号送入单片机端口PT5,3号引脚Verticl_out端输出场同步信号送入单片机端口PT4,如前所述,我们将场同步信号作为一帧图像开始(或结束)的标志,即PT4信号送入单片机判别是否新的一场图像到来,LM1881输出信号送入单片机进行A/D转换,并进一步实现对图像的分析处理。

图6.9视频信号分离原理图

6.1.6摄像头的安装

道路信息获取的媒介摄像头是整个信息系统的关键,为了使其获得的信息足够且可用,那么必须得合适选取其安装位置。安装过低,会视域不够广阔,影响寻线的有效范围;安装过高,指引线在图像坐标上会变得过窄,以致视线模糊,灰度值不明显,而无法检测到,同时整个车体会因重心的抬高而稳定性变差。安装位置合适的一个标准就是:在此位置的拍摄范围大小能满足控制的

-31-

第二届全国大学生智能汽车竞赛技术报告

需要,获取足够的信息。控制的策略简单,则所需的拍摄范围就可较小;反之策略复杂,需获得的赛道信息较多,则拍摄范围应大一些。

经过反复的测试和验证,我们最后得到以下较优的摄像头安装方式:摄像头距地面高度为40cm,离前轮轴心距离为9cm,而前轮轴心距小车最前端距离为5cm,摄像头的倾斜角度为60。。如下图所示:

图6.10摄像头的安装方式

6.2速度检测电路

为了使得小车能够平稳地沿着赛道运行,除了控制前轮转向舵机以外,车速的控制也是十分重要的,保证小车在直道上全速行驶,在急转弯时速度不要过快而冲出跑道等,此时速度的检测显得尤为重要。可以通过控制驱动电机上的平均电压控制车速,可以通过摄像头检测图像黑线中心位置信息控制车速,但是如果开环控制电机转速,会有很多因素影响电机转速,例如电池电压、电机传动摩擦力、道路摩擦力和前轮转向角等。这些因素会造成不仅会造成小车运行的不稳定,还会导致整体速度缓慢等。故而,需要通过速度检测,对小车速度进行闭环反馈控制,则可以在一定程度上消除上面各种因素的影响,使得小车运行得更加精确。为了获取道路信息,若需要得到小车的运动距离,这也可以通过车速的检测来实现。6.2.1检测电路

-32-

第六章信息采集模块

设计如下所示速度传感器检测电路:

图6.11速度检测电路

该模块共3根连接线:电源线,地线,以及一信号输出线。电路中,VCC接5V系统电源,LM311比较器输出接单片机IO口PT7,将检测速度值送入单片机。6.2.2脉冲计数检测速度

我们通过脉冲计数的方法来实现对小车速度的检测:

在靠近小车左轮的轴上装一64等分的黑白相间的编码盘,将测速传感器安装在编码盘垂直对应的车体上,这样当小车前进,车轮转动时,编码盘跟随车轮同步转动,当一个黑色脉冲被红外传感器检测到时,速度传感器的输出就变为高电平,产生脉冲,送给单片机的ECT模块,ECT模块捕捉脉冲信号并对其进行计数,同样的,当白色被检测到时,也产生一脉冲,送以单片机计数,在一特定时间内(20ms,即摄像头采集一帧图像的时间)读出脉冲总数,将该总数除以车轮转动一圈移过的脉冲数目,便可以计算出车轮的转动圈数,再乘以车轮周长,得到行驶路程,再除以计数时间,最后得到小车的速度。

假设N为一个采样周期T内ECT模块记录的脉冲个数,T为采样周期(单位为s),l为小车后轮周长,s为小车前进距离,v为小车的速度。则:

-33-

第二届全国大学生智能汽车竞赛技术报告

s

Nl64

sT公式4公式5公式6

又由:速度v即有:v

Nl64T经过测量,小车后轮周长l=157mm,而采样周期T=20ms,从而,速度为:

v0.1226N(m/s)公式7

6.3加速度传感器[14][15]

6.3.1加速度传感器简介

加速度传感器是利用电容的原理设计出来的,我们知道:电容值的大小与电极板的面积大小成正比,和电极板的间隔距离成反比。从图13可以看到,黑色部分代表可移动的电极板,而其上方(白色)与下方(灰色)偏置板则是固定的电极板,此时黑色电极板与两个偏置板形成两个电容,当黑色电极板因加速度的影响而改变其与偏置板的间隔,则使得电容值改变进而促进电容电压值的改变,因此,可借此特性来计算加速度的大小。

图6.12加速度传感器原理

而加速度传感器可用来实现倾斜度的侦测。加速传感器在静止时,可用来检测倾斜角,倾斜角在90。~90。之间变化时,加速传感器输出会在1.0g~+1.0g之间变化。输出电压对应倾斜角的公式如下示:

VoutVoff(

V1.0Gsin)G公式8

-34-

第六章信息采集模块

其中,Vout=加速传感器的输出;Voff=零加速度;度;=倾斜角6.3.2检测电路

V=灵敏度;1.0G=重力加速GMMA1260D主要根据输出电压值进行测量,当其竖直放置的时候,加速度为0,其输出电压为2.5v,此时倾斜的角度为零;当其正向放置的时候,将会有一个g的加速度,输出电压3.7v;而当反向放置时,将会产生一个-g的加速度,输出电压为1.3v。这两种情况下都认为倾斜角度为90度。

图14[23]给出了MMA1260D加速传感器的典型角度响应,纵轴代表加速传感器的输出电压,横轴代表倾斜角度,从线型可知,在0度范围,倾斜角与电压呈线性变化。而在90度范围,倾斜角与电压则呈现饱和情况。

图6.13MMA1260D加速传感器的典型角度响应

本设计使用MMA1260D加速传感器实现对赛道坡度的检测。其电路连接图如图15示。

-35-

第二届全国大学生智能汽车竞赛技术报告

图6.14加速度传感器检测电路

图中,8号引脚ST接复位按钮,5号引脚STATUS接单片机口PB5,而4号引脚Vout经过1K电阻后接PAD03输出,同时接0.01u电容接地滤波。通过检测口PAD03的电压大小即可得到坡度的检测。

-36-

第七章执行模块电路设计

7.1电机驱动电路

如前所述,本设计采用PWM直流脉宽调速,该方法有效地避免了串电阻调速其调速范围小,平滑性低的缺点,尽管也存在开关过渡过程损耗大,在供电回路中产生谐波等缺点,但可以通过合理选择开关频率等办法弥补不足。驱动芯片采用飞思卡尔半导体公司的半桥式驱动器MC33886。我们考虑以下两种方案:

(一)使用单片的电机驱动芯片:实现简单,但驱动电流仅5A左右。(二)两片电机驱动芯片并联:驱动电流达10A左右。

比较:使用两片驱动芯片其驱动电流大,而且实现起来也不复杂,故而采用方案二,由两片MC33886芯片并联构成,并使用双路PWM信号进行驱动。其实现电路如下:

图7.1电机驱动电路

第二届全国大学生智能汽车竞赛技术报告

7.2舵机

舵机本身时一个位置随动系统。它由舵盘、减速齿轮组、位置反馈电位计、直流电机和控制电路组成。通过内部的位置反馈,使它的舵盘输出转角正比于给定的控制信号。因此对于它的控制可以使用开环控制方式。在负载力矩小于其最大输出力矩的情况下,它的输出转角正比于给定脉冲宽度。经测试,舵机输出转角与控制信号脉宽之间的关系如下:

控制舵机的脉冲由MCS9SDG128的PWM产生。单片机中有8路独立的PWM输出端口,我们将其中相邻的2路PWM输出级联程一个16路PWM输出。

采用组委会统一提供的舵机,工作电源为6.0V,影响舵机控制特性的一个主要参数是舵机的响应速度即舵机输出轴转动角度。舵机转动一定角度有时间延迟,时间延迟正比于旋转过的角度,反比于舵机的相应速度。舵机的相应速度直接影响小车通过弯道时的最高速度,提高舵机的相应速度是提高小车平均速度的一个关键。舵机的响应速度与工作电压有关系,电压越大速度越快,所以应在舵机的允许的工作电压范围内,尽量选择最大的工作电压,可以提高舵机的相应速度,大赛规定不允许使用升压电路为舵机提供工作电压。实际使用过程中,蓄电池电压为7.2V,采用串联两个二极管降压为舵机供电。

-38-

第八章电源模块

8.1总体电源电路

电源是整个系统运转的能源中心,只有保证了电源的合理供给,系统各个部件才能正常的工作,因此,电源管理是十分重要的,那么我们需要对配发的标准车模用蓄电池进行电压调节。单片机系统、摄像头、车速传感器电路,LCD显示电路等各个电路的工作电压不同,我们需要设计方案来使得电压满足各自的要求。本设计中,总体电源管理如图18示。

图8.1电源管理

我们使用各种稳压芯片来满足对各模块不同电压的需求。其中采用LM2575-5.0将电池输出电压稳压到5V对单片机,LCD,速度传感器以及加速度传感器等供电;使用MAX632先将电压升到12V后,再利用LM2490将12V电压将为9V稳压对摄像头供电;使用LM1117-ADJ稳压6V电源对舵机供电。

8.2单片机等5V稳压芯片的选择

8.2.1芯片的选择

第二届全国大学生智能汽车技术报告

5V稳压芯片的选择考虑7805稳压块和LM2575系列两种方法。而7805的一个明显缺点是当输入电压大于12伏时,发热会很厉害,最大的输入电压也只能到15伏左右。原因在于7805属于线性稳压。即如果输入12V,就有7V电压是完全的发热浪费掉。而相比较而言,LM2575系列主要有以下特性:

1、有3.3、5、12、15伏,及可以调整输出电压的版本可供选择。比如LM2575T-5.0,就是固定输出5V电压;

2、可调整输出的电压版本输出电压是1.37到37伏;3、最大输出电流1A;4、输入电压最高40V;5、只需要4只外围元件;6、内部振荡频率为52K;

7、TTL关闭功能,待机状态极低功耗;8、使用高可靠的标准电感(330uH);9、温度及电流限制保护。

经过分析比较,最后决定采用LM2575稳压芯片稳定5V电压。8.2.2电路实现

使用LM2575-5.0实现5V稳压,LM2575-5.0的典型应用是输入电压为7V-40V,通过如下所示连接电路,便可从输出端得到稳定的5V电压。

图8.25V系统电压电路

-40-

第六章信息采集模块

图中,VCC接电池7.2V电压,从1号引脚IN输入,经过LM2575-5.0从2号引脚OUT并通过串联一330欧电感后输出5V电压。所接电容起滤波作用。在输出端接330欧电阻串发光二极管,便于实时查看电路的工作状态(注:后面介绍电路在输出端接330欧电阻串发光二极管作用相同,省略其说明)。

8.3CMOS摄像头用电源

摄像头需要9V的供电电源,先通过MAX632将电池电源升压到12V,再输入到LM2490将电压降到9V向摄像头提供电源。在LM2490的输出端采用了开关电源,若9v电源可用,则直接用9V电源向摄像头供电,只有当9V不可用时,才将其按键转换到12V电源。

图8.3摄像头用电源电路

电池电压通过一330uH电容从4号引脚LX接入MAX632,从5号引脚Vout得到12V的输出电压。再将该12V输出电压从1号引脚IN输入LM2940后从其3号引脚OUT得到9V的输出电压。

8.4舵机电源

同样使用开关电源,开关电源的两种供电方式分别来自于:一是电池电源通过串联两个二极管降压至6V给舵机供电;二是通过LM1117稳压芯片得到6V电源向舵机供电。

-41-

第二届全国大学生智能汽车技术报告

图8.4舵机供电电路

经过实验测试证明,使用LM1117稳压芯片得到的6V电源对舵机的驱动力不足,故而,实际采用电池电源通过串联两个二极管降压至6V为舵机供电。

-42-

第九章调试模块

9.1LCD显示[21]模块

本设计中LCD采用北京青云创新科技有限公司的LCM12864B,LCM12864B液晶显示模块具有以下功能特点:

1)显示内容128x64点阵,点大小0.458×0.458mm2,点间距0.05mm;2)显示类型:STN黄绿模式,6:00视角,正向显示;3)LED背光或EL背光;4)工作电压:5V,不含背光工作电流:7mA(典型值);5)工作温度:-20℃~70℃,储存温度:-30℃~80℃;6)控制器KS0107和KS0108,芯片封装COB。其以上的特点能够充分满足本系统汉字和图形显示需求。该LCD显示模块按照以下电路连接:

图9.1LCD连接电路

图中,VCC2接5V电源,J13LCD--LCM12864B的引脚4-17接单片机IO口PH0-PH2,PA0-PA7,PH3,PH5。

第二届全国大学生智能汽车竞赛技术报告

9.2调速键盘[6]

一共安装4个按键,分为3档速度,高速、中速、低速,从低至高,依次递增,其中3个键分别对应3档速度,最后一个为确认键。有了此调速模块,可以在不改变软件程序的情况下,简单的通过按键就能实现速度的切换,这时,便可以根据不同的跑道和环境,施以小车以其适宜的速度行驶。

图9.2键盘调速模块

图中,VCC3接5V电压,4个按键接单片机IO口PB0-PB3。

9.3速度和转向灯

为方便随时查看小车的速度和转向情况,特制作以下几组发光二极管实时显示其运行情况,从而实现了快速的实时调试。

图9.3速度和转向灯

VCC3接5V电压,4个输出接单片机IO口PS4-PS7实时显示各个模块的工作状态。

-44-

第十章系统软件设计

10.1概述

硬件是整个系统的躯体,而软件就是赋予其思想的灵魂。在小车的整个软件设计中,主要有以下几个方面:一、摄像头图像采集;二、摄像头图像处理;三、速度控制;四、角度控制。其中图像采集和处理是后两者的基础,故而我们先介绍设计的总体过程,再从图像采集入手,逐步介绍各个模块。

10.2整体过程

在摄像头采集的一帧数据中,将采集的数据分析处理提取每行的黑线中心位置,继续对该数据处理为后面控制策略作准备,准备工作结束,利用信息分别对电机和舵机实现闭环反馈控制。

图10.1软件设计过程

第二届全国大学生智能汽车竞赛技术报告

10.3MCU简介

系统的信息处理是通过MCU最小模块来实现的,主要是对速度和位置传感器的信息进行分析处理,再对电机和舵机发出相应的控制命令,而且还要实现和调试模块的信息交换。MC9S12DG128B单片机属于飞思卡尔MC9S12系列,它是以高速的CPU12内核为核心的单片机,外部输入时钟经过内部锁相环后,时钟频率频率可达48MHz,内部Flash高至128KB,拥有8路10位A/D、16路I/O口,有功能强大的8路8位(或4路16位)PWM输出,以及8路飞思卡尔特有16位的增强型定时器。该MCU功能强大,完全胜任小车的检测和控制功能。MCU由供电电路、时钟电路、复位电路、BDM下载口等几个模块组成。

10.4图像采集

摄像头为320×240单板摄像头,为了使得采集的数据能够比较准确的反映道路信息,需要尽可能多的采集图像,但是由于S12片内AD转换能力的限制,一帧图像所能够采集的行数和列数是有限的。而且,比赛跑道为在白色底板上铺设黑色引导线,干扰信息较少,因此只要在一行上采集了足够多的信息点,不需要太多的行数便可以实现对黑线的检测。在经过多次的实践测试后,我们最后得到每帧采集40行50列的数据即可。

采集数据的过程如下:因为一帧数据的前28行为场同步脉冲,故而将其舍弃,判断是否到达第28行,是则开始数据的采集,并且采用隔行采集,每隔7行采集一次,每一行采集50个点,并采集的数据点保存,一行的列数采集完毕,则将列计数清零,行数采集到40,一帧数据采集完毕,行计数清零,为下一帧数据的采集做好准备。

具体实现过程见以下流程图所示:

-46-

第十章系统软件设计

图10.2图像采集流程图

-47-

第二届全国大学生智能汽车竞赛技术报告

10.5黑线中心位置的提取

10.5.1中心提取过程

我们对每行黑线中心位置的提取方法作以下叙述:(1)

为了缓解CPU堆栈的压力,将图像采集到的数据存放的二维数组的数据,重新存入一维数组中;

(2)

因为采集的一帧图像中,其行排序是从离摄像头最远的位置到最近的位置,列的排序方法是从左至右,而小车行进最主要依据的是离车体近的位置的黑线情况,故而为了方便数据的识别处理,我们在将二维数组的数据赋值给一维数组时,行列顺序是按照由近到远,从左向右的方向实现的;

(3)

在一帧的图像中,采用边界提取算法来实现黑线中心位置的提取。由于赛道的白色底板和黑色引导线的灰度值相差较大,因此我们可以通过确定一个黑色和白色的阈值来区分黑白。判断相邻数据点灰度值的差值是否大于(或小于)该阈值,从而确定此时是否为黑线的入口(或出口)。经过多次实践测试,最后确定阈值为16。从最左端的第一个有效数据点8(因为前7个数据为行同步信号,舍弃)开始依次向右判断其阈值,由于实际中黑白赛道边沿可能会有模糊偏差,使得阈值不是简单的介于相邻的两个点之间,很可能需要相隔两个点,因此,我们从第j行开始,判断和j+3的差值是否大于阈值,是则将j+2记为j,并将j+3赋为黑线入口点,否则则判断是否小于该阈值的相反数,是则将j+2记为j,并将将j+3赋为黑线出口点。

(4)

根据是否探测到黑线的入口和出口,给黑线的出入口标识符赋以对应值。接下来,根据这两个标识符的值来确定黑线的中心位置,分为以下四种情况:

1○若黑线的出入口均被检测到,则将黑线出口的列值减去2便得到其

中心位置(因为黑线宽度占4-5个数据点);

2○若仅检测到入口,未检测到出口,则说明此时黑线相对于小车右偏,

赋予黑线中心位置为列最大值;

-48-

第十章系统软件设计

3○相反,若仅检测到出口,则说明黑线相对于小车左偏,赋予其中心

位置列最小值,这里赋值为7,因为前7行为行同步信号,应舍弃;

4○若入口和出口均未检测到,说明检测数据出现问题,此时赋以其中

心位置一个特殊值,以便后面程序判断。

(5)

在经过以上处理提取出每行黑线的中心位置后,为了减小干扰,对得到的50行中心位置进行中值滤波处理。

(6)

虽然摄像头采集的数据详尽丰富,但是经过实践检测,我们得到只需14行数据即可,太多的数据信息不仅会占用CPU时间,而且也不能给我们带来更多有用的信息,故而,我们再次对前面得到的40行数据进行处理,每隔3行经中值滤波得到最终的14行。在这14行中,如果出

4现(4)中○中提到的情况,即采集到错误的数据时,分以下两种情

况进行处理:如果此行为最后一行,基于一种数据保持的想法,将上一帧的第一行值赋给它,否则就将该帧中前面一行的数据赋给它。

在此,值得说明的一点是:虽然理想的跑道是白色底板黑色引导线的,但是由于小车多次在跑道行驶,会对跑道造成一定的磨损等,而且由于周围的环境影响等,不能够保证跑道上除了黑色引导线外,全是单纯的白色底板,可能会有一些不可预知的小黑点,而又由于摄像头高精度的检测,会有可能将此本为干扰的小黑点检测到当作黑线,遇到这种情况的时候,需要加强抗干扰措施。为此,我们先在这里引入一个干扰量disturb,赋初值为0,当出现如上述(4)中

4第○点情况的时候,其值便加1,设置一个干扰量数据阈值,若干扰量大于该阈

值,说明此黑点是偶尔出现的造成干扰的黑点,摄像头探测范围过广,小车已经冲出跑道,那么该数据为采集的错误值,应当被舍弃;反之,若干扰量小于该阈值,说明未冲出跑道,采集数据正确,那么该数据即为采集到的黑线数据。总起来说,黑线中心位置的提取按照以下4个步骤实现:Step1、寻找黑线边界位置;Step2、初步确定每行黑线中心位置;Step3、滤波得到黑线中心位置;

Step4、隔行提取,得到最终黑线中心位置数据。

-49-

第二届全国大学生智能汽车竞赛技术报告

10.5.2实现流程图

将其中重要步骤实现作流程图如下:1、寻找黑线边界位置

图10.3寻找黑线边界位置流程图

-50-

第十章系统软件设计

2、初步确定每行黑线中心位置

图10.4初步确定黑线中心位置流程图

10.6电机空载实验测试

1、占空比与对应的脉冲数测试条件:电压7.91V单位时间:1.15秒

表10.1占空比与脉冲数对应

占空比脉冲数占空比脉冲数1500159070070314001362600595130012825004961200117840038611001082300269100010042001429009071000800808﹨﹨-51-

第二届全国大学生智能汽车竞赛技术报告

3、占空比与每秒的脉冲数关系:

表10.2占空比与每秒脉冲数关系

占空比16005001400130012001100940.87300233.911000873.04200123.48脉冲数(每秒)1467.831382.611184.351114.781024.35占空比脉冲数(每秒)800702.61700611.3600517.39500431.3400335.65Nl(m/s),其中车轮周长l=0.157m。

64T4、得到占空比与速度的关系:利用速度公式:v

表10.3占空比与速度关系

占空比速度(m/s)占空比速度(m/s)16007.668003.6715007.227003.1914006.186002.713005.825002.2512005.354001.7511004.913001.2210004.562000.649004.121000借助matlab工具,速度与占空比关系如下:

图10.5速度随占空比变化关系

-52-

第十章系统软件设计

5、在摄像头一帧图像的采集时间20ms时候,占空比为60%(1200)时,其速度和脉冲对应关系:

表10.4速度和脉冲对应速度(m/s)脉冲数速度(m/s)脉冲数速度(m/s)脉冲数速度(m/s)脉冲数速度(m/s)脉冲数0.100.381.104.222.108.053.100.200.771.204.602.208.433.200.301.151.304.982.308.813.300.401.531.405.372.409.203.400.501.921.505.752.509.583.500.602.301.606.132.609.963.600.702.681.706.512.700.803.071.806.902.800.903.451.907.282.901.003.832.007.663.0010.3510.7311.1111.503.703.803.904.0011.8812.2612.6513.0313.4113.8014.1814.5614.9515.334.104.204.304.404.504.604.704.804.905.0015.7116.1016.4816.8617.2517.6318.0118.4018.7819.166、由于脉冲数目总应该是正数,故将以上数据输入工具matlab[4]中进行处理,利用取整函数round(四舍五入),脉冲数整数化之后得到以下关系:

表10.5取整后速度和脉冲对应关系

速度(m/s)脉冲数速度(m/s)脉冲数0.100.001.104.000.201.001.205.000.301.001.305.000.402.001.405.000.502.001.506.000.602.001.606.000.703.001.707.000.803.001.807.000.903.001.907.001.004.002.008.00-53-

第二届全国大学生智能汽车竞赛技术报告

速度(m/s)脉冲数速度(m/s)脉冲数速度(m/s)脉冲数2.108.003.102.208.003.202.309.003.302.409.003.402.502.602.702.802.903.0010.0010.0010.0011.0011.0011.003.503.603.703.803.904.0012.0012.0013.0013.0013.0014.0014.0015.0015.0015.004.104.204.304.404.504.604.704.804.905.0016.0016.0016.0017.0017.0018.0018.0018.0019.0019.00利用matlab做图得到其对应关系:

图10.6取整后速度和脉冲对应关系

脉冲数=3.8194×速度+0.0204公式9

可以看出,脉冲数与速度基本上呈线性关系,可以利用以上关系通过预设脉冲数而预设小车的速度值,以实现速度的闭环控制。

-54-

第十章系统软件设计

10.7速度控制准备工作一

经过多次测试验证,我们得到一帧图像中一行的点28为摄像头象素中间位置。将前面得到的14行数据的黑线中心位置与摄像头像素的中间位置相减即可得到该时刻小车偏离黑线中心的程度,并将这一组偏差值存入一偏差数组中。在一帧图像中,用最末一行的偏差值减去首行的偏差值即得到该黑线在这一帧图像中的斜率大小;用最末行的偏差减去中间行的偏差得到值1,用中间行的偏差减去首行的偏差得到值2,再将值1减去值2便求得该帧图像中前后两半图像的斜率差别值。从速度传感器模块取得小车的速度值。在一帧图像中,用首行的黑线中心值减去中间行的黑线中间值得到斜率slop1,用中间行的黑线中心值减去最末行的黑线中心值得到斜率slop2,再将斜率slop1和斜率slop2相加得到该帧图像前后两半图像的斜率和值slop_add。根据前述所设的干扰值disturb的大小,判断小车是否冲出跑道,该帧图像值是否错误,若其值小于阈值,此时小车正常运行,未冲出跑道,采集图像信息正确可用,那么,在此情况下,即可对通过该图像信息对小车的速度和角度进行控制了。由于赛道形状并非单一,包括普通直道,大弯道(曲率半径大),小弯道(曲率半径小),S道,还有坡度等,那么为了小车能够稳定的运行于整个赛道,需要对不同形状的赛道施以不同的控制策略,从而,第一步需要做的是区分出直道,弯道,S道等不同的赛道。在整个控制过程中,我们的主要思想是利用摄像头采集的数据和速度传感器获得的速度值对其速度实现闭环反馈控制。方法如下:

当前速度Curspeed预设速度speed_expPID控制+——

图10.7速度反馈控制

10.7.1赛道形状的区分

对于摄像头采集的数据,我们已经得到每行的黑线中心位置及其偏差值,还有一帧图像中黑线的几种斜率值,这时,我们就根据这一系列数据来判断前方赛道的形状和小车行驶的情况。

-55-

第二届全国大学生智能汽车竞赛技术报告

如图10.7示说明:

图10.8赛道形状区分

1、若一帧图像中的前半块图像的斜率与后半块图像的斜率符号相反,那么则说明前方赛道是S形的,因为摄像头探测的距离足够远,对于这种形状的赛道,其半个S已被摄像头视野囊括,容易知道,在半个S形状中,其前后斜率符号是相反的,故而通过判断前后斜率之积slop1×slop2是否小于0来确定其是否为S道。

2、若不为S道,则继续向下判断,如果前后斜率和值slop_add很小(处于很小的一个活动范围内),则说明前方赛道为直道。因为在整个这帧图像中,斜率值相差很小,则前后形状相近(或相同),而且各自的斜率值本身也小,从而确定其为直道。

3、若以上两种情况均不满足,则判断其是否为大弯道(曲率半径大),通过计算其前后斜率和slop_add的值是否很大(或处于一个较大的范围内,如-40<=slop_add<=-8或8<=slop_add<=40),是则确定其为大弯。4、上述三种情况都不成立的时候,将道路形状确定为普通道路。流程图如下:

-56-

第十章系统软件设计

图10.9道路形状区分流程图

10.7.2相应的速度和角度控制策略

区分出道路的形状后,采取对应的速度和角度控制策略:1、

若为S道,且有斜率和值在一小范围内(-5<=slop_add<=5),角度控制量为首行偏差,速度控制量为0,即用最前面的偏差控制小车的舵机偏转,而当小车进入S道时,摄像头的最前端范围正处于其对应半S的位置,两者的黑线中心位置几乎相同,此时以最前行的偏差作为其控制量,并且施以全速,则小车可直接根据最前方的黑线位置全速冲过S弯,不必沿着S前进,该策略可节约很多时间,提高整体速度。2、

若判断为直道,则以该帧图像中的居于中间位置的数据行控制角度即可,直道安全,以全速前进。3、

若判断为大弯道,此时由于小车刚进弯时,由于弯度不大,则其判为普通弯道,减速运行,实现“进弯减速”,当逐渐运行到弯度较大处时,说明小车快要出弯,则全速运行,实现“出弯加速”。4、

当为普通道路时候,这种道路是出现次数最频繁,其控制需要考虑周详,准确化,通过速度传感器采集的速度对速度和角度实现闭环反馈控制。

-57-

第二届全国大学生智能汽车竞赛技术报告

10.7.3普通赛道的情况

为保证小车的稳定运行,不至出现高速行驶时,突然出现弯道而来不及拐弯,或转弯角度太小等情况,我们采取这种速度越大,转角越大的控制策略。1、若测得速度值小于等于5,此时速度比较小,角度控制行steer_ccd设为靠中间的数据行第7行;

2、若测得速度值大于5且小于10,速度越大,转角越大,角度控制行steer_ccd设为(7-速度值/3);

3、若测得速度值大于等于10,速度很大,增加其转弯角度,则设其角度控制行steer_ccd为(6-速度值/2)。

4、若在以上情况中计算出现了steer_ccd小于0的情况,则将其直接置为0;以行steer_ccd控制小车舵机的角度偏转,以首行控制控制其电机速度。判断如果速度控制量小于0,经反复测量调试,将其值加2即可;否则应减2。如果速度控制量过大(正数)或过小(负数),为防止速度出现异常,将速度控制量置为0。控制流程图:

-58-

第十章系统软件设计

图10.10不同道路对应动作流程图

-59-

第二届全国大学生智能汽车竞赛技术报告

10.8速度控制准备工作二

10.8.1速度控制

先预设一速度增益量k_speed,为后面求预定速度值作准备,若所测速度较大(如大于一阈值14),则得其速度增益量为速度控制量的1/2;速度控制量越大,相应的速度增益量越大,则其预设速度值不应该过大,应该保持一居中速度值保证小车速度的恒定。速度增益量同样应该在一确定范围内,大于该范围,则将其置为该范围的上下限定值。若在上述计算得到的速度增益量为正值,则得其预设速度值与速度增益量和所测速度值成反比;相应的,若增益量为负值,则其预设速度值应正比于速度增益量,而反比于所测速度值,从而保证速度的稳定。

-60-

第十章系统软件设计

图10.11速度控制流程图

-61-

第二届全国大学生智能汽车竞赛技术报告

10.8.2舵机控制

由于舵机的转角范围有限,故转角控制量的值应处于一定范围内,若其控制量controler_steer超出范围,则将其赋值为边界阈值。同速度控制一样,先预设一角度增益量k_steer,并根据角度控制量的值和测得的速度值确定该角度增益量值大小。

图10.12舵机控制流程图

10.9速度控制方案

考虑Bang_Bang控制和PID控制两种方案。(1)Bang_Bang控制

-62-

第十章系统软件设计

在每一个控制周期中,检测一次赛车的当前速度值。若速度值小于预定的速度值,则将驱动电机PWM输入的占空比置为100%;若速度大于预定的速度值,则将驱动电机PWM输入的占空比置为0。(2)PID控制[3]

在每一个周期中,将检测到的速度值存入数组,直到共存入3个数值为止,将该3个速度值与预设速度值相比较得到3个偏差值,PID控制就是利用这几个偏差值实现对速度的闭环反馈控制。控制过程主要是kp,ki,kd三个参数的调节。(PID控制方法的详细介绍见10.10节)

(3)决策方案:Bang_Bang控制方法简单,实现容易,但是这种速度突增突减的方式会使得小车震动,运行不稳定。而PID控制具有很强的灵活性,可以根据试验和经验在线调整参数,可以更好的控制性能。其有控制精度高、超调小的优点,从而使静态、动态性能指标较为理想,同时又达到了准确、快速测定的目的。其中比例控制的优点是:误差一旦产生,控制器立即就有控制作用,使被控量朝着减小误差方向变化。积分控制的优点是能对误差进行记忆并积分,有利于消除静差,就像人脑的记忆功能。微分作用的优点是它具有对误差进行微分,敏感出误差的变化趋势,增加系统稳定性,就像人脑的预见性。总体上是比例带越大,过渡过程越平稳,但余差越大。比例带越小,过渡过程容易发生振荡。积分时间越小,消除余差就越快,但系统振荡会较大,积分时间越大,系统消除余差的速度较慢。微分时间太大,系统振荡次数增加,调节时间增加,微分太小,系统调节缓慢。

根据以上比较,可以看出PID控制性能远优于Bang_Bang控制,尽管调试起来会相对复杂一些,但是基于其准确、快速的控制,本设计最终选取利用增量式PID算法实现对小车速度的控制。

10.10应用PID算法控制电机[17]10.10.1PID简介

模拟PID调节具有原理简单、易于实现、鲁棒性强和适用面广等优点,在实际应用中,根据实际工作经验在线整定PID各参数,往往可以取得较为满意的控制效果。数字PID控制则以此为基础,与计算机的计算与逻辑功能结合起来,不但继承了模拟PID调节的优点,而且由于软件系统的灵活性,PID算法可以得到

-63-

第二届全国大学生智能汽车竞赛技术报告

修正而更加完善,使之变得更加灵活多样,更能满足生产过程中提出的各种控制要求。

10.10.2PID控制原理

设系统的误差为e(t),则模拟PID控制规律为:1

u(t)Kpe(t)

Ti

t0

e(t)dtTdde(t)

dt

公式10

式中,u(t)――控制量(控制器输出);

e(t)――被控量与给定值的偏差(即e(t)r(t)y(t));Kp――比例系数;Ti――积分时间常数;Td――微分时间常数。

它所对应的连续时间系统传递函数为:U(s)1

Kp1TdsE(s)Tis其结构框图如下图:

公式11

图10.13PID控制方框图

将上式离散化,即将描述连续系统的微分方程代之以等效的描述离散系统的差分方程,就可以得到相应的数字PID调节器。

-64-

第十章系统软件设计

利用矩形法进行数值积分,即以求和代替积分,以差分代替微分,可得到数字形式的PID控制规律1

u(k)Kpe(k)

Ti

eiTTdi0

ke(k)e(k1)

T

公式12

若T足够小,则上式可相当准确地逼近模拟PID控制规律。根据上式写出前一时刻的输出有:1

u(k1)Kpe(k1)

Ti将两式相减,得到:

eiTTdi0

k1

e(k1)e(k2)

T

公式13

Tk1e(k)2e(k1)e(k2)

u(k)u(k)u(k1)Kpe(k)e(k1)eTTid

Tii0T

公式14

为了便于编程,同类项合并得到:增量式PID控制算法的公式:

u(k)KpA1e(k)A2e(k1)A3e(k2)其中,A11

公式15

TTTiTdA2(1

2Td)TA3

TdT控制输入量e(k)为小车偏离黑线中心的位置。10.10.3PID流程图

本设计中采用数字式增量PID控制算法,先从速度传感器获得小车当前运行速度,直至获取3次速度值,并将其存入数组中,求得三次速度值与预设速度值的偏差,根据公式6代入3次速度偏差值求得小车速度,并控制小车速度运行。

-65-

第二届全国大学生智能汽车竞赛技术报告

图10.14PID控制流程图

-66-

第十章系统软件设计

10.11赛车跑法简析

根据孟昭曜的《F1赛车弯道技术的力学分析》[12][13],从力学角度分析,过弯道时,快速和安全往往很难统一,但弯道同时又是赶超对手的大好时机,加上情况瞬息万变,所以比赛中对弯道技术要求特别高,最基本最重要的就是选好通过弯道的最佳路线。假设一段赛道如图10.14所示,取弯道为90度,外弯道和内弯道的半径分别为R和r。考虑到路面的粗糙程度相同,摩擦系数相等。从表面上看,一般会认为从外道驶过路线的圆周弧线比内道弧线的长度大,所以行驶外道会吃亏。我们做以下分析:

图10.15赛车的内外弯道

赛车在平直的道路正常行驶,其速度值能达到其所能达到的最大值,设其为Vm,转弯的时候,若赛车做圆周运动,其向心力由地面的静摩擦力提供,即有:v2

mf公式16Rfmaxmg公式17由上述公式16和公式17可解出

vRg达到一定大小。

公式18

这说明在弯道处所允许的最高车速受到轨道半径和路面摩擦系数的限制,只能

假设赛车在弯道上均以允许的最大速度行驶,则在图2所示的内外道上经历的时间分别是

t

r

2rg2rg-67-

公式19

第二届全国大学生智能汽车竞赛技术报告

T

R

2Rg2Rg公式20

因为R>r,所以T>t,赛车跑在外道上的时间要比跑内道的长。但根据公式18,考虑到进出内弯道的速度都小于在外弯道的速度,在进出内弯道刚时势必需要更长的刹车时间和加速时间,会使得赛车进出弯道的速度落差极大,全程考虑并不一定划算。

若不用煞车减速通过弯道,如图10.15所示,由于这类弯道转角不大,车既没有沿内道走,也没有沿外道走,而是近乎跑了个直线。正如上面所分析的,没有进出弯道的速度落差,行走路线的长度又在内弧线和外弧线长度之间,应该是一条最佳路线。

图10.16不用刹车减速通过的弯道

若使用“外-内-外技术”,这是F1赛车弯道技术中最基础也最常用的技术。所谓的外-内一外,是指赛车通过弯道的路线(见图10.14,图10.16),以图10.16中赛车通过的所谓“发卡弯”来看,内一内一内这条白线明显短于外一内一外这条黑线,那为什么赛车却要选走外一内一外呢?我们做以下分析:

-68-

第十章系统软件设计

图10.17发卡弯赛道

内内内确实是最短的线,但实际上赛车通过弯道最先考虑的是“能最快通过弯道的线”,至于是不是最短的线倒并非绝对因素,赛车首重是时间,而不是距离。数学上内内内是最短没错,但在实际上,行走内内内的路线会使得赛车进出弯的速度落差极大,为了要在这么小的回转半径通过弯道,车速势必要降很多,对于出弯的加速极为不利,反而外内外虽非最短路线,但它却能提供赛车以比较高的速度过弯,两者相较之下,反而是外内外以比较短的时间通过弯道,而“时间”正是决定比赛胜负的因素。

以过弯而言,赛车追求的不只是最快速的通过弯道,还有最快的出弯速度,倘若只是比别人更快进弯,但出弯若是慢慢来还是会被对手赶过去,反之若有比对手更快的出弯速度,那即使是跟在对手后方,出弯后仍然可以超越他。因此还有一种重视出弯速度的外外内取线。

图10.18外外内跑法

-69-

第二届全国大学生智能汽车竞赛技术报告

蓝线就是外外内。宏观来看它仍属于外内外的取线(可以称为一种变种路线,只是为了方便区隔我们暂且以外外内来称呼)。出弯的速度决定于赛车过了临界点后一直到弯道出口的加速路程长短,谁过了临界点后能越早加速就拥有越好的出弯速度,从图上可以看出外外内因为走线不对称,临界点提前了,使得它拥有比较长的出弯加速路程,所以有更高的出弯速度,相当有利于在出弯后超越别人。但是外外内也存在可能会因速度过快而冲出弯道或撞墙,因为行进路线过于崎岖而错失一口气顺利通过复合弯道的机会等缺陷。

综上所述,通过对F1赛车几种弯道技术的力学分析和效果比较,外一内一外还是王道!但这规则并非一成不变,实际在多车竞技时,状况会变得相当复杂,对前要攻击,对后要防御,懂得灵活运用,外一外一内就有机会突破外一内一外的防御,甚至在某些特殊状况下,说不定内一内一内反而是是有利的路线。

10.12小结

在系统的整个软件设计过程中,先由摄像头采集道路图像信息,处理数据得到赛道黑线中心位置以及小车偏离黑线中心的程度,对此信息进行深入的分析和处理,对舵机转向进行控制,并利用PID控制算法实现对速度的闭环控制。在小车整个赛场的弯道行进过程中,我们在一定程度上借鉴了F1赛车的“外内外”跑法,能以比较高的速度过弯,而且出弯的加速快,能以较高的出弯速度行驶,从整体上提高了小车速度。

-70-

第十一章开发工具与调试

我们采用MC9S12DG128单片机作为主控芯片。DG128是飞思卡尔公司推出的S12系列单片机中的一款增强型16为单片机。片内资源丰富,拥有SPI、SCI、I2C、A/D和PWM等常见的接口模块,在汽车电子应用领域具有广泛的用途。MC9S12DG128单片机介绍:

CPU:增强型16位HCS12CPU,片内总线时钟最高可达25MHZ;片内资源:8KRAM、128KFlash、2KEEPROM;串行接口模块:SCI、SPI/PWM;

脉宽调制模块(PWM)可设置成4路8位或者2路16位,逻辑时钟选择频率宽;两个8路10位精度A/D转换器;控制器局域网模块(CAN);增强型捕捉定时器;支持背景调试模式。

在整个开发调试过程中,我们采用CodeWarriorforHCS12[10]作为程序编译软件。CodeWarriorforHCS12是面向以HC12或S12为单片机嵌入式应用开发的软件包,包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器等。在CodeWarrior软件中可以使用汇编语言或C语言,以及两种语言的混合编程。CodeWarriorIDE能够自动地检查代码中的明显错误,它通过一个集成的调试器和编辑器来扫描代码,以找到并减少明显的错误,然后编译并链接程序以便计算机能够理解并执行程序。每个应用程序都经过了使用象CodeWarrior这样的开发工具进行编码、编译、编辑、链接和调试的过程。

第二届全国大学生智能汽车竞赛技术报告

CodeWarriorforHCS12建立工程编写程序使用过程:

图11.1CodeWarrior程序编写运行过程

S12系列单片机采用了BDM(BackgroundDebugModel,背景调试模式)的调试方式,在BDM模式下主要可以实现以下3方面的功能:应用程序的下载与在线更新;单片机内部资源的配置与修复;应用程序的动态调试。

BDM单独使用时,需要通过5V电源插座给BDM头供电。用BDM头调试目标系统时,BDM可以通过BDM电缆向目标板供电,BDM头的电源的供给也可以从BDM电缆得到。下图11.2给出了PC机通过BDM头与目标机相连的示意图,也给出了BDM调试插头、插座的定义。需要注意的是:BDM电缆的6针插头座一定不能插反,否则会引起BKGD引脚(S12单片机的I/O端)与电源(Vdd)短路,会烧毁BKGD引脚,烧毁单片机!

-72-

第十章系统软件设计

图11.2PC通过BDM头与目标机相连

在我们的开发调试中,整个过程均使用C语言实现程序的编写,通过BDM调试器将系统与PC机相连(如图11.1所示),将PC机中CodeWarriorIDE中编写的程序下载到HCS12单片机中,赋予整个系统的软件算法,实现整个控制过程的软件和硬件的结合。

-73-

第十二章结论

文章介绍了我们为第二届“飞思卡尔”杯全国大学生智能汽车竞赛准备的智能小车的制作方案。本文详细的介绍了整套智能车的寻线设计过程,系统将图像采集模块,速度采集模块以及加速度传感器模块采集到的路况信息和速度信息送以整个系统的核心部分MC9S12DG128进行分析处理,然后发出相应命令输出到执行模块的电机和舵机执行适宜的速度和转向动作。

系统依靠摄像头采集道路图像信息,利用速度传感器脉冲计数实现对速度的检测,采用单轴加速度传感器识别坡度,使用两片MC33886并联实现双路PWM驱动电机,串二极管降电压为舵机供电,采用LM2575等稳压芯片为各模块提供电源,并配以LCD和键盘实现实时调试。

本设计充分利用摄像头探测距离长,道路可预测信息强的优点,对其采集到的道路信息进行分析处理,利用PID算法实现对小车行进的控制。根据摄像头对黑白灰度值不同的分辨采集赛道的黑线信息,根据得到的每帧图像信息,判断小车偏离黑线的程度和前方赛道是直道、弯道抑或是S道,再根据各种不同的赛道,予以相应的控制策略,基于“进弯减速,出弯加速”的原则,并且以直线方式冲过S道以减少转弯浪费的时间,利用摄像头得到信息的预测方向,使小车能够提前准备转弯等动作,从而防止小车因为直道加速过大而使得转弯时速度难以减下来而冲出赛道,分析摄像头获得的图像信息,读入速度传感器获得的速度,利用增量式数字PID算法实现速度的闭环反馈控制。

测试表明:该智能车能够很好的跟随黑色引导线,可以实现对应于不同形状的道路予以相应的控制策略,可快速稳定的完成的整个赛道的行程。本设计的特色:

(1)采用增量式数字PID实现了速度的闭环反馈控制,小车的加速减速精

确、迅速。

(2)在一定程度上引进了F1赛车跑法,小车过弯更稳更快,从整体上提

高了小车速度。

(3)本设计算法中区分直道,弯道,S道等各种不同形式的赛道,并施以

第二届全国大学生智能汽车竞赛技术报告

各自对应的控制策略,值得一提的是:我们设计以直线方式冲过S道,节约了舵机在来回拐弯上浪费的很多时间。

(4)我们采用加速度传感器检测坡度,利用加速度传感器对于不同的倾斜角度有不同的加速度,输出不同的电压值,依据该电压值检测赛道坡度。存在的问题及改进之处:

(1)F1赛车跑法的运用经验不足。在小车整个赛场的弯道行进过程中,我们在一定程度上借鉴了F1赛车的“外内外”跑法,能以比较高的速度过弯,而且出弯的加速快,但是由于对该赛车算法的理解还不够深刻,没有能够比较全面的将该算法应用于整个行进过程中,在这方面还有较大的发掘潜力。

(2)机械结构改装还需完善。在模型车底盘性能调整方面,主销后倾、主销内倾、前轮外倾和前轮前束几个车轮定位参数之间的关系调整还没有达到最佳,在该方向还可改进。

(3)摄像头的安装方式仍需改进。摄像头的安装高度和倾斜角度还值得进一步分析验证,以寻求更好的图像采集范围。

-76-

致谢

在本次智能车的设计制作中,我们要感谢指导老师吕霞付老师和陈勇老师,感谢他们在我们的设计制作期间对我们倾注的大量心血,感谢他们为我们的设计出谋划策,在制作过程中的热心指导。他们不仅对我们的制作过程提供切实可行的思路,而且提出了很多宝贵的意见与建议,让我们在理论和实践中都得到了锻炼和提高。

我们还要感谢学校的全力支持,感谢学校数字图书馆提供实验场地,感谢各位老师和同学的关心。

参考文献

[1]王庆有.图像传感器应用技术.北京:电子工业出版社.2003年9月

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

[3]王平,肖琼.计算机控制系统.北京:高等教育出版社.2004年8月

[4]黄忠霖.控制系统matlab计算及仿真.北京:国防工业出版社.2006年7月[5]杜维.过程检测技术及仪表.北京:化学工业出版社2006年3月

[6]王田苗.嵌入式系统设计与实例开发——基于ARM微处理器与uc/os-II实时操作系统.北京:清华大学出版社.2003年10月

[7]胡向东.传感技术.重庆:重庆大学出版社.2006年2月

[8]孙亮.自动控制原理.北京:北京工业大学出版社.1999年8月

[9]邱雪松,冯春阳,金皓纯.自主式探测小车——在智能公交车中的应用.同济大学

[10]邵贝贝.单片机嵌入式应用的在线开发方法.北京:清华大学出版社.2004年10月第1版

[11]李绍民.图像传感器在自主足球机器人中的应用.辽宁:大连民族学院[12]孟昭曜.F1赛车弯道技术的力学分析.重庆:重庆教育学院[13]极品飞车.赛车技巧之弯道天书“外内外”

[14]飞思卡尔半导体.飞思卡尔加速度传感器及特性.www.ECCN.com(中电网

ChinaECNet)

[15]王显巍,贾殿龙,陈俊.智能电风扇.东北大学信息学院.2004年10月[16]Motorla,Inc.HCS12V1.5CoreUserGuideVersion1.2.17August

2000[17]谢世杰,陈生潭,楼顺天.数字PID算法在无刷直流电机控制器中的应用.《现

代电子技术》2004年第2期总第169期

[18]陈宋,李立国,黄开胜.智能模型车底盘浅析.北京:清华大学,汽车安全与

节能国家重点实验室

[19]globalsources电子工程专辑

[20]李绍民.图像传感器在自主足球机器人中的应用.辽宁:大连民族学院.2004

年10月

[21]吴景狄.单片机是怎样在液晶上显示字符的

[22]田淑杭,蔡自兴,邹小兵.移动机器人运动控制器的设计.中南大学.电子产

品世界(ELECTRONICENGINEERING&PRODUCTWORLD)[23]www.ChinaECNet.Com(中电网)

I

附录

A主要芯片模块及数量

序号1234567芯片型号LM1881LM2575-5.0MAX632LM2940-9.0LM1117-ADJMC33886MMA1260D数量1211121作用视频信号分离提供5V稳压提供12V稳压提供9V稳压提供6V稳压电机驱动芯片识别坡度附录

B端口分配情况

端口

速度传感器

摄像头输入

摄像头捕捉

行同步场同步

LCD数据端口

DB0-DB7RSR/W

LCD控制端口

WCS1CS2

电机PWM控制

舵机PWM控制

指示灯

加速减速偏左偏右

调速按键

复位

MMA1260D接口

STATUSVoutIN1IN2

PT7AD0IOC5/PT5IOC4/PT4PA0-PA7PH0PH1PH2PH3PH5PP7PP3PP5PS7/SS0PS6/SCK0PS5/MOSI0PS4/MISO0PB0-PB3STPB5AD1

III

第二届全国大学生智能汽车竞赛技术报告

C系统电路图

IV

附录

D程序源代码

#include

/*commondefinesandmacros*/

/*derivativeinformation*/

#include

#pragmaLINK_INFODERIVATIVE\"mc9s12dg128b\"#defineROW_MAX#defineLINE_MAX

4050

/*采集的最大行数*//*每行采集的最大列数*/

/*每隔INTERVAL_ROW行采集image数据*///数值滤波后选取的行数,38行中每隔3行取一行*/

#defineINTERVAL_ROW7#defineSAMP_ROW14#defineLATCH_P16#defineLATCH_N-16#definePWM_MAX1375#definek11#definek21#definek31#definek42#defineT0.02voidInit_Var(void);voidInit_PLL(void);voidInit_ECT(void);voidInit_PWM(void);voidInit_Var(void);voidimageSamp(void);voidimageProc(void);

/*舵机可调控制系数*//*电机可调控制系数*//*舵机控制中,速度权重*//*舵机控制中,偏移量权重*/

unsignedcharget_mid(unsignedchara,unsignedcharb,unsignedcharc);voidPID_Speed_Ctrl(unsignedcharCurSpeed);floatA,B,C;

floatKp;//速度PID控制参数floatTi;

V

第二届全国大学生智能汽车竞赛技术报告

floatTd;

volatileintPWM_Speed;volatileintspeed_max;volatileintk_speed;

volatileunsignedintcounter_row=0;volatileunsignedintrow=0;volatileunsignedintline=0;volatilecharcontroler_steer;volatilechardif=0;volatilechardiff_slope=0;volatilecharslop=0;volatilechartemp;

volatilechardata[SAMP_ROW]={0};volatilecharerr[SAMP_ROW]={0};volatilecharslop1;volatilecharslop2;volatilecharslop_add;volatilechardisturb;volatilechark_steer;volatilecharspeed_exp;volatilecharcontroler;volatilecharcontroler_speed;volatilecharGetSpeedCnt;volatilecharideltaSpeed[3];volatilecharsteer_ccd;

volatileunsignedcharvertical_start=0;volatileunsignedcharget_speed=0;volatileunsignedcharbuffer_speed[3];volatileunsignedcharin_flag_1;volatileunsignedcharout_flag_1;volatileunsignedcharin_flag_2;volatileunsignedcharout_flag_2;

VI

/*采集的行线计数*/

/*采集的行列线计数*/

/*新的一场场开始标记为1*/

附录

volatileunsignedcharblack_in=0;volatileunsignedcharblack_out=0;

volatileunsignedchartemp_vd[ROW_MAX][LINE_MAX];volatileunsignedcharccd[LINE_MAX]={0};volatileunsignedcharblack_mid[ROW_MAX]={0};————————————————————————/**Title:Init_PLL()*Description:初始化时钟*入口参数:无*出口参数:无*/

————————————————————————voidInit_PLL(void){REFDV=0x03;SYNR=0x07;

}

CLKSEL=0x80;}

————————————————————————/**Title:Init_Var()

*Description:初始化变量*入口参数:无*出口参数:无*/

————————————————————————voidInit_Var(void){inti,j;

vertical_start=0;counter_row=0;

VII

//initiatethePLLclock//Osc16M,busclock32MHz//waituntilsteady

//selectthePLLCLK

while(!(CRGFLG&0x08)){

第二届全国大学生智能汽车竞赛技术报告

row=0;line=0;in_flag_1=0;out_flag_1=0;in_flag_2=0;out_flag_2=0;black_in=0;black_out=0;dif=0;diff_slope=0;get_speed=0;temp=0;controler=10;controler_steer=0;controler_speed=0;slop1=0;slop2=0;slop_add=0;disturb=0;k_steer=0;k_speed=0;speed_exp=0;GetSpeedCnt=3;

PWM_Speed=PWM_MAX;steer_ccd=0;Kp=1.0;Ti=0.0006;Td=0.1;

A=Kp*(1+T/Ti+Td/T);B=Kp*(1+2*Td/T);C=Kp*Td/T;

VIII

附录

for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i————————————————————————/**Title:Init_ECT()

*Description:ECT模块初始化*入口参数:无*出口参数:无*/

————————————————————————voidInit_ECT(void){TIOS=0X00;TSCR1=0X80;TSCR2=0X04;TCTL3=0X0A;PACTL=0X40;TFLG1=0X30;

//DLYCT=0x03;

/*selectallchannelsasinput*/

/*timerenable*/

/*for32Mbusclock,setprescalerto32.76ms*//*DisconnectIC/OClogicfromPT7*//*PT5,PT4CaptureonFallingEdge*//*PT7eventmode,countonfallingedge*//*disablePAOVI,PAI*/

/*clearC5F,C4Finterruptflag*/

/*delay1024busclocktoavoiddiaturb*/

IX

第二届全国大学生智能汽车竞赛技术报告

TIE=0X10;}

/*enableC4Iinterrupt*/

————————————————————————/**Title:Init_ATD()

*Description:AD模块初始化*入口参数:无*出口参数:无*/

————————————————————————voidInit_ATD(void){ATD0CTL2=0xC0;ATD0CTL3=0x08;ATD0CTL4=0x80;ATD0CTL5=0xA0;ATD0DIEN=0x00;}

————————————————————————/**Title:Init_PWM()

*Description:PWM模块初始化*入口参数:无*出口参数:无*/

————————————————————————voidInit_PWM(void){

/*PWM67formotorin1,PWM23formotorin2,PWM45forsteer*/

PWMCTL=0xFB;PWMCAE=0x00;PWMPOL=0xff;PWMCLK=0xff;PWMPRCLK=0x00;

/*choose16-bitmodePWM67,45,23*//*chooseleft-alignedonallchannels*//*choosehighpolarityonallchannels*//*selectclockmode1(SA/B)forallchannels*//*selectPCKA=0,PCKB=0forallchannel*/

X

附录

PWMSCLA=32;PWMPER45=10000;PWMDTY45=775;PWMSCLB=8;PWMPER67=2000;PWMPER23=2000;PWMDTY23=0;PWME=0xA8;}

————————————————————————/**Title:imageSamp()

*Description:对摄像头采集的图像信号进行分析处理,为控制小车作好准备*入口参数:temp_vd[][]*出口参数:data[],disturb*/

————————————————————————voidimageSamp(void){chari=0;unsignedcharj=8;charm=0;charn=0;

/*求出每行黑线中线位置black_mid*/

for(i=ROW_MAX-1;i>=0;i--){in_flag_1=0;out_flag_1=0;

for(j=0;jj=8;

while(jXI

/*舵机selectperiodof10000forPWM45--20ms,50Hz*//*%舵机占空比dutycycleonchannel45*//*电机IN1,1Khz*//*电机IN2,1KHz*/

/*电机IN1,占空比*/

/*电机IN2awlayslow*//*enablePWMonchannel23,45,67*/

PWMDTY67=PWM_MAX;

第二届全国大学生智能汽车竞赛技术报告

dif=ccd[j]-ccd[j+3];if(dif>=LATCH_P){

black_in=j+3;j=j+2;in_flag_1=1;}else{

if(dif<=LATCH_N){black_out=j+3;j=j+2;out_flag_1=1;}}j++;}

if(in_flag_1==1&&out_flag_1==1)black_mid[i]=black_out-2;/*黑线中心位置*/if(in_flag_1==1&&out_flag_1==0)black_mid[i]=50;//右偏if(in_flag_1==0&&out_flag_1==1)black_mid[i]=7;if(in_flag_1==0&&out_flag_1==0)black_mid[i]=60;}

/*滤波,得到滤波后每行黑线的中心位置*/for(i=1;itemp=get_mid(black_mid[i-1],black_mid[i],black_mid[i+1]);

black_mid[i]=temp;}

/*所得ROW_MAX(38)行的黑线中心位置再每INTERVAL_SAMP(3)行确定一行*/disturb=0;

for(m=ROW_MAX-1,n=SAMP_ROW-1;m>=0;m=m-3,n=n-1){

data[n]=black_mid[m];if(data[n]>55){

XII

//左偏

附录

if(n==SAMP_ROW-1)data[n]=data[0];elsedata[n]=data[n+1];disturb++;}}}

————————————————————————/**Title:imageProc()

*Description:利用以上处理后的图像信息实现对电机速度和舵机转向的控制*入口参数:data[],disturb

*出口参数:PWMDTY67,PWMDTY45*/

————————————————————————voidimageProc(void){unsignedintmn=0;speed_max=PWM_MAX;/*计算小车偏离象素点个数*/for(mn=0;mnslop=err[SAMP_ROW-1]-err[0];

diff_slope=err[SAMP_ROW-1]+err[1]-2*err[5];get_speed=(unsignedchar)(PACN32);PACN32=0;

slop1=data[0]-data[6];

slop2=data[6]-data[SAMP_ROW-1];slop_add=slop1+slop2;

if(disturb<=9){//未冲出跑道,处理速度和角度//得到速度和角度控制量

/*28为摄像头象素中间位置*/

XIII

第二届全国大学生智能汽车竞赛技术报告

//普通道路

if(get_speed<=5)steer_ccd=7;

elseif(get_speed>5&&get_speed<10)steer_ccd=7-(char)(get_speed/3);elseif(get_speed>=10)

steer_ccd=6-(char)(get_speed/2);

if(steer_ccd<=0)steer_ccd=0;controler_steer=err[steer_ccd];controler_speed=err[0];

if(controler_speed<0)controler_speed+=2;elsecontroler_speed-=2;

if((controler_speed<=-15)||(controler_speed>=15)){

controler_speed=0;}

//*S弯道和直道*////S弯道if(slop1*slop2<0)

{

if(slop_add>=-5&&slop_add<=5){controler_steer=err[0];controler_speed=0;}}else{

if(slop_add>=-3&&slop_add<=3)controler_steer=err[7];

if((slop_add>=-40&&slop_add<=-8)||(slop_add>=8&&slop_add<=40)){

controler_speed=0;}}

//冲出跑道,加大转弯角度else{

XIV

//直道

附录

if(controler_steer>0)controler_steer=controler_steer+2;elsecontroler_steer=controler_steer-2;}}

//*控制策略*////速度控制

k_speed=(char)(controler_speed/5);//注意,controler_speed最大22,最小-22if(get_speed>=14)k_speed=(char)(controler_speed/2);if(k_speed>18)k_speed=18;elseif(k_speed<-18)k_speed=-18;if(k_speed>=0)

speed_exp=18-k_speed-(char)(get_speed/10);else

speed_exp=18+k_speed-(char)(get_speed/10);if(speed_exp<0)speed_exp=0;//PID控制

PID_Speed_Ctrl(get_speed);PWMDTY67=PWM_Speed;//舵机控制

if(controler_steer>22)controler_steer=22;elseif(controler_steer<-22)controler_steer=-22;if(controler_steer>=0)

k_steer=7+(char)(get_speed/3);

elsek_steer=9+(char)(get_speed/3);

PWMDTY45=(-controler_steer)*k_steer+775;}

————————————————————————/**Title:PID_Speed_Ctrl()*Description:速度的PID控制*入口参数:CurSpeed

XV

第二届全国大学生智能汽车竞赛技术报告

*出口参数:PWM_Speed*/

————————————————————————voidPID_Speed_Ctrl(unsignedcharCurSpeed){

unsignedinti=0;intidelta_PWM_Speed=0;buffer_speed[0]=buffer_speed[1];buffer_speed[1]=buffer_speed[2];buffer_speed[2]=CurSpeed;if(GetSpeedCnt==0){

//已获取了3次速度数据,处理PID运算for(i=0;i<3;i++){

ideltaSpeed[i]=speed_exp-buffer_speed[i];//计算出前三次的偏差}

idelta_PWM_Speed=(int)(A*ideltaSpeed[2]-B*ideltaSpeed[1]+C*ideltaSpeed[0]);PWM_Speed=PWM_Speed+idelta_PWM_Speedif(PWM_Speed>speed_max)PWM_Speed=speed_max;if(PWM_Speed<0)PWM_Speed=0;}else{}}

————————————————————————/**Title:get_mid()*Description:中值滤波*入口参数:a,b,c*出口参数:b*/

————————————————————————

unsignedcharget_mid(unsignedchara,unsignedcharb,unsignedcharc){

XVI

//刷新速度数据

//计算出的当前转速,单位脉冲/20秒

GetSpeedCnt--;

附录

unsignedcharx=0;if(a>b){x=b;b=a;a=x;}

if(b>c){x=c;c=b;b=x;}

if(a>b){x=b;b=a;a=x;}returnb;}

————————————————————————/**Title:ECT4_ISR()

*Description:行场中断初始化*入口参数:无*出口参数:无*/

————————————————————————#pragmaCODE_SEGNON_BANKEDinterruptvoidECT4_ISR(void){vertical_start=1;TFLG1=0x10;TIE_C4I=0;TIE_C5I=1;}

————————————————————————/**Title:ECT5_ISR()

*Description:视频图像采集*入口参数 TD0DR0L*出口参数:temp_vd[][]*/

————————————————————————

XVII

/*clearC4Finterruptflag*//*disableverticalinterrupt*//*enablethehorizoninterrupt*/

第二届全国大学生智能汽车竞赛技术报告

#pragmaCODE_SEGNON_BANKEDinterruptvoidECT5_ISR(void){TFLG1=0x20;counter_row++;

if(counter_row==INTERVAL_ROW){row++;counter_row=0;

if(row>=4)/*从第28行开始采集数据,每隔7行采集一次*/{

TIE_C5I=0;/*视频图象采集过程,屏蔽中断*/if(row<=ROW_MAX+4){

Init_ATD();

for(line=0;line/*采集数据*/

while(!ATD0STAT1_CCF0);temp_vd[row-4][line]=ATD0DR0L;}

ATD0CTL2=0x00;line=0;}TIE_C5I=1;{

TIE_C5I=0;TIE_C4I=1;counter_row=0;row=0;}}}}

XVIII

/*clearC5Finterruptflag*/

/*关ATD*/

/*一行采集完毕,列计数清零*//*重新开启中断*/

if(row==(ROW_MAX+4))

/*一场中预定的行采集完毕,disablethehorizoninterrupt*//*enabletheverticalinterruptagain,等待下一场的开始*//*行计数清零*/

附录

————————————————————————/**Title:main()*Description:主函数*入口参数:无*出口参数:无*/

————————————————————————#pragmaCODE_SEGDEFAULTvoidmain(void){Init_PLL();Init_Var();Init_ECT();Init_PWM();DDRB=0XFF;PORTB=0XAA;EnableInterrupts;for(;;){

if(vertical_start==1){imageSamp();imageProc();vertical_start=0;}}}

XIX

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