基于红外反射式传感器的赛道检测方法的研究报告_第1页
基于红外反射式传感器的赛道检测方法的研究报告_第2页
基于红外反射式传感器的赛道检测方法的研究报告_第3页
基于红外反射式传感器的赛道检测方法的研究报告_第4页
基于红外反射式传感器的赛道检测方法的研究报告_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、i “飞思卡尔”杯全国大学生智能汽车邀请赛技技 术术 报报 告告附录 c 基于红外反射式传感器的赛道检测方法的研究ii关于技术报告和研究论文使用授权的说明 本人完全了解第一届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名:陈军 刘润 闫继杰 带队教师签名: 李慧 日 期:2006 年 8 月 10 日iii目目 录录第一章第一章 引引 言言 .11.11.1 智能车

2、整体设计思路智能车整体设计思路.11.21.2 技术方案概要技术方案概要.11.31.3 技术报告内容技术报告内容.2第二章第二章 智能车硬件部分安装和改造智能车硬件部分安装和改造 .32.12.1 智能车机械部分安装及改造智能车机械部分安装及改造.32.22.2 辅助电路板的设计安装辅助电路板的设计安装.32.32.3 最小系统电路板的固定及连接最小系统电路板的固定及连接.5第三章第三章 智能车硬件电路设计智能车硬件电路设计 .73.13.1 电源电路设计电源电路设计.73.23.2 直流电机驱动电路直流电机驱动电路.83.33.3 路面信息检测电路路面信息检测电路.93.43.4 转向系统

3、电路转向系统电路.10第四章第四章 软件设计软件设计 .114.14.1 hcs12hcs12 控制软件主要理论控制软件主要理论.114.24.2 算法说明算法说明.114.2.1 路面信息检测.114.2.2 传感器优先级的设定.124.2.3 智能车的转向角度控制.124.2.4 智能车速度的控制.144.2.5 直道的限速.144.2.6 交叉线的通过.144.2.7 抗干扰措施.154.34.3 代码设计介绍代码设计介绍.18第五章第五章 智能车的调试智能车的调试 .195.15.1 软硬件调试软硬件调试.19iv5.25.2 智能车的整体调试智能车的整体调试.205.2.1 传感器及

4、外围电路的调试.205.2.2 舵机的调试过程.205.2.3 直流电机的调试.205.2.4 整体调试.235.35.3 智能车的主要技术参数智能车的主要技术参数.23第六章第六章 结结 论论 .25参考文献参考文献 .28附录附录 a a 程序清单程序清单 .29附录附录 b b 硬件电路图硬件电路图 .45附录附录 c c 基于红外反射式传感器的赛道检测方法的研究基于红外反射式传感器的赛道检测方法的研究 .471cpumc9s12dg128b舵舵机机传传感感器器0传传感感器器1传传感感器器2传传感感器器3传传感感器器4传传感感器器5传传感感器器6智智能能车车的的状状态态控控制制方方向向控

5、控制制方方向向h其其驱驱动动电电路路直直流流电电机机控控制制电电机机直直流流转转速速第一章 引 言1.1 智能车整体设计思路根据第一届飞思卡尔全国大学生智能车邀请赛的要求,要求参赛选手在车模平台基础上,设计一个能够自主识别路线的智能车,在专门设计的跑道上沿着轨道自主行驶,在稳定的前提下追求速度。借助大赛组委会提供的设备,以freescale 单片机 mc9s12dg128b 为控制核心,利用其内部的 pwm(pulse width modulation)模块输出 pwm 波【1】,通过 h 桥驱动芯片来驱动智能车。另外在智能车轨迹检测方面,在设计中使用反射式红外传感器对路面信息进行对称式分级采

6、集,通过对传感器独特的设计与安装,使智能车不但善于直线的加速,在转向时也会有精彩的发挥。在行驶方向判断方面通过所设计的控制策略实现对左右转向的准确控制。在控制舵机转向方面,利用微控制器内部集成的atd 模块对传感器的输出信号进行模数转换,综合判断轨迹变化方向,对舵机转向进行实时控制。此外,由于能量损耗使电源电压存在一定的不确定性,对此,选取一路 atd 通道,对电源电压实时检测,增强系统的稳定性【5】。1.2 技术方案概要智能汽车硬件总体框图如图 1.1 所示。设计了电源部分、驱动电机部分、检测电路部分以及转向电路等部分。图 1.1 智能汽车硬件总体框图第一届全国大学生智能汽车邀请赛技术报告2

7、1电源部分图智能车的电源部分采用的是大赛提供的 7.2v 直流电源,给智能车的三个主要部分进行供电,第一部分就是智能车的驱动核心直流电机;第二部分就是智能车的转向核心舵机;最后一部分就是智能车的控制核心单片机。由于能量损耗使电源电压存在一定的不确定性。对此,选取一路 a/d 通道,对电源电压进行实时检测,确保小车速度的稳定性。2驱动电路部分在智能车的驱动电路部分,由于单片机内部可以进行 pwm 波的输出,通过利用 pwm 技术及辅助的驱动芯片对驱动直流电动机进行驱动和制动【4】。3检测电路部分在智能车的检测电路部分,采用了 7 个功能相同的反射式红外传感器通过对白色跑道及黑线的不同来检测路面信

