资源描述
目录
前言
1课题设计目及意义----------------------------------------------- 1
1.1设计目----------------------------------------------------- 1
1.2设计意义----------------------------------------------------- 1
1.3课题设计任务和规定------------------------------------------- 1
正文
1 课程方案设计------------------------------------------------- 2
1.1系统整体方案--------------------------------------------------- 2
1.2系统整体方案论证-------------------------------------------- 2
2 系统硬件构造设计------------------------------------- 2
2.1 51系列单片机功能特点及测距原理------------------------------ 3
2.1.1 51系列单片机功能特点------------------------------------- 3
2.1.2 单片机实现测距原理 ----------------------------------------- 3
2.2 超声波电路构造------------------------------------------------ 4
2.3 超声波测距系统硬件电路设计---------------------------------- 4
2.4 PCB版图设计---------------------------------------------------- 5
3 系统软件设计----------------------------------------- 6
3.1 超声波测距仪算法设计---------------------------------------- 7
3.2 主程序流程图--------------------------------------------------- 7
3.3单片机某些C语言程序-------------------------------------------- 8
3.4超声波测距某些C语言程序-------------------------------------- 11
4 实物制作------------------------------------------------ 17
4.1电路板焊接及连线图--------------------------------------------- 17
4.2实物调试效果图------------------------------------------------ 18
4.3焊接电路板时所遇问题------------------------------------------- 19
5总 结------------------------------------------------- 20
6 道谢-------------------------------------------------- 20
附录-------------------------------------------------------------20
前言
1课题设计目及意义
1.1设计目
随着科学技术迅速发展,超声波将在测距仪中应用越来越广。但就目
前技术水平来说,人们可以详细运用测距技术还十分有限,因而,这是一种正在蓬勃发展而又有无限前景技术及产业领域。展望将来,超声波测距仪作为一种新型非常重要有用工具在各方面都将有很大发展空间,它将朝着更加高定位高精度方向发展,以满足日益发展社会需求,如声纳发展趋势基本为:研制具备更高定位精度被动测距声纳,以满足水中武器实行全隐蔽袭击需要;继续发展采用低频线谱检测潜艇拖曳线列阵声纳,实现超远程被动探测和辨认;研制更适合于浅海工作潜艇声纳,特别是解决浅海水中目的记别问题;大力减少潜艇自噪声,改进潜艇声纳工作环境。无庸置疑,将来超声波测距仪将与自动化智能化接轨,与其她测距仪集成和融合,形成多测距仪。随着测距仪技术进步,测距仪将从具备单纯判断功能发展到具备学习功能,最后发展到具备创造力。在新世纪里,面貌一新测距仪将发挥更大作用。
1.2设计意义
查找与超声波测距关于资料,通过对资料理解开发设计一种简朴单片机超声波测距装置。设计完毕后,制作PCB版图,最后完毕实物连线。通过设计巩固对单片机知识运用,并加强自我动手能力。
1.3课题设计任务和规定
理解和掌握超声波传感器原理、构造、特性和用法,超声波探测系统有关产品及及其国内外研究进展状况,运用单片机、Proteus和Keil C51工具设计出一种相应探测辨认系统,制作实物并进行测试。
1、理解和掌握该系统有关传感器(3-5种)技术资料,涉及其技术指标、原理图、封装形式、价格等;
2、查找系统有关产品(3-5种)技术资料,涉及其技术指标、原理图、封装形式、价格等;
3、查找与本系统有关论文(近来几年)(3-5篇);
4、选取一种传感器,运用单片机、Proteus和Keil C51工具设计出一种相应探测辨认系统,制作实物并进行测试;
5、完毕论文。
1 课程方案设计
1.1系统整体方案
由于超声波指向性强,能量消耗缓慢,在介质中传播距离较远,因而超声波经惯用于距离测量。运用超声波检测距离,设计比较以便,计算解决也较简朴,并且在测量精度方面也能达到农业生产等自动化使用规定。
超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式涉及压电型、电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生超声波频率、功率、和声波特性各不相似,因而用途也各不相似。当前在近距离测量方面惯用是压电式超声波换能器。依照设计规定并综合各方面因素,本文采用AT89C51单片机作为控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机定期器。
1.2系统整体方案论证
超声波测距原理是运用超声波发射和接受,依照超声波传播时间来计算出传播距离。实用测距办法有两种,一种是在被测距离两端,一端发射,另一端接受直接波方式,合用于身高计;一种是发射波被物体反射回来后接受反射波方式,合用于测距仪。本次设计采用反射波方式。
测距仪辨别率取决于对超声波传感器选取。超声波传感器是一种采用压电效应传感器,惯用材料是压电陶瓷。由于超声波在空气中传播时会有相称衰减,衰减限度与频率高低成正比;而频率高辨别率也高,故短距离测量时应选取频率高传感器,而长距离测量时应用低频率传感器。
2 系统硬件构造设计
硬件电路设计重要涉及单片机系统及显示电路、超声波发射电路和超声波检测接受电路三某些。单片机采用AT89C51或其兼容系列。采用11MHz高精度晶振,以获得较稳定期钟频率,减小测量误差。单片机用P3.0端口输出超声波换能器所需40kHz方波信号,运用外中断0口监测超声波接受电路输出返回信号。显示电路采用简朴实用3位共阴LED数码管,段码用74LS244驱动,位码用PNP三极管8550驱动。
2.1 51系列单片机功能特点及测距原理
2.1.1 51系列单片机功能特点
5l系列单片机中典型芯片(AT89C51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kBROM,256 BRAM,2个16b定期/计数器TO和T1,4个8 b工/O端I:IP0,P1,P2,P3,一种全双功串行通信口等构成。特别是该系列单片机片内Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛用途,在便携式、省电及特殊信息保存仪器和系统中更为有用。
5l系列单片机提供如下功能:4 kB存储器;256 BRAM;32条工/O线;2个16b定期/计数器;5个2级中断源;1个全双向串行口以及时钟电路。
空闲方式:CPU停止工作,而让RAM、定期/计数器、串行口和中断系统继续工作。
掉电方式:保存RAM内容,振荡器停振,禁止芯片所有其她功能直到下一次硬件复位。
5l系列单片机为许多控制提供了高度灵活和低成本解决办法。充分运用她片内资源,即可在较少外围电路状况下构成功能完善超声波测距系统。
2.1.2 单片机实现测距原理
单片机发出超声波测距是通过不断检测超声波发射后遇到障碍物所反射回波,从而测出发射和接受回波时间差tr,然后求出距离S=Ct/2,式中C为超声波波速。
限制该系统最大可测距离存在4个因素:超声波幅度、反射质地、反射和入射声波之间夹角以及接受换能器敏捷度。接受换能器对声波脉冲直接接受能力将决定最小可测距离。为了增长所测量覆盖范畴、减小测量误差,可采用各种超声波换能器分别作为多路超声波发射/接受设计办法。由于超声波属于声波范畴,其波速C与温度关于。
2.2 超声波电路构造
超声波接受电路
2.3 超声波测距系统硬件电路设计
本系统特点是运用单片机控制超声波发射和对超声波自发射至接受来回时间计时,单片机选用AT89C51,经济易用,且片内有4KROM,便于编程。
单片机发出40kHZ信号,经放大后通过超声波发射器输出;超声波接受器将接受到超声波信号经放大器放大,用锁相环电路进行检波解决后,启动单片机中断程序,测得时间为t,再由软件进行鉴别、计算,得出距离数并送LED显示。
超声波发射器
放大电路
超声波接受器
放大电路
锁相环
检波电路
定期器
单片机控制
显示屏
单片机硬件原理图
2.4 PCB版图设计:
PCB版图(a)
PCB版图(b)
3 系统软件设计
超声波测距仪软件设计重要由主程序、超声波发生子程序、超声波接受中断程序及显示子程序构成。咱们懂得C语言程序有助于实现较复杂算法,汇编语言程序则具备较高效率且容易精细计算程序运营时间,而超声波测距仪程序既有较复杂计算(计算距离时),又规定精细计算程序运营时间(超声波测距时),因此控制程序可采用C语言编程。
3.1 超声波测距仪算法设计
超声波测距原理为超声波发生器T在某一时刻发出一种超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接受器R所接受到。这样只要计算出从发出超声波信号到接受到返回信号所用时间,就可算出超声波发生器与反射物体距离。距离计算公式为:
d=s/2=(c×t)/2 (1)
其中,d为被测物与测距仪距离,s为声波来回路程,c为声速,t为声波来回所用时间。 在启动发射电路同步启动单片机内部定期器T0,运用定期器计数功能记录超声波发射时间和收到反射波时间。当收到超声波反射波时,接受电路输出端产生一种负跳变,在INT0或INT1端产生一种中断祈求信号,单片机响应外部中断祈求,执行外部中断服务子程序,读取时间差,计算距离。
3.2 主程序流程图
3.3单片机某些C语言程序:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit trig=P3^7;
sbit echo=P3^2;
uint t=0,s=0;
bit flag=0;
uchar timeh=0,timel=0,i=0;
uchar buffer[4]={0,0,0,0};
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管0~9
void delay_us() //20us延迟
{
uchar x;
for(x=0;x<100;x++);
}
void delay(uint z)
{
uint j,y;
for(j=z;j>0;j--)
for(y=110;y>0;y--);
}
void main()
{
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,用做判断回波电平********************//
void exter() interrupt 0
{
timeh=TH1;
timel=TL1;
flag=1;
EX0=0;
}
//************用定期器0做显示*******************//
void timer0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(i)
{
case 0:P1=table[buffer[0]];P2=0xfe;i=1;break;
case 1:P1=table[buffer[1]];P2=0xfd;i=2;break;
case 2:P1=table[buffer[2]];P2=0xfb;i=0;break;
default:break;
}
}
//************定期器1中断,用做超声波测距计时*******************//
void timer1() interrupt 3
{
TH1=0;
TL1=0;
}
3.4超声波测距某些C语言程序:
//晶振=8M
//MCU=STC10F04XE
//P0.0-P0.6共阳数码管引脚
//Trig = P1^0
//Echo = P3^2
#include <reg52.h> //涉及一种52原则内核头文献
#define uchar unsigned char //定义一下以便使用
#define uint unsigned int
#define ulong unsigned long
//***********************************************
sfr CLK_DIV = 0x97;//为STC单片机定义,系统时钟分频
//为STC单片机IO口设立地址定义
sfr P0M1 = 0X93;
sfr P0M0 = 0X94;
sfr P1M1 = 0X91;
sfr P1M0 = 0X92;
sfr P2M1 = 0X95;
sfr P2M0 = 0X96;
//***********************************************
sbit Trig = P1^0;//产生脉冲引脚
sbit Echo = P3^2;//回波引脚
sbit test = P1^1;//测试用引脚
uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管0-9
uint distance[4]; //测距接受缓冲区
uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器
bit succeed_flag; //测量成功标志
//********函数声明
void conversion(uint temp_data);
void delay_20us();
//void pai_xu();
void main(void) // 主程序
{ uint distance_data,a,b;
uchar CONT_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; //一方面拉低脉冲输入引脚
TMOD=0x11; //定期器0,定期器1,16位工作方式
TR0=1; //启动定期器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_() interrupt 0 // 外部中断是0号
{
outcomeH =TH1; //取出定期器值
outcomeL =TL1; //取出定期器值
succeed_flag=1; //至成功测量标志
EX0=0; //关闭外部中断
}
//****************************************************************
//定期器0中断,用做显示
timer0() interrupt 1 // 定期器0中断是1号
{
TH0=0xfd;//写入定期器0初始值
TL0=0x77;
switch(flag)
{case 0x00:P0=ge;P2=0xfd;flag++;break;
case 0x01:P0=shi;P2=0xfe;flag++;break;
case 0x02:P0=bai;P2=0xfb;flag=0;break;
}
}
//*****************************************************************
/*
//定期器1中断,用做超声波测距计时
timer1() interrupt 3 // 定期器0中断是1号
{
TH1=0;
TL1=0;
}
*/
//******************************************************************
//显示数据转换程序
void conversion(uint temp_data)
{
uchar ge_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 ;
EA=1;
}
//******************************************************************
void delay_20us()
{ uchar bt ;
for(bt=0;bt<100;bt++);
}
/*
void pai_xu()
{ uint t;
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 实物制作
4.1电路板焊接及连线图:
电路板正面元件摆放图:
电路板背面连线图:
4.2实物调试效果图
4.3焊接电路板时所遇问题:
1、 对于焊枪应用不是特别娴熟。
2、 连线时特别不舒服,也许是超声波测距设计比较复杂连线问题导致。有线焊起来空间特别小。在连线长短方面没有选取好。
3、 元件摆设方面存在很大问题,直接导致焊接时特别吃力。
实物测试时问题:
1、 没有仔细检查连线对的与否。
2、 没有进一步理解所作设计各个构成某些功能,导致不能及时发现问题出在哪些方面。
3、 元件好坏直接会影响测试成果。
4、 对于三极管选取有问题,刚开始时选了不熟悉三极管,导致引脚链接错误,日后通过很复杂拆线才解决问题。
5、 要学会如何在不装单片机元件时测试数码管好坏。
5总 结
通过近半个月课程设计,在本学期学习基本上又有了诸多收获。在这里最要感谢淡然是张东阳教师,是她带着咱们走进了单片机世界,让咱们可以自己动手完毕自己设计,在这个过程中教师不但是咱们领路人,还是咱们朋友,协助咱们始终进步。
一方面不得不说是对于单片机这一门学科理解。在学单片机初期,我主线就不懂得有着一种东西,别说学了,就是很难想象感觉,当时心里也有某些迷茫,但通过教师耐心解说,我逐渐跨入了单片机世界。起初我只是会照着课本上程序完毕某些很简朴设计,但通过几次作业洗礼,我已经可以自己读懂一某些程序,可以自己对Keil以及protues软件进行操作,直到当前,我可以运用所学知识,完毕对一件小设计实物制作,我很开心。
在这里不得不对教师及协助过我同窗说一声谢谢。咱们在做实物时候是四个人一组,我虽然不是组长,但在我组中也比较重要。在制作实物时候,我负责是最复杂连线环节,说实话,我都要崩溃了,看着那么多线,头晕目眩,尚有焊锡那难闻味道,实在是受不了,最后通过近两个小时工作,我终于把连线都焊好了。不得不说这是对我能力锻炼,不但是对我手工技术历练,尚有就是对身心素质磨练。
6 道谢
在此特别提出对指引教师张东阳与张乐感谢,尚有对同窗谢法威、沈文睿感谢。在完毕设计过程中,她们帮到了我太多,通过她们明白了出上课之外诸多东西。我相信这一定对我将来有很积极影响。
附录
3D实物模仿图:
测距原理图:
超声波传感器实物图:
展开阅读全文