超声波测距课程设计Word文档下载推荐.docx
《超声波测距课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《超声波测距课程设计Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
研制更适合于浅海工作的潜艇声纳,特别是解决浅海水中目标识别问题;
大力降低潜艇自噪声,改善潜艇声纳的工作环境.无庸置疑,未来的超声波测距仪将与自动化智能化接轨,与其他的测距仪集成和融合,形成多测距仪。
随着测距仪的技术进步,测距仪将从具有单纯判断功能发展到具有学习功能,最终发展到具有创造力。
在新的世纪里,面貌一新的测距仪将发挥更大的作用.
1.2设计的意义
查找与超声波测距有关的资料,通过对资料的理解开发设计一种简单的单片机超声波测距装置.设计完成后,制作PCB版图,最后完成实物的连线。
通过设计巩固对单片机知识的运用,并加强自我动手的能力。
3课题设计的任务和要求
了解和掌握超声波传感器的原理、结构、特性和使用方法,超声波探测系统相关产品及及其国内外研究进展情况,利用单片机、Proteus和KeilC51工具设计出一种相应的探测识别系统,制作实物并进行测试。
1、了解和掌握该系统相关传感器(3—5种)的技术资料,包括其技术指标、原理图、封装形式、价格等;
2、查找系统相关产品(3—5种)的技术资料,包括其技术指标、原理图、封装形式、价格等;
3、查找与本系统相关论文(最近几年)(3-5篇);
4、选择一种传感器,利用单片机、Proteus和KeilC51工具设计出一种相应的探测识别系统,制作实物并进行测试;
5、完成论文。
1课程的方案设计
1系统整体方案
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到农业生产等自动化的使用要求。
超声波发生器可以分为两大类:
一类是用电气方式产生超声波,一类是用机械方式产生超声波.电气方式包括压电型、电动型等;
机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率、和声波特性各不相同,因而用途也各不相同。
目前在近距离测量方面常用的是压电式超声波换能器.根据设计要求并综合各方面因素,本文采用AT89C51单片机作为控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器。
2系统整体方案的论证
超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。
实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;
一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。
此次设计采用反射波方式。
测距仪的分辨率取决于对超声波传感器的选择。
超声波传感器是一种采用压电效应的传感器,常用的材料是压电陶瓷。
由于超声波在空气中传播时会有相当的衰减,衰减的程度与频率的高低成正比;
而频率高分辨率也高,故短距离测量时应选择频率高的传感器,而长距离的测量时应用低频率的传感器。
2系统的硬件结构设计
硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。
单片机采用AT89C51或其兼容系列。
采用11MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P3.0端口输出超声波换能器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。
显示电路采用简单实用的3位共阴LED数码管,段码用74LS244驱动,位码用PNP三极管8550驱动。
151系列单片机的功能特点及测距原理
151系列单片机的功能特点
5l系列单片机中典型芯片(AT89C51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256B的RAM,2个16b的定时/计数器TO和T1,4个8b的工/O端I:
IP0,P1,P2,P3,一个全双功串行通信口等组成。
特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。
5l系列单片机提供以下功能:
4kB存储器;
256BRAM;
32条工/O线;
2个16b定时/计数器;
5个2级中断源;
1个全双向的串行口以及时钟电路.
空闲方式:
CPU停止工作,而让RAM、定时/计数器、串行口和中断系统继续工作。
掉电方式:
保存RAM的内容,振荡器停振,禁止芯片所有的其他功能直到下一次硬件复位。
5l系列单片机为许多控制提供了高度灵活和低成本的解决办法。
充分利用他的片内资源,即可在较少外围电路的情况下构成功能完善的超声波测距系统。
2.1.2单片机实现测距原理
单片机发出超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差tr,然后求出距离S=Ct/2,式中的C为超声波波速。
限制该系统的最大可测距离存在4个因素:
超声波的幅度、反射的质地、反射和入射声波之间的夹角以及接收换能器的灵敏度。
接收换能器对声波脉冲的直接接收能力将决定最小的可测距离。
为了增加所测量的覆盖范围、减小测量误差,可采用多个超声波换能器分别作为多路超声波发射/接收的设计方法。
由于超声波属于声波范围,其波速C与温度有关。
2超声波电路结构
超声波接收电路
3超声波测距系统的硬件电路设计
本系统的特点是利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时,单片机选用AT89C51,经济易用,且片内有4K的ROM,便于编程.
单片机发出40kHZ的信号,经放大后通过超声波发射器输出;
超声波接收器将接收到的超声波信号经放大器放大,用锁相环电路进行检波处理后,启动单片机中断程序,测得时间为t,再由软件进行判别、计算,得出距离数并送LED显示。
单片机硬件原理图
4PCB版图设计:
PCB版图(a)
PCB版图(b)
3系统软件的设计
超声波测距仪的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成.我们知道C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而超声波测距仪的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序可采用C语言编程。
1超声波测距仪的算法设计
超声波测距的原理为超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器R所接收到.这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离.距离的计算公式为:
d=s/2=(c×
t)/2
(1)
其中,d为被测物与测距仪的距离,s为声波的来回的路程,c为声速,t为声波来回所用的时间。
在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。
当收到超声波反射波时,接收电路输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。
3.2主程序流程图
3单片机部分C语言程序:
#include<
reg52.h>
#include<
intrins。
h〉
#defineucharunsignedchar
#defineuintunsignedint
sbittrig=P3^7;
sbitecho=P3^2;
uintt=0,s=0;
bitflag=0;
uchartimeh=0,timel=0,i=0;
ucharbuffer[4]={0,0,0,0};
ucharcodetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//数码管0~9
voiddelay_us()//20us延迟
{
ucharx;
for(x=0;
x〈100;
x++);
}
voiddelay(uintz)
uintj,y;
for(j=z;
j〉0;
j--)
for(y=110;
y>
0;
y--);
voidmain()
trig=0;
//echo=0;
TMOD=0x11;
//定时器0、1为16位计数模式
TH0=(65536—5000)/256;
TL0=(65536—5000)%256;
TR0=1;
//启动定时器0
IT0=1;
//下降沿触发
ET0=1;
//打开定时器0中断
ET1=1;
//打开定时器1中断
EX0=0;
//关闭外部中断0
EA=1;
//开总中断
while
(1)
{
EA=0;
//关总中断
trig=1;
//超声波输入端
delay_us();
//延迟20us
trig=0;
//产生一个20us的脉冲
while(echo==0);
//等待echo回波变成高电平
flag=0;
//清测量成功标志;
EA=1;
EX0=1;
//打开外部中断
TH1=0;
TL1=0;
//定时器1清零
TF1=0;
TR1=1;
//启动定时器1
delay(20);
//等待测量结果
TR1=0;
//关闭定时器1
EX0=0;
//关闭外部中断0
if(flag)
{
t=timeh*256+timel;
//计算时间
s=t/58;
//计算距离(厘米)
buffer[0]=s/100;
//百位
buffer[1]=s%100/10;
//十位
buffer[2]=s%10;
//个位
}
else
s=0;
//没有,则清零;
}
}
//***********外部中断0,用做判断回波电平********************//
voidexter()interrupt0
{
timeh=TH1;
timel=TL1;
flag=1;
//************用定时器0做显示*******************//
voidtimer0()interrupt1
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(i)
{
case0:
P1=table[buffer[0]];
P2=0xfe;
i=1;
break;
case1:
P1=table[buffer[1]];
P2=0xfd;
i=2;
break;
case2:
P1=table[buffer[2]];
P2=0xfb;
i=0;
default:
//************定时器1中断,用做超声波测距计时*******************//
voidtimer1()interrupt3
TH1=0;
TL1=0;
4超声波测距部分C语言程序:
//晶振=8M
//MCU=STC10F04XE
//P0.0-P0.6共阳数码管引脚
//Trig=P1^0
//Echo=P3^2
#include〈reg52.h〉//包括一个52标准内核的头文件
#defineucharunsignedchar//定义一下方便使用
#defineulongunsignedlong
//***********************************************
sfrCLK_DIV=0x97;
//为STC单片机定义,系统时钟分频
//为STC单片机的IO口设置地址定义
sfrP0M1=0X93;
sfrP0M0=0X94;
sfrP1M1=0X91;
sfrP1M0=0X92;
sfrP2M1=0X95;
sfrP2M0=0X96;
//***********************************************
sbitTrig=P1^0;
//产生脉冲引脚
sbitEcho=P3^2;
//回波引脚
sbittest=P1^1;
//测试用引脚
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;
CLK_DIV=0X03;
//系统时钟为1/8晶振(pdf—45页)
P0M1=0;
//将io口设置为推挽输出
P1M1=0;
P2M1=0;
P0M0=0XFF;
P1M0=0XFF;
P2M0=0XFF;
i=0;
flag=0;
test=0;
Trig=0;
//首先拉低脉冲输入引脚
//定时器0,定时器1,16位工作方式
//启动定时器0
IT0=0;
//由高电平变低电平,触发外部中断
ET0=1;
//打开定时器0中断
//ET1=1;
//打开定时器1中断
EX0=0;
//关闭外部中断
EA=1;
//打开总中断0
while
(1)//程序循环
EA=0;
Trig=1;
delay_20us();
Trig=0;
//产生一个20us的脉冲,在Trig引脚
while(Echo==0);
//等待Echo回波引脚变高电平
succeed_flag=0;
//清测量成功标志
//***************************************************************
//外部中断0,用做判断回波电平
INTO_()interrupt0//外部中断是0号
{
outcomeH=TH1;
//取出定时器的值
outcomeL=TL1;
succeed_flag=1;
//至成功测量的标志
}
//****************************************************************
//定时器0中断,用做显示
timer0()interrupt1//定时器0中断是1号
TH0=0xfd;
//写入定时器0初始值
TL0=0x77;
switch(flag)
{case0x00:
P0=ge;
P2=0xfd;
flag++;
case0x01:
P0=shi;
case0x02:
P0=bai;
flag=0;
//*****************************************************************
/*
//定时器1中断,用做超声波测距计时
timer1()interrupt3//定时器0中断是1号
TH1=0;
TL1=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;
bai_data=SEG7[bai_data];
shi_data=SEG7[shi_data];
ge_data=SEG7[ge_data];
EA=0;
bai=bai_data;
shi=shi_data;
ge=ge_data;
//******************************************************************
voiddelay_20us()
{ucharbt;
for(bt=0;
bt〈100;
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]〉distance[2])
{t=distance[1];
distance[1]=distance[2];
distance[2]=t;
}/*交换值
4实物制作
1电路板焊接及连线图:
电路板正面元件摆放图:
电路板背面连线图:
4.2实物调试效果图
4.3焊接电路板时所遇问题:
1、对于焊枪的应用不是特别娴熟.
2、连线时特别不舒服,可能是超声波测距设计比较复杂的连线问题导致的。
有的线焊起来空间特别小。
在连线的长短方面没有选择好.
3、元件摆设方面存在很大问题,直接导致焊接时特别吃力。
实物测试时问题:
1、没有仔细检查连线正确与否。
2、没有进一步了解所作设计的各个组成部分的功能,导致不能及时发现问题出在哪些方面。
3、元件的好坏直接会影响测试结果.
4、对于三极管的选择有问题,刚开始时选了不熟悉的三极管,导致引脚链接错误,后来经过很复杂的拆线才解决问题。
5、要学会如何在不装单片机元件时测试数码管的好坏。
5总结
经过近半个月的课程设计,