北京科技大学一队技术报告.docx

上传人:b****5 文档编号:7161670 上传时间:2023-01-21 格式:DOCX 页数:42 大小:553.58KB
下载 相关 举报
北京科技大学一队技术报告.docx_第1页
第1页 / 共42页
北京科技大学一队技术报告.docx_第2页
第2页 / 共42页
北京科技大学一队技术报告.docx_第3页
第3页 / 共42页
北京科技大学一队技术报告.docx_第4页
第4页 / 共42页
北京科技大学一队技术报告.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

北京科技大学一队技术报告.docx

《北京科技大学一队技术报告.docx》由会员分享,可在线阅读,更多相关《北京科技大学一队技术报告.docx(42页珍藏版)》请在冰豆网上搜索。

北京科技大学一队技术报告.docx

北京科技大学一队技术报告

第一届“飞思卡尔”杯全国大学生

智能汽车邀请赛

技术报告

 

学校:

北京科技大学

队伍名称:

北京科技大学一队

参赛队员:

肖玮

艾宁

谭启寅

带队教师:

刘立

 

 

关于技术报告和研究论文使用授权的说明

本人完全了解第一届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:

参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。

参赛队员签名:

带队教师签名:

日期:

引言

首届"飞思卡尔"杯全国大学生智能汽车竞赛在清华大学的承办下终于落户中国,本届大赛采用邀请赛的方式,邀请了国内具有控制科学与工程学科博士授予点高校(含港澳)50余所,我们北京科技大学作为参赛方,有幸参加了此次“飞思卡尔智能汽车邀请赛”。

这份技术报告中,我们小组通过对整体方案、电路、算法、调试、车辆参数的介绍,详尽地阐述了我们的思想和创意,具体表现在电路的创新设计,以及算法方面的独特想法,而对单片机具体参数的调试也让我们付出了艰辛的劳动。

这份报告凝聚着我们的心血和智慧,是我们共同努力后的成果。

在准备比赛的过程中,我们小组成员涉猎控制、模式识别、传感技术、汽车电子、电气、计算机、机械等多个学科,这次磨练对我们的知识融合和实践动手能力的培养有极大的推动作用,在此首先要感谢清华大学,感谢他们将这项很有意义的科技竞赛引入中国;更要感谢北京科技大学相关学院对此次比赛的关注及投入,我们能有今天这样的成果离不开学院的大力支持及指导老师悉心的教导;还要感谢的是和我们一起协作的队员们,协助,互促,共勉使我们能够走到今天。

第一章、方案设计

系统采用主办方提供的飞思卡尔16位微控制器MC9S12DB128作为核心控制单元,信号由安装在车前部的光电传感器采集,经过选频,滤波电路传入MCU,MCU对信号进行处理后,由PWM发生模块发出三路PWM波,分别对转向主舵机,电机,伺服电机进行控制,完成智能车的转向,前进,制动的功能。

在智能车后轮上安有光电编码器,采集关于车轮转速的脉冲信号,经由MCU进行PID计算后自动调节对电机的PWM波的占空比,控制车速度。

图1系统的总体控制框图

第二章、机械部分

我们对机械结构的要求是:

简单而高效。

我们在不断的尝试后确定了以下的设计方案:

图2.1智能车器件布局图

2.1传感器的设计安装

为实现自动行驶中黑色标识线的跟踪,在车体前部安装了一排光电检测装置来判断车体相对于黑线的位置,作为反馈信号提供给控制器;控制器再据此来调整左、右轮转速,使得车体处于黑线正中行进,传感器排列方式见图2.2。

比赛的地面是白色的,为了尽可能避免比赛场地的灯光等影响,我们选择的光电传感器是用可见光做光源,对于白色地面和黑线的反射率有明显的区别。

传感器排布我们选择主体为“一”字形排布的方法,共用10个传感器,两两距离如图2.2所示。

图2.2传感器布局图

