搜索
您的当前位置:首页正文

基于51单片机的超声波测距系统

2020-07-10 来源:年旅网
 封 面

目录

摘 要................................................................................................................................................. 1 一. 绪论 ............................................................................................................................................ 2 二.超声波测距的原理 ................................................................................................................... 3 2.1 超声波的基本理论 .................................................................................................................... 3 2.2 超声波测距系统原理 ................................................................................................................ 7 三. 系统硬件的具体设计与实现 .................................................................................................... 8 3.1 系统原理和框图 ........................................................................................................................ 8 3.2 功能模块的设计 ........................................................................................................................ 8

3.2.1 单片机介绍 ................................................................................................................... 8

3.2.1.1 STC89C52管脚说明 .......................................................................................... 9 3.2.1.2 STC89C52主要特性 ........................................................................................ 10 3.2.1.3芯片擦除 .......................................................................................................... 11 3.2.2 超声波测距模块HC-SR04 ...................................................................................... 11

3.2.2.1 产品特点 ......................................................................................................... 11 3.2.2.2 基本原理 ......................................................................................................... 12 3.2.2.3 电气参数 ......................................................................................................... 12 3.2.2.4 超声波时序图 ................................................................................................. 12 3.2.3 LCD1602液晶显示 .................................................................................................... 13

3.2.3.1. 引脚说明 ....................................................................................................... 13 3.2.3.2字符显示地址说明 .......................................................................................... 13 3.2.3.3. 读写时序操作 ............................................................................................... 14 3.2.4 DS18B20温度传感器 .................................................................................................. 14

3.2.4.1. 芯片简介 ....................................................................................................... 14 3.2.4.2 DS18B20外形和内部结构 ............................................................................ 15 3.2.4.3 DS18B20与单片机的典型接口设计 ............................................................ 17

四. 系统软件设计 .......................................................................................................................... 19 4.1. 程序设计思路 ......................................................................................................................... 19 4.2. 程序流程图 ............................................................................................................................. 19

4.2.1主程序流程图 .............................................................................................................. 19 4.2.2 温度采集程序流程图 ................................................................................................. 21 3. 程序 ............................................................................................................................................ 21 五. 总结 .......................................................................................................................................... 22 六. 致谢 .......................................................................................................................................... 23 七. 参考文献 .................................................................................................................................. 24 八.附录 ......................................................................................................................................... 25

8.1原理图 ............................................................................................................................... 25 8.2主程序 ............................................................................................................................... 25

基于51单片机的超声波测距系统

摘 要

基于传统的测距方法在很多特殊场合:如带腐蚀的液体,强电磁干扰,有毒等恶劣条件下,测量距离存在不可克服的缺陷,超声波测距能很好的解决此类的问题。本系统主要以STC89C52单片机为核心,结合超声波测距模块HC-SR04、液晶屏LCD1602、温度传感器DS18B20,蜂鸣器等硬件平台,对超声波测距系统的原理、液晶显示显示、温度补偿、单片机的应用等进行了分析和验证。 关键词:超声波测距模块,STC89C52,LCD1602,温度补偿。

Abstract

In many special occasions, traditional measuring distance methods based on the existence of insurmountable distance measuring defects, such as the measurement of corrosion in the liquid with strong electromagnetic interference, toxic and other adverse conditions. The ultrasonic range can be a very good solution to the problem. This system mainly uses STC89C52 microcontroller as the core, hardware platform combined with the HC-SR04 ultrasonic ranging module, LCD1602, DS18B20, buzzer etc. Analyzed and validated the principle of ultrasonic ran, LCD display, Temperature compensation, the application of single-chip microcomputer etc.

Keywords: ultrasonic ranging module,STC89C52,LCD1602, Temperature compensation.

1

基于51单片机的超声波测距系统

一. 绪论

随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。但就目前技术水平来说,人们可以具体利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业领域。展望未来,超声波测距仪作为一种新型的非常重要有用的工具在各方面都将有很大的发展空间,它将朝着更加高定位高精度的方向发展,以满足日益发展的社会需求,如声纳的发展趋势基本为:研制具有更高定位精度的被动测距声纳,以满足水中武器实施全隐蔽攻击的需要;继续发展采用低频线谱检测的潜艇拖曳线列阵声纳,实现超远程的被动探测和识别;研制更适合于浅海工作的潜艇声纳,特别是解决浅海水中目标识别问题;大力降低潜艇自噪声,改善潜艇声纳的工作环境。无庸置疑,未来的超声波测距仪将与自动化智能化接轨,与其他的测距仪集成和融合,形成多测距仪。随着测距仪的技术进步,测距仪将从具有单纯判断功能发展到具有学习功能,最终发展到具有创造力。在新的世纪里,面貌一新的测距仪将发挥更大的作用。

