版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一届“飞思卡尔”杯全国大学生智能汽车邀请赛技术报告附件C智能车模的巡线算法设计附件D关于智能车模起跑线识别方法的设计与实现目录TOC\o"1-3"\h\z第一章引言 11.1相关背景 11.2构成概要 1第二章硬件电路设计 22.1设计思路 22.1.1硬件系统框图 22.1.2框图说明 22.2电源管理模块 32.2.1电源分配 32.1.2电源电路说明 32.3红外光电传感器巡线模块 32.3.1黑色引导线的识别原理 32.3.2器件选择 42.3.3测试平台制作 42.3.4搭建实验电路 52.3.4信号处理 62.4舵机驱动模块 72.4.1舵机驱动 72.4.2测试车轮转角与舵机驱动信号的关系 72.5动力直流电机驱动模块 82.5.1MC33886简介 82.5.2搭建驱动电路 92.6速度检测模块 112.6.1空载速度检测 112.6.2法兰盘测速模块电路实现 122.7生成电路印刷板 13第三章软件控制算法设计 143.1MC9S12DG128单片机的资源分配 143.2控制软件基本思想 143.3红外光电传感器的布局 153.3.1确定布局方式及与单片机的接口 153.3.2红外收发管间距的确定 153.4基本行进算法分析 183.4.1车模对直线的处理 193.4.2车模对曲线的处理 233.4.3车模对十字线的处理 233.4.4车模对起始线的处理 253.5记忆行进算法分析 263.6智能车的模糊控制 283.7控制软件的流程图 29第四章车模机械安装与系统调试 304.1机械安装 304.1.1舵机的安装 304.1.2模块电路板的安装 304.1.3法兰盘制作及安装 314.1.3安装完成后的车模 314.2测试赛道的制作 324.3系统调试 33第五章结论 345.1智能车模 345.2技术指标 345.3存在的问题及解决方法 35参考文献 36附录A硬件电路原理图 37附录B程序源代码 40附录C:研究论文1 65附录D:研究论文2 71第一章引言1.1相关背景第一届“飞思卡尔”杯全国大学生智能汽车邀请赛即将来临,我队是太原理工大学唯一参赛的队伍,队伍名称为“太理工前进队”。智能车模的开发调试都是在我校“晓明研究室”的研究环境下完成的,到目前为止一切顺利。我队参赛队员由一个博士研究生和两个本科生组成,博士研究生主要负责整体方案构思和工作协调,两个本科生软硬分工明确,各自负责硬件电路设计、机械安装和软件算法实现。在整个开发过程中,主要经历了下面几个阶段:第一阶段:计划和方案的制定;第二阶段:硬件电路的实现;第三阶段:软件控制算法的实现;第四阶段:系统的调试及改进。1.2构成概要本技术报告共包含五章内容。第一章为引言部分。主要概述智能车模制作情况,并阐明了报告内容的构成。第二章为智能车模硬件系统电路的设计。详细介绍智能车模各个功能模块的电路实现,展示了在制作过程中的实验场景等。第三章为智能车模软件行进算法的实现。详细介绍智能车模控制软件主要理论、算法说明及代码设计介绍等。第四章为智能车模的机械安装及系统调试。详细说明了智能车模机械部分安装及改造、电路板的固定及连接等,并对智能车模开发过程中的系统调试作了简单介绍。第五章为总结部分。概括说明了模型汽车制作情况和技术指标,指出了存在的问题及改进方向。第二章硬件电路设计2.1设计思路2.1.1硬件系统框图图2.1硬件系统框图2.1.2框图说明在图2.1所示智能车模的硬件系统框图中,智能车模是以清华提供的MC9S12DG128单片机最小系统板为控制核心;使用电压为7.2V,容量为2AH的镍镉电池作为能量来源,分别产生智能车模各个模块需求的电平;通过前后共14路红外光电传感模块检测赛道路况信息,并进行信号处理,送往单片机进行算法运算处理;单片机经过路况分析后,合理、准确地输出PWM45信号控制舵机的转动方向,从而很好地控制智能车模转向;单片机输出PWM67信号经过功率放大,控制动力直流电机转速,从而控制智能车模的行进快慢;法兰盘测速、路况记忆模块是在智能车模制作的后期根据算法需求加上的,它的主要目的是在智能车模赛道第一圈行进中记录路径信息,在第二圈根据记忆算法使智能车模以最佳速度行进,顺利完成大赛规定的赛道。2.2电源管理模块2.2.1电源分配在智能车模的硬件系统中,单片机最小系统、红外光电传感及信号处理模块需要5V供电,舵机工作需要6V供电,动力直流电机的驱动电路需要7.2V直接供电。它们的产生采用了最常用的电源管理芯片7805和7806。具体电路如图2.2所示。图2.2电源电路原理图2.1.2电源电路说明在图2.2所示的电源电路中,J3为7.2V电池输入端,SW-POWER为电源开关,7.2V通过78L05产生5V电压VCC,通过78L06产生6V电压6VSTR。使用大电容C1,C4的好处:1、补偿使用电机时对电池造成的电压骤降;2、提供电机初启动时所需要的突发电流;3、增加电池的使用寿命。其他的小电容不会对车模的程序或电路的设计产生影响,却会减少隐藏的噪声源的影响。在模拟地和数字地之间接一个0欧姆的电阻起到噪声滤除作用。2.3红外光电传感器巡线模块2.3.1黑色引导线的识别原理如图2.3所示,红外发光管发射一定光强的红外光线的前提下,红外光线遇到白色底板会被大量发射,而红外光线遇到黑色引导线会被吸收掉,这样就导致红外接收管接收到的红外光线会有很大差异,反向输出电压会有很大不同[4]。利用输出电压的这一特性,再经过滤波、整形等信号处理电路便可以识别黑色引导线。图2.3红外光电反射原理2.3.2器件选择基于算法识别赛道起始线的要求[1],红外收发管从图2.4所示的器件中选择了ф3mm的红外收发二极管。图2.4各种红外发射接收管2.3.3测试平台制作为了能够很准确地测试红外光电传感器的各种参数,使用有机玻璃、螺丝、螺母等材料,使用钻台、锉子、切割机、台式砂轮机等工具制作了一个测试平台。它的制作过程如图2.5所示。图2.5测试平台制作过程2.3.4搭建实验电路使用制作好的测试平台,按照图2.6搭建红外发射接收电路,主要为了确定几个重要参数。当时的实验现场如图2.7所示。1.红外接收管接收红外线时距发射面的有效距离与红外发光管的发射功率之间的关系;2.当红外收发管在黑白相间的表面上方移动时,红外接收管输出的电压信号;图2.6红外发射接收电路图2.7实验现场结论:1.在满足要求的情况下,尽可能地让红外发光管的发射功率小,减小电路功耗。选择红外发射管的限流电阻为360Ω,留过它的电流不足10mA。2.红外接收管把接收到红外光的强度转化为图2.6中B点电压信号,实验结果如图2.8所示,红外线照在黑色底板和白色底板后B点电压信号有明显的不同。经过处理这个电压信号就可以很方便的识别出白色赛道和黑色引导线。图2.8测试B点电压结果2.3.4信号处理为了将红外接收管反向端接收到的模拟电压信号转化为数字信号,我们使用L358制作了满足需求的滞回比较器,其电路原理如图2.9所示。图2.9滞回比较器电路图图2.9中,由U4A、VR1等组成滞回比较器参考电压产生电路,由U1A、R15、R16等组成滞回比较器电路。2.4舵机驱动模块2.4.1舵机驱动舵机[3]的控制信号共有三根,中间红色的是电源线,一边黑色的是地线,这两根线给舵机提供最基本的能源保证,主要是由内部电机的转动消耗掉了。需提供的电源一般有两种规格,一种是4.8V,一种是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,它的颜色是不确定的,随着生产厂家的不同而不同,我们用到的SANWASRM-102舵机的控制信号线为蓝色。SANWASRM-102标准舵机的信号线如图2.10所示。图2.10SANWASRM-102标准舵机信号线舵机的控制信号[1]一般为频率为50Hz,周期为20ms的脉宽调制(PWM)信号,其中在一定范围之内的脉冲宽度与舵盘的0-180度位置相对应,且呈线性变化。2.4.2测试车轮转角与舵机驱动信号的关系舵机安装在智能车模后,受到转向机构的限制,转动的角度范围发生了变化。为了能够准确控制智能车模的转向,需要对智能车模的车轮转角与舵机驱动信号之间的关系测试准确。为了达到这个目的,我们采用了物理方法对其进行测试,实验场景如图2.11所示。让智能车模面向一面墙,卸下其中一只车轮,在车轮的轴上安装一个激光管,让其发出的激光照射在墙上。当车轮每转动一个角度时,墙上的激光点就会从一点平移动到另外一点。最后测量光点之间的距离,以及智能车模与墙之间的距离等,经过几何运算计算出车轮的角度。图2.11车轮转角检测实验场景通过以上实验,发现一个现象:给舵机输入相同脉宽的PWM信号的情况下,车轮从左到右和从右到左转动时存在一个误差,这就需要在软件上对这个误差进行补偿。影响到这个误差大小的原因有两个:一是车模转向机构的影响,二是车模重量的影响。2.5动力直流电机驱动模块2.5.1MC33886简介MC33886是为控制和驱动直流电机设计的两通道推挽式功率放大专用集成电路器件,共有20个引脚,20HSOP封装。在与逻辑电平兼容的控制信号输入时,MC33886可以在-40V之间工作。当RDS只有0.12欧姆时,它可以持续地输送电流至5A。MC33886提供给电机电流及故障反馈信息,并具有过流保护、过温保护、过压保护和断点保护。当避免过载和短路的情况下,它可以提供所有的电机运动模式(顺时针、逆时针、制动和惰行)。如果需要的话,它可以在不同的电池组下工作,而不像逻辑电路那样仅仅局限在5V电平。MC33886也有它自己的缺点,它的PWM工作频率不能超过10KHz。图2.12是它的外形和引脚图。图2.12MC33886的外形和引脚图MC33886引脚说明,如表2.1所示:表2.1MC33886的引脚说明引脚1:模拟地;引脚9、10、11、12:电源地;引脚2:H桥故障状态输出;引脚13、18:使能引脚;引脚3:PWM驱动信号输入1;引脚14、15:输出2;引脚4、5、16:电源正极;引脚17:电荷泵电容外接引脚;引脚6、7:输出1;引脚19:PWM信号输入2;引脚8、20:空脚;2.5.2搭建驱动电路MC33886数据手册上的典型电路,如图2.13所示。在实际设计中由于车模不需要倒退,只使用了MC33886的半桥。为了方便测试该芯片的特性,将其焊接在一块电路板上,如图2.14所示。图2.13典型电路图2.14MC33886驱动直流电机电路通过实验,选择1KHz的PWM驱动信号比较合适。在功率放大前后和接电机前后,这个PWM驱动信号会有很大的不同。具体如图2.15所示。(1)驱动前信号(2)驱动后信号(3)接电机前信号(4)接电机后信号图2.15电机驱动PWM信号2.6速度检测模块2.6.1空载速度检测在智能车模设计的前期,算法不要求测量行进中的速度。为了了解智能车模性能,需要对智能车模空载时的速度进行测量,将一个霍尔元件安装在智能车模的后轮上,添加辅助电路测量它。霍尔传感器A44E实验连接图如图2.16所示。图2.16霍尔传感器A44E实验连接图实验场景如图2.17所示,通过多次改变动力直流电机的PWM驱动信号的占空比来改变车轮转速,在不同频率下改变占空比,智能车模的空载转速结果如图2.18所示,最大7m/s左右。图2.17空载时车模测试实验场景图2.18空载时车轮转速测试结果2.6.2法兰盘测速模块电路实现采用透射式红外收发对管可以方便识别法兰盘,其驱动电路如图2.19所示。其输出信号FLP仍需要接一个滞回比较器处理,处理后直接送至MC9S12DG128单片机T0口。通过检测脉冲周期就可以计算出智能车模当前的速度值。图2.19法兰盘驱动电路图2.20法兰盘转动车轮一周可使法兰盘产生30个脉冲,如图2.20所示。每产生一个脉冲车轮转动的角度是:360/30=12(度)智能车模车轮的直径是50mm,车轮每转一圈,智能车模行走的距离是:2πR=2*3.14*(50/2)=157(mm)每一个脉冲智能车模行走的距离应该是:157/30≈5.2(mm)通过上面计算,5.2mm就是记忆路况的最小精度。通过估算智能车模速度不会超过3m/s,也就是说一个脉冲的周期最小也是1.7ms,足以让单片机记忆下脉冲个数和每个脉冲下的舵机驱动信号和当时的速度,这三个量也是记忆算法中及其重要的参数。2.7生成电路印刷板在开发的前期,我们使用实验板或有机玻璃搭建电路,安装在智能车模上。而到后期硬件电路基本定型,使用Protel99SE将其生成印刷板。根据实际考虑,制作了两块电路板,一块是前方红外光电传感电路板,一块为中央控制系统电路板,未安装元件的电路板如图2.21和图2.22所示。智能车模后方有一块电路板则采用实验板焊接元件。图2.21前方红外光电传感电路板图2.22中央控制系统电路板第三章软件控制算法设计3.1MC9S12DG128单片机的资源分配MC9S12DG128[5]是飞思卡尔公司的一款以HCS12CPU为核心的16位微处理器。该款单片机具有丰富的资源:128KB的FLASH、2KB的EEPROM、8KB的RAM、2路异步通信接口(SCI)、2路同步通信接口(SPI)、8路16位的定时器(ECT)、16路16位的AD转换、8路8位的PWM、2路CAN总线、1路I2C总线、若干个不连续的数字端口。此智能车模主要使用了该单片机的ECT输入捕捉功能、PORTH口的外部中断功能、PWM功能及模糊控制功能。ECT输入捕捉功能,使用了T0~T7八个口。其中T0口用来响应法兰盘的中断,T1~T7用来响应红外光电传感器对路况信息的中断。PORTH口具有响应外部事件中断的功能,使用了H0~H6七个口来响应红外光电传感器对路况信息的中断。PWM功能在此智能车模中有两个作用:1、通过调节舵机的偏角来改变智能车模的方向;2、通过调节电机的转速来改变智能车模的速度。在整个智能车模的控制软件制作过程中,我们使用CodeWarrior3.1编写、编译软件代码,使用CodeWarrior4.1下载控制软件[2]。控制程序最终下载在起始地址为0xC000的Flash空间。为了在第一圈中记忆路况,定义了一个较大的数组和若干个变量,最大程度的利用RAM空间。3.2控制软件基本思想智能车模是通过前后两排共14路红外光电传感器实现对路况信息的获取。根据前排(7路红外光电传感器)和后排(7路红外光电传感器)检测到引导线的红外光电传感器的组合,利用模糊控制功能调整智能车模的方向。考虑到智能车模出现检测不到引导线的情况,所以需要两个变量分别来记录前排和后排上一次检测到引导线的红外收发管的位置。这样,如果前排或后排能够检测到引导线,就更新相应的变量;若没有检测到引导线,则不更新该变量[6]。用红外光电传感器作为智能车模的巡线方法,其最大的缺点就是检测距离较近,一般是几个厘米,这样,车模只能“预知”前方很短的距离[1],当运行速度较高时车身很容易越出跑道。如果车模在以较稳定的速度下跑完全程并记录全程路况,这样,可根据路况信息在第二圈的运行中提高运行质量。3.3红外光电传感器的布局3.3.1确定布局方式及与单片机的接口大赛规则规定传感器的使用不能超过16个。在传感器不超过16个的前提下,经过多次实验论证,最后确定为“二”字型布局,即在车模的前后各安装7个红外收发管。它们与单片机的接口如图3.1所示。图3.1智能车红外光电传感器的排布ECT的输入捕捉和PORTH口的中断触发不完全相同,因此必须科学、合理的使用中断触发方式。ECT输入捕捉的8个口(PORTT口)中断方式可设置为上升沿和下降沿,除T0口响应法兰盘(响应方式为上升沿触发)外,T1~T7均用来获取路况信息(响应方式为上升沿和下降沿触发)。PORTH口的H0~H6同样来获取路况信息(响应方式为下降沿)。上升沿和下降沿都触发中断是最理想的,但是PORTT只有8个口可以使用,所以必须借助PORTH口。为了取得比较好的效果,使用ECT和PORTH口交叉排列的方式。3.3.2红外收发管间距的确定比赛规则说明赛道由直线、曲线、起跑线、十字交叉线组成,智能车需要在规定的时间内跑完两圈。为了实现记忆路况信息这一功能,必须对起跑线和红外传感器的间距进行研究。如图3.1所示,光电传感器阵列参数主要有管距D(管内侧距离),管直径d,影响光电传感器阵列参数的主要因素有:标志线和十字交叉口的识别方案;赛规则对车模尺寸的限制;跑道黑色引导线的宽度;需要考虑的舵机转弯精度。根据以上影响因素,建立参数设定模型如图3.2所示。图3.2红外光电传感器阵列参数设定模型起跑标志线和十字交叉口的识别方案要和光电传感器阵列参数联系起来考虑,所以首先根据起跑标志线的基本识别方法来确定光电传感器阵列参数。单片机在处理起跑标志线和十字交叉口的区别时,最方便的方法就是当光电传感器阵列经过十字交叉口时7个传感器全检测到黑线,而经过起跑标志线时应该个别传感器检测到白色赛道表面。根据这个检测方法,建立参数设定模型如图3.2所示,分两种情况讨论:1.当第3个和第4个传感器S3和S4检测到白色跑道而其它传感器检测到黑线时,如图3.2(a)所示,考察阵列布局参数;2.当S3和S4都检测到黑线时,如图3.2(b)所示,要求相邻传感器S2必须检测到白色跑道。根据以上两种情况,作相应的数学描述公式1。前提是本设计中光电传感器阵列采用等距分布。公式1公式2根据公式2,作如图3.3所示的数轴标注方法来表示不等式的取值范围。图3.3数轴标注D的取值范围图3.3中计算所得的D值范围为(25,30-1.5d)。但是也要考虑特殊情况。由于车身在经过起跑标志线时并不是每次都能保持和跑道引导线平行,所以要考虑当车身歪斜进入起跑标志线时的情况会不会使公式1有所变化,如图3.4所示。图3.4车身偏斜进入起跑标志线的情况考虑偏斜的最大角度如图3.4所示,这样公式1的数学描述中发生变化的仅仅是如图3.4所示中的跑道间隙值17.5mm,该值被车身偏斜角度最大时的值f=19mm所代替,计算过程较为简单,这里从略。带入新值后用数轴标注法比较图3.5发现,A点向B点靠近形成Aˊ点,并没有超过B点;C点和D点分别到CˊDˊ的位置,所以D的取值范围有扩大的趋势。图3.5改变数据后数轴标注D的取值范围如果偏斜角度继续增大,前排光电传感器阵列不能同时进入起始标志线,这样在单片机编程算法中很容易处理这种情况,这里从略。综合以上分析,可得结论:1.红外接收管的管距(管内侧距离)D取值范围为(25,30-1.5d);据误差理论,单纯从红外接收管的外径尺寸上考虑,其值d越小越好;设计中取红外接收管直径d值为3mm,D值范围(25,25.5)。实验证明,该光电传感器阵列的取值均符合以上介绍的影响光电传感器阵列参数的4条主要因素,所以,该设计是合理的。十字交叉口的识别思想是在7个光电传感器的检测状态中:光电传感器同时检测到黑线;光电传感器从左到右,或从右到左依次检测到黑线。这两条检测方法只是理想状态,它有赖于光电传感器阵列排布和跑道引导线的设计制作工艺,所以不可能完全满足以上两种状态,根据实际情况,我们可在单片机算法设计中实现判断十字交叉口的方案:在一定的时间△t内,所有光电传感器检测到黑线。3.4基本行进算法分析比赛的赛道由直线、曲线、起跑线、十字交叉线组成,起跑线前有1000mm的出发区。比赛对改造后的车模大小严格控制,尺寸不能超过:250mm宽和400mm长,高度无限制。传感器的使用不能超过16个。车模和赛道的对比及参数如图3.6所示。图3.6车模与赛道和起跑线及十字交叉口的示意图车模在行进过程中,应根据前后面板的红外收发管反馈信号及时调整舵机转向,这样才能保证车模始终沿着黑线前进。下面车模在行进过程中可能出现的情况进行分析:3.4.1车模对直线的处理赛道主要由直线构成,所以对直线的分析就显得特别重要,同时也有助于分析曲线、起跑线、十字口的分析。车模完全靠前后两排的红外收发管反馈的信号处理舵机。在某一时刻,车模只可能存在如下几种情况:1.前后面板红外收发管都能检测到信号。2.前面板有信号,后面板无信号。3.前面板无信号,后面板有信号。4.前后面板都无信号。第一种情况为最理想情况,之所以这样说,是因为此时的车模还沿着线前进,没有冲出跑道。可以根据红外收发管的位置调整舵机。第二种和第三种情况需要知道的是在那个红外收发管偏离跑道的,这样就可以做相应的处理。第四种情况为最不理想的情况,此时车模可能已经冲出跑道,也可能没有,这就依赖最后检测到黑线的红外收发管位置。1.前后面板都能检测到信号:图3.7前后面板都能检测到信号(一)前后面板能检测到信号的情况如图3.7所示,其中图a和图e虽然前后面板都能检测到信号,但是整个车模已经偏离了跑道。如果仍然让其直走,那么检测不到黑线的可能性就会增加,车模就会不停的摆动。对于图b和图d来说,就可以让车模直线行进,因为外侧已经有个边缘红外收发管。图c是最理想的情况,这种情况下车模直走是最合适的。初期设计的就是一直让车模保持这个状态,但是为了保证车模不至于在跑道上来回摆动,就放弃了这种想法。图3.8前后面板都能检测到信号(二)如图3.8所示的这几种情况红外收发管虽然不是对称状态,但是能够检测到信号。这些情况需要查表取调整舵机的偏角值。2.前面板无信号,后面板有信号:图3.9前面板无信号,后面板有信号出现如图3.9所示的这种情况说明车模已经偏离了黑线,只能依靠前排最后一次检测到红外收发管的位置来调整车模的偏角。若信号在最右端的红外收发管丢失,说明车模压着黑线(图a)或车模处于黑线的左端,让舵机偏向最右端(图b);若信号在最左端的红外收发管丢失,说明车模压着黑线(图d)或车模处于黑线的左端(图c),让舵机偏向最左端,这样能够再次回到跑道。前面板有信号,后面板无信号:图3.10前面板有信号,后面板无信号后面板无信号的处理要不同于前面板无信号,这种情况的处理要复杂一些。当后面板无信号时,首先会取得最后检测到黑线的红外收发管的位置,再参照前排检测到信号的红外收发管位置。若后面板丢失信号的红外收发管在最左端,判断前面板检测到信号的红外收发管,若为最左端(图a),将舵机调整为中间偏左的角度,若为最右端,直接令舵机偏向最右端(图b)。其余情况查表获得。若后面板丢失信号的红外收发管在最右端,判断前面板检测到信号的红外收发管,若为最右端(图d),将舵机调整为中间偏右的角度,若为最左端,直接令舵机偏向最左端(图c)。其余情况舵机驱动信号参数由查表获得。前后面板都无信号图3.11前后面板都没有信号车模在运行过程中可能会出现如图3.11所示的几种情况。若是图a、图b、图c、图d这几种情况,取得前后面板上一次检测到信号的红外收发管位置,舵机驱动信号参数查表获得数据就可。若是图e、图f,可直接将舵机偏角调整为最右端或最左端。3.4.2车模对曲线的处理图3.12车模在曲线上的示意图车模在曲线和直线上的情况应该是不同的,但是可以近似认为车模前后面板之间的赛道为直线。这样曲线和直线就可以用同一种算法进行处理。3.4.3车模对十字线的处理图3.13十字交叉口示意图(一)图3.14十字交叉口示意图(二)如图3.13所示是车模通过十字交叉口的基本情况。由于十字交叉口是直线与直线成90°相交,所以在进入十字交叉口前,车模已经进行了必要的调整,车身不会有多大的倾斜。如图3.14所示,车模进入黑线时,不会7个红外收发管同时进入,不管怎样排列,都会有一个最先进入十字交叉口的红外收发管和一个最后进入十字交叉口的红外收发管。在程序中可以通过数组平均的方法处理检测到信号的红外收发管,如果车模的左侧或右侧最后检测到黑线的红外收发管离开黑线时没有检测到黑线时,车模就会转左或者转右。如图3.15所示。图3.15十字交叉口示意图(三)车模在运行中要时刻调整车身,保持前后面板与黑线垂直。做到绝对垂直是不可能的,但是一定要近似垂直,不能有过大的夹角。这样才能顺利通过十字口,否则很有可能冲出赛道。3.4.4车模对起始线的处理起始线就是比赛的开始线,当车模第一次进入时开始计时,第三次进入时比赛完成。车模跑完两圈后,应该停下来。起跑线与十字口有哪些联系和区别,它有什么特殊的特征,就必须详细分析。那么怎样才能准确判断起跑线呢?起跑线与十字口的区别就是两边的黑线并没有同中间的黑线完全结合,所以不能按十字口处理。要检测中间的空隙就要合理排布红外收发管的间距,让车模通过起始线时能够出现黑线之间夹杂着白隙。而且绝对不会出现全部红外收发管都检测到黑线。下面列举了可能的情况:图3.16起始线示意图(一)如图3.16所示车模通过起跑线的理想情况,b为最理想情况。这几种情况通过黑线时一定能够检测到起跑线。但是实际运行中出现这几中理想情况几率是很小的。图3.17起始线示意图(二)如图3.17所示是比较经常出现的情况,在通过起始线的时候红外收发管会发生变化,倾斜的程度过大时,不能正确检测到起始线。这就需要车模比较稳定的经过起始线。3.5记忆行进算法分析车模运行的主要参数有位置点P,当前时刻速度v,当前时刻加速度a,舵机转角A。根据这些已知参数可记录车模在运行过程中的路况信息,以及在运行中随时调节车行的稳定性。车模从起始线开始运行,如图3.18所示,路况发生变化的位置点如图中Pi所示。在Pi点要求车模舵机偏转相应角度A,速度和加速度不应超过预定值,本文把这样的Pi点称为关键点。车模以较稳定的速度行完全程,记录各点P的舵机偏转值,如(P,A),根据舵机的偏转值A和位置点P可分析全程路况信息。根据各点的速度v和加速度a的实测值调节车行的稳定性。综合关键点信息和曲线类型及曲率半径,随时调节车速,提高车模运行质量。图3.18车模运行路况分析本设计采用Freescale公司的16位单片机MC9S12DG128[3],在车行过程中记录各位置点的舵机偏转信息如图3.19所示。图3.19跑道位置点和舵机偏角值坐标图位置点P1以后,舵机偏角明显加大,此时车身左转弯,P1ˊ点偏角值回落到1350,此时车身直行,随后又有大的左偏转。结合车模的运行算法可判断,P1到P2为车行左转弯,P1和P2为关键点。进一步,根据P1到P2的舵机偏转A值的波形可分析出跑道的曲率半径。P3到P6位置点的舵机偏转信息如图3.20所示。由图3.18可知,P3到P7为蛇形线,车行到P4点舵机偏转方向发生反向变化,P5和P6也类似,由此判断,P3、P4、P5和P6都是关键点。图3.20跑道位置点和舵机偏角值坐标图3.6智能车的模糊控制为了更合理的调整车身和更充分的利用MC9S13DG128单片机的性能,使用了模糊控制功能。该款单片机共有4个模糊控制指令,可以实现模糊控制中的模糊化、模糊规则推理、反模糊化。该方法主要是根据车模在赛道上的位置信息模糊出舵机驱动控制信号的值。经过模糊化、模糊规则推理、反模糊化后会得到一个模糊控制表,如表3.1所示。将该表添加进控制软件,当有信号反馈给控制器时通过查询模糊控制表表就可以取得舵机驱动信号参数。表3.1模糊控制表FiBi-3-2-10123-31430133013131254120211411050-21435135313301270122011601070-11494141413531297124711861094015511471141216561301124211551160515221461140713531297121021630155015111430148013411268316501570156014521400137312603.7控制软件的流程图图3.21主函数流程图图3.22中断函数流程图第四章车模机械安装与系统调试4.1机械安装智能车模的安装主要是将大赛组委会提供的舵机、MC9S12DG128单片机最小系统板、电池、电路板等合理地固定安装在智能车模上。4.1.1舵机的安装舵机的安装步骤:1、拆下SANWASRM-102标准舵机的舵盘,漏出输出轴齿轮;2、按照车模安装手册,把舵机固定在车模上;3、按照车模安装手册,安装其他机械结构。舵机安装完成后,如图4.1所示。图4.1安装完成的舵机4.1.2模块电路板的安装车模上共安装4块电路板,包括前方巡线模块电路板,中央控制模块电路板,后方巡线测速模块电路板。它们的安装根据车模的结构添加一些辅助支架即可安装固定在车模上。前方巡线模块电路板的安装使用2mm厚的铝板切割成T字形连接车模,安装高度为4cm;MC9S12DG128单片机最小系统板插在中央控制模块电路板上,中央控制模块电路板安装在车模电机的正上方;后方巡线模块电路板的安装需考虑法兰盘的安装位置,安装后车模局部实物如图4.2所示。图4.2安装完成的模块电路板4.1.3法兰盘制作及安装法兰盘制作步骤:1、使用厚度为1.3mm有机玻璃制作一个外径4mm,内径2mm的圆环;2、使用制图软件画一个同样大小有等间距黑白相间的图形;3、将图形打印在透明塑料纸上;4、将图形剪切下来;5、将其粘贴在有机玻璃上;6、将制作好的法兰盘安装在智能车模后轮轴上。安装在智能车模上的法兰盘如图4.3所示。图4.3法兰盘的安装位置4.1.4安装完成后的车模在智能车模的开发过程中,根据开发阶段的不同需求共制作了三版的车模,如图4.4所示,其中第一版车模如图a所示,第二版车模如图b所示,第三版车模如图c所示。图a第一版车模图b第二版车模图c第三版车模图4.4开发过程中制作的三版车模4.2测试赛道的制作为了方便的开发和调试制作的车模,我们严格按照大赛规则中的赛道参数要求制作了两个赛道,如图4.4所示,其中图a是前期测试用的赛道,图b是依据2005年韩国赛道参数制作的赛道。图a前期测试用的赛道图b制作的2005年韩国赛道图4.4使用的测试赛道赛道制作材料使用白色KT板和黑色粘贴纸等;使用工具:剪子、小刀、直尺、铅笔、细导线等。赛道制作场景如图4.5所示。图4.5赛道制作场景4.3系统调试在智能车模的最后测试调试阶段,硬件方面调试手段有:调节前后面板的高度和距离;调节套在红外接收管上的热缩管的长度和方向;调节红外光电传感器电路中的电位器阻值大小;调节滞回比较器的参考电压。软件方面的调试手段有:1.改变舵机驱动信号脉冲宽度参数值;2.调节智能车模的行进速度参数。第五章结论5.1智能车模智能车模采用飞思卡尔16位单片机MC9S12DG128作为控制核心,使用红外收发二极管制作的光电传感器来自动识别黑色引导线,利用先进的PWM技术对电动车模的行进方向和速度进行合理控制,采用法兰盘对实现对智能车的速度实时检测,软件方面采用合理的基本巡线算法和路况记忆算法。智能车模在自制的韩国决赛赛道上实际运行测试表明,它的硬件系统和软件算法都较稳定,能够以较快速度顺利完成赛道。5.2技术指标改造后智能车模的技术指标如下表5.1所示:表5.1改造后智能车模的技术指标技术指标参数总体重量1.1kg车长340mm车宽195mm车高90mm记忆赛道最小精度5.2mm电机驱动信号频率1kHz舵机驱动信号频率50Hz电路所有电容总容量(不包括组委会提供的核心S12的电路板)1484.5μF电路总功耗空载时(8W)负载时(24.5W)表5.1改造后智能车模的技术指标(接上页)技术指标参数传感器种类以及个数反射式红外收发二极管14对;对射式红外收发对管1个除了车模原有的驱动电机、舵机之外伺服电机个数无5.3存在的问题及解决方法此智能车模的功耗比较高,主要是由于14路红外光电传感器采用直流驱动红外发射二极管的原因。智能车模行进过程中过曲率半径0.5m的弯道时最快速度为1.1m/s,这就限制了弯道速度,需要合理地控制智能车模的速度,这也是此次大赛的难点,我们采用的是记忆算法来控制速度。参考文献山名宏治.玩具机器人制作.北京:科学出版社,2005,58~59邵贝贝.单片机嵌入式应用的在线开发方法.北京:清华大学出版社,2004,297~322.宗光华.机器人的创意设计与实践.北京:北京航空航天大学出版社,2004,46~84.陈永甫.红外辐射、红外器件与典型应用.北京:电子工业出版社,2004,31~589S12CoreUserGuide.pdf,[Online],available:,August17,2000,503~530.谭浩强.C语言程序设计.北京:清华大学出版社,1999,50~152附录A硬件电路原理图图A-1电源管理电路图A-2MC33886驱动电路图A-3中央控制模块电路板接口图A-4中央控制模块电路板其他电路图A-5前方巡线模块电路板电路图图A-6后方巡线模块电路板电路图附录B程序源代码******************************************************************************labdata.h******************************************************************************typedefunsignedcharbyte;typedefunsignedintword;typedefunsignedlongdword;typedefunion{byteByte;struct{byteb0:1;byteb1:1;byteb2:1;byteb3:1;byteb4:1;byteb5:1;byteb6:1;byteb7:1;}Bits;}c1;externc1_c1;#definec_t_c1.Byte#definec_t_b0_c1.Bits.b0#definec_t_b1_c1.Bits.b1#definec_t_b2_c1.Bits.b2#definec_t_b3_c1.Bits.b3#definec_t_b4_c1.Bits.b4#definec_t_b5_c1.Bits.b5#definec_t_b6_c1.Bits.b6#definec_t_b7_c1.Bits.b7typedefunion{byteByte;struct{byteb0:1;byteb1:1;byteb2:1;byteb3:1;byteb4:1;byteb5:1;byteb6:1;byteb7:1;}Bits;}c2;externc2_c2;#definec_h_c2.Byte#definec_h_b0_c2.Bits.b0#definec_h_b1_c2.Bits.b1#definec_h_b2_c2.Bits.b2#definec_h_b3_c2.Bits.b3#definec_h_b4_c2.Bits.b4#definec_h_b5_c2.Bits.b5#definec_h_b6_c2.Bits.b6#definec_h_b7_c2.Bits.b7externwordj,k;externwordjk;externwordjj[7],kk[7];externwordm,n;externwordstartLine,shiziLine,quanShu;externwordmax,mid,min; externwordq_i,h_i; externwordj_Tmp,k_Tmp;externwordb[7][7]; externwordpulse_Counter_Timer;externwordpulse_Counter_Now; externdwordcomp[2]; externwordroad_x,road[3500],road_index[200];externwordimp_P,imp_P_Bef;externwordv_dec;externwordv_k;externdwordv1_time,v2_time;******************************************************************************main.c******************************************************************************#include<hidef.h>#include<mc9s12dg128.h>#include"labdata.h"#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"externvoidPortB_init(void);externvoidPWM_init(void);externvoidPortH_int_init(void);externvoidEct_int_init(void);externvoidDeal_center(void);externvoidHz_init(void);externvoidLabdata_init(void);externunsignedintControl_speed(void);voidFind_gjd(unsignedintf_p);voidDeal_imp(void);voidFind_gjd(unsignedintf_p){ unsignedintx_qiang; for(x_qiang=f_p;x_qiang<3500;x_qiang++){ if(road[x_qiang]>=10000){ imp_P=imp_P_Bef; imp_P_Bef=30000+x_qiang; break; } if(road[x_qiang]==0){ imp_P=imp_P_Bef; imp_P_Bef=63499; break; } } }voidDeal_imp(void){unsignedintcur_P;unsignedintP_P;unsignedintp_now;p_now=pulse_Counter_Now/3;P_P=imp_P-30000;if(p_now<=P_P){ if(road[P_P]>20000){ cur_P=road[P_P]-20000; if(((P_P-p_now)<=7)&&((imp_P_Bef-imp_P)>=25)){ PWMDTY67=680; v_k=0; PORTB_BIT6=~PORTB_BIT6; } }else{ if(road[P_P]>10000){ cur_P=road[P_P]-10000; if((cur_P>1480)||(cur_P<1240)){ if(P_P-p_now<=25){ if(P_P-p_now==v_dec){ if(cur_P>1480){ if(PWMDTY45+60<=1650){ PWMDTY45=PWMDTY45+60; PORTB_BIT7=~PORTB_BIT7; }else{ PWMDTY45=1650; PORTB_BIT7=~PORTB_BIT7; } } if(cur_P<1240){ if(PWMDTY45-80>=1050){ PWMDTY45=PWMDTY45-80; PORTB_BIT7=~PORTB_BIT7; }else{ PWMDTY45=1050; PORTB_BIT7=~PORTB_BIT7; } } } PWMDTY67=310; v_k=1; }else{ PWMDTY67=680; v_k=0; PORTB_BIT5=~PORTB_BIT5; } }else{ PWMDTY67=680; v_k=0; } } }}else{ Find_gjd(imp_P_Bef-30000+1);}}interruptvoidPortH_int(void){Deal_center();if(PIFH_PIFH0==1){PIFH_PIFH0=1;}if(PIFH_PIFH1==1){PIFH_PIFH1=1;}if(PIFH_PIFH2==1){PIFH_PIFH2=1;}if(PIFH_PIFH3==1){PIFH_PIFH3=1;}if(PIFH_PIFH4==1){PIFH_PIFH4=1;}if(PIFH_PIFH5==1){PIFH_PIFH5=1;}if(PIFH_PIFH6==1){PIFH_PIFH6=1;}if(PIFH_PIFH7==1){PIFH_PIFH7=1;}}interruptvoidTimer_overflow(void){ pulse_Counter_Timer++;TFLG2_TOF=1;}interruptvoidInput0_int(void){pulse_Counter_Now++;if(quanShu==1){if(pulse_Counter_Now%3==0){ road[road_x]=PWMDTY45; road_x++;}v_dec=Control_speed();}if(quanShu==2){ v_dec=Control_speed();if(pulse_Counter_Now%3==0){ if(imp_P>=30000){ Deal_imp(); }else{ if(imp_P==0){ Find_gjd(1); Deal_imp(); } } road_x++; }}TFLG1_C0F=1; }interruptvoidInput1_int(void){Deal_center();TFLG1_C1F=1; }interruptvoidInput2_int(void){Deal_center();TFLG1_C2F=1; }interruptvoidInput3_int(void){Deal_center();TFLG1_C3F=1; }interruptvoidInput4_int(void){Deal_center();TFLG1_C4F=1; }interruptvoidInput5_int(void){Deal_center();TFLG1_C5F=1; }interruptvoidInput6_int(void){Deal_center();TFLG1_C6F=1; }interruptvoidInput7_int(void){Deal_center();TFLG1_C7F=1; } voidmain(void){ DisableInterrupts;Hz_init();PortB_init();PortH_int_init();Ect_int_init();PWM_init();Labdata_init();EnableInterrupts;for(;;){PORTB_BIT1=1;PORTB_BIT2=0;}}******************************************************************************Hz_init.c******************************************************************************#include<mc9s12dg128.h>externvoidHz_init(void){asm{LDAB#1STABREFDVLDAB#2STABSYNRBRCLRCRGFLG,#$08,*BSETCLKSEL,#$80 LDAA#$49STAAFCLKDIV STAAECLKDIV}}******************************************************************************PWM_init.c******************************************************************************#include<mc9s12dg128.h>externvoidPWM_init(void){PWME=0x00; PWMPOL=0xA0; PWMCLK=0xA0;PWMPRCLK=0x00;PWMCAE=0x00; PWMCTL=0xC0; PWMSCLA=0x0c;PWMSCLB=0x0c;PWMPER67=1000; PWMDTY67=420;PWMPER45=20000;PWMDTY45=1350;PWME=0xA0;}******************************************************************************PortH_int_init.c******************************************************************************#include<mc9s12dg128.h>externvoidPortH_int_init(void){ PTH=0x00; DDRH=0x00; RDRH=0x00; PERH=0xff; PPSH=0x00; PIEH=0xff; PIFH=0xff;}******************************************************************************Ect_int_init.c******************************************************************************#include<mc9s12dg128.h>externvoidEct_int_init(void){TIOS=0x00;TCTL3=0xff;TCTL4=0xfd;DLYCT=0x00;TIE=0xfe;TSCR1=0x80;TSCR2=0x83;TFLG1=0xff;TFLG2_TOF=1;PTT=0x00;DDRT=0x00;RDRT=0x00;PERT=0xff;PPST=0xff;}******************************************************************************PortB_init.c******************************************************************************#include<mc9s12dg128.h>externvoidPortB_init(void){DDRB=0xff;PORTB=0x00;}******************************************************************************Labdata_init.c******************************************************************************#include<mc9s12dg128.h>#include"labdata.h"externvoidLabdata_init(void){max=1650; mid=1350;min=1050;imp_P=0;imp_P_Bef=0;v_k=0;v1_time=16000;v2_time=16000;b[0][0]=1430;b[0][1]=1435;b[0][2]=1494;b[0][3]=1551;b[0][4]=1605;b[0][5]=1630;b[0][6]=1650;b[1][0]=1330;b[1][1]=1353;b[1][2]=1414;b[1][3]=1471;b[1][4]=1522;b[1][5]=1550;b[1][6]=1570;b[2][0]=1313;b[2][1]=1330;b[2][2]=1353;b[2][3]=1412;b[2][4]=1461;b[2][5]=1511;b[2][6]=1560;b[3][0]=1254;b[3][1]=1270;b[3][2]=1297;b[3][3]=1353;b[3][4]=1407;b[3][5]=1430;b[3][6]=1452;b[4][0]=1202;b[4][1]=1220;b[4][2]=1247;b[4][3]=1301;b[4][4]=1353;b[4][5]=1480;b[4][6]=1400;b[5][0]=1141;b[5][1]=1160;b[5][2]=1186;b[5][3]=1242;b[5][4]=1297;b[5][5]=1341;b[5][6]=1373;b[6][0]=1050;b[6][1]=1070;b[6][2]=1094;b[6][3]=1155;b[6][4]=1210;b[6][5]=1268;b[6][6]=1260;}******************************************************************************Yao_bo_pei.c******************************************************************************#include<mc9s12dg128.h>#include"labdata.h"externvoidYao_bo_pei(void){unsignedintpp;unsignedintyao;unsignedintbo;unsignedintEE; unsignedintaver_i,aver_j,pulse_i; unsignedintmm,nn; unsignedlongpulse_sum;pp=0;yao=0;bo=0;EE=0;mm=0;nn=0;pulse_sum=0;for(aver_i=1;aver_i<3500;aver_i++){ if(road[aver_i]!=0){ if((road[aver_i]==1353)||(road[aver_i]==1313)||(road[aver_i]==1341)||(road[aver_i]==1301)||(road[aver_i]==1350)||(road[aver_i]==1310)){ if(aver_i-pp<20){ pp=aver_i; } if(aver_i-pp>=20){ for(aver_j=pp+1;aver_j<aver_i;aver_j++){ if(road[aver_j]>1350){ if(nn==0){ mm++; }else{ if(nn>=20){ if((EE==3)&&(pp-bo<20)){ road[bo]=1350; bo=aver_j-1; pp=aver_j; aver_i=aver_j+1; mm=0; nn=0; gotoLine1; }else{ if((EE==3)&&(pp-bo>=20)){ yao=pp; bo=aver_j-1; pp=aver_j; aver_i=aver_j+1; mm=0; nn=0; gotoLine1; } if((EE==1)||(EE==0)){ yao=pp; bo=aver_j-1; pp=aver_j; aver_i=aver_j+1; EE=3; mm=0; nn=0; gotoLine1; } } }else{ pp=aver_j-1; nn=0; mm++; } } }else{ if(mm==0){ nn++; }else{ if(mm>=20){ if(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度快递公司司机劳务雇佣服务范本2篇
- 二零二五年度农业科技委托推广合作协议书3篇
- 二零二五版码头设备维护保养与改造工程合同6篇
- 二零二五年度离婚手续办理及婚姻解除后子女监护权争议解决合同3篇
- 二零二五年版投资代持业务风险控制协议3篇
- 二零二五年度个人汽车消费反担保合同范本3篇
- 二零二五年度个人光伏发电贷款财产抵押担保协议3篇
- 二零二五版土地居间服务合同范本:生态环保用地合作开发3篇
- 二零二五年度机械设备购销合同模板6篇
- 二零二五版智能设备信用担保租赁协议3篇
- 电力通信光缆检修标准化作业指导书
- 2024年全国统一考试高考新课标Ⅱ卷数学试题(真题+答案)
- 2024山西省文化旅游投资控股集团有限公司招聘笔试参考题库附带答案详解
- 加油站廉洁培训课件
- 2023届上海市松江区高三下学期二模英语试题(含答案)
- 《民航服务沟通技巧》教案第16课民航服务人员平行沟通的技巧
- 深圳市物业专项维修资金管理系统操作手册(电子票据)
- 2023年铁岭卫生职业学院高职单招(数学)试题库含答案解析
- 起重机械安装吊装危险源辨识、风险评价表
- 华北理工儿童口腔医学教案06儿童咬合诱导
- 中国建筑项目管理表格
评论
0/150
提交评论