智能车模块源程序+很详细.docx

上传人:b****6 文档编号:6984280 上传时间:2023-01-14 格式:DOCX 页数:15 大小:27.17KB
下载 相关 举报
智能车模块源程序+很详细.docx_第1页
第1页 / 共15页
智能车模块源程序+很详细.docx_第2页
第2页 / 共15页
智能车模块源程序+很详细.docx_第3页
第3页 / 共15页
智能车模块源程序+很详细.docx_第4页
第4页 / 共15页
智能车模块源程序+很详细.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

智能车模块源程序+很详细.docx

《智能车模块源程序+很详细.docx》由会员分享,可在线阅读,更多相关《智能车模块源程序+很详细.docx(15页珍藏版)》请在冰豆网上搜索。

智能车模块源程序+很详细.docx

智能车模块源程序+很详细

智能车模块源程序+很详细

 

由于今年组委会光电池和照相机的单独竞争因此,我们选择光电池作为传感器部分。

在比赛中,我们以汽车的速度记录了结果。

为了使汽车跑得更快、更稳定,传感器的探测距离必须很远,这就需要很高的预见性。

随着探测距离的增加,普通红外管的功率越来越小,干扰越来越严重。

因此,我们制作了一个大功率管,同时采用了程控脉冲发光的方法,有效地减少了加热,提高了系统的稳定性

系统采用7.2伏2000毫安镍镉电池作为系统能源,6伏由稳压电路隔离,5伏分别给舵机和单片机供电

DC电机驱动模块接收速度控制信号,控制驱动电机运行,从而控制车速。

转向伺服模块控制舵机转向,从而控制智能车转向测速模块实时测量智能车辆的速度,用于系统车速的闭环控制,以精确控制车速。

系统充分利用了MC9S12DG128单片机的外围模块。

具体模块包括模数转换模块、定时器模块、脉宽调制模块、中断模块、输入输出端口和实时时钟模块等。

在调试

系统的过程中,使用了组委会提供的代码调试环境CodeWarriorIDE,并使用清华大学的Plastid2软件进行了仿真测试。

图1.1系统结构图

第三届全国大学生智能汽车大赛

3.1转向器部分

为了使转向更加灵活,对转向器相关部分进行了一些改动首先,我们将转向机臂加长了85毫米。

这样,对于相同的转向角值,只需要较小的转向齿轮转向角,从而减少了转向齿轮转动时惯性造成的缺点。

其次,我们反向安装转向器,使转向器连杆水平,因为转向器提供的所有力都用于转向。

3.2前轮部分

为了增加前轮转弯时的稳定性,对前轮的相关部分进行了一些改动首先,改变前后垫片的数量,使前轮主销向后倾斜,使车轮具有更好的自动定位功能其次,改变连杆的长度,使车轮向外倾斜。

当车轮转动时,前半部分的重心上移,使汽车转向更加稳定。

第三,通过改变转向机连杆的长度,我们增加了前轮的前束,这也增加了前轮的稳定性。

3.3底盘部分

为了提高汽车在运行期间的稳定性,对现场的相关部分进行了一些改动。

首先,在前轮的相关位置添加衬垫,以降低前轮的重心。

其次,改变后轮轮轴上的调整块,提高后轮的重心,使车体向前倾斜一定程度,增加车辆的稳定性。

3.4后轮零件

首先,更换后轮履带调整块,以增加两个后轮之间的距离这样,汽车转弯时不容易产生侧滑其次,调整后轮的速度差,使汽车转弯更灵活。

4.1电源部分

需要调整电池电压以使智能车辆系统正常工作其中,单片机系统和车速传感器电路需要5V电压,光电传感器和路径识别接收电路工作在5V,伺服电机的工作电压范围为4.8V至6V(或由电池直接提供)。

DC马达可以直接由7.2V2000mAh毫安时镍镉电池供电。

考虑到驱动电机引起的瞬时电压降,采用低电压降的三端调压器是不可避免的。

我们使用lm7805和lm7806作为牙齿稳定芯片。

经测试,电压纹波小,完全满足要求。

电池(7.2v)2000毫安镍镉1

第三届全国大学生智能汽车竞赛

单片机对管5V调压器电路6V转速表转向器

7.2V电机

图4.1系统电压调节图

图4.2799驱动电路如图4.4所示为了提高驱动能力,降低单片机的热输出,该电路采用了两片MC33886并联的方案。

该系统利用脉宽调制控制电机转速,充分利用单片机的脉宽调制模块资源。

