智能循迹避障小车控制系统设计最终版.docx

上传人:b****7 文档编号:8787355 上传时间:2023-02-01 格式:DOCX 页数:30 大小:1.07MB
下载 相关 举报
智能循迹避障小车控制系统设计最终版.docx_第1页
第1页 / 共30页
智能循迹避障小车控制系统设计最终版.docx_第2页
第2页 / 共30页
智能循迹避障小车控制系统设计最终版.docx_第3页
第3页 / 共30页
智能循迹避障小车控制系统设计最终版.docx_第4页
第4页 / 共30页
智能循迹避障小车控制系统设计最终版.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

智能循迹避障小车控制系统设计最终版.docx

《智能循迹避障小车控制系统设计最终版.docx》由会员分享,可在线阅读,更多相关《智能循迹避障小车控制系统设计最终版.docx(30页珍藏版)》请在冰豆网上搜索。

智能循迹避障小车控制系统设计最终版.docx

智能循迹避障小车控制系统设计最终版

大学2016~2017学年秋季学期研究生课程考试

 

课程名称:

微机接口技术与数字控制课程编号:

09Z077005

论文题目:

基于STC89C52单片机自动避障循迹小车控制系统的设计

研究生:

肖青峰、徐鹏、付高峰学号:

16721678

论文评语:

 

成绩:

任课教师:

林勇

评阅日期:

基于STC89C52单片机自动避障循迹小车

控制系统设计

肖青峰、徐鹏、付高峰

大学机电工程与自动化学院,200072

摘要:

本设计是基于STC89C52单片机的自动循迹避障小车的控制系统设计。

利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。

其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。

关键词:

循迹避障小车;STC89C52单片机;红外对管;pwm调速

 

1设计目标和任务制定

随着社会水平提高与电子商务的快速发展,大型化集成化商品多元化的仓储集散中心应运而生。

这些仓库通常面积巨大,(有的可达上万平方米,)并且物品种类繁多,仓储流量大,可是当前大多数仓储中心依旧采用传统的人工管理,工人管理工作繁琐且工作效率低下,综上所述,现代仓储业正面临着发展瓶颈,制约着仓储行业的进一步发展。

如果有一种智能仓储,使得我们能够在实际的物流活动中提高仓储的效率,减少仓储的人力资源成本和仓库的直接成本,解决绝对人力不能满足大型物流中心运作的情况,那么我们的仓储行业又能向前迈进一个新阶。

 因此,基于上诉当前仓管配货工作的任务繁忙,减小仓管员工作量,提高仓储管理工作效率,我们决定制作一智能避障循迹小车,用于仓库不同货架间货物的自动配送。

我们的小车能实现循迹移动,在不同工作点之间穿梭。

借助我们的小车,仓管员只需轻松输入目标代码,就可以实现将货物自动送达目标货架或者将不同货架的货物收集到配送点。

同时为了避免小车在行进过程中撞击到人员、货物或者货架等障碍物,我们的小车具有自动避障和自动停车功能。

2设计方案的拟定

2.1整体系统设计

该整个系统由控制模块、光电传感器检测模块、电源模块、电机及驱动模块等子模块组成。

如框图所示:

 

2.2控制模块设计

针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。

根据这些分析,我选定了STC89C52单片机作为本设计的主控装置,52单片机具有功能强大的位操作指令,I/O口均可按位寻址,并具有如下性能优点:

(1)微处理器该单片机中有一个8位的微处理器,与通用的微处理器基本相同,同样包括了运算器和控制器两大部分,只是增加了面向控制的处理功能,不仅可处理数据,还可以进行位变量的处理。

(2)数据存储器片为128个字节,片外最多可外扩至64k字节,用来存储程序在运行期间的工作变量、运算的中间结果、数据暂存和缓冲、标志位等,所以称为数据存储器。

(3)程序存储器由于受集成度限制,片只读存储器一般容量较小,如果片的只读存储器的容量不够,则需用扩展片外的只读存储器,片外最多可外扩至64k字节。

(4)中断系统具有5个中断源,2级中断优先权。