实物如图2.3所示。

图2.3传感器成品示意图

2.2制动舵机传动机构设计

车以高速进入弯道时容易冲出赛道,PID调速装置与33886的反向制动虽然可以使速度降下来,但还是不理想,所以我们用一个伺服电机进行刹车,如图2.4所示。

图2.4伺服电机位置示意图

2.3光电编码器的安装

在车的调试过程中,由于电源等原因,车的实际速度与程序所给的值往往有区别,于是,我们采用了光电编码器。

光电编码器的安装如图2.5。

通过光电编码器,程序可以调整电机的PWM波来控制车速。

图2.5光电编码器位置示意图

2.4系统电路板的固定和连接

在电路板的安装这部分,我们考虑到结构的稳定性,以及规则中对车辆尺寸的限制,最终决定采用高架、立体的搭接方法,用支架把主控板固定在电池正上方,并在底盘的空余地方安放了一个输入参数用的小键盘,这种布局可以在高效利用空间的同时,保证车辆重心不会很高,行驶时更稳定。

图2.6电路板的固定及安装

第三章、电路设计说明

要实现我们的控制思想,硬件设计要满足以下要求:

1、满足我们所需要的单片机控制系统。

2、满足我们信息采集所需要的各种接口。

3、保证我们数据传输时,传输通道的通畅。

4、保证我们控制软件做小的改动的情况下,硬件部作改动就可以满足要求,即我们硬件的通用性。

5、满足智能车的所有驱动电路。

单片机的控制对象最终的都是电机,舵机等机械结构,他们要运动起来的所需的能量,不是单片机系统所能提供的,必须要有外部驱动电路,驱动电路要能够可靠的工作,要有与单片机系统可以相互连接的接口。

3.1主控板的设计

3.1.1电源管理模块

图3.1电源管理模块原理图

电源由7.2V电池提供,分别经过以下途径对其它模块进行供电:

a经过稳压芯片2940-5稳压后,输出5V电压以驱动单片机工作。

b接入33886驱动模块,以对电机进行驱动。

c接入传感器,对传感器供电。

d接入转向主舵机与伺服电机,驱动舵机进行转向及制动工作。

f接入风扇,对33886芯片进行散热。

 

3.1.2电机驱动模块

图3.2电机驱动模块原理图

电机驱动采用主办方提供的33886作为驱动芯片,MCU通过IN1引脚输入PWM波,以调节33886的DNC口的输出电压,调节电机转速的快慢,并且在IN2口输入电压以调节电机的反转和制动功能。

3.1.3控制模块

图3.3控制模块原理图

控制模块仅由S12构成,PORTA口作为光电传感器信号的输入口,PORTB口作为键盘驱动口,PWM7和PWM5作为控制电机与舵机的PWM波输出口。

3.1.4接口模块

图3.4接口模块原理图

接口模块的作用即外部设备单片机的接口,分别有电机接口,转向主舵机接口,伺服电机接口,光电编码器接口,电源接口。

3.1.5信号采集模块

从简洁的设计角度,我们直接从微控制器的电源线上串联上限流电阻,再和光电传感串联使用。

限流电阻既在光电传感器检测时起到了上拉电阻的作用。

和微控制器共地,便可以省去了光电耦合器,简化了电路结构。

图3.5信号采集模块原理图

3.2传感器电路设计说明

作为智能车的“眼睛”,光电传感器对车辆行驶状态的影响很大,经过多次试验,我们设计出一套高效,可行的方案。

图3.6传感器电路原理图

在一个高频信号发生器的作用下,产生一路高低频交变的信号电流,然后通过一个三极管放大后供给两路LED灯发光,并用两个电位器分别控制LED灯的光强,最后用一个与信号发生器频率同步的接收管接收光信号,并反馈给单片机。

在回路中,我们还添加了另一路LED发光二极管,用来实时检测传感器的工作情况。

