资源描述
数理与信息工程学院
《单片机原理及应用》期末课程设计
题 目: 基于单片机的自动避障小车
专 业: 电子信息工程
班 级:
姓 名:
学 号:
指导老师:
成 绩:
目录
第1节 引言。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
1.1研究背景。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
1.2本设计任务和主要内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 3
第2节 系统主要硬件电路设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。4
2.1系统原理组成框图。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。4
2.2 系统主控模块电路。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。4
2.2.1 STC89C52单片机性能优点。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。4
2.2.2 主控模块电路。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5
2.3 车体框架。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5
2.4 电源及稳压模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6
2.5 逻辑模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7
2.6 感测模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7
2.7 连接模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。8
2.8 电机驱动模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。9
2.9 显示模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10
第3节 系统软件设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11
3.1程序设计流程图。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11
3.2系统主程序设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12
3.3 PWM信号控制小车走向流程图。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。13
3.4 PWM信号控制电机流程序。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。13
3.5液晶初始化及显示子程序。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15
第4节 结束语。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。18
参考文献。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。19
基于单片机的自动避障小车
数理与信息工程学院 06电子信息工程 刘东福生
指导老师 余水宝
第1节 引言
本课程设计是以功耗低、抗干扰能力强的STC89C52单片机为核心,外加路面障碍物感测模块――光电开关组完成对路面情况的实时监测,并把所采集的信息传输给单片机,单片机根据路面情况做出恰当的处理,进而控制小车的走向。
1.1 研究背景
在科学探索及紧急抢险中经常要对一些危险或人类不能直接到达的地域进行探测,这就需要用机器人来完成。而机器人在复杂地形行进时自动避障是一项必不可少也是最基本的功能。因此,自动避障系统的研发就应运而生。自动避障小车就是基于这一系统开发而成的。随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人自动避障功能的研发有了重大意义。自动避障小车就是自动避障机器人中的一类。自动避障小车可以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物。
1.2 本设计任务和主要内容
本设计是对以单片机STC89C52为核心的系统根据感测模块传输的前方路面信息控制小车行驶走向的软、硬件设计开发。系统要能够做到准确及时监测前方路面信息并传输给主控模块,做到根据前方路面信息及时调整小车的走向,做到显示小车的走向和小车已经行驶过的路程。
主要内容是:
① 感测模块实时监测路面情况并及时传输给单片机;
② 单片机核心模块根据感测模块给予的信息控制小车两电机转动;
③ 电机驱动模块驱动两电机转动,实现转向与行走;
④ 液晶显示模块显示走向和已行驶过的路程。
第2节 系统主要硬件电路设计
2.1系统原理组成框图
图2-1 系统原理组成框图
2.2 系统主控模块电路
2.2.1 STC89C52单片机性能优点:
课堂上我们学习的是8051单片机,但实际应用中现在我们是不会再用8051单片机了。学习8051单片机是学习一种方法,学习单片机的基本结构,指令。现在单片机种类繁多,各有各的优点,结合具体情况恰当选择单片机型号也是非常重要的,在此系统中采用STC89C52为主控模块芯片,选此芯片的理由是:
01. 与MCS-51单片机完全兼容:指令兼容,引脚兼容;
02. 高保密性:无法读出,因此无法解密;
03. 超强抗干扰能力:电源、I/O接口、时钟均有抗干扰措施;
04. 高可靠性:
① 宽电压范围,不怕电源波动5V产品3.4V~6V,;
② 宽温度范围:-40。C~85。C;
05. 低电磁辐射:
① 可禁止ALE输出,降低辐射;
② 可选6时钟/机器周期,降低晶振频率,降低辐射;
③ 单片机时钟振荡器增益可设为1/2;
06. 超低功耗:
① 掉电模式典型功耗:≦1uA,可由外中断唤醒;
② 空闲模式典型功耗:2mA;
③ 正常工作典型功耗;4 mA~7 mA;
07. 可在线编程,节约投资;
08. 强驱动能力,无论灌电流还是拉电流,均优于MCS-51单片机;
09. 高速度,最高晶振达到90MHZ;
10. 内部资源更丰富,与MCS-51单片机相比增加了:
① T2定时/计数器;
② 内部数据存储器RAM增加了1~8倍;
③ 自带A/D和PWM;
④ 有P4口;
2.2.2 主控模块电路:
图2-2 系统核心STC89C52连接电路图
2.3 车体框架
方案1:自己设计制作车架
自己制作小车底盘,用两个直流电机作为主动轮,利用两电机的转速差完成前进、左转、右转、后退等动作。直流电机扭矩大,转速较慢,易于控制和调速,符合避障小车的要求。而且自己制作小车框架,可以根据电路板及传感器安装需求灵活设计。但自己制作小车制作周期较长,且费用较高,有可能自己做的不太美观,因而放弃了这一方案。
方案2:购买玩具电动车
玩具电动车价格低廉,有完整的驱动、传动和控制单元,其中传动装置是所需的,缩短了开发设计周期。玩具动车有两个直流电机,再加上自己设计的驱动模块就可以由单片机来控制了,而且买来的玩具电动车一般比较牢固,比较美观。所以采用了此方案。
2.4 电源及稳压模块
方案1:采用交流电经直流稳压处理后供电
采用交流电提供直流稳压电源,电流驱动能力及电压稳定性最好,且负载对电源影响也最小。但由于需要电线对小车供电,极大影响了避障小车行动的灵活性及地形的适应能力。而且避障小车极易把拖在地上的电线识别为障碍物,人为增加了不必要的障碍。故放弃了这一方案。
方案2:采用干电池组进行供电
采用四节干电池降压至5V后给单片机及其他逻辑单元供电,另取六节干电池为电机及光电开关供电。这样电机启动及制动时的短暂电压干扰不会影响到逻辑单元和单片机的工作。但由于电机驱动需要比较大的电流,所以采用干电池供电使用的周期不能很长,实用性不太好。故放弃了这一方案。
方案3:采用可充电蓄电池供电
采用可充电蓄电池给驱动和感测模块供电,其它采用蓄电池经LM2575稳压后供电。虽然蓄电池的重量比较大,但是蓄电池能够供电的时间长而稳定,况且买来的小车负重能力好,所以采用此方案完全可行。故采用了此方案。
其原理图如下图所示:
图2-3 供电电源及稳压模块:LM2575电路图
2.5 逻辑模块
在感测模块和单片机中断接口之间,需要经过电平的逻辑处理,信息才能被单片机所感知。主要是一块三输入或非门,所以我们采用现成的74ls27芯片实现逻辑功能。
图2-4 信号逻辑模块:74LS27电路图
2.6 感测模块:
方案1:使用超声波探测器
超声波探测器探测距离远,测距方便。但由于声波衍射现象较严重,且波包散面太大,易造成障碍物的错误判断。同时,超声波探测具有几厘米甚至几十厘米的盲区,这对于我们的避障小车是个致命的限制。故放弃了这一方案。
方案2:使用光电对管探测
光电对管价格低廉,性能稳定,但探测距离太近(一般不超过3cm),使得小车必须制动迅速。而我们由于采用普通直流电机作为原动力,制动距离至少需要10cm。因此不采取这一方案。
方案3:使用视频采集处理装置进行探测
使用CCD实时采集小车前进路线上的图像并进行实时传输及处理,这是最精确的障碍物信息采集方案,可以对障碍物进行精确定位和测距。但是使用视频采集会大大增加小车成本和设计开发难度,而且考虑到我们小车行进转弯的精确度并未达到视频处理的精度,因而使用视频采集在实际应用中是个很大的浪费,所以放弃了这一方案。
方案4:使用光电开关进行障碍物信息采集
使用三只E3F-DS30C4光电开关,分别探测正前方,前右侧,前左侧障碍物信息,在特殊地形(如障碍物密集地形)可将正前方的光电开关移置后方进行探测。E3F-DS30C4光电开关平均有效探测距离0~30cm可调,且抗外界背景光干扰能力强,可在日光下正常工作(理论上应避免日光和强光源的直接照射)。小车换档调速后的最大制动距离不超过30cm,一般在10~20cm左右,因而探测距离满足小车需求。故采用此方案。
光电开关排列如图所示:
图2-5 光电开关示意图
2.7 连接模块
此模块的主要作用是,连接单片机和电机驱动模块,并消除干扰,让单片机能够准确的控制电机驱动模块,在此采用了一集成了四个光耦的集成电路TLP521-4,而不采用单个的光耦,且一个集成电路也显得更美观,价钱也不高,市场上也容易买到。
其原理图如下图所示:
图2-6 连接模块:TLP521-4电路图
2.8 电机驱动模块
此模块的主要作用的驱动直流电机,让直流电机有足够的动力。
方案1:使用分立原件搭建电机驱动电路
使用分立原件搭建电机驱动电路造价低廉,在大规模生产中使用广泛。但分立原件H桥电路工作性能不够稳定,较易出现硬件上的故障,故放弃了这一方案。
方案2:使用L298N芯片驱动电机
L298N是一个具有高电压大电流的全桥驱动芯片,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号,而且带有使能端,方便PWM调速,电路简单,性能稳定,使用比较方便。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,正好符合小车两个直流电机的驱动要求。
其原理图如下所示:
图2-7 驱动模块:L298电路图
2.9 显示模块:
方案1:采用数码管显示
数码管完全可用来显示已行驶过的路程,且数码管亮度大,夜间观测也比较方便,所以数码管在一般场合是首选,但是数码管只能显示数字,发挥的空间比较窄。所以不采用此方案。
方案2:采用液晶显示
用128×64的液晶屏作为显示器件,可以显示小车行驶的方向,小车行驶过的路程,小车行驶过的时间等等,最重要的是液晶能够显示汉字,提供的信息非常直观,故采用此方案。
其原路图如下所示:
图2-8 显示模块:128×64电路图
第3节 系统软件设计
3.1 程序设计流程图
本系统设计流程图如下所示:
图3-1 系统软件主流程图
3.2系统主程序设计:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTT0 ;外部中断0入口
ORG 000BH ;定时器/计时器0中断入口
LJMP TIME0
ORG 0050H
MAIN: MOV SP,#6FH ;主程序
SETB EA ;开总中断
SETB EX0 ;开外部中断0
SETB IT0 ;设置外部0为边沿触发
SJMP $ ;等待外部中断
INTT0: MOV A,#00H ;累计器清零
MOV C,P2.0 ;光电管1传来的信号
MOV ACC.0,C ;光电管1值送累加器0位
MOV C,P2.1 ;光电管2传来的信号
MOV ACC.1.C ;光电管2值送累加器1位
MOV C,P2.2 ;光电管3传来的信号
MOV ACC.2,C ;光电管3值送累加器2位
CJNE A,#00H,LOOP1 ;是000,左前中都有障碍物,转LOOP1
CJNE A,#01H,LOOP2 ;是001,左前有障碍物,右方无障碍物,转LOOP2
CJNE A,#02H,LOOP3 ;是010,左右有障碍物,前方无障碍物,转LOOP3
CJNE A,#03H,LOOP4 ;是011,左方有障碍物,前右无障碍物,转LOOP4
CJNE A,#04H,LOOP5 ;是100,左方无障碍物,前右有障碍物,转LOOP5
CJNE A,#05H,LOOP6 ;是101,左右无障碍物,前方有障碍物,转LOOP6
CJNE A,#06H,LOOP7 ;是110,左中无障碍物,右方有障碍物,转LOOP7
LO0P1:…………………
LOOP2:…………………
LOOP3:…………………
LOOP4:…………………
LOOP5:…………………
LOOP6:…………………
LOOP7:………………
RETI
3.2 PWM信号控制小车走向流程图
图3-2 PWM信号控制电机流程图
3.3 PWM信号控制电机流程序
PWMH1 DATA 30H ;直流电机1高电平脉冲的个数
PWMH2 DATA 31H ;直流电机2高电平脉冲的个数
ZHENG1 BIT 20H.0 ;直流电机1正转标志 0正转,1反转
ZHENG2 BIT 20H.1 ;直流电机2正转标志 0正转,1反转
PWM DATA 34H ;PWM周期
COUNTER1 DATA 35H ;直流电机1计数COUNTER1
COUNTER2 DATA 36H ;直流电机2计数COUNTER2
0RG 2000H
PWM: MOV SP,#60H ;设置堆栈,首地址为#60H
MOV PWMH1,#08H ;电机1高电平脉冲赋初值
MOV PWMH2,#08H ;电机2高电平脉冲赋初值 ,与电机1相同
MOV COUNTER1,#01H ;COUNTER1赋初值1
MOV COUNTER2,#01H ;COUNTER2赋初值1
MOV ZHENG1,#00H ;电机1正转标志位置0
MOV ZHENG2,#00H ;电机2正转标志位置0
MOV PWM,#15H ;PWM周期赋初值15H
MOV P1,#00H ;P0口都为低电平,方便电机控制
MOV TMOD,#02H ;定时器0在模式2下工作
MOV TL0,#38H ;定时器200us产生一次溢出
MOV TH0,#38H ;自动重装的值
SETB ET0 ;使能定时0中断
SETB EA ;使能总中断
SETB TR0 ;开始计时
TIME0:
PUSH PSW ;现场保护
PUSH ACC
INC COUNTER1 ;COUNTER1加1
INC COUNTER2 ;COUNTER2加1
MOV A,COUNTER1
CJNE A,PWMH,TIME011 ;如果等于高电平脉冲数
MOV CY,ZHENG1 ;判断是否要反转
JZ CY,Z1 ;是否反转
CLR P1.1 ;电机1一端变为低电平,反转引脚
Z1: CLR P1.0 ;电机1一端变为低电平,正传引脚
TIME011:
CJNE A,PWM,TIME02 ;如果等于周期数
MOV COUNTER1,#01H ;计数器1复位
MOV CY,ZHENG1 ;判断是否要反转
JZ CY,Z11 ;是否反转
SETB P1.1 ;置P1.0为高电平,反转引脚
Z11: SETB P1.0 ;置P1.0为高电平, 正传引脚
MOV A,COUNTER2
CJNE A,PWMH,TIME021 ;如果等于高电平脉冲数
MOV CY,ZHENG2 ;判断是否要反转
JZ CY,Z2 ;是否反转
CLR P1.3 ;电机2一端变为低电平,反转引脚
Z2: CLR P1.2 ;电机2一端变为低电平,正传引脚
TIME012:
CJNE A,PWM,TIME02 ;如果等于周期数
MOV COUNTER2,#01H ;计数器1复位
MOV CY,ZHENG2 ;判断是否要反转
JZ CY,Z21 ;是否反转
SETB P1.3 ;置P1.3为高电平,反转引脚
Z21: SETB P1.2 ;置P1.2为高电平,正转引脚
TIME02: ;出堆栈
POP ACC
POP PSW
RETI
3.3 液晶128×64初始化及各显示子程序:
RET BIT P2.7 ;液晶与单片机连接脚
PSB BIT P2.6
EN BIT P2.5
RW BIT P2.3
RS BIT P2.4
COM BIT 30H ;命令/数据
128*64: CLR RET ;液晶初始化
LCALL DELAY10MS
SETB RET
SETB PSB
CLR EN
MOV COM,#30H ;液晶功能设定
LCALL W_COM
MOV COM,#0CH ;液晶显示状态
LCALL W_COM
MOV COM,#01H ;液晶清楚显示
LCALL W_COM
MOV COM,#06H ;液晶地址归位
LCALL W_COM
CHECKBUSY: ;液晶查忙
MOV P0,#FF H
CLR RS
SETB RW
SETB EN
MOV A,#FFH
ANL A,P0
CPL A
JZ CHECKBUSY
CLR EN
RET
W_COM: LCALL CHECKBUSY ;液晶写指令
CLR RS
CLR RW
SETB EN
MOV P0,COM
LCALL DELAY10MS
CLR EN
RET
W_DATA: LCALL CHECKBUSY ;液晶写数据
SETB RS
CLR RW
SETB EN
MOV P0,COM
LCALL DELAY10MS
CLR EN
RET
DELAY10MS: ;延时10MS
MOV R6,#20
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
第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
19
展开阅读全文