超声波测距.docx
《超声波测距.docx》由会员分享,可在线阅读,更多相关《超声波测距.docx(24页珍藏版)》请在冰豆网上搜索。
超声波测距
信息工程学院
课程设计报告书
题目:
超声波测距装置
专业:
电子信息科学与技术
班级:
0310412班
学号:
031041002
学生姓名:
李范佩
指导教师:
高林
2013年5月10日
信息工程学院课程设计任务书
学号
031041202
学生姓名
李范佩
专业(班级)
0310412
设计题目
超声波测距器的设计
设
计
技
术
参
数
1.测量范围为0.10~4.00m;
2.测量精度为1cm;
3.测量时与被测物体无直接接触,能够清晰、稳定地显示测量结果。
设
计
要
求
超声波测距器可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度、物体厚度等的测量。
其测最范围为0.10~4.00m,测量精度为1cm。
测量时与被测物体无直接接触,能够清晰、稳定地显示测量结果。
工
作
量
既要独立完成硬件设计及制作,并且还要独立完成软件部分;硬件软件能有机的结合起来也存在一定难度。
对动手能力较差的同学来说,做实物还是比较有挑战性。
工
作
计
划
用一周的时间收集并学习超声波测距原理相关的资料,用一周的时间来制作硬件,用半周时间来完成软件,用半周的时间调试,本次任务三周时间来完成。
参
考
资
料
新概念51单片机C语言教程;
电子技术基础;
51单片机开发与应用;
单片机C程序教程。
指导教师签字
教研室主任签字
年月日
学生姓名:
学号:
专业(班级):
课程设计题目:
指导教师评语:
成绩:
指导教师:
年月日
信息工程学院课程设计成绩评定表
摘要
本章从系统方案等一些方面来进行论证。
本设计主要是进行距离的测量,设计中涉及到的内容较多,主要是将单片机控制模块、超声波测距模块、4位数码管显示模块这几个模块结合起来。
而本设计的核心是超声波测距模块,其他相关模块都是在测距的基础上拓展起来的,测距模块是利用超声波传感器。
超声波测距器可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度、物体厚度等的测量。
关键词:
超声波测距数码管显示精度
目录
1任务提出与方案论证3
1.1测距传感器3
1.2系统方案4
1.3硬件电路设计5
2总体设计6
2.1硬件设计6
2.2软件设计7
3详细设计8
3.1单片机系统设计8
3.2数码管显示模块设计13
3.3软件设计14
4总结22
参考文献23
1任务提出与方案论证
本章从系统方案等一些方面来进行论证。
本设计主要是进行距离的测量和报警,设计中涉及到的内容较多,主要是将单片机控制模块、超声波测距模块、4位数码管显示模块这几个模块结合起来。
而本设计的核心是超声波测距模块,其他相关模块都是在测距的基础上拓展起来的,测距模块是利用超声波传感器,之后选择合适单片机芯片,以下就是从相关方面来论述的。
1.1测距传感器
(1)激光测距传感器
激光传感器利用激光的方向性强和传光性好的特点,它工作时先由激光传感器对准障碍物发射激光脉冲,经障碍物反射后向各个方向散射,部分散射光返回到接受传感器,能接受其微弱的光信号,从而记录并处理光脉冲发射到返回所经历的时间即可测定距离,即用往返时间的一半乘以光速就能得到距离。
其优点是测量的距离远、速度快、测量精确度高、量程范围大,缺点是对人体存在安全问题,而且制作的难度大成本也比较高[3]。
(2)红外线测距传感器
红外线测距传感器利用的就是红外线信号在遇到障碍物其距离的不同则其反射的强度也不同,根据这个特点从而对障碍物的距离的远近进行测量的。
其优点是成本低廉,使用安全,制作简单,缺点就是测量精度低,方向性也差,测量距离近[3]。
(3)超声波传感器
超声波是一种超出人类听觉极限的声波即其振动频率高于20kHz的机械波。
超声波传感器在工作的时候就是将电压和超声波之间的互相转换,当超声波传感器发射超声波时,发射超声波的探头将电压转化的超声波发射出去,当接收超声波时,超声波接收探头将超声波转化的电压回送到单片机控制芯片。
超声波具有振动频率高、波长短、绕射现象小而且方向性好还能够为反射线定向传播等优点,而且超声波传感器的能量消耗缓慢有利于测距[4]。
在中、长距离测量时,超声波传感器的精度和方向性都要大大优于红外线传感器,但价格也稍贵。
从安全性,成本、方向性等方面综合考虑,超声波传感器更适合设计要求,因此选用超声波传感器作为此设计方案的传感器探头。
1.2系统方案
此方案选择51单片机作为控制核心,所测得的距离数值由4位共阳极数码管显示,超声波发射信号由51单片机的P0.1口送出到超声波发射电路,将超声波发送出去,超声波接收电路由CX20106A芯片和超声波接收探头组成的电路构成,报警系统由蜂鸣器电路构成。
本设计中将收发超声波的探头分离这样不会使收发信号混叠,从而能避免干扰,可以很好的提高系统的可靠性。
本设计由Keil编程软件对51单片机进行编程,51单片机在执行程序后由P0.1端口产生40kHz的脉冲信号通过74LS04电路进行放大并送到到超声波发射探头,产生超声波。
在超声波发射电路启动的同时单片机启动中断定时器,利用其计数的功能记录超声波发射超声波到接收到超声波回波的时间。
当接收回射的超声波时,接收电路的输出端产生负跳变输出到单片机产生中断申请,执行外部中断子程序计算距离。
结合各方面的因素考虑,依据设计的要求,查阅相关数据资料,选择了超声波测距传感器TR40-16Q(其中T表示超声波发射探头,R表示超声波接收探头),综合考虑设计的要求出于简便角度,选用了HC-SR04超声波集成模块。
此超声波模块的最大探测距离为5m,精度可以达到0.3cm,盲区为2cm,而且发射扩散角不大于15°,更有利于测距的准确性。
而且,此模块的工作频率范围为39kHz~41kHz左右,完全能在40kHz工作频率工作。
由于超声波的发射和接收是分开发送和接收的,所以发射探头和接收探头必须在同一条水平行直线上,这样才能准确地接收反射的回波。
而由于测量的距离不同和发射扩散角所引起的误差以及超声波信号在空气中传播的过程中的超声波衰减问题,发射探头和接收探头距离不可以太远,而且还要避免发射探头对接收探头在接收信号时产生的干扰,所以二者又不能靠得太近。
根据对相关资料查阅,将两探头之间的距离定在5cm~8cm最为合适。
本设计所用的HC-SR04模块的超声波探头之间的距离大约在6cm左右。
1.3硬件电路设计
本设计的汽车防撞装置由51单片机、超声波发射探头、超声波接收探头、4位共阳极数码管、蜂鸣器组成。
汽车防撞系统的测距是利用超声波测距的原理,在单片机内部程序的控制下,由超声波发射探头发射超声波,在超声波遇到障碍物时反射到超声波接收探头,由此回应到单片机,由单片机进行中断处理和数据的处理,计算出距离,由数码管显示距离。
本设计的硬件电路分为四部分:
单片机最小系统、超声波发射和接收电路和数码管显示电路
2总体设计
2.1硬件设计
本设计的硬件电路分为四部分:
单片机最小系统、超声波发射和接收电路和数码管显示电路:
2.2软件设计
图4.1系统主程序流程图
3详细设计
3.1单片机系统设计
3.1.1单片机的选择
一般在系统的设计当中,能否完成设计任务最重要的就在于系统的核心器件是否选择合适,而单片机更是是系统控制的核心,所以对单片机的选择更是异常重要。
如果选择了一个合适的单片机不仅可以最大地简化系统的操作,而且其功能可能是最好的,可靠性也比较高,对整个系统来说更方便。
目前,市面上的单片机的种类繁多,并且他们在功能方面也是各自有各自的特点。
在一般的情况下来讲,在选择单片机时要需要考虑的几个方面有[5]:
(1)单片机最基本性能参数指标。
例如:
执行一条指令的速度、程序存储器的容量,I/O口的引脚数量等。
(2)单片机的某些增强的功能。
(3)单片机的存储介质。
例如:
对于程序存储器来说,最好选用的是Flash的存储器。
(4)单片机的封装形式。
封装的形式多种多样,例如:
双列直插封装、PLCC封装及表面贴附等。
(5)单片机对工作的温度范围的要求。
例如:
在进行设计户外的产品时,就必须要选用工业级的芯片,以达到温度范围的要求。
(6)单片机的功耗。
例如,如果信号线取电只能提供几mA的电流,所以为了能满足低功耗的要求这个时候选用STC的单片机是最合适的。
(7)单片机在市面上的销售渠道是否畅通、其价格是否便宜。
(8)单片机技术的支持网站如何,卖家提供的芯片资料是否足够完善,是否包含了用户手册,设计方案举例,相关范例程序等。
(9)单片机的保密性是否很好,单片机的抗干扰的性能如何等。
51系列单片机它在指令系统、硬件结构和片内资源等方面与标准的52系列的单片机可以完全的兼容。
51系列的单片机执行速率快(最高时钟频率为90MHz),功耗低,在系统、在应用可编程,不占用用户的资源[5]。
根据本系统设计的实际要求,选择AT89S51单片机做为本设计的单片机使用,它是由ATMEL公司生产的高性能、低功耗的CMOS8位单片机。
89S51单片机具有以下几个性能特点:
4k字节的闪存片内程序存储器,128字节的数据存储器,32个外部输入和输出口,2个全双工串行通信口,看门狗电路,5个中断源,2个16位可编程定时计数器,片内震荡和时钟电路且全静态工作并由低功耗的闲置和掉电模式[5]。
单片机的引脚功能图如图3.1所示。
图3.151单片机的引脚功能图
3.1.2单片机引脚功能
(1)电源引脚
Vcc(40脚):
正电源的引脚,工作电压是5V。
GND(20脚):
接地端。
(2)时钟电路的引脚XTAL1和XTAL2
为了产生时钟信号,在89S51单片机的芯片内部已经设置了一个反相放大器,其中XTAL1端口就是片内反相放大器的输入端,XTAL2端则是片内振荡器反相放大器的输出端[5]。
单片机使用的工作方式是自激振荡的方式,XTAL1和XTAL2外接的是12MHz的石英晶振,使内部振荡器按照石英晶振的频率频率进行振荡,从而就可以产生时钟信号。
时钟信号电路如图3.2所示。
图3.2时钟信号电路
(3)复位RST(9脚)
当振荡器运行时,只要有有两个机器周期即24个振荡周期以上的高电平在这个引脚出现时,那么就将会使单片机复位,如果将这个引脚保持高电平,那么51单片机芯片就会循环不断地进行复位[5]。
复位后的P0口至P3口均置于高电平,这时程序计数器和特殊功能寄存器将全部清零[5]。
本课题设计的单片机复位电路如图3.3所示。
图3.3单片机复位电路图
(4)输入输出口(I/O口)引脚
P0口是一个三态的双向口,既可以作为数据和地址的分时复用口,又可以作为通用输入输出口[5]。
P0口在有外部扩展存储器时将会被作为地址/数据总线口,此时P0口就是一个真正的双向口;而在没有外部扩展存储器时,P0口也可以作为通用的I/O接口使用,但此时只是一个准双向口;另外,P0口的输出级具有驱动8个LSTTL负载的能力即输出电流不小于800uA[5]。
P1口是一个带内部上拉电阻的8位双向I/O口,而P1口只有通用I/O接口一种功能,而且P1口能驱动4个LSTTL负载;在使用时通常不需要外接上拉电阻就能够直接驱动发光二极管;在端口置1时,其内部上拉电阻将端口拉到高电平,作输入端口用[5]。
对于输出功能,在单片机工作的时候,可以通过用程序指令控制单片机引脚输出高电平或低电平[5]。
例如:
指令CLR是清零的意思,CLRP1.0的意思就是让单片机的P1.0端口输出低电平;而指令SETB是置1的意思,SETBP1.0的意思就是让单片机P1.0端口输出高电平[5]。
P2口是一个带内部上拉电阻的8位双向I/O口,而且P2口具有驱动4个LSTTL负载的能力[5]。
P2端口置1时,内部上拉电阻将端口的电位拉到高电平,作为输入口使用;在对内部的Flash程序存储器编程时,P2口接收高8位地址和控制信息,而在访问外部程序和16位外部数据存储器时,P2口就送出高8位地址[5]。
在访问8位地址的外部数据存储器时,P2引脚上的内容在此期间不会改变[5]。
P3口也是一个带内部上拉电阻的8位双向I/O口,P3口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能[5]。
P3口作为通用I/O口接口时,第二功能输出线为高电平。
P3口置1时,内部上拉电阻将端口电位拉到高电平,作输入口使用;在对内部Flash程序存储器编程时,此端接控制信息[5]。
P3口的第二功能,如表3.1所示[5]。
表3.1 P3口第二功能表
P3引脚
兼用功能
P3.0
串行通讯输入口(RXD)
P3.1
串行通讯输出口(TXD)
P3.2
外部中断0请求输入端(INT0)
P3.3
外部中断1请求输入端(INT1)
P3.4
定时器0输入端(T0)
P3.5
定时器1输入端(T1)
P3.6
外部数据存储器写选通信号输出端(/WR)
P3.7
外部数据存储器写选通信号输出端(/RD)
(5)其它控制或复用引脚
(a)ALE/PROG(30脚):
地址锁存有效信号输出端。
在访问片外存储器时,ALE(地址锁存允许)以每机器周期两次进行信号输出,其下降沿用于控制锁存P0口输出的低8位地址;在不访问片外存储器的时候,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6),而在访问片外数据存储器时,ALE脉冲会跳空一个,此时是不可以做为时钟输出[5]。
对片内含有EPROM的机型在编程时,这个引脚用于输入编程脉冲/PROG的输入端[5]。
(b)/PSEN(29脚):
片外程序存储器读选通信号输出端,低电平时有效。
当89S51从外部程序存储器取指令或常数时,每个机器周期内输出2个脉冲即两次有效,以通过数据总线P0口读回指令或常数。
但在访问片外数据存储器时,/PSEN将不会有脉冲输出[5]。
(c)/EA/Vpp(31脚):
/EA为片外程序存储器访选用端。
当该引脚访问片外程序存储器时,应该输入的是低电平,要使89S51只访问片外程序存储器,这时该引脚必须保持低电平;而在对Flash存储器编程时,用于施加Vpp编程电压[5]。
3.1.3单片机最小系统
单片机最小系统是其他拓展系统的最基本的基础,单片机最小系统是指一个真正可用的单片机最小配置系统即单片机能工作的系统。
对于80S51单片机,由于片内已经自带有了程序存储器,所以只要单片机外接时钟电路和复位电路就可以组成了单片机的最小系统了。
单片机的最小系统如图3.4所示。
图3.4单片机最小系统原理图
3.2数码管显示模块设计
发光二极管的缩写是LED,在每个数码管里面都有8只发光二极管,它们分别记作a、b、c、d、e、f、g、dp,其中dp是小数点,每一只发光二极管都有一根电极引到外部的引脚上,而另外一只二极管的引脚就连接在一起同样也引到外部引脚上,此引脚就记作公共端COM。
市面上常用的LED数码管有两种即共阳极数码管与共阴极数码管。
共阳极是数码管里面的发光二极的阳极接在一起作为公共引脚即公共阳极,在使用时此公共引脚接到电源正极。
相反,共阴极就是数码管里面的发光二极管的阴极接在一起作为公共引脚即公共阴极,在使用时此引脚接到电源负极。
单片机对数码管的显示可以分为静态显示和动态显示,静态显示能够稳定地显示数值,但是搭建电路时比较烦索,而动态显示是数码管轮流显示再利用人眼的“视觉暂留”特性,这样看出来的就是在显示不同数值[8]。
数码管的动态显示比较实用,电路构建简单,所以本设计采用动态扫描的方法显示测量距离,只要轮流显示的速度足够快的时候就能够实现测量数值的显示。
显示模块选用4位共阳极数码管进行动态扫描,此扫描方式能完全达到显示要求。
显示模块连接电路图如图3.9所示。
图3.9显示模块连接电路图
3.3系统软件设计
本设计采用的是模块化的思路来进行设计和编写程序,程序主要由系统主程序和中断程序构成。
主程序完成单片机的初始化,超声波的发射和接收、计算超声波发射点与障碍物之间的距离、数码管显示和蜂鸣器报警等。
系统程序设计的主要的功能是发射超声波、接受超声波、计算测量距离、数据计算和数码管显示。
3.3.1主程序设计
主程序对整个单片机系统进行初始化后,先将超声波的回波接收标志位置位并且使单片机P1.0端口输出一个低电平用来启动超声波发射电路,同时将定时器T0启动,然后调用距离计算的子程序,再根据定时器T0记录的时间计算出所需要测量的距离,然后再调用显示子程序,再将测出的距离以十进制的形式送到数码管显示,同时调用声音处理程序来控制蜂鸣器进行报警。
最后主程序通过对回波信号的接收,完成后续的工作,假如标志位清零则说明接收到了回波信号,那么主程序就返回到初始端重新将回波接收标志位置位并且在单片机的P0.1端口上发送低电平到超声波发射电路,就这样,连续不断地运行,循环不断地工作用来实现测距。
整个系统的设计的关键是对距离进行测量的,然后通过单片机来处理测量数据是比较容易实现的,能精确的实现测距。
在测距中,各种信号包括温度对声速的影响都将干扰到测距的准确性,其中超声波的余波信号对整个设计中测距的精确度的干扰的影响比较大[7]。
超声波接收回路中的超声波信号一共有两种波信号:
第一种波信号为余波信号就是当发射探头发射出信号之后,超声波接收探头马上就接收到的超声波信号,实际就是超声波的发射信号[7];另一种波信号就是有效信号,即经过障碍物表面反射回来的超声波回波信号[7],也是所需要测量的距离数值。
在进行超声波测距时,实际上测距就是记录从超声波发射电路发射超声波信号开始到接收到信号的声波的往返时间差,然后通过数据计算出距离,对于回波信号需要进行检测的有效信号是反射物体反射的回波信号,所以要尽量避免在检测时候检测到余波信号。
余波就是在发射超声波时超声波信号直接到达接受探头的波信号,同时余波信号也是超声波测量时存在测量盲区的最主要的原因[7]。
超声波接收电路在接收到超声波回波后,通过CX20106A电路进行检波整形比较,并向单片机发出有效信号,单片机通过外部中断的改变记录回波信号的到达时间,中断发生之后就是表示已经接收到了回波信号,这个时候停止计时,并且读取计数器中的数值,这个数值就是需要进行测量的时间差的数据。
程序中对测距距离的计算方法是按S=17×N/1000=0.017×N(cm)进行计算的,其中,N为计数器的值,声速的值取为340m/s。
综合以上的分析可得到系统主程序流程图,系统主程序的流程图如图4.1所示。
图4.1系统主程序流程图
3.3.2中断处理程序
负责计算车尾与障碍物之间的距离是/INT0的中断程序。
根据前面的对超声接收电路的分析,在超声波集成模块接收到超声波回波信号后,超声波接收电路就会产生一个低电平送至单片机的P3.2引脚,使系统中断,则系统转入中断处理程序。
进入中断处理后,定时器T0和外部中断0就立即被关闭,同时读取时间值,并给回波接收标志位清零即成功接收到回波信号。
中断处理程序的程序流程图如图4.2所示。
图4.2中断处理程序流程图
在中断处理程序过程中,对距离数据的计算是比较关键的。
首先是从定时器0得到超声波传播中往返所用的时间,再运用公式计算得出障碍物与车尾之间的距离,然后再将测得的距离值传到其他功能模块进行其他功能的处理。
3.3.4计算及显示模块设计
从距离计算公式S=17×N/1000=0.017×N(cm)中可以很明显看出来,如果想要得到具体的距离的值,就只需要得到从超声波发送开始到接收到超声波这个过程中定时器0的计数的次数。
本设计中,采用了4位共阳极连接的数码管显示来显示与障碍物之间的距离,同时数码管与P1口连接进行动态的段扫描。
由于这个距离值是不断变化的,所以,这个数码管的显示的过程是在外部中断0发生后才进行的。
所以当主程序给超声波发生器发送了信号后,此时中断和定时器0就已经被打开,并开始计时了。
当超声波接收电路接收了到回波信号的同时时,电路便会产生一个低电平到单片机的P0.0端口,在单片机检测到该信号后,定时器计时就将停止,同时定时器的计数的次数将被提取出来,这样就可以得到以cm为单位的测量的距离值。
程序如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
#definezwP2
#definezxP0
sbittrig=P1^0;
sbitecho=P3^2;
uintdistance;
uintx;
uinttime;
ucharflag;
ucharbuffer[4]={0,0,0,0};
ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
voiddelay(uintj)
{
uinti;
uintk;
for(i=0;ifor(k=0;k<100;k++);
}
voiddispaly(x)
{
buffer[0]=x/1000;
buffer[1]=x%1000/100;
buffer[2]=x%1000%100/10;
buffer[3]=x%1000%100%10;
zx=table[buffer[0]];
zw=0x10;
delay
(1);
zw=0x00;
zx=table[buffer[1]];
zw=0x20;
delay
(1);
zw=0x00;
zx=table[buffer[2]];
zw=0x40;
delay
(1);
zw=0x00;
zx=table[buffer[3]];
zw=0x80;
delay
(1);
zw=0x00;
zx=0x80;
zw=0x40;
delay
(1);
zw=0x00;
}
voidinit0(void)
{
TMOD=0x01;
EA=1;
ET0=1;
EX0=0;
TH0=0;
TL0=0;
TR0=0;
}
voidread_distance(void)
{
uinttimeh;
uinttimel;
timeh=TH0;
timel=TL0;
time=timeh*256+timel;+
distance=time*19/100;
}
voidmain(void)
{
uintm;
delay(100);
while
(1)
{
init0();
flag=0;
trig=0;
delay
(1);
trig=1;
delay
(2);
trig=0;
while(echo==0);
TR0=1;
EX0=1;
while(echo==1);
for(m=0;m<=100;m++)
{
if(flag