智能车技术报告中国地质大学地大一对技术报告.docx
- 文档编号:6332386
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:46
- 大小:724.29KB
智能车技术报告中国地质大学地大一对技术报告.docx
《智能车技术报告中国地质大学地大一对技术报告.docx》由会员分享,可在线阅读,更多相关《智能车技术报告中国地质大学地大一对技术报告.docx(46页珍藏版)》请在冰点文库上搜索。
智能车技术报告中国地质大学地大一对技术报告
第三届“飞思卡尔”杯全国大学生
智能汽车邀请赛
技术报告
学校:
中国地质大学(武汉)
队伍名称:
地大一对
参赛队员:
邹国雄
庞建东
何东
带队教师:
王勇
关于技术报告和研究论文使用授权的说明
本人完全了解第三届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:
参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:
带队教师签名:
日期:
第一章引言
1.1智能汽车制作概述
为了不影响智能车的整体性能,在制作过程中并未对车体结构作大的改动,如:
没有为安装电路板而特殊钻孔,没有安装特殊的支架等。
但为了安装光电传感头,我们增加两片铁片将前端光电传感器固定。
在车体的后部增加了码盘以确定速度。
车体前端安装第二排红外传感器,用于寻找引导线,通过对安装孔的调整,直接安装在车体前端的安装孔上。
智能车的控制板安装在车体的后部,通过调整安装孔的位置和大小,直接安装在车体上方的原有的两个螺栓上,并通过车体自带的支架固定。
单片机最小系统板通过排针插装在控制板上。
红外线传感器的信号通过10pin的排线连接到控制板上,舵机的控制线和电源线通过3pin的排线连接到控制板的相应的接口上。
为了能提高智能车的行进速度,在设计电路板时尽量减小了PCB板的使用面积,同时简化了电路的设计,在不影响电路功能的前提下,减少了元器件的数量和体积。
1.2控制算法概述
智能车要在引导线的引导下快速行进,传感器的采样周期的大小对车体随动性能将会有很大的影响。
当采用周期足够大时,数字离散系统的设计可以按照连续系统的设计思想设计,而且系统的输出性能也和连续系统近似。
因此决定采用计算方便位置PID控制算法,在对实际的有智能车、电机、舵机、单片机等部分组成随动系统进行实际调试后发现,PID算式的微分部分对提高的系统的各项性能指标没有明显的作用,选取不当,还会使系统不稳定,因此只保留了比例部分和积分部分。
为了提高快速性和稳定性,通过对算法的调整,加入了具有饱和特性、死区特性等特性的环节。
1.3引用文献概述
为了能让智能车有较高的平均行进速度,控制方法主要参考了由胡寿松主编的《自动控制原理》和陶永华主编的《新型PID控制及其应用》两本书。
通过试验进行相应的校准。
1.4报告的主要内容
本文将对智能车的制作及其控制方法的C语言实现进行论述。
第一章是对全文的概述;第二章将简述模型车机械部分安装及改造、传感器的设计安装、系统电路板的固定及连接等;第三章将简述电路设计说明;第四章中主要介绍智能车的控制方法以及算法的C语言实现;第五章简要论述车体质量、速度调整方法等因素对智能车性能的影响;第六章是结论。
第二章模型车机械部分安装及改造
智能车上的各部分出了光电码盘需要在车体的后部钻两个孔作为安装孔,其余所有电路板都安装在车体原有的安装孔和支架上。
2.1传感器的安装
传感器直接安装在智能车前端的用于安装支架的安装孔上,如图:
图2.1传感器的安装
2.2主控板的安装
智能车采用单片机HCS12开发板作为控制板,主控制板是用来连接单片机和外围各个功能模块的桥梁。
它为各个模块提供相应的接口。
根据2.1节中的叙述,将主控制板安装在智能车的后部,并且利用模型原有的安装支架,如图:
图2.2主板的安装
2.3光电对管的安装
用光电对管测量车速
图2.3光码盘的安装
第三章电路设计说明
3.1电源电路
智能车采用的镍铬充电电池供电,电池电压为7.2V,为了能为各个用电设备提供稳定的供电电压,选用低压差稳压集成芯片mc33886为系统供电。
由于传感器的耗电量较大,所以单独为期配备一路电源电路。
图3.1电源电路
3.2电机驱动电路
电机的驱动电路有很多种,这里使用的是单管驱动电路。
这个电路实现简单,发热少,因此不用很大的散热片,驱动能力很强。
图3.2电机驱动电路
3.3舵机驱动电路
堆积驱动电路包括两部分,一部分是电源电路,另一部分是信号连接电路。
3.3.1电源电路
为了实现方便,使用元器件少,不占用太多的电路板使用面积,同时舵机对电源要求很低,采用二极管降压的方法为舵机提供电源。
3.3.2信号连接电路
为了降低电机对单片机的干扰,使用光电耦合器作信号隔离。
3.4主控办接口
主控制板主要完成各个功能电路的连接工作,因此需要配备所有的模块的接口电路,主要有传感器数据输入接口、电机驱动信号输出接口、舵机驱动信号输出接口、单片机最小系统板接口。
接口用直立插针实现。
图3.4主板接口电路
3.5传感器电路
智能车需要沿着黑色引导线在白色的跑道上行驶,传感器的稳定性直接决定智能车能否按照正确的轨迹行进。
可见光传感器容易受到光照强度的影响,因此必须采用不易收环境可见光强度影响的红外线传感器。
这里使用的红外线传感器的型号是JX359,JX359对黑色和白色的分辨能力很强,用它来做寻找引导线的传感器具有很好的稳定性。
图3.5传感器电路
第四章智能车的控制
4.1主要代码分析
PID控制是最早发展起来的控制策略之一,由于其算法简单、鲁棒性好和可靠性高,被广泛应用于工业控制[2]。
因此采用数字PID控制算法作为智能车的运动控制算法。
若把智能车看做是一个关心环节,那么他的时间常数将会相对较大,因此PID控制算法中的微分环节对改善系统的性能不会有太大的贡献,最终,对智能车的运动控制采用数字PI控制。
数字PI算式中,将积分环节作了处理,积分时间并不是从0开始,而是从一个积分周期前到当前时刻,积分时间常数取30ms。
dst=dst0-(Kp*e+Ki*(e+eold));
其中dst0为控制量为0时的PI控制器的输出,Kp为比例系数,Ki为积分系数。
程序中dst0=4650,Kp=70,Ki=3。
为了能使智能车的速度能够在各种情况下都能够达到或者接近理想的最高速度,在速度控制上采用变速控制的方法。
由于控制前轮转动的舵机的转动速度是固定不变的,因此当引导线相对车体的位置变化角速度大于前轮的转动速度后,智能车将无法稳定的跟踪引导线。
在引导线的位置变化较大时,降低车速是十分必要的。
速度的控制算法是按照传感器的输出的变化率作为减速与否的标准,具体方法如下:
首先,单片机对从传感器采集回的位置信号进行采样,采样周期为30ms。
舵机的转动角速度常数为:
在工作的电压为4.8V的情况下旋转60度耗时0.2秒即300度每秒。
与其相应的引导线相对传感器每移动过一个传感器耗时不应超过6.67ms。
当采样周期为30ms时,每个周期内,传感器输出的偏差变化值(程序中定义为deltae)应小于4。
然后,如果deltae大于或等于4,则减速,否则加速。
减速为突然减速,而
加速采用逐渐家速度方法以防止电机因突加给定而电流过大。
相应的调速代码如下:
if(time<=AbsoluteTime)
{
deltae=e-eold;
if(deltae<0)deltae=-deltae;
if(deltae<3)
{
speed++;
if(speed>13)
speed=13;
}
if(deltae>=3)speed=2;
eold=e;
time+=30;
}
第五章车体调速方法
5.1智能车的质量对性能的影响
参加本次智能车大赛的队伍将进行一场速度赛,因此提高智能车的速度是本次比赛的关键所在。
首先,车体的质量将会影响智能车的行进速度。
车体质量的大小直接决定了智能车在行进过程中受到的滚动摩擦力的大小,车体的质量越大,滚动摩擦阻力将越大。
过大的质量所引起的车轮滚动摩擦力的增加,不仅会使智能车的起动速度降低,同时也会降低智能车的最高前进线速度。
其次,车体质量和重心的位置将影响智能车的转向性能。
假设车体的重心在智能车车体的前端,那么,在智能车转弯时,前轮将承受较大的摩擦力,同时,前轮将分担较大的向心力为车体提供向心加速度,这将导致智能车转向灵活度降低,降低智能车进入弯道的线速度(线速度过高,会因转向不灵活而冲出跑道),从而影响比赛的成绩。
为了提高智能车的行进速度和转向的灵活程度,在智能车的制作上,我们尽量减小了车体的质量,同时将重心先后移动。
具体实现方法如下:
我们在设计传感器的PCB板和主控板时,特别注意在不影响系统的稳定性的基础上,尽量较小电路板的使用面积。
电路设计上,为了减小使用面积,在完成电路功能的基础上,使用了尽量少的元器件。
没有为主控制板和传感器的电路板安装特别的安装支架,而是将他们直接安装在车体原有的安装孔上。
图5.1
5.2闭环调速
为了能对智能车的行进速度进行准确的控制,并且能方便的实现加速和减速动作,采用速度闭环控制是十分必要的。
典型的闭环调速系统通常采用双闭环调速系统,但是双闭环调速系统在实现时相对比较复杂,同时会增加CPU的工作负担,使控制系统的采样频率受到影响。
因此采用了容易实现的单闭环调速,即只用速度环。
5.3变速前进
正常驾驶汽车时司机都会在弯道时减速,以防止在弯道时由于车身的惯性,导致侧滑。
参加本次比赛所使用的智能车虽然一般不会因为惯性在突然转向时发生侧滑,但是如果智能车在行进路径中的直线加速过程中获得了很大的动能,进入弯道的瞬间难免会因为车体惯性而冲出跑道。
所以智能车的速度不能是一成不变的,应该在有弯道的地方减速。
那么,减速的依据是什么、速度应该降低多少、弯道内维持多大的线速度等主管因素将直接影响智能车的平均行进速度。
在进入弯道后,智能车能否正确的沿着引导线前进,主要依赖控制前轮转向的舵机能否在有限的时间里转动得到指定的位置。
舵机有它的固有响应速度参数:
在工作的电压为4.8V的情况
下旋转60度耗时0.2秒即300度每秒,那么在速度调整周期内,如果引导线偏离智能车车体前端传感器中间位置相对车体的角速度大于300度每秒,舵机将来不及对传感器信号做出反应,智能车将冲出跑道。
因此,影响智能车转向性能的因素不是弯道的存在,而是引导线位置相对车体变化的角速度。
根据以上的分析,智能车能否沿引导线顺利的入弯、出弯,取决于车速的调整规律能否保证在引导线出现变化时,引导性位置变化相对车身的角速度小于300度每秒。
所以在智能车前进过程中,弯道的出现不是减速标志,减速与否完全取决于舵机的响应速度。
加速减速的具体实现将在程序分析中具体说明。
第六章结论
智能车车身的加工制作过程中,尽量的减轻了车体的质量,并后移了中心,从而提高了智能车的灵活度。
经过试验,重心在智能车的后部要比在前部车速有了明显的提高,稳定性也有了一定的提高。
智能车的控制方法采用了实现简单的PI控制方法,在程序实现上减小了时间及空间复杂度,进而提高了传感器对道路的采样频率。
经过调试,只能车的平均速度可以达到1m/s左右,路径的形式及弯道的多少,对平均速度的影响很大。
智能车使用的是红外线传感器来检测引导线的位置。
红外线传感器的采样频率较高,配合有效的转换电路,能够输出稳定性很高的引导线位置信号。
但是传感器本身性质决定了它不能够对远距离的路况信息进行解读,因此也就不能够进行有关道路信息的预先判断。
只能从采样频率上补偿信息量少的弊端。
在下一步开发中,我们准备用线阵CCD作为检测引导线的检测设备。
线阵CCD可以对相对较远的道路信息进行采集,而且分辨率高。
基于线阵CDD的道路检测可以对引导线的变化进行预先判断和精确的位置微分,为控制算法的实现会提供很大的帮助。
参考文献
[1]《自动控制原理》主编:
胡寿松科学出版社出版
[2]《新型PID控制及其应用》主编:
陶永华机械工业出版社
附录
A:
程序流程
B:
程序源代码
#include
#include
#include"1602.h"
#include"PID.h"
#include"Sensend.h"
#include"main_asm.h"/*interfacetotheassemblymodule*/
#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"
#defineucharunsignedchar
#defineuintunsignedint
#definecon0PORTA_BIT4
#definecon1PORTA_BIT7
#defineKEY1PORTE_BIT0
#defineKEY2PTH_PTH2
#defineKEY3PTH_PTH0
#defineKEY4PTH_PTH1
#defineD1PTP_PTP2
#defineMCIN1PTP_PTP3
#defineMCIN2PTP_PTP4
#defineCtr2PORTA_BIT6
#defineleft_max1900//1825//1900//1700//1800//1950
#defineright_max2700//2550//2650
#definemiddle2290//2210//2250//2240
#definee_turn38//偏差转折点
#definek11.5//1.5//舵机微分常数
#definek20.8//直道加速段比率常数//0.7
#definek30.3//弯道入直提前加速比率
#definestright_limit15//直道忽略阈值
#definestright_v240//直道速度
#definev0150//恒速
//#defineKv0.8//0.8//弯道速降常数
ucharpos_middle=113;
ucharAD_wData[10];//全局变量存放AD的结果
ucharlow_value[10];//AD低基值
ucharhigh_value[10];//AD高基值
ucharvalue_range[10];//AD值变化范围
uintAD_cData[10];//AD偏差值
uintstright_turn[10];//直入弯地址
ucharposition=114;//黑线中心位置
intpos[8];//黑线中心缓冲区
ucharAngle[8];//转角缓冲区
ucharturn_save[3000];//道路信息
ucharroad_v[3000];//速度分配
ucharn=0;//道路信息所分段数
ucharp=0;//直入弯点数
uintsum=0;//转角之和
intangle_sum=0;//转角偏差之和
uintangle;
ucharflag=0;
uchartime_flag=0;//AD采样时间分段标志
ucharwhite_flag=0;
ucharstright_flag=0;//直线标志
ucharmemor_flag=0;
ucharturn_flag1=0;
ucharpos0;//和position等同
intcoun1=0;//测速脉冲个数
uinttime_count=0;//测速高频脉冲0.1ms
uintspeed=0;//实时车速
uinttime_100us=0;
uinttime_100ms=0;
signedinte2;//位置偏差
ucharstart_cout=0;//起跑线次数
ucharstart_time=0;//一段时间内检测到的起跑线次数
ucharstart_flag=1;
ucharlast_maxvalue;
ucharlast_max=4;
ucharPID_flag=1;
intnum;//第一圈脉冲数
intnum2;//第二圈脉冲数
inttime1;//第一圈时间
inttime2;//第二圈时间
ucharcircuit_flag=0;//一圈跑完标志
ucharBrake_flag=0;//刹车标志
ucharspee1=0;//第一圈速度调节
ucharspee2=0;//第二圈速度调节
ucharproject_flag1=0;//方案选择标志1
ucharproject_flag2=0;//方案选择标志2
ucharproject_flag3=0;//方案选择标志3
ucharstright_flag1=0;//直线标志
//intstright_con=30000;
//ucharturn_flag=0;
//ucharlongsright_flag=0;
//ucharturn_count=0;
//ucharstright_count=0;//
structroad_inf//道路信息分段结构体
{
charroad_flag;//直弯标志
uintturn_sum;//积分值
uintstart;//起始位置
uintend;//结束位置
ucharvv;//入弯/直速度
}road[50];
voiddelay(uintt)
{uinti;
for(i=0;i } voiddelay400ms(void) {uinti; for(i=0;i<16;i++) delay(50000); } voiddelay5s(){ uinti; for(i=0;i<100;i++) delay(50000); } voidgetAD0_value(void){ AD_wData[1]=ATD0DR0;//将结果寄存器中的值存放到数组中 AD_wData[3]=ATD0DR1; AD_wData[5]=ATD0DR2; AD_wData[7]=ATD0DR3; AD_wData[9]=ATD0DR4; } voidgetAD1_value(void){ AD_wData[0]=ATD1DR0;//将结果寄存器中的值存放到数组中 AD_wData[2]=ATD1DR1; AD_wData[4]=ATD1DR2; AD_wData[6]=ATD1DR3; AD_wData[8]=ATD1DR4; } voidcpu_init(void){ SYNR=2;//S16MHZ超频 REFDV=1; while(CRGFLG_LOCK==0); CLKSEL=0x80; DDRE=0xfc; DDRM=0xff; DDRB=0xff;//0xe3; DDRP=0xff; DDRH=0xf8; DDRJ=0x3c; PORTB=0x0f; DDRA=0xd0; //PORTA=0x20; asm{ nop } } staticvoidMDCInit(void){ MCCTL=MCCTL&0Xfb;//模数计数器禁止运行 MCCTL=0Xe3;//允许中断,模数计数方式//返回时重新加载所用的常数,分频常数为1 MCCTL=MCCTL|0X04;//模数计数器使能 MCCNT=0X1000; MCCTL=MCCTL|0X08;//把模数常数寄存器的值加载到模数计数器 } voidspeed_init(){ TIOS_IOS0=0; TCTL4_EDG0A=1; TCTL4_EDG0B=0; TIE_C0I=1; } voidInit_ECT(){ TIOS_IOS7=1; TCTL1_OM7=0; TCTL1_OL7=0; TIE_C7I=1;//tc1开中断 TSCR1=0X80;//enablemaintimer TSCR2=0x0d; TFLG1_C7F=1; TC7=75;//中断100微秒=75*32/24/1000000 } voidInitMotorPWM(void){ PWME_PWME2=0; PWMCLK_PCLK2=1;//CHOOSESB PWMSCLB=32; PWMDTY2=25; PWMPER2=200; PWMPOL_PPOL2=1; PWMCAE_CAE2=0; } voidInitServoPWM(void){ PWME=0x00; PWMCTL_CON01=1; PWMPER01=12000;//PER=8000 PWMDTY01=2250;//DTY=1500 PWMCLK_PCLK1=0;//SOURCEISCLOCKA PWMPRCLK=0x44;//PRE=16 PWMPOL_PPOL1=1;//HIGHBEGIN PWME_PWME1=1; } voidInitSerialPort(void){ SCI0BDH=0; SCI0BDL=13; SCI0CR2=0x2c; } voidSend(unsignedchardat){ while(! SCI0SR1_TDRE); SCI0DRL=dat; } voidrun(ucharv1){ PWMDTY2=v1;//D1=0; PWME_PWME2=1; MCIN1=0; MCIN2=1; } voidstop(void){ D1=1; MCIN1=0; MCIN2=1; PWME_PWME2=0; } voidfastrun(void){ D1=0; MCIN1=0; MCIN2=1; } voidbrake(void){ D1=1; MCIN1=1; MCIN2=1; } voidback(ucharv1){ PWMDTY2=v1; MCIN1=1; MCIN2=0; } voidturn_angle(uinta){ PWMDTY0=a/256; PWMDTY1=a%256; PWME_PWME1=1; } voidAD_Init(void) { ATD0CTL3=0x28; ATD0CTL4=0x85; ATD0DIEN=0x00; ATD1CTL3=0x28; ATD1CTL4=0x85; ATD1DIEN=0x00; } intabs1(intp){ if(p>=0)returnp; elsereturn(-p); } /****黑线中心位置计算****/ voidroad_i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 车技 报告 中国地质大学 大一 技术
![提示](https://static.bingdoc.com/images/bang_tan.gif)