华南赛区光电组中南民族大学雷电号技术报告.docx
- 文档编号:12146917
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:31
- 大小:1.61MB
华南赛区光电组中南民族大学雷电号技术报告.docx
《华南赛区光电组中南民族大学雷电号技术报告.docx》由会员分享,可在线阅读,更多相关《华南赛区光电组中南民族大学雷电号技术报告.docx(31页珍藏版)》请在冰点文库上搜索。
华南赛区光电组中南民族大学雷电号技术报告
第九届“飞思卡尔”杯全国大学生
智能汽车竞赛
技术报告
学校:
中南民族大学
队伍名称:
雷电号
参赛队员:
雷达乐彭康林学君
带队老师:
张俊敏陈勉
关于技术报告和研究论文使用授权的说明
本人完全了解第九届“飞思卡尔”杯全国大学生智能汽车邀请赛有关保留、使用技术报告和研究论文的规定,即:
参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:
带队教师签名:
日期:
第一章引言
为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托(教高司函[2005]201号文,附件1),由教育部高等学校自动化专业教学指导分委员会主办全国大学生智能汽车竞赛。
我校为响应教育部的号召,积极组队参加第九届“飞思卡尔”杯全国大学生智能汽车竞赛。
在老师与学长的指导下,我们集继承与创新于一体,设计理念的不断进步,制作精度的不断提高,最终设计出一套完整的智能车开发、调试平台。
作为光电组的中南民族大学雷电号秉承简洁美观的优良传统,采用轻质量、低重心的机械设计。
在前瞻距离、噪声抑制、驱动优化、整车布局等方面加强研究创新,最终使智能小车获得了良好的综合性能和赛场表现。
本文将对智能车的总体设计和各部分的详细设计进行逐一介绍。
第二章智能车整体设计
赛车共包括五大模块:
道路检测传感器模块、起始线检测模块、K60模块,电机驱动模块,电源管理模块。
道路检测传感器模块:
由于我们沿用上一届的传感器,我们的传感器是从蓝宙买的CCD模块,为了保证车体布局的可实现性,我们采用如下图的布局方式,今年我们用了两个CCD架设在一个杆子上面,这样有利于道路的识别和算法的调整,如下图
起始线检测模块:
我们的起始线检测是用的自己做的模块,采用采用三个红外对管共同检测起始线。
K60模块:
我们的K60是买的龙丘的模块,自己开始的时候也做过K60模块,但是用的时候觉得不稳定,就用了龙丘的K60模块。
电机驱动模块:
我们电机驱动用的是BTS7960芯片进行驱动的。
2.1车模简化改装
1)固定车模底盘与支架
原有车模为了减轻后轮振动对于车体的影响,后轮的支架与底盘之间采用了活动连接方式。
但是,为了保证车模车体稳定性,以及转向的稳定性,需要将原有车模底盘与后轮支架固定在一起。
最简便的方式就是可以使用PCB版在后轮支架与底盘之间的缝隙处进行粘接。
这样后轮与车体之间形成一个刚体,再通过AB胶的粘结,就会让车体牢固。
2)去掉后轮,准备安装编码器
拆装后轮可以使用原车模配备的十字套筒扳手。
在安装测速传感器之后,再将两个后轮重新安装在后轮支架上。
3)加固电机引线
E车模的后轮电机引线管脚非常单薄,多次晃动之后极易从根部折断,造成电机无法使用。
因此,我们直接使用热熔胶对电机引线管脚进行封装固定,起到保护电机引线的作用。
2.2传感器安装
车模中的传感器包括有:
红外对管与陀螺仪,以及CCD的安装。
下面分别介绍这些传感器的安装。
2.2.1红外对管与陀螺仪安装
为了提前且能准确的识别起始线,我们将红外对管与陀螺仪模块安装在车体的最前方。
如图2.4所示。
图2.4起始线检测模块
2.2.2CCD传感器安装
我们用的是蓝宙的CCD,我们将CCD共同架设在一个杆子上面,一个看远一个看近,这样有利于提前判断人字玩到以及障碍,有利于赛道的识别以及处理。
但是我们在CCD的固定上花费了很多的时间,总是找不到合适的东西固定CCD,以前摄像头的支架觉得太重了,我们一直在寻找比较轻比较好安装的支架,最后都没有找到,我们就用一片铝合金支架脚一段碳素杆做了个简易的支架来固定CCD。
2.3其他机械结构的调整
1为提高小车的稳定性,我们尽量做到使小车重心降低,但由于今年的坡道比较陡,缓冲的赛道比较短,因而我们对车子的底盘做了抬高处理。
2我们都知道,处于对打角灵敏度的考虑以及安装简易程度的考虑,舵机的安装方法分为立式跟卧式两种,处于综合的考虑,我们的舵机采用了立式的装法。
第三章传感器选择和布局
我们选择的是蓝宙做的传感器模块,现在就来简单讲述下线性CCD和其使用方法。
本文不再讲述线性CCD基本原理,基本原理大家可阅读芯片手册,本文重点介绍使用线性CCD时需要考虑的一些问题及注意事项,并给出了参考解决方案。
旨在让大家更有效地使用和深入研究TSL1401线性CCD模块。
3.1环境光影响问题
试验表明TSL1401线性CCD的输出信号和环境光线密切相关,在自然光条件比晚上灯光下AO引脚输出电压值高出很多,正对着光线比背着光线输出电压高,白炽灯光下比日光灯下输出电压高。
因此,同一参数(曝光时间、镜头光圈)难以适应各种环境,在光线较弱环境下的参数在强光下会出现输出饱和,在强光线下调节好的参数在弱光下输出电压过低,甚至处于截止状态。
在智能车应用中,白天自然光环境和晚上灯光环境、正对光和背光、不同的比赛场地之间都不能采用相同的曝光参数。
与输出电压密切相关的参数是曝光量,曝光量取决于CCD模块所采用的镜头光圈大小和程序所控制的曝光时间。
智能车为适应各种运行环境,必须实时感知环境,并根据环境闭环调节曝光量,使得在不同环境中曝光量都处于一个合理的范围,这样才能保证在不同环境中CCD输出电压在合理范围,以利于算法提取黑线信息。
镜头相关参数一旦选定在智能车运行难以改变,曝光时间比较容易通过程序控制,因此比较容易实现的调整曝光量方法是通过软件调整曝光时间。
3.2输出信号放大
可以通过调整曝光时间来适应各种环境,在弱光环境增大曝光时间,在强光下减小曝光时间。
但是曝光时间不能无限增大的,因为增大曝光时间势必降
低采样率(每秒采样次数)采样率低控制周期就长,智能车反应就慢。
根据历届摄像头车参赛经验,1米的前瞻,3.5m/s的速度情况下,控制周期不得高于20ms(采样率不得低于50Hz),否则智能车转向机构反应再快也无法很好跟随赛道而冲出赛道。
控制周期不高于20ms就意味着曝光时间不能超过20ms。
试验时,我们将TSL1401线性CCD曝光时间调整到20ms(采用周期20ms),分别在强光、弱光、灯光不同环境进行采用,采样数据表明环境光线较弱时CCD输出信号较低,以致赛道黑线信息不够明显,晚上日光灯环境下输出信号电压值更低,几乎接近0,根本无法辨别赛道信息!
由于智能车制作和调试很大部分时间都是在晚上,因此必须在不降低采样率的情况下,增大晚上弱光环境下线性CCD的输出电压。
要增大输出电压,简单有效的方法就是放大输出信号,我们可以采用运放来放大AO输出信号。
蓝宙电子实践表明增大运放能非常有效的解决弱光时输出电压低问题,在晚上环境同样能达到50Hz的采样率,这是无运放的线性CCD无法达到的。
为了能保证输出电压在合理范围(不饱和、不截止、能分辨赛道黑线),需要根据选定的镜头确定运放放大倍数。
以下是我的线性CCD模块(镜头为无畸变镜头)中的运放电路图:
其中运放放大倍数A=1+R5/R4,此电路中A=11,也就是对TSL1401的AO信号进行11倍放大。
由于增加了运放,白天环境下的采样率可以调节到更高,甚至可以达到100Hz。
增加了运放也会带来一个问题,就是在全黑的环境(例如盖上镜头盖)下线性CCD的输出已经不再接近0V,这里我们称全黑的环境对应的电压为暗电压,CCD模块暗电压是1V左右。
其实暗电压完全不影响上层软件提取赛道黑线,我们可以把这个暗电压当做信号中的直流分量,将采集的每个像素点的电压减去暗电压就可以了。
第四章硬件电路模块设计
4.1K60控制器模块
整个系统的核心控制采用Freescale的K60型号32位单片机,3.3V电压供电。
K60微控制器系列具有以下性能:
IEEE1588以太网,全速和高速USB2.0On-The-Go带设备充电探测,硬件加密和防窜改探测能力。
丰富的模拟、通信、定时和控制外设从100LQFP封装256KB闪存开始可扩展到256MAPBGA1MB闪存。
大闪存的K60系列器件还可提供可选的单精度浮点单元、NAND闪存控制器和DRAM控制器。
单片机最小系统原理图如图4.1所示
图4.1K60单片机最小系统原理图
在本次智能车设计中,使用了单片机内部PWM模块、脉冲捕捉模块、A/D模块、SCI模块、SPI模块及I/O。
PWM模块分为三路输出,其中一路PWM输出频率为300Hz的信号用于控制伺服器。
不同正脉宽对应不同的转向值,并且恒定某一输出值后,伺服器会保持转角不变。
另外两路PWM输出频率为10KHz的信号,当A路输出低电平,B路输出PWM信号时电机实现正转,通过改变正脉宽可以实现电机转速调节。
当A路输出PWM信号,B路输出低电平时则实现电机反转,用于减速控制。
脉冲捕捉模块配置为上升沿、下降沿检测方式,用于捕捉编码器输入脉冲数,通过测量输入脉冲得到智能车运动速率。
A/D模块用于对传感器输入电压采样,获得传感器电压数值。
采用12位精度采样,时钟配置为2M/s,配置为5路通道循环采样,关闭中断采用查询方式获取转换数值。
使用SCI模块与无线模块通讯,发送数据至电脑端,其波特率配置为9600bit/s,大约一秒能够发送1200字节数据。
SPI模块用于读写TF卡,速率配置为2M/s,能够实现高速读写TF卡,记录智能车的重要数据。
4.2电源控制模块
电源是一个系统正常工作的基础,电源模块为系统其他各个模块提供所需要的能源保证,因此电源模块的设计至关重要。
模型车系统中接受供电的部分包括:
传感器模块、单片机模块、电机驱动模块等。
设计中,除了需要考虑电压范围和电流容量等基本参数外,还要在电源转换效率、噪声、干扰和电路简单等方面进行优化。
可靠的电源方案是整个硬件电路稳定可靠运行的基础。
全部硬件电路的电源由7.2V,2A/h的可充电镍镉电池提供。
由于电路中的不同电路模块所需要的工作电流容量各不相同,因此电源模块应该包含多个稳压电路,将充电电池电压转换成各个模块所需要的电压。
智能车所需电源如图4.8所示。
图4.8系统所需电源
电源模块由若干相互独立的稳压电源电路组成。
在本系统中,除了电机驱动模块的电源是直接取自电池外,其余各模块的工作电压都需要经电源管理芯片来实现。
由于智能车使用7.2V镍镉电池供电,在小车行进过程中电池电压会有所下降,故使用低压差电源管理芯片LM2940。
LM2940是一款低压稳压芯片,能提供5V的固定电压输出。
LM2940低压差稳压芯片克服了早期稳压芯片的缺点。
与其它的稳压芯片一样,LM2940需要外接一个输出电容来保持输出的稳定性。
出于稳定性考虑,需要在稳压输出端和地之间接一个22uF低等效电阻的电容器。
图4.9电源电路原理图
4.3测速反馈模块
测速采用光电脉冲编码器,光电脉冲编码器是一种数字式角度传感器,它能将角位移量转换为与之对应的电脉冲进行输出,主要用于机械转角位置和旋转速度的检测与控制。
4.4电机驱动模块
电机驱动使用集成芯片BTS7960。
BTS7690具有过热、过压、欠压、过流、短路保护等功能。
BTS7960主要参数如表4.1所示。
表4.1BTS7960主要参数
4.4.1BTS7960电路连接
本设计采用2片全桥驱动方式,每个电机由两块芯片控制。
此方案电路设计简单、稳定,有效提高驱动能力,避免调试过程中芯片发热严重现象,但成本高。
BTS7960驱动电路如图4.10所示。
图4.10BTS7960驱动电路
4.4.2BTS7960散热设计
BTS7960内阻虽只有9mΩ,但驱动电流较大时发热也比较明显,为避免加装散热片,本设计在电路板上设计散热盘以达到良好散热效果。
电路板散热盘如图4.11所示。
图4.11电路板散热盘
4.5液晶显示与键盘模块
这部分属于人机界面,主要是在调试的过程方便一些参数的确定和速度档的选择,比如在调节传感器的值的时候可以直接看液晶上的值,这样在调试的过程中方便了很多。
而键盘的作用无异就是在调试的过程中对一次参数的调整和设置。
一般不同的赛道会用到不同的参数,这样就可以适应其他不同的赛道了。
液晶显示与键盘如图4.14所示:
图4.14液晶显示与键盘
第五章软件部分设计
通过前面的介绍,车模控制电路制作与安装均已完毕。
车模是否能够正常高速稳定运行,需要通过编写控制软件和车模调试来完成。
开发软件主要任务包括:
(1)建立软件工程,配置K60资源,初步编写程序的主框架;
(2)编写上位机监控软件,建立软件编译、下载、调试的环境;
(3)编写实现各个子模块,并测试各个子模块的功能正确性;
(4)通过程序初步调试,验证控制电路板的正确性。
5.1软件功能与框架
软件的主要功能包括有:
(1)各传感器信号的采集、处理;
(2)电机PWM输出;
(3)车模运行控制:
速度控制、方向控制;
(4)车模运行流程控制:
程序初始化、车模启动与结束、车模状态监控;
(5)车模信息显示与参数设定:
状态显示、上位机监控、参数设定等。
上述功能可以分成两大类:
第一类包括1-3功能,它们属于需要精确时间周期执行,因此可以在一个周期定时中断里完成。
第二类包括4-5功能。
它的执行不需要精确的时间周期。
可以放在程序的主程序中完成。
这两类任务之间可以通过全局变量实现相互的通讯。
程序上电运行后,便进行单片机的初始化。
初始化的工作包括有两部分,一部分是对于单片机各个应用到的模块进行初始化。
这部分的代码由IAR软件自动生成。
第二部分是应用程序初始化,是对于车模控制程序中应用到的变量值进行初始化。
初始化完成后,首先进行的是CCD的采集,以及按键菜单的显示。
以达到电机上电就开始赛道的识别以及处理的目的,通过液晶界面显示采集回来的信息或者显示菜单按键功能。
CCD的采集、速度控制以及方向控制都是在中断程序中完成。
通过全局标志变量确定是否进行这些闭环控制。
中断程序框架如图5.2所示。
图5.2中断服务程序
图5.2中,使用K60的一个定时器,产生一毫秒的周期中断。
中断服务程序的任务被均匀分配在0-4的中断片段中。
因此每个中断片段中的任务执行的周期为10毫秒,频率为100Hz。
将任务分配到不同的中断片段中,一方面防止这些任务累积执行时间超过1毫秒,扰乱一毫秒中断的时序,同时也考虑到这些任务之间的时间先后顺序。
当然也可以将所有的中断任务都合并在一起,使用一个10毫秒的中断来完成。
这些任务包括:
(1)电机测速脉冲计数器读取与清除。
累积电机速度,为后面车模速度控制提供平均数;
(2)启动AD转换。
进行20次模拟量采集,然后计算各个通道的模拟量的平均值。
这个过程是对于模拟信号进行低通滤波。
(3)车模舵机打角量控制控制过程。
(4)车模速度控制:
在这个时间片段中,速度调节的周期为10毫秒。
以上每个中断任务都占用不同的时间,在程序调试时,需要保证它们都不会超过1毫秒。
每个任务具体执行时间可以通过单片机的端口显示出来。
如下就是通过单片机的LED控制端口A6,显示出每个任务执行的时间。
在进入中断时,A6输出高电平,推出中断时,A6输出低电平。
从上面任务中断时间波形可以得到每个任务消耗的时间:
表5.1中断任务执行时间表格
时间
片段
任务执行时间
(微秒)
任务名称
备注
1
110
速度脉冲
2
720
AD转换
进行了20次了6个模拟通道采集并进行平均。
3
430
车模角度控制
4
90
车模速度控制
速度控制周期是100毫秒。
5
150
车模方向控制
在中断退出之后,程序执行主程序,完成车模运行和监控调试。
为了体现程序的模块性,我们把程序分成各个模块进行分别处理,而各模块也有相应的形参做为接口,可以做到可移植性,通用性。
下面就这些模块的设计与实现分别进行详细阐述。
程序中用到的硬件资源有PWM模块、AD模块、脉冲累加器、普通I/O口。
5.2控制相关软件函数
1.程序初始化
这个过程主要就是初始化程序,配置相应的AD口以及IO口PWM口等,以致后面程序中能正常运用。
初始化程序有:
pllinit150M();
IO_Init();
LCD_Init();
JIANPAN_ini();
CH451_ini();
CH451_WriteCommand(CH451_BCD);
CH451_GetKeyValue();
CCD_Init();
2.CCD信号采集
voidImageCapture(unsignedchar*ImageData){
unsignedchari;
externu8AtemP;
SI_SetVal();/*SI=1*/
SamplingDelay();
CLK_SetVal();/*CLK=1*/
SamplingDelay();
SI_ClrVal();/*SI=0*/
SamplingDelay();
//Delay10usforsamplethefirstpixel
/**/
for(i=0;i<250;i++){//更改250,让CCD的图像看上去比较平滑,
SamplingDelay();//200ns//把该值改大或者改小达到自己满意的结果。
}
//SamplingPixel1
*ImageData=ad_once(ADC1,AD6b,ADC_8bit);
ImageData++;
CLK_ClrVal();/*CLK=0*/
for(i=0;i<127;i++){
SamplingDelay();
SamplingDelay();
CLK_SetVal();/*CLK=1*/
SamplingDelay();
SamplingDelay();
//SamplingPixel2~128
*ImageData=ad_once(ADC1,AD6b,ADC_8bit);
ImageData++;
CLK_ClrVal();/*CLK=0*/
}
SamplingDelay();
SamplingDelay();
CLK_SetVal();/*CLK=1*/
SamplingDelay();
SamplingDelay();
CLK_ClrVal();/*CLK=0*/
}
3.位置值处理函数以及舵机打角量控制
这个函数主要是将采集回家里的函数进行处理,对赛道信息进行分析,提取有用的信息控制舵机打角转向。
在这个环节,我们在对比了跳变沿处理和二值化处理的难易程度以及稳定性方面的考虑,最终决定采用对AD值进行二值化处理,让其在白的赛道上为一,边沿为零。
从而提取中线,最后根据中线的偏移量控制舵机的打角量。
主要用的程序有:
Reed_CCD0();
Reed_CCD1();
Reed_CCD2();
Position0();
Position1();
Position2();
differ_adjust0();
differ_adjust1();
4.电机PWM输出控制
我们采用双向500线的编码器采集脉冲,闭环控制。
根据实际脉冲偏差跟给定量的差别,让输出PWM在一个范围内波动,用到的主要函数有
voidget_speed(void);
voidspeed_choose(void);
第六章开发与调试
本智能车IAR开发工具,加上良好的测试环境使智能车开发和调试能够顺利而快速地完成。
6.1开发环境
程序的开发是在组委会提供的CodeWarriorIDE下进行的,包括源程序的编写、编译和链接,并最终生成可执行文件。
CodeWarriorforS12是面向以HC1和S12为CPU的单片机嵌入式应用开发软件包。
包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器。
下面以一个简单的实例来说明使用CorewarriorIDE开发全过程。
建立工程:
用IAR首先要新建的是工作区,而不是工程。
在工作区里再建立工程。
1)建立工作区间
新建IAR工作空间,首先是菜单File里选择Open再选择Workspace,如下图红圈所示。
2-1
接着就会看到一片空白。
这时就是新的“办公区”了。
2-2
有了工作空间就可以建立工程了。
2)建立工程
菜单Project-CreateNewProject。
点了之后出现下面这个对话框。
上面图中有个ToolChain:
ARM,这里选的是芯片的类型,IAR有很多很多专用的环境,比如ARM的,430的,8051的等。
这里只有ARM,相当于没得选。
它的下面有个Projecttemplates(工程模板),然后是asm,c++,c等,选择用户使用的开发语言,我们选C。
展开C前面的+号,显示如下图(上个图的局部)
用鼠标点下main之后再点OK
3)保存
新建工程就剩下最后一步了,保存。
2-5
在文件名后面填个名字保存。
注意,在关闭IAR时或关闭IAR空间时,还会提示要求保存工作空间。
别一不小心关完了。
IAR工作空间文件后辍是.eww。
IAR工程的后辍名是.ewp。
eww和ewp文件都会关联到IAR,不过eww文件才能正确的自动打开,而ewp文件必须先打开IAR,再导入工程才可用,这样太麻烦了,还是保存eww文件来得方便。
二、项目的设置
1)弹出设置对话框
在工程名上点右键,选择options,或者点菜单——“Project”——“Options”进入,或者按快捷键Alt+F7
下面进入设置,这里只说明几种基本设置,具体的还得根据自己需要来调整。
没有出现设置栏目就保持默认。
2)先选择芯片的型号。
我们用的是K60,这里选FreescaleK60Xxxx。
3)编程语言栏目设置。
以C语言为例,如果是C++就选C++。
4)这里设置的是编译后是否要生成BIN、HEX文件。
5)Linker的设置,这里记录着储存的地址。
6)调试工具的设置,
这里选择ST-Llink的调试方式,这里我选SWD。
A)如果使用JTAG写入器,则在驱动中选择
B)如果使用J-Link写入器,则在驱动中选择
基本设置就这样了,具体得根据自己情况修改。
6.2程序下载
BDM连接成功之后,首先先将程序进行编译,先观察是否有问题,所有的功能如图:
程序下载成功后,如图:
第七章总结
7.1制作成果
比赛无极限,追求无止境。
在已经取得的调试结果之上,我们仔细观察,认真思考,对于发现的问题,逐步完善控制方案,突破现有观念的限制,寻求更加先进完美的方案,在比赛规定的技术范围之内,追求卓越。
在不断的改进与实验中,收获的不仅是最终的比赛成绩,而且还有自己动手的能力和勇于探索的精神。
7.2问题与思考
在车模的制作过程中,我们的小车曾经出现了很大问
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华南 赛区 光电 中南 民族大学 雷电 技术 报告