基于单片机的自动避障小车的设计Word格式.docx
《基于单片机的自动避障小车的设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的自动避障小车的设计Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
![基于单片机的自动避障小车的设计Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/21/2f57d47a-aa31-43eb-add7-fa5cce55905f/2f57d47a-aa31-43eb-add7-fa5cce55905f1.gif)
第1节引言
本课程设计是以功耗低、抗干扰能力强的STC89C52单片机为核心,外加路面障碍物感测模块――光电开关组完成对路面情况的实时监测,并把所采集的信息传输给单片机,单片机根据路面情况做出恰当的处理,进而控制小车的走向。
1.1研究背景
在科学探索及紧急抢险中经常要对一些危险或人类不能直接到达的地域进行探测,这就需要用机器人来完成。
而机器人在复杂地形行进时自动避障是一项必不可少也是最基本的功能。
因此,自动避障系统的研发就应运而生。
自动避障小车就是基于这一系统开发而成的。
随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人自动避障功能的研发有了重大意义。
自动避障小车就是自动避障机器人中的一类。
自动避障小车可以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物。
1.2本设计任务和主要内容
本设计是对以单片机STC89C52为核心的系统根据感测模块传输的前方路面信息控制小车行驶走向的软、硬件设计开发。
系统要能够做到准确及时监测前方路面信息并传输给主控模块,做到根据前方路面信息及时调整小车的走向,做到显示小车的走向和小车已经行驶过的路程。
主要内容是:
①感测模块实时监测路面情况并及时传输给单片机;
②单片机核心模块根据感测模块给予的信息控制小车两电机转动;
③电机驱动模块驱动两电机转动,实现转向与行走;
④液晶显示模块显示走向和已行驶过的路程。
第2节系统主要硬件电路设计
2.1系统原理组成框图
图2-1系统原理组成框图
2.2系统主控模块电路
2.2.1STC89C52单片机性能优点:
课堂上我们学习的是8051单片机,但实际应用中现在我们是不会再用8051单片机了。
学习8051单片机是学习一种方法,学习单片机的基本结构,指令。
现在单片机种类繁多,各有各的优点,结合具体情况恰当选择单片机型号也是非常重要的,在此系统中采用STC89C52为主控模块芯片,选此芯片的理由是:
01.与MCS-51单片机完全兼容:
指令兼容,引脚兼容;
02.高保密性:
无法读出,因此无法解密;
03.超强抗干扰能力:
电源、I/O接口、时钟均有抗干扰措施;
04.高可靠性:
1宽电压范围,不怕电源波动5V产品3.4V~6V,;
2宽温度范围:
-40。
C~85。
C;
05.低电磁辐射:
1可禁止ALE输出,降低辐射;
2可选6时钟/机器周期,降低晶振频率,降低辐射;
3单片机时钟振荡器增益可设为1/2;
06.超低功耗:
1掉电模式典型功耗:
≦1uA,可由外中断唤醒;
2空闲模式典型功耗:
2mA;
3正常工作典型功耗;
4mA~7mA;
07.可在线编程,节约投资;
08.强驱动能力,无论灌电流还是拉电流,均优于MCS-51单片机;
09.高速度,最高晶振达到90MHZ;
10.内部资源更丰富,与MCS-51单片机相比增加了:
1T2定时/计数器;
2内部数据存储器RAM增加了1~8倍;
3自带A/D和PWM;
4有P4口;
2.2.2主控模块电路:
图2-2系统核心STC89C52连接电路图
2.3车体框架
方案1:
自己设计制作车架
自己制作小车底盘,用两个直流电机作为主动轮,利用两电机的转速差完成前进、左转、右转、后退等动作。
直流电机扭矩大,转速较慢,易于控制和调速,符合避障小车的要求。
而且自己制作小车框架,可以根据电路板及传感器安装需求灵活设计。
但自己制作小车制作周期较长,且费用较高,有可能自己做的不太美观,因而放弃了这一方案。
方案2:
购买玩具电动车
玩具电动车价格低廉,有完整的驱动、传动和控制单元,其中传动装置是所需的,缩短了开发设计周期。
玩具动车有两个直流电机,再加上自己设计的驱动模块就可以由单片机来控制了,而且买来的玩具电动车一般比较牢固,比较美观。
所以采用了此方案。
2.4电源及稳压模块
采用交流电经直流稳压处理后供电
采用交流电提供直流稳压电源,电流驱动能力及电压稳定性最好,且负载对电源影响也最小。
但由于需要电线对小车供电,极大影响了避障小车行动的灵活性及地形的适应能力。
而且避障小车极易把拖在地上的电线识别为障碍物,人为增加了不必要的障碍。
故放弃了这一方案。
采用干电池组进行供电
采用四节干电池降压至5V后给单片机及其他逻辑单元供电,另取六节干电池为电机及光电开关供电。
这样电机启动及制动时的短暂电压干扰不会影响到逻辑单元和单片机的工作。
但由于电机驱动需要比较大的电流,所以采用干电池供电使用的周期不能很长,实用性不太好。
方案3:
采用可充电蓄电池供电
采用可充电蓄电池给驱动和感测模块供电,其它采用蓄电池经LM2575稳压后供电。
虽然蓄电池的重量比较大,但是蓄电池能够供电的时间长而稳定,况且买来的小车负重能力好,所以采用此方案完全可行。
故采用了此方案。
其原理图如下图所示:
图2-3供电电源及稳压模块:
LM2575电路图
2.5逻辑模块
在感测模块和单片机中断接口之间,需要经过电平的逻辑处理,信息才能被单片机所感知。
主要是一块三输入或非门,所以我们采用现成的74ls27芯片实现逻辑功能。
图2-4信号逻辑模块:
74LS27电路图
2.6感测模块:
方案1:
使用超声波探测器
超声波探测器探测距离远,测距方便。
但由于声波衍射现象较严重,且波包散面太大,易造成障碍物的错误判断。
同时,超声波探测具有几厘米甚至几十厘米的盲区,这对于我们的避障小车是个致命的限制。
使用光电对管探测
光电对管价格低廉,性能稳定,但探测距离太近(一般不超过3cm),使得小车必须制动迅速。
而我们由于采用普通直流电机作为原动力,制动距离至少需要10cm。
因此不采取这一方案。
使用视频采集处理装置进行探测
使用CCD实时采集小车前进路线上的图像并进行实时传输及处理,这是最精确的障碍物信息采集方案,可以对障碍物进行精确定位和测距。
但是使用视频采集会大大增加小车成本和设计开发难度,而且考虑到我们小车行进转弯的精确度并未达到视频处理的精度,因而使用视频采集在实际应用中是个很大的浪费,所以放弃了这一方案。
方案4:
使用光电开关进行障碍物信息采集
使用三只E3F-DS30C4光电开关,分别探测正前方,前右侧,前左侧障碍物信息,在特殊地形(如障碍物密集地形)可将正前方的光电开关移置后方进行探测。
E3F-DS30C4光电开关平均有效探测距离0~30cm可调,且抗外界背景光干扰能力强,可在日光下正常工作(理论上应避免日光和强光源的直接照射)。
小车换档调速后的最大制动距离不超过30cm,一般在10~20cm左右,因而探测距离满足小车需求。
故采用此方案。
光电开关排列如图所示:
图2-5光电开关示意图
2.7连接模块
m价钱也不高,市场上也容易买到。
图2-6连接模块:
TLP521-4电路图
2.8电机驱动模块
此模块的主要作用的驱动直流电机,让直流电机有足够的动力。
使用分立原件搭建电机驱动电路
使用分立原件搭建电机驱动电路造价低廉,在大规模生产中使用广泛。
但分立原件H桥电路工作性能不够稳定,较易出现硬件上的故障,故放弃了这一方案。
使用L298N芯片驱动电机
L298N是一个具有高电压大电流的全桥驱动芯片,输出电压最高可达50V,可以直接通过电源来调节输出电压;
可以直接用单片机的IO口提供信号,而且带有使能端,方便PWM调速,电路简单,性能稳定,使用比较方便。
L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,正好符合小车两个直流电机的驱动要求。
其原理图如下所示:
图2-7驱动模块:
L298电路图
2.9显示模块:
采用数码管显示
数码管完全可用来显示已行驶过的路程,且数码管亮度大,夜间观测也比较方便,所以数码管在一般场合是首选,但是数码管只能显示数字,发挥的空间比较窄。
所以不采用此方案。
采用液晶显示
用128×
64的液晶屏作为显示器件,可以显示小车行驶的方向,小车行驶过的路程,小车行驶过的时间等等,最重要的是液晶能够显示汉字,提供的信息非常直观,故采用此方案。
其原路图如下所示:
图2-8显示模块:
128×
64电路图
第3节系统软件设计
3.1程序设计流程图
本系统设计流程图如下所示:
图3-1系统软件主流程图
3.2系统主程序设计:
ORG0000H
LJMPMAIN
ORG0003H
LJMPINTT0;
外部中断0入口
ORG000BH;
定时器/计时器0中断入口
LJMPTIME0
ORG0050H
MAIN:
MOVSP,#6FH;
主程序
SETBEA;
开总中断
SETBEX0;
开外部中断0
SETBIT0;
设置外部0为边沿触发
SJMP$;
等待外部中断
INTT0:
MOVA,#00H;
累计器清零
MOVC,P2.0;
光电管1传来的信号
MOVACC.0,C;
光电管1值送累加器0位
MOVC,P2.1;
光电管2传来的信号
MOVACC.1.C;
光电管2值送累加器1位
MOVC,P2.2;
光电管3传来的信号
MOVACC.2,C;
光电管3值送累加器2位
CJNEA,#00H,LOOP1;
是000,左前中都有障碍物,转LOOP1
CJNEA,#01H,LOOP2;
是001,左前有障碍物,右方无障碍物,转LOOP2
CJNEA,#02H,LOOP3;
是010,左右有障碍物,前方无障碍物,转LOOP3
CJNEA,#03H,LOOP4;
是011,左方有障碍物,前右无障碍物,转LOOP4
CJNEA,#04H,LOOP5;
是100,左方无障碍物,前右有障碍物,转LOOP5
CJNEA,#05H,LOOP6;
是101,左右无障碍物,前方有障碍物,转LOOP6
CJNEA,#06H,LOOP7;
是110,左中无障碍物,右方有障碍物,转LOOP7
LO0P1:
…………………
LOOP2:
LOOP3:
LOOP4:
LOOP5:
LOOP6:
LOOP7:
………………
RETI
3.2PWM信号控制小车走向流程图
图3-2PWM信号控制电机流程图
3.3PWM信号控制电机流程序
PWMH1DATA30H;
直流电机1高电平脉冲的个数
PWMH2DATA31H;
直流电机2高电平脉冲的个数
ZHENG1BIT20H.0;
直流电机1正转标志0正转,1反转
ZHENG2BIT20H.1;
直流电机2正转标志0正转,1反转
PWMDATA34H;
PWM周期
COUNTER1DATA35H;
直流电机1计数COUNTER1
COUNTER2DATA36H;
直流电机2计数COUNTER2
0RG2000H
PWM:
MOVSP,#60H;
设置堆栈,首地址为#60H
MOVPWMH1,#08H;
电机1高电平脉冲赋初值
MOVPWMH2,#08H;
电机2高电平脉冲赋初值,与电机1相同
MOVCOUNTER1,#01H;
COUNTER1赋初值1
MOVCOUNTER2,#01H;
COUNTER2赋初值1
MOVZHENG1,#00H;
电机1正转标志位置0
MOVZHENG2,#00H;
电机2正转标志位置0
MOVPWM,#15H;
PWM周期赋初值15H
MOVP1,#00H;
P0口都为低电平,方便电机控制
MOVTMOD,#02H;
定时器0在模式2下工作
MOVTL0,#38H;
定时器200us产生一次溢出
MOVTH0,#38H;
自动重装的值
SETBET0;
使能定时0中断
使能总中断
SETBTR0;
开始计时
TIME0:
PUSHPSW;
现场保护
PUSHACC
INCCOUNTER1;
COUNTER1加1
INCCOUNTER2;
COUNTER2加1
MOVA,COUNTER1
CJNEA,PWMH,TIME011;
如果等于高电平脉冲数
MOVCY,ZHENG1;
判断是否要反转
JZCY,Z1;
是否反转
CLRP1.1;
电机1一端变为低电平,反转引脚
Z1:
CLRP1.0;
电机1一端变为低电平,正传引脚
TIME011:
CJNEA,PWM,TIME02;
如果等于周期数
计数器1复位
JZCY,Z11;
SETBP1.1;
置P1.0为高电平,反转引脚
Z11:
SETBP1.0;
置P1.0为高电平,正传引脚
MOVA,COUNTER2
CJNEA,PWMH,TIME021;
MOVCY,ZHENG2;
JZCY,Z2;
CLRP1.3;
电机2一端变为低电平,反转引脚
Z2:
CLRP1.2;
电机2一端变为低电平,正传引脚
TIME012:
JZCY,Z21;
SETBP1.3;
置P1.3为高电平,反转引脚
Z21:
SETBP1.2;
置P1.2为高电平,正转引脚
TIME02:
;
出堆栈
POPACC
POPPSW
3.3液晶128×
64初始化及各显示子程序:
RETBITP2.7;
液晶与单片机连接脚
PSBBITP2.6
ENBITP2.5
RWBITP2.3
RSBITP2.4
COMBIT30H;
命令/数据
128*64:
CLRRET;
液晶初始化
LCALLDELAY10MS
SETBRET
SETBPSB
CLREN
MOVCOM,#30H;
液晶功能设定
LCALLW_COM
MOVCOM,#0CH;
液晶显示状态
LCALLW_COM
MOVCOM,#01H;
液晶清楚显示
MOVCOM,#06H;
液晶地址归位
CHECKBUSY:
液晶查忙
MOVP0,#FFH
CLRRS
SETBRW
SETBEN
MOVA,#FFH
ANLA,P0
CPLA
JZCHECKBUSY
RET
W_COM:
LCALLCHECKBUSY;
液晶写指令
CLRRW
MOVP0,COM
W_DATA:
液晶写数据
SETBRS
DELAY10MS:
延时10MS
MOVR6,#20
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
第4节结束语
以上就是我这次期末课程设计全部内容。
本系统是以STC89C52为核心,外加各个模块,最终达到让小车遇障碍物灵活避障的目标。
本系统硬件电路比较简单,主要是通过软件来实现各个功能,这样就可以让小车负载轻,小车行动就变得更灵活了。
硬件电路感测模块的光电开关组价格昂贵是本系统的一不足之处,但是其他拥有此功能的传感器精度不高,所以为了设计好这个系统还是选了光电开关组。
此小车我认为要改进的是,小车走向时能有语音播放,这样就能更直观的知道小车接下来的走向了。
通过这次期末课程设计,我对单片机有了更深层次的了解,课本上我们学习的是8051单片机,但是这次课程设计我选的是现在工业用的单片机STC89C52单片机,此单片机操作与8051绝大部分是一样的,所以知道了8051就可以对STC89C52进行编程操作。
学习8051是学习一种方法,要能够举一反三。
现在单片机种类繁多,根据具体情况选择合适的单片机是非常重要的。
在这次期末课程设计中,我遇到了很多问题。
最害怕的也是最基本的是写汇编程序,由于以前学习单片机时写的都是C语言,所以一段时间总觉得汇编语言过时了,不如C语言灵活,但是经过这次期末课程设计觉得有些C语言跟汇编是没法比的,对汇编语言也更熟悉了。
上课时学汇编指令,只是记下来而已,没有真正的写过,因此经过这次期末课程设计,让我知道了,学习一门语言光记是没有用的,而且很容易忘记,最好的方法是在实际中多写,多改,不要怕写不好,走出了第一步,接下里的就容易了。
参考文献:
[1]何立民单片机高级教程—应用于设计北京航空航天大学出版社2000.8
[2]张鑫单片机原理及应用电子工业出版社2008.5
[3]郁有文传感器原理及工程应用西安电子科技大学出版社2007.2
[4]杨素行模拟电子技术基础简明教程高等教育出版社2007.5
[5]余孟尝数字电子技术基础教程高等教育出版社2006.12
.