超声波测距器的设计本科论文.docx
《超声波测距器的设计本科论文.docx》由会员分享,可在线阅读,更多相关《超声波测距器的设计本科论文.docx(25页珍藏版)》请在冰点文库上搜索。
超声波测距器的设计本科论文
毕业设计论文
超声波测距器的设计
学院:
信息技术学院
姓名:
王富娟
学号:
0943090227
班级:
Z0902
目录
第一章前言………………………………………………………………………2
1.1超声波测距器的当前发展情况……………………………………………2
第二章方案论证…………………………………………………………………3
2.1提出方案…………………………………………………………………3
第三章超声波测距的原理………………………………………………………4
3.1超声波的介绍……………………………………………………………4
3.1.1什么是超声波…………………………………………………………4
3.1.2超声波的特点…………………………………………………………4
3.1.3超声波的应用…………………………………………………………4
3.2超声波测距器的原理………………………………………………………4
3.2.1超声波发生器…………………………………………………………4
3.2.2压电式超声波发生器原理……………………………………………4
3.2.3超声波测距原理………………………………………………………5
第四章系统的组成…………………………………………………………………6
4.1硬件部分…………………………………………………………………6
4.2软件部分…………………………………………………………………6
4.2.1主程序…………………………………………………………………6
4.2.2超声波发生子程序和超声波接收中断程序…………………………7
第五章系统硬件电路设计…………………………………………………………8
5.1单片机系统及显示电路……………………………………………………8
5.2超声波发射电路原理图……………………………………………………9
5.3超声波检测接收电路………………………………………………………9
第六章系统程序设计................................................11
6.1超声波测距器的算法设计………………………………………………11
第七章结论………………………………………………………………………12
第八章致谢………………………………………………………………………13
附:
总电路图………………………………………………………………………14
附:
程序清单………………………………………………………………………15
1.前言
1.1超声波测距器的当前发展情况
超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
应用范围十分的广泛。
超声波是指频率高于20KHz的机械波。
为了以超声波作为检测手段,必须产生超生波和接收超声波。
完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。
超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。
超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
2.方案论证
2.1提出方案
由于超声波的指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
利用超声波检测的距离,设计比较方便,计算处理也比较简单,并且在测量精度方面也能达到日常使用的要求。
根据设计要求提出如下方案。
方案:
选用STC89C52单片机作为主控制器,,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成。
超声波测距器系统设计框图
3.超声波测距的原理
3.1超声波的介绍
3.1.1什么是超声波
超声波是指频率高于20KHz的机械波。
3.1.2超声波的特点
1、超声波在传播时,方向性强,能量易于集中。
2、超声波能在各种不同媒质中传播,且可传播足够远的距离。
3、超声与传声媒质的相互作用适中,易于携带有关传声媒质状态的信息
3.1.3超声波的应用
在全球,超声波广泛运用于诊断学、治疗学、工程学、生物学等领域。
1、工程学方面的应用:
水下定位与通讯、地下资源勘查等
2、生物学方面的应用:
剪切大分子、生物工程及处理种子等
3、诊断学方面的应用:
A型、B型、M型、D型、双功及彩超等
4、治疗学方面的应用:
理疗、治癌、外科、体外碎石、牙科等
3.2超声波测距器的原理
3.2.1超声波发生器
为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。
总体上讲,超声波发生器可以分为两大类:
一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。
目前较为常用的是压电式超声波发生器。
本设计属于近距离测量,可以采用常用的压电式超声波换能器来实现。
3.2.2压电式超声波发生器原理
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超声波发生器内部结构如图所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
3.2.3超声波测距原理
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:
s=340t/2
超声波测距的原理一般采用渡越时间法TOF(time offlight)。
首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离
测量距离的方法有很多种,短距离的可以用尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。
因为超声波在标准空气中的传播速度为331.45米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。
4.系统的组成
4.1硬件部分
主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。
采用ST89C51来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。
单片机通过P1.6引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
4.1.1AT89C51简介
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图所示
主要特性:
·与MCS-51兼容
·4K字节可编程FLASH存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
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口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4.1.2CX20106A红外接收芯片简介
应用原理图如下
引脚号
说明
1
超声信号输入端,该脚的输入阻抗约为40kΩ。
2
该脚与地之间连接RC串联网络,它们是负反馈串联网络的一个组成部分,改变它们的数值能改变前置放大器的增益和频率特性。
增大电阻R1或减小C1,将使负反馈量增大,放大倍数下降,反之则放大倍数增大。
但C1的改变会影响到频率特性,一般在实际使用中不必改动,推荐选用参数为R1=4.7Ω,C1=1μF。
3
该脚与地之间连接检波电容,电容量大为平均值检波,瞬间相应灵敏度低;若容量小,则为峰值检波,瞬间相应灵敏度高,但检波输出的脉冲宽度变动大,易造成误动作,推荐参数为3.3μf。
4
接地端。
5
该脚与电源间接入一个电阻,用以设置带通滤波器的中心频率f0,阻值越大,中心频率越低。
例如,取R=200kΩ时,f0≈42kHz,若取R=220kΩ,则中心频率f0≈38kHz。
6
该脚与地之间接一个积分电容,标准值为330pF,如果该电容取得太大,会使探测距离变短。
7
遥控命令输出端,它是集电极开路输出方式,因此该引脚必须接上一个上拉电阻到电源端,推荐阻值为22kΩ,没有接受信号是该端输出为高电平,有信号时则产生下降。
8
电源正极,4.5~5.5V。
4.2软件部分
主要由主程序、超声波发生子程序、超声波接收中断程序等部分。
4.2.1主程序
主程序首先对系统环境初始化,设置定时器T0工作模式为16位的定时计数器模式,置位总中断允许位EA并给显示端P0和P2清0。
然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直接波触发,需延迟0.1ms(这也就是测距器会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。
由于采用12MHz的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算即可测得被测物体与测距仪之间的距离,设计时取20℃时的声速为344m/s则有:
d=(C*T0)/2=172T0/10000cm(其中T0为计数器T0的计数值) 测出距离后结果将以十进制BCD码方式LED,然后再发超声波脉冲重复测量过程。
主程序框图如下:
4.2.2超声波发生子程序和超声波接收中断程序
超声波发生子程序的作用是通过P1.6端口发送2个左右的超声波信号频率约40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。
进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。
如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。
5.系统硬件电路设计
5.1单片机系统及显示电路
单片机采用89S51或其兼容系列。
采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。
单片机用P1.6端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接受电路输出的返回信号。
显示电路采用简单实用的1602液晶显示。
5.2超声波发射电路原理图:
超声波发射电路原理图
压电超声波转换器的功能:
利用压电晶体谐振工作。
内部结构上图所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是一超声波发生器;如没加电压,当共振板接受到超声波时,将压迫压电振荡器作振动,将机械能转换为电信号,这时它就成为超声波接受转换器。
超声波发射转换器与接受转换器其结构稍有不同。
5.3超声波检测接收电路
采用集成电路CX20106A,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38KHz与测距超声波频率40KHz较为接近,可以利用它作为超声波检测电路。
实验证明其具有很高的灵敏度和较强的抗干扰能力。
适当改变C4的大小,可改变接受电路的灵敏度和抗干扰能力。
超声波接收电路图
6.系统程序设计
超声波测距软件设计主要由主程序,超声波发射子程序,超声波接受中断程序及显示子程序组成。
C语言程序设计有利于实现较复杂的算法,汇编语言程序则具有较高的效率并且容易精确计算程序运行的时间下面对超声波测距器的算法,主程序,超声波发射子程序和超声波接受中断程序逐一介绍。
6.1超声波测距器的算法设计
下图示意了超声波测距的原理,即超声波发生器T在某一时刻发出的一个超声波信号,当超声波遇到被测物体后反射回来,就被超声波接收器R所接受。
这样只要计算出发生信号到接受返回信号所用的时间,就可算出超声波发生器与反射物体的距离。
距离计算公式:
d=s/2=(c*t)/2
*d为被测物与测距器的距离,s为声波的来回路程,c为声速,t为声波来回所用的时间
声速c与温度有关,如温度变化不大,则可认为声速是基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返时间,即可求得距离。
在系统加入温度传感器来监测环境温度,可进行温度被偿。
这里可以用DS18B20测量环境温度,根据不同的环境温度确定一声速提高测距的稳定性。
为了增强系统的可靠性,应在软硬件上采用抗干扰措施。
不同温度下的超声波声速表
7.结论
本设计采用ST89C51单片机作为计时及主控制器、用TCT40—l0Fl作超声波发射器、用TCT40—l0Sl和CX20106A构成超声波检测接收电路。
将相关控制编程,写入单片机,实现了以单片机控制的超声波测距器。
本超声波测距器采用硬件电路和软件控制相结合,电路结构简单,低成本,操作方便,工作稳定,测量精度较。
可用于日常生活及工农业生产中距离的测量及位置监控。
例如管道长度、油井深度、液面高度,建筑施工各点定位等。
本超声波测距器只具有测量显示功能,没有反馈与控制功能。
其设计思想可以应用于智能安全系统。
例如,在车辆智能自动安全系统中,检测车辆左、右动、静态障碍物,并显示距离,至危险区域后与智能模糊控制器通信以采取最佳避让措施等。
8、致谢
首先,我要感谢张老师在毕业设计中对我给予的悉心指导和严格要求,同时也感谢本校的一些老师在毕业设计期间所给予我得帮助。
在我毕业论文写作期间,各位老师给我提供了种种专业知识上的指导和日常生活上的关怀,没有您们这样的帮助和关怀,我不会这么顺利的完成毕业设计,借此机会,向您们表示由衷的感激。
同时还要感谢系实验室在毕业设计期间提供给我们优越的实验条件。
接着,我要感谢和我一起做毕业设计的同学。
在毕业设计的短短几个月里,你们给我提出很多宝贵的意见,给了我不少帮助还有工作上的支持,在此也真诚的谢谢你们。
同时,我还要感谢我的寝室同学和身边的朋友,正是在这样一个团结友爱,相互促进的环境中,在和他们的相互帮助和启发中,才有我今天的小小收获。
还有许许多多给予我学业上鼓励和帮助的朋友,在此无法一一列举,在此也一并表示忠心地感谢!
附录
总电路图
源程序清单
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
//引脚定义
sbitRX=P3^2;
sbitTX=P1^6;
sbitCS=P3^3;//片选高电平有效单片LCD使用时可固定高电平
sbitSID=P3^4;//数据
sbitSCLK=P3^5;//时钟
sbitE=P1^2;
sbitRW=P1^1;
sbitRS=P1^0;
unsignedinttime=0;
longS=0;
bitflag=0;
unsignedchardisbuff[4]={0,0,0,0,};
voiddelay()
{
inti,j;
for(i=0;i<=10;i++)
for(j=0;j<=2;j++)
;
}
voidenable(uchardel)
{
P0=del;
RS=0;
RW=0;
E=0;
delay();
E=1;
delay();
}
voidwrite(uchardel)
{
P0=del;
RS=1;
RW=0;
E=0;
delay();
E=1;
delay();
}
voidL1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);
}
voidL1602_char(ucharhang,ucharlie,charsign)
{
uchara;
if(hang==1)a=0x80;
if(hang==2)a=0xc0;
a=a+lie-1;
enable(a);
write(sign);
}
voidL1602_string(ucharhang,ucharlie,uchar*p)
{
uchara;
if(hang==1)a=0x80;
if(hang==2)a=0xc0;
a=a+lie-1;
enable(a);
while
(1)
{
if(*p=='\0')break;
write(*p);
p++;
}
}
voidDelaynms(unsignedintdi)//延时
{
unsignedintda,db;
for(da=0;dafor(db=0;db<10;db++);
}
voidConut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=time*1.87/10;//算出来是CM
disbuff[1]=S/1000;
disbuff[2]=S%1000/100;
disbuff[3]=S%1000%100/10;
disbuff[4]=S%10;
L1602_char(2,1,disbuff[1]+48);
L1602_char(2,2,disbuff[2]+48);
L1602_char(2,3,disbuff[3]+48);
L1602_char(2,5,disbuff[4]+48);
}
voiddelayms(unsignedint