在基于传统的测力距离存在不可克服的缺陷。例如,液面测量就是一种距离测量,传统的电极法是采用差位分布电极,通过给电或脉冲来检测液面,电极长期浸泡于水中或其他液体中,极易被腐蚀、电解,失去灵敏性。由于超声波具有强度大,方向性好等特点,利用超声波测量距离就可以解决这些问题,因此超声波测量距离技术在工业控制、勘探测量、机器人定位和安全防范等领域得到了广泛的应用。

超声波测距电路可以由传统的模拟或者数字电路构建,但是基于这些传统电路构建的系统往往可靠性差,调试困难,可扩展性差,所以基于单片机的超声波测距系统被广泛的应用。通过简单的外围电路发生和接收超声波,单片机通过采样获取到超声波的传播时间,用软件来计算出距离,另外加入温度补偿,使其测量电路小巧,精度高,反映速度快,可靠性好。

2

基于51单片机的超声波测距系统

二.超声波测距的原理

2.1 超声波的基本理论

超声波是一门以物理、电子、机械、以及材料科学为基础的、各行各业都

要使用的通用技术之一。该技术在国民经济中,对提高产品质量,保障生产安全和设备安全运作,降低生产成本,提高生产效率特别具有潜在能力。因此,我国对超声波的研究特别活跃。

超声技术是通过超声波的产生、传播以及接收的物理过程完成的。超声波具有聚束、定向及反射、投射等特性。按超声波振动辐射大小不同大致可以分为:用超声波使物体或物性变化的功率应用,称之为功率超声;用超声波获取信息,称为检测超声。

超声波是听觉阈值之外的振动,其频率范围在104——1012Hz,其中通常的频率大约在104——3106之间。超声波在超声场(被超声波充满的范围)传

播时,如果超声波的波长与超声场相比,超声场很大,超声波就像处在一种无限的介质中,超声波自由地向外扩散;反之,如果超声波的波长与相邻介质的尺寸相近,则超声波受到界面限制不能自由的向外扩散。于是超声波在传播过程中有如下的特性和作用:

2.1.1 超声波的传播速度

超声波在介质中可以产生三中形式的振荡波:横波——质点振动方向垂直于传播方向的波;纵波——质点振动方向与传播方向一致的波;表面波——质点振动介于纵波和横波之间,沿表面传播的波。横波只能在固体中传播,纵波能在固体液体中和气体中传播,表面波随深度的增加其衰减很快。为了测量各种状态下的物理量多采用纵波形式的超声波。超声波的频率越高,越与光波某些特性相似。 超声波与气其他声波一样,其传播速度与介质密度和弹性特性有关。

1 超声波在气体和液体中,其传播速度CgL=()2

Ba1式中 ——介质的密度; Ba——绝对压缩系数。

可以推导出超声波在空气种传播速度CG331.40.61T。(T为环境温度)。

超声波在固体中的传播速度分两种情况: (1)纵波在固体介质中的传播速度 其传播与介质的形状有关。

Cq() (细棒)

E123

基于51单片机的超声波测距系统

E Cq[]2 (薄板) 2(1)121 Cq[E(1)]((1)(12)K413G)2 (无限介质)

式中 E——杨氏模具; ——泊松系数; K——体积弹性模具; G——剪片弹性模。 (2)横波声速公式为

EG Cq[]2()2 (无限介质)

2(1) 在固体中,介于0——5之间,因此一般可视为横波声速为纵波的一半。

2.1.2 超声波的物理性质

当超声波传播到两种特性不同的介质的平面上时,一部分被反射;另一部分透射过界面,在相邻的介质内部继续传播;这样的两种情况称之为超声波的反射和折射,如图2.1.2所示:

11

图2.1.2 超声波的反射和折射

(1) 超声波的反射和折射

当超声波传播到两种特性阻抗不同介质的平面分界面上时,一部分超声波被反射;另一部分透射过界面,在相邻介质内部继续传播;这样的两种情况称之为超声波的反射和折射,如图2.1.2所示。声波的反射系数和透射系数可以分别由如下两式求得:

22c2cos2c2coscos1c11c1 T R2c2cos2c2coscos1c11c1式中:,——分别为声波的入射角和反射角;

4

基于51单片机的超声波测距系统

1c1,2c2——分别为两介质的特征阻抗,其中c1,c2为反射波和折射波的速度。反射角、折射角与声速c1,c2满足折射定律关系式:当超声波垂直入射界面时,即0,则:

sinc1。 sinc22c2c2221c11c1 T R2c22c2111c11c11如果sin>

