1、第三届“飞思卡尔”杯 第三届“飞思卡尔”杯 全国大学生智能汽车竞赛 全国大学生智能汽车竞赛 技术报告 技术报告 学 校: 乐山师范学院 队伍名称: 凯越 08 参赛队员: 杨维国 胡遇春 廖艺苑 指导教师: 张自友 张九华 关于技术报告和研究论文使用授权的说明 本人完全了解第三届全国大学生“飞思卡尔”杯智能汽车竞赛关于保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日 期: 目录 目录
2、 第一章 引言.1 第一章 引言.1 1.1 概述.1 1.2 文献综述.1 1.3 本文结构.2 第二章 系统设计.3 第二章 系统设计.3 2.1 系统方案介绍.3 2.2 系统总体结构.3 第三章 机械结构设计.5 第三章 机械结构设计.5 3.1 车模安装.5 3.2 传感器的设计安装.7 3.2.1 传感器的选择.7 3.2.2 传感器的电路及其布局.8 3.2.3 传感器横向间隔距离.9 3.2.4 传感器纵向伸出长度.9 3.3 电路板的设计安装.10 3.4 模型车主要参数说明.11 第四章 电路设计.13 第四章 电路设计.13 4.1 电源模块设计.13 4.2 电机驱动模
3、块设计.14 4.3 舵机驱动模块.15 4.4 车速检测模块.15 4.5 调试电路模块.16 第五章 软件系统设计.18 第五章 软件系统设计.18 5.1 HCS12 控制软件主要理论 .18 5.2 软件系统总体设计.18 5.3 软件各功能模块设计.21 5.3.1 时钟模块.21 5.3.2 PWM输出模块.21 5.3.3 ECT模块.23 5.3.4 AD转换模块.23 5.4 路径识别与算法.24 5.4.1 二值化算法.24 5.4.2 黑色中心检测算法.25 5.4.3 起跑线检测 .26 I 5.5 系统控制.28 5.5.1 小车转向角控制.29 5.5.2 小车速度
4、控制.31 5.6 系统控制策略.33 5.6.1 提前转向.33 5.6.2 弯道刹车.33 5.5.3 直道限速.34 5.5.4 软件滤波.34 5.6 程序算法.36 5.6.1 二维PID模糊控制.36 5.6.2 记忆算法.39 第六章 开发制作与调试.43 第六章 开发制作与调试.43 6.1 开发工具.43 6.1.1 软件开发平台.43 6.2 系统调试.45 6.2.1 硬件调试.45 6.2.2 软件调试.46 第七章 结论.48 第七章 结论.48 7.1 模型车主要技术参数说明.48 7.2 总结.48 7.2.1 智能车的制作.48 7.2.2 开发所遇到的问题和解
5、决方案.49 7.2.3 存在问题.49 7.2.4 心得体会.49 参考文献:.51 参考文献:.51 附件:程序源代码.I 附件:程序源代码.I II 第一章 引言 第一章 引言 1.1 概述 1.1 概述 教育部为了加强大学生实践、创新能力和团队精神的培养,在已举办全国大学生数学建模、电子设计、机械设计、结构设计等 4 项竞赛的基础上,经研究决定,委托教育部高等学校自动化专业教学指导分委会主办每年一度的全国大学生智能汽车竞赛。 智能汽车竞赛所使用的车模是一款带有差速器的后轮驱动模型车,由组委会统一提供。 比赛跑道为表面白色, 中心有连续黑线作为引导线, 黑线宽为 25cm。比赛规则限定了
6、跑道宽度 60cm 和拐角最小半径 50cm, 赛道具体形状在比赛当天现场公布。各参赛队伍在严格遵守比赛规则的条件下,在车模前面安装光电传感器或 CCD,并设计了电机驱动、转向舵机控制以及控制算法,以简洁但功能完美为出发点,以稳定为首要条件,以追求在最短的时间内跑完全程,并能检测赛道的起跑线,能够在完成比赛之后自动停止在起跑线 3m 范围之内。 1.2 文献综述 1.2 文献综述 本次比赛所涉及到的知识广泛,通过智能车官方网站和上届师兄的介绍,我们对所阅读的文献进行了一下总结,将文献中所受到的启发进行了以下重点总结。 ? S12 单片机开发资料 从 Freescale 公司官方网站,下载得到
7、S12 单片机开发技术手册。仔细阅读各个功能模块文件,了解所有寄存器功能。配合比赛组委会发送的单片机嵌入式应用的在线开发方法和自己从网上买的嵌入式系统使用 68HC12和 HCS12 的设计与应用 ,熟悉 S12 单片机的内部结构,具备了开发所需要的知识。 ? 智能车制作知识 一辆完整的智能车如何制作刚开始我们完全不知道,通过阅读组委会发送的学做智能车 ,又通过网络查询一些资料,对整个制作过程有了一定的了解,对制作智能车有了一定的理论基础。 1 第三届全国大学生智能汽车大赛技术报告 ? 控制算法 关于控制算法的文章很多,对于此次比赛,重点在于速度的提高,不求很精确入弯,因此在阅读这些文献时,重
8、点参考模糊控制和算法容易实现方面得内容。在学做智能车中提到相关方面的知识,又从网上查找资料。 一些简单的参考资料在文章的最后列出。 1.3 本文结构 1.3 本文结构 本文采用先总后分的机构,先对系统总体设计进行介绍,然后分别对各部分进行介绍,突出强调了系统机械设计、硬件电路和软件编程。 本文有 7 个章节,第一章为引言,简单介绍智能车比赛的一些情况;第二到六章为主体部分,对机械、硬件和软件设计进行了详细介绍,并对调试方法和调试过程进行了说明;第七章为总结,主要说明一下我们在设计过程中遇到的问题和解决办法,以及还存在的问题;最后附上软件代码。 2 第二章 系统设计 第二章 系统设计 2.1 系
9、统方案介绍 2.1 系统方案介绍 智能车系统采用飞思卡尔 16 位单片机 MC9S12DG128 为核心控制单元,由安装在前部的光电传感器负责采集信号,并将采集到的电平信号送入核心控制单元,核心控制单元对信号进行处理后,PWM 发生模块发出 PWM 波,通过输出不同占空比分别对转向舵机、直流电机进行控制,完成智能车的转向前进和制动。 为了使智能车能够快速行驶,单片机必须把路径的判断、相应的转向伺服电机控制以及直流驱动电机的控制精密地结合在一起。不论是传感器部分数据的错误采集和识别,还是转向伺服电机控制的失当,都会造成模型车严重抖动甚至偏离赛道;如果直流电机的驱动控制效果不好,还会造成直线路段速
10、度不上去,或弯曲路段入弯速度过快而使智能车冲出赛道等问题。 2.2 系统总体结构 2.2 系统总体结构 系统总体结构如图 2.2.1 舵机驱动 速度检测 直流电机驱动 电源模块 道路识别 光电传感器 MCU MC9S12DG128 图 2.2.1 系统总体结构框图 从系统总体结构框图可以知道系统由以下几个部分组成。 (1)中央处理器单元 此次使用的 MC9S12DG128B 单片机属于 MOTOROLA 公司的 MC9S12 系列之一。它是以运算速度很快的 CPU12 内核为核心的单片机,经过锁相环后,时钟频率3 第三届全国大学生智能汽车大赛技术报告 可达到 40MHz,内部 Flash 高至
11、 128KB,拥有 2 组各 8 路 10 位 A/D、16 路 I/O口,有功能强大的 8 位 PWM 输出共 8 路,以及 8 路 16 位增强型定时器(ECT) 。该单片机功能强大,完全能够胜任小车的检测和控制功能。 (2)道路识别模块 用于完成对于赛道中心引导线的检测,判断道路信息,通过连接线把信息传送给中央控制单元,使智能车沿着跑道轨迹稳定前行。 (3)电源模块 为各个电路模块提供稳定电源,保证各模块正常工作。 (4)舵机驱动模块 对模型车上的舵机进行驱动,达到快速准确控制赛车方向。 (5)电机驱动模块 对模型车上的电机进行驱动,控制赛车的速度。 (6)速度检测模块 对模型车的速度进
12、行检测,实现闭环控制,以便调整弯道和直道的速度,从而提高平均速度,使小车更快跑完全程。 4 第三章 机械结构设计 第三章 机械结构设计 3.1 车模安装 3.1 车模安装 车模组装是我们的第一步工作,我们严格遵守比赛对车模所做要求的前提下,照着说明书上的安装步骤对车模进行安装,并做了一些改装。 (1)后轮距调整 按照车辆运动学理论,增大后轮距,能够提高智能车稳定性并减小侧滑。因此我们增了后轮距使智能车更稳定的跑完全程。 (2)前轮外倾角调整 通过车轮中心的汽车横向平面与车轮平面的交线与地面垂线之间的夹角,称为前轮外倾角。我们在组装是采用前轮外倾角为 1 度。这样,一方面可以在汽车重载时减小或消
13、除主销与衬套、轮胎与轴承等处的装配间隙,使车轮接近垂直路面滚动而滑动,同时减小转向阻力,使汽车转向轻便;另一方面还可防止由于路面对车轮垂直反作用力的轴向分力压向轮胎外端的轴承,减小轴承及其锁紧螺母的载荷,从而增加这些零件的使用寿命,提高汽车的安全性。 (3)前轮前束调整 当车轮有了外倾角后,在滚动时将导致两侧后轮向外滚开。由于转向横拉杆和车桥的约束使前轮不可能向外滚开,车轮将在地面上出现边滚边向内滑移的现象,从而增加了后轮的磨损。在安装车轮时,为消除车轮外倾带来的这种不良后果,可以采用前轮前束来解决。 (4)舵机力臂比例系数调整 增加舵机长臂长度,减小舵机短臂长度,增大长臂和短臂之间的比例,可
14、以在舵机输出较小转角下,取得较大的前轮转角,从而提高了整个车模转向控制的速度。 (5)车身重心调整 车身重心的前后方向调整,对智能车行驶性能有很大的影响。按照车辆运动学理论,车身重心前移会增加转向,但会降低转向的灵敏度,同时降低后轮5 第三届全国大学生智能汽车大赛技术报告 的抓地力;重心后移会减少转向,但会增大转向灵敏度,后轮抓地力也会增加。因而调整合适的车体重心,让智能车更加适应跑道是很关键的。根据实际调试经验,鉴于当前舵机响应迟缓,因此,需要将车的中心前移,增加转向性能。 (6)减轻重量 车模在整个竞赛过程中,加速加速度和减速加速度的大小将直接决定车模在全程中的平均速度,要想提高车速就必须
15、提高这两个加速度。在硬件系统确定的情况下,欲提高车模的加速度,最直接的办法就是降低车模的重量。我们组在减轻重量方面的操作原则为在不违反比赛规则和不影响正常行驶的情况下,减轻所用材料的重量,拆除所有多余零件,同时不安装无用零件,除电路板和传感器没有安装任何其他的零件。在电路板的设计过程中,为了减少车体的重量,在保证正常工作的情况下,采用最简单的电路和最少的元器件。在布局上,使用的双面紧凑布局的方法,最大限度减小电路板的面积,减轻重量。 以上所做的调整大大提高了车模的可靠性和适应性。 安装后的车模如图 3.2.1 所示。 图 3.2.1 车模图 6 第三章 机械结构设计 3.2 传感器的设计安装
16、3.2 传感器的设计安装 3.2.1 传感器的选择 3.2.1 传感器的选择 方案一:采用 CCD/CMOS 摄像头, CCD/CMOS 摄像头的优点是检测前瞻距离大、检测范围宽、检测道路参数多;缺点是电路设计复杂,需要视频信号同步分离,且工作电压高于电池电压,需要升压电路,加大电源的损耗,增加了车身的重量,而且本系统采用的处理器是 25MHz 的单片机,处理速度有限,并且CCD 采集一侦图像的时间最快为 50ms,对于一个速度要求很高的系统,采集时间过长,还易受外界干扰,软件计算量大。 方案二:使用红外发射/接收管。通过红外发光管发射红外线照射跑道,跑道表面与中心线具有不同的反射强度,利用红
17、外接收管可以检测到这些信息。这种检测方法具有较高的可靠性和稳定性,且电路设计比较简单,检测信息快,最重要的是单片机易于处理。但这种方法对道路参数检测精度低,易受到外界光线的干扰,且检测距离有限。 通过对两个方案的比较,结合自身实际情况,我们使用了单光束反射取样式光电传感器 ST188,它具有以下特点: (1)采用高发射功率红外光电二极管和高灵敏度光电晶体管组成。 (2)检测距离可调整范围大,4-13mm 可用。 (3)采用非接触检测方式。 (4)发射/接收管在同一个元件上,可以减少车身重量。 其外观图和芯片引脚图分别如图 3.2.2 和 3.2.3 所示。 图 3.2.2 ST188 外观图
18、7 第三届全国大学生智能汽车大赛技术报告 图 3.2.3 ST188 芯片引脚图 注:引脚顺序的标识方法,以顶端有斜边起分别为 A,K,E,C 的顺序排列。 3.2.2 传感器的电路及其布局 3.2.2 传感器的电路及其布局 我们使用 ST188 传感器来获取黑线的信息,并使用了固定大小的电阻和可调电阻,以方便传感器在调试中取得最好的效果,传感器的输出电压直接通过A/D 转换通道进入数字控制器。 单个光电传感器的检测电路如图 3.2.4 所示(图中没画出可调电阻,而是把已经调好的电阻用固定电阻来表示) 。 图 3.2.4 单个传感器的检测电路 这个电路很简单,在硬件的外部我们没有加任何的信号滤
19、波电路,由环境光引起的环境干扰不能通过 RC 滤波网络来简单的滤除,只能通过软件来滤除。 传感器布局对赛道的检测,控制算法的编写有很大的影响。 方案一: “一”字形传感器布局。所谓“一”字形的传感器布局,就是把多个传感器按照“一”字排开,这种传感器布局方式最为常见,这种布局的优点8 第三章 机械结构设计 是常见且安装方便。不足之处在于:由于传感器只有一排,且安装在智能车的头部,对赛道的曲率几乎没有任何预测功能。智能车在弯道会突然减速,直道会突然加速,机械磨损较大。出于对稳定性的考虑,避免赛车在直道进入弯道时冲出赛道,赛车在连续直道时不能开足马力,全速前进,影响了完成比赛的速度。 方案二: “W
20、”形传感器布局。所谓“W”形的传感器布局,就是把多个传感器按照“W”形排开。 “W”形的传感器布局相对于“一”字形传感器布局有了明显的优点。由于传感器分布在两排上,使得智能车对弯道有了一定的预测功能,这种预测功能特别体现在直道进入弯道时刻。后一排传感器仍在直道时,前一排传感器已经进入弯道, “W”形的传感器布局的不足之处在于:由于布局在两排上,控制算法的复杂程度有了很大的增加,判断舵机的旋转方向时,往往需要上一次的检测数据。经验判断的可能性也随着传感器的数量增加而增加。 经过调试,我们最终采用了一字型布局,即 13 个传感器安装在同一条直线上,从而保证纵向的一致性,使其控制策略主要集中在横向上
21、。 3.2.3 传感器横向间隔距离 3.2.3 传感器横向间隔距离 各个传感器的横向间隔距离对智能车是有一定影响的,根据赛道规则,中间黑色导引线的宽度为 25mm,为了让传感器间不出现同时感应现象(即每次采集只出现一个传感器值为 1)以及不出现盲区,我们让每两个传感器之间的距离为 17mm,同时调整传感器的高度,获得很好的区分度和灵敏度。 3.2.4 传感器纵向伸出长度 3.2.4 传感器纵向伸出长度 传感器的纵向伸出长度也是传感器布置的一个重要参数,对车辆的稳定性及最高车速都有很大的影响。 传感器的纵向伸出长度主要关系到模型车对未知赛道的预知能力。理论上讲,传感器伸出距离越长,越有利于模型车
22、对赛道形状变化做出响应,使得模型车有相对比较充足的时间进行转弯和降速,这样也在很大的程度上提高了模型车在直线上的局限速度。 但是,纵向伸出长度加长也会带来很多弊端,如重心前移增加了模型车不足转向的趋势,使得模型车横摆角速度响应不够迅速,大大增加了过弯的难度。在安装强度不足时,还会出现上下抖动,不仅增加了车身的不稳定性,还非常9 第三届全国大学生智能汽车大赛技术报告 容易使传感器抖动出有效的检测距离之外,引入干扰信号。权衡了利弊而且经过了反复的实验,我们设计了传感器的纵向伸出长度为 10cm。 传感器安装参数表如下表 3.2.1 表 3.2.1 传感器安装参数表 参数 间隔 17mm 高度 30
23、mm 前倾角 15 度 离车身距离 10cm 设计好的传感器外观图如图 3.2.5 所示 图 3.2.5 传感器外观图 3.3 电路板的设计安装 3.3 电路板的设计安装 电路板是这个系统的核心,我们将所有电路集中在一块板子上,而且用双面 PCB 板来制作传感器,电路板也用双面 PCB 来制作,这样性能比较稳定而且重量比较轻,时智能车快速稳定跑完全程的关键。因为其面积比较大,我们把它固定在车子的中部,如图 3.3.6。 10 第三章 机械结构设计 图 3.3.6 电路板安装图 3.4 模型车主要参数说明 3.4 模型车主要参数说明 设计模型车所用到的资源如表 3.4.1 所示。 11 第三届全
24、国大学生智能汽车大赛技术报告 表 3.4.1 模型车资源 项目 个数 电容 若干 传感器 红外光电 14 个 MC9S12DG128 1 个 MC33886 4 片 LM2940 2 片 LM2941 1 片 555 1 片 电阻 若干 拨码开关 1 个 电机 1 个 连接器 若干 舵机 1 个 12 第四章 电路设计 第四章 电路设计 硬件电路设计是自动控制器的基础。图 2.2.1 给出了硬件系统框图。硬件设计应在可靠的基础上尽量简单化,使其满足稳定工作的基本要求。 4.1 电源模块设计 4.1 电源模块设计 这次比赛所使用的电源是由 6 节相同型号的电池串联起来从而得到 7.2V、2A/h
25、 可充电电池组提供。由于电路中的不同电路模块所需要的工作电压和电流容量不相同,因此电源模块应该包含多个稳压电路,将充电电池电压转换成各个模块所需要的电压。我们经过以下途径对其他几个模块进行供电。 (1)经过稳压芯片 LM2940 稳压后,输出 5V 电压,分别对单片机、传感器和速度检测供电。 (2)经过稳压芯片 LM2941 稳压后,输出 6V 电压,对舵机供电。 其原理图如图 4.1.1 所示。 电机驱动模块的电源直接取自电池。 13 第三届全国大学生智能汽车大赛技术报告 图 4.1.1 电源模块原理图 4.2 电机驱动模块设计 4.2 电机驱动模块设计 通过电机驱动模块,控制驱动电机两端电
26、压来对模型车加速运行,或对其进行制动。电机驱动采用 MC33886 做为驱动芯片,电路如图 4.2.1 所示。为了增大驱动能力,减少单片机发热量,电路采用两片 MC33886 并联的方案。系统使用 PWM 控制电机转速,充分利用单片机的 PMW 模块资源。电机 PWM 频率设定为 600Hz。 MC33886 芯片的工作电压为 5-40V,导通电阻为 140 毫欧姆,PWM 频率小于10KHz,具有短路保护、欠压保护、过温保护等功能。 从图 4.2.1 中可以看到,我们使用 PWM1 和 PWM2 作为电机驱动 PWM 信号,在实际中,我们利用单片机的 PWM67 控制电机的正转,PMM23
27、控制电机的反转,两个 PWM 通道级联可以使其输出更加精确。 14 第四章 电路设计 图 4.2.1 电机驱动电路 4.3 舵机驱动模块 4.3 舵机驱动模块 在模型车上,舵机的输出转角通过连杆传动控制前轮转向。车模采用大赛统一提供的 SRM-102 型舵机,工作电源为 6V。影响舵机控制特性的一个主要参数是舵机的响应速度即舵机输出轴转动角速度,SRM-102 型舵机响应速度为0.2S/60 度。 控制舵机的脉冲可以使用 MC9S12DG128 的 1 路 PWM 产生。单片机中有 8 路独立的 PWM 输出端口,可以将其中相邻的 2 路 PWM 输出级联成一个 16 位 PWM 输出。在单片
28、机总线频率为 24MHz 的时候,改变 PWM 占空比常数可以改变输出脉冲的宽度。而脉冲信号的宽度决定舵机输出舵盘的角度。 4.4 车速检测模块 4.4 车速检测模块 为了使得模型车能够平稳地沿着赛道运行,除了控制前轮转向舵机以外,还需要控制车速,使模型车在急转弯时速度不要过快而冲出跑道,在直道上以较快的速度行驶。可以通过控制驱动电机上的平均电压控制车速,但是如果开15 第三届全国大学生智能汽车大赛技术报告 环控制电机转速,会有很多因素影响电机转速,例如电池电压、电机传动摩擦力、道路摩擦力和前轮转向角度等。这些因素会造成模型车运行不稳定。通过速度检测,对车模速度进行闭环反馈控制,就可以消除上面
29、各种因素的影响,使得智能车运行得更精确。 我们采用了如图 4.4.1 电路来检测速度。 图 4.4.1 速度检测电路 ST150 为单光束直射取样式光电传感器, 它由高输出的红外光电二极管与高灵敏度光敏晶体管组成. 其特点:性能可靠;体积小,结构简单,广泛应用于多费率电能表,IC 卡电度表等各种需测量计数的场合,配套有各种遮光盘供选用,可用于判别被测物体的运动方向。 4.5 调试电路模块 4.5 调试电路模块 为了既不影响模型车的正常行驶,又方便调试的过程,调试模块的设计是必要的,调试模块可以大大提高模型车调试的工作效率,方便排除硬件与软件的缺陷,能够检测模型车运行性能,这些为寻找最优的控制策
30、略以及控制参数打下好的基础,而在比赛的过程中把调试模块取下,以免违反比赛规则,又减小了智能车的重量。 在本设计中,我们制作了一个独立的调试板,用 2 个数码管显示经过的十16 第四章 电路设计 字交叉的个数或显示小车的当前速度,还用了单片机内部的 EEPROM 对模型车运行中的参数进行存储,然后在通过窗口送到计算机进行分析。 17 第五章 软件系统设计 第五章 软件系统设计 5.1 HCS12 控制软件主要理论 5.1 HCS12 控制软件主要理论 智能车开发环境采用了飞思卡尔 HCS12 系列单片机开发软件 CodeWarrior。该软件具有支持多种语言、开发环境界面统一、交叉平台开发以及支
31、持插件工具等特点。在 CodeWarrior 界面完成编译后,通过 BDM FOR S12 工具,在CodeWarrior 环境下向 MC9S12 模块下载程序。BDM FOR S12 工具使用简单,十分方便。 5.2 软件系统总体设计 5.2 软件系统总体设计 在整个系统设计中,用到了 4 个单片机基本功能模块:时钟模块、PWM 输出模块、ECT 模块、AD 转换模块、 。通过编写程序先对所用到的模块进行初始化,并通过对相应数据寄存器或状态寄存器的读写,实现期望的功能。为实现所期望的功能所需芯片资源如表 5.2.1 所示。 表 5.2.1 系统所用到的芯片资源 AD 模块 PAD3PAD15
32、 红外传感器 ECT 模块 PT0 速度检测脉冲计数 PWM01 舵机控制 PWM 模块 PWM23,PWM67 电机驱动电路 PH0PH7 拨码开关 PB0PB7 IO 端口 模块 PA0PA7 数码管 系统通过在主程序内循环调用信号检测、信号处理、路径计算和赛车控制等功能子模块,程序的执行为先对各个模块进行初始化,然后在主程序中完成相应的功能。 首先对各功能模块进行初始化,初始化流程图如图 5.2.1 所示。 18 第五章 软件系统设计 程序入口 关键数据初始化 时钟设定初始化 PWM 初始化 ATD 初始化 ECT 初始化 图 5.2.1 系统初始化流程图 初始化完成以后,就在主程序中编
33、写程序,完成智能车沿着跑道快速行驶的任务,其主程序的流程图如图 5.2.2 所示。 19 第三届全国大学生智能汽车大赛技术报告 程序入口 关键参数实时修改程序 是否进行参数修改 否 初始化 是 读传感器状态 计算转角值 计算驱动值 拐弯、驱动 检测起跑线 开中断 5.2.2 主程序流程图 20 第五章 软件系统设计 5.3 软件各功能模块设计 5.3 软件各功能模块设计 5.3.1 时钟模块 5.3.1 时钟模块 时钟基本脉冲是 CPU 工作的基础。MC9S12DG128 微控制器的系统时钟信号,由时钟振荡电路或专用时序脉冲信号提供。MCU 内部的所有时钟信号都来源于EXTAL 引脚,也为 M
34、UC 与其他外接芯片之间的通信提供了可靠的同步时钟信号。 S12 的总线时钟是整个 MCU 系统的定时基准和工作同步脉冲, 其频率固定为晶体频率的 1/2。对于 S12,可以利用寄存器 SYNR、REFDV 来改变晶振频率fOSCCLK,可以选用 8MHz 或 16MHz 外部晶体振荡器作外时钟。将 SYNR 设为 2,REFDV 设为 1,可以得到 24MHz 的总线频率,接近 S12 单片机的上限内部总线频率 25MHz。 而锁相环产生的时钟频率 fPLLCLK=2*fOSCCLK*(SYNR+1)/(REFDV+1),设计中我们将 SYNR 设为 2,REFDV 设为 1,因此,总线时钟
35、为 24MHz,CPU 工作频率为 48MHz。 5.3.2 PWM 输出模块 5.3.2 PWM 输出模块 MC9S12DG128 集成了 8 路 8 位独立 PWM 通道,通过相应设置可变成 4 个 16位 PWM 通道,每个通道都有专用的计数器,PWM 输出极性和对齐方式可选择,8个通道分成两组,共有 4 个时钟源控制。PWM0、PWM1、PWM4、PWM5 为一组,使用时钟源 ClockA 和 ClockSA;PWM2、PWM3、PWM6、PWM7 构成另一组,使用时钟源 ClockB 和 ClockSB。ClockA 和 ClockB 均是由总线时钟经过分频后得到,分频范围 1128
36、,通过寄存器 PWMPRCLK 来设置,ClockSA 和 ClockSB 是分别通过ClockA 和 ClockB 进一步分频后得到的,分频范围为 1512,分别通过寄存器PWMSCLA 和 PWMSCLB 来设置,计算公式为: ClockSA=ClockA/(2*PWMSCLA) ClockSB=ClockB/(2*PWMSCLB) 通过寄存器 PWME 来控制 PWM0PWM7 的启动或关闭。 为了提高精度,我们将 PWM0 和 PWM1,PWM2 和 PWM3,PWM6 和 PWM7 级联,构成 16 位的 PWM 通道,级联时,2 个通道的常数寄存器和计数器均连接成 16 位的寄存器
37、, 3 个 16 位通道的输出分别使用通道 7、3、1 的输出引脚,时钟源分21 第三届全国大学生智能汽车大赛技术报告 别由通道 7、3、1 的时钟选择控制位决定。级联时,通道 7、3、1 的引脚变成PWM 输出引脚,通道 6、2、0 的时钟选择没有意义。 通过寄存器 PWMPRCLK、PWMSCLA、PWMSCLB、PWMCLK 对各通道的时钟源进行设置。 PWM 模块的初始化设置过程如下所示: PWMCTL=0 xB0; / 设置通道 76、32、10 级连 PWME=0 x02; / 通道 1 输出使能; PWME_PWME3=0; PWME_PWME7=1; PWMPRCLK=0 x1
38、2; PWMSCLA=0 x01; /SA_CLK=A_CLK/(2*1)=3MHz PWMSCLB=0X01; /SB_CLK=B_CLK/(2*1)=6KHz PWMPOL=0 x02; /通道 1 极性选择起始为高电平; PWMCLK=0 x8A; /PWM01 选择 SA_CLK ,PWM23 67 选择 SB_CLK PWMCNT0=0 x00; PWMCNT1=0 x00; PWMCNT2=0 x00; PWMCNT3=0 x00; PWMCNT6=0 x00; PWMCNT7=0 x00; PWMPER01=60000; / 周期=(1/3M)*(60000)=20ms; PWM
39、PER23=10000; / F=6M/10000=600Hz PWMPER67=10000; / F=6M/10000=600Hz PWMCAE=0 x00; /左对齐方式 22 第五章 软件系统设计 5.3.3 ECT 模块 5.3.3 ECT 模块 S12 得 ECT 具有 8 个输入(IC)/输出(OC)比较通道,可以通过设置 TIOS 寄存器选择输入或输出比较功能。ECT 既可以作为一个时基定时产生中断,也可以用来产生控制信号。 模数递减计数器(MDC)是 S12 微控制器 ECT 特有,它是一个 16 位计数器,其外围配备了常数寄存器 MCCNT 和控制寄存器 MCCTL, 分别为
40、 MDC 提供定时常数和时钟信号。通过寄存器 TCTL4 设定各个引脚的各种动作,初始化设置过程如下所示: TCTL4=0 x01; / Set the rising endge for PT0. PACN10=0 x0000; PBCTL=0 x40; /pt0 and pt1 级联成 16 位计数器 MCCNT=60000; /60000*24M/16=40ms MCCTL=0 xC7; TSCR1=0 x10; 通过 ECT 模块,我们实现了对脉冲进行计数,检测智能车的速度,对速度进行闭环控制。 5.3.4 AD 转换模块 5.3.4 AD 转换模块 AD 转换模块由模拟量前端的 8 选
41、 1 多路转换开关,采样缓冲器及放大器,逐次逼近式模拟量转换、控制部分及转换结果存储部分等组成。 AD 转换所需要的时间周期是固定不变的,但采样时间和时钟频率可以通过寄存器 ATDxCTL4(x 为 0 或 1)在一定范围内选择,其公式为: ATDClock=BusClock*0.5/(PRS+1) 从公式和总线频率的取值范围可以得出 A/D 时钟频率范围满足: 500kHzATDClock2MHz 通过寄存器 ATDxCTL2(x 为 0 或 1)控制 ATDx 的启动、状态标志以及上电模式;寄存器 ATDxCTL3(x 为 0 或 1)用于控制结果寄存器的影射,设置转换长度;寄存器 ATD
42、xCTL5(x 为 0 或 1)用于选择转换方式,选择转换通道,设置单/多通道转换和单次/连续转换模式以及选择对齐方式,23 第三届全国大学生智能汽车大赛技术报告 写寄存器 ATDxCTL5 将会启动一次新的转换,如果写该寄存器时 ATD 正在进行转换,则转换操作将被中止。AD 转换模块的初始化程序如下所示: ATD0CTL2=0XCO; ATD1CTL2=0XC0; ATD0CTL3=0X02; ATD1CTL3=0X02; ATD0CTL4=0X8A; ATD1CTL4=0X8A; ATD0CTL5=0XB0; ATD1CTL5=0XB0; AD 转换结果存放在寄存器 ATD0DRxL 和
43、 ATD1DRxL,通过这些寄存器将结果传送到数组 sam_atd_g,用来检测道路信息。 5.4 路径识别与算法 5.4 路径识别与算法 路径识别为控制算法的核心内容, 通过模型车前面的 13 个传感器检测路径,为了得到可靠的信号识别,我们对其进行了重复的实验,从实验我们得出,传感器检测到黑线时输出的平均电压为 3V, 检测到白线时输出的平均电压为 0.2V。 系统通过 8 位 A/D 转换器采集红外传感器的信号,为了保证检测信号的稳定性,系统每 50us 对红外传感器扫描 1 次,连续扫描 10 次后,再对舵机进行控制。并把转换后的值暂时存储在内存中。采集到信号后,单片机要做出处理,我们采
44、用了二值化算法、黑线中心检测算法。 5.4.1 二值化算法 5.4.1 二值化算法 图像得二值化处理就是讲图像上的点的灰度置为 0 或 255, 也就是将整个图像呈现出明显的黑白效果。即将 256 个亮度等级的灰度图像通过适当得阀值选取而获得仍然可以反映图像整体和局部特征得二值化图像。首先要把灰度图像二值化,得到二值化图像,这样子有利于图像进一步处理时,图像的集合性质只与像素值为 0 或 255 的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、24 第五章 软件系统设计 连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像
45、素被判定为属于特定物体,其灰度值为 255 表示,否则这些像素点被排除在物体区域以外,灰度值为 0,表示背景或者例外的物体区域。 因为赛道只有黑白两种颜色,其很容易分辨,采用二值化算法可以得到很好的效果,为了得到可靠的阀值,我们进行了大量的试验,最后得出了这个阀值为 51,当大于这个阀值时,我们认定是检测到黑线,当小于这个阀值时,我们认为是检测到白线。 5.4.2 黑色中心检测算法 5.4.2 黑色中心检测算法 为了能让模型车的速度更快,我们加入了黑色中心检测算法,其思路如下:通过变量 number 来统计有多少个传感器检测到黑线,k 来统计所有检测到黑线的传感器的原坐标和,用表达式 car_
46、position= (2*k)/number)-14 将传感器的坐标重新进行定义,其映射关系如表 5.4.1 所示。 表 5.4.1 传感器之间的映射关系 原坐标 1 1-2 2 2-3 3 3-4 4 4-5 5 5-6 6 6-7 7 映射后 -12 -11 -10 -9 -8 -7 -6-5 -4 -3 -2 -1 0 原坐标 7 7-8 8 8-9 9 9-10 10 10-11 11 11-12 12 12-13 13 映射后 0 1 2 3 4 5 6 7 8 9 10 11 12 说明:x-y 表示 x 和 y 同时检测到黑线。 通过反复的试验我们得到了智能车速度和传感器坐标之间
47、得映射关系,为了使小车能够更快,更稳的跑完全程,我们用了多组传感器坐标和智能车关系映射,如表 5.4.2,5.4.3,5.4.4 所示。 25 第三届全国大学生智能汽车大赛技术报告 表 5.4.2 传感器坐标和智能车速度映射关系 1 传感器坐标 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 智能车速度 16 20 20 20 20 20 20 20 20 20 20 20 20传感器坐标 0 1 2 3 4 5 6 7 8 9 10 11 12智能车速度 20 20 20 20 20 20 20 20 20 20 20 20 16表 5.4.3 传感器坐标和
48、智能车速度映射关系 2 传感器坐标 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 智能车速度 16 18 20 21 21 21 21 21 21 21 21 21 21传感器坐标 0 1 2 3 4 5 6 7 8 9 10 11 12智能车速度 21 21 21 21 21 21 21 21 21 21 20 18 16表 5.4.4 传感器坐标和智能车速度映射关系 3 传感器坐标 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 智能车速度 16 18 20 21 21 22 22 22 22 22 22 22 22传感
49、器坐标 0 1 2 3 4 5 6 7 8 9 10 11 12智能车速度 22 22 22 22 22 22 22 22 21 21 20 18 16为了保证不管传感器出现什么情况都能够有响应的速度以之对应,我们将速度虚拟了六个数据,又这些情况都是比较坏的,所以将其速度设置为比较小的值。在实际跑道出来后,我们用拨码开关选择合适的映射组。 5.4.3 起跑线检测 5.4.3 起跑线检测 赛道有一个长为 1m 的出发区,如图 5.4.1 所示。 26 第五章 软件系统设计 图 5.4.1 起跑线示意图 本次比赛中新增加了一个规则:在模型车跑完了两圈以后,要能在 3 米范围内停下来,这标志对起跑线
50、的判断显得很重要,刚开始我们把十字交叉也当作起跑线来算,如果跑道出现十字交叉必然要经历两次。这样的话如果赛道有 N个十字交叉,则智能车跑完一圈有多个传感器检测到黑线的次数为 2N+1,在此之后则为第二圈。不过比赛要求我们在比赛赛道出来之后,不能改变智能车,而我们事先无法得知比赛赛道,这样我们就无法得知有几个十字交叉,N 的值就无法确定,要是采用这种方法只能加个拨码盘。经过反复实验,最终我们采用了只检测起跑线的方法,其思路为:当 13 个传感器任何相邻的两个传感器出现黑白跳变的次数大于 4 次,并且是如表 5.4.5 所表示的情况中的一种就表示经过一次起跑线。 27 第三届全国大学生智能汽车大赛