东秦三队技术报告 - 图文

更新时间:2024-04-27 06:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第三届“飞思卡尔”杯全国大学生

智能汽车邀请赛

技 术 报 告

基于图像形态学的赛车记忆控制算法的研究

学 校: 东北大学秦皇岛分校 队伍名称: 东秦三队 参赛队员:郑毅

姚芳 赵青贺

带队教师:顾德英

马淑华

I

关于技术报告和研究论文使用授权的说明

本人完全了解第三届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。

参赛队员签名:

带队教师签名:

日 期:

II

摘 要

本设计采用飞思卡尔公司提供的MC9S12DG128单片机作为智能车的检测和控制核心,由电源模块、路径识别模块、测速模块、电机驱动模块、舵机驱动模块等组成。采用双排连续光电传感器,以获取道路的信息,进行路径识别,车速检测采用对射红外传感器,用两片MC33886驱动电机。在硬件基础上,设计了PD控制算法,及基于路径记忆的算法。经反复的调试,取得了较好的效果。

关键词:单片机 红外传感器 路径识别 智能车 记忆算法 PWM

控制

I

ABSTRUCT

In this design, we use MCU(MC9S12DG128B) which is provided by Freescale company as the car’s detection and control core. The car is consitited by power module, the path identification module, speed testing module, motor drive module, steering gear drive module and other components。We use reflecting-infrared sensors to detect black line, and infrared sensor on radio is used in speed detection, two pieces of MC33886 are used to drive motor. On the based of hardware, we designed the PD control algorithms, and the based on the path of memory. After repeated debugging, it has achieved good result.

Keywords: MCU infrared sensor path detecting smart car Memory algorithm PWM control

II

摘 要 ........................................................... I ABSTRUCT ........................................................ II 第1章 引言 ..................................................... 1 第2章 赛车系统整体设计 ......................................... 2 2.1 设计思想 ................................................... 2 2.2 系统整体框图 ............................................... 2 2.3 整体电路设计原理图 ......................................... 3 第3章 路径识别系统设计 ......................................... 4 3.1 确定检测方法 ............................................... 4 3.2 确定光电传感器 ............................................. 4 3.3 光电管驱动电路设计 ......................................... 5 3.4 红外传感器的布局 ........................................... 6 3.5 路径识别 ................................................... 7 第4章 硬件电路设计 ............................................. 8 4.1 电源模块 ................................................... 8 4.2 直流电机驱动模块 ........................................... 9 4.3 机驱动模舵块 .............................................. 10 4.4 测速电路 .................................................. 11 4.5 无线通讯模块 .............................................. 12 第5章 机械结构调整 ............................................ 13 5.1 车体整体机械安装与调整 .................................... 13 5.2 车体各部分安装 ............................................ 13 5.2.1 测速部分安装 .......................................... 13 5.2.2 光电部分安装 .......................................... 14 5.2.3 舵机部分安装 .......................................... 14 5.2.4 电路主板的安装 ........................................ 14 第6章 控制算法及软件实现 ...................................... 16 6.1 总体控制流程图 ........................................... 16 6.1.1 程序初始化 ............................................ 16 6.1.2 光电数据采集 .......................................... 18 6.1.3 速度信息采集 .......................................... 18 6.1.4 赛道判别 .............................................. 19 6.2 赛车控制策略 .............................................. 20

III

6.2.1 路径信息采集处理方法 .................................. 20 6.2.2 舵机转向控制算法 ...................................... 20 6.2.3 速度控制算法 .......................................... 20 6.3 起跑线识别 ................................................ 21 6.4 数学形态学理论概述 ........................................ 21 第7章 智能车调试 ............................................... I 7.1 软硬件调试 ................................................. I 7.2 智能车工作模块调试 ......................................... I 7.2.1 传感器及外围电路的调试 ................................. I 7.2.2 舵机的调试 ............................................. I 7.2.3 直流电机的调试 ........................................ II 7.2.4 整体调试 ............................................. III 7.3 实道调试 ................................................. III 7.4 模型车的主要技术参数说明 ................................... V 总结 ............................................................ VI 致谢 ........................................................... VII 参考文献 ...................................................... VIII 附录1 .......................................................... IX

IV

第1章 引言

“飞思卡尔”杯全国大学生智能汽车竞赛以飞思卡尔HCS12单片机为核心控制模块,引导改装后的模型汽车按照规定路线行进,以完成时间最短者为优胜。该竞赛是涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科的科技创意性比赛。参赛选手须使用大赛组委会统一提供的竞赛车模,采用飞思卡尔16位微控制器MC9S12DG128作为核心控制单元,自主构思控制方案及系统设计,包括传感器信号采集处理、控制算法及执行、动力电机驱动、转向舵机控制等。

自2006年举办第一届“飞思卡尔”杯全国大学生智能汽车邀请赛以来,已经成功举办两届。我们在2007年12月份得知比赛通知,并着手组队准备,至今已历经7个月。这是我校首次参加这项比赛,没有经验,手头也没有太多的资料,与其他参赛过的学校相比,我们面临着更多的困难。在这几个月中,在指导老师的悉心指导下,我们克服了种种困难,最终完成了智能车工程制作。经过反复调试,智能车能够在赛道上稳定、快速的行驶,取得了较好的效果。

这份技术报告中,我们小组通过对整体方案、电路、算法、调试、车辆参数的介绍,详尽地阐述了我们的思想和创意,具体表现在电路的创新设计,以及算法方面的独特想法,而对单片机具体参数的调试也让我们付出了艰辛的劳动。全文共分六个部分。第一章为引言,概括介绍了比赛背景及本报告的结构分布。第二章为赛车系统整体介绍,概括了整个赛车系统的组成。第三章为路径识别系统设计,详细介绍了路径识别方法的确定,光电管型号的选定及确定排布方式。第四章主要为硬件电路设计,包括各个模块的电路设计及其功能。第五章为机械结构的调整。详细说明了智能车模机械部分安装及改造、电路板的固定及连接等,并对智能车模开发过程中的系统调试作了简单介绍。第六部分为控制算法及软件实现,详细介绍智能车模控制软件主要理论、算法说明及代码设计介绍等。第七章介绍我我们在调试过程中的一些调试实验,包括红外传感器探测效果实验,舵机转角实验等。最后为总结部分。