(5)定时器/计数器片有2个16位的定时器/计数器,具有四种工作方式。

(6)串行口1个全双工的串行口,具有四种工作方式。

可用来进行串行通讯,扩展并行I/O口,甚至与多个单片机相连构成多机系统,从而使单片机的功能更强且应用更广。

(7)P0口、P1口、P2口、P3口为4个并行8位I/O口。

(8)特殊功能寄存器共有21个,用于对片的个功能的部件进行管理、控制、监视。

实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。

由上可见,STC89C52单片机的硬件结构具有功能部件种类全,功能强等特点。

特别值得一提的是该单片机CPU中的位处理器,它实际上是一个完整的1位微计算机,这个一位微计算机有自己的CPU、位寄存器、I/O口和指令集。

1位机在开关决策、逻辑电路仿真、过程控制方面非常有效;而8位机在数据采集,运算处理方面有明显的长处。

对于本设计该单片机绰绰有余,更可贵的是52单片机价格非常低廉。

STC89C52引脚图

2.3光电传感检测模块

循迹方案设计:

方案一:

采用摄像头循迹法:

利用摄像头对赛道提取信息,分有数字式和模拟式。

方案二:

红外对管循迹法:

利用黑白色对红外线的吸收作用不同,其由发射管和接收管配对组成,发射管发射出红外线,当发射到黑色轨道时,被黑色轨道所吸收,当发射到白色跑道外时,会发射回来,接收管接收到光线信号,产生一电压信号给单片机,从而实现对轨迹信息的读取。

方案三:

激光管循迹法:

其循迹原理与红外对管相同,不同的是其测距比较远。

综上所述,又考虑到成本的原因,本次设计采用红外对管循迹法。

采用脉冲调制的反射式红外发射接收器。

由于采用带有交流分量的调制信号,则可大幅度减少外界的干扰;此外红外发射接收管的工作电流取决于平均电流,如果采用占空比小的调制信号,在平均电流不变的情况下,瞬时电流很大(50~100mA)(ST-188允许的最大输入电流为50mA),则大大提高了信噪比。

避障方案设计:

方案一:

红外线避障。

方案二:

超声波避障。

本次设计本打算利用两种方案混合使用,但是由于后期制作过程中,超声波模块损坏,只能使用红外线避障。

其也是由发射管和接收管组成,工作原理与循迹的相同,发射管发出红外线,当遇到障碍物时就会反射回来,接收管接收到反射的信号就会产生一电压信号给单片机,从而实现对障碍物的检测。

红外线传感器模块实物图

2.4电源模块

电源模块,用9V的锌电源给前、后轮电机供电,然后使用7805稳压管来把高电压稳成5V分别给单片机和电机驱动芯片供电。

7805电源模块

 

2.4电机及电机驱动模块

电机方案的选择:

方案一:

采用直流电机,优点在于硬件电路设计简单。

当外加额定直流电压时,转速几乎相等,调速性能较好,且性价比高。

对于小车的行驶,能够很好的控制。

方案二:

采用步进电机,步进电机可以实现精确的转角输出,只要施加合适的脉冲序列,电机可以按照人们的预定的速度或方向进行连续的转动,便于控速,但是软件程序的编写较直流电机稍显复杂。

表2.1电机性能对比表

对比项

直流电机

步进电机

调速性能

较好

较差

位置控制精度

较差

控制难易程度

简单

较难

价格

综合考虑,本智能车决定采用直流电机作为只能车的动力电机。

电机采用直流减速电机,直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。

由于其部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生较大扭力。

 可选用减速比为1:

74 的直流电机,减速后电机的转速为100r/min。

若车轮直径为6cm,则小车的最大速度可以达到0.314m/s能够较好的满足系统的要求。

下图为电机的实物图

直流减速电机

电机驱动方案的选择:

方案一:

采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。

方案二:

采用电阻网络或数字电位器调节电动机的分压,从而达到分压的目的。

但电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。

更主要的问题在于一般的电动机电阻很小,但电流很大,分压不仅回降低效率,而且实现很困难。

方案三:

