找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 35081|回复: 6
收起左侧

超声波测距语音播报设计论文

  [复制链接]
ID:169164 发表于 2017-6-13 07:25 | 显示全部楼层 |阅读模式
毕业设计超声波测距语音播报论文

专   业    电子信息工程技术      
学生姓名
班   级
学   号
指导教师
完成日期


摘 要

在空气介质中超声测距传感器因其性能好,价格低廉、使用方便,在现场机器人定位系统、车辆自动导航、车辆安全行驶辅助系统、城市交通管理和高速公路管理监测系统,以及河道、油井和仓库及料位的探测中都有应用。由于超声波传播不易受干扰,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距和物位测量等都可以通过超声波来实现。为此,深入研究超声波的产生与传播规律、开发高性能超声波换能器及其收发电路,对于超声波检测技术的发展具有十分重要的现实意义。

本设计介绍了基于单片机控制的超声测距的原理:由STC89C52控制定时器产生一定频率脉冲,计算从发射到接收回波时间,从而得到实测距离,数据处理采用,lcd1602显示距离,WTD588D语音播报。


摘 要
Abstract
第一章 绪论
1.1 课题设计目的及意义
1.1.1设计的目的
1.1.2设计的意义
1.2 国内外研究动态
1.3 本课题研究的主要内容
第二章 总体方案
2.1 方案选择
2.2 超声波测距仪的设计思路
2.2.1 超声波测距原理
2.2.2 超声波测距原理框图
2.3 使用元件选择
第三章 系统的硬件结构设计
3.1 STC89C52单片机的功能及特点
3.2单片机最小系统
3.4 语音播报
3.5 显示单元
第四章 系统的软件设计
4.1 主程序流程图
4.2 超声波发生子程序和超声波接收中断程序
第五章超声波测距接收
5.1 HC-SR04模块
5.2 T40、R40超声波传感器简介
5.2.1 超声波传感器的基本介绍
5.2.2 超声波传感器的主要应用
5.2.3 超声波传感器的工作原理
5.3 超声波发射电路
5.4 超声波接收电路
5.5 超声波接收过程
5.6 接收数据处理
第六章总结
致  谢
参考资料
附录1原理图
附录2主要源程序

第一章 绪论

1.1 课题设计目的及意义

1.1.1设计的目的

随着科学技术的快速发展,超声波在测距中的应用越来越广。但就目前的急速水平来说,人们可以具体利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业领域。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因此超声波经常用于距离测量,如超声波测距和物位测量等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。研制具有更高定位精度的被动测距声纳,以满足水中武器实施全隐蔽攻击的需求;继续发展采用低频线谱检测的潜艇拖拽线列阵声纳,实现超远程的被动探测和识别;研制更适合与前还工作的潜艇声纳,特别是解决浅海水中目标识别问题;搭理降低潜艇自噪声,改善潜艇声纳的工作环境。毋庸置疑,无线的超声波测距将于自动化智能化接轨,与其他的测距仪集成和融合,形成多测距。随着测距仪的技术进步,测距仪将从具有单纯判断功能发展到具有学习功能,最终发展到具有创造力。在新的世纪里,面貌一新的测距仪将发挥更大的作用。

1.1.2设计的意义

由于超声测距是一种非接触检测技术,不受光线、被测对象颜色等的影响,较其它仪器更卫生,更耐潮湿、粉尘、高温、腐蚀气体等恶劣环境,具有少维护、不污染、高可靠、长寿命等特点,所以超声波测距系统主要应用于汽车的倒车雷达、机器人自动避障行走、建筑施工工地以及一些工业现场中的液位、井深、管进长度测量等场合。因此研究超声波测距系统有着很大的现实意义。对本课题的研究与设计,还能进一步提高自己的电路设计水平,深入对单片机的理解和应用。

1.2 国内外研究动态

    国外在提高超声波测距方面做了大量的研究,国内一些学者也作了相关的研究。目前超声波测距方法主要有三种:(1)相位检测法:精度高,但检测范围有限;(2)声波幅值检测法:易受反射波的影响;(3)渡越时间法:工作方式简单,直观。现在对超声波测距的精度主要取决于所测的超声波传输时间和超声波在介质中的传输速度,二者中以传输时间的精度影响较大,所以大部分文献采用降低传输时间的不确定度来提高测距精度。温度对传感器的影响也很大,因此,需要用温度传感器进行校正,目前相位探测法和声谱轮廓分析法或二者结合起来的方法是主要的降低探测传输不确定度的方法。