电机脉宽调制频率设置为8千赫。

MC33886芯片工作电压为5-40V,导通电阻为140毫欧,脉宽调制频率小于10KHz,具有短路保护、欠压保护、过热保护等功能。

电机驱动芯片安装在制造的电机驱动印刷电路板上。

在设计印刷电路板时,考虑到芯片散热的问题,在芯片的腹部设计了一个方形的通孔。

实际运行结果表明,芯片散热均匀,设计合理。

为了防止电机突然停止时的电磁干扰,在电机两端焊接了一个0.1μF的滤波电容。

r15res21kpwm3pwM5VCC31913182019101112u3in1in2D2D1dncagndpgndpgndpgndmc33886out1out1out2out2out2dncv+V+V+ccpfs67141584516172c12cap47PFR4res21.3CP1421header2r10+7.2v13SW-spdts22res21kr5res21kds2led2u533在程序中,我们直接将脉宽调制值转换为绝对速度,单位为米/秒,这使得智能车的速度更加直观,易于调试。

4.3测速电路

考虑到成本,我们采用红外灯管和黑白码盘作为测速模块的硬件组件码盘是一个32单元的黑白盘,如下图所示:

图4.5码盘的

红外传感器安装在码盘的前面。

虽然精度远低于编码器,但成本低,易于制造。

如果智能车速度快,它可以考虑减少码盘上黑白条纹的数量。

当圆盘随齿轮转动时,光电池接收的反射光强度交替变化,从而获得一系列高低电脉冲。

设置9S12的电容层析成像模块,同时采集光电池输出电脉冲的

4

上升沿和下降沿。

通过在某个时间段内累计脉冲数或记录相邻脉冲之间的间隔时间,可以获得与速度相等的参数值。

测速电路采用自行研制的红外反射式光电测速传感器。

测速电路由红外反射光电对管RPR220、自制编码盘、比较电路等组成

速度测量电路图见2.8红外反射光电对管的光电晶体管信号经比较器处理后输入单片机的计数模块,利用单片机的输入捕捉功能处理智能车的速度信息自制的编码盘有24个黑色条纹,当电机旋转一次时会产生24个输入捕获中断。

微控制器记录两次中断之间的时间间隔t对应于智能车辆的两个中断之间的距离S为16.5/24厘米,即0.6875厘米,其中16.5厘米是智能

能源车辆[7]的后轮的测量周长智能车实时速度V(厘米/秒)的计算公式如下:

伏?

圣?

16.5/24T?

0.6875TCM/s

30033krpr220328a14lm3585.1kioc0VCC10kVCC5.1k图4.6速度测量电路

4.4红外线管对准检测电路

由于我们使用高功率管对准,红外线管对准电路是整个电路中要求最高的,确保管对准的正常运行并不重要,但也要考虑能耗和加热经过测试,我们发现当单对管子被提供100毫安到170毫安的电流时,它可以确保距离为20至30厘米

此时,每对管道的管道压降为1.2至1.5伏为了进一步增加发光量,我们采用了双发光管的方法,即一个接收管对应两个发光管。

为了降低整体能耗我们有同一对串联的发射管和14对并联的发射管。

同时,irf540用于开关控制。

控制管的脉冲发光开关频率为200赫兹这不仅保证了对大型前瞻性检测的需要,还降低了整体能耗和对电源的影响

5

第三届全国大学生智能汽车大赛

图4.7脉冲发光二极管先串联后并联的电路图

图4.8对面

图4.9对面

4年5月,dip开关电路

在智能车比赛开始后无法修改智能车的硬件和软件。

在确保有效和可靠的硬件的同时,软件可能无法适应新的站点。

因此,有必要设计倾角开关来设置智能车的相关参数。

DIP开关电路如下图所示:

6

R1表头9123456789VCCSW7SW6SW54SW34SW2SW1SW012345678SW-DIP8S161151413121109图4.9dip开关

这是一个八段dip开关。

我们把它分成上下两部分。

显然,每个部分有16个状态。

前四个改变转向器参数,后四个改变DC电机参数。

这对适应新网站非常有好处。

5.1路径搜索算法

对于该控制系统,采用了14对光电管对的方案,在车身头部10厘米处排成一排编号为6和7的光伏管位于正中心位置。

使用14个传感器的道路识别传感器对白色的反射率大于对黑色的反射率。

单芯片模数转换器的读入值相应较大。

传感器信号在程序中被处理,以判断传感器是否检测到黑色引导线