c1,入射波完全被反射,在相邻两个介质中没有折射波。 c2如果超声波斜入射到两个固体介质面或两粘滞弹性介质面时,一列斜入射的纵波不仅产生反射纵波和折射纵波,而且还产生反射横波和折射横波。

(2)超声波的衰减

超声波在一种介质中传播,其声压和声强按指数函数规律衰减。

在平面波的情况下,距离声源x处的声压p和声强I的衰减规律如下:

pp0eAx II0e2Ax 式中:p0,I0——距离声源x=0处的声压和声强; x——超声波与声波间的距离;

A——衰减系数,单位为Np/cm(奈培/厘米)。

(3)超声波的干涉

如果在一种介质中传播几个声波,于是产生波的干涉现象。若以两个频率相同,振幅1和2不等,波程差为d的两个波干涉为例,该两个波合成振幅为

1(12212cos222d),其中为波长。

12从上式看出,当d=0或d=n(n为整数)时,合成振幅r达到最大值;当d=n2(n1,3,5,...)时,合成振幅r为最小值。当12时,r2cosd;当d的奇数倍时,两波相互抵消合成幅度为0。 2由于超声波的干涉,在辐射器的周围形成一个包括最大最小的扬声场。

5

 基于51单片机的超声波测距系统

2.1.3 超声波对声场产生的作用

(1) 机械作用

超声波传播过程中,会引起介质质点交替的压缩与伸张,构成了压力的变化,这种压力的变化将引起机械效应。超声波引起质点的运动,虽然位移和速度不大,但是与超声波振动的频率的平方成正比的质点的加速度却很大。有时足以达到破坏介质的程度。

(2) 空化作用

在流体动力学指出,存在于液体中的微气泡在声场的作用下振动,当声压达到一定的值时,气泡将迅速膨胀,然后突然闭合,在气泡闭合时产生冲击波,这种膨胀、闭合、振动等一系列动力学过程称为空化。

(3) 热学作用

如果超声波作用于介质时被介质所吸收,实际上也就是有能量吸收,同时,由于超声波的振动,使介质产生强烈的高频振荡介质相互摩擦产生热热量,这种能量使介质温度升高。

2.1.4 超声波传感器

超声波传感器主要有电致伸缩和磁致伸缩两类,电致伸缩采用双压电陶瓷晶片制成,具有可逆特性。

压电陶瓷片具有如下特性:当在其两端加上大小和方向不断变化的交流电压时,就会产生“压电效应”,使压电陶瓷也产生机械变形,这种机械变形的大小以及方向与外加电压的大小和方向成正。也就是说,若在压电晶片两边加以频率为f0的交流电电压时,它就会产生同频率的机械振动,这种机械振动推动空气的张弛,当f0落在音频范围内时便会发出声音。反之,如果由超声波机械振动作用于陶瓷片使其发生微小的形变时,那么压电晶片也会产生与振动频率相同的微弱的交流信号。

超声波传感器结构如下:

图 2.1.4.1 元件内部结构 图 2.1.4.2 超声波外部结构

6

基于51单片机的超声波测距系统

2.2 超声波测距系统原理

在超声探测电路中,发射端得到输出脉冲为一系列方波,其宽度为发射超声的时间间隔,被测物距离越大,脉冲宽度越大,输出脉冲个数与被测距离成正比。超声测距大致有以下方法:① 取输出脉冲的平均值电压,该电压 (其幅值基本固定 )与距离成正比,测量电压即可测得距离;② 测量输出脉冲的宽度,即发射超声波与接收超声波的时间间隔 t,故被测距离为 S=1/2vt。本测量电路采用第二种方案。由于超声波的声速与温度有关,如果温度变化不大,则可认为声速基本不变 。如果测距精度要求很高,则应通过温度补偿的方法加以校正。超声波测距适用于高精度的中长距离测量。因为超声波在标准空气中的传播速度为331.45米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。

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

图 2.2测距原理

7

基于51单片机的超声波测距系统

三. 系统硬件的具体设计与实现

3.1 系统原理和框图

超声波测距系统硬件组成如图3-1所示。本系统主要由STC89C52单片机及其外围电路、超声波发送接收模块、液晶显示电路、温度采集电路、蜂鸣器报警电路、按键控制电路和电源等七部分组成。

C P U 温度采集电 路 蜂鸣器报警电路 液晶显示电 路 超声波发送接收模块 按键控制电 路 电源 图3-1 系统设计框图

测量实时温度,启动超声波模块发送,计时等待接收,并根据温度经过计算,将测到的结果通过液晶屏显示出来,当超时没有接收到超声波回复时,液晶屏显示三个负号,表示距离太远,当测量距离低于设置距离时,启动蜂鸣器和LED报警。