8、息,使智能车沿着要求的轨迹行驶。4转向电路部分智能车转向电路主要采用了大赛给定的舵机,通过用单片机内部的 pwm 控制其实现智能车的转向。下文将对智能车的安装、改造过程,硬件电路板的设计及说明,软件控制的设计及说明方面,调试过程及对智能车的改造和创新将进行细致而充分的说明。1.3 技术报告内容本技术报告共分六章。其中第一章引言是对全文的概括;第二、第三章主要介绍智能车硬件的安装、改造及设计;第四章针对智能车软件的设计以及算法做了明确的说明;第五章系统地讲述了智能车调试的过程及主要技术参数;第六章为结论和改进思想。附录中包括程序清单,硬件电路图及研究论文。3第二章 智能车硬件部分安装和改造整个智

9、能车主要由车模、舵机、直流电机、最小系统电路板、辅助电路板、电池等组成。智能车的安装包括电池部分的安装、最小系统电路板的安装、舵机的安装以及辅助电路板的安装。2.1 智能车机械部分安装及改造电池固定安装在智能车自带的电池槽上,舵机的安装完全按照模型车说明书完成。最小系统电路板的安装主要是由车模上辅助的三个支架配合一些固定用的细铁丝来将其固定在电池的正上方。另外,在不违反大赛规则的前提下,为了使智能车的转向性能更强,针对智能车的前端转向部分做了一些有效的改善。在调试过程中,由于智能车本身的机械构造方面的限制,智能车的最大转角不是很大,由于前轮连杆对前轮内圈的阻挡,在达到一定角度时,就无法再增大角

10、度。为了增大智能车的最大转向角度,采取了用锉将智能车的内轮盘半径锉掉 1 毫米,使杠杆的移动范围增加,从而增加其最大转角。结果表明,小车比改造前的最大转向半径增加了1.2 分米。在实验的过程中我们还发现,车体前端部分较重,尤其在转向的时候,智能车的前轮的减震装置下的黑色薄铁片容易刮到轮盘上,这样不仅影响智能车在转向时的速度,严重时甚至无法前进。针对这个问题,将车模减震装置上黄色垫片从下面移到上面,改造后,十分有效地解决了该弊端。另外在智能车各个轴轮和电机齿轮处添加了润滑剂,用以提高智能车的速度和减少机械磨损。2.2 辅助电路板的设计安装 辅助电路板上主要集成了电源稳压电路、路面检测电路、电池电

11、压检测电路、直流电机驱动电路及一些相关接口。路面检测电路部分由 7 个反射式红外传感器,7 个电位器及一些电阻和电第一届全国大学生智能汽车邀请赛技术报告4容等组成。为了使传感器探测得更远,将传感器布置在电路板的最前端,在中间用一个用于正舵的传感器,其它六个传感器分别对称放置在其两端用于智能车的转向和轨迹的纠错。相应的电位器、电阻、电容均布置在对应传感器的附近。传感器安装的时候考虑到小车车身和车长的限制、赛道的宽度、电路板的宽度以及传感器检测的有效范围,传感器的安装如图 2.1 所示。电电源源稳稳压压及及电电池池采采样样电电路路直直流流电电动动机机驱驱动动电电路路反射式红外传感器传感器辅助电路所

12、有导线开关固定点固定点012345 6图 2.1 辅助电路板平面图如图 2.1 所示,中间传感器距离电路板最前端的距离为 0.8cm,其它传感器均放在电路板的最前端,中间的传感器与其相邻的传感器之间的垂直距离为2.3cm,而其它传感器之间的距离为 2.5cm。所有传感器距地面的高度均为1.2cm,传感器距前轮的距离最短为 6.8cm 而其它距智能车前轮的距离为7.3cm。电源稳压电路主要由稳压片 l2940 和两个电容组成。为了防止由于发热过于严重而烧坏或影响系统的正常工作,我们在稳压片上增加了一个散热片。电池电压检测电路比较简单,由电阻和电位器组成。布置在稳压片附近。直流电机驱动电路主要由驱

13、动芯片 mc33886 组成。 mc33886 在工作过程时5会发热,为使该芯片能长时间工作,十分有必要给 mc33886 附加一个散热片。第二章 智能车硬件部分安装和改造7但由于 mc33886 是贴片式封装,不能直接加散热片。我们采取了将 mc33886 底部朝上,用粗钢丝弯成两个连在一起的圆圈,并焊接到散热片上, mc33886 被固定在两个小钢圈压和散热片之间, mc33886 芯片底部的铜片直接与钢圈相接触,芯片的背面与散热片接触。这样,即能起到固定芯片的作用,还使芯片底部的铜片不仅与散热片相接触,还使铜片直接露在外面,大大地增加了散热范围,有效地解决了散热问题。在使用过程中, mc

14、33886 只有轻微发热,效果十分理想。整个辅助电路板( 整体电路板的规格为 19.0cm*6.5cm)安装在小车的最前端,用两个螺丝将其固定在智能车的前端。mc33886 放置在电路板的右边,而稳压电路部分和电池电压采样电路部分放置在左边。在辅助电路板上靠近固定处,设置了一些插槽和接口,可以直接用线连接到单片机板上。各个电路部分对称布置,比较美观。为防止辅助电路板下垂,整个电路板的重心靠近固定点。另外还在智能车的前端安置了三个用细钢丝弯成的保护装置,既将细钢丝做成 u 字型,再将 u 字型的钢丝弯成一个向前倾的小角度固定在电路板的最前端,保护了安装在电路板最前端的传感器,形成类似真车的保险杠

