智能车教程技术报告3.docx
- 文档编号:29799843
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:48
- 大小:228.79KB
智能车教程技术报告3.docx
《智能车教程技术报告3.docx》由会员分享,可在线阅读,更多相关《智能车教程技术报告3.docx(48页珍藏版)》请在冰豆网上搜索。
智能车教程技术报告3
智能车教程制作过程
第一届“飞思卡尔”杯全国大学生
智能汽车邀请赛
技术报告
学校:
广东工业大学
队伍名称:
广工二队
参赛队员:
陈超涛叶伟强钟征
带队教师:
吴黎明
指导教师:
王日明申柏华
关于技术报告和研究论文使用授权的说明
本人完全了解第一届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:
参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:
带队教师签名:
日期:
第一章引言
1.1制作过程概况
今年一个多月的暑假生活对于一些学生来说可能是漫长而无聊的,但是对于我们队的成员来说是充实的,我们一直为了一个目标而去奋斗,那就是在全国”飞思卡尔”杯智能车设计大赛中取得佳绩。
一个月在实验室的艰苦生活虽然有些累,但是最终也劳有所获,我们终于把只有四只轮子的车模改装成了能循黑线快速跑的智能车。
智能小车的制作前期我们是比较轻松的,时间也是比较长的,我们从五月份开始做准备工作,那时侯主要是上网查找制作智能车的软硬件方面相关资料,在图书馆查阅有关S12芯片及传感器方面的书籍,还认真阅读了韩国智能车设计方案分析那份文档,在六月初初步确定我们的制作方案。
一放暑假我们就紧锣密鼓地展开我们的车模的制作工作,开始硬件的购买和设计由钟征和叶伟强负责,陈超涛则负责软件的编写。
当时我们经常往返于电子城和学校之间,也常因买到元件回来测试后发现达不到预期效果而改变方案。
特别是前面寻黑线传感器的设计,常因为红外发射强度不够,接收不够灵敏,或者红外发射管之间的距离太大而改变方案。
在七月二十五号我们基本把各个硬件模块调试好并安装固定在车上。
这时陈超涛的程序也编写得差不多,各个模块的程序都基本成型,进入调试算法参数阶段。
在不断的调整参数下,我们的车速不断提高,性能稳定性也得到不断提高。
1.2内容框架安排
下面第二章的内容是设计分析和方案论证,第三章则介绍了硬件系统的设计和安装,第四章描述了软件系统的设计方案。
第五章的结束语讲述了我们在制作中遇到的问题。
最后在附录A中附上了我们的部分程序代码。
1.3相关联文献的综述
《单片机嵌入式的在线开发方法的应用》主要介绍了uCOS系统如何在S12芯片上移植
《摩托罗拉Motorola68HC12系列微控制器原理应用与开发技术》则是分模块地详细地介绍了S12这款芯片的应用方法。
《C语言程序与设计》比较全面地介绍了C语言的各表达式的用法和C程序的编写方法。
因为这次程序编写都是用C语言,这本书发挥了很大的作用。
《新型PID控制及其应用》,介绍了PID的原理和应用方法,帮助了我队软件算法的编写和参数的调整
《传感器与检测技术》从基础理论到实用技术介绍了很多种传感器,对此次智能车制作的传感器的了解、选择和电路设计有很大帮助。
C33886、3144EUA、7806和LM2940的datasheet。
各种芯片的数据资料都介绍了芯片的内部原理图,各引脚意义,及典型应用电路。
为此次的硬件电路的设计提供了依据。
韩国智能模型车设计方案分析文档。
总结了韩国历届比赛智能车制作的情况及经验,使我们更快认识智能车的制作方法和比赛规则
第二章设计分析与方案论证
2.1智能车制作要求
参赛选手须使用大赛组委会统一提供的竞赛车模,采用飞思卡尔16位微控制器MC9S12DB128B作为核心控制单元,自主构思控制方案及系统设计,包括传感器信号采集处理、控制算法及执行、动力电机驱动、转向舵机控制等,完成智能车工程制作及调试。
2.2设计概述
设计采用飞思卡尔16位微控制器MC9S12DB128B作为自动控制小车的检测控制、显示计算核心。
路面黑线检测采用反射式红外传感器,车速和距离检测使用了霍尔传感器,电源部分分别采用了国、LM2940、7806稳五伏和六伏。
基于这些完备可靠的硬件设计,用定时器和IRQ中断进行车速测量,同时利用了PWM技术动态的控制电动机的转速,使用了一套独特的软件算法实现了小车寻迹,和在高速运动中的精确控制,达到了很好的效果!
根据题目要求,我队制作的智能小车的系统可以划分为几个基本模块,如图2.1所示。
对各模块的实现,分别有以下一些不同的设计方案:
图2.1智能车系统总框图
2.3路面黑线探测模块
探测路面黑线的大致原理是:
光线照射到路面并反射,由于黑线和白线的反射系数不同,可以根据接收到的反射光强弱判断是否车身偏离黑线。
方案一:
CCD摄像头。
CCD摄像头寻迹方案的优点是可以更远更早地感知赛道的变化,但是信号处理比较复杂,如何对摄像头记录的图像进行分割和识别,加快处理速度是摄像头方案的难点之一。
方案二:
脉冲调制的反射式红外发射-接收器。
考虑到环境光干扰主要是直流分量,如果采用有交流分量的调制信号可大幅度减少外界干扰;另外,红外发射管的最大工作电流取决于平均电流,如果采用占空比小的调制信号,在平均电流不变的情况下,瞬时电流可以很大(50-100MA),这样也可以大大提高信噪比。
但电路较复杂且软件工作量加大。
方案三:
不调制的反射式红外发射-接收器。
原理如图2.2:
反
射
表
面
图2.2不调制的反射式红外发射-接收器原理图
由于采用红外管可以降低环境光源干扰;如果直接用直流电压对管子供电,限于管子的平均功率要求,工作电流在10MA左右。
由于发射接收组件距离路面较近,所以我们采用了方案三。
同时我们用大发射功率的红外发射管,增大探测的距离。
2.4车轮测速及路程计算模块
方案一:
采用开关型霍尔元件,该器件内部由三片霍尔金属板组成,当磁铁正对金属片时,由于霍尔效应,金属板发生横向导通,在输出端产生脉冲。
因此可以在车轮或者齿轮上安装磁铁,而将霍尔器件安装在固定轴上,通过对脉冲的计数进行车速测量。
图2.3霍尔元件输出特性曲线
方案二:
受鼠标的工作原理启发,采用断续式光电开关。
由于该开关是沟槽结构,可以将其置于固定轴上,再在车轮上均匀的固定多个遮光条,让其恰好通过沟槽,产生一个个脉冲。
通过脉冲的计数对速度进行测量。
方案三:
测速发电机在自动控制系统中作检测元件,可以将电动机轴上的机械转速转换为电压信号输出。
输出电压的大小反映机械转速的高低,输出电压的极性反映电动机的旋转方向。
测速发电机的输出电压必须精确、迅速地与转速成正比,其输出信号需要经过A/D转换。
上述方案二计数精度较高,但安装不便且MCU计数负担过重,影响小车速度的提升。
方案三需要单片机进行A/D转换,同时受电源波动影响很大。
方案一在工业上得到广泛应用性能稳定切装配容易,而且是数字量不需经A/D转换,基本不受电源影响,因此采用方案一。
2.5电源模块
智能车系统根据各部件正常工作的需要,必须对配发的标准车模用7.2V2000mAhNi-cd蓄电池进行电压调节。
其中,单片机系统、路径识别的光电传感器和接收器电路、车速传感器电路需要电压,伺服电机工作电压范围4.8V到6V,直流电机可以使用7.2V2000mAhNi-cd蓄电池直接供电。
对于5V及6伏的稳压有以下两个方案。
方案一:
稳5伏用三端稳压管7805,稳6伏用三端稳压管7806。
这两种稳压芯片应用广,简单。
】
方案二:
稳5伏用LM2940,稳6伏用LM2575。
这两种都是低压降的电源调节芯片。
考虑到电机启动瞬间会引起较大的压降,造成芯片的复位,我队选用方案二。
2.6电机驱动模块
方案一:
L298N。
价格便宜。
内部包含4通道逻辑驱动电路。
是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。
方案二:
MC33886。
内部由场效管构成,工作电压为5伏到40伏,驱动电流大,导通电阻小(120毫欧姆),PWM频率达到差不多10K,且发热量小,有欠压保护,过压保护和过稳保护等功能的功能。
由于小车是电池供电,而且电池电流大,为了保护电机,而且驱动电机的需要驱动电流比较大,最后选定MC33886作为驱动芯片。
第三章硬件系统的设计及安装
3.1路面黑线检测模块的电路设计与实现及电路板安装
具体电路如图3.1,为了检测路面黑线我们用了十一对反射式红外传感器,用三极管做比较器把模拟量转换为高低电平的数字量,当红外发射管照射到黑线,对应的红外接收管则只能接收到微弱的反射红外光,红外接收管不导通,则三极管的输入电压高于三极管门限值,此时三极管导通,输出端out为低电平。
红外发射管照射到白纸的情况则相反。
然后把11个红外输出信号分别接到单片机I/O口,从左到右分别为PA0—PA7和PE0—PE2。
这样在不同路面的情况下单片机可以读到不同的一系列的数字。
以此数字量来判断舵机应转向的方向和角度。
图3.1红外传感电路原理图
我队红外传感器一排整齐地排列在电路板,每对传感的距离为1.75cm,是接收管在前发射管在后的放置方法,这种方法利于接收管更多地接收到对应发射管发出的红外光。
然后把电路板牢固地固定在我们手工做的结实但是轻便的铝架上,铝架另一端固定在小车的头部,最终我们的车的总长度为39.5厘米。
这样的安装方法使我们的红外测黑线模块的电路板固定得很稳定,不会在车跑动的时候出现颤抖的现象,从而提高了红外传感探测黑线的判断准确度。
为了能够探测到比较远的路面情况,我队把红外传感器的电路板的与路面的夹角调大,但是红外发射与接收管都有方向特性,在某一位置上传感器能获得最大的灵敏度,因此存在一个距离或夹角范围,在这个范围内,传感器才能正常工作,所以我队没有盲目追求探测远度,而是在经过很多的调试之后,确定我队的红外传感的电路板与路面的最佳夹角为14度,最高处与路面的距离为7厘米(如图3.2和3.3)。
图3.2红外传感电路板俯视图
图3.3红外传感电路板安装后侧图
3.2车轮测速模块电路设计与实现
霍尔传感的内部原理图如图3.4:
图3.4开关型霍尔传感器的内部原理图
我队测速模块具体的实现电路如图3.5:
Out(IRQ)
图3.5测速模块电路原理图
霍尔传感器的输出脚接s12的IRQ中断口,而磁铁是粘贴到电机齿轮带动的大齿轮侧面(如图3.6),等角度分布十八个小磁铁,下图示只意性地画出一个。
当电机转动时,十八个磁铁轮流经过霍尔传感器,不断的产生脉冲,不段引发中断。
从而实现测速的功能。
图3.6霍尔元件安装方法图
3.3电机驱动模块电路设计与实现
电机驱动模块实现电路如图3.7
图3.7MC33886电路原理图
我队把电机驱动芯片MC33886的两个半桥并联在一起,以加大驱动电流,如上图3.7所示。
3脚(IN1)和19脚(IN2)分别接高电平和低电平,这样OUT1应接电机的正极,OUT2应接电机负极,于是电机只能处于正向行走的方向。
17脚接一个33nF的电容,使33886的上限频率为10KHz。
将13脚作为PWM控制信号,用来控制电机转速。
3.4电源管理模块电路设计和实现
3.4.1稳5伏电源管理电路的设计:
图3.85伏稳压电路图
3.4.2稳6伏电源管理电路的设计:
图3.96伏稳压电路图
3.5智能车硬件参数
重量:
长:
395mm宽:
195mm高:
130mm电容总容量:
1090uF小车总功耗:
17W
传感器种类以及个数:
940nm红外线传感器11个;霍尔测速传感器1个车速检测精度:
95.42%;车速检测频率:
10Hz红外线传感器检测精度:
94%;黑线检测频率:
15000Hz
第四章软件设计方案
4.1总体思路
利用一排11的红外传感器探测,获得21种不同的情况,利用这些信息,进行不同的角度和速度的控制.
我们的主要思路是:
尽量使整个过程顺畅并且安全,我们在直线过程中利用霍尔传感器,配合18个磁铁侧得的速度资料,用到PD算法对智能车进行速度控制,使在直线时大约处在2米每秒的速度.在直线跑道中,速度控制在一个范围内,少于预设的下限值时进行加速,高于预设上限值时,进行适当减速。
进入转弯的时候,适当减低速度,使得整个过程变得顺畅,并且安全.
转弯的角度经过精确的计算得出理论值,再配合现场的调试得到最终的最佳角度。
4.2速度控制算法
根据赛道的不同,跑道的类型基本可以分为3类,软件的编写也针对这3种不同的跑道采取不同的算法。
首先,对于直线的跑道,我们采取恒速的控制思想。
如前面硬件部分所述,利用开关型霍尔传感器进行测速,利用霍尔输出触发IRQ中断,在中断程序里进行计数。
同时利用输出比较定出一个100ms的定时,统计在这个时间内所转过的磁铁数目timecount,那么速度就是speed=(timecount/9)*2*pi*R,其中轮的半径R=27mm。
根据以下的程序就可以测量出直线的速度speed=(timecount/9)*2*pi*R,以下是定时和中断计数程序:
voidinterruptOutcampare_Isr(void)
{
TFLG1=0x80;
timcounttmp=timcount;
tmp2=timcount/10;
tmp1=timcount%10;
timcount=0;
}
voidIrq_Isr(void)
{
timcount++;
asm
{
Rti
}
}
而且为了方便调试的时候观察到小车在每个位置的速度值,我们利用LED灯,显示各个时候的速度值,其速度值的刷新率是100ms一次。
具体的程序如下:
PTS=0x80;
PORTB=Led_vaule[tmp1];
PTS=0x40;
PORTB=Led_vaule[tmp2];
for(j=0;j<20;j++);
根据以上侧得的速度,利用程序对直线的速度进行控制,直线速度控制范围是2.2----2.45米/每秒的范围内,经过测试这个速度行走直线是比较稳定,并且是比较有利于转弯前的及时制动。
其次,对于转弯的跑道,我们采取的方法是首先快速度的减小速度,防止小车飞出跑道,待舵机方向转过之后又用急剧提高速度的方法,使小车在短时间内迅速启动,继续行走,经过多次测试,这种方式的确的很有效的,因为如果联快速制动的话就会在入弯道时,由于舵机的响应跟不上而冲出赛道,但是一旦制动后给了舵机反应时间使之能转到正确方向后就可以马上驱动电机,把电机的PWM占空比提升到100%,使智能车快速启动。
虽然占空比迅速加到了100%,但是因为前面已紧急制动,车速已很慢,加之转弯时车受到在阻力比直线大,车子加速得的比较慢,能很顺畅地通过弯道,待智能车转过弯之后,它的速度也加到比较大,所以快速启动在方法是可行的,以下就是我们如何实现这一方法的部分程序:
if(speed>=Maxspeed)
{
Down_speed(0);
}
elseif(speed<=Minspeed)
{
Up_speed(75);
}
对于S型的路线,除了采取了应付普通转弯的减少速度的方法以外,为了不影响S型路线的行走速度,我们还采取以下办法:
没有在当最左最右右两边的传感器检测到黑线时进行减速,而是先判断这时候的速度是否大于Maxwanspeed,如果超过了这个值,就进行减速,并且根据这时候的速度的大小不同,减少一个不同的值,这里采取了PID算法中的P的控制方式。
同样的方式,如果这时候的速度小于Minwanspeed,就进行加速,这个加速度的值,也根据当前的速度的不同,分为快,中,慢三种的加速值。
以下是这种算法的部分实现程序:
intDown_vaule[]={};
intUp_vaule[]={};
if(speed>=Maxwanspeed)
{
Change_Mpwm(Dowm_vaule[speed]);
}
elseif(speed<=Minwanspeed)
{
Change_Mpwm(Up_vaule[speed]);
}
其中上面的Down_vaule[]={}和Up_vaule[]={}的具体的值是经过多测试得出。
类似S型赛道这种突然大幅度改变转弯方向的跑道,为了能够使速度在进S型赛道时快速地减少,又不影响一般直线赛道的行走速度,采取了记录之前状态的方法,将这种S类型的赛道和一般直线赛道区分。
这中算法的原理是记录之前10次,状态有改变的情况,将它们各自是哪种状态存放在state_buf[10]这个数组里面。
如果刚测到的状态与它之前的一种状态不同,就将state_buf[0]-tate_buf[9]各后移一位,并将现在这种状态存放在state_buf[0]里面,这样state_buf[10]这个数组里面就始终保存着,最近的10种状态。
再将这10种状态的值相加存放在变量last10num里面。
这样如果last10num的值比较大,说明小车的运行状态是偏离中间较多,小车的行走不稳定或者是正处于急速的左右转弯的状态,这时候我们的处理就是将小车的提高速度的门限降低,以防止小车在急速转弯的情况下速度过快,导致小车出轨。
下面是实现这种算法的部分程序:
if(oldstate!
=state){tmp=state-state_buf[9];for(i=9;i>=1;i--){state_buf[i]=state_buf[i-1];}state_buf[0]=state;last10num=last10num+tmp;}intlast10[22]={50,45,47,46,48,43,45,50,50,0,0,0,0,0,0,0,0,0,0};//这个数组是存放着的数值是用来与last10num进行比较//的,如果last10num大于这个它,就说明是处于需要降低//提速下限的情况if(last10num>=last10){if(timcounttmp>=Maxvaule2){Change_Mpwm(0);}elseif(timcounttmp<=Minvaule2)//Minvaule2比起直线情况下,的//Minvaule要较小一些,防止转弯//时候过快得加速,导致小车出轨{Change_Mpwm(75);}}
4.3角度控制算法
黑线检测是利用11对红外的发射和接收管,进行黑线的探测,这样对于黑线的位置的探测就会有23种状态,其中包括,一种十一对红外传感器都没有检测到黑线的状态和一种非预料中错误的状态。
前面硬件部分以讲述这些状态是一系列的数字量,之所以用数字量是数字量单片机处理速度快,无需进行A/D转换,对于追求速度的智能车来说是比较好,而且充分利用S12芯片I/O口多的优点。
数字量由I/O口读入,通过对这些数据的处理,分出23种不同的状态,分别从中间起向两边进行编号为0-20,例如:
只有中间的那对红外管照射到的黑线的范围编号为0,如图4.1实线情况,这时I/O口读到的数字量为11111011111。
中间和相邻左边的红外传感探测到黑线的编号为1,如图4.1虚线情况,这时I/O口读到的数字量为11110011111。
中间和相邻右边红外传感探测到黑线的情况为编号为2。
再加上种特殊状态,十一对红外传感器都没有检测到黑线的状态为21和一种非预料中错误的状态为44,一共23种状态。
如,轨道黑线所在的位置对应各自不同的状态。
图4.1红外传感器21种探测情况
下面是获得这个状态值的部分程序:
tmp1=PORTA;
tmp2=PORTK;
tmp1=tmp1|((tmp2&0x07)<<8);
switch(tmp1)
{
case2015:
state=0;
break;
case1999:
state=1;
break;
case1951:
state=2;
break;
case2031:
state=3;
break;
case1983:
state=4;
break;
case2023:
state=5;
break;
case1855:
state=6;
break;
}
对于其中21种黑线被一对或者两对传感器检测到的情况,我们采用的处理方法是每一种情况对应一种舵机动角度。
这个角度的具体计算方法和原理如图4.2。
图4.2舵机在不同情况下在转动角度在算法图
如图4.2,一排传感器电路板的长度是19.5厘米,宽度是3.5厘米,传感器距离前轮的距离是16.4厘米。
传感器中的红线表示传感器的位置,蓝色线表示相邻两个传感器都检测到黑线的中心位置,如上图根据公式:
角度=arctan(8.85*n/164),就可以较精确的算出每种情况下理论上舵机的转角,再经过我们现场调试的调正最终的转弯角度。
对于0状态,我们采取了一个PID算法中的D算法,进行一种微调,我们记录了之前4种被检测到的状态,根据这4种状态的不同排列,例如:
是7―5―3-1,或者是3-5-3-1,或着是0-1-3-1,这几种不同的情况,我们回到中间的时候所偏转的角度有所不同。
经过过我们的实践测试,这种方法对减少小车行走的抖动有一定的效果。
以下就是这种微调的部分程序:
if(oldstate1==7&&oldstate2==5&&oldstate3==3&&oldstate4==1)
}
Turn_left(7);//微转向回到中央的那个方向
}
if(oldstate1==3&&oldstate2==5&&oldstate3==3&&oldstate4==1)
}
Turn_left(5);//微转向回到中央的那个方向
}
if(oldstate1==0&&oldstate2==1&&oldstate3==3&&oldstate4==1)
}
Turn_left
(2);//微转向回到中央的那个方向
}}
另外的多种情况这里就不一一写出来,这里的主要思想是根据回到中间的趋势的激烈程度不同,偏转一个能减少这种趋势的不同角度,达到一种最路线的平滑作用。
对于两种特殊状态中的一种,完全没有传感器检测到黑线的21状态,我们采取的处理方法是,根据标志位turnright或者turnleft来判断之前是正在左转弯或者还是右转弯,而在此状态进行一个28度左右的转弯,用于使小车在转弯的时候,偏离了黑线的时可以保持原来的转弯趋势,快速转回黑线。
其中另外一种特殊的检测状态就是检测到预测之外的结果的44状态,例如:
有超过两个传感器同都检测到黑线,或者两个互相不相邻的红外传感器同时检测到黑线。
在这种情况我们的处理方法就是重新处理执行多一次这种状态的前一种不同状态的操作,这种方法能有效地避免由于外界干扰,造成传感器的错误检测,导致小车的严重跑出赛道。
以下是实现这种功能的的部分程序:
if(oldstate!
=0)
{Handle_Dri(oldstate,pwm_statevaule[oldstate],Max_mvaule[oldstate],Min_mvaule[oldstate]); //这里执行之前一种情 况的相应的处理
oldstate=44;
}
elseif(oldstate==0)
{
Change_Dpwm(0x8ca);
oldstate=44;
4.4软件流程图
4.4.1总流程图
图4.3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 教程 技术 报告