3.2 功能模块的设计 3.2.1 单片机介绍

单片机是把微型计算机主要部分都集成在一个芯片上的单芯片微型计算机,即将运算器,控制器,输入输出接口,部分存储器以及其他一些逻辑部件集成在一个芯片上,故可以把单片机看成是一个不带外部设备的微型计算机,相当于一个没有显示器,没有键盘,不带监控程序的单板机。

由于单片计算机具有体积小,重量轻,耗电少,功能强和价格低等特点,又由于数据大多是在芯片内传送处理,所以运行速度快,抗干扰能力强。单片机从七十年代问世以来,在二十多年的时间里,发展异常迅速,并已广泛应用于各种

8

基于51单片机的超声波测距系统

领域。单片机具有通讯接口,用单片机进行接口的控制与管理,单片机与主机可并行工作,大大地提高了系统的运行速度,所以在网络通讯领域也得到了越来越多的应用。

STC89C52是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的

STC89C52是一种高效微控制器,AT89C2051是它的一种精简版本。STC89C52单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

STC89C52外形及引脚排列如图2-1所示。

图3.2.1 STC89C52外形及引脚图

3.2.1.1 STC89C52管脚说明

VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写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口缓冲器可接收,输出

9

基于51单片机的超声波测距系统

4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。在实际应用中,大多数情况下都使用P3口的第二功能。

P3.0 —RXD:串行输入口 P3.1 —TXD:串行输出口 P3.2 —/INT0:外部中断0 P3.3 —/INT1:外部中断1 P3.4 —T0:记时器0外部输入 P3.5 —T1:记时器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:来自反向振荡器的输出。容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 3.2.1.2 STC89C52主要特性

* 与MCS-51 兼容

* 4K字节可编程闪烁存储器 * 寿命:1000写/擦循环

10

基于51单片机的超声波测距系统

* 数据保留时间:10年 * 全静态工作:0Hz-24Hz * 三级程序存储器锁定 * 128*8位内部RAM * 32可编程I/O线

* 两个16位定时器/计数器 * 5个中断源

* 可编程串行通道

* 低功耗的闲置和掉电模式 * 片内振荡器和时钟电路 3.2.1.3芯片擦除

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦除操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,STC89C52设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

3.2.2 超声波测距模块HC-SR04

3.2.2.1 产品特点

HC-SR04超声波测距模块可提供2cm—400cm的非接触式距离感测功能,测距精度可高达3mm,模块包括超声波发射器、接收器与控制电路。原理图如图2.2.1所示:

11

基于51单片机的超声波测距系统

图3.2.2.1 HC-SR04模块电路图

3.2.2.2 基本原理

(1) 采用IO口TRIG触发测距,提供至少10us的高电平信号;

(2) 启动后,模块会自动发送8个40KHz的方波,自动检测是否有信号返回; (3) 如果有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

(4) 测试距离=(高电平时间*声速(340m/s))/2;

3.2.2.3 电气参数

表3.2.2.3 HC-SR04电气参数 电气参数 工作电压 工作电流 工作频率 最远射程 最近射程 输入出发信号 输出回响信号 规格尺寸 3.2.2.4 超声波时序图

HC-SR04超声波模块 DC 5V 15mA 40KHz 4m 2cm 10us的TTL脉冲 输出TTL电平信号,与射程成比例 45*20*15mm

图3.2.2.4 超声波模块时序图

如图2.2.4为超声波模块发送接收的时序图,表明只要提供一个10us以上脉冲触发信号,该模块内部将发出8个40KHz周期电平并检测回波。一旦检测到

12

基于51单片机的超声波测距系统

有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。

3.2.3 LCD1602液晶显示

3.2.3.1. 引脚说明

本设计中用到的液晶屏,其管脚图如图3.2.3.1所示。

图3.2.3.1 LCD1602管脚图

3.2.3.2字符显示地址说明

图3.2.3.2 LCD1602字符显示地址

如上图所示,LCD1602总共有两行16个字符的位置可供显示,首行首字符地址为0x80,第二行首字符地址是0x80+0x40,比如要在第二行第二个位置显示,则可将写指令地址设为0x80+0x40+1即可。

13

基于51单片机的超声波测距系统

3.2.3.3. 读写时序操作

单片机需要编写驱动程序,必须严格按照LCD1602的读写时序来操作,才能实现数据的更新和显示,还要进行初始化设置等。单片机分别控制LCD1602的RS、RW、E端,再进行DB0~DB7的数据操作,具体读写时序图如图3.2.3.3.1和图3.2.3.3.2所示。 ① 读操作时序