1.3 本课题研究的主要内容

超声波是指频率高于20KHz的机械波。为了以超声波作为检测手段,必须产生超生波和接收超声波。完成这种功能的装置就是超声波换能器。超声波传感器有发送器和接收器,但一个超声波换能器也可具有发送和接收声波的双重作用。超声波换能器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOF(time of flight)。首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离,拟应用以下三种技术:

    a、单片机技术:STC89C52系列的单片机具有体积小,重量轻,结构较为简单,成本低廉,可以实现一般的控制功能的优点。而且单片机更适用应用于小型的嵌入式系统,因此它得到了广泛的应用。现代人类生活大部分电子和机械产品中都会集成有单片机。

    b、超声波测距技术:超声波测距技术与一般测距技术相比,具有操作方便、系统简单以及计算简单的优点。

    c、显示技术:数据处理,数码管显示测出与物体之间的距离。

    d、语音模块技术:ISD1730A芯片来语音播报距离。

第二章 总体方案

2.1 方案选择

采用单片机来控制超声波测距,信号线发射到与超声波发射器相连的信号端,超声波发射器向既定方向发射,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物将产生回波。

2.2 超声波测距仪的设计思路
2.2.1 超声波测距原理

超声波测距的方法有多种,如相位检测法、声波幅值检测法和渡越时间检测法等。相位检测法虽然精度高,但检测范围有限,声波幅值检测法易受反射波的影响。

本测距系统采用超声波渡越时间检测法。其原理为:检测从发射传感器发射的超声波经气体介质传播到接收传感器的时间t,这个时间就是渡越时间,然后求出距离l。设l为测量距离,t为往返时间差,超声波的传播速度为c,则有l=ct/2。超声波接收器收到反射波就立即停止计时。再由单机计算出距离,送数码管显示测量结果。

超声波测距的算法设计: 超声波在空气中传播速度为每秒钟340米(15℃时)。t2是接收超声波时刻,t1是超声波声波发射时刻,t2-t1得出的是一个时间差的绝对值,假定t2-t1=0.03S,则有340m×0.03S=10.2m。由于在这10.2m的时间里,超声波发出到遇到返射物返回的距离如下: 如图2-2-1为测距原理[4]

1.001.jpg
图2-1测距原理

因为θ/2角度较小,可以忽略不计,所以L≈S。

超声波发出到遇到返射物返回的距离如下:

L=C x ( t2 -t1 )/ 2

由于超声波也是一种声波,其声速c与空气温度有关,一般来说,温度每升高1摄氏度,声速增加0.6米/秒。表2-1列出了几种温度下的声速。


表2-1  声速与温度的关系表

温度(摄氏度)

-30

-20

-10

0

10

20

30

100

声速(米/秒)

313

319

325

323

338

344

349

386


在使用时,如果温度变化不大,则可认为声速c是基本不变的,计算时取c为340m/s。如果测距精度要求很高,则可通过改变硬件电路增加温度补偿电路的方法或者在硬件电路基本不变的情况下通过软件改进算法的方法来加以校正。

2.2.2 超声波测距原理框图

     超声波测距模块用HC-SR04,温度传感器使用DS18B20,微处理器使用STC89C52单片机,显示部分采用共阳数码管。HC-SR04集成的发射电路模块发出超声波,遇到障碍物产生回波,被接收电路模块接收,STC89C52单片机统计出声波传输所用时间,经过温度补偿温,计算出正确的待测距离,同时ISD1730A根据相关数据处理进行组合播报当前测试距离,并且由数码管显示。

1.002.jpg
图2-2 超声波测距系统结构图


2.3 使用元件选择

由于测量距离的精度和长度要求不是很高,精度达到2cm,测量距离达到2m即可,因此超声波模块选用价格低廉且实用的HC-SR04即可。

    控制核心部分选择实用的STC89C52单片机即可满足计算和控制要求。

温度补偿的温度传感器选择普遍且实用的DS18B20。

    语音播报:ISD1730A是华邦公司新推出的语音芯片,用来替代已经停产的ISD1400 系列及ISD2500 系列芯片。ISD1730A不仅在录音时间上有更多的选择(从20秒到240 秒),而且在功能上继承14及25系列的所有录放功能,并增加了一些更加人性化的提示功能及对存储地址的精确操作。根据我们经营 ISD 系列芯片多年的经验来看,ISD1700 的音质也较14及25系列有明显的提高