采用功率三极管作为功率放大器的输出控制直流电机。

线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的H型桥式电路(如图2.1)。

用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。

这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的PWM调速技术。

现市面上有很多此种芯片,我选用了L293专用驱动器。

所用芯片L293属于H桥集成电路,其输出电流为1000mA,最高电流2A,最高工作电压36V,可以驱动感性负载,特别是其输入端可以与单片机直接相联,从而很方便地受单片机控制。

当驱动小型直流电机时,可以直接控制两路电机,并可以实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。

本模块具有体积小,控制方便的特点。

采用此模块定会使您的电机控制自如,应对小车题目轻松自如。

L293D电机驱动模块

电机调速系统的设计:

方案一:

串电阻调速系统。

方案二:

静止可控整流器。

简称V-M系统。

方案三:

脉宽调速系统。

旋转变流系统由交流发电机拖动直流电动机实现变流,由发电机给需要调速的直流电动机供电,调节发电机的励磁电流即可改变其输出电压,从而调节电动机的转速。

改变励磁电流的方向则输出电压的极性和电动机的转向都随着改变,所以G-M系统的可逆运行是很容易实现的。

该系统需要旋转变流机组,至少包含两台与调速电动机容量相当的旋转电机,还要一台励磁发电机,设备多、体积大、费用高、效率低、维护不方便等缺点。

且技术落后,因此搁置不用。

V-M系统是当今直流调速系统的主要形式。

它可以是单相、三相或更多相数,半波、全波、半控、全控等类型,可实现平滑调速。

V-M系统的缺点是晶闸管的单向导电性,它不允许电流反向,给系统的可逆运行造成困难。

它的另一个缺点是运行条件要求高,维护运行麻烦。

最后,当系统处于低速运行时,系统的功率因数很低,并产生较大的谐波电流危害附近的用电设备。

PWM调速系统:

其实现方式有两种,一是采用晶闸管的直流斩波器基本原理,将晶闸管处在开关状态,当晶闸管被触发导通时,电源电压加到电机上,当晶闸管关断时,直流电源与电机断开,电动机经二极管续流,两端电压接近于零,脉冲周期不变,只改变晶闸管的导通时间,即通过改变脉冲宽度来进行直流调速;二是利用软件方式实现,采用两个定时器,其中一个用来控制脉冲频率,另一个控制占空比,这种实现方式快捷且有效。

与V-M系统相比,PWM调速系统有下列优点:

(1)由于PWM调速系统的开关频率较高,仅靠电枢电感的滤波作用就可以获得脉动很小的直流电流,电枢电流容易连续,系统的低速运行平稳,调速围较宽,可达1:

10000左右。

由于电流波形比V-M系统好,在相同的平均电流下,电动机的损耗和发热都比较小。

(2)同样由于开关频率高,若与快速响应的电机相配合,系统可以获得很宽的频带,因此快速响应性能好,动态抗扰能力强。

(3)由于电力电子器件只工作在开关状态,主电路损耗较小,装置效率较高。

根据以上综合比较,以及本设计中受控电机的容量和直流电机调速的发展方向,本设计采用了采用了程序的方法实现PWM脉冲宽度调试。

 

3硬件系统的设计

3.1总体设计

智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,调制前面两个轮子的转速起停从而达到控制转向的目的,后轮是万象轮,起支撑的作用。

将循迹光电对管分别装在车体下的左右。

当车身下左边的传感器检测到黑线时,主控芯片控制左轮电机停止,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制右轮电机停止,车向右修正。

避障的原理和循线一样,在车身右边装一个光电对管,当其检测到障碍物时,主控芯片给出信号报警并控制车子倒退,转向,从而避开障碍物。

 

表3.1元件清单

元件

数量

元件

数量

元件

数量

直流电机

2只

电阻

若干

集成电路芯片

若干

单片机

1块

二极管

若干

电容

若干

红外对管

3只

蜂鸣器

1只

电位器

若干

12M晶振

1只

杜邦线

若干

玩具小车

1个

排针

若干

 

3.2光电传感检测模块

