基于51单片机的超声波测距仪.docx
《基于51单片机的超声波测距仪.docx》由会员分享,可在线阅读,更多相关《基于51单片机的超声波测距仪.docx(47页珍藏版)》请在冰豆网上搜索。
基于51单片机的超声波测距仪
机电信息工程学院
单片机系统课程设计报告
系别:
电子工程系
专业:
通信工程
班级:
051班
设计题目:
超声波测距
学生姓名:
王权于建坤
指导教师:
董玉华李厚杰杨亚宁李婷
完成日期:
2008年03月19日
一、设计任务和性能指标
1.1设计任务
设计一个超声波测距器,可使用在汽车倒车、建筑施工工地以及一些工业现场的位置测控,也可用于如液位、井深、管道长度的测量等场合。
要求用AltiumDesigner6画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),印刷电路板(要求布局合理,线路清晰),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。
1.2性能指标
1、测量范围10—80cm;
2、测量精度1cm;
3、测量时和被测物体无直接接触,能够清晰稳定地显示测量结果;
4、测量范围扩展为10cm—4m,提高测量精度。
二、设计方案
超声波测距仪是利用超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:
s=340t/2 。
超声波测距主要使用于倒车雷达、建筑施工工地以及一些工业现场,例如:
液位、井深、管道长度等场合。
目前国内一般使用专用集成电路设计超声波测距仪,但是专用集成电路的成本很高,并且没有显示,操作使用很不方便。
超声波指向性强,穿透能力强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
如测距仪和物位测量仪等都可以通过超声波来实现。
但由于超声波传感器的成本较高,所以一般运用于专业领域,民用产品中运用较少。
考虑到一般情况下对测距的要求较低,可在一定程度上牺牲其精确度和测距范围,从而降低成本,使其运用范围大大扩展。
超声波测距系统主要由声波发射电路、回波接收电路以及信号采集电路、温度补偿电路等组成。
2.1硬件方案选择
(1)超声波发射电路
总体上讲,超声波发生器可以分为两大类:
一类是用电气方式产生超声波,一类是用机械方式产生超声波。
电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。
它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。
目前较为常用的是压电式超声波发生器。
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超声波发生器内部主要由两个压电晶片和一个共振板组成。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
这种压电式超声波传感器是利用内藏的压电晶体的压电效应。
压电晶体在外电场作用下会产生机械变形,或者使压电晶体变形也会产生电压,前者称为逆压电效应,后者称为正压电效应。
利用压电晶体的逆压电效应,电路的高频电压会转换为高频机械振动,以产生超声波,作为超声波发生探头,利用压电晶体的正压电效应可将接收的超声波振动转换成电信号,作为超声波接收探头。
(2)超声波接收电路
超声波接收电路的作用是对接收的超声波信号进行放大,并将放大后的信号处理成系统可以处理的电平信号。
(3)温度补偿电路
超声波是一种声波,其声速c和温度有关。
如果测距精度要求很高时,则应通过温度补偿的方法加以校正。
温度测量可以使用数字温度传感器DS18B20。
(4)超声波测距器的算法设计
超声波测距的原理即超声波发生器在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后发射回来,就被超声波接收器所接收到。
这样只要计算出从发出超声波信号到返回信号所用的时间,就可以算出超声波发生器和反射物体的距离。
距离的计算公式为:
其中d为被测物体和测距器的距离,s为声波来回的路程,c为声速,t为声波来回所用的时间。
(5)系统硬件框图如图1所示。
图1系统硬件框图
2.2超声波测距器的软件
系统软件主要由主程序、超声波发射子程序、超声波接收中断程序及显示子程序组成,如图2所示。
图2系统程序结构框图
超声波测距器主程序利用外部中断检测返回超声波信号,一旦接收到返回的超声波信号,立即进入中断程序。
三、系统硬件设计
主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。
采用STC89C55来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。
单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器和障碍物之间的距离。
图3超声波测距原理框图
3.1单片机系统及显示电路
单片机采用STC89C55。
采用11.0592MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。
单片机用P1.0端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接受电路输出的返回信号。
显示电路采用简单实用的LCD1602液晶显示电路,用P0做为数据口。
单片机系统及显示电路如图4所示。
图4单片机及显示电路原理图
3.2超声波发射电路
超声波发射电路原理图如图5所示。
图5超声波发射电路原理图
压电超声波转换器的功能:
利用压电晶体谐振工作。
内部结构图6所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是一超声波发生器;如没加电压,当共振板接受到超声波时,将压迫压电振荡器作振动,将机械能转换为电信号,这时它就成为超声波接受转换器。
超声波发射转换器和接收转换器其结构稍有不同。
图6超声波转换原理图
3.3超声波检测接收电路
超声波检测接收电路采用集成电路CX20106A,如图7所示,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38KHz和测距超声波频率40KHz较为接近,可以利用它作为超声波检测电路。
实验证明其具有很高的灵敏度和较强的抗干扰能力。
适当改变C4的大小,可改变接收电路的灵敏度和抗干扰能力。
图7超声波接收电路图
四、系统软件设计
超声波测距软件设计主要由主程序,超声波发射子程序,超声波接受中断程序、温度补偿及显示子程序和距离测量及显示子程序组成。
下面对超声波测距器的算法,主程序,超声波发射子程序和超声波接收中断程序逐一介绍。
4.1超声波测距器的算法设计
下图示意了超声波测距的原理,即超声波发生器在某一时刻发出的一个超声波信号,当超声波遇到被测物体后反射回来,就被超声波接收器所接受。
这样只要计算出发生信号到接受返回信号所用的时间,就可算出超声波发生器和反射物体的距离。
距离计算公式:
其中d为被测物和测距器的距离,s为声波的来回路程,c为声速,t为声波来回所用的时间。
程序框图如图8所示。
图8距离计算子程序
声速c和温度有关,如温度变化不大,则可认为声速是基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返时间,即可求得距离。
在系统加入温度传感器来监测环境温度,可进行温度被偿。
这里可以用DS18B20测量环境温度,根据不同的环境温度确定声速提高测距的稳定性。
为了增强系统的可靠性,应在软硬件上采用抗干扰措施。
不同温度下的超声波声速表
温度
(摄氏度)
-30
-20
-10
0
10
20
30
100
声速
(m/s)
313
319
325
323
338
344
349
386
4.2主程序
主程序首先对系统环境初始化,设置定时器T0工作模式为16位的定时计数器模式,置位总中断允许位EA并给显示端口P0和P2清0。
然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直接波触发,需延迟0.1ms(这也就是测距器会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。
由于采用11.0592MHz的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算即可测得被测物体和测距仪之间的距离,以20℃时的声速为344 m/s为例,则有:
图9主程序框图
d=(C*T0)/2 =172*T0/10000cm(其中T0为计
数器T0的计数值)
测出距离后结果将以十进制BCD码方式显示,然后再发超声波脉冲重复测量过程。
主程序框图如图9所示。
4.3超声波发生子程序和超声波接收中断程序
超声波发生子程序的作用是通过P1.0端口发送5个左右的超声波信号频率约40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。
进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。
如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值0以表示此次测距不成功。
中断程序的框图如图10所示。
图10计数器T0中断程序(左)、计数器T1中断程序(中)
外部INT0中断程序(右)
4.4温度补偿子程序和温度显示子程序
温度补偿子程序的作用是将当前实验环境的实际温度值准确测量、转换并存储,用以确定此时声波的速度值。
本程序采用DS18B20的12位转换精度,温度寄存器里的值是以0.0625为步进的,即温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。
温度处理子程序判断温度值的“+”和“-”并将转换好的温度整数位和小数位存入显示缓存区50H~53H中,50H为最高位,53H为最低位。
温度显示子程序用来判断高位是否有灭零需要,以及符号位的选择和显示。
程序框图如图11所示。
图11温度显示子程序(左上)、温度处理子程序(左下)
温度转换子程序(右)
五、调试及性能分析
5.1调试步骤
首先要做的就是检查检测硬件电路是否有短路、断路、虚焊等。
具体步骤及测试结果如下:
(1)检查电源和地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接;测试结果所有连接线都已准确连接好;
(2)检验单片机的晶振是否起振,用示波器观察波形;测试结果波形都符合正常工作波形;
(3)检查各芯片工作是否正常,检测按键的导通情况;测试结果正常。
然后将软硬件结合在一起进行调试,把整个超声波测距系统按照实现功能分为各个子模块进行调试。
具体步骤如下:
(1)显示模块调试。
由于受实验器材和实验台的限制,此部分电路及其程序没能做到事先进行测试,所以在调试这个部分时遇到了很多问题,开始是发现硬件电路设计有问题,接的74LS373锁存器几乎就不起作用,然后改线将锁存器去掉了;接着是程序有错误,显示不正确,通过仔细阅读液晶资料,发现其工作时序没有配合好,经改动后在电路板上终于调试通过了;
(2)温度补偿模块调试。
因为之前在实验台上已经调试通过,所以将程序下载到单片机后就正确了。
但在实验台上调试时也曾出现过很严重的问题,原因就是没有彻底弄明白DS18B20的工作工作时序,只有将时序配合好,芯片才呢个正常工作。
(3)超声波发射和接收模块的调试。
这部分是整个系统的核心,也是最易出现问题的部分,而且之前并没有实际测试过,因此在这个模块的调试过程中很困难。
由于发射和接收不能独立调试,所以要同时考虑这两个部分的工作情况,只有两个部分都正常工作了才能得到正确的实验结果。
将调试程序下载后,发现没能得到正确的实验现象,接着便开始进行分步调试,发射部分我们通过示波器观察波形,发现波形的频率和实际需要值略有偏差,经改正程序后符合了实际需要的频率和幅度,但还是没有正确的实验现象。
确定发射没有问题后便开始进行接收部分的调试,反复进行电路连接检查和程序结构的改进后,依然没有调试成功。
正要在困难面前退缩的时候,突然想起来,在分发电容时有一个电容在没有确定容值的情况下就发下来了,我这才想起来去检查我的器件型号规格是否有问题,果然,发现了那个误发的电容,其标称值比我们所需要的大了100倍,此时的我非常懊悔,恨自己一时疏忽没有做好调试前最基本的工作,把电容换了后调试成功了,又做了一点调整,系统能稳定的工作了。
5.2性能分析
超声波测距系统是现代生活一种很方便的测距仪器,它能够准确快速的测量出距离,给人们的生活带来很大方便。
当系统上电时,显示器上将显示“Welcome”的字样,很快系统开始工作,随着探头的移动,显示器上将实时显示当前所对准的物体的距离,而且会一并显示当前测量环境的温度值。
由于系统的驱动问题以及软件上的缺陷,实际测量值范围最好控制在3m内,距离值误差≤1cm,温度值误差≤0.5℃。
本系统尚有不足,一是缺少电源开关控制按键,二是缺少报警机制,三是测量条件改变时的纠错能力差,另外液晶显示也没有达到理想的稳定状态。
希望在进一步的设计过程中解决这些问题,并有所完善和再创新。
六、心得体会
这次课程设计是对我们学习单片机原理和使用和印刷电路板设计课程的检验及实际使用能力的一次提高。
我们所设计的是超声波测距系统。
可以测量的距离范围是5cm~3m,精确到1cm。
由于声波在不同的温度下的速度值变化很大,为了减少测量误差,我们采用DS18B20温度传感器进行温度补偿设计,它具有体积小、适用电压宽等特点,其测量范围为-55℃~+125℃。
和传统的热敏电阻相比,它能够直接读出被测量温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
本次实验中选择其12位转换精度。
由于DS18B20读出或写入的信息仅需要一根口线完成,这样就需要准确的读写时序,刚开始由于时序没有配合好,调试很久都没出现正确的结果,后来通过对其时序的再一次了解和把握终于测出了准确的温度值。
但读出来的温度值只是整个系统的一个辅助部分,我们主要是为了得到和当前环境下的温度值对应的声速值,此部分转换通过软件设计中温度的比较及查表来完成。
显示部分选择了LCD1602液晶显示,但由于实验台的限制,软件调试过程中采用动态数码管显示。
原理图设计时我们使用了印刷电路板设计课上学过的AltiumDesigner6制图工具,由于一些实际的器件在器件库中无法找到,我们只有自己制作,在这个过程中我们学到了很多的知识和方法。
在制作PCB板图的时候,很多器件的封装和实际尺寸存在很大的差别,为了获得准确的封装,我们实际测量了所给器件的大小和规格,找到了和之匹配的封装库。
当然我们也走过弯路,在考虑产品外型设计时,由于探头位置的需要,我们曾想过要将两个探头和主板分开单置出来,经老师分析,考虑到单开一块板的成本及安装困难的问题,提议将探头引脚弯曲便可。
这个问题让我感受颇深,虽然只有这么小小的变动但却解决了实际问题。
而自己却把简单的问题复杂化,因此我们在看问题时,一定要多角度考虑。
程序编写过程也给了我们很大的收获。
在编写程序之前,我们查阅了大量的相关资料,力求做到简洁规范清晰。
在把握了整体的思路后,我们先从程序流程图着手,将整个程序分成若干模块,分开编写,一边发现问题一边解决问题,并在实验板上检验程序测试情况,根据现象不断修改。
由于实验板的种种限制,我们不得不针对实验台来进行软件设计和调试。
在这个过程中我们体会到编程的技巧,设置子程序的合理性,同时对单片机最小系统的设计有了整体的理解和深刻的体会,使我们的思维的锻炼和能力培养有了很大的提高和进步。
本次课程设计时间虽短,但收获却很大。
我们对使用单片机最小系统来设计产品有了整体的把握,对程序编写的合理和规范性有了深刻的理解,建立起程序设计的一般思路,以及AltiumDesigner6的使用方法,其强大的功能给我们提供了很大的帮助,通过原理图的设计,使我们认识到了这个软件的重要性,提高了我们运用的熟练性,我们会以此为契机,在日后的学习中会继续使用它,使其发挥更大的功能。
经过三个星期的课程设计,我们得到了充分的锻炼,不仅对单片机的学习有了深刻的理解,同时也增强了我们的毅力和处理突发问题的能力。
学习是要付出一定的艰辛和努力的,做事情一定要有不怕困难的吃苦精神,唯有坚持不懈,发扬团队协作才能够克服困难,取得最后的胜利。
相信本次课程设计对我们以后的学习将会有很大的影响,我们一定会积极地总结经验和教训,改进不足,争取在日后做得更好。
当然要感谢老师和同学们的帮助,在我们束手无策,陷入困境的时候给予热情的帮助,使我们顺利渡过难关。
课程设计是一次很好的实践动手机会,通过实践,我们的知识得到了使用,真正实现了知识的学以致用,理论联系实际,我们会更加注重实践能力的锻炼,注重动手能力的培养。
参考文献
[1]徐维祥,刘旭敏.单片微型机原理及使用.大连:
大连理工大学出版社,1996
[2]何立民.单片机实验和实践教程
(一).北京:
北京航空航天大学出版社,2003
[3]楼然苗,李光飞.单片机课程设计指导.北京:
北京航空航天大学出版社,2007
[4]李群芳,黄建.单片机微型计算机和接口技术.北京:
电子工业出版社,2001
[5]汪道辉.单片机系统设计和实践.北京:
电子工业出版社,2006
附录1系统硬件电路图
附录2程序清单
;*************************************************************
;系统初始化定义
;*************************************************************
TEMPER_VLDATA20H;温度值(取整后)存储区
TEMPER_VHDATA21H
TEMPLDATA26H
TEMPHDATA27H;测得温度值存储区
TEMPHCDATA28H
TEMPLCDATA29H
TEMPHEADEQU36H;温度值缓存区
TEMPER_NUMEQU39H;处理温度值缓存区
VOUTEQUP1.0;超声波脉冲输出端口
TEMPDINBITP2.4;DS18B20温度输入端口
RSEQUP2.6
RWEQUP2.5
EEQUP2.7
;********************************************
;中断入口程序
;********************************************
ORG0000H
LJMPBEGIN
ORG0003H
LJMPPINT0;外部0中断
ORG000BH
LJMPINTT0;计数器T0中断
ORG0013H
RETI
ORG001BH
LJMPINTT1;定时器T1中断
ORG0023H
RETI
ORG002BH
RETI
;********************************************
;主程序
;********************************************
ORG0100H
BEGIN:
MOVSP,#4FH
MOVR0,#40H;40H-43H为显示距离存放单元
MOVR7,#30H;60H-63H为显示温度存放单元
CLEARDISP:
MOV@R0,#30H
INCR0
DJNZR7,CLEARDISP
MOV23H,#00H
MOVTMOD,#21H;T1为8位自动重装,T0为16位定时器
MOVTH0,#00H;65毫秒初值
MOVTL0,#00H
MOVTH1,#0F4H;40KHz初值
MOVTL1,#0F4H
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MOVR4,#0AH;超声波肪冲个数控制(为赋值的一半)
LCALLLCDON;开机显示
SETBPX0
SETBET0
SETBEA
BEGIN1:
LCALLREADTEMP
LCALLREADTEMP1;读出温度值子程序
LCALLCONVTEMP
LCALLDISPBCD
SETBTR0;开启测距定时器
ABEGIN:
LCALLDISPLAY
JNB23H,ABEGIN;收到回波时置标志位
CLREA
CLR23H
LCALLWORK;计算距离子程序
SETBEA
MOVTH0,#00H;65毫秒初值
MOVTL0,#00H
SETBTR0;重新开启测距定时器
MOVR2,#02H
LOOP:
LCALLDISPLAY
DJNZR2,LOOP
SJMPBEGIN1
;****************************************************
;中断服务子程序
;****************************************************
;T0中断,65mS中断一次
INTT0:
CLREA
CLRTR0
MOVTH0,#00H
MOVTL0,#00H
SETBET1
SETBEA
SETBTR0;启动计数T0,用以计算超声来回时间
SETBTR1;开启定时器T1,用以发超声波
NOP
SETBEX0
OUT:
RETI
;T1中断,发送超声波
INTT1:
CPLVOUT
DJNZR4,RETIOUT
CLRTR1;超声波发送完毕,关T1
CLRET1
MOVR4,#0AH
RETIOUT:
RETI
;外部中断0检测回波
PINT0:
CLRTR0;关计数器
CLRTR1
CLRET1
CLREA
CLREX0
MOV45H,TL0;将计数值移入处理单元
MOV46H,TH0
SETB23H;接收成功标志
RETI
;****************************************************
;距离计算程序(=计数值*172/10000cm)
;****************************************************
WORK:
PUSHACC
PUSHPSW
PUSHB
MOVR3,46H
MOVR2,45H
MOVR1,#00D
MOVDPTR,#TEMPR
LCALLDIFFER;将温度值转换为对应的速度值
MOVCA,@A+DPTR
MOVR0,A
LCALLMUL2BY2
MOVR3