基于单片机控制的超声波测距报警系统设计毕业论文Word文件下载.docx
- 文档编号:1048462
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:21
- 大小:3.09MB
基于单片机控制的超声波测距报警系统设计毕业论文Word文件下载.docx
《基于单片机控制的超声波测距报警系统设计毕业论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机控制的超声波测距报警系统设计毕业论文Word文件下载.docx(21页珍藏版)》请在冰点文库上搜索。
由于超声波在空气中传播时会有相当的衰减,衰减的程度与频率的高低成正比【3】。
根据设计要求并综合各方面因素,本文采用STC89C52单片机作为控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器。
由单片机STC89C52编程产生40kHz的方波,经P3.3口连接到开发平台的超声波模块发送超声波,再经过放大电路,驱动超声波发射探头发射超声波。
发射出的超声波经障碍物反射回来后,经过P3.2口由超声波接收头接收到信号。
通过接收电路的检波放大、积分整形及一系列处理,送至单片机。
单片机利用声波的传播速度和发射脉冲到接收反射脉冲的时间间隔计算出障碍物的距离,并由单片机控制在开发平台的显示模块中显示出来。
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到农业生产等自动化的使用要求【4】。
2.2超声波测距框图
单片机发出40kHZ的方波信号,经放大后通过超声波发射器输出;
超声波接收器将接收到的超声波信号经放大器放大,用锁相环电路进行检波处理后,启动单片机中断程序,测得时间为t;
再通过软件编程进行判别、计算,得出所测距离数并经由LED数码管显示,其原理框图如图2.1。
图2.1超声波测距仪原理框图
发射器发出的超声波以速度υ在空气中传播,在到达被测物体时被反射返回,由接收器接收,其往返时间为t。
由公式:
测出的距离
=常温下的声速340
感应时间
,算出被测物体的距离。
由于超声波也是一种声波,其声速v与温度有关,下表列出了几种不同温度下的声速。
在使用时,如果温度变化不大,则可认为声速是基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正【5】。
3系统硬件设计
3.1硬件设计方案
3.1.1超声波测距原理
单片机在
时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一个负跳变到单片机中端口,单片机响应中断程序,定时器停止计数。
计算时间差,即可得到超声波在媒介中传播的时间
,由此便可计算出距离。
其时序图如图3.1所示。
图3.1超声波时序图
3.1.2硬件电路设计
硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。
单片机采用STC89C51或其兼容系列。
采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P2.4端口输出超声波换能器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。
显示电路采用简单实用的4位共阳LED数码管,段码用程序驱动,位码用PNP三极管驱动。
3.2各主要模块的硬件设计
1.STC89C51芯片简介
5l系列单片机中典型芯片(STC89C51)采用40引脚双列直插封装(DIP)形式,内部由CPU,8kB的ROM,256B的RAM,2个16b的定时/计数器TO和T1,4个8b的工/O端I:
IP0,P1,P2,P3,一个全双功串行通信口等组成。
特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用【6】。
该系列单片机引脚与封装如图3.2所示。
图3.2STC89C51引脚图
2.引脚功能说明
(1)VCC:
电源电压
(2)GND:
接地
(3)RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(4)/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
(5)XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
(6)XTAL2:
来自反向振荡器的输出。
(7)P0口:
P0口为一个8位漏级开路双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每脚可吸收8TTL门电流。
(8)P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能吸收或输出4TTL门电流。
(9)P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可吸收或输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
(10)P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可吸收或输出4个TTL门电流。
P3口也可作为AT89C52的一些特殊功能口,如下表1所示。
表3.1P3特殊功能口
口管脚
备选功能
P3.0RXD
串行输入口
P3.1TXD
串行输出口
P3.2/INT0
外部中断0
P3.3/INT1
外部中断1
P3.4T0
记时器0外部输入
P3.5T1
记时器1外部输入
P3.6/WR
外部数据存储器写选通
P3.7/RD
外部数据存储器读选通
P3口同时为闪烁编程和编程校验接收一些控制信号。
(11)ALE//PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
(12)/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现【7】。
3.2.1超声波发射电路
超声波发射电路原理图如图3.3所示。
发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P3.3端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。
输出端采两个反向器并联,用以提高驱动能力。
上位电阻R1O、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间【8】。
图3.3超声波发射电路原理图
3.2.2超声波检测接收电路
集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路(如图3.4)。
实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力【9】。
图3.4超声波检测接收电路
3.2.3显示电路设计
显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三级管驱动。
接P2.1引脚的为个位显示数码管,其小数点在P2.1有效时显示,此功能由软件来完成。
3.2.4复位功能
系统应具备测距启动功能,可以复位系统,使其开始重新测距。
采用开发平台中的按键模块实现。
综上所述本系统的特点是利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时,单片机选用STC89C52,经济易用,且片内有8K的ROM,便于编程。
电路原理图如图3.5所示。
图3.5电路原理图
4软件方案
4.1程序设计
系统软件设计采用模块化设计,主要包括主程序设计、T0中断服务子程序、外部中断服务子程序、距离计算子程序、LED显示子程序设计等。
主程序首先是对系统环境初始化,设置定时器T0工作模式为16位定时计数器模式。
置位总中断允许位EA并给显示端口P0和P2清0。
然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms,然后才打开外中断0接收返回的超声波信号【10】。
测出距离后结果将以十进制BCD码方式送往LED显示约0.5s,然后再发超声波脉冲重复测量过程。
为了有利于程序结构化和容易计算出距离,主程序采用C语言编写。
4.2程序流程说明
4.2.1主程序
●系统控制初始化LED、初始化计数控制部分,清除计数值。
●单片机超声波脉冲信号。
●立刻置INT0为1,打开计时器,等待回波信号。
●回波信号到达,关闭计时器,P3.3为0,清INT0为0。
●单片机读出计数值。
●单片机将计数值进行计算后得出的距离值,显示在LED上。
●当超出测量距离小于0.1m或大于0.5m时,报警系统灯亮。
●当按下复位键时,启动复位功能。
主程序流程图如图4.1所示。
图4.1主程序流程图
4.2.2定时中断服务子程序
超声波发生子程序的作用是通过P3.3端口发送2个左右频率约40kHz的方波的超声波脉冲信号,同时把计数器T0打开进行计时。
定时中断子程序如图4.2所示。
图4.2定时中断服务子程序
4.3程序清单
源程序详见附录。
5调试过程
5.1使用仪器设备
整个测距系统由单片机最小系统、实验开发平台(其中用到超声波收发模块、数码管显示模块、按键模块)、PC机、跳线若干根组成。
5.2调试中的问题及解决方案
5.2.1软件调试中的问题及解决方案
根据实际情况可以修改超声波子程序每次发送的脉冲宽度和两次测量的时间间隔,以适应不同距离的测量需要。
根据所设计的电路参数和程序,测距仪能测得范围为0.1~0.5m,当超过范围时发生LED亮灯报警,同时设置启动自动复位,使其重新测距。
A.测距程序
程序中最难的部分是测距程序。
由于该超声波测距模块对时序的要求很高,要求在输入端产生40kHz的方波。
因为在程序的大循环中,尤其它程序造成延时的误差,导致产生的方波并不算是需要的40kHz。
这样该模块就无法正常运行,导致测距失败。
后来,我们修改了延时,矫正了时序,并用示波器进行测量,在P3.3引脚上得到了40kHz的方波。
B.报警功能
由于报警时要使LED灯闪烁,即需高电平与低电平交叉。
其中在高低电平转换时需要延时,我们错误的将报警子程序放入主程序,导致数码管不能正常的进行动态扫描。
将报警子程序以定时器1的方式放入中断函数或将动态扫描程序放入定时器1,都可解决问题。
经过多次尝试,以及大家地讨论终于成功写出了报警系统的亮灯功能。
5.3功能显示
如图5.2所示,通过数码管显示测出的距离为,属于10cm~50cm正常范围。
图5.1超声波测距正常范围
如图5.3所示,超声波测出的距离为,小于10cm,报警系统启动,LED灯亮。
图5.2超声波测距小于10cm
如图5.4所示,超声波测出的距离为,大于50cm,报警系统启动,LED灯亮。
图5.3超声波测距大于50cm
如图5.5所示,按下键盘模块中的按键,复位系统,数码管显示距离数归零。
图5.4启动复位功能
6课程设计收获
6.1课程设计的心得体会
作为一名电子信息工程的学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的,在已度过的大学时间里,我们大多数接触的是专业课。
在课本上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业理论运用到实践中?
我想这次课程设计提供了良好的平台。
在做本次课程设计的过程中,我感触最深的当属于实物制作和调试的过程,为了让设计更完善,我们查阅了大量的资料,经过多次小组讨论,修改程序,不断调试,终于初见成果。
在这期间,我一度感到沮丧,因为在我的设想中能实现的功能放到实物中往往会遇到各种问题,为了解决这些问题,花费大量的经历和时间,从中我也学到了我们一切都要有据可依,不切实际的构想无法升级为设计。
通过这次的课程设计的制作让我对单片机的理论有了更加深入的了解,同时在具体制作实物的过程中,我发现书本上的知识与实际应用存在着差距,书本上的知识很多都是理想化的结论,忽略了很多实际因素或者问题,这让我们无法根据书本上的理论就轻易得到预想中的结果。
通过这次实践使我更深刻的体会到了理论联系实际的重要性,以及我们实物制作的动手能力。
我们在今后的学习工作中会更加的注重实际,避免成为只会纸上谈兵的赵括。
从中我也学会了凡事要耐心和坚持。
最后,我在此要感谢各位给予我帮助的同学和我们小组的其他两位成员,没有他们的帮助无法独自完成这次课程设计。
特别要感谢我们的指导老师,两位指导老师不辞辛劳的回答我们的问题,和我们一同讨论并解决问题。
参考文献
[1]沙占友.集成化智能传感器原理与应用[M].北京:
电子工业出版社,2004.
[2]吴研.超声波倒车雷达系统设计[J].北京:
北京理工大学,2005.
[3]肖景和,赵健.红外线热释电与超声波遥控电路[M].北京:
人民邮电出版社,2003.
[4]史谚宾.基于AT89C2051的超声波测距仪设计[J].北京:
航空航天出版社,2006
[5]路锦正,王建勤.超声波测距仪的设计[M].成都:
成都理工大学,1999.
[6]基于单片机智能系统的设计与实现[M].北京:
人民邮电出版社,2005.
[7]赖寿宏.微型计算机控制技术[M].北京:
机械工业出版社,2002.
[8]王兆安,黄俊.电力电子技术[M].北京:
机械工业出版社,2003.
[9]邱关源.电路[M].北京:
高等教育出版社,1999.
[10]尤一鸣.单片机总线扩展技术第一版[M].北京:
北京航空航天大学出版社,1993
附录
程序清单
//超声波模块显示程序
#include<
reg52.h>
//包括一个52标准内核的头文件
#defineucharunsignedchar//定义一下方便使用
#defineuintunsignedint
#defineulongunsignedlong
sbitTx=P3^3;
//产生脉冲引脚
sbitRx=P3^2;
//回波引脚
sbitWarning_LED=P1^7;
sbitkey=P1^6;
ucharcodeSEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//数码管0-9
uintdistance[4];
//测距接收缓冲区
ucharge,shi,bai,temp,flag,outcomeH,outcomeL,i;
//自定义寄存器
bitsucceed_flag;
//测量成功标志
//函数声明
voidconversion(uinttemp_data);
voiddelay_20us();
voidpai_xu();
voidmain(void)//主程序
{
uintdistance_data,a,b;
ucharCONT_1;
i=0;
flag=0;
Tx=0;
//首先拉低脉冲输入引脚
TMOD=0x11;
//定时器0,定时器1,16位工作方式,timer0用显示
TR0=1;
//启动定时器0
IT0=0;
//由负沿触发外部中断
ET0=1;
//打开定时器0中断
EX0=0;
//关闭外部中断
EA=1;
//打开总中断0
while
(1)//程序循环
{
EA=0;
Tx=1;
delay_20us();
Tx=0;
//产生一个20us的脉冲,在Tx引脚
while(Rx==0);
//等待Rx回波引脚变高电平
succeed_flag=0;
//清测量成功标志
EX0=1;
//打开外部中断
TH1=0;
//定时器1清零
TL1=0;
F1=0;
TR1=1;
//启动定时器1
EA=1;
while(TH1<
30);
//等待测量的结果,周期65.535毫秒
TR1=0;
//关闭定时器1
if(succeed_flag==1)
{
distance_data=outcomeH;
//测量结果的高8位
distance_data<
<
=8;
//放入16位的高8位
distance_data=distance_data|outcomeL;
//与低8位合并成为16位结果数据
distance_data*=12;
//因为定时器默认为12分频
distance_data/=58;
//微秒的单位除以58等于厘米
}//为什么除以58等于厘米,Y米=(X秒*344)/2
//X秒=(2*Y米)/344==》X秒=0.0058*Y米==》厘米=微秒/58
if(succeed_flag==0)
{
distance_data=0;
//没有回波则清零
}
distance[i]=distance_data;
//将测量结果的数据放入缓冲区
i++;
if(i==3)
distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;
//求平均
pai_xu();
//按从小到大的顺序放
distance_data=distance[1];
a=distance_data;
if(b==a)CONT_1=0;
if(b!
=a)CONT_1++;
if(CONT_1>
=3)
{
CONT_1=0;
b=a;
conversion(b);
}
}
}
}
//外部中断0,用做判断回波电平
voidINT0_()interrupt0//外部中断是0号
outcomeH=TH1;
//取出定时器的值
outcomeL=TL1;
//取出定时器的值
succeed_flag=1;
//至成功测量的标志
//定时器0中断,用做显示
voidtimer0()interrupt1//定时器0中断是1号
{
TH0=0xfd;
//写入定时器0初始值
TL0=0x77;
switch(flag)
{
case0x00:
P0=ge;
P2=0x7f;
flag++;
break;
case0x01:
P0=shi;
P2=0xbf;
case0x02:
P0=bai;
P2=0xdf;
flag=0;
//显示数据转换程序
voidconversion(uinttemp_data)
ucharge_data,shi_data,bai_data;
bai_data=temp_data/100;
temp_data=temp_data%100;
//取余运算
shi_data=temp_data/10;
temp_data=temp_data%10;
ge_data=temp_data;
//LED报警程序
if((bai_data==0)&
(shi_data<
10)&
(ge_data>
0))
Warning_LED=0;
elseif(bai_data>
4)
Warning_LED=0;
elseWarning_LED=1;
//按键复位程序
if(key==0)
bai_data=0;
shi_data=0;
ge_data=0;
bai_data=SEG7[bai_data];
shi_data=SEG7[shi_data]&
0x7f;
//小数点
ge_data=SEG7[ge_data];
EA=0;
bai=bai_data;
shi=shi_data;
ge=ge_data;
voiddelay_20us()
ucharbt;
for(bt=0;
bt<
60;
bt++);
voidpai_xu()
uintt;
if(distance[0]>
distance[1])
{t=distance[0];
distance[0]=distance[1];
distance[1]=t;
}
if(distance[0]>
distance[2])
{t=distance[2];
distance[2]=distance[0];
distance[0]=t;
if(distance[1]>
{t=distance[1];
distance[1]=distance[2];
distance[2]=t;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 控制 超声波 测距 报警 系统 设计 毕业论文