ISD1700 系列芯片是华邦公司新推出的单片优质语音录放电路,该芯片提供多项新功能,包括内置专利的多信息管理系统,新信息提示(vAlert ),双运作模式(独立&嵌入式),以及可定制的信息操作指示音效。芯片内部包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内

存等的全方位整合系统功能。。

    显示部分:选择了四位数码管。

第五章超声波测距接收

5.1 HC-SR04模块

HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,其结构简单,使用单片机控制电路简单容易,而且价格便宜。该模块包括超声波发射、接收与控制电路。实物如图5-1。

1.011.jpg
图5-1  HC-SR04模块实物图

基本工作原理

①采用IO口TRIG触发测距,给至少10us的高电平信号;

②模块自动发送8个40khz的方波,自动检测是否有信号返回;

③有信号返回,通过IO口ECHO输出一个高电平,高电平持续时间就是超

声波从发射到返回的时间。

电气参数

HC-SR04模块参数如下表5-1所示。


表5-1模块参数
电气参数
HC-SR04超声波模块
工作电压
DC 5V
工作电流
15mA
工作频率
40khz
最远射程
4m
最近射程
2cm
测量角度
15°
输入触发信号
10us的TTL脉冲
输入回响信号
输出TTL电平信号,与射程成比例
规格尺寸
45*20*15cm

超声波时序图
超声波时序图如图5-2所示
1.012.jpg
图5-2超声波时序图

以上时序图表明只需要提供一个10us以上脉冲信号,该模块内部将发出8个40khz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与测量的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离:

距离=高电平时间*声速(340m/s)/2。

为防止发射信号对回响信号的影响,测量周期一般要60ms以上。

模块主要由Em78p153单片机、MAX232、TL074、超声波传感器:T40-16、R40-16组成。

Em78p153单片机

①概况描述

Em78p153是采用高速CMOS工艺制造的8位单片机。其内部有512*13位一次性ROM(OTPROM)。因此,用户可以方便改进完善程序。程序代码可用EMC编程器写入芯片。有13位选项位可满足用户要求,其中的保护位可用来防止程序被读出。

②功能特点

工作电压范围:2.0V~6.0V;

工作温度范围:0℃~70℃;

工作频率范围:DC~8MHz;

512×13位片内ROM;32×8位片内寄存器(SDRAM);

片内有4MHz校准RC振荡器;

2个双向I/O端口;

8位实时定时/计数器(TCC),信号源、触发沿可编程选择,溢出产生中断;

掉电模式(SLEEP模式);

3个中断源:TCC溢出中断、输入引脚状态变化中断、外部中断;

EM78P153为14脚封装;封装形式:SOP、SSOP和DIP。

③引脚分配

Em78p153单片机引脚分配如图5-3。

1.013.jpg
图5-3 Em78p153引脚图

MAX232

MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。MAX232多用于串口通信,起到电平转换的作用,而本设计只用到其电平转换,将40kHz的方波由5V转换成20V,提高发射功率。超声波发射头采用共振频率为40kHz的TCT40-16探头,接收头采用RCT40-16。

①MAX232引脚图

芯片引脚如图5-4。

1.014.jpg
图5-4 MAX232引脚图

②引脚介绍
第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道;8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
第三部分是供电。15脚GND、16脚VCC(+5v)。
TL074
常用的低噪声JFET输入运算放大器,引脚如图5-5。
1.015.jpg
图5-5 TL074引脚图

1、2、3脚是通道1的输出端、反相输入端、同相输入端,5、6、7脚是通道2的同相输入端、反相输入端、输出端,8、9、10脚是通道3的输出端、反相输入端、同相输入端,12、13、14脚是通道4的同相输入端、反相输入端、输出端,4脚是正电源,11脚是负电源。TL074内部组件数量如下表5-2所示

表5-2 TL074组件
电阻
44
晶体管
56
JFET
6
二极管
4
电容
4
epi-FET
4

T40-16与R40-16

为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体上讲,超声波发生器可以分为两大类:

电气方式产生超声波, 主要包括压电型、磁致伸缩型和电动型等;

机械方式产生超声波,主要包括加尔统笛、液哨和气流旋笛等。

    它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较为常用的是压电式超声波发生器。

压电式超声波发生器实际上是利用压电晶体的谐振来工作的。其内部有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片发生共振,带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。模块使用T40-16T/R超声波换能器即为压电型。