15、一样的防护部分,当小车碰到障碍物时,首先碰到的是智能车的“保险杠” , 起到在智能车脱离跑道之后保护智能车及防止传感器被撞坏的作用。2.3 最小系统电路板的固定及连接本次小车的设计中,系统电路板采用大赛组委会提供的电路板,在车体上安装了三个固定支架,将系统电路板固定在电池的正上方,距电池约 8.0cm 。对辅助电路板上需要连接到系统电路板的导线末端焊上了相应的插针,可以直接插在系统电路板的插槽上。第一届全国大学生智能汽车邀请赛技术报告89第三章 智能车硬件电路设计3.1 电源电路设计按照大赛要求,采用大赛组委会提供的电池。电池不仅提供智能车的前进动力,而且智能车所用到的所有芯片均由电池供电。因

16、此,电源系统对小车的整体性能起着十分重要的作用。单片机和传感器的工作电压为+5v,而电池电压最高时将近 8v。因此,为保证单片机工作的稳定型和可靠性,电源电路设计十分关键,尤其是稳压芯片的选择。在此次设计中,最先选用了常用的 7805,但发现,当电池电压下降到7.0v 时,单片机工作就不稳定,其主要原因就是 7805 的管压降较大,达1.2v。因此,选择了管压降较小的 lm2904,其电路图如图 3.1 所示,经过测试,发现其管压降在 0.3v 左右,大大延长了电池的工作时间。同时,为了使芯片稳定工作,减少传感器输出信号的毛刺,消除干扰,在稳压片的输入端和输出端均并联了一个电容。在调试过程中,

17、随着电池的使用和智能车行驶的过程中,电池不断的耗电,电压逐渐下降,小车的整体速度和性能都会下降。因此,设计了一个电池电压采样电路,电路如图 3.2。以 7.5v 电压为基准,当电池电压大于或小于基准值时,通过频繁采样电池电压采样点的电压,得到一个偏差值,将该偏差值实时地补偿到输入到电机 pwm 的占空比上,缓解电机两端的电压有效值的下降,从而减少小车因电池电压下降导致速度下降的影响,使智能车的速度更加稳定。实践证明,该方法在小车的调试阶段十分有效。 123456abcd654321dcbatitlenumberrevisionsizebdate:9-aug-2006 sheet of file

18、:i:motor.ddbdrawn by:vin1gnd2vout3u13l2940c1447uf+5v+vc131000uf图 3.1 电源电路图第一届全国大学生智能汽车邀请赛技术报告104.7k+v3kpad13r292k图 3.2 电池电压采样电路3.2 直流电机驱动电路直流电机的转速控制采用 pwm 控制。由于单片机输出的脉宽无法驱动大赛提供的直流电机,因此需要通过驱动电路才能驱动电机,设计中采用大赛组委会提供的 mc33886 芯片10。该 h 桥驱动电路如图 3.3 所示。+33nf+47ufmc33886agndout1pgndin2in1fsd1capv+d2out2+5v+5

19、vpwm75.1k5.1ka-+ dc mot or 图 3.3 h 桥驱动电路图其中 d1、d2 是 mc33886 的使能端,in1、in2 为输入端,out1、out2 为其输出端。将 mc33886 的输入端接到单片机的 pwm 输出口,在其输出端可以得到与单片机 pwm 输出口相应的并可以驱动直流电机的 pwm 信号。通过 mc33886 的第三章 智能车硬件电路设计11两个输出端口,就能实现电机的转速控制,方向控制以及制动等。对该小车,考虑到小车对速度的要求,我们未使用刹车和倒车功能。因此,将电机一端接地,另一端接输出,只需一路输入和输出就可以实现对电机的转速控制。在使用过程中,

20、mc33886 工作时间稍长,发热会较严重。严重时, mc33886 甚至会出现过温保护,无 pwm 信号输出。尝试将两路输入并联使用,输出端也并联到一起并接到电机一端,电机另一端接地。使用该接法后, mc33886 工作时间再长,也只有轻微发热。 这种输入端和输出端并联的方法在实际中不仅可以更好地驱动智能车,相同的电压和占空比时,速度更快,同时它还可以降低 h 桥上的压降,从而减小 mc33886 发热,防止器件由于温度过高而被烧坏。当单片机输出一定的占空比的 pwm 信号,电机就会向一个方向旋转,调整好电机的两个输入端,就可以驱动小车前进;当单片机输出占空比为 0 的 pwm信号时,电动机

21、两端的电压为 0v,智能车就只能靠惯性滑行一小段距离,这样同样也可以降低智能车的速度,起到了减速的作用。3.3 路面信息检测电路根据红外线在不同颜色的物体表面具有不同的反射性质的特点,我们可以利用反射式红外传感器完成对路面信息的检测。当发射管发射的红外线遇到白色纸质地板时发生大量漫反射,被反射回来的红外线被接收管接收,输出一定电压值;如果遇到黑线则红外光被大量吸收,接收管接收到红外光较弱,输出的电压很小。通过单片机的 a/d 转换器采样传感器输出的电压值,可以判断出相应传感器检测到的是白色跑道还是黑线。当 a/d 转换值很小时,可以认为检测到的是黑线,否则,当大于某一值时,则认为检测到的是白色