1

第2章 赛车系统整体设计

2.1 设计思想

本着简单、实用的宗旨,快速、稳定的目的设计了本系统。本智能车系统由单片机模块、电源模块、传感器模块、直流电机驱动模块等组成。其中,伺服电机由7.2v电源直接驱动。单片机核心电路采用的是组委会提供的MC9S12DG128B模块。电源模块完成对整个系统供电的管理。直流电机驱动模块实现对电机的控制驱动。红外传感器模块用来识别路径。单片机系统接受路径识别电路的信号,采用归一化方法进行寻线判断,进而控制转向伺服电机和舵机的工作。

2.2 系统整体框图

电机 后轮 PC机 测速部分 MC33886 MCU BDM 红外传感器 前轮 舵机 LM2940 TPS7350 7.2V 直流 图2.1 系统功能框图

2

第二章 赛车系统整体设计

2.3 整体电路设计原理图

图2.2 光电管原理图

图2.3 主体硬件部分原理图

- 3 -

第3章 路径识别系统设计

3.1 确定检测方法

在小车制作过程中,路径的识别方法的采用时很关键的一部分,它时小车的眼睛,直接影响车小车的速度及控制的实施。道路检测方式有很多中,总体可以分为两类:

(a) 红外检测方式。通过红外发光管发射红外线照射跑道,经过赛道反射回来后,由于白线和黑线吸收红外线的强度不同,不同位置上的红外接收管回接受到强弱不同的红外光,由此可以判断出黑线相对小车的位置利。此种方式电路设计比较简单,速度快,成本低,但精度较低,前瞻距离较短。

(b) 摄像头检测方式。单片机采集道路前面的路线,通过软件处理获取道路的各种信息。这种检测方法电路设计较复杂,软件计算量大,但时其前瞻距离比较大,采集到的参数比较多,控制精度比较高。

由于本次比赛组委会规定光电组和摄像头组分组进行比赛,我们选择红外检测方式来识别路径。

3.2 确定光电传感器

确定了红外检测方式之后,下一步的就是确定光电管的类型。主要由以下几个方案:

方案一: 可见光发光二级管与光敏三级管组成的发射-接收器。这种方案的缺点在于外界环境光源会对光敏三管的工作产生很大影响,很可能造成错误的定位;即使加大发光管的亮度也很难防止外界光的干扰。

方案二: 红外光发光二级管与光敏三级管组成的发射-接收器,将光敏三级管电流变化转变成电压变化信号,再将电压变化信号变成高低电平送至单片机。由于采用了红外光管代替可见光管有效防止了外界光源的干扰,输出信号为开关量有利于单片机对信号的处理;但是每对传感器只能输出两个信息量,在传感器数量和布局受到限制的条件下很难对黑线位置进行精确定位。

方案三: 红外光发光二级管与光敏三级管组成的发射-接收器,将光敏三级管电流变化转变成电压变化信号,再将电压信号送至单片机A/D转换口。这种方式不但有方案二的优点,而且传感器输出的是连续的模拟量,在一定的

4

第3章 路径识别系统设计

范围内可根据电压与黑线位置的关系曲线定位黑线的位置,所以通过这种方式可在传感器数量和布局受到限制的条件下对黑线位置进行精确定位。

经过方案的综合比较,我们采用了方案三,并采用TCRT5000一体化光电管。

该光电管外壳时由塑料聚碳酸酯材料制成,可以有效预防光色亮度干扰。TCRT5000原理图如下所示。

图3.1 TCRT5000原理图

3.3 光电管驱动电路设计

由于光电管长时间工作会有发热量大的缺点,对道路的识别有不小的影响,因此我们采用IRF540N的N沟道MOSFET管进行光电管驱动。MOSFET管具有自关断能力,而且驱动功率小,关断速度快等优点,是目前开关电源中常用的开关器件。

图3.2 硬件结构

图3.3 MOSFET管结构

- 5 -

第三届全国大学生智能汽车竞赛技术报告

我们采用PWM输出脉冲宽度来控制MOSFET管的通断。当PWM为高电平时,MOSFET导通,进而光电管导通(正常工作),当PWN为低电平时,MOSFET管关断,光电管不工作。而且,两排的光电管采用不同频率的PWM控制,从而达到分层次控制小车的目的。

加入MOSFET驱动不仅消除了光电管长时间工作发热量大的缺点,而且可以减小电源功耗。

3.4 红外传感器的布局

红外传感器安装方式在路径识别中的作用也不可小觑。传感器的安装一般要考虑下面几个问题。

(a) 一排安装还是两排安装。两排安装除了可以获取道路的中心位置,同时可以得到道路的方向信息,,但是它是以降低检测空间分辨率作为代价的。

(b) 排列的几何形状。一般用“一”字型排列,“八”字型排列及“W”型排列等。其中“一”字型排列是最常用的布局形式,即各个传感器都在一条直线上,从而保证了纵向的一致性,使其控制策略集中在横向上。“八”字型排列与“一”字型相似,但它增加了纵向的特性,从而具有一定的前瞻性。“W”型排列则能更好的预测弯道的出现。可见,八字型和W型比较一字型能更好的使智能车在加速及过弯道能力有所提高,但其控制算法相对比较复杂。

(c) 分布密度。红外传感器分布间距与道路中心线的宽度以及红外传感器距离地面的距离有关系,一般要满足传感器下面的道路中心线可以引起一个或者两个传感器相应为准。