将白色和黑色道路的单个传感器的ADC值之间的差分成两个相等的部分,并且每次处理实时传感器信号时,判断采样ADC值和黑色道路的ADC值之间的差属于两个部分中的哪个部分如果接近黑色部分,则确定传感器检测到黑线,并且对应于传感器的变量被设置为确定值1;如果接近白色部分,则确定传感器检测到白线,并且对应于传感器的变量被设置为确定值1;为了提高判断的准确性,采用中值滤波方法消除采样模数转换器值时的瞬时干扰。

在检测到

路径之后,测量的路径值被临时存储,然后路径信息被传输到转向机和马达控制部分,以选择给定的合适的旋转角度和速度。

7

第三届全国大学生智能汽车竞赛

5.2舵机、电机控制

智能汽车舵机和电机采用经典的PID控制方法然而,由于转向机和马达的不同性能要求,已经分别进行了不同的修改。

PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成输入e(t)和输出u(t)之间的关系是

积分的上下限分别为0和t

,因此其传递函数为:

g(s)=u(s)/e(s)=kp(1+1/(ti*s)+TD*s)

,其中KP为比例系数;TI是积分时间常数;TD是用于控制电流的差分时间常数

比率KP,误差值乘以负常数p(代表比率),然后加到预定值只有当控制器的输出与系统误差成正比时,p才成立。

KP可以快速跟踪变化量。

及时产生相关监管效果然而,KP有差动调节,不能消除静态误差。

集成了KI来控制过去。

误差值是一段时间内误差的总和,然后乘以负常数I,然后加到预定值上我从过去的平均误差值中找出系统输出结果和预定值之间的平均误差简单的比例系统在一个预定值附近来回振荡和变化,因为该系统不能消除多余的校正。

通过添加一个负的平均误差比值,平均系统误差值将总是减小。

因此,最终这个PID回路系统将被设置在预定值

差分KD用于控制未来。

计算误差的一阶导数,乘以负常数D,最后加到预定值上。

对这种衍生物的控制将对系统的变化作出反应。

导数结果越大,控制系统对输出结果的响应越快。

这个D参数也是为什么PID是一个可预测的控制器。

d参数非常有助于减少控制器的短期变化。

在第三届全国大学生智能汽车大赛中,一些速度为

8

、速度为

的实际系统可能不需要D参数

舵机PID

由于舵机是一个大延时的执行器,PID控制中不能增加积分环节否则,汽车会振动。

所以这辆车是由警察控制的同时,增加了一阶惯性环节,形成不完全微分,给汽车一个提前调整的机会。

的实际使用中,为了减少计算时间,将位置式PID转换成增量式PID公式:

电机PID控制

小车的运行过程,不同的速度值需要与不同的跑道相匹配,所以电机的PID是一个给定值不断变化的PID汽车的目标速度(目标速度)如下所示:

1“汽车在直线轨道上,目标速度的最大值为200。

”2”汽车在大弯道上,物体速度为160

3”汽车是在小曲线或S形曲线上。

物体速度为1204英寸,汽车冲出跑道,物体速度为70

5”汽车从直道进入弯道,物体速度逐渐降低

9

9

第三届全国大学生智能车大赛

6“汽车从弯道进入直道,Object_Speed逐渐提高

在实验中发现,PID的超调主要在第一个波形中起作用,即当单速从很大到很小时,或者当单速从低速突然加到高速时,会有很大的超调。

然而,这种过冲不是有害的,因为当速度要求突然改变时,通常是汽车从直道进入弯道或者从弯道进入直道的过程。

这个过程通常需要非常快的加速和减速。

由于汽车的惯性,常规的PID调节难以满足要求。

这时,使用大的过冲可以使汽车有一个加速或制动的过程,以更好地达到所需的速度。

6.1Codewarrior开发环境

在整个开发和调试过程中,使用了Metrowerks专门为MC9S12系列提供的一整套开发工具(FreescaleCodewarriorIDE4.6)。

这是一套用C语言编程的集成开发环境——智能车辆定位系统的软件设计部分就是在这个开发环境中完成的。

Codewarrior是一款软件工具,专门为Metrowerks公司提供的飞思卡尔的所有微控制器和数字信号处理器嵌入式应用开发。

这些包括集成开发环境、处理器专家、全芯片模拟、可视化参数显示工具、项目工程管理、交叉编译器、汇编器、链接器和调试器。

CodeWarrOside可以自动检查您的代码是否有明显的错误。