图3.2.3.3.1 LCD1602读操作时序图

② 写操作时序

图3.2.3.3.2 LCD1602写操作时序图

3.2.4 DS18B20温度传感器

3.2.4.1. 芯片简介

(1) 适应电压范围更宽,电压范围:3.0 V~5.5V,在寄生电源方式下可由

数据线供电。

14

基于51单片机的超声波测距系统

(2) 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线

即可实现微处理器与DS18B20的双向通讯。

(3) DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集

成在形如一只三极管的集成电路内。

(4) 测温范围-55℃~+125℃,在-10℃~+85℃时精度为±0.5℃。 (5) 可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、

0.125℃和0.0625℃,可实现高精度测温。

(6) 在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时

最多在750ms内把温度值转换为数字,速度更快。

(7) 测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,

同时可传送CRC校验码,具有极强的抗干扰纠错能力。

(8) 负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工

作。 3.2.4.2 DS18B20外形和内部结构

DS18B20内部结构如图3.2.4所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如图3.2.4.1和表3.2.4. 1所示。

存储器和控制器 64位ROM和单线接 口 电源检测 温度传感器 高速缓存 存储器 低温触发器TL 高温触发器TH 配置寄存器 8位CRC生成器 图3.2.4 DS18B20的内部结构

15

基于51单片机的超声波测距系统

序号 1 2 3 名称 GND DQ VDD 图3.2.4.1 DS18B20的管脚排列 表3.2.4.1 DS18B20引脚定义: 引脚功能描述 地信号 数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。 可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。