(d) 传感器相对地面的高度与角度。这两个参数决定了检测道路的范围。传感器的高度以及相对垂直地面的角度越大,它的检测前瞻距离越远,同时检测道路的宽度也越大。

(e) 红外传感器的探出距离。这个距离是指传感器安装位置超出车模前端的距离。

起初,我们采用双排一字型安装的方法,其中后排传感器离地高度2.5 cm,探出距离4cm,传感器分布密度为2.5 cm,前排传感器离地高度为10.5 cm,探出距离为 14 cm,前瞻距离为20cm,传感器分布密度为2.5 cm.前后排传感器各有7个,共14个光电传感器。考虑到传感器距离地面的角度对检测距离的影响不是太大,其角度的安装困难等因素,我们后排采用了垂直地面的安装,前排使用了大前瞻安装。在进行一系列的试验后,综合考虑以上因素,对前排传感器进行了改造升级:采用更大功率的发光单管

- 6 -

第3章 路径识别系统设计

配合相应的接收管,以获得更远赛道的信息。

3.5 路径识别

图3.4 路径识别电路

上图中蓝色方框内为tcrt5000,其中 1 2 3 4 为管脚。上图电路的工作原理是这样的,发射管加电压vcc,二极管导通,发射管点亮发光,接受管足够多的接受由发射管提供的光后导通,由电路知识可知,当接收管导通时,引脚3输出高电压,反之输出低电压。对应跑道来说,当光电管正对黑色跑道时,由于黑色都光线的吸收能力强,相应接收管接受的光太少不足以使其导通,所以输出低电平,白色跑道时则为高电平,把3脚接入单片机的A/D转换引脚,经A/D转换,区分高低电平,从而完成对跑到的识别。

另外,需要对该电路说明的是两个电阻的选择(接收管和发射管相连的)。R1起到限流的作用,在实验中我们发现,R1越小,越有利于道路的识别,因为当R1较小时,流经二极管的电流比较大,能识别较远的距离,但电阻太小,发热又比较严重,甚至可以将管子烧掉,经过多次的实验计算,我们选择了50欧。R2则是要求较大值,电阻较大,相应对应的输出电压较大,黑白线对应的电压差值也就较大,有利于单片机的处理。

- 7 -

第4章 硬件电路设计

4.1 电源模块

智能车系统根据各部件正常工作的需要,对配发的标准车模用7.2V 2000mAh Ni-cd蓄电池进行电压调节。其中,单片机系统、传感器电路需要5V电压,伺服电机工作电压范围4.8V到6V,本系统采用6V供电,直流电机驱动模块使用7.2V 2000mAh Ni-cd蓄电池直接供电。

单片机和光电传感器都是用5V供电,考虑到光电传感器发光可能对单片机工作造成影响,我们用两片LM2940分别对其供电,增强了设备的稳定性。其原理图如图4.1所示。

图4.1 5V供电电路

舵机采用的是6V供电,我们采用了芯片TPS7350将7.2V电压降为6v。TPS7350是一种开关电源调节器,它以完全导通或关短的方式工作,通过控制开关的导通和截止时间,有效的减少了工作中的热损失,保证了较高的电源利用率,同时,它对来自电源的高频干扰有较强的抑制作用。其电路原理图如图4.2所示。

图4.2 6V供电电路

8

第4章 硬件电路设计

4.2 直流电机驱动模块

绝大多数直流电动机采用开关驱动方式。开关驱动方式是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。

图4.3 PWM调速控制原理和电压波形图

图4.3是利用开关管对直流电动机进行PWM调速控制的原理图和输入输出电压波形。在上图中,当开关管MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压 。 秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为0。 秒后,栅极输入重新变为高电平,开关管的动作重复前面的过程。这样.对应着输入的电平高低,直流电动机电枢绕组两端的电压波形如图4.3(b)所示。

电动机的电枢绕组两端的电压平均值 为:

tU?0t1 U0?1s?Us??Us (1)

t1?t2T式中?——占空比,??t1。 T由上述公式可知:当电源电压 不变的情况下。电枢的端电压的平均值 取决于占空比 的大小,改变 值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。

在本次设计中,直流电机的控制由单片机的PWM信号来完成,驱动芯片采用飞思卡尔半导体公司的半桥式驱动器MC33886。

MC33886是一款H桥式驱动器,采用MOTOROLA的SMARTMOS专

- 9 -

第三届全国大学生智能汽车竞赛技术报告

利工艺制造,将高密度/高速逻辑与精密的模拟和高压/大电流电源电路集成在一起,关键特性有内置限流、内置热关机、内置欠压关机、多种输出控制及负载状态指示等。此外,MC33886还具有鲁棒的内置保护、逻辑电平控制及通讯功能,有助于简化嵌入式系统设计、降低系统成本、提高系统的可靠性。

在本系统中智能车采用后轮直流电机驱动方式。下图为本系统的电机驱动电路原理图。由于赛车过程中不使用倒车,所以将两个半桥并联使用,以扩大芯片的驱动能力。

图4.4 MC33886电机驱动电路

4.3 舵机驱动模块

舵机控制模块采用组委会统一提供的HS-925舵机。舵机的控制电路接收来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵盘的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路搬,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。

舵机的控制信号为PWM信号,其中脉宽从0.5ms-2.5ms对应多盘的位置为-90°-+90°,呈线性变化。即给它提供一定的脉宽,它的输出轴就会保持在一个相应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置。

控制舵机的PWM波形的频率范围在50-200Hz,即输出PWM波的周期为20ms-5ms。舵机的偏转角度只与PWM波的脉宽有关,而与PWM的周期无关,但是PWM波周期愈短,信号刷新频率愈快,舵机的反应速度愈快。

- 10 -

第4章 硬件电路设计

4.4 测速电路