22、跑道。 设计中,我们选择了 st168 反射式红外传感器。电路如图 3.4 所示【12】 【13】 。电位器用于调节传感器发射功率的强弱。当电位器电阻值较小时,相应的发射功率会较强,在同一高度,照到同一材料上时,输出电压相对会较大。反之则较小。传感器输出端并联的电容,可以减少干扰。由于传感器不仅用于检测黑线和白色跑道,还用于控制小车的转向。因此,在该小车上,安装了 7 个相同的传感器,对称排列,用来检测小车偏离黑线的第一届全国大学生智能汽车邀请赛技术报告12程度,然后控制小车的转向及角度。左边的传感器用于判断左转向的角度,右123456abcd654321dcbatitlenumberrevi

23、sionsizebdate:10-aug-2006sheet of file:c:documents and settingsadministrator桌桌motor.ddbdrawn by:+5vu0r133kc0103r01kpad图 3.4 反射式红外线检测原理图边的判断右转向的角度,最中间的传感器用于正舵。最边上的传感器检测到黑线时,说明小车偏离黑线已经较远,需要转一个大角度才能纠正小车的方向。越靠近中央,需要转的角度越小。3.4 转向系统电路转向控制系统中最重要的部分是舵机。舵机的主要作用就是控制智能车的转向,其过程是首先单片机通过 a/d 转换器将传感器采集的路面信息进行处理,再通

24、过 pwm 技术对智能车的舵机进行适时的控制。智能车舵机的转向是由脉宽调制来控制的,当红外传感器检测到信号满足舵机脉冲占空比的要求时,舵机就会使前轮转动一定的角度,7 个红外传感器在智能车前对称排开。舵机对每个传感器做出的反应也是不一样的,中间的起到正舵的作用是智能车沿着跑道行驶,越靠近对称轴的传感器要求智能车的转向角度越小,越远离对称轴的传感器要求智能车的转向角度越大。舵机的控制信号为周期是 20ms 的脉宽调制信号,其中脉冲宽度范围为1ms2ms,由于舵机和智能车机械方面的限制,舵机左右旋转的最大角度可达38 度。因此,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转

25、矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会第三章 智能车硬件电路设计13改变输出角度到新的对应的位置上。15第四章 软件设计4.1 hcs12 控制软件主要理论智能车开发环境采用飞思卡尔 hcs12 系列微控制器开发软件codewarrior3.1。该软件具有支持多种语言,开发环境界面统一,交叉平台开发以及支持插件工具等优点。在 codewarrior3.1 界面完成编译后,通过清华大学 freescale mcu/dsp 应用开发研究中心开发的 bdm for s12 工具,在codewarrior4.1 环境下,向 mc9s12evkc 模块下载程序。bdm for s12 工

26、具使用简单,十分方便【1】。 4.2 算法说明本次比赛要求小车能够自主识别路线,按照设定的轨迹行走,在不冲出跑道的前提下追求速度。因此,程序设计的基本原则是,首先考虑小车的稳定性,在此基础上,尽量提高小车的速度。经过多方面的考虑和反复的实验,在程序设计中,主要采用了以下一些算法。 4.2.1 路面信息检测路面信息检测如何确保智能车沿着黑色轨道行驶是程序设计中的关键部分,尤其是对白色跑道和黑线信息的识别。传感器是放在同一高度的,通过调节串联在发射管上的电位器,可以调节发射管的发射功率,从而可以使传感器在照到白色跑道上时的电压输出保持在一定值左右。当传感器的发射功率较大时,传感器检测到黑色和白色时

27、的输出电压值有较大差别。将传感器的输出进行 a/d 转换后,将转换值保存到一个一维数组里,然后对数据进行二值化处理,即当某个数据小于一个值(记为 black_value)时,认为相应的传感器检测到的是黑线,记为0,否则检测到的就是白线,记为 1。这样就可以得到一个元素为 1 和 0 的一维数组_result7,共有 7 个元素,对应着 7 个传感器的信息。进行二值化处理后便于对数据进行分析。 black_value 值可以用如下方法确定:首先将小车放置在跑道中间,这样最第一届全国大学生智能汽车邀请赛技术报告16中间的传感器正好在黑线正上方,在小车启动前,先进行一次 a/d 转换,可以得到一个大

28、约的黑线值,考虑到各个传感器的差异以及转换的误差,将该黑线值加上一个偏差值,就得到了 black_value 的值。即使这样,采样白色时得到的值也远大于 black_value 值,充分保证了判断黑线和白色时的准确性。因此消除了更换跑道, 黑线的深浅以及跑道周围光线的明暗所带来的干扰,该方法也省去了以上因素变化时重新测试黑线值的必要。4.2.2 传感器优先级的设定传感器优先级的设定7 个传感器在辅助电路板的前端一字排开。从左到右,依次按照 06 对其进行编号。小车行驶到弯道时,尤其小车速度较快时,舵机需要快速反应。按照传感器的安装方法,很有可能两个传感器同时检测到黑线。在判断是否需要转向时,主