采用四路红外对管传感器,其中两路置于小车中间,用于循迹检测,另外两路用于避障信号检测,置于小车两侧。

其工作原理如下:

小车循迹原理是小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。

笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。

红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。

在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM324作比较器来采集高低电平,从而实现信号的检测。

避障亦是此原理。

电路图如图,我们将其接于单片机P3口。

3.3电源模块电路设计

采用7805稳压模块为系统提供5V的稳定电压,并设计有电源指示二极管,用以提示电源是否供电正常。

3.4电机驱动模块设计

电机驱动模块采用专用驱动器L293D,所用芯片L293属于H桥集成电路,其输出电流为1000mA,最高电流2A,最高工作电压36V,可以驱动感性负载,特别是其输入端可以与单片机直接相联,从而很方便地受单片机控制。

其工作电路如下图所示,其中EN1、EN2为左右电机使能端,IN1、IN2、IN3、IN4为电机正反转引脚端,它们分别与P1口各引脚相连。

3.5主控电路

主控电路

 

复位电路的设计,采用上拉电复位,设计有按钮,按下即可实现复位。

复位电路

时钟电路的设计,采用DS1302时钟模块,接于单片机P2.0和P2.1口。

蜂鸣器电路,接于单片机P2.3口

4软件系统的设计

4.1主程序的设计

 

否是

是是

否是

是是

否否

主程序流程图

如主程序流程框图所示,主程序主包括了系统的初始化,小车的启动,和循迹避障动作实现程序。

这里需要说明一点:

之所以将避障程序放在主程序而将循迹作为一子程序这样设计,一是为了方便实现小车在自动循迹的基础上实现自动避障并能够在避障后自动找回轨迹继续循迹移动;二是实现程序模块化,以便以后再开发。

具体算法思路是小车启动后,首先判断轨迹前方有无障碍物。

无障碍物时直接执行循迹移动。

有障碍物时,判断是那一侧有障碍物,然后根据传感器采集的障碍物信息作出指令,比如右侧有障碍物时,先执行停止、报警、降速、后退等指令,其次先左转再直行···左转、直行直至绕开障碍物,然后右转、直行再右转、直行直至重新回到轨迹上,循迹移动。

左侧或者前方有障碍物时程序算法类似于前者,不同在于执行的动作顺序不同。

在程序的最后又补充添加了一红外遥控控制,以方便人为地控制随时停车。

详细程序设计如下:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitIN1=P1^2;//定义电机驱动控制引脚

sbitIN2=P1^3;

sbitIN3=P1^6;

sbitIN4=P1^7;

sbitEN1=P1^4;

sbitEN2=P1^5;

sbitBUZZ=P2^3;//定义蜂鸣器接线

sbitDU=P2^6;//定义显示控制引脚

sbitWE=P2^7;

#defineleft_xP3_4//传感器引脚

#defineright_xP3_3

#defineleft_bP3_6

#defineright_bP3_5

#defineleft_moto_pwmP1_4//PWM信号端

#defineright_moto_pwmP1_5

unsignedintpwmsd;//定义pwm转速变量

unsignedintcount;

unsignedinti;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

voiddelay_nms(unsignedintn)//延时nms