在测速模块中,我们采用了透射式的红外发收对管和自制的光电码盘,在满足要求的基础上,节约了成本用透射式红外收发对管可以方便识别光电码盘,其驱动电路如图10所示。在小车电机带动车轴转动起来时,固定在车轴上的码盘随之转动,当发射管发出的红外光透过光栅镂空的透光缝,接收管接收到光信号输出高电平。反之输出低电平,即在小车行驶过程中会产生一系列的脉冲,但由于外界干扰等因素影响,脉冲需进一步进行整形,然后才可以将此信号输送到单片机处理。我们利用一片CD40106整形,CD40106是14脚的六施密特触发器,它可以将任意波形整成方波。其引脚图如图4.6所示。通过检测脉冲周期就可以计算出智能车模当前的速度值。

图4.5 透射式红外收发对管驱动电路

VCCR1100U1OPTOISO1R2120KFLP

图4.6 CD40106引脚图

转动车轮一周可使法兰盘产生40个脉冲,如图2.20所示。每产生一个脉冲车轮转动的角度是:

360 / 40 = 9(度);

智能车模车轮的直径是50mm,车轮每转一圈,智能车模行走的距离是:

2πR=2*3.14*(50/2)= 157(mm);

- 11 -

第三届全国大学生智能汽车竞赛技术报告

每一个脉冲智能车模行走的距离应该是: 157 / 40 ≈ 3.93(mm) ;

通过上面计算,3.93mm就是记忆路况的最小精度。通过估算智能车模速度不会超过3m/s,也就是说一个脉冲的周期最小也是3.4ms,足以让单片机记忆下脉冲个数和每个脉冲下的舵机驱动信号和当时的速度,这三个量也是记忆算法中及其重要的参数。

车速:V?(n?1)?D; (2) tC(n?1)?D; (3) C路程:S?其中n为单片机读入的脉冲数,D为后轮直径,t为采样计时时间, C=20为遮光板上栅格数。

4.5 无线通讯模块

为了能及时了解小车的行驶情况,实时采集我们所需要的数据,我们在调试过程中采用了嵌入式无线通讯模块WAP200B与PC通讯。WAP200B具有 TTL接口内置有高性能CPU,可实现前向纠错处理,可以通过软件调整接口的波特率和串口接口模式。 其实物图为图4.7所示。

图4.7 通讯模块实物图

- 12 -

第5章 机械结构调整

5.1 车体整体机械安装与调整

本小车本着稳定及实际用途为原则,除主工作电路外,小车后轮处安装了光电盘,用于小车速度的测量,在后轮上方安装了测速电路模块。为提高舵机的响应速度,我们还改变了舵机的安装方式。

5.2 车体各部分安装

车体的安装主要包括测速部分、光电部分、舵机部分及电路主板的安装。

5.2.1 测速部分安装

测速传感器的结构图下图所示所示,光电开关采用鼠标上现成的沟槽光电开关,此光电开关的光电管是经过配对的,性能比较好,电路参数也好调整。

码盘上开有40个大小和间距相等的缝隙,转轴每转动一周光电开关输出20个周期的信号,为了提高单位速度下的脉冲数,将码盘固定在转速最高的电机轴上。光电开关用一小块板子固定在码盘上方。

图5.1 测速模块实物图

13

第三届全国大学生智能汽车竞赛技术报告

5.2.2 光电部分安装

我们采用了双排光电管检测道路信息,两块板子一前一后,一上一下,通过在小车前端钻孔用螺丝将板子固定,具体见下图。

图5.2 光电管安装图

5.2.3 舵机部分安装

舵机通过一对连杆分别连接两前轮内侧固定点,通过两连杆在舵机转动力带动下的横向运动来控制两车轮的转向,安装要注意的问题是是调整好两连杆的长度,使得两前轮保持平行并且使得舵机在零转角时车轮方向亦为零转角。保证两前轮的旋转平面在平行与车体的中轴线,确保直线行驶。为提高响应速度,我们的小车采用了立式安装的方法。 5.2.4 电路主板的安装

为了便于接线方便简洁及故障的的检测,我们电源模块,电机驱动模块等坐在了一个板子上,并在板子钻了三个孔,把这三个孔用螺丝帽加紧即可将板子固定。单片机固定此板子之上,如图5.3所示。

- 14 -

第5章 机械结构调整

图5.3 电路主板图

- 15 -

第6章 控制算法及软件实现

6.1 总体控制流程图

开始 初始化设置 数据采集,速度检测 数据处理 第一圈采集值存入RAM中 舵机PID角度控 机速度控电图6.1 总体流程图

6.1.1 程序初始化

(a) 记忆初始化。记忆算法使用了图像处理的图像形态学方法,需要

使用大量数组存储数据和处理数据。所以我们先将所有的记忆相关的腐蚀数组与膨胀数组以及处理得到的数据数组等进行初始化。

(b) 时钟初始化。锁相环技术可以提高单片机的工作频率,从而提高单片机的运行速度。在安全允许范围内,我们使用锁相环超频到48MHZ。

void CLK_init(void){ SYNR=2; REFDV=1; while(!(CRGFLG & 0x08)){}

CLKSEL=CLKSEL_PLLSEL_MASK; }

其中PLL=2*OSC*(SYNR+1)/(REFDV+1)。

16

第6章 控制算法及软件实现

(c) PWM初始化。单片机的PWM模块有8 路独立的可设置周期和占空比的8 位PWM 通道,每个通道配有专门的计数器。我们利用其中的6路。该模块有4 个时钟源,能分别控制8 路信号。通过配置寄存器可设置PWM的使能与否、每个通道的工作脉冲极性、每个通道输出的对齐方式、时钟源以及使用方式。

为了提高控制精度,将PWM0、PWM1 两路8 位通道合并为一个16 位通道来控制舵机,PWM4与PWM5来控制电机转速,PWM2与PWM3分别作为两排的光电驱动。PWM 模块的初始化设置过程为:

