智能避障小车论文Word文档下载推荐.docx
- 文档编号:22366596
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:26
- 大小:235.21KB
智能避障小车论文Word文档下载推荐.docx
《智能避障小车论文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《智能避障小车论文Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
摘要:
智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探用途。
本设计中智能小车采用STC89C52单片机作为检测和控制的核心,实现智能小车的智能控制。
驱动电机采用直流减速电机。
关键词智能小车;
单片机;
红外线;
循迹
第二章总体方案
本章主要简要地介绍系统总体方案的选定和总体设计思路,在后面的章节中将整个系统分为机械结构、控制模块、控制算法等三部分对智能车控制系统进行深入的介绍分析。
需求分析
设计一种基于红外循迹的小车移动平台,借助红外传感器的使用满足在一定的复杂的环境中自主循迹任务,使小车可以按轨道行走。
总体设计
通过学习和研究相关技术资料了解到,红外模块是系统的关键模块之一,方案的好坏,直接关系到最终性能的优劣,因此确定模块的方法是决定系统总体方案的关键。
循迹模块采用红外传感器的优点是价格相对便宜,在满足系统的要求下具有较高的精度,能很好的循迹。
方案确定
系统采用STC89C52单片机作为核心控制单元用于智能车系统的控制,小车车头正中间红外传感器检测前方障碍物,用于判断是否需要转弯。
系统总体的设计方框图如图1所示。
循迹模块
STC89C52主控模块
电机驱动模块
显示模块
根据系统方案设计,系统包括以下模块:
STC89C52主控模块、L9110电机驱动模块、电源模块、循迹模块、显示模块、测速测树木模块等。
各模块的作用如下:
STC89C52主控模块,作为整个智能小车的“大脑”,将发送采集红外等传感器的信号,根据控制算法做出控制决策,驱动直流电机等等完成对智能车的控制。
电源模块,为整个系统提供合适而又稳定的电源;
电机驱动模块,驱动直流电机完成智能车的加减速控制和转向控制;
红外循迹模块,则能够达到循迹功能。
显示模块,将测量结果显示。
测速测树木模块,准确测量树木数量,隧道长度。
第三章硬件方案
根据总体方案设计,对硬件结构的要求是:
简单而高效,在不断的尝试后确定了以下的设计方案:
车体设计
买现成的车模。
经过反复考虑论证,我们制定了买左右两轮分别驱动,后万向轮转向的车模方案。
即左右轮分别用两个转速和力矩基本完全相同的直流减速电机进行驱动,后装一个万向轮。
这样,当两个直流电机转向相反同时转速相同时就可以实现电动车的原地旋转,由此可以轻松的实现小车坐标不变的90度和180度的转弯。
主控制器模块
采用STC89C52单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。
充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。
这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。
51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是51单片机价格非常低廉。
电源模块
采用锂电池做电源,后为单片机,传感器供电。
经过实验验证小车工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。
采用功率三极管作为功率放大器的输出控制直流电机。
线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的H型桥式电路。
用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。
这种电路效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,是一种广泛采用的PWM调速技术。
现市面上有很多此种芯片,我选用L9110,一片L9110可以分别控制一个直流电机,而且还带有控制使能端。
用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
电机模块
本系统为智能电动车,对于电动车来说,其驱动轮的驱动电机的选择就显得十分重要。
所以我采用直流减速电机。
直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。
由于其内部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生大扭力。
能够较好的满足系统的要求。
循迹模块
采用红外传感器负责循迹功能的实现。
考虑到本系统需要检测线路,为了使用方便、系统稳定性、便于操作和调试。
测量显示模块
用红外对管进行速度及距离测量,以及数目测量,用1602显示屏进行结果显示
最终方案
经过反复论证,我们最终确定了如下方案:
1、车模用两驱车模
2、采用STC89C52单片机作为主控制器。
考虑到89C52单片机运行速度比较慢,如果采用一片单片机可能会出现误差(如测速模块)所以用两片单片机。
3、用锂电池供电。
电池能为电机提供更高的功率。
4、用红外传感进行测量树木数量。
左右各一路红外传感器,由于小车速度比较慢,所以不需要利用外部中断直接在检测到返回的低电平后数量加一,然后延时一段时间,直到小车绕过树木,防止数量重复相加。
5、L9110作为直流电机的驱动芯片。
结构简单,重量较轻,可以为电机提供稳定、大功率的电压。
6、红外对管进行测量隧道长度。
利用一路红外探头位于小车上方检测隧道有无。
进入隧道后用红外测速模块计算小车行进的距离。
7、红外探测器进循迹。
考虑到轨道主要以直线为主,中间有直角钝角转弯和中间交叉路口直行三种特殊情况,共采用七路循迹模块,其中五路(从左往右第二、三、四、五、六)检测直道,再用三路处理三种特殊情况(三路循迹探头为从左往右第一、四、七)。
8、1602显示器显示数据。
考虑到要显示的内容比较简单,只是字母和数字,所以1602就能满足要求,而且1602结构简单,价格便宜,容易掌握。
第四章硬件实现及单元电路设计
主控制模块
主控制最小系统电路如图4所示。
图4
电源设计
为了节约成本,我们的电源采用了锂电池电池作为单片机的供电电源。
驱动电路
通过单片机给予L9110电路PWM信号来控制小车的速度,起停。
测量显示模块
第5章系统软件设计方案
该方案的编程思路是先确定主程序,之后根据各硬件电路功能来设计子程序模块,最后再将各模块嵌入主程序中。
这样编程结构简单,由于子程序模块与硬件电路一一对应,所以调试起来十分方便。
本设计软件方框图如图9示。
显示子程序
循迹
子程序
循迹的智能小车主程序
测速
测树木子程序
电机驱动子程序
图9
第六章系统的安装与调试
安装步骤
1.检查元件的好坏
按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进行检测,一定要仔细认真。
而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。
2.放置、焊接各元件
按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。
特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过10s,注意芯片的安装方向。
电路的调试
首先烧入电机控制小程序,控制电机正反转,停止均正常。
说明电机及驱动电路无误。
然后加入循迹子程序,小车运转正常时,达到理想效果。
在调试程序时,发现有的指令用的不正确,导致电路功能不能完全实现,另外软件程序中的延时有的过长、有的过短。
类似的现象还有很多就不一一列举了。
第7章心得与总结
本智能小车电路在硬件上采用红外循迹传感器来循迹。
由于采用了锂电池电池供电使系统的抗干扰性得到加强。
在软件上,充分利用了STC89C52的系统资源,使智能小车实现了隧道测量、树木检测、循迹的功能。
本设计结构简单,调试方便,系统反映快速灵活,硬件电路由可拆卸模块拼接而成有很大的扩展空间。
经实验测试,该智能小车设计方案正确、可行,各项指标稳定、可靠。
虽然智能小车系统有很多优点,但在设计当中也存在着一些不足。
一是由于我们都是做出的小车较简单;
再者就是在制作过程中出现了较多问题:
1.小车在行驶过程中左右摇晃,容易冲出轨道,转弯不稳定,轨道两旁树木会被重复检测,中间交叉处不能直行,主要原因是左右轮转速不完全一致,可以使用四轮小车同时将循迹探头往前放。
2.程序存在缺陷,行进过程中有时会停止。
通过这次对作品的制作,使我学到许多东西,不管软件方面还是硬件方面都需要掌握,还有合作协调方面,动手能力,调试时候注意事项,都有着很大的要求,是我受益匪浅。
经费预算
1.飞思卡尔小车底盘+驱动模块:
280
2.电池+充电器:
60
3.九路循迹+支架:
70
4.红外探头4个:
80
5.测速模块两个(左右轮):
30
6.1602显示器1个:
20
7.L9110电机驱动模块:
15
8.三轮小车底盘+两个电机:
40
9.STC89C52单片机两个:
10.STC89C52最小系统两个:
总计:
630
附录:
(源代码)
循迹:
#include<
>
#defineuintunsignedint
#defineucharunsignedchar
sbitr1=P0^0;
sbitr2=P0^1;
sbitl1=P0^2;
sbitl2=P0^3;
sbitlook=P2^4;
sbitlook1=P1^0;
sbitlook2=P1^1;
sbitlook3=P1^2;
sbitlook4=P1^3;
sbitlook5=P1^4;
sbitlook6=P1^5;
sbitlook7=P1^6;
sbitget=P1^7;
voidgo();
voidback();
voidturn_right();
voidturn_left();
voiddelay1ms(int);
voidstop();
voidturnright(uint);
voidturnleft(uint);
voidgo_strait(uchar);
voidmain()
{
get=1;
if(get==0)stop();
else
{if(look1==1&
&
look2==1&
look3==0&
look4==1&
look5==1&
look6==1&
look7==1)//直行
{go();
}
elseif((look1==0||look2==0)&
look7==1)//在轨道上右偏
{
do{turn_left();
}while(look3==1);
}
elseif(look1==1&
(look4==0||look5==0)&
look7==1)//在轨道上左偏
do{turn_right();
}while(look3==1);
elseif(look6==0)
go_strait
(1);
if(look7==0)
{
go_strait(10);
else
elseif(look7==0)
if(look6==0)
do{turn_left();
}while(look3==0);
elsestop();
}}
voidgo()
{
r1=0;
r2=1;
l1=0;
l2=1;
delay1ms(5);
stop();
delay1ms(10);
}
voidgo_strait(ucharx)
{while(x--){
delay1ms(3);
}
voidback()
r1=1;
r2=0;
l1=1;
l2=0;
voidturn_right()
{r1=0;
delay1ms(15);
voidturnright(uintz)
while(z--)
turn_right();
voidturn_left()
//}
voidturnleft(uintz)
turn_left();
voidstop()
voiddelay1ms(intx)
inti,j;
for(i=1;
i<
x;
i++)
for(j=1;
j<
120;
j++);
检测:
/07/lcd模块
#defineLCDPP0
sbitRS=P1^7;
//寄存区选择位
sbitRW=P1^6;
//设置读写位
sbitE=P2^4;
//使能位(0:
禁止,1:
使能)
sbitBF=P0^7;
//忙碌检查位
sbitlookleft=P2^0;
sbitlookright=P2^1;
sbitlookup=P3^3;
sbitspeed=P3^2;
sbitstop=P1^1;
//小车停止标志
sbitsend=P1^0;
charamount_tree=0,amount_bri=0;
//树的个数,隧道的个数
uintlength_bri[4];
//桥的长度
charline1[]="
CountofTree:
"
;
charline2[]="
CountofBri:
charline3[]="
LengthofBri:
"
//显示的字符
charline4[]="
uinttemp=0;
//测速模块反应次数
voidinit_LCM(void);
//初始化设置函数
voidwrite_inst(char);
//写入指令函数
voidwrite_char(char);
//写入字符数据函数
voidcheck_BF(void);
//检查是否忙碌函数
voiddelay1ms(int);
//延迟函数
voiddisplay1();
//voiddisplay_char(charline,loca,character);
//写入指定位置
voidblank_line(charline);
//写入空白行
send=1;
while
(1){
if(stop==0)//遇到终止信号时
{
send=0;
display1();
}
else//没有遇到终止信号
if(lookup==1)//没有桥
if(lookright==0&
lookleft==1)//右边有树
amount_tree=amount_tree+1;
delay1ms(200);
if(lookright==1&
lookleft==0)//左边有树
}
if(lookright==0&
lookleft==0)
amount_tree=amount_tree+2;
else//有桥
amount_bri=amount_bri+1;
temp=0;
while(lookup==0)
{IE=0x81;
TCON=0x01;
//if(speed==1)
//{
//temp=temp+1;
//delay1ms(5);
//}
length_bri[amount_bri]=temp/5;
}
voidspeed_INT(void)interrupt0
temp=temp+1;
//--------LCD显示—-----------
voiddisplay1()
chari,j;
charlength[5];
charcount_tree[2],count_bri[2];
//用sac码显示数量
count_tree[0]=amount_tree/10+0x30;
//树的个数,十位数
count_tree[1]=amount_tree%10+0x30;
//树的个数,个位数
count_bri[0]=amount_bri/10+0x30;
//桥,十位数
count_bri[1]=amount_bri%10+0x30;
//桥,个位数
init_LCM();
//初始化设置
while
(1)
write_inst(0x80);
//第一行起始地址,显示字符串1,树的棵数
for(i=0;
14;
write_char(line1[i]);
write_inst(0x8e);
//显示数字的地址
2;
write_char(count_tree[i]);
write_inst(0xc0);
//第二行起始地址,显示字符串2,桥的数量
write_char(line2[i]);
write_inst(0xce);
write_char(count_bri[i]);
delay1ms(2500);
write_inst(0x01);
//清除显示屏
delay1ms(1000);
//===各个桥的长度
for(j=0;
amount_bri;
j++)
{
chardis[3],x=j+1;
uinty;
length[0]=length_bri[x]/10000+0x30;
y=length_bri[x]%10000;
length[1]=y/1000+0x30;
y=y%1000;
length[2]=y/100+0x30;
y=y%100;
length[3]=y/10+0x30;
y=y%10;
length[4]=y%10+0x30;
if(x<
10)
{dis[0]='
'
dis[1]=x+0x30;
dis[2]='
:
'
else{dis[0]=x/10+0x30;
dis[1]=x%10+0x30;
dis[2]='
write_inst(0x80);
for(i=0;
16;
write_char(line3[i]);
//第一行显示字符串
write_inst(0xc1);
//第二行起始地址为第二个位置
3;
write_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车 论文