1、 “飞思卡尔”杯全国大学生智能汽车邀请赛技 术 报 告附录C基于红外反射式传感器的赛道检测方法的研究关于技术报告和研究论文使用授权的说明 本人完全了解第一届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。参赛队员签名:陈军 刘润 闫继杰 带队教师签名: 李慧 日 期:2006年8月10日目 录第一章 引 言11.1智能车整体设计思路11.2技术方案概要11.3技术报告内容2第二章
2、 智能车硬件部分安装和改造32.1 智能车机械部分安装及改造32.2 辅助电路板的设计安装32.3 最小系统电路板的固定及连接5第三章 智能车硬件电路设计73.1 电源电路设计73.2 直流电机驱动电路83.3 路面信息检测电路93.4 转向系统电路10第四章 软件设计114.1 HCS12 控制软件主要理论114.2 算法说明114.2.1路面信息检测114.2.2 传感器优先级的设定124.2.3智能车的转向角度控制124.2.4智能车速度的控制144.2.5 直道的限速144.2.6 交叉线的通过144.2.7 抗干扰措施154.3 代码设计介绍18第五章 智能车的调试195.1 软硬件
3、调试195.2 智能车的整体调试205.2.1 传感器及外围电路的调试205.2.2 舵机的调试过程205.2.3 直流电机的调试205.2.4 整体调试235.3 智能车的主要技术参数23第六章 结 论25参考文献28附录A 程序清单29附录B 硬件电路图45附录C 基于红外反射式传感器的赛道检测方法的研究47III第一章 引 言1.1智能车整体设计思路根据第一届飞思卡尔全国大学生智能车邀请赛的要求,要求参赛选手在车模平台基础上,设计一个能够自主识别路线的智能车,在专门设计的跑道上沿着轨道自主行驶,在稳定的前提下追求速度。借助大赛组委会提供的设备,以Freescale单片机MC9S12DG1
4、28B为控制核心,利用其内部的PWM(Pulse Width Modulation)模块输出PWM波【1】,通过H桥驱动芯片来驱动智能车。另外在智能车轨迹检测方面,在设计中使用反射式红外传感器对路面信息进行对称式分级采集,通过对传感器独特的设计与安装,使智能车不但善于直线的加速,在转向时也会有精彩的发挥。在行驶方向判断方面通过所设计的控制策略实现对左右转向的准确控制。在控制舵机转向方面,利用微控制器内部集成的ATD模块对传感器的输出信号进行模数转换,综合判断轨迹变化方向,对舵机转向进行实时控制。此外,由于能量损耗使电源电压存在一定的不确定性,对此,选取一路ATD通道,对电源电压实时检测,增强系
5、统的稳定性【5】。1.2技术方案概要智能汽车硬件总体框图如图1.1所示。设计了电源部分、驱动电机部分、检测电路部分以及转向电路等部分。图1.1 智能汽车硬件总体框图1电源部分图智能车的电源部分采用的是大赛提供的7.2V直流电源,给智能车的三个主要部分进行供电,第一部分就是智能车的驱动核心直流电机;第二部分就是智能车的转向核心舵机;最后一部分就是智能车的控制核心单片机。由于能量损耗使电源电压存在一定的不确定性。对此,选取一路A/D通道,对电源电压进行实时检测,确保小车速度的稳定性。2驱动电路部分在智能车的驱动电路部分,由于单片机内部可以进行PWM波的输出,通过利用PWM技术及辅助的驱动芯片对驱动
6、直流电动机进行驱动和制动【4】。3检测电路部分在智能车的检测电路部分,采用了7个功能相同的反射式红外传感器通过对白色跑道及黑线的不同来检测路面信息,使智能车沿着要求的轨迹行驶。4转向电路部分智能车转向电路主要采用了大赛给定的舵机,通过用单片机内部的PWM控制其实现智能车的转向。下文将对智能车的安装、改造过程,硬件电路板的设计及说明,软件控制的设计及说明方面,调试过程及对智能车的改造和创新将进行细致而充分的说明。1.3技术报告内容本技术报告共分六章。其中第一章引言是对全文的概括;第二、第三章主要介绍智能车硬件的安装、改造及设计;第四章针对智能车软件的设计以及算法做了明确的说明;第五章系统地讲述了
7、智能车调试的过程及主要技术参数;第六章为结论和改进思想。附录中包括程序清单,硬件电路图及研究论文。第二章 智能车硬件部分安装和改造整个智能车主要由车模、舵机、直流电机、最小系统电路板、辅助电路板、电池等组成。智能车的安装包括电池部分的安装、最小系统电路板的安装、舵机的安装以及辅助电路板的安装。2.1 智能车机械部分安装及改造电池固定安装在智能车自带的电池槽上,舵机的安装完全按照模型车说明书完成。最小系统电路板的安装主要是由车模上辅助的三个支架配合一些固定用的细铁丝来将其固定在电池的正上方。另外,在不违反大赛规则的前提下,为了使智能车的转向性能更强,针对智能车的前端转向部分做了一些有效的改善。在
8、调试过程中,由于智能车本身的机械构造方面的限制,智能车的最大转角不是很大,由于前轮连杆对前轮内圈的阻挡,在达到一定角度时,就无法再增大角度。为了增大智能车的最大转向角度,采取了用锉将智能车的内轮盘半径锉掉1毫米,使杠杆的移动范围增加,从而增加其最大转角。结果表明,小车比改造前的最大转向半径增加了1.2分米。在实验的过程中我们还发现,车体前端部分较重,尤其在转向的时候,智能车的前轮的减震装置下的黑色薄铁片容易刮到轮盘上,这样不仅影响智能车在转向时的速度,严重时甚至无法前进。针对这个问题,将车模减震装置上黄色垫片从下面移到上面,改造后,十分有效地解决了该弊端。另外在智能车各个轴轮和电机齿轮处添加了
9、润滑剂,用以提高智能车的速度和减少机械磨损。2.2 辅助电路板的设计安装 辅助电路板上主要集成了电源稳压电路、路面检测电路、电池电压检测电路、直流电机驱动电路及一些相关接口。路面检测电路部分由7个反射式红外传感器,7个电位器及一些电阻和电容等组成。为了使传感器探测得更远,将传感器布置在电路板的最前端,在中间用一个用于正舵的传感器,其它六个传感器分别对称放置在其两端用于智能车的转向和轨迹的纠错。相应的电位器、电阻、电容均布置在对应传感器的附近。传感器安装的时候考虑到小车车身和车长的限制、赛道的宽度、电路板的宽度以及传感器检测的有效范围,传感器的安装如图2.1所示。图2.1 辅助电路板平面图如图2
10、.1所示,中间传感器距离电路板最前端的距离为0.8cm,其它传感器均放在电路板的最前端,中间的传感器与其相邻的传感器之间的垂直距离为2.3cm,而其它传感器之间的距离为2.5cm。所有传感器距地面的高度均为1.2cm,传感器距前轮的距离最短为6.8cm而其它距智能车前轮的距离为7.3cm。电源稳压电路主要由稳压片L2940和两个电容组成。为了防止由于发热过于严重而烧坏或影响系统的正常工作,我们在稳压片上增加了一个散热片。电池电压检测电路比较简单,由电阻和电位器组成。布置在稳压片附近。直流电机驱动电路主要由驱动芯片MC33886组成。 MC33886在工作过程时会发热,为使该芯片能长时间工作,十
11、分有必要给MC33886附加一个散热片。55第二章 智能车硬件部分安装和改造但由于MC33886是贴片式封装,不能直接加散热片。我们采取了将MC33886底部朝上,用粗钢丝弯成两个连在一起的圆圈,并焊接到散热片上, MC33886被固定在两个小钢圈压和散热片之间, MC33886芯片底部的铜片直接与钢圈相接触,芯片的背面与散热片接触。这样,即能起到固定芯片的作用,还使芯片底部的铜片不仅与散热片相接触,还使铜片直接露在外面,大大地增加了散热范围,有效地解决了散热问题。在使用过程中, MC33886只有轻微发热,效果十分理想。整个辅助电路板( 整体电路板的规格为19.0cm*6.5cm)安装在小车
12、的最前端,用两个螺丝将其固定在智能车的前端。MC33886放置在电路板的右边,而稳压电路部分和电池电压采样电路部分放置在左边。在辅助电路板上靠近固定处,设置了一些插槽和接口,可以直接用线连接到单片机板上。各个电路部分对称布置,比较美观。为防止辅助电路板下垂,整个电路板的重心靠近固定点。另外还在智能车的前端安置了三个用细钢丝弯成的保护装置,既将细钢丝做成U字型,再将U字型的钢丝弯成一个向前倾的小角度固定在电路板的最前端,保护了安装在电路板最前端的传感器,形成类似真车的保险杠一样的防护部分,当小车碰到障碍物时,首先碰到的是智能车的“保险杠”, 起到在智能车脱离跑道之后保护智能车及防止传感器被撞坏的
13、作用。2.3 最小系统电路板的固定及连接本次小车的设计中,系统电路板采用大赛组委会提供的电路板,在车体上安装了三个固定支架,将系统电路板固定在电池的正上方,距电池约8.0cm 。对辅助电路板上需要连接到系统电路板的导线末端焊上了相应的插针,可以直接插在系统电路板的插槽上。第三章 智能车硬件电路设计3.1 电源电路设计按照大赛要求,采用大赛组委会提供的电池。电池不仅提供智能车的前进动力,而且智能车所用到的所有芯片均由电池供电。因此,电源系统对小车的整体性能起着十分重要的作用。单片机和传感器的工作电压为+5V,而电池电压最高时将近8V。因此,为保证单片机工作的稳定型和可靠性,电源电路设计十分关键,
14、尤其是稳压芯片的选择。在此次设计中,最先选用了常用的7805,但发现,当电池电压下降到7.0V时,单片机工作就不稳定,其主要原因就是7805的管压降较大,达1.2V。因此,选择了管压降较小的LM2904,其电路图如图3.1所示,经过测试,发现其管压降在0.3V左右,大大延长了电池的工作时间。同时,为了使芯片稳定工作,减少传感器输出信号的毛刺,消除干扰,在稳压片的输入端和输出端均并联了一个电容。在调试过程中,随着电池的使用和智能车行驶的过程中,电池不断的耗电,电压逐渐下降,小车的整体速度和性能都会下降。因此,设计了一个电池电压采样电路,电路如图3.2。以7.5V电压为基准,当电池电压大于或小于基
15、准值时,通过频繁采样电池电压采样点的电压,得到一个偏差值,将该偏差值实时地补偿到输入到电机PWM的占空比上,缓解电机两端的电压有效值的下降,从而减少小车因电池电压下降导致速度下降的影响,使智能车的速度更加稳定。实践证明,该方法在小车的调试阶段十分有效。 图3.1 电源电路图图3.2 电池电压采样电路3.2 直流电机驱动电路直流电机的转速控制采用PWM控制。由于单片机输出的脉宽无法驱动大赛提供的直流电机,因此需要通过驱动电路才能驱动电机,设计中采用大赛组委会提供的MC33886芯片10。该H桥驱动电路如图3.3所示。图3.3 H桥驱动电路图其中D1、D2是MC33886的使能端,IN1、IN2为
16、输入端,OUT1、OUT2为其输出端。将MC33886的输入端接到单片机的PWM输出口,在其输出端可以得到与单片机PWM输出口相应的并可以驱动直流电机的PWM信号。通过MC33886的第三章 智能车硬件电路设计两个输出端口,就能实现电机的转速控制,方向控制以及制动等。对该小车,考虑到小车对速度的要求,我们未使用刹车和倒车功能。因此,将电机一端接地,另一端接输出,只需一路输入和输出就可以实现对电机的转速控制。在使用过程中, MC33886工作时间稍长,发热会较严重。严重时, MC33886甚至会出现过温保护,无PWM信号输出。尝试将两路输入并联使用,输出端也并联到一起并接到电机一端,电机另一端接
17、地。使用该接法后, MC33886工作时间再长,也只有轻微发热。 这种输入端和输出端并联的方法在实际中不仅可以更好地驱动智能车,相同的电压和占空比时,速度更快,同时它还可以降低H桥上的压降,从而减小MC33886发热,防止器件由于温度过高而被烧坏。当单片机输出一定的占空比的PWM信号,电机就会向一个方向旋转,调整好电机的两个输入端,就可以驱动小车前进;当单片机输出占空比为0的PWM信号时,电动机两端的电压为0V,智能车就只能靠惯性滑行一小段距离,这样同样也可以降低智能车的速度,起到了减速的作用。3.3 路面信息检测电路根据红外线在不同颜色的物体表面具有不同的反射性质的特点,我们可以利用反射式红
18、外传感器完成对路面信息的检测。当发射管发射的红外线遇到白色纸质地板时发生大量漫反射,被反射回来的红外线被接收管接收,输出一定电压值;如果遇到黑线则红外光被大量吸收,接收管接收到红外光较弱,输出的电压很小。通过单片机的A/D转换器采样传感器输出的电压值,可以判断出相应传感器检测到的是白色跑道还是黑线。当A/D转换值很小时,可以认为检测到的是黑线,否则,当大于某一值时,则认为检测到的是白色跑道。 设计中,我们选择了ST168反射式红外传感器。电路如图3.4所示【12】【13】 。电位器用于调节传感器发射功率的强弱。当电位器电阻值较小时,相应的发射功率会较强,在同一高度,照到同一材料上时,输出电压相
19、对会较大。反之则较小。传感器输出端并联的电容,可以减少干扰。由于传感器不仅用于检测黑线和白色跑道,还用于控制小车的转向。因此,在该小车上,安装了7个相同的传感器,对称排列,用来检测小车偏离黑线的程度,然后控制小车的转向及角度。左边的传感器用于判断左转向的角度,右图3.4 反射式红外线检测原理图边的判断右转向的角度,最中间的传感器用于正舵。最边上的传感器检测到黑线时,说明小车偏离黑线已经较远,需要转一个大角度才能纠正小车的方向。越靠近中央,需要转的角度越小。3.4 转向系统电路转向控制系统中最重要的部分是舵机。舵机的主要作用就是控制智能车的转向,其过程是首先单片机通过A/D转换器将传感器采集的路
20、面信息进行处理,再通过PWM技术对智能车的舵机进行适时的控制。智能车舵机的转向是由脉宽调制来控制的,当红外传感器检测到信号满足舵机脉冲占空比的要求时,舵机就会使前轮转动一定的角度,7个红外传感器在智能车前对称排开。舵机对每个传感器做出的反应也是不一样的,中间的起到正舵的作用是智能车沿着跑道行驶,越靠近对称轴的传感器要求智能车的转向角度越小,越远离对称轴的传感器要求智能车的转向角度越大。舵机的控制信号为周期是20ms的脉宽调制信号,其中脉冲宽度范围为1ms2ms,由于舵机和智能车机械方面的限制,舵机左右旋转的最大角度可达38度。因此,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无
21、论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。第四章 软件设计4.1 HCS12 控制软件主要理论智能车开发环境采用飞思卡尔HCS12系列微控制器开发软件Codewarrior3.1。该软件具有支持多种语言,开发环境界面统一,交叉平台开发以及支持插件工具等优点。在Codewarrior3.1界面完成编译后,通过清华大学Freescale MCU/DSP应用开发研究中心开发的BDM FOR S12工具,在Codewarrior4.1环境下,向MC9S12EVKC模块下载程序。BDM FOR S12工具使用简单,十分方便【1】。 4.2 算法说明本次
22、比赛要求小车能够自主识别路线,按照设定的轨迹行走,在不冲出跑道的前提下追求速度。因此,程序设计的基本原则是,首先考虑小车的稳定性,在此基础上,尽量提高小车的速度。经过多方面的考虑和反复的实验,在程序设计中,主要采用了以下一些算法。 4.2.1路面信息检测如何确保智能车沿着黑色轨道行驶是程序设计中的关键部分,尤其是对白色跑道和黑线信息的识别。传感器是放在同一高度的,通过调节串联在发射管上的电位器,可以调节发射管的发射功率,从而可以使传感器在照到白色跑道上时的电压输出保持在一定值左右。当传感器的发射功率较大时,传感器检测到黑色和白色时的输出电压值有较大差别。将传感器的输出进行A/D转换后,将转换值
23、保存到一个一维数组里,然后对数据进行二值化处理,即当某个数据小于一个值(记为black_value)时,认为相应的传感器检测到的是黑线,记为0,否则检测到的就是白线,记为1。这样就可以得到一个元素为1和0的一维数组_result7,共有7个元素,对应着7个传感器的信息。进行二值化处理后便于对数据进行分析。 black_value值可以用如下方法确定:首先将小车放置在跑道中间,这样最中间的传感器正好在黑线正上方,在小车启动前,先进行一次A/D转换,可以得到一个大约的黑线值,考虑到各个传感器的差异以及转换的误差,将该黑线值加上一个偏差值,就得到了black_value的值。即使这样,采样白色时得到
24、的值也远大于black_value值,充分保证了判断黑线和白色时的准确性。因此消除了更换跑道, 黑线的深浅以及跑道周围光线的明暗所带来的干扰,该方法也省去了以上因素变化时重新测试黑线值的必要。4.2.2 传感器优先级的设定7个传感器在辅助电路板的前端一字排开。从左到右,依次按照06对其进行编号。小车行驶到弯道时,尤其小车速度较快时,舵机需要快速反应。按照传感器的安装方法,很有可能两个传感器同时检测到黑线。在判断是否需要转向时,主要是依据传感器对应的信号是否从1变为0。那么在两个传感器同时检测到黑线时,该打哪个角度对小车的转性控制比较重要,如果角度过小,就容易出现脱离跑道或无法顺利转弯的情况。针
25、对此种情况,可以对传感器进行优先级的设定。两边的传感器相对中间的传感器来说,优先级更高。优先级依次为0、6、5、1、2、4、3号传感器。一维数组_result7里也依次按照优先级的顺序存放着传感器的信息。如元素0对应着0号传感器的信息,元素1对应6号传感器的信息。与上次保存的信息相比较,一旦检测到传感器的信息从1变为0,停止检测下一个元素。然后进行分析,控制小车的转向和速度。4.2.3智能车的转向角度控制该智能车的转向主要靠传感器检测到的信息进行判断【7】。受微控制器A/D转换通道数量的限制,在辅助电路板上只安装了7个传感器。依据前文介绍的检测方法和转向控制方法,传感器越多,检测到的信息也越多
26、,从而对小车的转角控制也越细,效果也会更好。但如果在算法上进行优化和改进,可以弥补传感器少的弊端。在对检测到的信息进行分析时,如果某个传感器的信息从1变为0时,即第四章 软件设计传感器检测到的信息是从白色变到黑色时,有两种情况,一种是黑线从左边进入到传感器正下方,另一种是从右边进入到传感器正下方。对这两种情况,黑线相对该传感器的位置是有较大差别的,因此小车的转角也应该不一样。如对于右边的5号传感器,黑线从左边进入时的角度就应该小于黑线从右边进入时的角度。所以判断出黑线移动的方向十分重要。根据如下方法可以判断出黑线移动的方向。在上次数组_result7中,可以检测到0处于几号传感器对应的位置,将
27、该值保存起来,然后将本次得到的_result7里的0处于几号传感器对应的位置也可以保存起来。因为传感器是按照顺序编号的,比较前后两次检测到黑线的传感器对应的编号值,就可以判断出黑线是向左偏移还是向右偏移了,还是没有移动。加上黑线移动方向这个条件,每个传感器检测到的信息在由白色变为黑色时,就对应了两个角度。但最边上的两个传感器由于只有一边有参照,所以还是只对应一个角度。这样,依靠算法获得了更多的角度,相当于间接地增加了传感器的个数。由于传感器的间距有大于黑线宽度(25mm)的,在检测时有可能出现传感器检测到的全是白色,即_result7数组中可能全部为1。 并且5号和6号,0号和1号传感器之间距
28、离为25cm,当黑线从左往右进入到5号传感器后,要经过较大距离后才能进入到6号传感器,0号和1号传感器也是如此,中间跨度太大。可以在黑线从左往右进入到5号传感器和进入到6号传感器之间增设一个角度,即在黑线从左往右移动时,当5号传感器检测到的信号由0变为1即由黑线变为白色时,舵机可以转一个角度,该角度应介于黑线从左往右进入5号和6号传感器时对应的角度之间。1号传感器也可以这样处理。这样避免了转大角度导致小车行驶不稳的问题。各传感器对应角度表见表4.1。 表4.1 传感器对应角度表传感器编号黑线进入传感器的方向0123456从右向左入(度)-30-17-6061730从左向右入(度)-23-120
29、1223从右向左出(度)-26-1026从左向右出(度)104.2.4智能车速度的控制智能车在直道上行驶时,速度相对较快,当突然遇到弯道时,由于舵机打角度需要一定的时间,小车很可能会因速度太快而冲出跑道。因此,考虑到舵机的转向时间,在智能车进入弯道时,舵机打完角度后,必须首先对智能车进行减速,这样可以限制智能车的速度。从整体来看,越靠近两边传感器检测到黑线时所对应的速度越慢。黑线在小车最中间时,小车速度最快。4.2.5 直道的限速虽然在弯道处,短暂的减速可以降低智能车的速度,但是其也是有局限性的。当智能车的速度过大时,即使其有短暂的刹车,但由于惯性的作用智能车还是会以很高的速度冲出跑道,尤其是
30、从较长的直道进入弯道时。对此,在智能车直线行驶的过程中也对智能车进行了适当的限速。解决该问题,最主要的是判断出小车是否行驶在直道上。但是,由于该智能车硬件方面的限制,无法进行远距离的探测,可以在信号检测和数据分析判断方面进行突破。对采样得到的路面信息,进行分析后,得到一个返回值,将该值赋给Turnflag变量,Turnflag值是从0到17,每个Turnflag值都对应着小车左转或右转的角度。当Turnflag值连续N次在最中间3个传感器对应的返回值时,可以认为小车形式在直道上。在这连续N次过程中,设定一个计数变量,Turnflag值每等于一次最中间3个传感器对应的返回值时,计数变量加1,直到
31、等于设定的N值,对计数变量清0,进行一次减速,然后以正常的速度行驶。因为最中间3个传感器如果计数变量还未增加到N时,一旦出现Turnflag不在最中间3个传感器对应的返回值时,计数变量也要清0。N值设的不宜过大,否则就起不到什么在作用。过小的话,也会影响小车的整体速度。调试时,可以将其设为90。4.2.6 交叉线的通过由于在规定的赛道上有十字交叉线,如果不对智能车进行调整,智能车走任何一条轨迹都是有可能的。因此,有必要对该情况进行判别。如上文介绍,路面信息经过采样后,放在_result7数组里,里面的元素为0和1,分别对应的是黑线和白色跑道的采样结果。根据传感器的设计和弯道的大小,最多只有两个
32、传感器检测到黑线,即_result7数组中,最多只会出现2个0,根据这个特点,可以认为当该数组中出现3个或3个以上的0时,传感器采样到了交叉线,那么对该次采样的数据,不做任何处理,小车也不做任何调整。如果小车斜着经过交叉线时,没有3个传感器同时检测到黑线,根据传感器排列的优先级,若最左边的传感器先检测白色到黑线的变化,转一个向左的角度,但接着,将是右边的传感器检测到变化,马上会打一个向右的角度,在这个过程中,小车已经冲过了交叉线,完全可以保证小车平稳准确的经过交叉线。4.2.7 抗干扰措施在调试的过程中,智能车还会受到很多外界因素的干扰,尤其是在自制的跑道上。主要是路面的凸凹不平,以及组装赛道
33、时各个拼版之间的缝隙都会造成智能车行驶时的不稳定。尤其是在检测到小缝时,传感器的输出与检测到黑线的输出电压相近。 这种干扰主要会使舵机误打角度,尤其在转弯过程中和最边上的两个传感器检测到小缝隙时,容易使小车脱离轨道,找不到黑线,后果十分严重。 为了解决该问题,可以对返回来的Turnflag值按从小到大排序,如果前后两次返回的Turnflag值大于某一值(如6,如果值太大,可能不起作用;若太小,可能丢失正常的有用信息)时,认为这是干扰信息,不进行转向和转速调整。如果实际比赛跑道比较平整,且无缝隙,这段子程序可以不用。 智能车的主程序及部分子程序流程如图4.1,图4.2,图4.3所示。图 4.1
34、主程序流程图图4.2 ATD中断子程序流程图图4.3 转向子程序流程图4.3 代码设计介绍程序设计主要采用C语言完成。因为其编程简单、程序代码相对汇编语言要少、可读性和移植性强、便于子程序调试、易于修改程序、函数库丰富等许多优点。对于与硬件密切相关的指令,采用汇编语言。如开中断、系统的初始化等。建立C程序运行环境时,将main()看承整个应用程序,应用程序由许多子程序或模块组成。这样调试和修改都比较方便。该小车整体程序由main.c ATD.c pwm.c rudder.c timer.c组成。声明为外部函数的指令,全部放在头文件smartcar.h中,以免造成混乱【14】。程序清单见附录A。
35、第五章 智能车的调试在智能车调试的过程中主要采用的开发工具是清华大学开发的BDM for S12,调试软件采用了Codewarrior3.1和4.1,以及数字示波器、万用表等试验设备。智能车调试总共有二个阶段,第一个阶段,调试自行开发的硬件电路板和各个子程序、主程序;第二阶段自制了不同跑道调试智能车的速度和转向性能等,根据试验,修改软硬件。5.1 软硬件调试首先对设计的电源电路、采样电路、直流电机驱动电路等硬件电路板进行调试。在软件设计中,需要用到定时器模块、ATD模块、PWM模块等。在编写主程序前,应该先对各模块分别进行调试,编写各个部分的子程序。根据系统电路板的资源,本设计方案中,使用AT
36、D0模块中的7路对传感器输出电压采样,PWM7口控制直流电机转速,PWM5和PWM4口级联后在PWM5口输出PWM波控制舵机转角。调试ATD模块时,先使用BDM模块将子程序下载到芯片内,然后分别在ATD的输入端利用稳压源产生0+5V的电压,观察CodeWarrior4.1中memory窗口中各个寄存器的值。根据A/D转换结果寄存器的值计算输入电压。若计算出的电压值与实际输入的电压值在误差允许范围内相等,说明该子程序正确。在调试定时器模块时,可以在通过系统电路板上PJ口外接的发光二极管电路,利用软件产生时间一定,循环改变PJ口高低电平,从而改变小灯的明灭。同样用示波器观察小灯两端电平的变化,来检
37、验定时时间的正确与否。为检验PWM子程序,可以编写输出一定占空比的PWM波形子程序,在PWM端口接入示波器,通过示波器观察输出波形是否与设定值相同。若相同则程序正确。在每一部分子程序调试通过后,结合外围电路对所有子程序进行整合,根据小车工作原理,编写出完整的主程序。在Codewarrior 3.1界面完成程序编译后,通过BDM工具,将程序下载到MC9S12DG128B微处理器中,然后进行小车的调试。5.2 智能车的整体调试5.2.1 传感器及外围电路的调试反射式红外传感器的调试分为机械调试和电路调试。机械调试的主要任务是保证传感器组位于小车的最前端,并与地面保持合适的距离。经过多次试验,测得较
38、为合适的距离是12mm。电路调试过程使各个传感器的电压输出值均保持在一定值(1.5V)附近。其操作过程是将传感器电路放于白纸上一定高度处,调节电位器使传感器的电压输出端压降为1.5V左右。单步执行程序,观察各个寄存器、变量、数组的变化是否正确。此处不使用黑纸的原因是由于黑纸的吸收能力强,对传感电路的反馈信号影响大。而白纸的吸收能力弱,电位器阻值对反馈信号的影响较明显。5.2.2 舵机的调试过程调试舵机时,可以先不使用直流电机,将小车放于白纸上,用25mm宽的黑线在传感器下方移动,看舵机的转向与设置的角度是否一致。然后在跑道上,用手推车的方法,让车经过符合比赛规则中要求的不同曲率半径的轨迹。对于
39、不同曲率半径的轨迹,会有不同的传感器检测到不同的信号。记下针对不同的传感器不同方向(左右)检测到信号的情况,较为合适的舵机转角,作为一组经验值,待软件设计时使用。5.2.3 直流电机的调试舵机和传感电路调试完成后,将直流电机接入电路,先不将小车放到跑道上,在白纸上稍微将后轮悬空,用黑线在下面移动,用示波器观测电机两端的PWM信号是否按要求改变,确认无误后可以拿到跑道上进行试车。让小车在一段直行道行驶后,进入一曲率半径为最大值的曲线。反复试验,得出保证小车不驶出轨迹的最大占空比。由此计算得出直流电机的最大转速,此后的软件控制过程中须保证直流电机的转速不大于此值【11】。第五章 智能车的调试5.2
40、.4 整体调试各部分子电路调试结束后,对小车整体进行调试。先令小车以某一较低的速度行进,通过弯道时保证有较合适的舵机转角。在舵机转角调试过程中得到的经验值基础上进行修改。利用软件对参数进行修改,提高小车直流电机的转速和修改舵机转角。如此反复进行,直到得到较为合理的经验值。先让小车行驶稳定,在此基础上逐渐提高小车速度。此外,小车由直道渐入弯道时,为防止小车速度过大因惯性作用冲出车道,需要在此时对直流电机进行减速。找到临界速度,看超过多大速度小车易于冲出跑道,积累一些经验值。5.3 智能车的主要技术参数智能车长:32.7cm,宽为18cm,高为11.2cm。智能车重量:740g电路的功耗及电容的总
41、容量:7.8W,1047.7F传感器的种类及个数:反射式红外传感器ST168,7个赛道信息检测频率:125Hz附录A第六章 结 论该智能车模型是以Freescale的HCS12系列中的MC9S12DG128B为主控芯片,在大赛组委会提供的模型车体和开发电路板基础上制作完成的。整个车模硬件电路简单,在传感器利用个数较少的情况下,通过判断,使小车转向准确稳定,能够安全通过各种弯道和十字交叉路口。该小车在满足大赛要求的前提下,具有良好的自主道路识别能力和稳定性,并能以较快的速度行驶。但由于时间仓促和能力有限,该模型车也有不尽如人意之处。小车在弯道行驶过程中角度越细越好,但受传感器个数及A/D转换通道
42、的限制,曾经考虑使用I/O口来检测传感器电压高低变化从而识别出检测到的是黑线还是白色跑道。实验测得, 将I/O端口设置为输入,当输入电压的最小值大于等于2v时,识别为高电平;当输入电压的最大值小于等于0.4v视为低电压。但发现小车在行驶过程中,I/O口检测到的信息总会受到干扰,电压信号不稳。因为I/O口对0.4v2v之间的值无法确定。如外接一个比较电路,可以解决该问题。这样,对路面信息的识别就不会受到A/D通道数量的限制。但由于时间的限制,没有进行更深入的尝试。另外小车在从弯道进入直道后,小车的行使路线偶尔会出现S形的轨迹,影响小车的速度。其主要原因是小车从弯道出来时,小车不是正好调整在正中间
43、,以及直道速度过快导致的。如果传感器能进行更远距离探测或借助CCD摄像头等器件,可以很容易解决此问题。用其结合红外传感器就可以使路径检测时更加准确。起到提前加速、减速和转向的作用。CCD摄像头的处理电路相对复杂,成本较高,且微控制器对于其信息的处理速度较慢,故没有采用此方案。【9】如果在远距离探测和CCD信号的处理速度进行改进,采用比较先进的算法,如模糊控制、PID控制等,小车性能和速度必能大大提高。由于经验不足,该智能车定有很多需要改进的地方,敬请各位专家不吝指正。大赛组委会提供了许多技术支持和帮助,超越车队所有选手和指导老师对此表示衷心的感谢!参考文献1邵贝贝.单片机嵌入式应用的在线开发方
44、法M.北京:清华大学出版社,2004.10 2MC8S12DG128B 技术手册.2003.43杨国田,白焰.Motorola68HC12系列微控制器原理、应用与开发技术M.北京:中国电力出版社,2003.94Todd D.Morton(美)著,严隽永译.嵌入式微控制器M.北京:机械工业出版社,2005.95余永权,李小表,陈林庚.单片机应用系统的功率接口技术.北京:北京航天大学出版社,19936陈杰,黄鸿.传感器与检测技术.北京:高等教育出版社,20027何友,王国宏.多传感器信息融合及应用.北京:电子工业出版社,2000年8袁希光.传感器技术手册.北京:国防工业出版杜,1986年9刘迎春.
45、传感器原理设计与应用.长沙:国防科技大学出版, 199210MC33886 技术手册11秦继荣,沈安俊.现代直流伺服控制技术及其系统设计.北京:机械工业出版社,199112康华光,陈华光.电子技术基础模拟部分(第四版).北京:高等教育出版社,199813阎石.电子技术基础数字部分(第四版).北京:高等教育出版社,199714谭浩强.C程序设计.北京:清华大学出版社,1999.12附录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 OffsetV; char ATD_voltage; char t; void PLL() /*PLL SET*/ REFDV=1; /PLL设置,使内部总线时钟达到24M SYNR=2; asm wait:BRCLR CRGFLG,#$08,*; /等待锁相环频率稳定 CLKSEL=CLKSEL|0x80; /选定锁相环时钟为系统时钟 /*
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100