void PWM_init() {

PWMCTL_CON01 = 1; // PWM01 合并 16 bit

PWMPRCLK = 0x20; // A=24M/1=24M,B=24/4=6M PWMSCLA =12; // SA=A/2/12=1M

PWMSCLB =150; // SB=B/2/150=20KHz

PWMCLK = 0x3E; // PWM0,1-SA;PWM4,5-SA,PWM2,3-SB; PWMPOL = 0xff; // 位极性=1 Duty=High Time PWMCAE = 0x00; // 对齐方式-左对齐 PWMPER01 = 20000;

PWMDTY01 = AngleMid;

PWMPER4 = 100; //Frequency=SA/300=10KHz PWMPER5 = 100; //Frequency=SA/300=10KHz PWMDTY4 = 50; PWMDTY5 = 50;

PWMPER2 = 30; //Frequency=SB/50=400Hz PWMPER3 = 30; //Frequency=SB/50=400Hz PWMDTY2 = 6; PWMDTY3 = 6;

PWME = 0x36; // 舵机enable for(i=0;i<8;i++){ //5ms 8 for(j=0;j<1300;j++){ asm\ } }

PWME|=0x08; }

- 17 -

第三届全国大学生智能汽车竞赛技术报告

(d) SCI串行口通信初始化。SCI串行通信接口是一种异步串行通信系统,它内置独立的波特率产生电路,可以选择8或9个数据位,发送和接收位可以选择是否由硬件生成。初始化设定如下:

void SCI_init() {

SCI0BD = 161; /*设置波特率约为9600 bit/s*/ SCI0CR1_LOOPS = 0; /*正常工作使能*/ SCI0CR1_SCISWAI = 0 ; /*SCI等待模式*/

SCI0CR1_RSRC = 0 ; /*接受器输入内部连接到发送器输出*/ SCI0CR1_M = 0 ; /*1个起始位,8个数据位,1个停止位*/ SCI0CR1_WAKE = 0 ; /*空闲线唤醒*/

SCI0CR1_ILT = 0; /*在一桢数据开始后立即对空闲特征位记数*/ SCI0CR1_PE = 0 ; /*奇偶校验禁止*/ SCI0CR2 = 0b00001100 ; }

6.1.2 光电数据采集

AD模块主要是用来采集模拟信号的AD值,并把它存入到寄存器当中,其中主要涉及到的内容主要有AD模块的时钟预分频,AD的通道选择,以及AD的数据寄存器的内容读取。相关代码如下:

void AD0_init(void) {

ATD0CTL2 = 0xC7 ;//控制寄存器:上电,标志位快速清零,开中断 ATD0CTL3 = 0x38; //控制寄存器3:转换序列长度为7,FIFO模式 ATD0CTL4 = 0x80; //控制寄存器4:8位转换精度,16分频 ATD0CTL5 = 0xB0;

ATD0DIEN=0x00; // 禁止数字输入缓冲 }

6.1.3 速度信息采集

我们采用模数计数器来计算上升沿个数继而计算车速.利用MCCNT和预分频器为数模计数器提供定时常数与时钟信号。设计程序如下:

void Speed_init(void){ asm sei;

ICSYS=0x03; //缓冲、锁定模式 TIOS=0x00; //Timer Input Capture

- 18 -

第6章 控制算法及软件实现

TCTL4=0b00000011;//PT0:Capture on rising edges only ICPAR_PA0EN=1;// 8-Bit Pulse Accumulator PT0 Enable DLYCT=0x11; //Delay Counter Control Register PulseCnt=0;

MCFLG_POLF0=0; MCFLG_MCZF=1; MCCTL=0xCF;

MCCNT=30000;//20ms

EnableInterrupts; }

#pragma CODE_SEG NON_BANKED #pragma TRAP_PROC void MDC_ISR(void) { SpeedTmp=PACN0; Speed=SpeedTmp; MCFLG_MCZF=1; PulseCnt+=Speed; SpeedCtrl();

}

#pragma CODE_SEG DEFAULT

6.1.4 赛道判别

给出光电管采集数据的高低阈值,对A/D转换得到的数据进行归一化处理,根据处理的结果就能算出小车中心线相对位置。由前后两排得到的相对位置就能算出小车目前相对于赛道的角度,从而确定小车的姿态。也就是说,在得到相对偏差的同时,也能得到角度值。这也是单排检测时不能做到的。如果在通过某些弯道时速度过快,赛道中间的黑线可能不再在路经检测传感器的搜索范围中时,我们采取的措施是保持上一个状态,这样能把赛车以最大转角修正回赛道,使黑线重新回到路经检测传感器的搜索范围。而且我们只对设定好的方位状态进行处理,其他的均视为无效状态,例如表示左转右转的状态同时出现,这在正常情况下显然是不可能的,这有可能就是赛道中的干扰,这时就会保持上一次的有效状态运行从而避免干扰。

- 19 -

第三届全国大学生智能汽车竞赛技术报告

6.2 赛车控制策略

6.2.1 路径信息采集处理方法

由于我们使用的是记忆算法,因此路况信息的采集对赛车的速度就显的额外的重要。我们主要在第一圈完成路况的采集,用于第二圈的加速。

在第一圈,我们组采用1.4m/s的匀速跑完全程,将赛道的长度记为脉冲数。同时记录相应的转角值,并经过数字滤波处理。数字滤波使用的是图像形态学滤波器。

经过反复测验我们已经能够方便地从初圈记录下的曲线图中判断出赛道的特征,这样,第二圈就可根据此信息进行相应的最优决策。 6.2.2 舵机转向控制算法

第一圈的舵机转向使用PD控制,由于P 环节与转向的准确性和快速性相关, D 环节与转向的快速型相关。我们只采用了PD控制就满足了要求。通过不断改变P、D 参数进行实验,得到最理想的转向响应速度的一组参数。我们选择合适的参数,可以使得在高速时车保持很高的稳定性,从而大大消除由于传感器带来的误差。

