北理风行者车队技术报告
第四届“飞思卡尔”杯全国大学生
智能汽车邀请赛
学 校:北京理工大学
队伍名称:风行者队
参赛队员:王新宇 温小锋 胡 伟
胡 鸿 孟凡腾 雷金凡
带队教师:张幽彤 冬雷
关于技术报告和研究
使用授权的说明
本人完全了解第四届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、
使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组
委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方
案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组
委会出版论文集中。
参赛队员签名:王新宇
温小锋
胡 伟
胡 鸿
孟凡腾
雷金凡
带队教师签名:张幽彤
冬 雷
日 期:2009.8.8
I
摘 要
本文介绍了半年多来北京理工大学风行者车队队员们在准备Freescale智能车大赛过程中的工作努力成果。智能车的硬件平台采用带MC9S12DP512处理器的S12 环境,软件平台为CodeWarrior IDE 4.7开发环境,车模采用大赛组委会统
一提供的1:10 的仿真车模。文中介绍了智能小车控制系统的软硬件结构和开
发流程。
整个系统涉及车模机械结构调整、传感器电路设计及信号处理、控制算法和 策略优化等多个方面。为了提高智能赛车的行驶速度和可靠性,试验了多套方
案,并进行升级,结合Labview 仿真平台进行了大量底层和上层测试,最终确
定了现有的系统结构和各项控制参数。
关键字:智能车,激光管,模糊PID控制
II
第一章 引 言 ............................................................................................................................. 1
1.1 研究背景介绍 ...................................................................................................................... 1
1.2 系统
介绍 ...................................................................................................................... 2
1.3 章节安排 .............................................................................................................................. 2
第二章 技术方案概要说明 ........................................................................................................... 4 2.1 智能车系统分析 .................................................................................................................. 4
2.2 智能车系统硬件结构设计 .................................................................................................. 4 2.3 智能车系统软件结构设计 .................................................................................................. 5 第三章 机械系统设计说明 ........................................................................................................... 6 3.1 智能车的整体结构 .............................................................................................................. 6 3.2 智能车运动学状态方程 ...................................................................................................... 7 3.3 智能车前轮定位参数的选择 .............................................................................................. 9 3.4 智能车转向机构调整优化 ................................................................................................ 12 3.5 智能车后轮减速齿轮机构调整 ........................................................................................ 13 3.6 其它机械结构的调整 ........................................................................................................ 14 第四章 硬件电路设计说明 ......................................................................................................... 15 4.1 S12单片机最小系统 ......................................................................................................... 15 4.2 路线识别电路设计 ............................................................................................................ 18 4.3 电源管理电路设计 ............................................................................................................ 20 4.4 电机驱动电路设计 ............................................................................................................ 21 4.5 串行通讯接口电路 ............................................................................................................ 22 4.6 速度检测模块 .................................................................................................................... 22
4.7 现场调试模块 .................................................................................................................... 24
第五章 软件设计说明 ............................................................................................................... 25
5.1 总体控制流程图 ................................................................................................................ 25
5.2 工作原理 ............................................................................................................................ 26
5.3 PID控制以及PID参数的整定 ......................................................................................... 26 5.4 小车控制策略 .................................................................................................................... 28
5.5 光电智能车模糊PID控制方法 ........................................................................................ 28 5.6 软件开发环境 .................................................................................................................... 34
第六章 模型车各项参数 ........................................................................................................... 37 第七章 结 论 ......................................................................................................................... 38
7.1 本系统的所具有的特点 .................................................................................................... 38 7.2 本系统存在的问
............................................................................................................ 38 7.3 本系统可行的改进措施 .................................................................................................... 39 参考文献 ....................................................................................................................................... 40
鸣 谢 ..................................................................................................................................... 41
附录A 模型车控制主程序代码 .............................................................................................XLII
III
1.1
教育部为了加强大学生实践、创新能力和团队精神的培养,在已举办全
国大学生数学建模、电子设计、机械设计、结构设计等 大竞赛的基础上,经研
究决定,委托教育部高等学校自动化教学指导分委会主办每年一度的全国大学
生智能汽车竞赛,并成立了由教育部、自动化分教指委、清华大学、飞思卡尔
半导体公司等单位领导及专家组成的“第一届‘飞思卡尔’杯全国大学生智能
汽车邀请赛”组委会。该竞赛是为了提高大学生的动手能力和创新能力而举办
的,具有重大的现实意义。与其它大赛不同的是,这个大赛的综合性很强,是
以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感、电子、电气、
计算机和机械等多个学科交叉的科技创意性比赛,这对进一步深化高等工程教
育改革,培养本新意识,培养硕士生从事科学、技术研究能力,培养博士生知
识、技术创新能力具有重要意义。
以智能汽车为研究背景的科技创意性制作,是一种具有探索性的工程实
践活动,其本质也是人类创造有用人工物的一种训练性实践,其过程属性是综
合,而结果属性很可能是创造。通过竞赛,参赛的同学们培养了对已学过的基
础与专业理论知识与实验的综合运用的能力;带着背景对象中的各种新问题,
学习控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科新知
识,包括来自不同学科背景大学生的相互学习,逐渐学会了在学科交叉、集成
基础上的综合运用;若是以实用为目的,还必须考虑考虑可靠性、寿命、外观
工业设计、集成科学与非科学,在具体约束条件下融合形成整体的综合运用。
这样的训练是很有意义的。
在智能车的开发过程中,各参赛队伍需要改装竞赛车模,完成只能巡线
小车的制作。在此过程中需要学习嵌入式系统开发环境与在线编程方法、单片
机接口电路设计,自行设计并实现识别引导黑线的硬件电路、电机的驱动电路、
车速反馈电路、智能车舵机控制电路以及能使小车在不驶出赛道的前提下可能
快速行驶的控制策略与软件算法。第一届“飞思卡尔”杯全国大学生智能汽车
邀请赛,已于2006年8月21日在清华大学顺利结束。为了使更多的高校、更
1
第四届全国大学生智能汽车邀请赛技术报告
多的大学生参与到这一活动中来,第二届“飞思卡尔”杯全国大学生智能汽车
竞赛原则上由全国有自动化专业的理工类高等本科学校约270余所参赛,每个
参赛学校限2个队;分五个赛区进行预赛,各分赛区的优胜队参加决赛。第四
届“飞思卡尔”杯全国大学生智能汽车竞赛将参赛规模扩大到每校四个队伍,
比赛的普及性进一步提高。第四届“飞思卡尔”杯全国大学生智能汽车竞赛和
第四届一样每校四个队伍,但参加全国竞赛每个赛区每个组别只能有一个队伍。
智能车的开发与设计涉及到多个专业领域,对于大学生综合素质的培养,
知识面的拓展和分析问题解决问题的能力的提高很有意义,并且有利于提高大
学生的动手能力、激发创新能力。此外,制作这样一个高性能智能小车的过程,
也是需要同组成员相互协作、紧密配合的过程,在此过程中,团队成员的交流
与合作也显得尤为重要。
本次比赛分为光电与摄像头两个赛题组,在车模中使用透镜成像进行道
路检测方法属于摄像头赛题组,除此之外则属于光电赛题组。论文中主要介绍
光电赛题组的智能车制作。
1.2
在方案设计的过程中,我们参阅了很多兄弟院校的往届大赛技术报告,
如清华大学、北京科技大学。在国内,他们对智能车研究起步的比较早,例如
清华大学首创记忆算法、北京科技大学创先使用激光管。但是,基于本次大赛
的比赛要求,即车在三次机会内只要完整地跑下一圈便计入成绩,所以不能像
上一届一样采取跑一圈停车的策略。由车手根据在现场调试和试跑时的状况,
通过按键,适当改变参数。因此今年不能使用清华首创的记忆算法,对于LED
组来说,提高小车的速度和稳定性,其实际问题是如何更早且更好的提取到赛
道信息。所以今年我们采取的策略是激光传感器加上人工调参,以此来实现目
标。
1.3
本技术报告总共分为七个章节。
第一章节是引言,主要介绍研究背景、系统方案等。 第二章节是技术方案概要说明,主要内容是对整个技术方案的概述。
2
第一章 引 言
第三章节是机械系统设计说明,主要对小车的机械结构以及运动性能进行了分
析,得出了一些小车在设计安装过程中应该要注意的问题。包括智能车前轮定
位的调整、转向机构调整优化、后轮减速齿轮机构调整、其他机构的调整等。
第四章节是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电
路的设计原理、创新点和实现过程等。 第五章节是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用
到的控制理论、算法说明及代码设计介绍等。 第六章节是模型车的各项参数,包括车模基本尺寸,电路功耗以电容总容量等。
第七章节是结论,对本模型车的特点、存在的问题、可行的改进措施等。
3
2.1
在满足大赛要求的前提下,设计的智能小车应具有良好的自主道路识别能力
和稳定性,并能以较快的速度行驶。因此,智能小车系统的设计主要包括以下两部
分:
1、完成智能小车控制器的硬件电路设计,根据大赛要求,调整和改进智能
车模的机械结构,最大限度的发挥小车的性能。
2、结合软件算法,使小车转向准确、稳定,能够安全通过各种弯道和十字
交叉路口。
在保证智能车可靠运行的前提下,电路设计尽量简洁紧凑,以减轻系统负载,
提高智能车的灵活性,同时应充分发挥创新原则,以简洁但功能完美为出发点,并
以稳定性为首要前提,实现智能车快速运行。
作为能够自动识别道路运行的智能汽车,信息处理与控制算法至关重要,主
要由运行在单片机中的控制软件完成。因此,控制软件的设计是智能车的核心环节。
2.2 智能车系统硬件结构设计
经过分析整个智能车系统,可知系统完成的功能如图2.1所示。
电源管理模块电机驱动模块
MC9S12DG128路径识别模块直流电机
速度检测模块转向舵机控制
图2.1 系统硬件结构框图
4
第二章 技术方案概要说明
其中MC9S12DG128是系统的核心部分。它负责接收赛道信息、小车速度等
反馈信息,并对这些信息进行恰当的处理,形成合适的控制量来对舵机与驱动电机
进行控制。舵机模块和电机驱动分别用于实现小车转向和驱动。
电源管理模块主要为单片机及路径识别电路、转向舵机、后轮驱动电路三大
部分提供稳定的直流电源。
路径识别模块由S12的AD模块、传感器和外围电路组成。其功能是获取前
方赛道的信息,以供S12作进一步分析处理。
速度检测模块由S12的增强型捕捉计数模块、传感器和外围电路组成,通过
检测赛车的实时车速为赛车的车速控制提供控制量。 2.3 智能车系统软件结构设计
如果说系统硬件对于智能车来说是它的骨架和躯体,那么软件算法就是它的
思想。软件算法的优劣直接体现了智能车辆的“智能”高低。所以软件系统对于智
能车来说至关重要。首先,赛车系统通过路径识别模块获取前方黑色引导线的信息,
同时通过速度检测模块实时获取赛车的速度。利用连续路径识别算法求得赛车与黑
线位置的偏差,接着采用P方法对舵机进行控制,根据检测到的实时车速,结合模
糊控制策略对赛车速度进行恰当的控制调整,使赛车在符合比赛规则情况下沿赛道
快速前进。赛车系统的软件流程如图所示。
开始
系统初始化
采集黑线位置
转向舵机控制
转速电机控制
图2.2 系统控制流程图
5
智能小车的机械性能对于其行驶表现具有非常重要的影响,任何控制算法和
软件程序都需要通过智能小车的机械结构来执行和实现。为使模型车在比赛中发挥
出最佳性能,使其直线行驶稳定,入弯转向灵活,结合汽车理论相关知识对智能小
车的运动特性进行分析,并据此对智能小车的底盘结构进行相应的调整和参数优
化。
3.1
此次比赛选用的赛车车模采用1/10 的仿真车模。赛车机械结构只使用竞赛提供车模的底盘部分及转向和驱动部分。控制采用前轮转向,后轮驱动方案。
具体车模数据如下:
表 3-1 车模基本尺寸参数
轴距 197cm
前轮距 124cm
后轮距 136cm
车轮直径 50cm
车长 316mm
车宽 172m
传动比 18/76
6
第三章 机械系统设计说明
模型车的底盘结构图如图3.1。
图3.1 模型车的底盘结构
3.2
在只考虑车辆的平面运动情况下,当转向时,车辆只做平面运动及平面旋转
运动,如图3.2、3.3所示。
,
Vf
Vr
w
L
图3.2 小车转向示意图
7
第四届全国大学生智能汽车邀请赛技术报告
,
R
,
L
图3.3 转向平面图
2,Vrw,,TR由角速度的定义可知 公式1
LR,tan, 公式2
,可以将车辆的角速度表示如下:
vr,,,tan
公式3 L
v,r其中,为车辆后轮轴中心线速度,L为车辆轴距,为前轮转角。则小车方位偏差
e,为:
vrtan,,e,,,,,,L, == 公式4 ,,其中为跟踪路径曲率变化对侧向偏差的影响,当跟踪路径为直线时其值为零。
vf不考虑车辆侧滑时,车辆前轮轴中心处速度矢量为:
vvL,,,,fr 公式5
8
第三章 机械系统设计说明
le则侧向偏差
lvev,,,,cossin,,,effd, 公式6
,d其中表示路径曲率变化对侧向偏差变化率的影响。由公式4、公式6即构成状态
l,e变量为及方向偏差的赛车运动学状态方程:
,1,,ll,v0,,,,,,,,eedr,,v,,,,tanr1,,,,,,,,,,ee,00,,,,,,,,,,,L,,
3.3 智能车前轮定位参数的选择
为保证智能小车直线行驶稳定,转向轻便灵活并尽可能的减少轮胎磨损,需
要对小车的前轮定位参数进行调整。小车的前轮定位参数主要包括:主销后倾角、
主销内倾角、前轮外倾角和前轮前束。这四个参数反映了前轮、主销和前轴三者之
间在车架上的位置关系。
(1)主销后倾角
,主销后倾角是指主销轴线与地面垂直线在汽车纵向平面内的夹角,如图3.4。主销后倾的作用是在车轮偏转后会产生一回正力矩,矫正车轮的偏转。后倾角
,越大,车速越高,车轮偏转后自动回正能力越强。但回正力过大,将会引起前轮
00回正过猛,加速前轮摆振,并导致转向沉重。通常后倾角值应设定在1--3。
模型车通过增减黄色垫片的数量来改变主销后倾角:每侧有4片垫片,前2
00000后2,对应的后倾角为0;前1后3,后倾角为2--3;前0后4,后倾角为4--6。模型车转向灵活,可根据试验调试的结果,设定垫片按前1后3安装,将后倾角度
0设为3比较合适。
(2)主销内倾角
,主销内倾角是指主销在汽车的横向平面内向倾斜一个,即主销轴线与地面
,垂直线在汽车横向断面内的夹角,如图3.5。主销内倾角也有使车轮自动回正的
作用。当转向轮在外力作用下发生偏转时,由于主销内倾的原因,车轮连同整个汽
车的前部将被抬起一定高度;当外力消失后,车轮就会在重力作用下恢复到原来的
9
第四届全国大学生智能汽车邀请赛技术报告
中间位置。另外,主销内倾还会使主销轴线延长线与路面的交点到车轮中心平面的
距离减小,同时转向时路面作用在转向轮上的阻力力矩也会减小,从而可使转向操
纵轻便,同时也减小了由于路面不平而从转向轮输出的力反馈。但其值不宜过小,
即主销内倾角不宜过大,否则在转向时车轮主销偏转的过程中,轮胎与路面将产生
较大的滑动,从而增加轮胎与路面间的摩擦阻力,不仅会使转向变得沉重,还将加
0速轮胎的磨损。通常汽车主销内倾角不大于8。
图3.5 主销内倾角、前轮外倾角示意图
(3)前轮外倾角
通过车轮中心的汽车横向平面与车轮平面的交线与地面垂线之间的夹角α,
称为“前轮外倾角”,如图3.5所示。轮胎呈现“八”字形张开时称为“负外倾”,
而呈现“V”字形张开时称为“正外倾”。前轮外倾角一方面可以在汽车重载时减小
或消除主销与衬套,轮毂与轴承等处的装配间隙,使车轮接近垂直路面滚动而滑动,
同时减小转向阻力,使汽车转向轻便;另一方面还可以防止由于路面对车轮垂直反
作用力的轴向分力压向轮毂外端的轴承,减小轴承及其锁紧螺母的载荷,从而增加
0这些零件的使用寿命,提高汽车的安全性。一般前轮外倾角为1左右。
模型车提供了序号为EX-19的配件来调节前轮外倾角:当所采用的配件上无
00数字4时前轮外倾角为0,当所采用的配件上有数字4时前轮外倾角约为1。由于本模型车主要用于竞速,在设计中必然要尽可能减轻重量,所以其底盘承重不大,
0且前轮外倾角只两档可调,故设定为0即可,关键是前轮前束要与之相匹配。
(4)前轮前束
当车轮有了外倾角后,在滚动时就类似于圆锥滚动,从而导致两侧车轮向外
滚开。由于转向横拉杆和车桥的约束使车轮不可能向外滚开,车轮将在地面上出现
边滚边向内滑移的现象,从而增加了轮胎的磨损。在安装车轮时,为消除车轮外倾
10
第三章 机械系统设计说明 带来的这种不良后果,可以使汽车两前轮的中心面不平行,并使两轮前边缘距离R小于后边缘距离A,A-R之差称为“前轮前束”,如图3.6如示,一般前束值为1-12mm。像内八字样前端小后端大的称为“前束”,而像外八字一样后端小前端大的称为“后
束”或“负前束”。
图3.6 前轮前束示意图
模型车是由舵机带动左右横拉杆实现转向的。主销在垂直方向的位置确定
后,改变左右横拉杆的长度即可改变前轮前束的大小。左杆短,可调范围为
10.8-18.1mm;右杆长,可调范围为29.2-37.6mm,由上述原理可知,前轮前束须与前
轮外倾角相匹配,如前轮外倾角设定为0?,则前轮前束须为0mm或只有很小的前轮前束值。
11
第四届全国大学生智能汽车邀请赛技术报告 3.4
理想的转向模型,是指在轮胎不打滑时,忽略左右两侧轮胎由于受力不
均产生的变形,忽略轮胎受重力影响下的变形时车辆的的转向建模。在这种理
想的模型下,车体的转向半径可以计算得到。
图3.7 智能车转向示意图
如图3.7,假设智能车系统为理想的转向模型,且其重心位于其几何中心。
车轮满足转向原理,左右轮的轴线与后轮轴线这三条直线必然交于一点。
转向机构在车辆运行过程中有着非常重要的作用。合适的前桥和转向机
构可以保证在车辆直线行驶过程中不会跑偏,能保证车辆行驶的方向稳定性;
而在车辆转向时,合适的转向机构可以使车辆自行回到直线行驶状态,具有好
的回正性。正是由于这些原因,转向系统优化设计成为智能车设计中机械结构
部分的重点,直接关系到赛车能否顺利地完成比赛。在实际操作中,我们通过
理论计算的方案进行优化,然后做出实际结构以验证理论数据,并在实际调试
过程中不断改进。
在模型车制做过程中,赛车的转向是通过舵机带动左右横拉杆来实现的。
转向舵机的转动速度和功率是一定,要想加快转向机构响应的速度,唯一的办
法就是优化舵机的安装位置和其力矩延长杆的长度。由于功率是速度与力矩乘
积的函数,过分追求速度,必然要损失力矩,力矩太小也会造成转向迟钝,因
此设计时就要综合考虑转向机构响应速度与舵机力矩之间的关系,通过优化得
到一个最佳的转向效果。经过最后的实际的参数设计计算,最后得出一套可以
12
第三章 机械系统设计说明 稳定、高效工作的参数及机构。
如图3.8,我们最终设计的这套转向拉杆,我们综合考虑了速度与扭矩间
的关系,并根据模型车底盘的具体结构,简化了安装方式,实现了预期目标。
图3.8 转向连杆结构
3.5
模型车后轮采用RS-380SH 电机驱动,电机轴与后轮轴之间的传动比为 18:76(电机轴齿轮齿数为18,后轴传动齿数为76)。齿轮传动机构对车模的
驱动能力有很大的影响。齿轮传动部分安装位置的不恰当,会大大增加电机驱
动后轮的负载,会严重影响最终成绩。调整的原则是:两传动齿轮轴保持平行, 齿轮间的配合间隙要合适,过松容易打坏齿轮,过紧又会增加传动阻力,浪费
动力;传动部分要轻松、顺畅,不能有迟滞或周期性振动的现象。判断齿轮传
动是否良好的依据是,听一下电机带动后轮空转时的声音。声音刺耳响亮,说
明齿轮间的配合间隙过大,传动中有撞齿现象;声音闷而且有迟滞,则说明齿
轮间的配合间隙过小,或者两齿轮轴不平行,电机负载变大。调整好的齿轮传
动噪音很小,并且不会有碰撞类的杂音,后轮减速齿轮机构就基本上调整好了,
动力传递十分流畅。
13
第四届全国大学生智能汽车邀请赛技术报告 3.6
另外,在模型车的机械结构方面还有很多可以改进的地方,比如说车轮、
悬架、底盘、车身高度等。
模型车在高速的条件下(2.3m/s~3.5m/s),由于快速变化的加减速过程,使得模型车的轮胎与轮辋之间很容易发生相对位移,可能导致在加速时会损失
部分驱动力。在实验中调试表明,赛车在高速下每跑完一圈,轮胎与轮辋之间
通常会产生几个厘米的相对位移,严重影响了赛车的加速过程。为了解决这个
问题,我们在实际调试过程中对车轮进行了粘胎处理,可以有效地防止由于轮
胎与轮辋错位而引起的驱动力损失的情况。
此外,我们还对模型车的前后悬架弹簧的预紧力进行调节,选用不同弹
性系统的弹簧等方法进行了改进,并且对车身高度,以及底盘的形状和质量 、
后轮的轮距等,都进行了相应的改进和调整,均取得了不错效果。
14
本方案的电路设计采用模块化的设计思想。这种情况下可以有效地防
止因为某一种电路的损坏而使得整个PCB板子无法利用的结果,同时还可以有
的排列各个模块板子的位置,使得小车的重心更加的合适,更加的优化。 4.1
以MC9S12DP512为核心的单片机系统的硬件电路设计主要包括以下几
个部分:时钟电路、电源电路、复位电路、BDM接口[1]。其中各个部分的功能如下:
1、时钟电路给单片机提供一个外接的16MHz的石英晶振。
2、电源电路主要是给单片机提供5V电源。
3、复位电路在电压达到正常值时给单片机一个复位信号。
4、BDM接口让用户可以通过BDM头向单片机下载和调试程序。
如图4.1.1,本系统采用的是
的MC9S12系列单片机的时钟电路,通
过把一个16MHz的外部晶振接在单片机的外部晶振输入接口EXTAL和XTAL上,然后利用MC9S12DP512内部的压控振荡器和锁相环(PLL)把这个频率提高到32MHz,作为单片机工作的内部总线时钟。
图4.1.1 外部振荡电路
15
第四届全国大学生智能汽车邀请赛技术报告
图4.1.2是PLL模块的滤波电路,VDDPLL引脚由单片机内部提供2.5V电压。其中C24、C25和R2的值是根据晶振、REFDV寄存器和SYNR寄存器计算得出的。XFC实际上是压控振荡器(VCO)的电压控制端,通过锁相环电
路编程,以数字方式锁定VCO的控制端电压。如果不加如图的滤波器,或电容、
电阻的值取得不合适,VCO的控制端电压就会抖动,使整个系统工作不正常。
图4.1.2 PLL的滤波电路
MC9S12系列的单片机内部使用3V电压,I/O端口和外部供电电压为5V。如图4.1.3,L4、C31、C32和C34构成的滤波电路可以改善系统的电磁兼容性,
降低系统对电源的高频干扰。为了显示系统已经通电,在此加入指示灯电路,
电阻R10是限流电阻。
图4.1.3 电源电路
16
第四章 硬件电路设计说明
本系统直接采用一个0.1μF的电容提供低电平复位信号,而并没有采用
复杂的专用复位芯片。手动复位按钮在系统调试时作用很大。
BDM接口是接BDM调试工具,向MC9S12DP512单片机下载程序用的。它直接利用单片机所提供的专用引脚BKGD即可实现。
S12最小系统电路图如图4.1.4。
图4.1.4 S12最小系统电路图
17
第四届全国大学生智能汽车邀请赛技术报告
由于前期所绘制的主控电路接口较少,不适合传感器较多的光电组,所
以后期又作出相应修改,将单片机接口更多的接出,前后两代主控板如下图:
图4.1.5 一代S12最小系统板 图4.1.6 二代S12最小系统板
4.2
由于赛道具体信息还不知道,所以必须选择合适的路面信息检测传感器。
通过查阅相关资料,了解到目前常用的寻线技术有:光电寻线、磁诱导寻线和
摄像头寻线。光电寻线一般由多对红外收发管组成,通过检测接收到的反射光
强,判断黑白线。在这种方案中,一对收发管只能检测一个点的信息,精度有
限。但其优点是电路简单,处理方便。路面磁诱导与智能车辆的车载机器视觉
诱导相比,最大优点是完全不受光照变化的影响。但这种方式必须以车道中心
线上布设的离散磁道钉作为车道参考标记,这违背了比赛规则。摄像头寻线通
过图像采集,动态拾取路径信息,并对各种情况进行分析。它具有信息量大,
能耗低的优点,但对数据的处理相对复杂。通过对第一届比赛的研究,我们决
定还是从光电管入手。
最初确定方案为普通直流二极管单管收发,这种检测方法电路简单,数
据清晰,处理方便。但同时检测距离有限,无法提前识别跑道。
18
第四章 硬件电路设计说明
图4.2.1 直流光电单管反射检测电路
要提高速度并保证在入弯时不出弯道,就必须增加传感器的“视野”,以
便及时减速。
通过比较,发现市场上的半导体激光管有比较好的性能,它可以照射很
远的距离依然有很高的强度,根据激光特性,除了激光的入射光和反射光是最
强的以外,其他的所有散射光的强度都是相同的,在此情况下,实际测量发现
激光可以看到20cm以上的距离,对于赛车的前瞻性大有好处,可以适当把光
照调远,实现前瞻性循线控制。
由于临近发射管对接收管会有较大干扰,所以经过反复试验后我们决定
使用六路控制,每路控制两组传感器。从而可以大大降低其他发射管对接收管
的影响。原理图如下:
19
第四届全国大学生智能汽车邀请赛技术报告
图4.2.2 赛道检测电路原理图
图4.2.3 逻辑控制触发电路原理图
4.3
智能车虽以车为主体,但其任何行动完全由其电路控制。模型车通过自
身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制
其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。一旦电源
20
第四章 硬件电路设计说明 出现问题,各部分电路的功能将受到很大的影响。该设计中,s12用的是5V电源,速度传感器用的是5V电源,舵机的运行需要6V电源,驱动电机模块上用
的全桥驱动芯片用的是12V电源。考虑到竞赛规定的电源为镍镉蓄电池组,额
定电压为7.2V,实际充满电后电压则为8.2-8.5V,出于功耗和稳定性的考虑,
本系统采用了开关型电源,电源模块的主要部分如下所示:
图4.3.1电源模块结构 图4.3.2电源管理模块PCB图 4.4
比赛最终比的是速度,需要模型车能够以尽量快的速度跑完全程,有了
好的算法之后,需要有驱动电路对电机进行控制。本系统使用的电机驱动板为
一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由四支
N沟道功率MOSFET管组成,由此电路,通过设置S12输出的PWM波的占空比可以达到控制电机正反转的效果。当S12输出的占空比为50%时,电机不转,当占空比50%时,电机正转,小于50%则反转。原理图如下:
图4.4 电机驱动电路PCB
21
第四届全国大学生智能汽车邀请赛技术报告 4.5
串行通讯接口电路的作用是使得ECU可以与PC机的RS-232串行接口连接并进行通讯。RS-232是异步串行通信中应用最早,也是目前应用最为广泛
的标准串行总线接口之一,它有多个版本,其中应用最广的是修订版C,即 RS-232C。RS-232原是基于公用电话网的一种串行通信标准,推荐的最大电缆
长度为15m(50英尺),即传输距离一般不超过15m。
图4.5串口通讯电路
4.6
经过多次试验,初期速度传感器选用了光电对射型的GK122,使用光电码盘进行速度检测。这种检测方式安装简单,电路轻便,使用电源为5V,非常适合在类似的模型上使用,但缺点为检测精度不高,稳定性不好,容易出现丢
齿漏齿现象,大大影响了整个系统的调速平滑性:
22
第四章 硬件电路设计说明
图4.6.1 光电对射型速度传感器
后期经过修改测试,为了提高检测精度,最后确定为使用精度较高的光
电编码器,光电编码器使用5V-24V电源,输出5%-85%VCC的方波信号。这种测试方式电路较为复杂,需要增加外围电路,但相对于其带来的,测量精度
的提高和测量稳定性的提高而言,终究利大于弊:
图4.6.2 光电编码器
23
第四届全国大学生智能汽车邀请赛技术报告 4.7
由于赛道情况各有不同,弯道、直道数量个不相等,所以必须能在不改
变程序的前提下进行参数的调试,调试的方式界面可以有数字按键,拨盘开关
等,经过多种情况考虑,我们最后选择了拨盘开关,由开关分别进行参数选择
和速度控制。
图4.6.2 拨码开关
24
5.1
程序主要用到S12芯片中的PWM模块,ECT模块、I/O模块以及SCI模块等模块化设计。PWM模块主要用来控制舵机和电机的运转;ECT模块主要是用在了测速模块和数据采集,捕捉中断并计算瞬时速度;I/O模块主要是用来分配给按键和激光管的触发和输入;SCI模块主要用在无线串口传送模块。
总体流程图如下所示:
图5.1 主程序运行流程图
25
第四届全国大学生智能汽车邀请赛技术报告
5.2
我们的智能车利用了一字形排布的传感器来探测道路。通过精心的调节
和试验,将传感器的位置调节到了一种中间密两边稀的状态。在这种情况下,
小车能过比较良好的检测到未来的信息。通过调整赛车的转向角,可以调整小
车对黑线的水平偏移量。转向角越大,水平偏移速度越大。所以,调整小车转
向角可以看成是调整小车水平偏移量与水平偏移速度的映射。
控制器设置了快速的控制周期,在每个运算周期内,控制器即时地得到
智能车车速以及传感器采样来的道路信号,经过控制算法的计算后,控制单元
输出相应的前轮控制转角以及电机占空比的值,其输出值再经过函数映射关系
转换为PWM脉宽信号传至前轮舵机以及驱动电机,从而实现一个周期的控制。
5.3
图5.2 PID控制器工作原理
PID控制策略其结构简单,稳定性好,可靠性高,并且易于实现。其缺
点在于控制器的参数整定相当繁琐,需要很强的工程经验。相对于其他的控制
方式,在成熟性和可操作性上都有着很大的优势。所以最后我们选择了PID的
控制方式。
在小车跑动中,因为不需要考虑小车之前走过的路线,所以,我们舍弃
了I控制,将小车舵机的PID控制简化成PD控制。
本方案中舵机转角控制采用位置式的PD控制,速度闭环控制采用了增量式PID控制。在本方案中,使用试凑法来确定控制器的比例、积分和微分参
数。
试凑法是通过闭环试验,观察系统响应曲线,根据各控制参数对系统响
26
第五章 软件设计说明
应的大致影响,反复试凑参数,以达到满意的响应,最后确定PID控制参数。
试凑不是盲目的,而是在控制理论指导下进行的。
在控制理论中已获得如下定性知识:
比例调节(P)作用:是按比例反应系统的偏差,系统一旦出现了偏差,
比例调节立即产生调节作用用以减少偏差。比例作用大,可以加快调节,减少
误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。
积分调节(I)作用:是使系统消除稳态误差,提高无差度。因为有误差,
积分调节就进行,直至无差,积分调节停止,积分调节输出一常值。积分作用
的强弱取决与积分时间常数Ti,Ti越小,积分作用就越强。反之Ti大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两
种调节规律结合,组成PI调节器或PID调节器。
微分调节(D)作用:微分作用反映系统偏差信号的变化率,具有预见
性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成
之前,已被微分调节作用消除。因此,可以改善系统的动态性能。在微分时间
选择合适情况下,可以减少超调,减少调节时间。微分作用对噪声干扰有放大
作用,因此过强的加微分调节,对系统抗干扰不利。此外,微分反应的是变化
率,而当输入没有变化时,微分作用输出为零。微分作用不能单独使用,需要
与另外两种调节规律相结合,组成PD或PID控制器。
试凑法的具体实施过程为:
1、整定比例部分,将比例系数由小变大,并观察相应的系统响应,直至
得到反应快、超调小的响应曲线。如果系统静差小到允许范围,响应曲线已属
满意,那么只需比例控制即可,由此确定比例系数。
2、如果在比例控制基础上系统静差不能满足设计要求,则加入积分环节,
Ti整定时首先置积分时间为很大值,并将经第一步整定得到的比例系数略微缩
小(如缩小为原值的0.8),然后减小积分时间,使得在保持系统良好动态的情
况下,静差得到消除,在此过程中,可根据响应曲线的好坏反复改变比例系数
和积分时间,以期得到满意的控制过程,得到整定参数。
3、若使用比例积分控制消除了静差,但动态过程经反复调整仍不能满意,
Td则可加微分环节,构成比例、积分、微分控制器。在整定时,先置微分时间
27
第四届全国大学生智能汽车邀请赛技术报告
Td为零,在第二步整定基础上增大,同样地相应改变比例系数和微分时间,逐步试凑以获得满意的调节效果和控制参数。 5.4
在路径采集回来的信息中,我们采用了数组存储数据的方式,利用已采
集到的道路信息,来通过程序设计来预判下面的赛道信息。例如当我们连续检
测到10次直道信息是我们既可以认为小车现在正在行驶在长直道上,因此可以
加速至高速状态。当小车连续在传感器左部分检测到黑线,则可以认为小车在
左弯道的位置。这样,我们就可以检测判断到现在小车所处的位置,并做出相
应的程序响应。
在长直道进入弯道时候,由于长直道的速度较快,在入弯的时候有冲出
赛道的危险性,所以在赛道末段我们应当进行快速制动,将速度值降到期望过
弯速度。在程序中我们利用了记忆标志位的方式,在突然看到弯道后给电机一
个较小的期望速度值,这样在PID调节的作用下,电机将很快的减速下来,以达到入弯制动的效果。
在速度检测的控制部分,我们是利用光电编码盘采集会来的脉冲数字进
行计算,将其转换成为与后轮圈数相对应的一个参数值,根据此参数值我们能
够很清晰的看出来现在这个状态时,电机的转速为多少,从而可以很快地换算
出当前时刻的速度情况。
5.5 PID
由于光电组智能车传感器数量少,造成了识别路径时得到的结果分辨率
很低,远远低于回控量的分辨率(舵机分辨率在几百分之一);故在使用传统
PID进行控制时会出现一些问题。又因为智能车跑道情况复杂,使用传统PID
很难达到需要的智能化程度。
主要问题如下:
由于传感器分辨率低,采样速率快,舵机PID控制中的D项很难得到真
实可信的值,使得车在偏离跑道后容易在跑道两边画龙。
使用传统的PID控制时很难对车速进行合理的控制,使得车速和舵机转
28
第五章 软件设计说明 角经常不匹配。如在弯道中难以找到合适的出弯加速点,只能靠经验,不合理。
Kp,Kd两项的调节很难适应整条跑道。有可能造成直线效果较好,弯
道转向不足,或弯道效果好,直线摆动过大的问题。
使用模糊PID控制和一些辅助算法后以上三点问题被有效的解决了。
(1)传感器数据处理
在路径识别过程中,我们希望得到黑线相对于传感器的位置和黑线相对
与传感器的运动速度u两个量,下面说明如何处理得到这两个量。
由于光电管数量少,造成传感器返回值离散度过大,不适合进行回控。
故应加快采样速率(2KHz),进行过采样,然后进行一阶迭代滤波:
poslong = (poslong * 40 + posold * 1000)/41;
其中poslong为滤波后的值,poslong为滤波前的值。
效果参看下图(横轴为时间轴,单位:ms)
得到滤波后的poslong后我们就可以计算黑线扫过传感器的速度了,但
通过试验我们发现使用poslong计算得到的黑线扫过速度依然波动过大,故再
对其进行一次滤波得到err1,两次滤波得到err2,分别用于下文中对舵机和车
速的模糊控制。
29
第四届全国大学生智能汽车邀请赛技术报告
通过模拟黑线在传感器上的几种运动方式可以得到err1和err2的范围。
黑线扫过传感器速度最慢时,只扫过一个光电管的情况:
黑线以较快速度扫过所有光电管时:
由以上两图可得到:err1应取900-3500为有效范围,err2应取600-3000为有效范围。至此我们得到了poslong, err1, err2三个有价值的量。
(2)模糊化
使用三角形隶属函数及最大值法对poslong, err1, err2 进行模糊化,通过
30
第五章 软件设计说明 隶属函数可以计算出三个变量分别属于NB,NS,ZO,PS,PB的范围。
这样就得到了POS, ERR1, ERR2三个语言变量。
31
第四届全国大学生智能汽车邀请赛技术报告
PID
为了得到舵机PID参数以及期望车速,首先,我们需要根据上面计算出
来的POS, ERR1, ERR2三个值建立一个2个输入,1个输出的模糊控制规则表。
舵机PID和期望车速的规则表分别如下:
对舵机PID的模糊控制规则表包括两个部分,一是对参数Kp的模糊控制规则表,二是对参数Kd的模糊控制规则表。
表格分别如下所示:
对参数Kp的模糊控制规则表:
1 2 3 4 5 POKS p err1
1
1 PB PS ZNS N
O B
2 PS ZNS NNS
O B
3 ZNS NNS Z
O B O
4 NS NNS ZPS
B O
5 NNS ZPS PB
B O
注:PB,PS,ZO,NS,NB分别为加乘量,在实际中按需要自行设定。
其在分别在程序中对应的是数组
angle_k[0],angle_k[1],angle_k[2],angle_k[3],angle_k[4].
对参数Kd的模糊控制规则表
32
第五章 软件设计说明
1 2 3 4 5
POKS d err1
1 1 1515151515
0 0 0 0 0 2 121288 1212
7 7 7 7 3 42 0 0 0 42 4 121288 1212
7 7 7 7 5 1414141414
0 0 0 0 0 对期望车速的模糊控制规则表:
POERR 1 2 3 4 5 S 2
1 SS SS SS SS SS 2 S S H M S 3 M H HH H M 4 S M H S S 5 SS SS SS SS SS 注:SS,S,M,H,HH分别为设定的五档速度,在实际中按需要自行
设定。其分别在程序中对应的是数组speed_k[0], speed_k[1], speed_k[2],
speed_k[3], speed_k[4].
实际运行中,只要针对于不同的POS, ERR1, ERR2,我们就可以找到不
33
第四届全国大学生智能汽车邀请赛技术报告
同的Kp,Kd和期望车速与之对应。
5.6
此次智能车大赛的软件开发平台为Metroworks 公司的Code Warrior 4.6开发软件。其使用界面如图5.3 所示:
图5.3 CodeWarrior 程序编写面板
CodeWarrior 的功能非常强大,可用于绝大部分单片机、嵌入式系统的
开发。用户可在新建工程时将芯片的类库添加到集成环境开发环境中,工程文
件一旦生成就是一个最小系统,用户无需再进行繁琐的初始化操作,就能直接
在工程中添加所需的程序代码。如图5.4 所示,利用CodeWarrior 4.6和北理
BFTC实验室开发的BDM ,用户可以进行一系列的调试工作,如监视寄存器
状态、修改PC 指针、设置断点等,这样能快速地帮助我们找到软件或硬件的
问题。
34
第五章 软件设计说明
图 5.4 Hiwave 下载调试界面
图5.5下载用BDM
在源程序编译、连接通过后,就可以进行程序下载了。下载前,先将单
片机上已经存在的程序擦除,然后点击Load,将bin 文件夹下生成的后缀为.abs的文件打开,就可以完成下载。
同时,我们也采用虚拟仪器的实现方法,利用图形开发语言LabVIEW编写了一套本系统相应的上位机通信界面,来实现了在上位机通过串口无线通信
的方式实事监控小车的跑动情况,并实现了在线调节参数的功能。
35
第四届全国大学生智能汽车邀请赛技术报告
图5.6无线串口调试工具
在此监控界面中,我们可以实时地看到车灯,舵机转向,期望速度和实
际速度等参数。通过反馈回来的这些参数,我们可以更加方便地进行试凑法PID参数整定,大大的提高了我们的调试效率。
图5.7 LabVIEW串口控制程序前面板
36
车模基本尺寸
车长:300mm
车宽:240mm
车高:150mm
车重:1245g
电路功耗及电容总容量
电路功耗:约25W
电容总容量:1800uF
传感器及伺服电机数量
光电传感器:10个
测速传感器:1个
总计传感器:11个
无额外的伺服电机
赛道信息检测精度、频率
赛道检测精度:2mm
赛道检测周期:2.5ms
37
7.1
设计制作过程当中,通过小组成员的努力思考与探索,同时结合韩国以
往比赛中的优点,我们在以下几个方面引入了自己的设计特色:
1、鉴于路径识别模块的性能对整个系统运行的重要作用,本系统采用了
激光管的路径识别方案,大大提高了系统识别路径的精度。
2、在本系统中,巧妙地使用迭代滤波和逻辑滤波,减少了检测误差,同
时提高了小车运动的精度。
3、另外制作了用于调试的控制器,该控制器用于赛车调试过程中的参数
修正与显示,正式比赛时并不存在于系统中。这样在遵守规则的情况下,大大
方便了调试过程。
4、在机械上精心设计,加高了舵机的位置,提高了舵机地响应时间,实
现了模块化的电路设计,在重心的调节上更加方便。
5、在连接件上,使用了机械加工零件,提高了安装精度,使得小车安装
简洁、美观。
7.2
尽管我们作了很大的努力,但是由于时间紧迫以及缺乏经验等原因,本
系统仍然存在着一些问题,主要有以下几点:
1、比赛规则对改装后的赛车的尺寸作了严格要求,在满足要求安装路径
识别模块时,其视场宽度和前瞻距离都比预期减小,受到了限制。
2、由于车辆的模块化电路管理,在小车上出现连线过多,电路不够整洁
的情况。
3、车头的传感器重心位置控制不当,使得小车在运动过程中易出现抖动,
大大影响了小车的速度。
38
第七章 总 结 7.3
在条件允许的情况下,本系统可以做以下几个方面的改进: 1、研究更加可靠的激光管电路,使路径识别模块的前瞻距离尽可能地增大。 2、在画PCB板时,应当注意利用插针式连接,有效地减少电路之间的连线,使
电路整洁。
39
[1]邵贝贝?单片机嵌入式应用的在线开发方法?北京:清华大学出版社,2004 [2]杨国田,白焰?摩托罗拉68HC12系列微控制器原理、应用与开发技术?北京:
中国电力出版社,2003
[3]童诗白?模拟电子技术基础?北京:高等教育出版社,2001 [4]阎石?数字电子技术基础?北京:高等教育出版社,1998
[5]张宇河,董宁?计算机控制系统?北京:北京理工大学出版社,2002 [6]陶永华,尹怡欣,葛芦生?新型PID控制及其应用?北京:机械工业出版社,
1998
[7]谭浩强?C程序设计?北京:清华大学出版社,2001
[8]侯国屏,王坤,叶齐鑫?LabVIEW7.1编程与虚拟仪器设计?北京:清华大学出
版社,2005
[9]HCS12 Serial Communication Interface(SCI) Block Guide V02.05S12SCIV2/D
[10]Metrowerks?IDE Help for Code Warrior Plug-in for Motorola?Metrowerks
Semiconductor, Inc.,2005
[11] 朱卫华. 一种微机与单片机无线串行通信的设计方法. [D] 南华大 学,2002 年8 月.
[12] 周斌,李立国,黄开胜. 智能车光电传感器布局对路径识别的影响研究. 电子产品世界,2006.5
[13] 卓晴,黄开胜,邵贝贝,学做智能车[M].北京:北京航天航空出版社,2007 [14] 张幽彤,陈宝江.汽车电子技术原理及应用[M].北京:北京理工大学出版社,2006 [15] 张伟等.Protel DXP高级应用[M].北京. 人民邮电出版社.2002
40
首先要感谢学校教务处的各位老师对我们的大力支持,以及指导老师张
幽彤和冬雷对我们的悉心指导,在本方案的设计过程中,老师经常询问进度和
鼓励我们,使我们有信心面对各种困难和挑战,顺利的完成了对模型车的制作
和调试。特别是张幽彤在我们调试智能车时,经常来实验室关心我们,询问我
们的困难,帮我们找工厂加工机械零件,使得我们的进度大大加快。
同时还要感谢在此过程中帮助过我们的老师。在此谨向各位老师致以崇
高的敬意和衷心的感谢。
此外还要感谢在设计和调试期间得到的友队和师兄们的支持,是你们的
支持使我们能够顺利完成本次竞赛。
最后要感谢本次大赛的各位评委,能够在百忙之中抽出宝贵的时间,对
我们的模型车方案进行评定并提出非常宝贵的改进建议。
41
A
#include
/* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp512"
#define TIME_INTER 3 //1000个ms=1s
unsigned int Get_pulse=0;
//电机参数
const float MOTKP=0.05263;
const float MOTKI=0.05263;
const float MOTKD=0.005263;
signed int MotPWM=1000;
signed int DD;
//定义参数
signed int n1;
int kb,kc,kr=0;
///*转向PID控制参数*////
int U=0,E3=0,E2=0,m=108,E1=0;
unsigned int steermid=2501,steermax=2810,steermin=2190,xxmax,xxmin,maxbig,minbig;
//2190
unsigned int U1=2400,KP=0,KI=7,U2=0;
static unsigned char N1=14,i=0;
//////////////////Kp变化//////////////////// signed int datachooseflag=0; //选择策略表
signed int P6=150;//145;//13;
signed int P5=135;//12;
signed int P4=120;//11;
signed int P3=110;//10;
signed int P2=105;//9;
XLII
附录 A
signed int P1=95;//8;
signed int P0=85;//7;
////////////////Kd变化/////////////////////
signed int D7=80;
signed int D6=70;
signed int D5=60;
signed int D4=50;
signed int D3=40;
signed int D2=15;
signed int D1=10;
signed int D0=0;
/
///*速度PID控制参数*////////
signed int e2=0,e3=0,n2=0,e1=0;
float u=0,Kp=0,Kd=0;
static unsigned char z=9,Flag=0,flag1=0,flag2=0;
signed int LapFlg1=0;
signed int LapFlg2=0;
signed int LapNum=0,delay1=0;
signed int LNum=0;
int FLAG=0;
int LFlg=0;
///////////////速度参数////////////////////////////
signed int V6=120;
signed int V5=130;
signed int V4=100;
signed int V3=85;
signed int V2=70;
signed int V1=60;
XLIII
第四届全国大学生智能汽车邀请赛技术报告
signed int V0=50;
igned int N11=14,Sensor=0;
signed long err1=0,err2=0,err11=0,err22=0,c4;
unsigned long poslong=0,poslong1=0,C,delay2=0,ting=0;
signed int POS=0,Sensorlast=0,M,B,ERR1=0,ERR2=0;
/////////////////////记录//////////////////
signed int
j1,j2=0,flagarm,j3=0,j4=0,j5=0,j6=0,j8=0,j12=0,j13=0,stopflag=0,tingflag=0;//delay3=0;
float j11=1,j10=0.0012;//j14=30;//0.0012;
unsigned int delay3=0,cnt1=0,miao=30,k1=0,k2=0;
////////*速度PID控制*//////////
void PID_Speed(void)
{
e3=e2;
e2=e1;
e1=n1*j11-n2; //1.9
DD=(800*DD+200*(signed int)(DD*(float)(e3-2*e2+e1)))/1000; u=(MOTKP*(float)(e1-e2)+MOTKI*e1*2.7+DD); //1.3 1.8 2.7
if(u<1&&u>0)
{u=1;} else if(u<0&&u>-1)
{u=-1;}
if(u>25) {u=25;} else if(u<-25) {u=-25;} //25
MotPWM=MotPWM+u;
if(MotPWM>1999) {MotPWM=1999;}//1620
if(MotPWM<1) {MotPWM=1;} //900
PWMDTY45=MotPWM;
}
XLIV
附录 A
void change(void)
{
k1=PORTE&0x0F;
k2=PORTE&0xF0;
///////////////速度////////////////////////////
if(k1==0x01)
{ ////弯道快
V6=125;
V5=140;
V4=100;
V3=75;
V2=70;
V1=55;
V0=50;
}
if(k1==0x02)
{ ////比较慢
V6=125;
V5=100;
V4=90;
V3=65;
V2=60;
V1=55;
V0=50;
}
if(k1==0x03)
{ ////比较危险
V6=150;
XLV
第四届全国大学生智能汽车邀请赛技术报告
V5=170;
V4=150;
V3=70;
V2=60;
V1=55;
V0=50;
}
if(k1==0x04)
{ ////比较平稳
V6=130;
V5=135;
V4=120;
V3=80;
V2=60;
V1=55;
V0=50;
}
if(k1==0x05)
{ ////比较平稳 +
V6=135;
V5=140;
V4=120;
V3=80;
V2=60;
V1=55;
V0=50;
}
if(k1==0x06)
{ ////比较平稳 ++
XLVI
附录 A
V6=130;
V5=130;
V4=110;
V3=80;
V2=70;
V1=55;
V0=50;
}
if(k1==0x07)
{ ////速度比较平均
V6=130;
V5=130;
V4=110;
V3=90;
V2=80;
V1=75;
V0=70;
}
if(k1==0x08)
{ ////速度比较平均稍加
V6=135;
V5=135;
V4=115;
V3=95;
V2=85;
V1=80;
V0=75;
}
if(k1==0x09)
XLVII
第四届全国大学生智能汽车邀请赛技术报告
{ ////速度比较平均加很多
V6=135;
V5=145;
V4=125;
V3=105;
V2=85;
V1=80;
V0=75;
}
//////////////////////p和D////////////////////////
if(k2==0x01) ////Pd稍-
{
//////////////////Kp变化////////////////////
signed int P6=145;//145;//13;
signed int P5=130;//12;
signed int P4=115;//11;
signed int P3=110;//10;
signed int P2=105;//9;
signed int P1=95;//8;
signed int P0=85;//7;
////////////////Kd变化///////////////////// signed int D7=80;
signed int D6=70;
signed int D5=50;
signed int D4=40;
signed int D3=30;
signed int D2=15; //20;//30;
signed int D1=10; //20;
signed int D0=0;
}
XLVIII
附录 A
if(k2==0x02) ////Pd稍+
{
//////////////////Kp变化//////////////////// signed int P6=140;//145;//13;
signed int P5=130;//12;
signed int P4=120;//11;
signed int P3=110;//10;
signed int P2=105;//9;
signed int P1=95;//8;
signed int P0=85;//7;
////////////////Kd变化///////////////////// signed int D7=80;
signed int D6=70;
signed int D5=50;
signed int D4=40;
signed int D3=30;
signed int D2=15; //20;//30;
signed int D1=10; //20;
signed int D0=0;
}
if(k2==0x03) ////Pd稍-
{
//////////////////Kp变化//////////////////// signed int P6=145;//145;//13;
signed int P5=130;//12;
signed int P4=115;//11;
signed int P3=105;//10;
signed int P2=95;//9;
signed int P1=80;//8;
signed int P0=70;//7;
XLIX
第四届全国大学生智能汽车邀请赛技术报告
////////////////Kd变化///////////////////// signed int D7=80;
signed int D6=70;
signed int D5=50;
signed int D4=35;
signed int D3=30;
signed int D2=15; //20;//30;
signed int D1=10; //20;
signed int D0=0;
}
if(k2==0x04) ////Pd稍-
{
//////////////////Kp变化//////////////////// signed int P6=140;//145;//13;
signed int P5=130;//12;
signed int P4=115;//11;
signed int P3=105;//10;
signed int P2=95;//9;
signed int P1=85;//8;
signed int P0=75;//7;
////////////////Kd变化///////////////////// signed int D7=80;
signed int D6=70;
signed int D5=50;
signed int D4=30;
signed int D3=20;
signed int D2=15; //20;//30;
signed int D1=10; //20;
signed int D0=0;
}
L
附录 A
if(k2==0x05) ////Pd稍-
{
//////////////////Kp变化//////////////////// signed int P6=130;//145;//13;
signed int P5=120;//12;
signed int P4=115;//11;
signed int P3=105;//10;
signed int P2=95;//9;
signed int P1=85;//8;
signed int P0=80;//7;
////////////////Kd变化///////////////////// signed int D7=80;
signed int D6=70;
signed int D5=50;
signed int D4=35;
signed int D3=25;
signed int D2=15; //20;//30;
signed int D1=10; //20;
signed int D0=0;
}
if((k2&&0x08)==0x08)
{
datachooseflag=1;
PORTA_BIT4=1;
}
////////////////////////起跑线秒数///////////////////////
if(PTM==0x01)
{ ////9s
miao=9;
LI
第四届全国大学生智能汽车邀请赛技术报告
}
if(PTM==0x02)
{ ////9.5s
miao=9.5;
}
if(PTM==0x03)
{ ///10s
miao=10;
}
if(PTM==0x04)
{ ////10.5
miao=10.5;
}
if(PTM==0x05)
{ ////10.5
miao=11;
}
if(PTM==0x06)
{ ////10.5
miao=11.5;
}
if(PTM==0x07)
{ ////10.5
miao=12;
}
if(PTM==0x08)
{ ////10.5
miao=12.5;
}
if(PTM==0x09)
LII
附录 A
{ ////10.5
miao=13;
}
if(PTM==0x0a)
{ ////10.5
miao=13.5;
}
if(PTM==0x0b)
{ ////10.5
miao=14;
}
if(PTM==0x0c)
{ ////10.5
miao=14.5;
}
if(PTM==0x0d)
{ ////10.5
miao=15;
}
if(PTM==0x0e)
{ ////10.5
miao=15.5;
}
if(PTM==0x0f)
{ ////10.5
miao=16;
}
if(PTM==0x10)
{ ////10.5
miao=16.5;
}
if(PTM==0x11)
LIII
第四届全国大学生智能汽车邀请赛技术报告
{ ////10.5
miao=17;
}
if(PTM==0x12)
{ ////10.5
miao=17.5;
}
if(PTM==0x13)
{ ////10.5
miao=18;
}
if(PTM==0x14)
{ ////10.5
miao=18.5;
}
if(PTM==0x15)
{ ////10.5
miao=19;
}
if(PTM==0x16)
{ ////10.5
miao=19.5;
}
if(PTM==0x17)
{ ////10.5
miao=20;
}
}
void startline(void)
{
kc=~kc;
LIV
附录 A
kb=~kb;
if( ((kc & 0x06)==0x06||(kc & 0x0c)==0x0c)
&& ((kc & 0x60)!=0x00||((kb & 0x01)!=0x00||(kc&0x80)!=0x00))
&& ((kc & 0x30)!=0x30&&(kb & 0x03)!=0x03) )
{
LapFlg1=1;
}
if(
((kb & 0x18)==0x18||(kb & 0x0c)==0x0c)
&& ((kc & 0x60)!=0x00||(kb & 0x01)!=0x00||(kc&0x80)!=0x00)
&& ((kc & 0x30)!=0x30&&(kb & 0x03)!=0x03) )
{
LapFlg2=1;
}
////////*转向PID控制*//////////
void PID_Steer(void)
{
U1=steermid+U;//+U;
if(U1steermax)
{U1=steermax;}
Sensorlast=Sensor;
PWMDTY23=U1;
}
/////////////////////////////////////////////////////////////////////////// void Init(void)
{
DDRT=0x00;
DDRA=0xfe;
LV
第四届全国大学生智能汽车邀请赛技术报告
DDRE=0xfe;
DDRK=0xc0; //A口全为输出
DDRB=0x00; //B口
PUCR=0x12; //A、B口具有内部上拉电阻
/*PORTA_BIT7=1;
PORTA_BIT6=1;*/
DDRJ=0xFF;
PTJ=0x03;
DDRS=0x00;
PTS=0x00;
DDRM=0x00;
PTM=0X00;
INTCR=0;
n1=5;
PWMPOL = 0xFF;
PWMCLK = 0x2A;
PWMPRCLK = 0x11;
PWMCAE = 0x00;
PWMSCLA = 0x01;
PWMSCLB = 0x05;
PWMCTL = 0xF0;
PWMPER23=16000; //通道3设定周期值16000//pp3输出
PWMDTY23=steermid; //通道3设定脉宽值1335
PWMPER45=2000; //通道1设定周期值100
PWMDTY45=1000; //通道1设定脉宽值70
PWME=0x2A;//PWME=0x0A; //通道1PWM使能
//通道3PWM使能 }
/////////////////////////////ect-init/////////////////////////////////////////////////////
void ect_init(void)
{
LVI
附录 A
TCTL4 = 0X20; // TCTL4 = 0X02; //下降沿捕捉脉冲
PACTL = 0x40; //PBCTL = 0x40; //级联两个8位累加器(PAC0和PAC1)
ICPAR = 0XC0;// ICPAR = 0X03; //使能累加器
PACN32 = 0X0000;
MCCTL = MCCTL&0Xfb; //模数计数器禁止运行
MCCTL = 0Xe3; //允许中断,模数计数方式
//返回时重新加载所用的常数,分频常数为16
MCCTL = MCCTL|0X04; //模数计数器使能
MCCNT = 1000; //2000; //(1/32M)*16*2000= 1ms
MCCTL = MCCTL|0X08 ; //把模数常数寄存器的值加载到模数计数器FLMC;
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void MDC(void)
{
static unsigned int number_count;
DisableInterrupts;
MCFLG = 0x80;
number_count ++;
if( number_count==TIME_INTER) //1秒取一次
{
number_count=0;
Get_pulse = PACN32;
PACN32 =0x0000;
j1=Get_pulse;
n2=j1*95/10;
}
Flag=1;
j12++;
if(j12>3000) j12=3000;
if(j8==1)
{
LVII
第四届全国大学生智能汽车邀请赛技术报告
delay2++;
if(delay2>=2000*miao) //40000
{
j8=0;
delay2=0;
}
j6=0;
}
else startline();
if(LFlg==1)
{
delay1++;
if(delay1>=500)
{
LFlg=0;
delay1=0;
}
}
else
{
if(j6>5)
{
j8=1;
switch(LapNum)
{
case 0: LFlg=1; LapNum=1;break;
case 1: LFlg=1; LapNum=2;break;
case 2: LFlg=1; LapNum=3;break;
case 3: LFlg=1; LapNum=4;break;
}
}
}
LVIII
附录 A
if(stopflag==1) {
stopflag++;
if(stopflag>3000) stopflag=3000;
}
kb=PORTK;kc=PORTB;
kb=PORTK&0x3f;kc=PORTB&0xff;
N11=N1;
if(kc==0xf7&&kb==0x3f){N1=7; }
if(kc==0xe7&&kb==0x3f){N1=8;}
if(kc==0xef&&kb==0x3f){N1=9;}
if(kc==0xcf&&kb==0x3f){N1=10; }
if(kc==0xdf&&kb==0x3f){N1=11; }
if(kc==0x9f&&kb==0x3f){N1=12; }
if(kc==0xbf&&kb==0x3f){N1=13; }
if(kc==0x3f&&kb==0x3f){N1=14; }
if(kc==0x7f&&kb==0x3f){N1=15; }
if(kb==0x3e&&kc==0x7f){N1=16; }
if(kb==0x3e&&kc==0xff){N1=17; }
if(kb==0x3c&&kc==0xff){N1=18; }
if(kb==0x3d&&kc==0xff){N1=19; }
if(kb==0x39&&kc==0xff){ N1=20;}
if(kb==0x3b&&kc==0xff){ N1=21; }
if(kb==0x33&&kc==0xff){ N1=22; }
if(kb==0x37&&kc==0xff){ N1=23; }
if(kb==0x27&&kc==0xff){ N1=24; }
if(kb==0x2f&&kc==0xff){ N1=25; }
if(kb==0x0f&&kc==0xff){ N1=26; }
if(kb==0x1f&&kc==0xff){ N1=27; }
if(abs(N11-N1)>=10)
{
N1=N11;
}
LIX
第四届全国大学生智能汽车邀请赛技术报告
Sensor=N1-14;
C=N1*1000;
poslong1=poslong;
poslong=(poslong*10+C)/11;
M=poslong-poslong1;
B=M*100;
err1=(err1*20+B)/21;
err2=(err2*10+err1)/11;// err2=(err2*20+err1)/21;
if(err1<=-2420) err11=err1+2420;
else if(err1>=2420) err11=err1-2420;
else err11=0;
if(err2<=-1950) err22=err2+1950;
else if(err2>=1950) err22=err2-1950;
else err22=0;
if(err11<1000&&err11>0) {
PORTA_BIT1=1;
} else if(err11<=2000&&err11>1000) {
PORTA_BIT1=1;
PORTA_BIT2=1; }
else if(err11<=3000&&err11>2000){
PORTA_BIT1=1;
PORTA_BIT2=1;
PORTA_BIT3=1;
} else if(err11<=4000&&err11>3000) {
PORTA_BIT1=1;
PORTA_BIT2=1;
PORTA_BIT3=1;
PORTA_BIT4=1;
} else if(err11<=5000&&err11>4000) {
PORTA_BIT1=1;
PORTA_BIT2=1;
PORTA_BIT3=1;
LX
附录 A
PORTA_BIT4=1;
PORTA_BIT5=1;
} else if(err11>5000&&err11<=6000) {
PORTA_BIT1=1;
PORTA_BIT2=1;
PORTA_BIT3=1;
PORTA_BIT4=1;
PORTA_BIT5=1;
PORTA_BIT6=1;
}
else if(err11>=6000) {
PORTA_BIT1=1;
PORTA_BIT2=1;
PORTA_BIT3=1;
PORTA_BIT4=1;
PORTA_BIT5=1;
PORTA_BIT6=1;
PORTA_BIT7=1;
}
else PORTA=PORTA&0x01;
if(Sensor<=-10) POS=0;
else if(Sensor>-10&&Sensor<=-6) POS=1;
else if(Sensor>-6&&Sensor<-2) POS=2;
else if(Sensor>=-2&&Sensor<=2) POS=3;
else if(Sensor>2&&Sensor<6) POS=4;
else if(Sensor>=6&&Sensor<10) POS=5;
else if(Sensor>=10) POS=6;
if(err11<-2500) ERR1=0;
else if((err11>=-2500)&&(err11<-1400)) ERR1=1;
LXI
第四届全国大学生智能汽车邀请赛技术报告
else if((err11>=-1400)&&(err11<-700)) ERR1=2;
else if((err11>=-700)&&(err11<0)) ERR1=3;
else if((err11>0)&&(err11<700)) ERR1=4;
else if((err11>=700)&&(err11<=1400)) ERR1=5;
else if((err11>1400)&&(err11<=2500)) ERR1=6;
else if(err11>2500) ERR1=7;
else if(err11==0) ERR1=8;
if(err22<-2100) ERR2=0;
else if((err22>=-2100)&&(err22<-1400)) ERR2=1;
else if((err22>=-1400)&&(err22<-700)) ERR2=2;
else if((err22>=-700)&&(err22<0)) ERR2=3;
else if((err22>0)&&(err2<700)) ERR2=4;
else if((err22>=700)&&(err22<=1400)) ERR2=5;
else if((err22>1400)&&(err2<=2100)) ERR2=6;
else if(err22>2100) ERR2=7;
else if(err22==0) ERR2=8;
///////////////////////////////选取Kp和Kd/////////////////////////////
if(datachooseflag==0)
{
switch(POS)
{
case 0: {
switch(ERR1)
{ case 0: Kp=P6; Kd=D7; break;
case 1: Kp=P6; Kd=D7; break;
case 2: Kp=P6; Kd=D6; break;
case 3: Kp=P6; Kd=D5; break;
case 4: Kp=P5; Kd=D5; break;
case 5: Kp=P5; Kd=D6; break;
case 6: Kp=P2; Kd=D7; break;
case 7: Kp=P0; Kd=D7; break;
case 8: Kp=P3; Kd=D0; break;
LXII
附录 A
}
} break;
case 1: {
switch(ERR1)
{
case 0: Kp=P6; Kd=D7; break;
case 1: Kp=P6; Kd=D6; break;
case 2: Kp=P5; Kd=D4; break;
case 3: Kp=P5; Kd=D2; break;
case 4: Kp=P3; Kd=D2; break;
case 5: Kp=P2; Kd=D4; break;
case 6: Kp=P1; Kd=D6; break;
case 7: Kp=P1; Kd=D7; break;
case 8: Kp=P2; Kd=D0; break;
}
} break;
case 2: {
switch(ERR1)
{
case 0: Kp=P6; Kd=D6; break; //DS
case 1: Kp=P5; Kd=D4; break; //DT
case 2: Kp=P5; Kd=D2; break;
case 3: Kp=P4; Kd=D0; break; //DT
case 4: Kp=P1; Kd=D0; break;//DS
case 5: Kp=P3; Kd=D2; break;
case 6: Kp=P2; Kd=D4; break;
case 7: Kp=P2; Kd=D6; break;
case 8: Kp=P1; Kd=D0; break;
}
}break;
case 3: {
switch(ERR1)
LXIII
第四届全国大学生智能汽车邀请赛技术报告
{
case 0: Kp=P5; Kd=D5; break;
case 1: Kp=P4; Kd=D3; break;
case 2: Kp=P1; Kd=D1; break;
case 3: Kp=P0; Kd=D0; break;
case 4: Kp=P0; Kd=D0; break;
case 5: Kp=P1; Kd=D1; break;
case 6: Kp=P4; Kd=D3; break;
case 7: Kp=P5; Kd=D5; break;
case 8: Kp=P0; Kd=D0; break;
}
} break;
case 4: {
switch(ERR1)
{
case 0: Kp=P2; Kd=D6; break;
case 1: Kp=P2; Kd=D4; break;
case 2: Kp=P3; Kd=D2; break;
case 3: Kp=P1; Kd=D0; break;
case 4: Kp=P4; Kd=D0; break;
case 5: Kp=P5; Kd=D2; break;
case 6: Kp=P5; Kd=D4; break;
case 7: Kp=P6; Kd=D6; break;
case 8: Kp=P1; Kd=D0; break;
}
} break;
case 5: {
switch(ERR1)
{
case 0: Kp=P1; Kd=D7; break;
case 1: Kp=P1; Kd=D6; break;
LXIV
附录 A
case 2: Kp=P2; Kd=D4; break;
case 3: Kp=P3; Kd=D2; break;
case 4: Kp=P5; Kd=D2; break;
case 5: Kp=P5; Kd=D4; break;
case 6: Kp=P6; Kd=D6; break;
case 7: Kp=P6; Kd=D7; break;
case 8: Kp=P2; Kd=D0; break;
}
} break;
case 6: {
switch(ERR1)
{
case 0: Kp=P0; Kd=D7; break;
case 1: Kp=P2; Kd=D7; break;
case 2: Kp=P5; Kd=D6; break;
case 3: Kp=P5; Kd=D5; break;
case 4: Kp=P6; Kd=D5; break;
case 5: Kp=P6; Kd=D6; break;
case 6: Kp=P6; Kd=D7; break;
case 7: Kp=P6; Kd=D7; break;
case 8: Kp=P3; Kd=D0; break;
}
} break;
}
}
else
{
switch(POS)
{
case 0: {
switch(ERR1)
{ case 0: Kp=P6; Kd=D7; break;
LXV
第四届全国大学生智能汽车邀请赛技术报告
case 1: Kp=P6; Kd=D7; break;
case 2: Kp=P5; Kd=D6; break;
case 3: Kp=P4; Kd=D6; break;
case 4: Kp=P5; Kd=D4; break;
case 5: Kp=P5; Kd=D3; break;
case 6: Kp=P4; Kd=D2; break;
case 7: Kp=P3; Kd=D2; break;
case 8: Kp=P2; Kd=D2; break;
}
} break;
case 1: {
switch(ERR1)
{
case 0: Kp=P6; Kd=D6; break;
case 1: Kp=P5; Kd=D6; break;
case 2: Kp=P4; Kd=D6; break;
case 3: Kp=P3; Kd=D5; break;
case 4: Kp=P4; Kd=D3; break;
case 5: Kp=P4; Kd=D2; break;
case 6: Kp=P3; Kd=D2; break;
case 7: Kp=P2; Kd=D1; break;
case 8: Kp=P1; Kd=D1; break;
}
} break;
case 2: {
switch(ERR1)
{
case 0: Kp=P6; Kd=D6; break; //DS
case 1: Kp=P4; Kd=D6; break; //DT
case 2: Kp=P3; Kd=D5; break;
case 3: Kp=P3; Kd=D5; break; //DT
case 4: Kp=P3; Kd=D2; break;//DS
LXVI
附录 A
case 5: Kp=P3; Kd=D2; break;
case 6: Kp=P2; Kd=D1; break;
case 7: Kp=P2; Kd=D0; break;
case 8: Kp=P1; Kd=D0; break;
}
}break;
case 3: {
switch(ERR1)
{
case 0: Kp=P4; Kd=D4; break;
case 1: Kp=P3; Kd=D4; break;
case 2: Kp=P3; Kd=D3; break;
case 3: Kp=P3; Kd=D2; break;
case 4: Kp=P2; Kd=D2; break;
case 5: Kp=P3; Kd=D2; break;
case 6: Kp=P3; Kd=D3; break;
case 7: Kp=P3; Kd=D4; break;
case 8: Kp=P4; Kd=D4; break;
}
} break;
case 4: {
switch(ERR1)
{
case 0: Kp=P2; Kd=D0; break;
case 1: Kp=P2; Kd=D0; break;
case 2: Kp=P2; Kd=D1; break;
case 3: Kp=P3; Kd=D2; break;
case 4: Kp=P3; Kd=D2; break;
case 5: Kp=P3; Kd=D5; break;
case 6: Kp=P3; Kd=D6; break;
case 7: Kp=P4; Kd=D6; break;
case 8: Kp=P4; Kd=D6; break;
LXVII
第四届全国大学生智能汽车邀请赛技术报告
}
} break;
case 5: {
switch(ERR1)
{
case 0: Kp=P1; Kd=D0; break;
case 1: Kp=P2; Kd=D1; break;
case 2: Kp=P3; Kd=D2; break;
case 3: Kp=P4; Kd=D2; break;
case 4: Kp=P4; Kd=D3; break;
case 5: Kp=P3; Kd=D5; break;
case 6: Kp=P4; Kd=D6; break;
case 7: Kp=P5; Kd=D6; break;
case 8: Kp=P5; Kd=D7; break;
}
} break;
case 6: {
switch(ERR1)
{
case 0: Kp=P2; Kd=D1; break;
case 1: Kp=P3; Kd=D2; break;
case 2: Kp=P4; Kd=D2; break;
case 3: Kp=P5; Kd=D3; break;
case 4: Kp=P5; Kd=D4; break;
case 5: Kp=P4; Kd=D6; break;
case 6: Kp=P5; Kd=D6; break;
case 7: Kp=P6; Kd=D7; break;
case 8: Kp=P6; Kd=D7; break;
}
} break;
}}
/////////////////////////////////////选择速度/////////////////////////
LXVIII
附录 A
switch(POS)
{
case 0: {
switch(ERR2)
{
case 0: n1= V0; break;
case 1: n1= V1; break;
case 2: n1= V2; break;
case 3: n1= V3; break;
case 4: n1= V5; break;
case 5: n1= V5; break;
case 6: n1= V5; break;
case 7: n1= V5; break;
case 8: n1= V3; break;
}
} break;
case 1: {
switch(ERR2)
{
case 0: n1=V1; break;
case 1: n1=V2; break;
case 2: n1=V3; break;
case 3: n1=V3; break;
case 4: n1=V5; break;
case 5: n1=V5; break;
case 6: n1=V5; break;
case 7: n1=V5; break;
case 8: n1= V4; break;
}
}break;
case 2: {
switch(ERR2)
LXIX
第四届全国大学生智能汽车邀请赛技术报告
{
case 0: n1=V2; break;
case 1: n1=V3; break;
case 2: n1=V4; break;
case 3: n1=V4; break;
case 4: n1=V5; break;
case 5: n1=V5; break;
case 6: n1=V5; break;
case 7: n1=V4; break;
case 8: n1= V5; break;
}
} break;
case 3: {
switch(ERR2)
{
case 0: n1=V3; break;
case 1: n1=V4; break;
case 2: n1=V5; break;
case 3: n1=V6; break;
case 4: n1=V6; break;
case 5: n1=V5; break;
case 6: n1=V4; break;
case 7: n1=V3; break;
case 8: n1= V6; break;
}
} break;
case 4:
{
switch(ERR2)
LXX
附录 A
{
case 0: n1=V4 ; break;
case 1: n1=V5; break;
case 2: n1=V5; break;
case 3: n1=V5; break;
case 4: n1=V4; break;
case 5: n1=V4; break;
case 6: n1=V3; break;
case 7: n1=V2; break;
case 8: n1= V5; break;
}
} break;
case 5:
{
switch(ERR2)
{
case 0: n1=V5; break;
case 1: n1=V5; break;
case 2: n1=V5; break;
case 3: n1=V5; break;
case 4: n1=V3; break;
case 5: n1=V3; break;
case 6: n1=V2; break;
case 7: n1=V1; break;
case 8: n1=V4; break;
}
} break;
case 6:
{
switch(ERR2)
{
case 0: n1=V5; break;
LXXI
第四届全国大学生智能汽车邀请赛技术报告
case 1: n1=V5; break;
case 2: n1=V5; break;
case 3: n1=V3; break;
case 4: n1=V3; break;
case 5: n1=V2; break;
case 6: n1=V2; break;
case 7: n1=V0; break;
case 8: n1=V3; break;
}
} break;
}
if(Sensor>=0)
{
U=Kp * xxmax * Sensor / 100 + Kd*err1*j10*Kp/200; //0.012 0.0015 0.0016
} else U=Kp*xxmin*Sensor/100+Kd*err1*j10*Kp/200;
PID_Steer();
if(delay2>0&&delay2<2000*miao) //// PORTA_BIT7=1; /// else PORTA_BIT7=0;
////////////定时停车/////////////////////////////////
if(LapNum==1) tingflag=1;
if(tingflag==1) ting++;
//////////////////////////////////////////////
if(n2<10)
{
j13++; if(j13>3000) j13=3000;
} else j13=0;
EnableInterrupts;
}
///////////////////////////main////////////////////////////////////////////////////
void main(void) {
LXXII
附录 A
DisableInterrupts;
SYNR = 7; //Fbus=Fosc*(SYNR+1)/(REFDV+1)=32MHz
REFDV = 3;
PLLCTL = 0x71;
while(CRGFLG_LOCK==0);
CLKSEL = 0x80; //1000-0000
Init();
ect_init();
/* AD_Init(); */
change();
asm{
nop; //等待
}
EnableInterrupts;
U1=steermid;
maxbig=steermax-steermid;
minbig=steermid-steermin;
xxmax=maxbig/13;
xxmin=minbig/13;
for(;;)
{
//////////////遥控///////////////////////////////
kr=PORTA&0x01;
if(kr>0)
{ j2=1;
PWMDTY45=850;
continue;
} else if(j2==1) { PWMDTY45=850;
continue; }
/////////////////起跑线识别///////////////////////
if(LapNum>1)
{
LXXIII
第四届全国大学生智能汽车邀请赛技术报告
stopflag=1;
if(stopflag>100)
{
PWMDTY45=970; continue;
} else PWMDTY45=1300;
}
//////////////////////////////////
if(n2<20&&j12<2000||j13>50&&j12==3000||ting>120000)
{
PWMDTY45=1000;
} else PID_Speed();
}
}
LXXIV