实际操作过程中,只要发射灯和接收管间距适当,并且离地高度不大时,可以满足智能车循线的需要。

第四章、智能车控制软件设计说明

智能小车的控制软件采用模块化的程序结构。

从结构上看,系统程序主要包括一个主体循环程序,增量式PID速度控制程序,中断服务程序,循线控制算法程序,速度控制算法程序以及其他一些控制程序。

涉及到的单片机硬件资源如表4.1所示。

表4.1控制模块说明

程序实现的功能

使用的模块

电机速度控制

PWM发生模块

舵机转角控制

PWM发生模块

PID反馈脉冲计数

定时器模块,脉冲累加器

人机交互

SCI串口通信

光电传感器信号处理

普通I/O端口

调试信息记录

EETS2K模块

4.1主程序流程图

主程序流程图如图4.1所示。

系统首先对设备进行初始化,然后选择进入参数修改程序。

参数设定完之后打开中断,最后循环执行位置速度控制程序。

图4.1主程序流程图

4.2程序的初始化

初始化部分包括参数的读取、PID初始化、定时器和脉冲计数器的初始化、I/O端口的初始化、PWM控制器的初始化和键盘显示控制器7279的初始化。

图4.2初始化程序流程图

4.3位置速度控制

程序首先读取前方传感器组的状态来判断赛车和黑线的位置关系,通过该位置关系给出相应的转向舵机的转角和电机的转速。

具体程序流程图如图。

图4.3位置速度控制程序

4.4中断处理程序

中断处理程序每20毫秒执行一次,中断处理函数的主要目的是定时读取脉冲计数器的值并把该值反馈给PID控制程序,然后调用PID控制程序。

图4.4给出了程序流程图。

图4.4中断处理程序

4.5PID控制程序

系统采用增量式的速度PID,具体流程图如图4.5。

图4.5PID控制程序

第五章、开发工具、制作、安装、调试过程说明

5.1开发工具

程序的开发是在组委会提供的CodeWarriorIDE下进行的,包括源程序的编写、编译和链接,并最终生成可执行文件。

CodeWarriorforS12是面向以HC1和S12为CPU的单片机嵌入式应用开发软件包。

包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、链接器以及调试器。

5.2调试过程

我们使用的单片机的FLASH中预先下载了监控程序,由CodeWarrior生成的可执行文件就是在这个监控程序的引导下,由计算机的串口下载到单片机的FLASH中的。

因为这种方法既方便快捷又安全可靠,所以我们选用了这种方法而放弃了用S12特有的BDM方法进行程序的调试。

具体的操作方法如下:

从MC9SDG128开发板开始,将RS232-232串口线接到PC的串口COM1上。

使用WINDOWS下的超级终端通信软件:

执行“开始”|“程序”|“附件”|“通信”|“超级终端”命令。

将COM1设置成9600波特率,8位、无效验位,1个停止位,不使用硬件流量控制。

插上+5V电源,按开发板上的复位按钮,在PC的超级终端上就会显示提示信息。

在超级终端内键入E擦除单片机的FLASH,然后键入F将.S19文件下载到单片机的FLASH内。

这样,我们编写的程序就能在单片机中运行了。

需要说明的是,开机后4秒钟后才会自动运行用户程序。

第六章、模型车的主要技术参数说明

6.1智能车外形参数

车长:

36cm

车宽:

17cm

车高:

7cm

车重:

约1.5kg

6.2电路部分参数

我们小组所改造的智能车采用一块比赛标准7.2V电池供电,电路中共有16个电容,容量总计142.099μF。

当模型车全功率开动时,功耗约为50W。

6.3除了车模原有的驱动电机、舵机之外伺服电机数量

除了车模原有的驱动电机、舵机之外使用了1个伺服电机。

6.4传感器种类及个数

我们的智能车上使用光电振荡传感器,由一个振荡管发出高频信号,LED灯就会以很高频率闪烁,再使用配套的接收管接收信号反馈给单片机。