它通过集成的调试器和编辑器扫描您的代码,以发现并减少明显的错误,然后编译并链接程序,以便计算机能够理解并执行您的程序。

每个应用程序都要经过编码、编译、编辑、链接和调试的过程,使用的开发工具有CodeWorrior。

MetrowerksCodewarriorIDE中的mc9s12dg128.h文件为对应于所有寄存器的存储映射地址定义了宏。

开发人员可以在软件开发过程中直接调用这些宏。

6.2软件模拟

以便更好地定量分析影响汽车行驶的各种因素,并最大限度地节约时间和成本

10

第三届全国大学生智能汽车竞赛

我们采用了软件仿真和实际调试相结合的方法。

模拟软件使用清华大学的PLAST2通过仿真,我们发现:

1,汽车传感器的检测距离对车速有决定性的影响。

因此,传感器

应尽可能探测。

然而,传感器的检测距离不能超过最小转弯半径。

否则会有盲点。

2,适当增加转向器的灵敏度可以使转向更加灵活。

因此,在

的实际调试中,我们加长了舵机力臂。

6.2和

的实际调试过程中,我们发现汽车在直路上会左右摇晃。

通过软件设置死区或其他处理方法,效果不明显。

最后,我们发现方向盘和汽车前轮之间的间隙是罪魁祸首。

通过将前轮设置成内八角形,这个问题得到了完美的解决。

的调试过程中,我们增加了液晶显示器和蜂鸣器。

比赛期间不需要这些辅助设备来减轻汽车的重量。

但在调试过程中,通过这些设备,我们可以及时了解汽车的运行情况,达到事半功倍的效果。

11

表7.1第三届全国大学生智能车竞赛模型车技术参数统计表

项目参数路径检测方法(竞赛题目组)光电组模型几何尺寸(长、宽、高度(mm)车型轴距/轨道距离(mm)车型平均电流(匀速)(毫安)电路总电容(微加工)传感器类型和数量385*220*60200/150200430红外线管15新增加的伺服电机0轨道信息检测空间精度(mm)9轨道信息检测频率(次/秒)200主要集成电路类型/数量9s12微控制器最小系统/112

第三届全国大学生智能汽车竞赛

33886电机驱动电路/4速度检测电路/1模块重量(带电池)(kg)0.9参考

[1]黄凯生,金华民,蒋南南,韩国智能模型车技术方案分析,北京:

清华大学汽车安全与节能国家重点实验室,2004.3256北京:

清华大学出版社,2004.2

[3)《LM2940数据手册》,2000年7月,[国家半导体公司4)《LM7806数据手册》[国家半导体公司5)《RPR220数据手册》,罗门

[6)《半导体技术数据手册》MC33887‘2002年8月摩托罗拉公司[7)《大型赛车模具装配手册》

[8]CodeWarriorIDE3.1帮助数据手册

[2002年8月摩托罗拉公司

13

第三届全国大学生智能汽车大赛

[13]《12科16b8v1数据表》,2002年7月摩托罗拉公司[14][15][16]

程序

电机PID控制程序259

typedef无符号字符INT8U。

typedef带符号charINT8Stypedef无符号intINT16Utypedef带符号intINT16Stypedef无符号长INT32U。

typedef带符号长INT32Stypedef浮点FP32typedef双FP6414

//无符号8位数//有符号8位数//无符号16位数//有符号16位数//无符号32位数//有符号32位数//单精度浮点数//双精度浮点数

#defineMAX_32(有符号长)0x7fffffl#defineMIN_32(有符号长)0x8000000001

#define有符号整数比例。

有符号intIntegralGain带符号intIntegralGainScale有符号的int衍生词。

带符号的int派生类。

带符号intPositivePIDLimit带符号整数负数极限;有符号intIntegralPortionK_1;带符号intInputErrok_1;}sCaiXinBoPIDsCaiXinBoPIDSpdPID

externsignedintCaixinBopidController(signedintDesiredValue,signedintMeasuredValue,ScaixinBopid*pParams);

静态签名长L_sub(寄存器签名长src_dst,寄存器签名长src2)

15

第三届全国大学生智能汽车竞赛

{}

静态签名长L_deposit_l(寄存器签名长ssrc){}

静态签名intextract_l(寄存器签名长lsrc){}

静态签名长L_mult

return(签名长)(ssrc)。

return(签名int)lsrc。

注册签名长laccumlaccum=sinp1laccum*=sinp2。

返回laccum

return(src_dst+src2)。

第三届全国大学生智能车大赛

符号整数积分控制器(符号整数期望值,符号整数测量值,ScaixinOpid*PParams){

符号长比例比例比例比例,积分比例,积分输出;签名的int输入恐怖;必须设置

/*-*/

/*饱和模式*//*输入恐怖=sub(所需值,测量值);*//*输入误差*/

/*-*/

/*输入误差计算-16位范围,有和无饱和模式*/

PidOutput=L_sub(L_deposit_L(DesiredValue),L_deposit_L(MeasuredValue));/*输入错误-32位范围*/

如果(PIDoutput>MAX_16)/*输入错误大于0x00007fff=32767-32位范围*/

输入错误=MAX_16/*输入误差=最大值。

正16位有符号值*/else

if(PidOutputInputError=MIN_16;/*输入误差=最小值。

负16位有符号值*/else

输入恐怖=提取_l(PidOutput);/*输入误差-16位范围*/

/*-*/

17

第三届全国大学生智能汽车竞赛

/*比例计算*/

比例比例=l_mult(p参数->比例增益),输入误差)>(p参数->比例代数+1);

/*-*/

/*积分部分计算*/

积分部分=L_mult((pParams->IntegralGain),输入恐怖)>(pParams->IntegralGainScale+1);

/*步骤k中的积分部分+步骤k-1中的积分部分*/积分部分=L_add(积分部分,L_存款_l(pParams->积分部分k_1));

/*整数部分限制*/

if(IntegralPortion)(pParams->positivepidLimit))

(pParams->IntegralPortionK_1)=(pParams->positivepidLimit);else

if(integralportonnegativePidLimit)

pParams->IntegralPortionK_1=pParams->negatepidelimit;else

pParams->IntegralPortionK_1=extract_l(IntegralPortion);

/*-*/

/*导数部分计算*/

PidOutput=L_sub(L_deposit_L(输入恐怖),L_deposit_l(pParams->输入恐怖_1));/*[e(k)-e(k-1)]/*e(k-1)=e(k)*/如果(PidOutput>MAX_16)/*[e(k)-e(k-1)]大于0x00007fff=32767-32位范围*/

InputError=MAX_16;/*[e(k)-e(k-1)]=最大。

正16位有符号值-16位范围*/else

if(PidOutputDeriveGain),InputError)>>(pParams->DeriveGaInScale+1);

