智能小车设计报1Word格式文档下载.docx
《智能小车设计报1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《智能小车设计报1Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
IntelligentVehicleDesignReport
Abstract:
89S52isamulti-functionalnatureofSCM,Thesystemusethe89S52microcontrollertocontrolthecore,makinguseofinfraredphotoelectricsensorstoidentifytheblacklaneline,andPWMsignaltocontrolDCmotorandsteeringservo,thusenablingtheelectriccarscanautomaticallyfindLuwithfastorslowdrivingspeed.Softwareprogrammingwhichbasedonreliablehardwaredesigninthecontrolalgorithmusesstraightuniform,Turningdecelerationcontrolalgorithmrealizesthetracingofthecardriving.Thewholesystemofhighreliabilityhasasimplecircuitstructure.Theexperimentaltestresultsmeettherequirements.Thisdesignreportfocusesonthesystem'
shardwaredesignmethodsandtestresultanalysis.
Keyword:
IntelligentVehicle;
89S52;
Infraredphotoelectricsensor;
PWMspeedcontrol;
目录
第一章总体机械设计方案与结构
1.1总体设计方案
1.2总体机械结构
第二章硬件电路设计
2.1供电系统
2.2光电检测系统
2.3单片机最小应用系统设计
2.4舵机应用
2.5电机驱动
第三章软件算法设计
3.1红外探路径算法
3.2舵机转弯控制
3.3中断程序设计
第四章总结
在现有玩具电动车的基础上,加装光电检测器,实现对电动车的位置的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的转向和速度的智能控制.
这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。
我们的小车总共有六个模块组成,分为供电模块,光电检测模块,单片机最小系统模块,电机驱动模块,舵机驱动模块,小车的原有底座模块。
小车保留原有底座,在小车的最前面,我们放置了光电检测模块用以检测路线。
光电检测模块是由八个相同电路集合而成,每个电路中各有一个光电管,电位器,103电容,还有一些电阻。
在此基础上,我们考虑到判断哪个光电管测到路线的方便,特地加了排LED灯,借以检查。
若检测到路线,光电管起作用,则对应的灯亮,否则,说明光电管坏了或者接触不良。
小车底座上方的前部放置舵机,我们充分利用原小车的物理结构特点,将舵机平稳的固定,用以控制小车的转角。
小车的表面,放置由电源模块,单片机最小系统,电机模块集成的车的主体电路板。
在底盘的中部,放置7.2伏可充电电池。
整体重心偏于小车中后部,可增大小车后轮摩擦力,增强小车动力。
2.1供电系统
本模块使用LM2940芯片输出+5V的电压,为89S52单片机光电检测电路供电,采用LM1117可控变压芯片输出+6V电压为舵机供电.而电机则由单片机来控制,当单片机输出的电压不同时,电机的转速不同,以此来达到控制小车速度的目的.电路如图
本模块采用八对红外线发射和接收对管,来检测小车前方黑线位置.发射管发射管出红外线,当对管正下方为白色跑道时,发射管发射出去的红外线会被反射回来,接收因接收到红外线而导通,两端电压为零,当对管正下方为黑色线时,黑线将吸收红外线,接收管因接收不到红外线而无法导通,两端电压为+4V左右,将接收管端电压与一个给定电压经LM339N比较后输出0和+5V两固定个值,当对管正下方为白色时输出+5V电压,当对管正下方为黑线时输出0V,输出的电压交给单片机,以此来确定黑线的位置。
2.3单片机最小应用系统设计
89S52单片机是本系统的核心所在,自动寻迹和调速都是它控制,
八对光电对管经比较器输出的电压输入单片机,单片机根据电压的高低来判断黑线位置,进而调整速度和方向,电路如下:
2.4舵机的应用
舵机作为一种位置(角度)伺服驱动器件,可利用输入PWM信号高电平时间来调整输出角度,实现伺服功能,舵机控制是智能车循迹行走的关键,要求舵机驱动的转向结构具有精确的角度控制和快速响应的能力。
我们的小车在制作过程中还在芯片上装了一块散热片。
舵机的工作原理是:
单片机放的控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。
它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。
最后,电压差的正负输出到电机驱动芯片决定电机的正反转。
当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。
电机驱动系统由控制器,功率变换器及电动机三个部分组成,智能车上的电机包括一个直流驱动电机和一个角度伺服的舵机。
我们小车系统使用PWM控制电机转速,充分利用单片机的PWM模块资源。
电机驱动电路如下:
软件整体设计框图
#include<
reg52.h>
#defineucharunsignedchar//将unsignedchar宏定义为uchar
sbitrudmoto=P2^0;
//定义舵机控制端口
sbitmotor1=P2^1;
//定义电机控制端口
sbitmotor2=P2^2;
sbitR4=P1^0;
//光电管定义
sbitR3=P1^1;
sbitR2=P1^2;
sbitR1=P1^3;
sbitL1=P1^4;
sbitL2=P1^5;
//光电管定义
sbitL3=P1^6;
sbitL4=P1^7;
sbitv1=P2^4;
//速度控制高
unsignedintduoji;
uchardianji;
unsignedinttime0=0;
uchartime1=0;
charlast;
//上一状态标志
uchari=1;
uchartenx=1;
//判断十字叉信号
uchartenz=1;
ucharm,n,k,t,j,k;
ucharblank=0;
ucharstop=4;
//L4L3L2L1L1R1R1R2R3R4
ucharp[10]={0x7F,0xBF,0xDF,0xEF,0xE7,0xF7,0xFB,0xFD,0xFE,0xFF};
ucharpwmd[9]={8,10,12,13,13,13,14,16,18};
ucharsave[9]={1,2,3,4,5,6,7,8,9};
ucharpwm1[10]={74,78,82,85,85,85,82,78,74,69};
ucharpwm2[10]={76,80,84,90,90,90,84,80,76,70};
ucharpwm3[10]={70,74,78,82,83,82,78,74,70,65};
ucharpwm4[10]={66,70,74,78,80,78,74,70,66,60};
voidt0()interrupt1//定时器0控制舵机
{
time0++;
if(time0==duoji)rudmoto=0;
if(time0==286)//285
{
time0=0;
rudmoto=1;
}
TH0=(65536-70)/256;
//定时70
TL0=(65536-70)%256;
}
voidt1()interrupt3//定时器1控制电机
TH1=(65536-400)/256;
//
TL1=(65536-400)/256;
time1++;
if(time1==dianji)motor1=0;
if(time1==100)
time1=0;
motor1=1;
voiddelay(t)
{
for(m=t;
m>
0;
m--)
for(n=0;
n<
100;
n++)
for(k=0;
k<
99;
k++);
voidmain()//主函数
TMOD=0x11;
//设定定时器0、1工作方式为1
//定时130
TL1=(65536-400)%256;
delay(40);
EA=1;
//CPU开中断
ET0=1;
//定时器0开中断
ET1=1;
//定时器1开中断
TR0=1;
//启动定时器0
TR1=1;
//启动定时器1
rudmoto=1;
motor2=0;
while
(1)
while(v1==0)//高速
while
(1)
{
if(((L4==0)&
&
(R3==0))||((R4==0)&
(L3==0))||((R4==0)&
(R1==0))||((R4==0)&
(L1==0))||((L4==0)&
(R1==0)))
{
stop--;
delay
(1);
}
if(stop==0)
{
duoji=13;
motor1=0;
motor2=1;
delay(20);
motor2=0;
dianji=1;
delay(200);
}
for(i=0;
i<
10;
i++)
if(P1==0xFF)
if(last==9)
{
duoji=pwmd[8];
dianji=pwm1[9];
break;
}
elseif(last==1)
duoji=pwmd[0];
elseif(P1==p[i])
duoji=pwmd[i];
dianji=pwm1[i];
last=save[i];
break;
}
}
我们用于探路的红外头一共装了8个,还加了排贴片灯,借以检查光电管的好坏。
8个红外头在照射到白线的时候,反馈到单片机中的值是高电平,当遇到黑线的时候,反馈到单片机中的值是低电平。
于是我们就利用低电平的位置来判断路线。
并且进一步利用算法。
我们检测黑线的算法是利用AD口得到相应的8个数据,然后利用算法的初值最小的那个红外头,然后再找出这个红外旁边两个红外值较小的那个,然后根据这两个红外的值得出黑线中线具体在哪个位置。
程序如下:
//L4L3L2L1L1R1R1R2R3R4
给舵机输入一个频率固定的,占空比不同的PWM,舵机就会转过不同角度,但逼近舵机的反应速度是很慢的,我们利用软件来弥补硬件的不足,就是在速度足够慢的时候,舵机能够反应过来。
在路径波动强度较低的时候,不能突然大幅度的改变转向,越是靠近小车的中心轴,角度改变的就要越小,远离中心轴的时候,角度可以改变大一点。
3.3中断程序设计
中断处理程序与普通程序一样,最终都一样被编译链接,处理成机器码后放到一个指定位置。
程序代码如下:
在这次智能小车制作过程中,我们遇到了很多问题,这些问题是我们在平时学习中学不到的,最主要的是我们掌握了许多学习方法。
在做小车过程中,我们总结出:
要有“三心”,恒心,耐心,细心。
在制作过程中我们遇到了一系列小问题,但我们没有气馁,我们有一个目标,就是把小车完成,进入决赛,这就是恒心,这是最重要的一步,没有这一步,就不必谈及其他,同时,在做的过程中,耐心同样是十分重要的,在焊电路板时,有许多小器件,密密麻麻,我们没有因此而嫌烦,而退缩,我们一步步把所有电路板认认真真焊好了,同时,在焊的过程中,一定要细心,一开始,我们的一疏忽,把电容焊错了,幸好后来检查了一下,及时发现了。
针对问题我们一个个去耐心的解决,在最终试跑过程中,发现很容易发烫,我们就装了一个散热片,在用光电管检测电路时,发现光电管有时不是很灵敏,很可能是在小车跑的过程中冲出跑道时撞到了,所以光电管那一块我们特别保护,在其上装了泡沫,减轻冲击力,保护光电检测电路,为了能方便判断哪个光电管检测到路线,在光电管检测电路部分我们又加了排LED灯。
整体上,我们紧紧抓住了影响赛车跑的路线和速度的主要因素,来不断调整硬件的机械结构和软件的改进,使得小车能够最完美地进行行驶;
细节上,我们力求完美,使各个模块运行优良。
在这次小车的制作过程中,我们的心情随着赛车的性能跌宕起伏,有欢乐,也有悲伤,但我们从不轻言放弃。
参考文献:
【1】《学做智能车—挑战》北京航空航天大学出版社卓晴,黄开生,邵贝贝编
【2】大赛车模拼装手册
【3】《应用光学期刊》王小鹏主编,主管单位:
中国兵器工业集团公司