(1) 64位ROM

ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的循环冗余校验码(CRC=X8+X5+X4+1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20中的温度传感器完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。DS18B20温度值格式表3.2.4.2如下所示。

表3.2.4.2 DS18B20温度值格式表

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 LS Byte 321012342 2 2 2 2 2 2 2 bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8 MS Byte 654S S S S S 2 2 2 这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM

中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH。 (2)高低温报警触发器TH和TL

16

基于51单片机的超声波测距系统

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

(3)配置寄存器

该字节各位的意义如下表3.2.4.3所示。

表3.2.4.3 配置寄存器结构 TM R1 R0 1 1 1 1 1 低五位一直都是“1”,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表3.2.4.4所示(DS18B20出厂时被设置为12位)。

表3.2.4.4 温度分辨率设置表 R1 R0 分辨率 温度最大转换时间 0 0 1 1 0 1 0 1 9位 10位 11位 12位 93.75ms 187.5ms 375ms 750ms (4)高速暂存器是一个9字节的存储器。开始两个字节包含被测温度的数字量

信息;第3、4、5字节分别是TH、TL、配置寄存器的临时拷贝,每一次上电复位时被刷新;第6、7、8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。高速暂存器RAM结构图如下表3.2.4.5所示。

表3.2.4.5 DS18B20暂存寄存器分布 寄存器内容 字节地址 温度值低位 (LS Byte) 温度值高位 (MS Byte) 高温限值(TH) 低温限值(TL) 配置寄存器 保留 保留 保留 CRC校验值

3.2.4.3 DS18B20与单片机的典型接口设计

图3.2.4.6(a)中DS18B20采用寄生电源方式,图3.2.4.6(b)中DS18B20

采用外接电源方式,其VDD端用3V~5.5V电源供电。

17

0 1 2 3 4 5 6 7 8 基于51单片机的超声波测距系统

(a) 寄生电源工作方式 (b) 外接电源工作方式

图3.2.4.6 电源工作方式图

18

基于51单片机的超声波测距系统

四. 系统软件设计

4.1. 程序设计思路

通过单总线协议,读出实时温度,在超声波处理上,本设计采用软件查询的方法,检测超声波模块接收管脚的回波信号情况。当信号为0时,表示没有回波信号,此时等待信号变为高电平,当接收到回波信号时,程序继续运行,此时开启定时器T0,直到回波信号消失才关闭,此时测到的时间就是回波信号的高电平脉宽时间长度,再根据时间和温度计算出距离。

4.2. 程序流程图

4.2.1主程序流程图

19

基于51单片机的超声波测距系统

开始 定时器初始化 启动模块发送超声波 Y N 回波? Y 开启定时器T0 500ms到? Y 回波? N 关闭定时器T0 Y 超时? N 根据温度计算距离 N 距离<30cm? Y 启动蜂鸣器 N 距离>700cm? Y 液晶屏显示负号 液晶屏显示距离

图4.2.1 超声波测距系统主软件流程图

20

基于51单片机的超声波测距系统

4.2.2 温度采集程序流程图

开始 DS18B20复位并跳过ROM匹配 3. 程序

具体程序见附录。

启动温度检测 写读寄存器温度值 读取低位 读取高位 温度计算 存入对应数组 图4.2.2温度流程图

21

基于51单片机的超声波测距系统

五. 总结

在此次有关超声波测距系统的设计,让我感觉到了单片机的复杂深度

性,它很贴切我们的日常生活,无所不在,应用无处不有,它并不是想象中的那么简单,也并非是无法克服的堡垒。以上基于单片机的超声波的测距系统的设计包含了:电路分析、数字、模拟电路和单片机、EDA、传感器、C语言等方面的知识,另外还有选材购买、动手制作等方面。所以具有很高的参考价值,同时,该设计的方案也是来源于生活中广泛的应用领域,有很强的应用价值。

设计硬件之前,要首先收集好有关的基础性资料,应备有良好的应用类参考书和专业类参考书。对于有关的科技期刊和专利文献,也要经常阅读以便了解最新的发展情况,借鉴现成的经验,避免重复劳动。在设计中,要充分了解所用芯片的使用条件及输入输出的特性,这样才能避免因使用错误而多走弯路。

电路设计部分应该有的精神就是广集资料。只凭借自己头脑中的知识是远远不够的。哪里出现了问题,就要翻书本,或上网查资料。当然也要开动自己的脑筋怎样使系统电路更完美。在电路设计时,应充分发挥单片机的记忆运算、判断控制能力,避免采用复杂的、稳定性较差的模拟电路。

单片机的应用改变了传统的设计思路,以前构建一个系统需用用很多的数字模拟器件或者电路单元来构建,系统可靠性差、缺乏灵活性、维护不便、成本高、无法实现智能化等诸多缺点。单片机的应用解决了很多问题,现在只要写一个软件,通过单片机和一些简单的外接电路就可以实现具有很多功能的、而且具有智能化的系统,同时可方便升级维护。所以单片机的应用广泛,在日常生活和生产中占用重要位置。所以我们设计选择了单片机的系统其说明我们深深的意识到它的重要作用。

最后我非常感谢学校和老师给我们这么好的学习机会,让我亲身去体会一个项目开发的艰难性,第一次站在一个设计者的角度去看,体会到了他们的艰辛,同时我也感受到了老师对我们的付出,对我们的精心指导,让我顺利完成这次学习任务。

22

基于51单片机的超声波测距系统

六. 致谢

时间真的过的好快,转眼便是大学毕业之际。距离离校的日子已日趋临近,

毕业设计的完成也随之进入了尾声。在此我真的要感谢我的指导老师**老师。在本次论文设计过程中,**老师对该设计从选题的审核、构思、修改到最后定稿的过程中,自始至终都倾注时间、经历和心血。由于我自身经验缺乏,所以一开始真的无法下手,设计进程也很缓慢,而此时老师不仅仅在设计方面给予引导,在选材方面也给予参考,特别是她多次询问写作进程,并为我指导,帮助我开拓思路,这些付出和关心让我坚定了能够完成这次设计的信心。而我在老师的指导下,也不敢松懈,尽可能早的完成毕业设计。

**老师以严谨的治学之道、宽厚仁慈的胸怀、积极乐观的生活态度,兢兢业业、孜孜以求的工作作风和大胆创新的进取精神为我树立了一辈子学习的典范,她的教诲与鞭策将激励我在学习和生活的道路上开拓创新。她渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。真的发自内心的说一句:**老师,谢谢您。

最后,我要向百忙之中抽时间对本文进行审阅,评议和参与本人论文答辩的各位老师真心地表示感谢,谢谢你们。

23

基于51单片机的超声波测距系统

七. 参考文献

【1】 胡萍.超声波测距仪的研制.计算机与现代化,2003.10

【2】 时德刚,刘哗.超声波测距的研究.计算机测量与控制,2002.10 【3】 华兵.MCS-51单片机原理应用.武汉:武汉华中科技大学出版社,2002 .5 【4】李华.MCU-51系列单片机实用接口技术.北京:北京航空航天大学出版社,

1993. 6

【5】 陈光东.单片机微型计算机原理与接口技术(第二版).武汉:华中理工大学

出版社,1999.4

【6】 徐淑华,程退安,姚万生.单片机微型机原理及应用.哈尔滨:哈尔滨工业

大学出版社,1999. 6.

【7】 苏长赞.红外线与超声波遥控.北京:人民邮电出版社,1993.7 【8】 张谦琳.超声波检测原理和方法.北京:中国科技大学出版社,1993.10 【9】 九州.放大电路实用设计手册.沈阳:辽宁科学技术出版社,2002.5 【10】 樊昌元,丁义元. 高精度测距雷达研究.电子测量与仪器学报,2000.10 【11】 苏伟,巩壁建.超声波测距误差分析.传感器技术,2004.

【12】 永学等.1-Wire总线数字温度传感器DS18B20及应用.电子产品世界,

2003.12

【13】 胜全.D18B20数字温度计在微机温度采集系统中的序编制. 南京:南京

大学出版社1998. 3

【14】 恒清,张靖.加强单片机系统抗干扰能力的方法.通化师范学院学报,

2004 .10

24

基于51单片机的超声波测距系统

八.附录

8.1原理图

8.1 系统原理图

8.2主程序

/***********************************************************************************************************/ #include //器件配置文件 #include

#define uint unsigned int //宏定义 #define uchar unsigned char #define RX P2_6 //接收端口 #define TX P2_5 //发送端口 #define BEEP P2_2 //蜂鸣器端口 #define LED P2_3 //LED端口 #define UP P2_1 //按键接口 #define DOWN P2_0 //按键接口

25

基于51单片机的超声波测距系统

int temperature; //全局变量 温度 float Speed; //全局变量 超声波速度 unsigned int time=0; //定义发送到接收的时间 unsigned int timer=0; //定义超声波扫描周期 unsigned int Led_time=0; //定义LED灯闪烁定时 int S=0; //定义距离为0 int S_SET=30;

bit flag =0; //超出距离标志位

#define DQ P2_7 //温度数据口 #define rs P1_0 //LCD1602 #define rw P1_1 //LCD1602 #define e P1_2 //LCD1602

uchar code table2[]=\"Distance: 000cm \"; uchar code table3[]=\"000cm Temp:-00C\";

int readtemperature();

void delay_lcd(uint z) //延时函数约1ms { uint x,y; for(x=z;x>0;x--) for(y=50;y>0;y--); }

void write_com(uchar com) //写指令函数,根据LCD的时序来写 { rw=0; delay_lcd(5); rs=0; delay_lcd(5); e=1; delay_lcd(5); P0=com; delay_lcd(5); e=0; delay_lcd(5); }

void write_date(uchar date) //写数据函数,根据LCD的时序来写 { rw=0; delay_lcd(5);

26

基于51单片机的超声波测距系统

rs=1; delay_lcd(5); e=1; delay_lcd(5); P0=date; delay_lcd(5); e=0; delay_lcd(5); }