/*-*/

/*控制器输出计算*/

PidOutput=L_add(PidOutput,比例分配比例);/*导数部分+比例部分*/

PidOutput=L_add(PidOutput,

L_deposit_L(PParams->IntegralportionK_1));/*+积分部分=控制器输出*/

/*控制器输出限制*/

if(PidOutput>PParams->positivePidLimit)PidOutput=PParams->positivePidLimit;ELSE

IF(PidOutDownePideLimit)

19

3届全国大学生智能车竞赛

PID输出=参数->负极性EpidLimit;,

初始值void_init(void){

/*设置rti中断频率*/

/*调整为1毫秒(1.024ms),16MhZ振荡器*/

RTIL=0x1f;//5*216:

48.8赫兹//0x1f//setrtiprescaler:

:

晶振16384分频;(低四位+1)*(2(高三位+9))CRGINT=0x80;//使能RTI中断;//低四位:

1-7,不能为0,否则分频器不起作用}

空隙集_锁相环(空隙){

CLKSEL=0x00;PLLCTL=0xe1。

0;//转换队列长度8,非先进先出存储模式,ATD0CTL4=0x85//8bus_clk/(2*(5+1))

位精度,AD

时钟为

ATD0CTL5=0x90;//右对齐,无符号数,单转换队列模式,第1通道开始,6通道;多通道8通道,

ATD1CTL2=0xc0,从通道0开始;//ADPU,快速标志清除

ATD1CTL3=0x30;//序列长度:

6,非fifo模式,ATD1CTL4=0x85//8时钟:

bus_clk/(2*(5+1))

bit

decision,ATD

ATD0CTL5=0x90;//右对齐,无符号数,单转换队列模式,第1通道开始,6通道;多通道8路,从通道0开始,

}/*ATD初始化程序*/

Vortuservio_init(Void)//转向机16位脉宽调制控制{

PWME_PWME1=0;//禁用PWM1伺服PWMPRCLK|=0x03//clka:

除以8

PWMCLK|=0x00。

//这是默认值//通道1使用时钟源

//24兆赫兹/8=3兆脉宽调制POL_PPOL1=1//第一高电平

PWM

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1