第二圈的角度控制主要利用了第一圈所记忆的路况信息,包括入弯点,各弯道的半径,长度以及转向等信息;在初圈记忆后,赛车跑第二圈时可以直接得出下个弯道是左拐还是右拐。这样赛车就可以按比规定更小的曲率半径通过赛道,从而减少了经过路径,也节约了时间。由于记录了赛道信息,可以方便小车在入弯时提前减速,出弯是提前加速。 6.2.3 速度控制算法

第一圈只给小车以匀速运行,而第二圈根据第一圈记录的数据信息,对第二圈的各个道路点进行分段处理。由于车本身的某些局限性,如舵机响应时间、赛道摩擦系数、轮胎抓地力、传感器布局等因素的影响,对于某种特定弯道,车是有它所谓的极限速度存在。如果我们利用初圈得到弯道的信息,在过各弯道时将车速调至它相应的极限速度,那么理论上这就是它所能跑出的最优成绩了。对于直道,特别是长直道,更能发挥赛道记忆算法的优势。例如,在初圈记忆后得到某段直道为1600个脉冲点长,那么在决策中就可在前1500个脉冲时启动电机用最大占空比加速,超过1500脉冲时直接减速,将速度调在下一个弯道的极限速度进行过弯。由于事先已经知道直道的长度,因此调速策略更能有的放矢。

- 20 -

第6章 控制算法及软件实现

6.3 起跑线识别

起始线就是比赛的开始线,当车模第一次经过时开始计时,第三次经过时比赛完成。车模跑完两圈后,应该停下来。

起跑线与十字口的区别就是两边的黑线并没有同中间的黑线完全连接,而是有一段距离,识别起跑线的任务就是要识别这一段空白,使之与十指交叉线区分开来。要检测中间的空隙就要合理排布红外收发管的间距,让车模通过起始线时能够出现黑线之间夹杂着白隙。而且绝对不会出现全部红外收发管都检测到黑线。

如果正向通过起跑线,两侧有能检测到黑线而中间能检测到白线。因为赛道中间的黑线宽25mm,而且我们使用红外线连续性检测赛道中心线的偏差,因此我们取两管间距为25mm。