我们共使用10个传感器。

结论

自三月初报名参加“飞思卡尔”杯智能车邀请赛以来,我们小组成员查找资料,设计机构,组装车模,编写程序,分析问题,最后终于完成了最初目标,定下了现在这个方案。

在此份技术报告中,我们主要介绍了准备比赛时的基本思路,包括机械,电路,以及最重要的控制算法的创新思想。

在机械方面,我们分析了W型,A型,V型等排布方法,考虑到程序的稳定性、简便性,我们最后敲定了一字形排布,并通过反复实践决定了传感器的数量和位置。

在电路方面,我们以模块形式分类,在电源管理,电机驱动,接口,控制,信号采集,传感器这六个模块分别设计,在查找资料的基础上各准备了几套方案;然后我们分别实验,最后以报告中所提到的形式决定了我们最终的电路图。

在算法方面,我们使用C语言编程,利用比赛推荐的开发工具调试程序,经过小组成员不断讨论、改进,终于设计出一套比较通用的,稳定的程序。

在这套算法中,我们结合路况调整车速,做到直线加速,弯道减速,保证在最短时间跑完全程。

现在,面对即将到来的大赛,在历时近五个月的充分准备之后,我们有信心在比赛中取得优异成绩。

也许我们的知识还不够丰富,考虑问题也不够全面,但是这份技术报告作为我们五个月辛勤汗水来的结晶,凝聚着我们小组每个人的心血和智慧,随着它的诞生,这份经验将永伴我们一生,成为我们最珍贵的回忆。

参考文献