①器件说明

名 称:压电陶瓷超声波传感器;

型 号:T40-16T/R;

类 别:通用型;

中心频率:40KHZ;

外 径:16mm;

使用方式:T为发射头,R为接收头,TR为收发兼用;

适用范围:家用电器及其它电子设备的超声波遥控装置;超声波测距及汽车倒车防撞装置;液面探测;超声波接近开关及其它应用的超声波发射与接收。

②器件性能

1.标称频率(KHz):40KHz;

2.发射电压at10V(0dB=0.02mPa):≥110dB;

3.接收灵敏度at40KHz(0dB=V/ubar):≥-70dB;

4.静电容量at1KHz,<1V(PF):2000±30%;

5.探测距离(m):0.02-10。

传感器实物如图5-5 所示。


1.016.jpg
图5-6 传感器实物图

HC-SR04模块集成了发射和接受电路,硬件上不必再自行设计繁复的发射及接收电路,软件上也无需再通过定时器产生40Khz的方波引起压电陶瓷共振从而产生超声波。使用时,只要在控制端‘Trig’发一个大于10us宽度的高电平,就可以在接收端‘Echo’等待高电平输出。单片机一旦检测到有输出就打开定时器开始计时。当此口变为低电平时就停止计时并读出定时器的值,此值就为此次测距的时间,再根据传播速度方可算出障碍物的距离。

5.2 T40、R40超声波传感器简介
1.017.jpg
1.018.jpg
5-7 元件内部结构
5-8 元件外部结构

5.2.1 超声波传感器的基本介绍

超声波测距换能器是利用超声波的特性研制而成的换能器。超声波是一种振动频率高于声波的机械波,由换能晶片在电压的激励下发生振动产生的,它具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点。超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中,它可穿透几十米的深度。超声波碰到杂质或分界面会产生显著反射形成反射成回波,碰到活动物体能产生多普勒效应。因此超声波检测广泛应用在工业、国防、生物医学等方面。

以超声波作为检测手段,必须产生超声波和接收超声波。完成这种功能的装置就是超声波换能器,或者探头。

超声波换能器主要由压电晶片组成,既可以发射超声波,也可以接收超声波。小功率超声探头多作探测作用。它有许多不同的结构,可分直探头(纵波)、斜探头(横波)、表面波探头(表面波)、兰姆波探头(兰姆波)、双探头(一个探头反射、一个探头接收)等。

5.2.2 超声波传感器的主要应用

超声波传感技术应用在生产实践的不同方面,而医学应用是其最主要的应用之一,下面以医学为例子说明超声波传感技术的应用。超声波在医学上的应用主要是诊断疾病,它已经成为了临床医学中不可缺少的诊断方法。超声波诊断的优点是:对受检者无痛苦、无损害、方法简便、显像清晰、诊断的准确率高等。因而推广容易,受到医务工作者和患者的欢迎。超声波诊断可以基于不同的医学原理,我们来看看其中有代表性的一种所谓的A型方法。这个方法是利用超声波的反射。当超声波在人体组织中传播遇到两层声阻抗不同的介质界面是,在该界面就产生反射回声。每遇到一个反射面时,回声在示波器的屏幕上显示出来,而两个界面的阻抗差值也决定了回声的振幅的高低。

在工业方面,超声波的典型应用是对金属的无损探伤和超声波测厚两种。过去,许多技术因为无法探测到物体组织内部而受到阻碍,超声波传感技术的出现改变了这种状况。当然更多的超声波传感器是固定地安装在不同的装置上,“悄无声息”地探测人们所需要的信号。在未来的应用中,超声波将与信息技术、新材料技术结合起来,将出现更多的智能化、高灵敏度的超声波传感器。

超声波距离传感器技术应用

超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中,它可穿透几十米的深度。

超声波碰到杂质或分界面会产生显著反射形成反射成回波,碰到活动物体能产生多普勒效应。因此超声波检测广泛应用在工业、国防、生物医学等方面。超声波距离传感器可以广泛应用在物位(液位)监测,机器人防撞,各种超声波接近开关,以及防盗报警等相关领域,工作可靠,安装方便, 防水型,发射夹角较小,灵敏度高,方便与工业显示仪表连接,也提供发射夹角较大的探头。

5.2.3 超声波传感器的工作原理