void Init_LCD(void) //LCD初始化函数 { uchar num; e=0; //时序表e初始为0 write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口 write_com(0x0c); //设置光标 write_com(0x06); //光标自动加1,光标输入方式 write_com(0x01); //清屏 write_com(0x80); //设置初始显示位置 for(num=0;num<16;num++) //显示table3[]的内容 { write_date(table3[num]); delay_lcd(5); } write_com(0x80+0x40); for(num=0;num<16;num++) //显示table2[]的内容 { write_date(table2[num]); delay_lcd(5); } }

void temperature_dispaly(char add,char dat) //温度显示函数:第一个:参数的地址,第二个:参数的内容 { uchar shi,ge; shi=dat/10; //把温度的十位提取出来 ge=dat%10; //把温度的个位提取出来 write_com(0x80+add); //要写的地址 write_date(0x30+shi); //十位的内容 1602字符库 write_date(0x30+ge); //个位的内容 1602字符库 }

void Display(uchar add,uint dat) //显示避障距离

27

基于51单片机的超声波测距系统

{ uchar bai,shi,ge; bai=dat%1000/100; //取出百位 shi=dat%1000%100/10; //取出十位 ge=dat%1000%10%10; //取出个位 write_com(0x80+add); write_date(0x30+bai); write_date(0x30+shi); write_date(0x30+ge); }

void Display_ASIIC(uchar add) //显示符号 { write_com(0x40+0x80+add); write_date(0x2d); write_date(0x2d); write_date(0x2d); }

/********************************************************/ void Conut(void) { time=TH0*256+TL0; //计算时间,单位是us TH0=0; //时间清除 TL0=0; //时间清除 S=(time*(Speed/200))/100; //Speed单位是m/s,转换后距离单位是cm if((S>=700)||(flag==1)) //超出测量范围或超时显示\"-\" { flag=0; //清除定时器T0中断标志位 Display_ASIIC(10); } else { Display(0x40+10,S); //显示距离 } if(S=S_SET)

28

基于51单片机的超声波测距系统

{ BEEP=0; //关闭蜂鸣器 LED=1; //关闭LED灯 } }

/********************************************************/ void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围 { flag=1; //在TMOD=0x11定义下,定时器最多定时65535us,这段时间超声波走过的距离为:65535*1.7/100=1114095cm //显然距离明显超出范围,因此,当定时时间到仍未接收到超声波,中断溢出标志置位,则让其显示\"-\" }

/********************************************************/

void StartModule() //启动模块 { TX=1; //启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; }

/*********************************************************/

void Timer_init(void)

29

基于51单片机的超声波测距系统

{ TMOD=0x11; //设T0为方式1,GATE=1; TH0=0; //设置初值为0 TL0=0; TH1=(65536-2000)/256; //2MS定时 TL1=(65536-2000)%256; ET0=1; //允许T0中断 ET1=1; //允许T1中断 TR1=1; //开启定时器 EA=1; //开启总中断 }

/*********************************************************/

/****************************************************************************************************/ /*void delay(uint y) //DS18B20延时函数(仿真用) { while(y--); } */

void delay(uint z) //DS18B20延时函数(实物用) { uint x,y; for(x=z;x>0;x--) for(y=1;y>0;y--); }

void write_byte(uint dat) //写一个字节 { uchar i; for(i=0;i<8;i++) //循环八次 共有八位 { DQ=0; //写零 DQ=dat&0x01; //向总线写位数据,从最低位写起 delay(4); DQ=1; //写一 dat>>=1; //下次写作准备,移位数据 } delay(4); }

uchar read_byte(void) //读一个字节,返回值 {

30

基于51单片机的超声波测距系统

uchar i; uint value; for(i=0;i<8;i++) { DQ=0; value>>=1; DQ=1; if(DQ) value|=0x80; //循环八次 共有八位

//释放总线

//DQ=1,value取1

delay(4); } return value; }

void ds18b20_init() { uint n; DQ=1; delay(8); DQ=0; delay(80);

DQ=1; delay(8); n=DQ;

delay(4); }

int readtemperature() {

int a,b;

ds18b20_init(); write_byte(0xcc); 间 write_byte(0x44);

delay(300); ds18b20_init(); write_byte(0xcc); write_byte(0xbe); a=read_byte(); b=read_byte(); b<<=8; b=b|a; if(b>=0)

{

//初始化函数

//低电平480——960us //总线释放 //等待50——100us //读取复位状态

//读整数部分 //高八位,低八位

//跳过rom匹配,跳过读序列号的操作,可节省操作时//启动温度检测 //测温度 //开始操作前需要复位 //跳过rom匹配

//写读寄存器中温度值的命令 //low 低位开始读取 //high 高位开始读取 //把高位左移八位 //高八位与第八位进行或运算,得到总和 //如果温度大于等于0

31

基于51单片机的超声波测距系统

b=b*0.0625; //直接乘以0.0625 write_com(0x80+12); //在LCD1602对应的位置不写内容 write_date(0x20); } else //温度小于0 { b=~b+1; //取反码再加一 b=b*0.0625; //再运算 write_com(0x80+12); //在LCD1602对应的位置写一个负号 write_date(0x2d); } return b; //返回b,此时以表示温度 }

void delayms(unsigned int ms) { unsigned char i=100,j; for(;ms;ms--) { while(--i) { j=10; while(--j); } } }

void Read_Tem(void) { temperature=readtemperature(); //读取实时温度 temperature_dispaly(13,temperature); //显示温度到LCD1602 write_com(0x80+15); //在LCD1602对应的位置写\"C\" write_date(0x43); Speed=0.6*temperature+331.5; //温度补偿,计算超声波在该温度下的传播速度 delayms(10); //10MS }

/***********************按键******************************/ void Keyscan(void) {

32

基于51单片机的超声波测距系统

if(UP==0) { delay_lcd(1); if(UP==0) { while(!UP); S_SET++; if(S_SET>200) { S_SET=10; } } } if(DOWN==0) { delay_lcd(1); if(DOWN==0) { while(!DOWN); S_SET--; if(S_SET<10) { S_SET=200; } } } Display(0,S_SET); }

/*********************************************************/ void main(void) { BEEP=0; //关闭蜂鸣器 Timer_init(); //定时器初始化 Init_LCD(); //液晶屏初始化 while(1) { Read_Tem(); //读取温度并计算传播速度 StartModule(); //启动发送 while(!RX); //当接收为0时,表示没接收到超声波,此时程序停在这里,直到开始有接收,while(1);表示停 TR0=1; //开始有信号传入,开启定时器T0计数 while(RX); //当接收为1时,表示接收到超声波,此时程序停

33

基于51单片机的超声波测距系统

在这里,直到开始接收结束,while(0);表示跳过 TR0=0; //信号传入结束,关闭定时器T0计数 Conut(); //计算并显示距离 Keyscan(); //扫描按键 } }

34

因篇幅问题不能全部显示,请点此查看更多更全内容

Top