智能自动避障小车Word文档格式.docx
《智能自动避障小车Word文档格式.docx》由会员分享,可在线阅读,更多相关《智能自动避障小车Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
2.参考资料........................................................................................13
摘要
在科学探索和紧急抢险中经常会遇到对与一些危险或人类不能直接到达的地域的探测,这些就需要用机器人来完成。
而在机器人在复杂地形中行进时自动避障是一项必不可少也是最基本的功能。
因此,自动避障系统的研发就应运而生。
我们的自动避障小车就是基于这一系统开发而成的。
意义随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人的自动避障有了重大的意义。
我们的自动避障小车就是自动避障机器人中的一类。
自动避障小车可以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物,寻找目的地。
1.设计任务
1.1基本要求
小车从无障碍地区启动前进,感应前进路线上的障碍物后,根据障碍物的位置选择下一步行进方向。
并可通过两个独立按键对小车进行控速。
根据火源的方向确定小车的行驶的方向。
2.方案论证与比较
2.1车架模块及比较
在设计车体框架时,我们有两套起始方案,自己制作和直接购买玩具电动车。
方案一:
自己设计制作车架自己制作小车底盘
用两个直流减速电机作为主动轮,利用两电机的转速差完成直行、左转、右转、左后转、右后转、倒车等动作。
减速电机扭矩大,转速较慢,易于控制和调速,符合避障小车的要求。
而且自己制作小车框架,可以根据电路板及传感器安装需求设计空间,使得车体美观紧凑。
但自己制作小车设计制作周期较长,且费用较高,因而我们放弃这一方案。
方案二:
购买玩具电动车
玩具电动车价格低廉,有完整的驱动、传动和控制单元,其中传动装置是我们所需的,缩短了开发周期。
但玩具电动车采用普通直流电机驱动,带负载能力差,调速方面对程序要求较高。
同时,玩具电动车转向依靠前轮电机带动前轮转向完成,精度低。
考虑到利用玩具电动小车做车架开发周期短,可留够充分的时间用于系统调试,且硬件上的不足我们有信心用优良的算法来弥补,故我们选择方案二。
2.2电源与稳压模块
采用交流电经直流稳压处理后供电
采用交流电提供直流稳压电源,电流驱动能力及电压稳定性最好,且负载对电源影响也最小。
但由于需要电线对小车供电,极大影响了壁障小车行动的灵活性及地形的适应能力。
而且壁障小车极易把拖在地上的电线识别为障碍物,人为增加了不必要的障碍。
故我们放弃了这一方案。
采用干电池组进行供电
采用四节干电池降压至5V后给单片机及其他逻辑单元供电,另取六节干电池为电机及光电开关供电。
这样电机启动及制动时的短暂电压干扰不会影响到逻辑单元和单片机的工作。
干电池用电池盒封装,体积和重量较小,同时玩具车底座可以安装四节干电池,正好可为单片机及其他逻辑单元供电。
在稳压方面,起始时考虑使用7805芯片对6V的电池电压进行降压稳压。
但考虑到这样使得7805芯片消耗大量能量,降低电池寿命;
同时,由于光电开关、小车电机对于供电电压要求并不苛刻,故我们将6V电池电压接一个二极管降压后直接给单片机及其他逻辑单元供电。
而电机和光电开关的电源不做稳压处理。
这样只需在小车主板上加两个调速按钮,根据电池电量选择合适功率即可,甚至于可直接在软件里设置自动换挡。
综合考虑,我们采用方案二。
2.3主控模块
作为单片机原理与接口技术课程的courseproject,我们直接选用了课程主要介绍的,Atmel公司的AT89S52单片机作为主控模块。
2.4逻辑模块
在探测模块和单片机中断接口之间、独立按键与单片机中断接口之间,需要经过电平的逻辑处理进行连接。
主要涉及到一个三输入或非门和一个二输入与门。
这两个逻辑关系我们直接选用74HC系列的集成芯片实现。
由于三输入或非门在市场上很难购买到,我们采用了两个二输入或非门和一个二输入与门完成了三输入或非门。
由于我们采用的74HC08(四二输入与门)、74HC02(四二输入或非门)均为四二输入的,各提供四个二输入与门和四个二输入或非门,我们用各用一片芯片即可实现所需逻辑功能。
2.5探测模块
方案一:
使用超声波探测器
超声波探测器探测距离远,测距方便。
但由于声波衍射现象较严重,且波包散面太大,易造成障碍物的错误判断。
同时,超声波探测具有几厘米甚至几十厘米的盲区,这对于我们的避障小车是个致命的限制。
使用光电对管探测
光电对关价格低廉,性能稳定,但探测距离过近(一般不超过3cm),使得小车必须制动迅速。
而我们由于采用普通直流电机作为原动力,制动距离至少需要10cm。
因此我们放弃了这一方案。
方案三:
使用光电开关进行障碍物信息采集
使用三只E3F-DS30C4光电开关,分别探测正前方,前右侧,前左侧障碍物信息,在特殊地形(如障碍物密集地形)可将正前方的光电开关移置后方进行探测。
E3F-DS30C4光电开关平均有效探测距离0~30cm可调,且抗外界背景光干扰能力强,可在日光下正常工作(理论上应避免日光和强光源的直接照射)。
我们小车换档调速后的最大制动距离不超过30cm,一般在10~20cm左右,因而探测距离满足我们的小车需求。
综上考虑,我们选用方案三
2.6电机驱动模块
使用分立原件搭建电机驱动电路
使用分立原件搭建电机驱动电路造价低廉,在大规模生产中使用广泛。
但分立原件H桥电路工作性能不够稳定,较易出现硬件上的故障,故我们放弃了这一方案。
使用L298N芯片驱动电机
L298N是一个具有高电压大电流的全桥驱动芯片,输出电压最高可达50V,可以直接通过电源来调节输出电压;
可以直接用单片机的IO口提供信号,而且带有使能端,方便PWM调速,电路简单,性能稳定,使用比较方便。
L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,正好符合我们小车两个二相电机的驱动要求。
综合考虑,我们采用L298N芯片驱动小车电机。
3.系统电路设计
3.1工作原理
电池组供电,提供+5V和+12V电源。
程序控制小车,遇到障碍,远红外传感器发出信号,产生外部中断。
单片机收到信号根据程序发出指令,小车运行进行前进,后退,左转,右转。
3.2总体设计
总体设计原理图如上。
4.系统硬件模块设计
4.1电流电源及主控模块
直流电源降压
经过测量,一般四节新南孚电池串联带负载后可提供5.8V电压。
经过二极管稳压至5.1~5.2V后给逻辑器件供电并给系统提供高电平标准。
使用AT89S52的PA0~PA3接电机驱动芯片L298N的IN1~IN4,实现对电机驱动芯片的控制,进而控制电机的转动。
使用AT89S52的PB0~PB2接经过电平转换的探测器信号线,实现对障碍物信息的采集。
使用AT89S52的PC0、PC1接受独立按键信号,实现对小车行进过程中速度的控制。
由于我们小车电机电源没有经过稳压,随着电池电量的消耗,电机电池组的电压逐渐降低,因而小车速度会发生变化。
我们就可以通过独立按键对
速度进行提前设定,使得即使电池组电量变化,小车也能按预定速度行进。
使用AT89S52的PD2、PD3接收中断信息。
在软件部分我们可以看到,随着程序的不断完善,最终我们的INT0,即PD2并没有使用。
使用引脚10为单片机供电,引脚31接地。
4.2逻辑模块
三个传感器信号线给出逻辑电平信号,当任何一个是高电平时,给INT0一个低电平信号。
(如上一部分所述,最终我们用定时器中断代替了这个外部中断,但作为硬件设计和焊接的一部分,我们还是给以阐释)。
两个独立按键分别控制提速和减速,没有按下时,信号线给出高电平。
当任意一键按下时,信号线给出低电平,同时给出一个低电平给INT1。
4.3探测模块
光电开关发射出的红外线在经障碍物漫反射后会由光电开关再接收到,这会引起光电开关传回的电平的变化。
若前方有障碍物,则光电开关传回低电平;
若前方无障碍物,则光电开关传回的是高电平。
有电平的变化可以实现对前方障碍物的探测。
4.4电机驱动模块
L298N芯片有两个电源引脚VDD引脚和VCC引脚。
VDD引脚接+9V电源用来给电机供电,VCC引脚接+5V电源用来给芯片供电,并作为逻辑高电平标准。
L298N芯片通过一个有四个4148二极管组成的保护电路与电机相连,保护电路主要是用来在电机开启和关闭时泄流之用。
由于我们一直让转向电机以最大功率使能从而获得最大的扭矩,保证小车转向成功,而不需要控制转向电机的输出功率,所以ENA引脚(即转向电机使能引脚)直接接+5V,即让转向电机一直使能。
对于后置的驱动电机,我们不仅要控制其实现前进、后退和停止,还要能够控制其转速以解决由于电量不足而产生的小车变慢的问题。
所以,我们将L298N芯片的ENB引脚与Mega16的PB3引脚(即OC0)连接,用来实现PWM调速。
L298N芯片的IN1和IN2引脚分别和Mega16的PA1和PA0引脚连接用来接收主控芯片输出的转向电机的动作指令,并通过OUT1和OUT2来控制转向电机的正转与反转,最终功能的实现表现在小车的左转与右转。
L298N芯片的IN3和IN4引脚分别与Mega16的PA3和PA2引脚连接用来接收主控芯片输出的驱动电机的动作指令,并通过OUT3和OUT4来控制驱动电机的正转与反转,最终功能的实现表现在小车的前进、后退、停止。
5.程序设计及调试
5.1程序设计
#include<
reg52.h>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitGD1=P1^0;
//光电1
sbitGD2=P1^1;
//光电2
sbitGD3=P1^2;
//光电3
sbitGL=P0^0;
//驱动左转低电平有效
sbitGR=P0^1;
//驱动右转
sbitGO=P0^2;
//驱动前进
sbitBACK=P0^3;
//驱动后退
sbitPWM=P0^4;
//PWM调速
uintq=5;
///////////////////////////////////////////////////////
//延时//延时用m取1~5最合适
voidYANSHI(uintm)
{uintn=1000;
while(--m)
while(--n);
}
/////////////////////////////////////////////////////
////初始化//
voidchushi(void)//
{
EA=1;
//总中断开启
IT0=0;
//下降沿触发方式
ET0=1;
//定时中断0
EX0=1;
//外部中断0开启
PWM=1;
TH0=0xfc;
TL0=0x18;
GL=1;
GR=1;
GO=0;
BACK=1;
TR0=0;
}
//////////////////////////////////////////////////////
//左转
voidZUO(void)
GL=0;
YANSHI(4);
//右转
voidYOU(void)
GR=0;
YANSHI(4);
/////////////////////////////////////////////////////////
//前进
voidQIAN(void)
////////////////////////////////////////////////////////
//后退
voidHOU(void)
GO=1;
BACK=0;
/**************************定时器t0中断服务函数***********************************/
voidtimer0(void)interrupt1using1//选用定时器0工作方式为1
{if(q!
=0)
{q--;
TH0=0xff;
TL0=0xff;
}
PWM=~PWM;
TH0=0xff;
TL0=0xff;
}
//外部中断0
voidextern0(void)interrupt0using1//下面7种情况
{TR0=1;
if(GD1==1)//左感遇障(电光1)
{YOU();
//向右转
QIAN();
if(GD2==1)//中感遇障(电光2)
{HOU();
//后退向右转
if(GD3==1)//右感遇障(电光3)
{
ZUO();
//向左转
if(GD1==1&
GD2==1)
{HOU();
YOU();
if(GD2==1&
GD3==1)
ZUO();
GD2==1&
HOU();
}
///////////////////////////////////////////////////////////
voidmain()
{chushi();
while
(1)
{QIAN();
YANSHI(4);
}
6.设计总结
三个臭皮匠赛过一个诸葛亮,相信团队的力量,要虚心请教,不耻下问。
在这个设计过程中,让我们学到了很多东西,比方说在人力方面的分工协作,时间的分配。
在实际设计过程中,重视理论结合实际,先从网络上收集各方面的资料,在各方面的准备工作都到位的情况下,再去进行实际的设备组装。
设计前的的准备工作很重要,要仔细认真的选好所需的原件,在电路的焊接过程中要注意原件不要焊错,最重要的是后面的调试。
很多电子产品都不可能一次性成功,这就要求我们在调试过程中要注意很多的问题,要知道预测问题,发现问题并解决问题。
例如我们在这个设计的调试的过程中遇到相当多的问题,结果大都是程序的问题,也有些是原件的焊接问题,结果导致我们直接就烧坏了三个晶振电容。
最终在我们的共同努力下给解决了。
最后我觉得孔子一句话可以总结:
学而时习之,不亦乐乎!
1.附录
1.1所用全部硬件资源
1.简版JTAG仿真器(程序的下载和仿真)
2.遥控电动玩具车
3.E3F-DS30C4光电开关3只
4.AT89S52单片机1片
5.L298N电机驱动芯片1片
6.74LS27芯片1片
7.8050NPN三极管3只,4148二极管8只
8.实验电路板1只
9.5K1电阻5只,10K电阻2只
10.独立按键2只
11.40引脚底座1只
12.南孚电池6节,6V电池2节
13.502粘合剂1瓶
1.2组成员
组长:
陈庆平,
组员:
黄鹏飞、胡盛祥
2.参考资料
《单片机基础》第三版
XX网络资源