温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
中南
大学
第十一届“恩智浦”杯全国大学生第十一届“恩智浦”杯全国大学生 智能汽车竞赛智能汽车竞赛 技 术 报 告 参赛学校:中南大学 队伍名称:比亚迪狮子座创新 2016 参赛队员:吕鑫 吴双忱 刘瑞超 贺雨鑫 任宏宇 带队教师:王击 目 录 第一章 引言.1 第二章 车模选择.2 第三章 车模机械调整.3 3.1 传感器放置.3 3.2 舵机安装.3 3.3 车轮处理.6 3.4 车体重心调节.7 3.5 前瞻的设计.7 第四章 车模电路设计概述.8 4.1 总体方案.8 4.2 传感器模块.9 4.3 电源模块.12 4.4 电机驱动模块.14 第五章 软件部分.15 5.1 软件开发环境.15 5.2 程序流程图.16 5.3 偏差提取.16 5.4 控制算法.19 第六章 小车创新、节能亮点展示.22 6.1 取电装置创新点.22 6.2 小车供电创新点23 6.3 小车节能亮点24 第七章 模型车参数.24 第八章 总结与展望.25 7.1 总结.25 7.2 展望.26 谢辞.27 参考文献.28 附录.29 1 引言引言 小小的神奇车模驰骋在暑期各个竞速赛场已过十年,花样翻新智能汽车创意比赛之花也绽放了八年。激情四射的竞速比赛与天马行空的创意比赛的联袂演出,成为全国智能车总决赛现场最大的亮点。伴随着每年一成不变的快者为王竞速赛主旋律,扑朔迷离的创意比赛的主题则“年年岁岁花相似,岁岁年年人不同”。正是其变化多端的主题以及能够直接进入全国总决赛赛场的机会,每年吸引越来越多的同学借此竞赛平台,锻炼自己的能力,展现团队合作的作品。参赛同学认识到在这机遇与挑战并存的时代中,最为高效的培养科学认知志趣、增强统驭技术能力的途径,就是通过一个复杂的工程探索实践活动进行学习和锻炼。本文设计的创意节能组智能车系统以 MK60DN512 微控制器为核心控制单元;通过采集三组金属传感器输出的电压值表征智能车的位置,使用差和比控制算法控制舵机的偏角,实现了对模型车运动方向的闭环控制。通过编码器检测模型车的速度并对其脉冲采样,并使用 PID 控制算法调节电机的转速,实现了对模型车运动速度的闭环控制。为了提高模型车速度的精确性和系统的稳定性,使用 OLED 模块显示数据。能量传输部分采用接触式电刷取电方式,其中自主设计隔离保护电路和切换电路使得电刷和超级电容交替供电,电机运行明显稳定于传统电刷方式。实验结果表明,该系统设计方案确实可行。关键词:创意节能 差和比 PID 超级电容 交替供电 2 二、车模选择二、车模选择 本次比赛的规则车模要求为,节能创意组所用车模可选传统的 A、B、C、D、E 车模,也可自行设计。车模的质量影响车模的加速度以及电机输出的力矩等因素,因此车模的质量是一个应该考虑的指标,同时,由于车子在运行的过程中车子的电机能耗是主板功耗的主要来源,因此对车模的电机也应该着重考虑;还应该考虑的是车子的速度问题,因为同样的跑道用时最短也就意味着消耗的总能量越低;因此,我们在现有的常规车模内,对车模进行了数据分析:通过功率测量仪我们对相同的转速下 A,B,C 的电机能耗测得的数据如下:车模的质量(含电池等)我们测得如下 A:980g B:1301g C:1003g 所以综上考虑,我们选择质量轻,电机耗能小的 A 车模;3 三、车模机械调整三、车模机械调整 3.1 传感器放置传感器放置 传感器放置对于小车控制起最主要的控制,我们采用三线圈的排布,采用前二后一的排布方式。3.2 舵机放置舵机放置 舵机延时性分析舵机延时性分析 舵机的响应时间对于控制非常重要,舵机能够及时响应微控制器发出的指令并产生相应的动作可以保障智能车在高速行驶过程中能够及时转弯,不脱离轨道。否则,即使控制算法再好,输出控制信号后,执行器(舵机)没有动作,则也达不到预期的控制效果。例如,微控制器已经根据赛道信息发出了转弯指令,但舵机响应控制信号延迟,则会出现已经到了弯道跟前,但是舵机却还没有转动的情况,智能车在惯性的作用下依旧向前冲,等舵机转动时小车车身已经偏离出轨道了。情况好的,在减速刹车后经过一段时间还能转回 4 来,驶上正常的轨道;情况坏的则会冲出赛道,导致传感器检测不到正确的赛道信息,不能够继续行驶。在之前的比赛中,有很多队伍都提到了舵机的响应会滞后,但是没有分析原因,导致有些队伍无法对症下药,不得不以牺牲速度为代价,来换取智能车平安完成比赛。在此,我们对舵机延时的原因做一个比较详细的分析,以便做出相应的改进。微控制器输出周期延时 前面已经提及,我们利用 K60 微控制器内部集成的 PWM 模块产生周期一定,占空比(及脉宽)可调的 PWM 波形。而控制 PWM 波周期和占空比是通过微控制器的两个 8 位的内部寄存器来实现的,它们是 PWMPERx(PWM Period)和 PWMDTYx(PWM Duty),其中x 代表 07 通道的序号。设定好这两个寄存器的值后(具体的设置还与系统总线频率和其它寄存器的值相关),对应的通道就会一直输出一个固定频率的 PWM 波,直到改变这两个寄存器的值为止5。当智能车检测到前方有弯道时,经过运算得出需要的占空比和所对应的寄存器的值,将这个值赋给 PWMDTYx 寄存器,随后输出 PWM 波的占空比就会发生相应的改变。但是,当在软件中改变了 PWMDTYx 寄存器中的值后,输出 PWM 波的占空比并不会立刻改变。PWMDTYx 寄存器为双缓冲结构,由于微控制器内部硬件结构的原因,当在 PWM 信号输出过程中进行写操作时,写入的值将进入缓冲器,而不是直接进入该寄存器,直到通道被禁止或当前周期结束,计数器重新被写入(计数器回 0)时才能进入该寄存器。这样设计的目的,虽然是为了避免输出变化着的不稳定的 PWM 波形,但是却产生了延时,如图 2.1 所示。假设我们产生的 PWM 波的频率是 50Hz,即周期为 20ms。我们在软件中运算得出需要的占空比对应的 PWMDTYx 寄存器的值,并将其赋值给 PWMDTYx 寄存器,如果这一时刻在A 点,即一个周期刚开始的时刻,那么我们运算得出的结果将要在缓冲器中保存 20ms,在下一周期开始时才进入 PWMDTYx 寄存器,使占空比变成我们计算出的结果;如果那一时刻刚好在 C 点,即一个周期即将结束的时刻,那么我们运算的结果能够立刻进入 PWMDTYx寄存器,使下一周期的占空比发生变化;而通常这一时刻则在 B 点,即 20ms 中的任意一点。因此,这就是第一次延时产生的原因所在。根据上面的叙述,当 PWM 波周期为 20ms 时,产生的延迟时间为 020ms。我们将这个延时叫做微控制器输出周期延时。5 1.5 ms2.2 ms1.5 ms20 msACB 图 2.1 PWM 波占空比改变示意图 舵机机械延时 由于舵机内部具有小型直流电机、级联减速齿轮组、位置反馈电位器等机械装置,因此不可能瞬间达到我们所期望的输出角度,这就是影响舵机控制特性的一个主要参数即响应速度,也叫做舵机输出轴转动角速度,这个参数一般以舵机空载时输出转盘旋转 60所需要的时间表示。大赛指定使用的舵机工作电压范围为 5V 左右,在 4.8V 时,响应速度时0.20sec/60 degrees,在 6V 时,响应速度为 0.16sec/60 degrees。而带了负载之后,响应速度还会略微下降。由此可知,舵机转动一定角度有时间延迟,时间延迟正比于旋转过的角度,反比于舵机的响应速度。例如,当舵机收到从 0转动到 60的信号时,要经过 160ms 才会达到我们预期的角度值。我们将这部分延时叫做舵机机械延时。舵机的安装与控制延时解决办法舵机的安装与控制延时解决办法 因此,舵机的控制输出延时由微控制器输出周期延时和舵机机械延时两部分组成,由上分析可知,延时最大时会达到将近 20ms+160ms=180ms。可以说,舵机的响应速度直接影响智能车通过弯道时的最高速度。因此提高舵机的响应速度是提高智能车平均速度的一个关键。根据以上的分析,提出以下几个解决办法:1.提高 PWM 波频率。指定舵机可接收的 PWM 信号频率范围为 50 200Hz,对应的周期为 20ms 5ms,通过上述分析可知,频率越高,微控制器输出周期延时就越短,可以有效减少延迟时间。6 2.提高舵机工作电压。在上述分析中可以看出,工作电压越高,响应速度则越快,我们使用12V降压电压为8.0V,略高于舵机标定的工作电压范围,但是可以直接舵机供电。如此一来,舵机的响应速度还可以进一步提高,大约为 0.1sec/60 degrees。3.安装更长的舵机输出臂。采用杠杆原理,在舵机的输出舵盘上安装一个较长的输出臂,将转向传动杆连接在输出臂末端。这样就可以在舵机输出较小的转角下,取得较大的前轮转角,从而提高了整个车模转向控制的速度。如图 2.2 所示,这种方法是通过机械方式,利用舵机的输出转距余量,将角度进行放大,加快了舵机响应速度4。3.3 轮胎处理轮胎处理 轮胎的处理对于小车能不能跑上高速是很重要的,由于要求保证轮胎有花纹,并且粘度不可超过一定限度,所以我们提高了了轮胎的更换次数和使用周期。而且车速越高,小车轮胎无法提供足够的摩擦力,使得轮胎会脱离轮毂,所以我们将小车的轮胎和轮毂用 3M 胶粘和在一起,以提供足够的侧向力。并且这样也可以保证轮胎足够的面积接触赛道,减少小车的抖动和转向的侧滑。这样有效地提高整辆车的性能。7 3.4 车体重心调整车体重心调整 车身的重心位置直接影响智能车的整体性能。在质量相同的情况下,如果重心太靠前,大大增加了前轮和舵机的负载,影响转向的轻便性。我们设计时先保证小车重心处于左右对称的位置,这样可以消除小车左右转向不对称的问题。其次在不破坏车的整体结构的情况下,我们尽量让小车的重心靠后降低,使车身尽量靠近赛道,以此提高小车整体转向性能 3.5 前瞻的设计前瞻的设计 我们前瞻支架使用了一根主碳杆从车尾伸出,然后在前端使用玻璃纤维杆构成三角形的稳定结构。前瞻距离约为 30cm,可以保证最大 3m 的速度。高度在保证能够安全通过坡道的前提下降为最低。8 四、四、车模电路设计概述车模电路设计概述 4.1 总体方案总体方案 本车需要自主从铝箔上完成取电,取电以后为了给主板提供稳定的电压输出需要对输入的电压进行整流稳压。整流稳压以后即可拉入主板,对主板完成供电。先介绍取电模块,整车在运行时,铝箔相对车的位置会发生变化,为了方便取电,我们采用了四个电刷、相邻的两个电刷构成一组取电模块,共三组模块实现取电。三组供电模块输出的电压分别进行整流,整流后的正极并联、负极并联,接入滤波稳压模块。在滤波稳压模块的输入端,我们并联了一个电容方便储电,为了不浪费电容里的电能,我们采用继电器控制电容的充放电。当电容里的电能较多时,关闭继电器,禁止从铝箔取电,节省能量。稳压模块的处理上,为了降低功耗,我们采用了高性能的 lm2596 稳压芯片,将输入的12V 左右的电压降至 8V,传入主板。9 主板也需要在节能上下功夫,为了省电,在控制上我们采用了低功耗的 K60DN512 芯片,在稳压芯片的选择上,我们采用了 lm1117、tps7350、tps7333 等高效率稳压芯片,尽量减少能量损失。在驱动上,我们放弃了高功耗的 mos 驱动,采用了集成度高的 BTN7971 驱动。10 4.2 传感器模块传感器模块 初期在对官方方案的测试中发现官方方案虽然能够检测到铝箔,但明显的缺点就是能够检测到的范围太小,线圈与铝箔的距离非常近才能够明显检测到变化,这样小车的前瞻就非常短,速度就提不起来。在参考了多种检测方案后,我们决定采用一种将采集回来的频率变化转换为电压的变化的方案,该方案的一大优点就是能检测到的范围比较大,稳定时可以实现铝箔与线圈距离 78cm 仍然能够检测到铝箔。下图为传感器模块实物图和原理图:11 12 13 4.3 电源模块电源模块 由于电源对高频干扰具有较强的抑制作用。同时由于其低功耗特点,在进行电路板设计时,可以减少散热片的体积和 PCB 板的面积,有时甚至不需要加装散热片,方便了电路设计与使用,提高了稳定性能。主电机供电与单片机供电分离电路 图 3.2 单片机电源和电机电源分离 主电机在启动的瞬间和反转的瞬间会产生高达 20A 的冲击电流。而主电机和单片机都是由单独电池供电,若在主电机电源和单片机电源系统之间不加任何隔离措施,有可能导致在赛车行驶的过程中单片机复位,这是绝对不允许的。所以在主电机电源和单片机电源系统之间加了一极滤波器。电路图如图 3.2 所示。传感器供电电路 传感器的工作电压都是 5V,我们选用的芯片是 tps7350,具有纹波小、电路结构简单的优点,其输入的电压为电源电压,输出 5V。其典型应用电路图如图 470uFC72Cap Pol21000uFC71Cap Pol210mHL2InductorGND+7.2V-1+7.2V 14 舵机供电电路 舵机采用的官方规定的 S3010,舵机电压为稳压输出的 8V,减少了稳压处理,减小功耗。简化了电路结构。、3V、5V 供电电路 单片机、蜂鸣器和蓝牙等的工作电压都是 3.3V,我们选用的芯片是 TPS7333 和LM1117-5.0,具有纹波小、电路结构简单的优点,其输入的电压为电源电压,输出 3.3v。编码器等工作电压是 5V,我们选用的是 TPS7350,具有纹波小、电路结构简单的优点,其输入的电压为电源电压,输出 5v。其典型应用电路图如图 15 4.4 电机驱动模块电机驱动模块 驱动单元是控制系统的重要组成部分,采用高效率的 BTN7971 驱动模块。相对于 MOS驱动,外围电路简单,效率较高。虽然输出电流和响应速度等方面不如 MOS 驱动,但是考虑到电轨车的整体运行水平,BTN 驱动可以完全胜任。16 五、五、软件部分软件部分 5.1 软件开发环境软件开发环境 IAR Embedded Workbench IDE 软件程序编写任务主要在 IAR Embedded Workbench IDE 平台下进行,该平台是一个非常有效的集成开发环境(IDE),能够保证用户充分有效地开发和管理嵌入式应用工程,适用于大量 8 位、16 位以及 32 位的微处理器和微控制器的程序开发,为用户提供了一个具有大量代码继承能力的开发环境以及对大多数和特殊目标的支持。该软件自带的调试功能可以有效提高用户的工作效率,节省工作时间。该软件使用的界面环境如下:17 5.2 程序流程图程序流程图 5.3 偏差提取偏差提取 5.3.1 正常情况下偏差提取 18 在小车未出现全丢线或者进入坡道的情况时,我们计算偏差的思想是左右线圈采集回来的 AD 值之差,同时以中间线圈采集的 AD 值作为基准。同时由于我们的线圈是自行绕制的,因而每个线圈的精度不同,我们的处理思想是首先先对每个线圈采集回来的 AD 值进行限幅处理,确保每个线圈采集回来的值不会出现异常的波动,再者对每个线圈采集回来的 AD 值进行归一化处理,以此来解决自行绕制的线圈的不对称问题。同时由于我们的金属传感器对高度比较敏感,但小车在行驶的过程中难免会出现抖动,因而这也为数据的处理造成了一定的麻烦。再者我们的金属传感器存在温漂问题,因而同一个位置每个线圈采集回来的值可能就会与先前采集到的值存在较大差异。我们的解决办法是:首先扫描赛道的信息,确定每个线圈在有无铝箔的情况下采集到的最大值与最小值,记录下最大值与最小值作为基准,在后续的处理的过程中,运用动态增益,将采集回来的 AD 值限制在先前扫描赛道信息所得到的最大与最小值之间,以此来解决传感器的温漂问题以及小车在行驶的过程中所出现的抖动问题。这样计算出的偏差基本是十分连续,曲线如下:19 5.3.2 弯道丢线处理 由于线圈对铝箔的检测范围有限,所以电轨车在运行时遇到急弯会出现丢线的情况。当三个线圈都没有检测到铝箔时认定为丢线,此时的偏差值保持上一次的值。5.3.3 坡道处理 由于使用的传感器对高度的变化比较敏感,因而可以利用传感器自身的特性来检测坡道。我们的处理思想是:在前排线圈的中间放值一个自行绕制的小线圈。在除了坡道的其他赛道元素中,该线圈采集回来的 AD 值均较大,只有在遇到坡道的时候,由于该电感与铝箔的高度距离变得比较近,因而采集回来的 AD 值会突然减小,根据这一变 20 化特性来判断坡道。相比于利用陀螺仪、接触开关来判断坡道,这种判断坡道的方法不仅简单可靠,而且简化了小车的硬件设计。遇到坡道时该电感采集回来的 AD 值的变化波形:当在坡道上时,由于经由其他线圈采集回来的 AD 值计算出来的偏差在某些位置不可靠,因而我们将此时算出的偏差限制在一个较小的范围内。结果表明这种处理方法的可行性。5.4 控制算法 5.4.1 舵机控制 在舵机控制方面,常用的方法有 PD 控制和模糊 PD 控制;若采用单参数 PD 控制,会造成弯道打得不及时,或者直道,小 s 弯舵机打角抖动的情况;改善 D 参数可以一定程度上改善小车入弯的性能,但是也会引起直道震荡等问题;因此普通的 PD 难以实现好的舵机控制,为此我们采用模糊 PD 的方法控制舵机,其输入为二维的量,分别为偏差和偏差变化率,通过一系列模糊化,模糊推理和解模糊后,得出 21 舵机打角的值,其中最为关键的是模糊控制表,经过调试后,舵机模糊 P 表如下:5.4.2 电机控制 电机控制,采用常规的 PID 控制算法时,存在的问题主要是积分项的饱和问题,因此主要对 PID 的积分项进行改进,我们采用积分分离和抗积分饱和结合式的 PID 控制,在一定的偏差内,对积分的项进行限幅处理,使得速度偏差的积分项的影响降低许多。而对于 PID 参数的整定,我们采用临界震荡法对电机进行整定。逐步确定了 P,I 和 D参数,最后取得了良好的控速效果。22 第六章第六章 小车创新、节能亮点展示小车创新、节能亮点展示 6.1 取电取电装置创新点装置创新点 为了保证取电的稳定性,我们采用了若干个电刷组合为 4 组取电组进行取电。可以适应车身在赛道上的不同姿态的取电。23 使用弹簧和软导线自身的弹性来保证电刷与赛道充分接触。24 取好的电用整流桥进行整流,保证源输入的正确性。同时容错率更高,可以不用区分赛道电压的正负性。具有极好的适应性。6.2 小车供电创新点小车供电创新点 小车采用超级电容与电刷取电的交替供电,电刷取的电不仅仅在供小车的行驶,还能使超级电容充电,当超级电容的电量达到放电阈值的时候使用继电器关闭电刷取电,对超级电容进行放电,当达到充电阈值的时候,使用继电器打开电刷取电。25 6.3 小车节能亮点小车节能亮点 使用超级电容作为储能元件。超级电容具有功率密度高、充电时间短,使用寿命长,温度特性好,节能环保等特点。对电机进行速度闭环,使电机处于最优状态。26 第第七七章章 赛车主要技术参数赛车主要技术参数 项目项目 参数参数 路径检测方法(赛题组)路径检测方法(赛题组)节能创意组节能创意组 车模几何尺寸(长、宽、高)(毫米)车模几何尺寸(长、宽、高)(毫米)450*400*100 车模轴距车模轴距/轮距(毫米)轮距(毫米)200(轴距),140(前轮距),140(后轮距)车模平均电流(匀速行驶)车模平均电流(匀速行驶)(毫安毫安)1400 电路电容总量(微法)电路电容总量(微法)20500 传感器种类及个数传感器种类及个数 线圈 3 个,编码器 1 个 新增加伺服电机个数新增加伺服电机个数 0 个 赛道信息检测空间精度(毫米)赛道信息检测空间精度(毫米)20 赛道信息检测频率(次赛道信息检测频率(次/秒)秒)250 主要集成电路种类主要集成电路种类/数量数量 数字 74 系列集成电路 车模重量(带有电池)(千克)车模重量(带有电池)(千克)1.235 27 第第八八章章 总结与展望总结与展望 8.1 总结总结 要实现对高速行驶汽车的自主智能控制并不是一个简单的自动控制问题,它涵盖了控制、模式识别、力学、光学、电磁学、传感技术、电子、电气、计算机、机械及车辆工程等多个学科。本文采用的控制核心是一款恩智浦半导体公司生产的 32 位微控制器MK60DN512,利用了微控制器的强大功能实现了智能小车对路径的自主寻迹,以及在未知环境下,结合一定的算法,实现了对智能小车的高速导航控制,从最终测试结果来看,本系统具有较好的控制性能与对未知环境的适应能力。对智能小车系统的自主控制,可以分为三大部分:首先是对路径信息的提取与识别,即智能小车的寻迹;然后是对前轮舵机方向的控制,即智能小车的导航控制;最后是对后轮车速的控制,即智能小车的驱动控制。智能小车的导航控制,主要就是对智能小车的舵机系统进行控制,但是,前轮舵机系统作为一个机械执行机构,舵机系统中存在着饱和、摩擦和间隙等非线性因素,再加上 K60 微控制器自身产生 PWM 波形机制的问题,使舵机系统具有机械延时和输出周期延时两部分,造成了比较大的延时。本文在详细论述了延时原因的基础上,提出了几点解决办法,分别从软件和硬件两方面下手,减少了舵机的延时,使对舵机控制的实时性更好。智能小车的舵机转向控制是一个复杂的随动控制问题,很难求得其准确的模型,此时 PID 的控制效果将难于达到预期的目标。因此我们根据人驾驶车辆的经验,采用了分类控制算法。在搭建好智能小车的软硬件平台后,我们进行了一系列的仿真和调试,实验证明,我们的寻迹方案与导航控制策略是稳定、有效的。完成了对智能小车的自动控制,并在制作的赛道上实现了智能小车的高速、自主行驶。在调试过程中,我们也发现了一些问题,由于对汽 28 车工程理论与机械结构设计的不熟悉,使我们对智能小车结构的改造和对传感器安装支架的设计存在着缺陷和不足,这就约束了智能小车的提速,例如,传感器支架过重使智能小车重心偏前,导致在高速行驶转弯时会发生抖动的情况。此外,我们对赛道信息的处理算法和导航控制算法也有改进和提升的空间,例如,可以尝试在导航控制中使用专家系统等先进的算法。这些都是我们今后努力的目标。8.2 展望展望 智能车系统的研究十分复杂,需要解决的问题很多,任务非常艰巨,不是一蹴而就的,必须经过长期的理论研究和实践探索才能够取得突破和进展。展望未来,对于我们所研究的这类智能小车,我们认为今后还可在以下几个方面做进一步的研究和提升。1)、采用优质的电轨传感器,可以非常方便的调整其参数,对环境适应能力更强。2)、在舵机控制策略上,可以考虑使用更先进的控制算法。3)、在赛道处理方面,可以研究更先进的算法,不过,这需要配合微控制器性能的提升,可以考虑使用 ARM 等更先进的处理器。4)、小车机械性能方面。需要学习一些汽车工程方面的知识,以便对智能小车的车体改造有理论指导和依据。此外可以在考虑外增加制动装置在入弯时进行减速。这样直道速度可以提高,平均速度更快。但如何选择合适的制动装置并对其进行控制,还需要进一 29 致致 谢谢 今年能够参加第十一届恩智浦杯全国大学生智能汽车赛我们首先要感谢信息科学与工 程学院王击老师的悉心指导,指导老师多次询问研究进程并为我们指点迷津,甚至和我们 一起奋战至凌晨三四点。其严谨的治学态度以及对我们的关怀使们获益甚多,感动颇深。在准备比赛期间我们得到了参加过上次比赛的学长的许多非常实用的帮助和建议,在 这里要特别感谢他们。另外也感谢一起准备比赛的队员,没有他们的帮助我们不可能完成 工作。另外我们还要感谢恩智浦公司为我们提供的芯片支持,没有一个大范围的比较是不可 能选出最优最合适元器件出来的,我们的小车能够顺利的参赛要感谢恩智浦公司的帮助和 对整个赛事的支持。最后,也是最特别要感谢的是教育部自动化类教学指导委员会和全国大学生智能车竞 赛秘书处各位老师的无私付出,如果没有他们热情、关心、培植全国大学生智能车竞赛,我们乃至全国那么多学子就没有这么好的提高能力的机会,感恩你们!30 参考文献参考文献 1 教育部高等学校自动化专业教学指导分委员会.关于举办第三届全国大学生“飞思卡尔”杯智能汽车竞赛的通知EB/OL.2007-11-01.2 邵贝贝.单片机嵌入式应用的在线开发方法.北京:清华大学出版社.2004 年 10 月第 1 版.3 方兴,郭思明,马明煌.上海交通大学速度之星队技术报告.4 卓晴,黄开胜,邵贝贝.学做智能车M.北京:北京航空航天大学出版社,2007.2427.7 杨明,宋雪峰,王宏,张钹.面向智能交通系统的赛道处理J.计算机工程与应用.2001 年09 期.6 余灿键,程东成,李伟强.PID 算法在智能汽车设计上的应用.学做智能车挑战“飞思卡尔”杯C.北京:北京航空航天大学出版社,2007.133135.7 Todd D.Motton.嵌入式微控制器 Embedded MicrocontrollerM.北京:科学出版社.2003年 8月第 1 版.10吴志辉,陈水保,陈彬.中南大学比亚迪金牛座 2012 技术报告 31 附录:void main()BSP_init();LED_Fill(0 x00);/清屏 Gpio_init(PORT_B,22,PIN_IN,LED_ON);Gpio_init(PORT_B,21,PIN_IN,LED_ON);Gpio_init(PORT_B,16,PIN_IN,LED_ON);Gpio_init(PORT_B,17,PIN_IN,LED_ON);/*/Gpio_init(PORT_D,15,PIN_OUT,LED_ON);time_delay_ms(200);Gpio_init(PORT_D,15,PIN_OUT,LED_OFF);for(int i=0;iAD1_max)AD1_max=AD1;if(AD1AD3_max)AD3_max=AD3;if(AD3AD6_max)AD6_max=AD6;if(AD6=10)i=0;sensor_filter();for(j=0;j0.2*(AD_maxj-AD_minj)directionj=1;else directionj=0;if(direction0=0)&(direction1=1)&(direction2=0)/直道 direction_flag=1;orientation=1;else if(direction0=1)&(direction1=0)&(direction2=0)&(direction_flag=1)&(old_orientation!=2)/偏向右 direction_flag=0;orientation=2;else if(direction0=0)&(direction1=0)&(direction2=1)&(direction_flag=1)&(old_orientation!=1)/偏向左 direction_flag=0;orientation=3;else if(direction0=0)&(direction1=0)&(direction2=0)/极左或者极右情况 direction_flag=1;if(orientation=2)old_orientation=1;else if(orientation=3)old_orientation=2;else 34 ADnum0i=AD_1;/左 ADnum1i=AD_2;/右 ADnum2i=AD_3;/中 i+;float ADnum_sum3=0,AD_max3=0,AD_min3=0;void sensor_filter(void)unsigned int i,j,k,m;unsigned int temp;/中值平均滤波 for(k=0;k 3;k+)for(i=0;i 10;i+)m=i;for(j=i+1;j ADnumkj)m=j;if(i!=m)temp=ADnumki;ADnumki=ADnumkj;ADnumkj=temp;for(j=0;j3;j+)for(i=2;i=AD_maxj)AD_maxj=ADnum_sumj;if(ADnum_sumjSC|=(FTM_SC_CLKS(1)/CLKS 置 1 表示选择系统时钟,系统时钟即为内核时钟,即为 SCG 模块的时钟|FTM_SC_PS(ucDivFactor);pstFTMModule-CNTIN=0;/PDF 文档中的位置 949/1801,CNTIN 的初始值为 0 /不同的模块选择不同的 MOD 值 if(ucPin=PWM_PIN_PTA8)/FTM1 模块的 MOD 设置成 4882 pstFTMModule-MOD =PWM_FRE_FACTOR1;else if(ucPin=PWM_PIN_PTA9)pstFTMModule-MOD =PWM_FRE_FACTOR1;else/FTM0 模块的 MOD 设置成 488 pstFTMModule-MOD =PWM_FRE_FACTOR;/*PWM 波的对其方式,边沿对齐还是中间对其,后期可了解*/FTM_CnSC_REG(pstFTMModule,ucFTMCh)|=FTM_CnSC_MSB_MASK;/MSB=1:Edge-aligned PWM 42 if(PWM_MODE_LOW_ACTIVE=ucPWMMode)FTM_CnSC_REG(pstFTMModule,ucFTMCh)|=FTM_CnSC_ELSA_MASK;/ELSA=1:Low active else FTM_CnSC_REG(pstFTMModule,ucFTMCh)|=FTM_CnSC_ELSB_MASK;/ELSB ELSL=10:High active FTM_CnSC_REG(pstFTMModule,ucFTMCh)&=FTM_CnSC_ELSA_MASK;/3010 初始化 PWM 占空比不能给 0 if(ucPin=PWM_PIN_PTA8)FTM_CnV_REG(pstFTMModule,ucFTMCh)=600;/传感器舵机的初始化占空比 else if(ucPin=PWM_PIN_PTA9)FTM_CnV_REG(pstFTMModule,ucFTMCh)=600;/电机初始化占空比 else FTM_CnV_REG(pstFTMModule,ucFTMCh)=0;void PWM_Output(U8 ucPin,U16 ucDuty)/U16 ucDuty 对应的即为占空比 C0V的值 FTM_MemMapPtr pstFTMModule;U8 ucFTMCh;switch(ucPin)case PWM_PIN_PTA0:43 pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH5;break;case PWM_PIN_PTA1:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH6;break;case PWM_PIN_PTA2:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH7;break;case PWM_PIN_PTA3:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH0;break;case PWM_PIN_PTA4:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH1;break;case PWM_PIN_PTA5:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH2;break;case PWM_PIN_PTA6:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH3;break;case PWM_PIN_PTA7:pstFTMModule=FTM0_BASE_PTR;44 ucFTMCh=PWM_CH4;break;case PWM_PIN_PTA8:pstFTMModule=FTM1_BASE_PTR;ucFTMCh=PWM_CH0;break;case PWM_PIN_PTA9:pstFTMModule=FTM1_BASE_PTR;ucFTMCh=PWM_CH1;break;case PWM_PIN_PTA10:pstFTMModule=FTM2_BASE_PTR;ucFTMCh=PWM_CH0;break;case PWM_PIN_PTA11:pstFTMModule=FTM2_BASE_PTR;ucFTMCh=PWM_CH1;break;case PWM_PIN_PTA12:pstFTMModule=FTM1_BASE_PTR;ucFTMCh=PWM_CH0;break;case PWM_PIN_PTA13:pstFTMModule=FTM1_BASE_PTR;ucFTMCh=PWM_CH1;break;case PWM_PIN_PTB0:pstFTMModule=FTM1_BASE_PTR;ucFTMCh=PWM_CH0;break;45 case PWM_PIN_PTB1:pstFTMModule=FTM1_BASE_PTR;ucFTMCh=PWM_CH1;break;case PWM_PIN_PTB18:pstFTMModule=FTM2_BASE_PTR;ucFTMCh=PWM_CH0;break;case PWM_PIN_PTB19:pstFTMModule=FTM2_BASE_PTR;ucFTMCh=PWM_CH1;break;case PWM_PIN_PTC1:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH0;break;case PWM_PIN_PTC2:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH1;break;case PWM_PIN_PTC3:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH2;break;case PWM_PIN_PTC4:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH3;break;case PWM_PIN_PTD4:46 pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH4;break;case PWM_PIN_PTD5:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH5;break;case PWM_PIN_PTD6:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH6;break;case PWM_PIN_PTD7:pstFTMModule=FTM0_BASE_PTR;ucFTMCh=PWM_CH7;break;default:return;/各个模块输入占空比限幅 if(ucPin=PWM_PIN_PTA8)if(ucDuty=PWM_FRE_FACTOR1)/mod FTM_CnV_REG(pstFTMModule,ucFTMCh)=PWM_FRE_FACTOR1;else FTM_CnV_REG(pstFTMModule,ucFTMCh)=ucDuty;else if(ucPin=PWM_PIN_PTA9)if(ucDuty=PWM_FRE_FACTOR1)/mod 47 FTM_CnV_REG(pstFTMModule,ucFTMCh)=PWM_FRE_FACTOR1;else FTM_CnV_REG(pstFTMModule,ucFTMCh)=ucDuty;else if(ucDuty=PWM_FRE_FACTOR)/mod FTM_CnV_REG(pstFTMModule,ucFTMCh)=PWM_FRE_FACTOR;else FTM_CnV_REG(pstFTMModule,ucFTMCh)=ucDuty;