超声波是一种在弹性介质中的机械振荡,有两种形式:横向振荡(横波)及纵向振荡(纵波)。在工业中应用主要采用纵向振荡。超声波可以在气体、液体及固体中传播,其传播速度不同。另外,它也有折射和反射现象,并且在传播过程中有衰减。在空气中传播超声波,其频率较低,一般为几十KHZ,而在固体、液体中则频率可用得较高。在空气中衰减较快,而在液体及固体中传播,衰减较小,传播较远。利用超声波的特性,可做成各种超声传感器,配上不同的电路,制成各种超声测量仪器及装置,并在通迅,医疗家电等各方面得到广泛应用。

超声波传感器主要材料有压电晶体(电致伸缩)及镍铁铝合金(磁致伸缩)两类。电致伸缩的材料有锆钛酸铅(PZT)等。压电晶体组成的超声波传感器是一种可逆传感器,它可以将电能转变成机械振荡而产生超声波,同时它接收到超声波时,也能转变成电能,所以它可以分成发送器或接收器。有的超声波传感器既作发送,也能作接收。这里仅介绍小型超声波传感器,发送与接收略有差别,它适用于在空气中传播,工作频率一般为23-25KHZ及40-45KHZ。这类传感器适用于测距、遥控、防盗等用途。该种有T/R-40-60,T/R-40-12等(其中T表示发送,R表示接收,40表示频率为40KHZ,16及12表示其外径尺寸,以毫米计)。另有一种密封式超声波传感器(MA40EI型)。它的特点是具有防水作用(但不能放入水中),可以作料位及接近开关用,它的性能较好。超声波应用有三种基本类型,透射型用于遥控器,防盗报警器、自动门、接近开关等;分离式反射型用于测距、液位或料位;反射型用于材料探伤、测厚等。

由发送传感器(或称波发送器)、接收传感器(或称波接收器)、控制部分与电源部分组成。发送器传感器由发送器与使用直径为15mm左右的陶瓷振子换能器组成,换能器作用是将陶瓷振子的电振动能量转换成超能量并向空中辐射;而接收传感器由陶瓷振子换能器与放大电路组成,换能器接收波产生机械振动,将其变换成电能量,作为传感器接收器的输出,从而对发送的超进行检测.而实际使用中,用发送传感器的陶瓷振子的也可以用做接收器传感器社的陶瓷振子。控制部分主要对发送器发出的脉冲链频率、占空比及稀疏调制和计数及探测距离等进行控制

5.3 超声波发射电路

HC-SR04模块内部超声波发射电路如图5-6所示,主要由Em78p153单片机、MAX232及超声波发射换能器T40组成。

1.019.jpg
图5-9 超声波发射电路

5.4 超声波接收电路
HC-SR04模块内部超声波接收电路如图5-3所示,主要由TL074运算放大器及超声波接换能器R40组成。
1.020.jpg
图5-10 超声波接收电路


5.5 超声波接收过程

    单片机初始化,HC-SR04内部ECHO接口与单片机P1.1的引脚相连,发射接口TRIG与单片机的P1.2引脚相接。

单片机开启中断,单片机P1.1给“Trig”接口一个约为20us的高电平,经过HC-SR04模块内EM78P153发送8个连续的40KHz脉冲的信号,经过MAX232电平转换,提高发射功率。换能器将电脉冲信号转换为超声波发射。

    当单片机的给一个20us的触发信号时,TRIG由低电平转换为高电平,TRIG=1,

单片机开时计时,开启中断,并记录时间为T1,接收换能器等待接收回波,ECHO持续为高电平的时间为发射时间。换能器接收回波将超声波转换为电信号,送至单片机,记录时间为T2。超声波发射的时间为:T2-T1,

计算发射距离为:

L = (T2-T1)xC/2

如果等待回波时间超过65ms时,则无法接收到回波,单片机初始化,重新发射接收下一次回波。

5.6 接收数据处理

单片机初始化函数
1.021.jpg
5-11程序流程图

接收过程:上电后先进行初始化,主要是对各变量即定时器0进行初始化,然后单片机给‘Trig’端一个约为20us的高电平,此后在‘Echo’端等待一个高电平,一旦检测到高电平,则立即打开定时器,开始计时。此后只要定时器0中的值不超过约为65ms(65.5536ms)的计时上限,则认为仍处在有效测量范围内,并未进入盲区,则在‘Echo’等待低电平的产生,一旦检测到低电平,立即读出此时的TH0和TL0,并关闭定时器0。则超声波从发射到返回总共所用时间为:time=TH0*256+TL0(us),再根据超声波常温下(27℃)在空气中的传播速度,(约为344m/s)计算出障碍物的距离,在数码管上进行动态的实时显示即可。