如果倾斜经过起跑线,有一边的边上的光电管会先检测到黑线其余的都为白线,这样会控制舵机向那边偏转,从而会检测出起跑线。部分程序如下:if(StartNum>=3){

for(i=PreS;i>=0;i--){

if(ADData[1][i]>Thr[i]) for(j=i;j>=0;j--){

if(ADData[1][j]

if(ADData[1][k]>Thr[k]){ for(r=k;r<7;r++){

if(ADData[1][r]

6.4 数学形态学理论概述

为叙述方便, 先把腐蚀和膨胀运算的理论算法概述如下:

设用ζ表示二维离散的欧几里德空间, 图像A 是ζ 的一个子集, 结构元素B 也是ζ的一个子集, b∈ζ是欧氏空间的一个点, 定义如下两个概念。

定义1:Ab 定义为图像A 被b 平移后的结果表示为:

- 21 -

第三届全国大学生智能汽车竞赛技术报告

Ab={a+b|a?A} (5) Ab 中所有元素是A 中的对应元素平移到以b 为原点的坐标系内的结果。

定义2:A 定义为图像A 对于图像原点的反射结果, 表示为:

___

___

A={-a|a?A} (6)

根据上述定义1 和2, 可以定义数学形态学中的两个基本运算: 腐蚀和膨胀。

定义3 :腐蚀运算定义为:

A?B={x|b+x?A, b?B}, (7) 定义4 :膨胀运算定义为:

A?B={a+b|a?A, b?B}?Ab。 (8)

由式(1)和式(2)可以引出形态学开运算、闭运算的定义:

A?B?A?B?B (9) A?B?A?B?B (10) 式中?为开运算;?为闭运算;

形态学的开闭运算可理解为基本的滚球变换,“球”的形状由结构元素决定。其轨迹是光滑的,开运算使目标轮廓光滑,去掉毛刺和孤立点,锐化了角,以抑制数据中的峰值噪声;闭运算则填平了小沟,弥合了空洞和裂缝,以滤除信号中的低估噪声。

利用开运算和闭运算的特殊性质,可以组合一定功能的滤波器,Maragos采用开闭运算的不同级联方式构造了形态开-闭(Open-Closing)和形态闭-开(Closing-Open)滤波器。分别定义如下:

CO?A?B?B (11) CO?A?B?B (12) 用互补的形态算子OC和CO通过它们的平均值,可以构造线性组合滤波器。其定义为:

y?1(OC?CO) (13) 2 根据形态学原理我们编写了组合滤波器的相关程序。并进行了调试,图6.2中红色曲线为原始数据,蓝色曲线为处理后的数据。从图可以看出,数字组合滤波器在过滤尖峰毛刺方面有相当强,但是在上下降沿处理方面有所欠缺,所以我们对数据进行了二次滤波。

- 22 -

第6章 控制算法及软件实现

图6.2 OC-CO组合数组滤波器效果图

- 23 -

第7章 智能车调试

在智能车调试的过程中主要采用的开发工具是清华大学开发的BDM for S12,调试软件采用了Codewarrior4.6,以及数字示波器、万用表等试验设备。

智能车调试总共有二个阶段,第一个阶段,调试自行开发的硬件电路板和各个子程序、主程序;第二阶段自制了不同跑道调试智能车的速度和转向性能等,根据试验,修改软硬件。

7.1 软硬件调试

首先对设计的电源电路、采样电路、直流电机驱动电路等硬件电路板进行调试。

在软件设计中,需要用到定时器模块、ATD模块、PWM模块等。在编写主程序前,应该先对各模块分别进行调试,编写各个部分子程序。

在每一部分子程序调试通过后,结合外围电路对所有子程序进行整合,根据小车工作原理,编写出完整的主程序。在Codewarrior 4.6界面完成程序编译后,通过BDM工具,将程序下载到MC9S12DG128B微处理器中,然后进行小车的调试。

7.2 智能车工作模块调试

7.2.1 传感器及外围电路的调试

反射式红外传感器的调试分为机械调试和电路调试。机械调试的主要任务是保证传感器组位于小车的最前端,并与地面保持合适的距离。电路调试过程是找出合适的阻值,使检测电路工作在最佳状态,并使各个传感器的电压输出值均保持在一定值附近。我们对红外传感器进行了测定,并进行了记录,如图7.1所示,经过多次试验,我们得出的结论是红外传感器在3cm高度的时候最稳定,抗干扰能力最好。

7.2.2 舵机的调试

调试舵机必须得出不同PWM值下对应的转角关系,为此,我们设计了专门的舵机测试电路,编写了专门的舵机调试程序,用按键控制PWM值,

I

并在LCD中显示,图7.2 就是我们经过反复实验测得的PWM与转角关系图。

图7.1 不同阻值下高度(mm)与电压(v)的关系图

图7.2 舵机转角与PWM的关系图

7.2.3 直流电机的调试

舵机和传感电路调试完成后,将直流电机接入电路,先不将小车放到跑

- II -

道上,在白纸上稍微将后轮悬空,用黑线在下面移动,用示波器观测电机两端的PWM信号是否按要求改变,确认无误后可以拿到跑道上进行试车。让小车在一段直行道行驶后,进入一曲率半径为最大值的曲线。反复试验,得出保证小车不驶出轨迹的最大占空比。由此计算得出直流电机的最大转速,此后的软件控制过程中须保证直流电机的转速不大于此值。 7.2.4 整体调试

各部分子电路调试结束后,对小车整体进行调试。先令小车以某一较低的速度行进,通过弯道时保证有较合适的舵机转角。在舵机转角调试过程中得到的经验值基础上进行修改。利用软件对参数进行修改,提高小车直流电机的转速和修改舵机转角。如此反复进行,直到得到较为合理的经验值。先让小车行驶稳定,在此基础上逐渐提高小车速度。

此外,小车由直道渐入弯道时,为防止小车速度过大因惯性作用冲出车道,需要在此时对直流电机进行减速。找到临界速度,看超过多大速度小车易于冲出跑道,积累一些经验值。

7.3 实道调试

如图6.2所示我们搭建了一个简单的赛道。

图6.2 调试赛道

赛车的行驶性能和很多因素有关因此需要进一步的实道调试: (a) 外部因素

外部因素主要指外界干扰对光电传感器的干扰,由于我们使用光电传感器紧贴赛道因此很大程度上减少了干扰,而且光电管采用红外光电管,只对940nm波长附近的光线有动作,因此赛车的抗干扰能力很强。通过测试在开灯、黑天、白天以等情况探测器还是能正常工作。

III

(b) 重量因素:

重量因素是影响赛车性能一个很重要的因素。赛车重量较重时可以带来轮胎较好的贴地能力,可以防止侧滑,但是带来的负面影响更多。首先 重量大意味着惯性的增大,因此加、减速时所花费的时间就更长;其次,大重量的赛车在弯道的转弯不会非常迅速。因此赛车的重量应该越轻越好。我们车减少了多余的模块,并将重心前移,降低底盘等调整来使车子的加减速更加灵活。

(c) 光电探测器伸出车体长度因素: 赛车本身是一个纯滞后系统,在赛车跑的过程中,存在比较大的滞后。包括电机的加减速有很大的滞后,舵机的转向也有很大滞后,因此越能提前对赛道状况进行判断就越能更好的抵消这种滞后。由此看来,传感器的前瞻越大响应越好。但是比赛对车长有限制,而且车体过长,会引起转弯带来的车体超出赛道部分过多。传感器部分的重量会以前轮为支点,根据杠杆原理使后轮的受压减小,从而降低赛车的机动性能。经多次试验,发现转弯时超出赛道部分的车体的长度并不会明显因为探测器伸出车体而增加。为达到最大的前瞻,我们把前排光电管架在车体前14cm处,效果比较理想。

(d) 速度设定值的确定:

依照我们调试的经验,赛车恒速运行往往能取得比较好的效果,赛车行驶时理想的速度应该是恒值,但赛车在弯道时把一部分驱动力通过摩擦消耗掉,因此在弯道时即使设定速度不变赛车还是会减速,减速的程度取决于转弯的程度。因此在弯道为了使赛车仍然保持恒速就需要增大速度设定值。我们的设计中让速度设定值随转弯的程度越大而线性增大。通过观察,弯道速度没有出现明显的下降。

(e) 刹车的目的是使赛车在入弯时能有效减速,而且不能影响赛车在直道和弯道的速度。所以刹车的要求就比较严格,也就是说,必须在条件满足时进行刹车。

赛车的调试没有明确的参数,因此只能通过观察特征赛段的赛车行驶状况来不断改进。直道、S型弯、干扰线这三个特殊地方的性能提高意味着赛车整体速度的提高。

调试时开始我们以1、4m/s的匀速,完成整个赛道的记忆。然后在第二圈加速,经测试在直道的速度可达到2.2m/s,弯道的过弯速度经调整达到1.8m/s的极限速度。

- IV -

7.4 模型车的主要技术参数说明

项目 参数

路径检测方法(赛题组) 光电 车模几何尺寸(长、宽、高)(毫米) 380*186*87 车模轴距/轮距(毫米) 124 车模平均电流(匀速行驶)(毫安) 1040

电路电容总量(微法) 1600 传感器种类及个数 光电管,15个 新增加伺服电机个数 0个

赛道信息检测空间精度(毫米) 5 赛道信息检测频率(次/秒) 400 主要集成电路种类/数量 两片MC33886, 两片IRF540N等

V

LM2940 两片

总结

经过将近7个月的设计调试,我们的“东秦光电”终于如期制作完,速度控制等方面基本达到预期的效果。经过这段时间的磨练,从硬件电路开始,搭建试验传感器,机械加工,无数次的改革我们的算法,总算走到了最后, 在这个过程中我们不断地发动我们的大脑来想好主意,不断地学习遇到的新知识,这次竞赛不仅对我们的综合能力的培养,也是对我们吃苦耐劳的精神的一种考验。

当然,我们的小车还存在不足,例如检测距离不是太远,速度不能足够快,当鉴于时间限制,我们不能做到十全十美,希望在下次比赛中能够考虑的更周全,做的更好。

- VI -

致谢

首先要感谢竞赛的主办方,能够给我们提供了这样难得的科研实习的机会。经过这次比赛,我们成长了许多,不仅仅是知识上的拓展,更为重要的是在这期间培养了我们坚韧的人格和积极的科研态度和面对困难的态度。

衷心感谢我们的指导老师。在我们整个竞赛期间,老师们牺牲了自己的节假日,牺牲了自己的业余时间,在实验室给我们进行详细的辅导,有时为了解决一个问题,晚上10点多还和我们呆在实验室,我们被老师们渊博的知识,严谨的科学态度,求实创新的科学精神所感染,不仅仅是这次竞赛,而且对我们今后的人生和科研道路打下了牢固的基础。

最后还要感谢学校对我们的巨大支持,为了这次比赛,学校投入了大量的资金,校领导多此来到实验室,给我们以莫大的精神和物质支持。

竞赛结束了,可我们人生路才刚刚开始,有了这次痛并快乐的经历,有了这次与困难拼杀的过程,我们相信我们以后的人生路会少很多的坎坷。向所有为这次竞赛付出的老师致敬!

VII

参考文献

1 2 3 4 5 6 7 8 9

王广雄. 自动控制系统设计. 宇航出版社. 1986. 李友善. 离散系统理论. 国防工业出版社. 1981. CRG Block User Guide V02.07 S12CRGV2/D.

HCS12 Inter-Integrated Circuit (IIC) Block Guide V02.07 S12IICV2/D. PWM_8B8C Block User Guide V01.16 S12PWM8B8CV1/D.

黄永庆. 基于CCD摄像的视觉跟踪误差信号提取[J]. 广西大学梧州分校学报, 2005, 15(4): 97~101.

李绍民, 刘任平. 全自主足球机器人视觉系统的方案分析与比较[J]. 微计算机信息, 2004, 20(9): 60~61.

齐国清, 胡晓初. 线形CCD高速图像采集与处理系统[J]. 大连海事大学学报, 2004, 30(3): 65~68.

解丽华. PID过程控制及其参数整定[J]. 科技情报开发与经济, 2006,16(5): 169~170.

10 宋士伟, 陈惠岩, 席军强. 基于模糊PID的遥控转向技术[J]. 汽车科技, 2006. 11 邵贝贝. 单片机嵌入式应用的在线开发方法. 北京: 清华大学出版社, 2004. 12 杨琨 数学形态学腐蚀膨胀运算的快速算法[J] 计算机工程与应用2005,34. 13 袁兆强 数学形态学滤波器在行波保护中的应用仿真研究[J].自动化技术与应用

2007,26(8).

- VIII -

附录1

#include /* common defines and macros */ #include

#include /* derivative information */ #pragma LINK_INFO DERIVATIVE \#define n 7 //AD传感器个数 #define m 10//堆栈大小 #define DEBUG 1

#define ThrE 15//E死区 #define _ThrE -15//E死区 #define NumSet 60000 //#define Threshold 1

#define MEMORY 1 //#define SPEEDTEST 1

unsigned char MIN[2][n]={{50,70,70,60,60,50,50},{80,80,80,80,80,80,70}}; unsigned char MAX[4][n];

unsigned char ThrRamp[n]={110,110,110,110,110,110,110}; unsigned char Thr[n]={100,100,110,100,110,110,110}; unsigned char Temp;

unsigned char BIT[8]={1,2,4,8,16,32,64,128};

unsigned char S[10]={10,7,11,10,10,10,10,10,10,10}; char MAngle[m]={0}; //记忆数组 char Morph[2000]={0};// char Erosion[m]={0}; //腐蚀 char Dilation[m]={0};//膨胀 char Open[m]={0}; char Close[m]={0}; char OD[m]={0}; char CE[m]={0};

//标志位

unsigned char SCIflag=0;//SCI communication flag unsigned char ADNew[2];//AD数据更新标志

unsigned char Loop=0,Loopflag=1;//圈数以及循环标志

IX

unsigned char flag=0;

unsigned char DetNum_F=0,DetNum_R=0; unsigned char White=0; unsigned char Acc=0; unsigned char Startflag;

unsigned char Adjflag=0,Speedflag=0,Erflag=0,Eflag=0; unsigned char unAdj1=0,unAdj2=0; unsigned char KD=0;

unsigned char MorNum;//开闭运算标志 unsigned int *Lenhead; unsigned int *Lenend;

unsigned int *Lhead; unsigned int *Lend;

unsigned int RtiNum=0,time=0; char *Mhead; char *Mend;

char *Erhead;//腐蚀数组头部 char *Erend;//底部

char *Dihead;//膨胀头部 char *Diend;//底部 char *Ophead; //开运算 char *Opend; char *Clhead;//闭运算 char *Clend;

char *OpAddr; //开指针 char *ClAddr; //闭指针 char *OChead; char *OCend; char *COhead; char *COend;

int LastE_R[41]={0}; int LastE_F[10]={0}; int *E_Rhead;

- X -

本文来源:https://www.bwwdw.com/article/31yg.html

Top