[1]邵贝贝.嵌入式实时操作系统[LC/OS-Ⅱ(第2版)[M].北京.清华大学出版社.2004

[2]邵贝贝.单片机嵌入式应用的在线开发方法[M].北京.清华大学出版社.2004

[3]王晓明.电动机的单片机控制[M].北京.北京航空航天大学出版社.2002

[4]臧杰,阎岩.汽车构造[M].北京.机械工业出版社.2005

[5]安鹏,马伟.S12单片机模块应用及程序调试[J].电子产品世界.2006.第211期.162-163

[6]童诗白,华成英.模拟电子技术基础[M].北京.高等教育出版社.2000

[9]沈长生.常用电子元器件使用一读通[M].北京.人民邮电出版社.2004

[10]宗光华.机器人的创意设计与实践[M].北京.北京航空航天大学出版社.2004

[11]张伟等.ProtelDXP高级应用[M].北京.人民邮电出版社.2002

[12]张文春.汽车理论[M].北京.机械工业出版社.2005

附录

源程序:

main.c

#include/*commondefinesandmacros*/

#include/*derivativeinformation*/

#include"7279.h"

 

#defineERR_OK1

#defineERR_BUSY2

#defineERR_NOTAVAIL3

#defineERR_RANGE4

#defineEEPROMStart0x0400

#defineEEPROMEnd0x1000

#defineMASS_ERASE0x41

#defineERASECMD0x40

#definePROGCMD0x20

#defineSizeMsg24//hasbeenchanged

#defineERROR0xFF

#defineNOERROR0x0

 

uinta,b,c;

unsignedintwrite_data[14];

unsignedintchuanganqi_data[14];

//初始化:

voidEepromInit(void){

//INITEE=17;

//asmnop;

//MISC=1;

ECLKDIV=94;

}

//擦写:

unsignedcharEepromErase(unsignedint*pAddress,unsignedcharsize)

{

if(ECLKDIV_EDIVLD==1)

{if((ESTAT_ACCERR==0)&&(ESTAT_PVIOL==0))

{while(size)

{if(ESTAT_CBEIF==1)

{*pAddress=0xFFFF;

pAddress+=2;

ECMD=ERASECMD;

ESTAT_CBEIF=1;

if((ESTAT_ACCERR==1)||(ESTAT_PVIOL==1))

returnERROR;

while(ESTAT_CCIF==0);

size--;}

}

returnNOERROR;

}

elsereturnERROR;

}

elsereturnERROR;

}

unsignedcharEepromProgram(unsignedint*pAddress,unsignedint*pData,unsignedcharsize)

{if(ECLKDIV_EDIVLD==1)

{if((ESTAT_ACCERR==0)&&(ESTAT_PVIOL==0))

{while(size)

{if(ESTAT_CBEIF==1)

{*pAddress++=*pData++;

ECMD=PROGCMD;

ESTAT_CBEIF=1;

if((ESTAT_ACCERR==1)||(ESTAT_PVIOL==1))

returnERROR;

while(ESTAT_CCIF==0);

size--;}

}

returnNOERROR;

}

elsereturnERROR;

}

elsereturnERROR;

}

 

byteIEE1_GetWord(wordAddr,word*Data)

{

if((Addr(EEPROMEnd-1)))/*IsgivenaddressoutofEEPROMareaarray?

*/

returnERR_RANGE;/*Ifyesthenerror*/

/*Storegivenaddress*/

*Data=*(volatileword*)Addr;/*Returndatafromgivenaddress*/

returnERR_OK;/*OK*/

}

 

staticuintstate;

staticucharflag_zhidong;

staticucharflag_kong;

staticbyteflag;

staticbytekey_numbers;

staticbyteflag_change;

staticuintpulse;

staticuintspeed1_2;

staticuintspeed2_1;

staticuintspeed23;

staticuintspeed3;

staticuintspeed34;

staticuintspeed4;

staticuintspeed45;

staticuintspeed5;

staticuintspeed0;

staticuintspeed_zhidong4;

staticuintspeed_zhidong5;

staticuintspeed_zhidong0;

#defineturn_right19223

#defineturn_right129363

#defineturn_right219363

#defineturn_right29502

#defineturn_right239602

#defineturn_right39702

#defineturn_right349789

#defineturn_right49876

#defineturn_right4510089

#defineturn_right510302

#defineturn_left18946

#defineturn_left128772

#defineturn_left218772

#defineturn_left28598

#defineturn_left238474

#defineturn_left38349

#defineturn_left348240

#defineturn_left48131

#defineturn_left457865

#defineturn_left57598

#defineturn_mid9100

#defineturn_left07300

#defineturn_right010600

#defineVV_KPVALUE0

#defineVV_KIVALUE60

#defineVV_KDVALUE0

#defineVV_MAX24000//1024<<10使控制信号扩大,以使过渡平顺

#defineVV_MIN0

#defineVV_DEADLINE0X02//速度PID,设置死区范围

 

typedefstructPID//定义数法核心数据

{

signedintvi_Ref;//速度PID,速度设定值

signedintvi_FeedBack;//速度PID,速度反馈值

signedlongvi_PreError;//速度PID,前一次,速度误差,,vi_Ref-vi_FeedBack

signedlongvi_PreDerror;//速度PID,前一次,速度误差之差,d_error-PreDerror;

unsignedintv_Kp;//速度PID,Ka=Kp

unsignedintv_Ki;//速度PID,Kb=Kp*(T/Ti)

unsignedintv_Kd;//速度PID,

signedlongvl_PreU;//电机控制输出值

unsignedlongvl_Pre;//电机控制输出值

}PID;

PIDsPID;//PIDControlStructure

voiddelay_speed(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_left1(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_right1(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_right12(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_left12(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_left21(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_right21(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_left2(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_right2(void)

{

sPID.vi_Ref=speed1_2;

}

voiddelay_speed_right23(void)

{

sPID.vi_Ref=speed23;

}

voiddelay_speed_left23(void)

{

sPID.vi_Ref=speed23;

}

 

voiddelay_speed_left3(void)

{

sPID.vi_Ref=speed3;

}

voiddelay_speed_right3(void)

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

当前位置:首页 > 农林牧渔 > 林学

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

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