接收数据处理子程序如下:

              c_send = 1;                                       //10us的高电平触发
              delay();
              c_send = 0;            
              TH0 = 0;                                      //给定时器0清零
              TL0 = 0;
              TR0 = 0;                                                          //关定时器0定时
              flag_hc_value = 0;
              while(!c_recive);                              //当c_recive为零时等待
              TR0=1;
              while(c_recive)                                  //当c_recive为1计数并等待
              {
                            flag_time0 = TH0 * 256 + TL0;
                            if((flag_hc_value > 1) || (flag_time0 > 65000))     //当超声波超过测量范围时,显示3个888
                            {
                                          TR0 = 0;
                                          flag_csb_juli = 2;
                                          distance = 888;
                                          flag_hc_value = 0;
                                          break ;                           
                            }
                            else
                            {
                                          flag_csb_juli = 1;            
                            }
              }
              if(flag_csb_juli == 1)
              {            
                            TR0=0;                                                                                                 //关定时器0定时
                            distance = TH0;                                                             //读出定时器0的时间
                            distance = distance * 256 + TL0;
                            distance +=( flag_hc_value * 65536);//算出超声波测距的时间              得到单位是ms
                            distance *= 0.017;               // 0.017 = 340M / 2 = 170M = 0.017M 算出来是米
                            if(distance > 350)                                                        //距离 = 速度 * 时间
                            {            
                                          distance = 888;                                                        //如果大于3.8m就超出超声波的量程
                            }
              }  
第六章总结

本次设计介绍了一种基于单片机的超声波测距系统的设计,给出了相应的软件和硬件的设计方案。

超声波测距的原理与雷达测距原理相似,通过超声波发射装置发出超声波,根据接收器接到超声波时的时间差就可以知道距离,也就是说超声波发射器向某一方向发射超声波,在发射时刻的同时单片机开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波单片机就立即停止计时,再利用对应的计算公式就可以求出物体间的间距,这是根据反射原理利用了超声波指向性强,在介质中传播距离较远的特性。

超声波测距仪硬件电路的设计主要包括单片机的基本电路、超声波发射接收模块控制电路、显示电路、语音模块,温度补偿五部分部分组成。单片机采用了STC89C52,晶振为12MHz,单片机P1.3端口输出10us的触发信号,由定时器T0计得时间间隔,显示电路采用1602,语音芯片WTD588D。

本次设计的超声波测距系统满足倒车测距等所需的测量精度,而且反映速度快、控制简单、成本低廉等,测距范围为2cm到350cm。但由于经验不足还有些地方有待完善。在要求精度较高的地方时,由于超声波在空气中的传播速度受温度影响有点大,则需考虑到不同温度时超声波的传播速度变换。

总体来说,经过本次设计让我学到了很多,从中受益匪浅。了解了超声波测距的原理,并对单片机的开发和电路设计有了更进一步的了解。

致  谢

经过几个月的努力本次毕业设计已经接近尾声。毕业设计是对我们知识运用能力的一次全面的考核,培养我们综合运用所学知识和独立分析问题并且解决问题的能力。

首先,我要感谢王老师在毕业设计中对我给予的悉心指导和严格要求,我要感谢和我一起做毕业设计的同学。在毕业设计的短短3个月里,你们给我提出很多宝贵的意见,给了我不少帮助还有工作上的支持,在此也真诚的谢谢你们。同时,我还要感谢我的寝室同学和身边的朋友,正是在这样一个团结友爱,相互促进的环境中,在和他们的相互帮助和启发中,才有我今天的小小收获

经过几个月的努力本次毕业设计已经接近尾声。毕业设计是对我们知识运用能力的一次全面的考核,培养我们综合运用所学知识和独立分析问题并且解决问题的能力。最后再次深深感谢我的导师赵老师以及给予我帮助的同学和朋友。


参考资料

[1] 张国熊. 测控电路[M]. 北京:机械工业出版社,2003.

[2] 阎石. 数字电子技术基础[M]. 北京:高等教育出版社,2004.

[3] 侯媛彬等. 凌阳单片机原理及其毕业设计精选[M]. 科学出版社,2006.

