分享
疾速蜗牛技术文档.doc
下载文档

ID:3503769

大小:1.61MB

页数:39页

格式:DOC

时间:2024-05-16

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
疾速 蜗牛 技术 文档
修得·求是·博学·笃行 滁州学院·疾速蜗牛队 第八届“飞思卡尔”杯全国大学生 智能汽车竞赛 技 术 报 告 学 校: 滁州学院 队伍名称: 疾速蜗牛队 参赛队员: 方纪锋 祖 杰 姚 旺 带队教师: 温卫敏 姚光顺 技术报告和研究论文使用授权的说明 本人完全了解第八届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日 期: 摘要 本文介绍了滁州学院疾速蜗牛队在准备第八届飞思卡尔智能车大赛的工作成果。该系统以Freescale微控制芯片MC9S12XS128为核心,并以CodeWarriorIDE为系统的开发平台,车模采用大赛组委会统一提供的A型仿真车模。 本文主要介绍了智能车控制系统的机械结构、软硬件模块的设计过程。整个系统主要包括车模机械结构调整、传感器电路设计及信号处理、控制算法和策略的优化等多个方面。车模以安装在车体前的工字电感作为循迹传感器,采用干簧管检测起跑线,以旋转光电编码器来检测速度信息,其简单工作原理为MC9S12XS128单片机采集工字电感感应电压的模拟量和干簧管的导通状态,结合舵机控制算法控制舵机转角,单片机再综合赛道信息并结合旋转光电编码器的速度反馈信号,利用电机控制算法控制速度变化,结合无线串口的监控调试,最终确定了各项控制参数。 关键字:智能车,电磁循迹,PID算法 目录 第一章 引言 - 1 - 1.1 概述 - 1 - 1.2 整体框架介绍 - 2 - 第二章 机械设计与优化 - 4 - 2.1 车轮定位调节 - 4 - 2.1.1 主销后倾角 - 4 - 2.1.2 主销内倾角 - 4 - 2.1.3 前轮外倾角 - 5 - 2.1.4 前轮前束 - 5 - 2.2 舵机安装 - 6 - 2.3 底盘固定 - 7 - 2.4 编码器的安装 - 7 - 2.5 差速调节 - 8 - 2.6 PCB板固定 - 8 - 2.7重心调整 - 9 - 第三章 硬件电路设计 - 11 - 3.1 硬件电路的整体框架设计 - 11 - 3.2 传感器设计 - 12 - 3.2.1 传感器选定 - 12 - 3.2.2 传感器信号处理电路 - 12 - 3.2.3 传感器的布局设计 - 13 - 3.3 驱动电路设计 - 15 - 3.4 系统电源电路设计 - 16 - 第四章 智能车控制软件设计 - 17 - 4.1 软件控制思路 - 17 - 4.2 主程序总体框架 - 17 - 4.3 定位算法 - 17 - 4.4 基于位置式PID的方向控制 - 19 - 4.5 基于增量式PID的速度控制 - 20 - 第五章 开发工具、调试说明 - 22 - 5.1 Codewarrior IDE的使用 - 22 - 5.2程序源代码的编辑、编译、链接与BDM调试 - 23 - 第六章 智能车技术参数说明 - 25 - 第七章 总结 - 26 - 参考文献 - 27 - 附录 程序源代码 - 28 - V 第一章 引言 1.1 概述 为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托(教高司函[2005]201号文,附件1),由教育部高等自动化专业教学指导分委员会(以下简称自动化分教指委)主办全国大学生智能汽车竞赛。该竞赛以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。该竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。  该竞赛由竞赛秘书处为各参赛队提供/购置规定范围内的标准硬软件技术平台,竞赛过程包括理论设计、实际制作、整车调试、现场比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性的研究开发项目从设计到实现的全过程。该竞赛融科学性、趣味性和观赏性为一体,是以迅猛发展、前景广阔的汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多学科专业的创意性比赛。该竞赛规则透明,评价标准客观,坚持公开、公平、公正的原则,保证竞赛向健康、普及,持续的方向发展。 该竞赛以飞思卡尔半导体公司为协办方,得到了教育部相关领导、飞思卡尔公司领导与各高校师生的高度评价,已发展成全国30个省市自治区近300所高校广泛参与的全国大学生智能汽车竞赛。2008年起被教育部批准列入国家教学质量与教学改革工程资助项目中科技人文竞赛之一(教高函[2007]30号文)。 全国大学生智能汽车竞赛原则上由全国有自动化专业的高等学校(包括港、澳地区的高校)参赛。竞赛首先在各个分赛区进行报名、预赛,各分赛区的优胜队将参加全国总决赛本次比赛分为光电、摄像头和电磁三个赛题组,在车模中使用透镜成像进行道路检测方法属于摄像头赛题组,使用电磁信号巡线属于电磁赛题组,除此之外则属于光电赛题组。本论文主要介绍电磁赛题组的智能车制作。 1.2 整体框架介绍 在不伤害赛道和能够穿越路障的情况下,系统最大限度的降低小车重心。小车在行驶的过程中,重心的高低对小车的稳定性有很大的影响,并且有利于小车顺利通过大角度弯。 由于电磁组的信号为较复杂的三维矢量电磁信号,系统采用质量轻、硬度大的碳杆作为传感器支架,以达到较远的前瞻性。 在讨论车子闭环控制问题上。系统采用了光电500线的编码器为测速器,直接用编码器齿轮咬合车模主动轮的方法来获取车子的行驶速度,最后在程序中根据编码器采集回来的信号设计速度控制策略,实现车速的闭环控制。 系统是以检测电磁场信号为基础,通过单片机处理信号实现对车体控制,实现车体能够准确沿着预设路径寻迹。系统电路部分需要包括单片机控制单元、电机驱动电路、电磁传感器电路等部分,除此之外系统还需要一些外部设备,例如编码器测速、伺服器控制转向、直流电机驱动车体。疾速蜗牛的系统包含以下几个模块: (1) 电源模块 (2) 单片机最小系统模块 (3) 传感器模块 (4) 电机模块 (5) 舵机模块 (6) 测速模块 (7) 起跑线模块 (8) 人机交互模块 本系统的整体模块如图1.1所示: M C U 信号采集 编码器 干簧管 电机驱动 舵机 显示屏与按键 图1.1 疾速蜗牛系统图 整个系统均由官方提供的7.2V电源通过稳压电路模块供电,电源在充满电之后电压范围在7.2~8.2V之间,可以直接给电机供电。其中TPS7350与7660为最小系统、编码器、传感器等提供±5V电压。LM317为OLED显示屏提供3.3V电压。使之能够稳定运行。 第二章 机械设计与优化 2.1 车轮定位调节 为了使车模在行驶过程中,能够直线稳定,过弯轻便,转向后能自动回正以及减少轮胎和转向系零件的磨损等,系统需要对车轮的定位参数进行调整。其中主要包括有:主销后倾角,主销内倾角,前轮外倾角,前轮前束,外侧轮二十度时,内侧转向轮转角差,后轮外倾角,后轮前束。中、前轮定位的参数对小车性能有着至关重要的影响,这四个参数反映了前轮、主销和前轴三者之间在车架上的位置关系。下文将对着四个参数做详细的阐述。 2.1.1 主销后倾角 图 2.1 主销后倾图 主销后倾角是指在纵向平面内主销轴线与地面垂直线之间的夹角。它在车辆转弯时会产生与车轮偏转方向相反的回正力矩,使车轮自动恢复到原来的中间位置上。所以,主销后倾角越大,车速越高,前轮自动回正的能力就越强,但是过大的回正力矩会使车辆转向沉重。通常主销后倾角值设定在1°到3°。 模型车通过增减黄色垫片的数量来改变主销后倾角的,由于竞赛所用的转向舵机力矩不大,过大的主销后倾角会使转向变得沉重,转弯反应迟滞。 2.1.2 主销内倾角 主销内倾角是指在横向平面内主销轴线与地面垂直线之间的夹角,它的作用也是使前轮自动回正。角度越大前轮自动回正的作用就越强,但转向时也就越费力,轮胎磨损增大;反之,角度越小前轮自动回正的作用就越弱。通常汽车的主销内倾角不大于8°。 对于模型车,通过调整前桥的螺杆的长度可以改变主销内倾角的大小,由于过大的内倾角也会增大转向阻力,增加轮胎磨损,所以在调整时可以近似调整为0°~3°左右,不宜太大。 主销内倾和主销后倾都有使汽车转向自动回正,保持直线行驶的功能。不同之处是主销内倾的回正与车速无关,主销后倾的回正与车速有关,因此高速时主销后倾的回正作用大,低速时主销内倾的回正作用大。 图2.2 主要内倾图 2.1.3 前轮外倾角 前轮外倾角是指通过车轮中心的汽车横向平面与车轮平面的交线与地面垂线之间的夹角,对汽车的转向性能有直接影响,它的作用是提高前轮的转向安全性和转向操纵的轻便性。在汽车的横向平面内,轮胎呈“八”字型时称为“负外倾”,而呈现“V”字形张开时称为正外倾。如果车轮垂直地面一旦满载就易产生变形,可能引起车轮上部向内倾侧,导致车轮联接件损坏。所以事先将车轮校偏一个正外倾角度,一般这个角度约在1°左右,以减少承载轴承负荷,增加零件使用寿命,提高汽车的安全性能。 模型车提供了专门的外倾角调整配件,近似调节其外倾角。由于竞赛中模型主要用于竞速,所以要求尽量减轻重量,其底盘和前桥上承受的载荷不大,所以外倾角调整为0°即可,并且要与前轮前束匹配。 2.1.4 前轮前束 所谓前束是指两轮之间的后距离数值与前距离数值之差,也指前轮中心线与纵向中心线的夹角。前轮前束的作用是保证汽车的行驶性能,减少轮胎的磨损。前轮在滚动时,其惯性力自然将轮胎向内偏斜,如果前束适当,轮胎滚动时的偏斜方向就会抵消,轮胎内外侧磨损的现象会减少。像内八字那样前端小后端大的称为“前束”,反之则称为“后束”或“负前束”。在实际的汽车中,一般前束为0~12mm。 在模型车中,前轮前束是通过调整伺服电机带动的左右横拉杆实现的。主销在垂直方向的位置确定后,改变左右横拉杆的长度即可以改变前轮前束的大小。在实际的调整过程中,我们发现较小的前束,约束0~2mm可以减小转向阻力,使模型车转向更为轻便,但实际效果不是十分明显。 虽然模型车的主销后倾角、主销内倾角、车轮外倾角和前束等均可以调整,但是由于车模加工和制造精度的问题,在通用的规律中还存在着不少的偶然性,一切是实际调整的效果为准。 图 2.4 前轮前束图 2.2 舵机安装 舵机安装直接关系到是否能快速灵敏地转向的问题。如果舵机调整不到位,将很大程度上限制转向角度和转向响应速度。 由于传感器前瞻比较长,考虑到模型车的重心的高度和位置,以及主板放在模型的位置,我么将舵机位置进行了改装,由原来的位置挪移到车体前部,这样以便于降低主板高度,进一步降低车模整体重心。 舵机的安装分对称安装和不对称安装,考虑到舵机的力矩大小和其响应时间的大小,我们采用了对称安装的方法,并且将舵机的摆臂增长,提高舵机的响应速度。因为舵机的摆臂越长,当车轮转过相同的角度时,舵机转过的角度越小,即时间越短。如图2.5所示: 图2.5舵机安装 2.3 底盘固定 在调试过程中,发现模型车运行过程会出现晃动和跳动的情况,虽然在改装车模时已经将扭腰结构去掉,但是在高速运行时非常的明显,这大大影响了速度的提高。仔细观察后发现,底盘两端连接部分的韧性和强度不够,这是造成车体晃动的主要原因。在不改变底盘整体结构的情况下,对小车底盘进行了加固,如图2.6所示,为了消除车体在运行过程中的晃动,使小车行驶得更加稳定。 图2.6 底盘固定图 2.4 编码器的安装 编码器的安装遵循的是调整齿轮的咬合,以不松动,无卡滞,松紧合适为准。另外还要保证齿轮间咬合有足够的接触面积。如图2.7所示: 图2.7编码器固定 2.5 差速调节 在拐弯时由于弯道内侧轮比外侧轮的拐弯半径小,则内侧轮比外侧轮的速度小,这就使两轮胎有一定的速度差,称为差速。而赛车的差速机构安装在后轮轴上的,所以只可以调整后轮的差速。 后轮的相对松紧程度,也就是差速对拐弯有很大的影响。差速太紧,则拐弯容易甩尾,速度快的时候很容易甩出去,但是差速如果太松,虽然会改善转弯性能,但是严重影响了直线上的加减速,而且齿轮的咬合也不是很好,对齿轮会有一定的损坏。所以,后面两个轮子的相对松紧程度要适中,经过多次的调试,得出了比较满意的效果,即将模型车放到跑道上,用手抓住后轮的一只轮子使其不能转动,在赛道上推车子转弯,如果车子能够稍轻松的推动,则此时的差速器为最适合。调节差速可以通过调整大车轮里面的螺母松紧和外面车轮的松紧达到调成差速的效果,一般把舵机打到最大摆角,用手快速推车没感觉到很大的阻力就可以。注意防止差速太松,带动后轮动力不足。 差速调整是调节螺母,当一只手按住差速盘,另一只手按某个方向转动一侧轮子时,另一侧轮子会按相反的方向转动相同的角度,并且不会影响驱动力,此时视为最佳。 2.6 PCB板固定 为了尽可能的降低小车的重心,板子的固定以尽可能低为目标,如图2.8所示: 图2.8 PCB板固定 2.7重心调整 对于车的重心来说,重心越低,后轮的抓地力也就越好,前轮也会转越敏感。因此,系统在尽量减少重量的同时将电路板做得非常小,便于将电路板嵌入放在舵机和电池中间的底板上,这样,不但可以压低模型车的重心,防止高速过弯时翻车,也可以使纵向重心前移,增加转弯性能。在装旋转编码器时也把其装的很低,以降低赛车的重心,提高赛车行驶的稳定性。 图2.9疾速蜗牛整体图 除了对车的重心进行纵向调整之外,对车辆重心进行前后方向调整,对赛车行驶性能也有很大的影响。从车辆运动学理论来看,车身重心前移,会增加转向,但会是舵机的负载加大,大部分的重量压在前轮,从而降低转向的灵敏度,同时降低后轮的抓地力;如果重心后移,就会减少转向,但增大转向灵敏度,后轮的抓地力也会增加。因此,调整合适的车身重心,让车模更加适应比赛赛道是非常关键的。为了保证赛车足够的转向和防止在高速入弯时出现甩尾现象,我们让重心大概在赛车的中心,在过弯时,使其前后轮的侧向摩擦力大体相当,从而提高过弯性能和稳定性。 第三章 硬件电路设计 本章将对小车的各个模块的电路设计与实现进行介绍。 3.1 硬件电路的整体框架设计 电源管理 7.2~8.2V 驱动模块 转向舵机模块 单片机最小系统 测速模块 按键与显示屏模块 传感器模块 图3.1电路整体框架图 疾速蜗牛的电路框架如图3.1.所示。系统硬件电路设计主要包括单片机最小系统,电机驱动电路模块,信号检测与放大电路模块,转向舵机模块,测速模块,按键/显示模块等。 为了减少重量,系统将除了传感器模块电路外的其他电路集成在一整块的PCB板上。为了防止相互间的干扰,采取在整块PCB板上对每个模块部分进行了隔离。以提高电路的稳定性,如图3.2所示。 图3.2 疾速蜗牛主PCB板 3.2 传感器设计 3.2.1 传感器选定 根据竞赛组委会的相关规定,系统采用磁传感器。常见的磁传感器包括霍尔元件,磁敏电阻,磁敏二极管,电感,电子罗盘的磁场传感器等。通过查阅资料和大量的电感测试,发现10mH的电感式最为理想的磁传感器。能够得到较为规整的20Khz的正弦波,与磁场发生器产生的频率一致。而且电动势的大小和电感与路劲导线的距离呈规律性变化。 3.2.2 传感器信号处理电路 由于电感直接采集到的信号只有几毫安电流,不利于单片机AD口直接采集,所以要通过电路对信号进行放大和检波处理。 比赛场地选用20KHZ的交变电流作为电磁车的路劲导航信号,使用LC并联电路实现信号频选放大。根据电感谐振频率公式,10MH与6.8nf电容构成LC电路最为合适,电路如图3.3所示。 图 3.2.1 LC并联电路 图 3.3 LC电路 磁信号经过电感采集之后,需要对信号进行放大处理。通过对大量的运放芯片与运放电路测试之后,我们决定采用TL082双运放,能够将信号方法几千倍,能满足探测需求。 图 3.4 信号检测与方法电路 3.2.3 传感器的布局设计 在传感器的布局上系统设计采用两种方案,在小车制作初期采用双水平电感检测方案,根据第七届电磁组官方提供的(R-L)/(R+L)方案计算小车的偏移量,从而实现小车角度控制。采用双水平线圈检测方案,在边缘情况下,其单调性发生变化,这样存在一个定位不清的区域(如图3.3箭头所指)。同一个差值,会对应多个位置,不利于定位。另外,受单个线圈感应电动势的最大距离限制,两个线圈的检测广度很有限。 图 3.5 双电感定位不清区域 在后期电感布局研究中,系统采用了4个电感一字排开的布局方式,每个电感的间距为8cm,覆盖范围为24cm。直接使用感应电动势的模拟量的精确数值,精确的计算导线与传感器正中心的距离,具体计算方法依照毕奥萨伐定理 (3-1) 这种方法计算出的小车偏移距离为连续变化的曲线,方便软件控制。而且使靠两边的电感与水平线成45°的角,便于传感器入弯时对信号的采集。 图 3.6 疾速蜗牛传感器布局 3.3 驱动电路设计 今年电磁组小车采用A车模,由于A车的电机功率有限,所以系统放弃了电路复杂的MOS管,采用电路设计简单的BTN7971作为电机驱动。由于电磁组是用电感作为传感器,前瞻收到了一定的限制,因此需要两片BTN7971来构成半H桥作为驱动电路用于电机反转来进行小车及时刹车与弯道减速。 图 3.7电机驱动电路 3.4 系统电源电路设计 根据需要,小车一共存在5中电压,分别是7.2V,6V,±5V,3.3V。7.2V电池电压直接接到电机启动模块,6.2V为悬挂舵机供电,±5V为单片机、信号放大电路以及速度传感器供电,3.3V为液晶供电。 所有供电部分电路都是严格依照芯片的生产公司提供的Typical application部分设计的。在此各电路的原理图就不再重复引用了。 第四章 智能车控制软件设计 4.1 软件控制思路 软件控制程序实质就是人的思想在小车上的实现,并让其高速稳定的运行。对于飞思卡尔智能车来说软件控制主要为路径识别=>舵机控制=>速度控制。目的就是让小车在稳定的情况下高速通过所有赛道。 按照系统方案采集电感的模拟量,判断赛道导线的位置,控制舵机打角,控制电机转速。 4.2 主程序总体框架 程序的主体采用顺序结构。为了减少单片机的压力,在main函数中主要执行函数的初始化,按键和起跑线检测。其中核心控制程序全部放在中断中。流程图如下图4.1所示: 图 4.1 主程序结构图 4.3 定位算法 疾速蜗牛采用四个水平“一”字电感采集赛道信息。如图4.2所示: -24 0 24 图 4.2 传感器坐标 四个传感器如图排布并建立坐标系,中心坐标为0,左右极限值为±24。先找到四个电感中的最大值Fmax,同时得到Fmax电感左右两个电感R和L。为了精确定位,我们设置了一个阀值T,一共可分为两个情况: (1)当|L值-R值|<T,即L值约等于R值,说明导线在Fmax正上,得出确切位置; (2)当|L值-R值|>T,说明导线在M和L或者M和R之间。 针对第二种情况得出精确位置,我们找到剩下三个电感中的最大值Smax。并记录Fmax和Smax的横坐标Xm的值,分别为Fx和Sx。如果Fmax左右两个电感的L值-R值的值小于一定的阀值,则判断小车的偏移量就是Xm[Fx]。否则带入近视计算公式: (4.1) 公式(4.1)中的D=Fmax-Smax,S为每个电感之间的间距。正负号取决于Smax电感在Fmax电感的左侧还是右侧,左侧取负号,右侧取正号。k是一个比例系数,通过观察数据到。实践测试,发现X的变化呈现连续稳定的线性变化,而且该公式很好的拟合了导线的位置,误差在5mm范围之内。 采集四个传感器的值并做加权平均滤波处理 找出Fmax,同时找出L和R,并判断是否存在满足要求L和R 判断是否满足|R值-L值|<T x=Xm[Fm] x=±24 图 4.3 定位流程图 4.4 基于位置式PID的方向控制 PID 控制是工业过程控制中历史最悠久,生命力最强的控制方式。这主要是因为这种控制方式具有直观、实现简单和鲁棒性能好等一系列的优点。PID控制主要有三部分组成,比例、积分、微分。 比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。偏差一旦产生,调节器立即产生控制作用使被控量朝着减小偏差的方向变化,控制作用的强弱取决于KP。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。 为了消除稳态误差,引入积分控制。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积 分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。 为了预测预测误差变化的趋势,引入微分的控制器,这样就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。 ControllerCo Plant R e u Y - 图 4.4 PID控制原理图 单位反馈e代表理想输入与实际输出的误差,这个误差信号被送到控制器,控制器算出误差信号的积分值和微分值,并将它们与原误差信号进行线性组合,得到输出量u: (4.2) 其中,Kp、Ki 、Kd分别称为比例系数、积分系数、微分系数。u接着被送到了执行机构,这样就获得了新的输出信号,这个新的输出信号被再次送到感应器以发现新的误差信号,这个过程就这样周而复始地进行。 用矩形数值积分代替上式中的积分项,对导数项用后向差分逼近,得到数字PID控制器的基本算式(位置算式): (4.3) 其中T是采样时间,、、为三个待调参数,在实际代码实现算法时,处理成以下形式: loca_PreU = Kp * loca_error + Ki * loca_PreIntegral + Kd * loca_derror(4.4) 4.5 基于增量式PID的速度控制 速度控制部分是智能车除了舵机控制之外最为核心的内容。一个好的速度 控制就是能十分准确的给出目标速度,电机对目标速度响应迅速,系统在干扰下速度依然稳定。 对位置式PID稍作变化,得到PID的另一种形式———增量式PID: (4.5) 在代码实现时,处理成: vl_PreU += (Kp * d_error + Ki * error + Kd*dd_error) (4.6) 系统根据编码器反馈回来的数值进行换算。当编码器反馈回来的速度没有达到目标速度,那么正转占空比自加,反之则自减。以至于小车速度能够快速达到自己设定的期望速度。代码中会考虑到不同路劲对应不同的速度,因此直道上设定一个较大的期望速度,让小车在直道上加速行驶,大弧度弯道和小S上设定中等的期望速度,大角度弯道运用刹车进行减速,使得小车在进弯时有更多的处理时间,以便顺利过弯。 第五章 开发工具、调试说明 程序的开发是在组委会提供的CodeWarrior IDE下进行的,包括源程序的编写、编译、链接以及最终生成可执行文件。 5.1 Codewarrior IDE的使用 打开Codewarrior IDE,创建一个新工程,界面如图5.1所示。 图 5.1 创建一个工程 选择目标芯片型号以及芯片与电脑的连接方式,这里选择MC9S12XS128以及“TBDML”项,如图5.1.2所示。 图 5.2选择目标芯片及连接方式 选择程序编写所用语言,以及填写创建的工程名和保存路径,如图5.3所示。 图5.3 选择工程编写所用语言及工程保存路径 接下来的以默认设置直道完成。完成之后,会出现工程文件管理窗口。 5.2程序源代码的编辑、编译、链接与BDM调试 在main.c中提示“/* put your own code here */”的地方输入源代码。完成之后,点击(make)按钮,完成编译与链接。编译好后,会出现“Errors & Warnings”窗口,其中会显示程序中错误和警告信息,表示错误,表示警告。在排除所有错误之后,工程就能顺利编译。编译完成以后,在用户所建立工程的bin文件夹下自动生成“*.abs.s19”文件,这个文件就是将被下载到单片机中的文件。 在成功编译之后,选择Debug按钮,进入调试环境,即启动了Hiwave.exe。 出现如下窗口,点击“确定”按钮,如图5.4所示。 图 5.4 下载程序 之后BDM会自动擦出芯片Flash,再下载新程序下载,完成之后就会出现BDM调试界面,如图5.5所示。 图 5.5 BDM调试界面 第六章 智能车技术参数说明 名称 参数 车模质量(g) 1500 车模长度(mm) 756 车模宽度(mm) 240 车模高度(mm) 170 电路总功率(W) 8.0 电容总量(uF) 1500 传感器个数(个) 7 传感器种类 电感、干簧管、编码器 赛道检测精度(mm) 4.0 赛道检测频度(次/秒) 200 前轮距(mm) 150 后轮距(mm) 168 编码器精度(P/r) 500 第七章 总结 本技术报告详细介绍了疾速蜗牛的设计思路与方案,其中涉及到车模的改装,传感器的制作,舵机打角控制策略以及速度控制策略。 分析整个车模的系统,在车模硬件和软件上,即融合了往届的先进技术同时增加了我们的创新思想。 在传感器的布局上,我们在准备比赛初期研究过双电感的使用,虽然控制算法简单,但是路径信号采集盲区太大,不适合高速行驶的小车。后来采用双排电感,这样的排布方式虽然能够很好的寻线,但是算法处理起来比较复杂,而且增加了前瞻的重量。最终敲定四个电感一字型排布,减轻了重量而且能够很好的适应各种赛道。 在电路方面,采用模块化设计,特别是放大电路模块容易损坏,因此采用可插拔的接口方便电路的升级和维修。为了方便调试,小车增加了按键和显示屏,而且配合了参赛选手在赛场上能够临场发挥,增强小车的适应能力。 重量与重心问题,在很大程度上影响了小车的行驶状态。为了做到小车尽量轻和重心尽量低,我们去除了小车上多余的器件,在能够通过路障的情况下尽量降低车模底盘高度,PCB板尽可能的贴近车模底部安装。电感支架采用市场上强度大,质量轻的碳素杆。 在代码开发方面,我们主要使用C语言作为开发语言,利用比赛推荐的开发工具开发并调试程序。经过小组成员的不断讨论、改进,终于设计出一套比较合理的,稳定的程序。在整个程序控制部分,只开启了个1MS定时中断,控制步骤简单,容易调试,而且主要的控制程序的放在中断中,减小了单片机的运行压力。 在经过三个月的备战中,学校和学院都给予我们大力的支持,在此感谢一直关注并支持我们飞思卡尔智能车比赛的所有领导与老师。同时感谢组委会能够组织这样一场精彩而有意思的比赛。 大赛即将来领,回首我们备战的三个月,付出了心血,但收获了知识与快乐。疾速蜗牛作为我们辛勤汗水的结晶,凝聚了我们的心血与智慧,我们有信心在比赛中去的更加优异的成绩。 参考文献 [1] 孙同景,陈桂友 Freescale 9S12 十六位单片机原理及嵌入式开发技术,北京-机械工业出版社,2008 [2] 卓晴,黄开胜,邵贝贝 学做智能车 北京-北京航空航天大学出版社 2007 [3] 卓晴.基于电磁引导的智能车控制算法 [4] 王威 HCS12微控制器原理及应用 北京-北京航空航天大学出版社 2007 [5] 谭浩强 C++程序设计 北京-清华大学出版社 2004 [6] 王威 HCS12微控制器原理及应用 北京-北京航空航天大学出版社 2007 [7] 新型PID控制及其应用2002年作者:陶永华主编 [8] 潘松,黄继业 现代数字电路基础教程 北京-科学出版社 2008 [9] 第五届“飞思卡尔”杯全国大学生智能车大赛清华大学三角洲电磁组技术报告 [10] 第六届“飞思卡尔”杯全国大学生智能车大赛杭州电子科技大学电磁组钱江一号技术报告 [11] 第六届“飞思卡尔”杯全国大学生智能车大赛北京科技大学电磁二队技术报告 附录 程序源代码 #include "derivative.h" #include <stdio.h> #include <string.h> #include "OLED.h" #include "stdlib.h" #include "math.h" int SetSpeed =90; #define Steercenter 3540 #define SteerMin 340 #define SteerMax 340 int zhiSpeed=70,wanSpeed=120; float SteerP=0.3; float SteerD=10; byte Switch=0;////参数调整开关 byte f=0; ////传感器编号 float q=0; //计算曲率的 float offset1=0; float offset2=0; /////////////***↓↓↓传感器的最大最小值 int Smax[6]={1000,1000,1000,1000}; int Smin[6]={5,5,5,5}; int v0=0,v1=0,v2=0,v3=0,v4=0,v5=0,v6=0,v7=0,v8=0,v9=0,v10=0,v11,v12; float Xm[4]={-12,-4,4,12}; //各个电感的相对坐标 //**** word time1=0,time2=0,time3=0; int ad0[7]={0},ad1[7]={0},ad2[7]={0},ad3[7]={0}; float Value[6]={0}; float FMax_value=0; word fMax_flag=0; float SMax_value=0; word sMax_flag=0; int k; //左右标志位 float xx=0; //路劲偏移距离 float Local_PWM=0; float error,Derror,DDerror; float x1,x2,x3; float ql[3]; word out_flag; void Set_value(); void Angle_Control(); void SteerPID(); void showLED(); void printp(void (*PortToPut)(), char* ctrl, ...); void uart_putchar(unsigned char ch); /*******************设置总线频率64M**********************/ void SetBusCLK_64M(void) { CLKSEL=0X00; PLLCTL_PLLON=1; SYNR =0xc0 | 0x07; REFDV=0x80 | 0x01; POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz; _asm(nop); //BUS CLOCK=64M _asm(nop); while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it; CLKSEL_PLLSEL =1; //engage PLL to system; } /*************中断初始化:1MS**********************/ void PIT_init(void) { //脉冲pt7初始化 PACTL = 0x40; //脉冲计数 下降沿 PACNT = 0x0000; // Pulse Accumulators Count Registers (PACNT PITCFLMT_PITE=0; //定时中断通道0关 PITCE_PCE0=1; //定时器通道0使能 PITMTLD0=8-1; //8位定时器初值设定,8分频,在64MHzBusClock下,为8MHz。即0.125us PITLD0=8000-1; //16位定时器初值设定。PITTIME*0.125uS 8000*0.125 =1ms即1mS中断一次 PITINTE_PINTE0=1;//定时器中断通道0中断使能 PITCFLMT_PITE=1; //定时器通道0使能 } void ADC_Init(void) { ATD0CTL0=0x07; ATD0CTL1=0xc0; //7:1-外部触发,65:00-12位精度,4:放电,3210:ch ATD0CTL2=0x40; //禁止外部触发, 中断禁止 ATD0CTL3=0xB0; //a右对齐无符号,每次转换6个序列, No FIFO, Freeze模式下继续转 ATD0CTL4=0xff; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1] AT

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开