29、要是依据传感器对应的信号是否从 1 变为 0。那么在两个传感器同时检测到黑线时,该打哪个角度对小车的转性控制比较重要,如果角度过小,就容易出现脱离跑道或无法顺利转弯的情况。针对此种情况,可以对传感器进行优先级的设定。两边的传感器相对中间的传感器来说,优先级更高。优先级依次为 0、6、5、1、2、4、3 号传感器。一维数组_result7里也依次按照优先级的顺序存放着传感器的信息。如元素0 对应着 0 号传感器的信息,元素 1 对应 6 号传感器的信息。与上次保存的信息相比较,一旦检测到传感器的信息从 1 变为 0,停止检测下一个元素。然后进行分析,控制小车的转向和速度。4.2.3 智能车的转向

30、角度控制智能车的转向角度控制该智能车的转向主要靠传感器检测到的信息进行判断【7】。受微控制器 a/d转换通道数量的限制,在辅助电路板上只安装了 7 个传感器。依据前文介绍的检测方法和转向控制方法,传感器越多,检测到的信息也越多,从而对小车的转角控制也越细,效果也会更好。但如果在算法上进行优化和改进,可以弥补传感器少的弊端。在对检测到的信息进行分析时,如果某个传感器的信息从 1 变为 0 时,即第四章 软件设计17传感器检测到的信息是从白色变到黑色时,有两种情况,一种是黑线从左边进入到传感器正下方,另一种是从右边进入到传感器正下方。对这两种情况,黑线相对该传感器的位置是有较大差别的,因此小车的转

31、角也应该不一样。如对于右边的 5 号传感器,黑线从左边进入时的角度就应该小于黑线从右边进入时的角度。所以判断出黑线移动的方向十分重要。根据如下方法可以判断出黑线移动的方向。在上次数组_result7中,可以检测到 0 处于几号传感器对应的位置,将该值保存起来,然后将本次得到的_result7里的 0 处于几号传感器对应的位置也可以保存起来。因为传感器是按照顺序编号的,比较前后两次检测到黑线的传感器对应的编号值,就可以判断出黑线是向左偏移还是向右偏移了,还是没有移动。加上黑线移动方向这个条件,每个传感器检测到的信息在由白色变为黑色时,就对应了两个角度。但最边上的两个传感器由于只有一边有参照,所以

32、还是只对应一个角度。这样,依靠算法获得了更多的角度,相当于间接地增加了传感器的个数。由于传感器的间距有大于黑线宽度(25mm)的,在检测时有可能出现传感器检测到的全是白色,即_result7数组中可能全部为 1。 并且 5 号和 6 号,0号和 1 号传感器之间距离为 25cm,当黑线从左往右进入到 5 号传感器后,要经过较大距离后才能进入到 6 号传感器,0 号和 1 号传感器也是如此,中间跨度太大。可以在黑线从左往右进入到 5 号传感器和进入到 6 号传感器之间增设一个角度,即在黑线从左往右移动时,当 5 号传感器检测到的信号由 0 变为 1 即由黑线变为白色时,舵机可以转一个角度,该角度

33、应介于黑线从左往右进入 5号和 6 号传感器时对应的角度之间。1 号传感器也可以这样处理。这样避免了转大角度导致小车行驶不稳的问题。各传感器对应角度表见表 4.1。 表 4.1 传感器对应角度表传感器编号传感器编号黑线进入黑线进入传感器的方向传感器的方向0123456从右向左入(度)-30-17-6061730从左向右入(度)-23-1201223第一届全国大学生智能汽车邀请赛技术报告18从右向左出(度)-26-1026从左向右出(度)104.2.4 智能车速度的控制智能车速度的控制智能车在直道上行驶时,速度相对较快,当突然遇到弯道时,由于舵机打角度需要一定的时间,小车很可能会因速度太快而冲出

34、跑道。因此,考虑到舵机的转向时间,在智能车进入弯道时,舵机打完角度后,必须首先对智能车进行减速,这样可以限制智能车的速度。从整体来看,越靠近两边传感器检测到黑线时所对应的速度越慢。黑线在小车最中间时,小车速度最快。4.2.5 直道的限速直道的限速虽然在弯道处,短暂的减速可以降低智能车的速度,但是其也是有局限性的。当智能车的速度过大时,即使其有短暂的刹车,但由于惯性的作用智能车还是会以很高的速度冲出跑道,尤其是从较长的直道进入弯道时。对此,在智能车直线行驶的过程中也对智能车进行了适当的限速。解决该问题,最主要的是判断出小车是否行驶在直道上。但是,由于该智能车硬件方面的限制,无法进行远距离的探测,

35、可以在信号检测和数据分析判断方面进行突破。对采样得到的路面信息,进行分析后,得到一个返回值,将该值赋给 turnflag 变量,turnflag 值是从 0 到 17,每个 turnflag 值都对应着小车左转或右转的角度。当 turnflag 值连续 n 次在最中间 3 个传感器对应的返回值时,可以认为小车形式在直道上。在这连续 n 次过程中,设定一个计数变量,turnflag 值每等于一次最中间 3 个传感器对应的返回值时,计数变量加 1,直到等于设定的 n 值,对计数变量清 0,进行一次减速,然后以正常的速度行驶。因为最中间 3 个传感器如果计数变量还未增加到 n 时,一旦出现 turn

