智能车技术方案.docx
《智能车技术方案.docx》由会员分享,可在线阅读,更多相关《智能车技术方案.docx(26页珍藏版)》请在冰豆网上搜索。
![智能车技术方案.docx](https://file1.bdocx.com/fileroot1/2023-4/17/3fcce78c-4c8e-4151-825b-2fed00a01b3b/3fcce78c-4c8e-4151-825b-2fed00a01b3b1.gif)
智能车技术方案
智能车设计技术报告
光电组
成员姓名:
刘文雄
李政
张建伟
飞思卡尔智能车设计方案
————光电组
目录:
一、绪论…………………………………………………………2
二、整车设计方案………………………………………2
2.1整车工作原理…………………………………………………………2
2.2整车布局…………………………………………………………………2
2.3系统设计结构图………………………………………………………3
2.4系统软件设计思路……………………………………………………3
三、机械系统设计………………………………………4
3.1红外传感器支架的设计安装…………………………………………………4
3.2前轮倾角的调整…………………………………………………………5
3.3底盘高度的调整………………………………………………………6
3.4舵机安装结构的调整……………………………………………………6
3.5后轮差动机构调整……………………………………………………7
3.6车体重心的调整…………………………………………………………7
3.7光电编码器的安装…………………………………………………………8
四、硬件电路设计……………………………………………8
4.1最小系统板的设计………………………………………………………8
4.2电源模块的设计……………………………………………………………10
4.3电机驱动模块的设计………………………………………………………10
4.4速度传感器…………………………………………………………………11
4.5舵机驱动模块………………………………………………………………12
4.6图像采集电路………………………………………………………………12
五、软件系统设计……………………………………………14
5.1S12单片机简介……………………………………………………………14
5.2系统模块介绍及系统初始化……………………………………………15
5.3图像采集及黑线提取算法………………………………………………15
5.4舵机控制策略………………………………………………………………19
5.5速度控制策略………………………………………………………………19
一.绪论
为了提高大学生的动手能力与创新能力,教育部与飞思卡尔公司共同组办‘飞思卡尔’杯全国大学生智能汽车邀请赛”,这个大赛的综合性很强,是以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感、电子、电气、计算机与机械等多个学科交叉的科技创意性比赛。
通过多年的发展比赛已具有电磁组、光电组与摄像头组三个赛组。
通过对以往比赛情况以及今年比赛规则的了解,我们选择了以红外对管为传感器的智能车设计。
以下主要介绍了竞速车模的整体框架、硬件设计、红外对管赛道采集模块、光电编码器速度采集模块、执行模块电路设计、电源管理模块以及系统软件设计。
在硬件设计方面,结合大赛选用芯片的要求,自行设计实现了系统的电路板,软件系统以Freescale16位单片MC9S12XS128作为系统控制处理器,采用红外对管获取实时赛道信息,通过红外对管直接提取赛道黑线,采用PD控制算法对舵机转向进行控制。
通过光电编码器实时获取小车速度,采用P控制策略形成速度闭环控制。
二.整车设计方案
2.1整车工作原理
智能车的总体工作原理为:
以红外对管对赛道光线不同反射提取赛道图像并将对管坐标化进行计算塞到我位置同时输入到S12控制核心;通过光电编码器来检测车速,并采用S12的输入捕捉功能进行脉冲计数计算速度与路程;舵机转向采用PD控制;电机转速控制采用PID控制,通过PWM控制驱动电路,调整电机的功率;而车速的目标值由默认值与运行安全监控综合控制。
2.2整车布局
1、整车低重心设计。
通过以往几届比赛的经验我们看到,往往重心低,体积小巧,布局紧凑的赛车更能取得好的成绩。
而重心过高的“长颈鹿”往往在高速过弯时出现侧翻。
而通过汽车理论与现实中的竞速类比赛我们也可以看到,凡是竞速类的赛车均是低重心设计。
于是,我们通过合理布局电路板与各种传感器,尽可能地降低整车重心。
在不影响传感器前瞻,或者不过度牺牲传感器性能的情况下,尽量降低红外对管传感器的重量与高度,以提高赛车的侧翻极限。
2、整车电路集成化,一体化设计。
模块化设计与一体化设计是两种互有利弊的设计思路。
模块化的好处是系统有良好的扩展性,可升级性,维护性好。
但缺点是体积较大,接插件较多,整个系统有很多废重,不利于小型化与轻量化。
集成化的设计思路的好处是原件密度高,系统可以小型化一体化,对于布局空间非常局促的智能车来说,小型化的电路设计更为方便布局。
但是缺点是系统升级麻烦,需要极高的可靠性的保证。
我们在最终采用的方案中,通过综合考虑各方面因素,在确定了系统最终硬件方案不做大的更改的情况下,在确保了系统可靠性的前提下,最终选择了一体化,集成化的硬件设计思路。
使车体硬件电路布局紧凑,稳定可靠。
3、为了让传感器获得更多更远的信息,让传感器向前稍微倾斜一个角度,获得更大的前瞻。
4、轻量化设计。
重量的减轻,可以带来加速快,减速及时等一系列有点,所以在达到设计目标的情况下,应尽可能减轻车重。
2.3系统设计结构图
2.4系统软件设计思路
系统的软件方面,我们首先要考虑的因素就是要保证赛车的稳定性。
以此目标为核心,我们的软件包括了一下几个子模块:
1、系统初始化与硬件接口
2、图像处理与黑线提取
3、起始线判别
4、路径识别
5、控制算法
三.机械系统设计
3.1寻迹传感器的布局常见的有以下几种方案
寻迹传感器的布局常见的有以下几种方案
方案一:
一字形布局
反射式光电传感器在小车前方一字形简单排布。
在一字形中传感器的间隔有均匀布局与非均匀布局两种方式,均匀布局不利于弯道信息的准确采集,通常采取的是非均匀布局。
考虑到弧度信息采集的连贯性,非均匀布局的理论依据是等角度分布原则,即先确定一合适的定点,从顶点依次等角度画射线,射线与传感器水平线相交的位置即为传感器的位置。
这种方案信息检测相对连贯,准确,使控制程序算法简单,小车运行连贯,稳定。
方案二:
M形布局
传感器呈M形排布。
这种方案的优点在于拓宽了边沿传感器的检测范围,更适合于小车快速行进中的弯道检测,但相对一字形布局来说,M形布局不利于信息检测的稳定,易于产生振荡,不利于小车行驶的稳定。
方案三:
活动式传感器布局
前面两种方案都是固定的布局方式,使传感器对赛道有一定的依赖。
在这个方案中,传感器的位置是可以在一定范围内灵活排布的。
这种方案的布局思路是传感器在安装板上的位置是可调的,先将传感器排布成为矩形点阵,根据不同的赛道情况而灵活地作出调整,就可以设计出不同的布局方式而适应不同的赛道。
这样对不同赛道有更强的适应性。
但这种方案可调性大,临时调节较难,其次机械设计中体积较大,增加了小车的重量,不利于加减速。
在我们的方案选择中,我们采用的是上述第一种方案。
3.2前轮倾角的调整
根据汽车理论,前轮参数的调整对智能车直线行驶的稳定性、转向的轻便性及轮胎磨损有很大影响。
前轮是转向轮,它的安装位置由主销内倾、主销后倾、前轮外倾与前轮前束等4个参数来决定。
主销内倾是指主销装在前轴略向内倾斜的角度,它的作用是使前轮自动回正。
内倾角度越大时前轮自动回正的作用就越强烈,但转向时也越费力,轮胎磨损增大;反之,内倾角度越小时前轮自动回正的作用就越弱。
我们没有对此参数进行调整。
主销后倾(Caster)是指主销装在前轴,上端略向后倾斜的角度。
它使车辆转弯时产生的离心力所形成的力矩方向与车轮偏转方向相反,迫使车轮偏转后自动恢复到原来的中间位置上。
由此,主销后倾角越大,车速越高,前轮稳定性也愈好。
主销内倾与主销后倾都有使汽车转向自动回正,保持直线行驶的功能。
不同之处是主销内倾的回正与车速无关,主销后倾的回正与车速有关,因此高速时后倾的回正作用大,低速时内倾的回正作用大。
由于智能车比赛赛道逐渐向复杂型,多弯的赛道发展,所以我们更多的要求提升赛车弯道性能,故此处我们保持了赛车原装的前2后2的垫片设计。
前轮外倾角(Camber)对赛车的转弯性能有直接影响,它的作用是提高前轮的转向安全性与转向操纵的轻便性。
前轮外倾角俗称“外八字”,如果车轮垂直地面一旦满载就易产生变形,可能引起车轮上部向内倾侧,导致车轮联接件损坏。
此处可根据实际情况,调整5°左右的外倾角。
所谓前束(Toe-out)是指两轮之间的后距离数值与前距离数值之差,也指前轮中心线与纵向中心线的夹角。
前轮前束的作用是保证汽车的行驶性能,减少轮胎的磨损。
前轮在滚动时,其惯性力会自然将轮胎向内偏斜,如果前束适当,轮胎滚动时的偏斜方向就会抵消,轮胎内外侧磨损的现象会减少。
此处一般调整为0°前束。
3.3底盘高度的调整
底盘适当降低,在可以过坡道的情况下,尽量降低底盘,从整体上降低车
的重心,使车在转弯时可以更加稳定、快速。
考虑到车上坡时重心后倾,应将底盘前端低于底盘后端,增加前轮上坡时的抓地力。
3.4舵机安装结构的调整
舵机是整车延时比较大的一个环节,如何在保证舵机转向的正确性的前提下进一步减小其动作延时,以提高系统的响应速度,是舵机性能优化的目标。
增加摄像头的前瞻能力可以在一定程度上弥补舵机的时延。
舵机反应速度是弯道处车速提高的主要瓶颈之一。
提高智能车的过弯速度可有效地提高平均速度。
为加快舵机的响应速度,我们参考了上两届的做法——将舵机架高。
舵机按立式反装,使舵机轴处于中间位置,即舵机轴与两前轮间连杆长度相等。
因左右转向时的力臂相同,故左右转向角度、速度均相同。
架高舵机,加长舵机连杆长度,这样舵机转过一个很小的角度,前轮就能转过很大角度,从而加快了响应速度。
但舵机转动时受到的阻力矩也变大,会导致转向变慢。
这是两个相互矛盾的因素,需在实验中寻找最优解。
增加前轮下压力,从而提高了前轮的抓地力,当然这样也加重了舵机负载,不过因为转向连杆连接点与舵机轴心距离适中,所以不会烧毁舵机。
3.5后轮差动机构调整
当赛车在正常过弯时(假设无转向不足亦无转向过度),4个轮子的转速皆不相同,依序为:
外侧前轮>外侧后轮>内侧前轮>内侧后轮。
此次所使用车模配备的是后轮差速机构。
差速器的特性是:
阻力越大的一侧,驱动齿轮的转速越低;而阻力越小的一侧,驱动齿轮的转速越高。
以后轮差速器为例,在过弯时,因外侧后轮轮胎所遇的阻力较小,轮速便较高;而内侧后轮轮胎所遇的阻力较大,轮速便较低。
差速机构的作用是在车模转弯的时候,降低后轮与地面之间的滑动;并且还可以保证在轮胎抱死的情况下不会损害到电机。
差速器的调整中要注意滚珠轮盘间的间隙,过松过紧都会使差速器性能降低,转弯时阻力小的车轮会打滑,
从而影响车模的过弯性能。
好的差速机构,在电机不转的情况下,右轮向前转过的角度与左轮向后转过的角度之间误差很小,不会有迟滞或者过转动情况发生。
3.6车体重心的调整
车体重心位置对赛车加减速性能、转向性能与稳定性都有较大影响。
重心调整主要包括重心高度与前后位置的调整。
理论上,赛车重心越低稳定性越好。
因此除了摄像头装得稍高以外,其他各个部件的安装高度都很低。
除此之外,车辆重心前后方向的调整,对赛车行驶性能也有很大的影响。
根据车辆运动学理论,车身重心前移,会增加转向,但降低转向的灵敏度(因为大部分重量压在前轮,转向负载增大),同时降低后轮的抓地力,影响加减速性能;重心后移,会减少转向,但增大转向灵敏度,后轮抓地力也会增加,提高加减速性能。
因此,确定合适的车体重心,让车模更加适应比赛赛道是很关键的。
将摄像头安装在车体靠后位置,这样使得赛车的重心后移,极大地增加了赛车的转向灵活度。
3.7光电编码器的安装
光电编码器安装主要考虑的问题是与齿轮的咬合,太紧会使电机转动吃力并且会发出很大的噪声,太松有时候会丢齿。
因此最好使得安装的编码器松紧程度能够调整最好。
四.硬件电路设计
4.1最小系统板的设计
所谓单片机最小系统,是指在单片机外部增加尽可能少的元件电路,组成一个让单片机可独立工作的系统。
MC9S12DG128芯片是全国智能汽车竞赛组委会指定各参赛队使用的FreescaleHCS12系列中的一款芯片,本节介绍以MC9S12DG128芯片为核心的最小系统的组成,如图5.9所示。
该最小系统主要包括以下几个部分:
时钟电路、串口电路、BDM接口、供电电路、复位电路与调试用LED灯。
各个部分的功能分别如下:
(1)时钟电路为单片机提供一个外接的16Hz的石英晶振。
(2)串口的RS-232驱动电路可实现TTL电平与RS-232之间的转换。
(3)BDM接口允许用户通过该接口向单片机下载与调试程序。
(4)供电电路主要是给单片机提供+5V的电源。
(5)复位电路是通过一个复位芯片给单片机一个复位信号。
(6)调试用LED灯与单片机的PORTB口相连,供程序调试使用。
4.2电源模块的设计
智能车系统采用配发的标准车模用7.2V2000mAhNi-Cd充电电池进行供电,但各个模块所需要的电压不同,因此需要进行电压调节,并且由于电机运行会产生干扰噪声,需要将控制电源与电机驱动电源了分开。
4.3电机驱动模块的设计
4.5舵机驱动模块
智能车采用的舵机是大赛组委会统一规定使用的FutabaS3010。
该舵机标称使用的输入供电电压为4.8-6V,硬件连线上,由单片机输出一路16位精度的PWM信号接舵机控制线,即能使舵机在正负45度范围内转动。
4.6图像采集电路
五.软件系统设计
5.1S12单片机简介
根据大赛规则要求,核心控制模块可以采用组委会提供的HCS12模块,也可以选用飞思卡尔公司8位、16位系列微控制器(单核,例如不允许使用MC9S12X系列)芯片自制控制电路板。
每台模型车的电路板中只允许使用一种型号微控制器。
8位微控制器最多可以使用2片,16位微控制器限制使用1片;不得同时使用8位与16位微控制器。
我们最终决定采用飞思卡尔公司的MC9S12XS128芯片作为智能车的主控芯片。
MC9S12XS128是以CPU12内核为核心的16位单片机,片内存储器有512KB的Flash、14KB的RAM与4KB的EEPROM。
片内包含2路SCI、3路SPI、5路CAN1路I2C等通讯模块,有16路10位ADC模块,8路8位PWM模块与8路16位定时器模块。
5.2系统模块介绍及系统初始化
由于比赛水平的不断提高及判断坡道,判断起始线等新的比赛元素的加入,导致智能车系统不论从硬件上还是软件上都逐渐趋向复杂。
体现到单片机上,就是系统被使用的模块越来越多,融合性越来越强。
我们在最终就使用了MC9S12XS128单片机的PWM模块来驱动电机与舵机,ECT模块来测速与捕捉终端,AD模块来采集加速度传感器信号与进行电压监测。
SPI模块与无线监控调试模块通信,SCI模块做有线通信,I2C模块与图像传感器通信,再加上并行图像数据的数据线,键盘扫描控制线,最终几乎占用了单片机的大多数引脚与常用功能。
5.3图像采集
我们采取直接黑线提取地方法,我们将每个传感器进行坐标化,当传感器位于黑线上方时,用此传感器的坐标进行小车的位置判断,通过程序计算控制小车舵机,速度等一些参数
5.3.4起始线的判别
由于比赛新增了赛车必须在起始线后三米内停下的规则,这就要求赛车必须具有稳定可靠提取起始线作为停车标志的功能。
提取起始线的难点在于随着比赛水平的不断提高,车速越来越快,并且起始线一般在较长的直道上,赛车驶过时的速度一般都比较高甚至非常高,这就进一步增加了起始线提取的难度。
同时,赛车通过起始线时的角度余量也是一个需要考虑与解决的问题。
所谓的角度余量就是要考虑赛车在以一定角度通过起始线而不是垂直通过起始线时,也应能稳定检测到起始线,而不是出现误检或漏检。
这种情况包括车刚从弯道进入直道斜对起始线或者在直道上因未知情况并不是正对起始线的情况。
受到光电传感器限制,我们最终选择用拨码开关控制起始线。
当车每经过一个十字线或经过起跑线一次,我们就记录一次,最终通过控制记录个数控制小车请停止。
5.4舵机控制策略
在舵机控制策略方面,我们最终还是采用了最为经典的PD控制策略,具体的策略是通过前面所述的路径判别算法,判断赛车前进方向上的路况,对赛道类型进行分类,进而选择相应的控制参数与策略。
5.5速度控制策略
智能车的速度控制策略我们仍旧是选择了的P控制策略。
此种方法简单实用,瞬态响应快而又兼顾了稳态无差调整。
在实际比赛种也为许多队伍所采用。
在实际智能车速度控制系统中,由于控制周期不可能足够短,并且电机延迟较大,该方式实际效果不佳,为了获得良好的动态性能的同时又兼顾稳态性能,我们采用了改进的控制算法以获得更快地响应速度,而在速度误差较小或者速度接近设定值时,则将控制器切换为PI控制,进行细调,进而获得精确稳定的控制效果。
六.控制程序
#include
#include
#pragmaLINK_INFODERIVATIVE"mc9s12xs128b"
//====================publicvariable=====================
#defineideal_speed180
#definekp24
#defineki0
#definekd0
#defineAngel_Center1380//舵机中心位置
#definelose_limit300//丢失黑线后滑翔时间
//-------------------------function-------------------------
voidcrg_init(void);//锁相环初始化
voidatd_init(void);//AD转换初始化
voidpwm_init(void);//PWM信号初始化
voidect_init(void);
voidsam_position(void);//读adc结果
voidcar_position(void);//计算car_positn
voidangle(void);//计算转角
voiddirver(void);
voiddelay(void);
voidDelayNS(intdly);
voidslow(void);
voidport(void);
voidcheck_start(void);
voidfound_start(void);
voidbegin_delay(void);
voidpid();
unsignedintabsolute(int);
wordsam_atd_g[15];
intadc_limit=150;
intc=0;
unsignedcharsd=0,b,y;
staticunsignedchara;
intblack_sensor_number;
intpre_positn=0;
intcar_positn;
intangle_data;
intflag=0;
intpulse_count;
intpre_error=0;
intpre_d_error=0;
intNOP;
intpk=40;
intstart_acc=0;
intfinish_flag=0;
intff=0;
intx,z;
//======================mainloop==========================
voidmain(void)
{
DelayNS(3500);
PORTB=0x00;
DDRB=0x00;
crg_init();//锁向环初始化
atd_init();//初始化AD转化
pwm_init();
port();
PWMDTY01=1380;
for(;;)
{
//port();
//ATD0CTL5=0x10;
//while(!
ATD0STAT0_SCF);
sam_position();//读采样值
car_position();//计算car_positn
check_start();
angle();
slow();
dirver();//计算转角
_FEED_COP();
}
}
//=====================systemini()========================
//-----------------------crg_init-------------------------
voidcrg_init(void)
{
CLKSEL=0X00;//disengagePLLtosystem
PLLCTL_PLLON=1;//turnonPLL
SYNR=0xc0|0x05;
REFDV=0x80|0x01;
POSTDIV=0x00;//pllclock=2*osc*(1+SYNR)/(1+REFDV)=96MHz;
_asm(nop);//BUSCLOCK=48M
_asm(nop);
while(!
(CRGFLG_LOCK==1));//whenpllissteady,thenuseit;
CLKSEL_PLLSEL=1;//engagePLLtosystem;
}
//----------------------pwm_init--------------------------
voidpwm_init(void)
{
PWME=0x00;
PWMPRCLK=0x33;//8分频为6M
PWMSCLA=0x03;//1M
PWMSCLB=0x02;//PWMSCLB=0x06;0.5M
PWMPOL=0xff;
PWMCLK=0X2b;
PWMCAE=0x00;
PWMCTL=0X10;//01级联
PWMDTY01=1365;
//PWMDTY3=130;
PWMPER01=13000;
PWMPER3=250;
PWME_PWME1=1;
PWME_PWME3=1;
}
//-----------------------atd_init-----------------------
voidatd_init(void)
{
ATD0CTL1=0x00;//选择AD通道为外部触发,8位精度,采样前不放电
ATD0CTL2=0x40;//标志位自动清零,禁止外部触发,禁止中断
ATD0CTL3=0xf0;//右对齐无符号,每次转换4个序列,NoFIFO,Freeze模式下继续转
ATD0CTL4=0x81;//采样时间为4个AD时钟周期,PRS=1,ATDClock=6MHz
ATD0CTL5=0x30;//特殊通道禁止,连续转换,多通道转换,起始通道为0转换14个通道
ATD0DIEN=0x00;//禁
}
//-------