[4] 李建忠. 单片机原理及应用[M]. 西安:西安电子科技大学出版社,2008.

[5] 霍孟友等. 单片机原理与应用[M]. 北京:机械工业出版社,2004.

[6] 高惠芳.单片机原理及系统设计 杭州电子科技大学电子信息学校,2009

[7] 王安敏,张凯基于STC89C52 单片机的超声波测距系统 仪表技术与传感器

[8] 张珩,刘亚杰STC89C52 超声波测距倒车防撞报警系统 现代电子技术

[9] 彭伟.单片机C语言程序设计设计实训[M].西安:电子工业出版社,2009.
[10] 徐江海.数码管显示电路设计制造[M].合肥:机械工业出版社,2003.
[11] Maurice Wilkes.Progress in Computers.Prestige Lecture delivered to IEE, Cambridge, on 5 February 2004

附录1原理图

1.022.jpg

附录2主要源程序


单片机源程序如下:
  1. #include
  2. #include
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. #include "lcd1602.h"

  6. sbit c_send   = P0^7;                            //超声波发射
  7. sbit c_recive = P0^6;                            //超声波接收
  8. uchar flag_hc_value;        //超声波中间变量


  9. bit flag_300ms ;


  10. long distance;                      //距离
  11. uint set_d;                          //距离
  12. bit flag_csb_juli;        //超声波超出量程
  13. uint  flag_time0;     //用来保存定时器0的时候的

  14. //  按键的IO变量的定义
  15. uchar menu_1;        //菜单设计的变量
  16. uchar a_a;

  17. /***********************语音模块控制IO口的定义************************/
  18. sbit  VSDA = P0^1;
  19. sbit  VCS  = P0^2;
  20. sbit  VSCL = P0^3;
  21. sbit  VRST = P0^4;
  22. sbit  VBUSY= P0^0;            
  23. uchar yujing[3];

  24. /***************************
  25.                  语音地址的安排
  26. 0 - 9 :  对应数字0到9
  27. 0b    : 点
  28. 0c    : 米
  29. 0d    : 已超出量程
  30. ****************************/


  31. /***********************1ms延时函数*****************************/
  32. void delay_1ms(uint q)
  33. {
  34.               uint i,j;
  35.               for(i=0;i<q;i++)
  36.                             for(j=0;j<120;j++);
  37. }

  38. void  delay_us (unsigned int us)
  39. {

  40.               while(us--)
  41.               {
  42.                             _nop_();
  43.               }
  44. }

  45. /***********************三线发码子程序************************/
  46. void Send_threelines(unsigned char addr)
  47. {
  48.    unsigned char i;
  49.               VRST=0;
  50.               delay_1ms(5);
  51.               VRST=1;
  52.               delay_1ms(20); /* 复位拉高20ms*/
  53.               VCS=0;
  54.               delay_1ms(5);  /* 片选拉低5ms */
  55.     for(i=0;i<8;i++)
  56.               {
  57.                             VSCL=0;
  58.                             if(addr&0x01)
  59.                             {
  60.                                           VSDA=1;
  61.                             }
  62.                             else
  63.                                           VSDA=0;
  64.                             addr>>=1;
  65.                             delay_us(150); /* 150us */
  66.                             VSCL=1;
  67.                             delay_us(150); /* 150us */
  68.               }
  69.               VCS=1;
  70. }

  71. /***********************处理距离函数****************************/
  72. void smg_display()
  73. {
  74.               yujing[0] = distance % 10;            
  75.               yujing[1] = distance / 10 % 10;            
  76.               yujing[2] = distance / 100 % 10;            
  77. }

  78. void delay()
  79. {
  80.               _nop_();                                        //执行一条_nop_()指令就是1us
  81.               _nop_();
  82.               _nop_();
  83.               _nop_();
  84.               _nop_();
  85.               _nop_();
  86.               _nop_();
  87.               _nop_();
  88.               _nop_();
  89.               _nop_();
  90.               _nop_();
  91.               _nop_();
  92.               _nop_();
  93. }


  94. /*********************超声波测距程序*****************************/
  95. void send_wave()
  96. {
  97.               c_send = 1;                                       //10us的高电平触发
  98.               delay();
  99.               c_send = 0;            
  100.               TH0 = 0;                                      //给定时器0清零
  101.               TL0 = 0;
  102.               TR0 = 0;                                                          //关定时器0定时
  103.               flag_hc_value = 0;
  104.               while(!c_recive);                              //当c_recive为零时等待
  105.               TR0=1;
  106.               while(c_recive)                                  //当c_recive为1计数并等待
  107.               {
  108.                             flag_time0 = TH0 * 256 + TL0;
  109.                             if((flag_hc_value > 1) || (flag_time0 > 65000))      //当超声波超过测量范围时,显示3个888
  110.                             {
  111.                                           TR0 = 0;
  112.                                           flag_csb_juli = 2;
  113.                                           distance = 888;
  114.                                           flag_hc_value = 0;
  115.                                           break ;                           
  116.                             }
  117.                             else
  118.                             {
  119.                                           flag_csb_juli = 1;            
  120.                             }
  121.               }
  122.               if(flag_csb_juli == 1)
  123.               {            
  124.                             TR0=0;                                                                                                  //关定时器0定时
  125.                             distance = TH0;                                                             //读出定时器0的时间
  126.                             distance = distance * 256 + TL0;
  127.                             distance +=( flag_hc_value * 65536);//算出超声波测距的时间              得到单位是ms
  128.                             distance *= 0.017;               // 0.017 = 340M / 2 = 170M = 0.017M 算出来是米
  129.                             if(distance > 350)                                                        //距离 = 速度 * 时间
  130.                             {            
  131.                                           distance = 888;                                                        //如果大于3.8m就超出超声波的量程
  132.                             }
  133.               }
  134. }


  135. /*********************定时器0、定时器1初始化******************/
  136. void time_init()               
  137. {
  138.               EA  = 1;                              //开总中断
  139.               TMOD = 0X11;                //定时器0、定时器1工作方式1
  140.               ET0 = 1;                              //开定时器0中断
  141.               TR0 = 1;                              //允许定时器0定时
  142.               ET1 = 1;                              //开定时器1中断
  143.               TR1 = 1;                              //允许定时器1定时            
  144. }


  145. uchar value = 8;
  146. void main()
  147. {
  148.               send_wave();              //测距离函数
  149.               smg_display();              //处理距离显示函数
  150.               time_init();
  151.               init_1602();
  152.               while(1)
  153.               {
  154.                             if(flag_300ms == 1)
  155.                             {
  156.                                           value ++;
  157.                                           if(value >= 12)                            //5秒钟自动播放一次
  158.                                           {
  159.                                                         value = 0;
  160.                                                         if(distance == 888)
  161.                                                         {
  162.                                                                       Send_threelines(0x0d);                //超出量程
  163.                                                                       delay_1ms(1000);
  164.                                                         }
  165.                                                         else
  166.                                                         {
  167.                                                                       Send_threelines(yujing[2]);                 //语音播放
  168.                                                                       delay_1ms(400);                                                      
  169.                                                                       Send_threelines(0x0b);
  170.                                                                       delay_1ms(400);
  171.                                                                       Send_threelines(yujing[1]);
  172.                                                                       delay_1ms(400);
  173.                                                                       Send_threelines(yujing[0]);
  174.                                                                       delay_1ms(400);
  175.                                                                       Send_threelines(0x0c);
  176.                                                                       delay_1ms(400);
  177.                                                         }
  178.                                           }                                                                                                                                                                                                      
  179.                                           flag_300ms = 0;
  180.                                           send_wave();              //测距离函数
  181.                                           if(menu_1 == 0)
  182.                                                         smg_display();              //处理距离显示函数
  183. ……………………

  184. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
超声波测距语音播报论文.doc (1.08 MB, 下载次数: 108)

评分

参与人数 1黑币 +1 收起 理由
xgang320 + 1 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:254412 发表于 2017-12-11 14:30 | 显示全部楼层
很有用谢谢
回复

使用道具 举报

ID:260447 发表于 2017-12-11 23:54 来自手机 | 显示全部楼层
感谢楼主,学习到了
回复

使用道具 举报

ID:434071 发表于 2018-11-27 11:43 | 显示全部楼层
感谢6666666666666
回复

使用道具 举报

ID:434121 发表于 2018-11-27 13:29 | 显示全部楼层
感谢!楼主6666
回复

使用道具 举报

ID:444537 发表于 2018-12-12 15:32 | 显示全部楼层
感谢楼主!!!
回复

使用道具 举报

ID:352784 发表于 2020-3-25 19:15 | 显示全部楼层
不完全正确,需要小改几个地方
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表