36、flag 不在最中间 3 个传感器对应的返回值时,计数变量也要清 0。n 值设的不宜过大,否则就起不到什么在作用。过小的话,也会影响小车的整体速度。调试时,可以将其设为 90。第四章 软件设计194.2.6 交叉线的通过交叉线的通过由于在规定的赛道上有十字交叉线,如果不对智能车进行调整,智能车走任何一条轨迹都是有可能的。因此,有必要对该情况进行判别。如上文介绍,路面信息经过采样后,放在_result7数组里,里面的元素为 0 和 1,分别对应的是黑线和白色跑道的采样结果。根据传感器的设计和弯道的大小,最多只有两个传感器检测到黑线,即_result7数组中,最多只会出现 2 个 0,根据这个特点

37、,可以认为当该数组中出现 3 个或 3 个以上的 0 时,传感器采样到了交叉线,那么对该次采样的数据,不做任何处理,小车也不做任何调整。如果小车斜着经过交叉线时,没有 3 个传感器同时检测到黑线,根据传感器排列的优先级,若最左边的传感器先检测白色到黑线的变化,转一个向左的角度,但接着,将是右边的传感器检测到变化,马上会打一个向右的角度,在这个过程中,小车已经冲过了交叉线,完全可以保证小车平稳准确的经过交叉线。4.2.7 抗干扰措施抗干扰措施在调试的过程中,智能车还会受到很多外界因素的干扰,尤其是在自制的跑道上。主要是路面的凸凹不平,以及组装赛道时各个拼版之间的缝隙都会造成智能车行驶时的不稳定。

38、尤其是在检测到小缝时,传感器的输出与检测到黑线的输出电压相近。 这种干扰主要会使舵机误打角度,尤其在转弯过程中和最边上的两个传感器检测到小缝隙时,容易使小车脱离轨道,找不到黑线,后果十分严重。 为了解决该问题,可以对返回来的 turnflag 值按从小到大排序,如果前后两次返回的 turnflag 值大于某一值(如 6,如果值太大,可能不起作用;若太小,可能丢失正常的有用信息)时,认为这是干扰信息,不进行转向和转速调整。如果实际比赛跑道比较平整,且无缝隙,这段子程序可以不用。 智能车的主程序及部分子程序流程如图 4.1,图 4.2,图 4.3 所示。第一届全国大学生智能汽车邀请赛技术报告20开

39、中断pll初始化定时器初始化atd初始化pwm初始化启动atd,采样路面信息启动小车延时调用转向子程序启动atd,采样路面信息开始图 4.1 主程序流程图第四章 软件设计21读取采样结果对本次值做二值化处理,保存在_result17中判断此次数据中黑线的位置,赋值a01判断黑线移动的方向调用判断turnflag值子程序将本次二值化后的采样值和黑线位置的值分别赋上一次给_result07,a00退出相同与上次结果_result07相同么?不同图 4.2 atd 中断子程序流程图第一届全国大学生智能汽车邀请赛技术报告22对返回的turnflag值重新排序调用抗干扰子程序调用直道刹车子程序转向和转速

40、控制图 4.3 转向子程序流程图4.3 代码设计介绍程序设计主要采用 c 语言完成。因为其编程简单、程序代码相对汇编语言要少、可读性和移植性强、便于子程序调试、易于修改程序、函数库丰富等许多优点。对于与硬件密切相关的指令,采用汇编语言。如开中断、系统的初始化等。建立 c 程序运行环境时,将 main()看承整个应用程序,应用程序由许多子程序或模块组成。这样调试和修改都比较方便。该小车整体程序由 main.c atd.c pwm.c rudder.c timer.c 组成。声明为外部函数的指令,全部放在头文件 smartcar.h 中,以免造成混乱【14】。程序清单见附录 a。23第五章 智能车

41、的调试在智能车调试的过程中主要采用的开发工具是清华大学开发的 bdm for s12,调试软件采用了 codewarrior3.1 和 4.1,以及数字示波器、万用表等试验设备。智能车调试总共有二个阶段,第一个阶段,调试自行开发的硬件电路板和各个子程序、主程序;第二阶段自制了不同跑道调试智能车的速度和转向性能等,根据试验,修改软硬件。5.1 软硬件调试首先对设计的电源电路、采样电路、直流电机驱动电路等硬件电路板进行调试。在软件设计中,需要用到定时器模块、atd 模块、pwm 模块等。在编写主程序前,应该先对各模块分别进行调试,编写各个部分的子程序。根据系统电路板的资源,本设计方案中,使用 at

42、d0 模块中的 7 路对传感器输出电压采样,pwm7 口控制直流电机转速,pwm5 和 pwm4 口级联后在 pwm5口输出 pwm 波控制舵机转角。调试 atd 模块时,先使用 bdm 模块将子程序下载到芯片内,然后分别在atd 的输入端利用稳压源产生 0+5v 的电压,观察 codewarrior4.1 中 memory窗口中各个寄存器的值。根据 a/d 转换结果寄存器的值计算输入电压。若计算出的电压值与实际输入的电压值在误差允许范围内相等,说明该子程序正确。在调试定时器模块时,可以在通过系统电路板上 pj 口外接的发光二极管电路,利用软件产生时间一定,循环改变 pj 口高低电平,从而改变

43、小灯的明灭。同样用示波器观察小灯两端电平的变化,来检验定时时间的正确与否。为检验 pwm 子程序,可以编写输出一定占空比的 pwm 波形子程序,在 pwm端口接入示波器,通过示波器观察输出波形是否与设定值相同。若相同则程序正确。第一届全国大学生智能汽车邀请赛技术报告24在每一部分子程序调试通过后,结合外围电路对所有子程序进行整合,根据小车工作原理,编写出完整的主程序。在 codewarrior 3.1 界面完成程序编译后,通过 bdm 工具,将程序下载到 mc9s12dg128b 微处理器中,然后进行小车的调试。5.2 智能车的整体调试5.2.1 传感器及外围电路的调试传感器及外围电路的调试反