{

unsignedinti,j;

for(i=0;i

{

for(j=0;j<125;j++)

{}

}

}

voidmingdi(void)//蜂鸣器嘀的一声响

{

BUZZ=0;

delay_nms(50);

BUZZ=1;

}

voiddisp(unsignedintj)

voidqianjin(void)//前进

voidturnleft(void)//左转

voidturnright(void)//右转

voidhoutui(void)//后退

voidstop(void)//停止

voidtimer0_Int()interrupt1//定时器中断

voidTimer1_Int()interrupt2

voidxunji(void)

voidmain(void)

{

P0=0X00;//关数码管

P1=0XF0;//关电机

B:

for(i=0;i<50;i++)//判断启动开关是否按下

{

delay_nms

(1);

if(P3_7!

=1)

gotoB;

}

mingdi();//启动小车,鸣笛

pwmsd=6;//设置初速度

TMOD=0X11;

TH0=0Xfc;//1ms定时

TL0=0X18;

TR0=1;

ET0=1;

EA=1;//开总中断

TH1=0xff;//0.5ms定时

TL1=0xce;

ET1=0;

TR1=0;

while

(1)//无限循环

{

disp(pwmsd);//调显示

if(left_b==1)//判断左面是否有障碍物

{

if(right_b==1)//判断右面是否有障碍物

{

xunji();//两面都没有障碍物,继续循迹移动

}

else

{

stop();//右面有障碍物,先停车

delay_nms(1000);

mingdi();//再报警

delay_nms(50);

mingdi();

houtui();//其次后退

delay_nms(500);

pwmsd=3;//降速

do//左转、直行、左转、直行····直到没有障碍物;

{

turnleft();

delay_nms(100);

qianjin();

delay_nms(500);

}while(left_b&&right_b==1);

do//绕开障碍物后,右转、直行、右转、直行···

{//直到找到轨道;

turnright();

delay_nms(100);

qianjin();

delay_nms(500);

}while(left_x==0||right_x==0);

xunji();//继续循迹移动;

}

}

else//左侧有障碍物;

{

stop();//先停车,

delay_nms(1000);

mingdi();//再报警;

delay_nms(50);

mingdi();

houtui();//其次后退;

delay_nms(500);

pwmsd=3;//降速,

do//右转、直行···直到绕开障碍物,

{

turnright();

delay_nms(100);

qianjin();

delay_nms(500);

}while(left_b||right_b==1);

do//绕开障碍物后,左转、直行···直到找到轨迹;

{

turnleft();

delay_nms(100);

qianjin();

delay_nms(500);

}while(left_x||right_x==0);

xunji();//继续循迹移动;

}

}

}

4.2循迹子程序的设计

循迹子程序流程图:

 

循迹子程序流程图

根据前一节介绍的红外对管循迹原理,设计了如上图所示的循迹算法,首先判断两路循迹传感器的状态,根据传感器状态做出相应的指令,驱动电机转动,以实现小车循迹移动。

基本设计如下:

当左右循迹传感器状态为1、1时,即未偏出轨迹,直行移动;当传感器状态为

0、1时,左侧偏出,微右转;当传感器状态为1、0时,右侧偏出,微左转;当传感器状态为0、0时,两侧均偏出,但是为了保障主程序能够自我找回轨迹,而不对其运行造成指令干扰,这里就将这一状态给屏蔽,不将其视为控制状态信息。

详细程序设计如下:

voidxunji(void)

{

if(left_x==1&&right_x==1)

{

qianjin();//调用前进函数

delay_nms(20);

}

if(left_x==0&&right_x==1)//左边检测到黑线

{

turnright();//调用小车右转函数

delay_nms(20);

}

if(right_x==0&&left_x==1)//右边检测到黑线

{

turnleft();//调用小车左转函数

delay_nms(20);

}

}

4.3电机驱动子程序的设计

电机动作实现,前进:

左电机往前转,右电机往前转;左转:

左电机往后转,右电机往前转;右转:

左电机往前转,右电机往后转;后退:

左右电机都往后转;停止:

电机使能端为零。

具体程序设计如下:

voidqianjin(void)//前进

{

IN1=1;

IN2=0;

IN3=1;

IN4=0;

}

voidturnleft(void)//左转

{

IN1=0;

IN2=1;

IN3=1;

IN4=0;

}

voidturnright(void)//右转

{

IN1=1;

IN2=0;

IN3=0;

IN4=1;

}

voidhoutui(void)//后退

{

IN1=0;

IN2=1;

IN3=0;

IN4=1;

}

voidstop(void)//停止

{

EN1=0;

EN2=0;

}

4.4中断子程序的设计

设有两个定时器中断T0、T1,用来实现电机的PWM调速,其中定时器T0用于控制频率,定时器T1用于控制占空比。

具体思路是T0中断让一个IO口输出高电平,并在这个T0中断中启动定时器T1,T1中断让这个IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变

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

当前位置:首页 > 高中教育 > 其它课程

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

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