44、射式红外传感器的调试分为机械调试和电路调试。机械调试的主要任务是保证传感器组位于小车的最前端,并与地面保持合适的距离。经过多次试验,测得较为合适的距离是 12mm。电路调试过程使各个传感器的电压输出值均保持在一定值(1.5v)附近。其操作过程是将传感器电路放于白纸上一定高度处,调节电位器使传感器的电压输出端压降为 1.5v 左右。单步执行程序,观察各个寄存器、变量、数组的变化是否正确。此处不使用黑纸的原因是由于黑纸的吸收能力强,对传感电路的反馈信号影响大。而白纸的吸收能力弱,电位器阻值对反馈信号的影响较明显。5.2.2 舵机的调试过程舵机的调试过程调试舵机时,可以先不使用直流电机,将小车放于白

45、纸上,用 25mm 宽的黑线在传感器下方移动,看舵机的转向与设置的角度是否一致。然后在跑道上,用手推车的方法,让车经过符合比赛规则中要求的不同曲率半径的轨迹。对于不同曲率半径的轨迹,会有不同的传感器检测到不同的信号。记下针对不同的传感器不同方向(左右)检测到信号的情况,较为合适的舵机转角,作为一组经验值,待软件设计时使用。5.2.3 直流电机的调试直流电机的调试舵机和传感电路调试完成后,将直流电机接入电路,先不将小车放到跑道上,在白纸上稍微将后轮悬空,用黑线在下面移动,用示波器观测电机两端的pwm 信号是否按要求改变,确认无误后可以拿到跑道上进行试车。让小车在一25段直行道行驶后,进入一曲率半

46、径为最大值的曲线。反复试验,得出保证小车不驶出轨迹的最大占空比。由此计算得出直流电机的最大转速,此后的软件控制过程中须保证直流电机的转速不大于此值【11】。第五章 智能车的调试275.2.4 整体调试整体调试各部分子电路调试结束后,对小车整体进行调试。先令小车以某一较低的速度行进,通过弯道时保证有较合适的舵机转角。在舵机转角调试过程中得到的经验值基础上进行修改。利用软件对参数进行修改,提高小车直流电机的转速和修改舵机转角。如此反复进行,直到得到较为合理的经验值。先让小车行驶稳定,在此基础上逐渐提高小车速度。此外,小车由直道渐入弯道时,为防止小车速度过大因惯性作用冲出车道,需要在此时对直流电机进

47、行减速。找到临界速度,看超过多大速度小车易于冲出跑道,积累一些经验值。5.3 智能车的主要技术参数智能车长:32.7cm,宽为 18cm,高为 11.2cm。智能车重量:740g电路的功耗及电容的总容量:7.8w,1047.7f传感器的种类及个数:反射式红外传感器 st168,7 个赛道信息检测频率:125hz第一届全国大学生智能汽车邀请赛技术报告28附录 a29第六章 结 论该智能车模型是以 freescale 的 hcs12 系列中的 mc9s12dg128b 为主控芯片,在大赛组委会提供的模型车体和开发电路板基础上制作完成的。整个车模硬件电路简单,在传感器利用个数较少的情况下,通过判断,

48、使小车转向准确稳定,能够安全通过各种弯道和十字交叉路口。该小车在满足大赛要求的前提下,具有良好的自主道路识别能力和稳定性,并能以较快的速度行驶。但由于时间仓促和能力有限,该模型车也有不尽如人意之处。小车在弯道行驶过程中角度越细越好,但受传感器个数及 a/d 转换通道的限制,曾经考虑使用 i/o 口来检测传感器电压高低变化从而识别出检测到的是黑线还是白色跑道。实验测得, 将 i/o 端口设置为输入,当输入电压的最小值大于等于 2v 时,识别为高电平;当输入电压的最大值小于等于 0.4v 视为低电压。但发现小车在行驶过程中,i/o 口检测到的信息总会受到干扰,电压信号不稳。因为 i/o 口对 0.

49、4v2v 之间的值无法确定。如外接一个比较电路,可以解决该问题。这样,对路面信息的识别就不会受到 a/d 通道数量的限制。但由于时间的限制,没有进行更深入的尝试。另外小车在从弯道进入直道后,小车的行使路线偶尔会出现 s 形的轨迹,影响小车的速度。其主要原因是小车从弯道出来时,小车不是正好调整在正中间,以及直道速度过快导致的。如果传感器能进行更远距离探测或借助 ccd 摄像头等器件,可以很容易解决此问题。用其结合红外传感器就可以使路径检测时更加准确。起到提前加速、减速和转向的作用。ccd 摄像头的处理电路相对复杂,成本较高,且微控制器对于其信息的处理速度较慢,故没有采用此方案。【9】如果在远距离

50、探测和 ccd 信号的处理速度进行改进,采用比较先进的算法,如模糊控制、pid 控制等,小车性能和速度必能大大提高。由于经验不足,该智能车定有很多需要改进的地方,敬请各位专家不吝指正。大赛组委会提供了许多技术支持和帮助,超越车队所有选手和指导老师对此表示衷心的感谢!附录 a31第一届全国大学生智能汽车邀请赛技术报告32参考文献1邵贝贝.单片机嵌入式应用的在线开发方法m.北京:清华大学出版社,2004.10 2mc8s12dg128b 技术手册.2003.43杨国田,白焰.motorola68hc12 系列微控制器原理、应用与开发技术m.北京:中国电力出版社,2003.94todd d.mort

51、on(美)著,严隽永译.嵌入式微控制器m.北京:机械工业出版社,2005.95余永权,李小表,陈林庚.单片机应用系统的功率接口技术.北京:北京航天大学出版社,19936陈杰,黄鸿.传感器与检测技术.北京:高等教育出版社,20027何友,王国宏.多传感器信息融合及应用.北京:电子工业出版社,2000 年8袁希光.传感器技术手册.北京:国防工业出版杜,1986 年9刘迎春.传感器原理设计与应用.长沙:国防科技大学出版, 199210mc33886 技术手册11秦继荣,沈安俊.现代直流伺服控制技术及其系统设计.北京:机械工业出版社,199112康华光,陈华光.电子技术基础模拟部分(第四版).北京:高

52、等教育出版社,199813阎石.电子技术基础数字部分(第四版).北京:高等教育出版社,199714谭浩强.c 程序设计.北京:清华大学出版社,1999.12附录 a33附录 a 程序清单/*main.c*/#include /* common defines and macros */#include /* derivative information */#pragma link_info derivative mc9s12dg128b#include char turn_value ; char _turn_value;char timeflag3; /是否进入定时中断标志char off

53、setv; char atd_voltage; char t; void pll() /*pll set*/ refdv=1; /pll 设置,使内部总线时钟达到 24m synr=2; asm wait:brclr crgflg,#$08,*; /等待锁相环频率稳定 clksel=clksel|0 x80; /选定锁相环时钟为系统时钟 /*/ void main()unsigned int k; timeflag3=1; offsetv=0; asm cli; /开总中断 pll(); pwm(0 x70,0 xf0,0 x00,0 x00,0 x73,0 x00,0 x00);/pwm s

54、et:通道 6,7 不级联,其余的级联; /输出高;/pwm7(clock b)时钟为 24m/128,pwm1(clock a)时钟为24m/8第一届全国大学生智能汽车邀请赛技术报告34 degree_middle(); /舵机在正中间 pwm(7,0 xff,0 xfb); /hign speed,电机频率 732hz,周期约为 1.36 毫秒 pwme(7,1); / 通道 7 控制电机 for (k=0;k+;k65000) for (k=0;k+;k65000) for (k=0;k+;k65000) for (k=0;k+;k65000) pwm(7,0 xff,0 x90); t

55、urn_value=20; /使舵机归正 atd0_initial(); /atd 通道初始化 for(;) while (timeflag3) timeflag3=0; /timer(3,20); for (k=0;k800;k+) timeflag3=1; atd0start(); asm(nop;); asm(nop;); turn(); /调用转弯程序 asm nop; /pwm 通道 7 控制电机转速,通道 5 控制舵机转向/*atd.c*/#include /* derivative information */#include extern char turn_value;ext

56、ern char offsetv;extern char t;static unsigned char _result27;附录 a35static unsigned char result7;static unsigned char results7;char _rf=0; char a00,a01,direction;char num_bai,f4_5,f2_1; void atd0_initial() atd0dien=0 x00; /开启 ad 管脚 atd0ctl2=0 xc2; /快速清除标志位,开中断 atd0ctl3=0 x00; /采样 8 次,nofifo, atd0ctl

57、4=0 xc5; /atd 转换频率 2m void r_r() results0=result0; results1=result3; results2=result4; results3=result6; results4=result5; results5=result2; results6=result1; /void zhongjian_jinchu(void) if (a01=2) if (direction=0) if (_result03_result13) turn_value=14; if (a01=4) if (direction=0) if (_result03_res

58、ult13) turn_value=15; 第一届全国大学生智能汽车邀请赛技术报告36void jinchu1_5_(void) if (f4_5=1) if (_result05_result15) turn_value=16; f4_5=0; if (f2_1=1) if (_result01_result11) turn_value=17; f2_1=0; void judge0() if (a013) if (direction=0) turn_value=20; else /right if (direction=1) turn_value=a01;附录 a37 else turn_

59、value=a01+7; zhongjian_jinchu(); jinchu1_5_(); if (_result03_result13) turn_value=10; /middle void store0(void) char j ; unsigned char *p; p=&atd0dr0h; for(j=0;j8;j+) resultj=*p; /save data p+=2; r_r(); /变换传感器的顺序 if (_rf=0) for (j=0;j7;j+) _result0j=1; _rf=1; a00=3; a01=3; for(j=0;j7;j+) if (results

60、j20) _result1j=0; /将黑白转化为 0 和 1,黑为 0 else _result1j=1; for (j=0;j7;j+) if (_result1j_result0j) /判断本次数据中黑线的位置 a01=j; break; 第一届全国大学生智能汽车邀请赛技术报告38 if (a00a01) direction=-1; /left else direction=0;/middle judge0(); if (a00=2&a01=1) f2_1=1; if (a00=4&a01=5) f4_5=1; for(j=0;j7;j+) _result0j=_result1j; /得

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论