基于单片机的超声波测距仪设计与制作

发布时间:2018-09-05 01:30:22   来源:文档文库   
字号:

[ ]

目: 基于单片机的超声波测距仪设计与制作

院: 电气与信息工程学院

业: 电子信息工程

名:

号:

指导老师: 郭蓓蕾

完成时间: 2013531

随着社会的发展,人们对距离或长度测量的要求越来越高。在社会生活中应用超声波测距技术已很广泛,如汽车倒车雷达、测距仪和物位测量仪等都可以通过超声波来实现。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波测距技术的研究和开发具有实际意义。

本文介绍了一种利用超声波测距的系统,该系统是一种基于AT89C52单片机的超声波测距系统,它根据超声波在空气中传播的反射原理,以超声波传感器为检测部件,应用单片机技术和超声波在空气中的时间差来测量距离。该系统主要由主控制器模块、超声波发射模块、超声波接收模块和显示模块等四个模块构成。通过单片机的I/O口控制超声波发射电路发出40KHz的超声波,反射波经由超声波检测接收电路、放大电路送入单片机外部中断端,通过计算超声波的发射和返回的时间,确定超声波发生器和反射物体之间的距离,完成测距。

整个硬件电路由超声波发射电路、超声波接收电路、电源电路、显示电路等模块组成。各探头的信号经单片机综合分析处理,实现超声波测距仪的各种功能。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。相关部分附有硬件电路图、程序流程图,给出了系统构成、电路原理及程序设计。此系统具有易控制、工作可靠、测距准确度高、可读性强和流程清晰等优点。实现后的作品可用于需要测量距离参数的各种应用场合。

关键词AT89C52,超声波,LED数码管,测距



Abstract

With the development of society, the demand on the measurement of distance or length is increasing. It is applied widely by ultrasonic to measure distance, such as cars reversing radar range finder and level measurement and so on. Because of the strong point of ultrasonic, low energy consumption, long distance transporting in media, thus it is practical and significant to measure distance by ultrasonic.

In this paper, it introduces a system to measure distance by ultrasonic, which is based on the AT89C52.The theory is based on the principles of reflection of ultrasonic spreading in the air. The system uses ultrasonic sensors as a detector, and applies MCU and the time difference of ultrasonic spreading in the air to measure the distance. The system consists of the main controller module, ultrasonic transmitter module, ultrasonic receiver module and display module. The MCU I / O port controls ultrasonic transmitter to send 40 KHz ultrasonic, and the reflecting signal is received by the ultrasonic receiver circuit, and it is amplified, and finally, it starts the interrupter of the MCU.The MCU calculates the time of launch and return of ultrasonic to get the distance between the ultrasonic generator and the reflective objects.

The entire hardware circuit is composed by ultrasonic transmitter circuit, ultrasonic receiver circuit, the power circuit, display circuit, and other modules. The probe signals are integrated analysised by SCMC to achieve the various functions of ultrasonic distance measurement instrument. Based on this has designed system's overall concept, final adoption of hardware and software to achieve the various functional modules. The relevant parts have the hardware schematics and process flow chart. It has given the system constitution, the circuitry and the programming. The instrument system has features: ease of control, stability of operation, highness of precision and distinctness of programmed process, etc. After the realization of the works can be used for needs of the various parameters measured distance applications.

Keywords: AT89C52, Ultrasonic wave, LED digital tube, Measure distance





1 绪论

1.1 课题研究的背景

人们生活水平的提高,城市发展建设加快,城市给排水系统也有较大发展,其状况不断改善。但是,由于历史原因和城市居住的许多不可预见因素,城市给排水系统,特别是排水系统往往落后于城市建设。因此,经常出现开挖已经建设好的建筑设施来改造排水系统的现象。城市污水给人们带来了困扰,因此箱涵的排污疏通对大城市给排水系统污水处理,人们生活舒适显得非常重要。而设计研制箱涵排水疏通移动机器人的自动控制系统,保证机器人在箱涵中自由排污疏通,是箱涵排污疏通机器人的设计研制的核心部分。控制系统核心部分就是超声波测距仪的研制。

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

1.2 课题研究的意义

在现实生活中,一些传统的距离测量方式在某些特殊场合存在不可克服的缺陷,例如,液面测量就是一个距离测量,传统的电极法是采用差位分布电极,通过给电或脉冲检测液面,电极长期浸泡在水中或其它液体中,极易被腐蚀、电解,从而失去灵敏性。而利用超声波测量距离可以很好地解决这一问题。目前市面上常见的超声波测距系统不仅价格昂贵,体积过大而且精度也不高等种种因素,使得在一些中小规模的应用领域中难以得到广泛的应用。为解决这一系列难题,本文设计了一款基于AT89C52单片机的低成本、高精度、微型化的超声波测距仪。

1.3 论文框架

论文首先对课题的背景和意义进行阐述,并概述了论文结构。

2章先就超声波测距的原理进行了详细介绍。

3章针对本文采用的设计方案进行了可行性的论证,并得出了系统结构框图。

4章介绍了设计中需要用到的主要器件,且因其在本设计的作用不同而详尽程序亦不同。

5章从整体硬件设计出发,对各部分电路进行了详细说明。

6章先给出了软件设计的整体流程图,并且对关键部分软件设计做了进一步的解释。

程序编译及系统仿真也是本文的一个要点,所以特别分出一章来详细介绍了程序编译的环境和编译的步骤以及仿真的环境和部分仿真的效果图。



2 基于单片机的超声波测距原理

2.1 超声波简介

我们知道,当物体振动时会发出声音。科学家们将每秒钟振动的次数称为声音的频率,它的单位是赫兹。我们人类耳朵能听到的声波频率为2020000赫兹。当声波的振动频率大于20000赫兹或小于20赫兹时,我们便听不见了。因此,我们把频率高于20000赫兹的声波称为“超声波”。通常用于医学诊断的超声波频率为15兆赫。超声波具有方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远等特点。可用于测距,测速,清洗,焊接,碎石等。在医学,军事,工业,农业上有明显的作用。

理论研究表明,在振幅相同的条件下,一个物体振动的能量与振动频率成正比,超声波在介质中传播时,介质质点振动的频率很高,因而能量很大。在我国北方干燥的冬季,如果把超声波通入水罐中,剧烈的振动会使罐中的水破碎成许多小雾滴,再用小风扇把雾滴吹入室内,就可以增加室内空气湿度。这就是超声波加湿器的原理。对于咽喉炎、气管炎等疾病,药品很难血流到患病的部位。利用加湿器的原理,把药液雾化,让病人吸入,能够疗效。利用超声波巨大的能量还可以使人体内的结石做剧烈的受迫振动而破碎。

2.2 超声波测距原理

超声波是利用反射的原理测量距离的,被测距离一端为超声波传感器,另一端必须有能反射超声波的物体。测量距离时,将超声波传感器对准反射物发射超声波,并开始计时,超声波在空气中传播到达障碍物后被反射回来,传感器接收到反射脉冲后立即停止计时,然后根据超声波的传播速度和计时时间就能计算出两端的距离。测量距离D

2.1

式中 c——超声波的传播速度;

——超声波发射到接收所需时间的一半,也就是单程传播时间。

由上式可风,距离的测量精度主要取决于计时精度和传播速度两方面。计时精度由单片机定时器决定,定时时间为机器周期与计数次数的乘积,可选用12MHz的晶振,使机器周期为精确的1µs,不会产生累积误差,使定时间达到1µs。超声波的传播速度c并不是固定不变的,传播速度受空气密度、温度和气体分子成分的影响,关系式为

2.2

式中 γ——气体定压热容与定容热容的比值,空气为1.40

R——气体普适常数,为8.314kg/mol

T——气体势力学温度,与摄氏温度的关系是T=273K+t

M——气体相对分子质量,空气为28.8×10-3kg/mol

c0——0℃时的声波速度,为331.4m/s

由上式可见,超声波在空气中传播时,受温度影响最大,由表达式可计算出波速与温度的关系。温度越高,传播速度越快,而且不同温度下传播速度差别非常大,例如0℃时的速度为332m/s30℃时的速度为350m/s,相差18m/s。因此,需要较高的测量精度时,进行温度补偿是最有效的措施。对测量精度要求不高时,可认为超声波在空气中的传播速度为340m/s



3 课题设计方案制定

3.1 设计思路

测量距离方法有很多种,短距离可以用尺,远距离有激光测距等,超声波测距适用于高精度中长距离测量。因为超声波在标准空气中传播速度为331.45/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统测量精度理论上可以达到毫米级。

目前比较普遍的测距的原理:通过发射具有特征频率的超声波对被摄目标的探测,通过发射出特征频率的超声波和反射回接收到特征频率的超声波所用的时间,换算出距离,如超声波液位物位传感器,超声波探头,适合需要非接触测量场合,超声波测厚,超声波汽车测距告警装置等。

由于超声波指向性强,能量消耗缓慢,在介质中传播距离远,因而超声波可以用于距离测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到要求。由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。通过分析超声波测距误差产生的原因,提高测量时间差到微秒级,以及用温度传感器进行声波传播速度的补偿后,我们设计的高精度超声波测距仪能达到毫米级的测量精度。

目前超声波测距已得到广泛应用,国内一般使用专用集成电路根据超声波测距原理设计各种测距仪器,但是专用集成电路的成本较高、功能单一。而以单片机为核心的测距仪器可以实现预置、多端口检测、显示、报警等多种功能,并且成本低、精度高、操作简单、工作稳定、可靠。以8051为内核的单片机系列,其硬件结构具有功能部件齐全、功能强等特点。尤其值得一提的是,出8CPU外,还具备一个很强的位处理器,它实际上是一个完整的位微计算机,即包含完整的位CPU,位RAMROMEPROM),位寻址寄存器、I/O口和指令集。所以,8051是双CPU的单片机。位处理在开关决策、逻辑电路仿真、过程测控等方面极为有效;而8位处理则在数据采集和处理等方面具有明显长处。

根据设计要求并综合各方面因素,可以采用AT89C52单片机作为主控制器,它控制发射触发脉冲的开始时间及脉宽,响应回波时刻并测量、计数发射至往返的时间差。利用软件产生超声波信号,通过输出引脚输入至驱动器,经驱动器驱动后推动探头产生超声波;超声波信号的接收采用锁相环LM567对放大后的信号进行频率监视和控制。一旦探头接到回波,若接收到的信号频率等于振荡器的固有频率(此频率主要由RC值决定),则其输出引脚的电平将从“1”变为“0”(此时锁相环已进入锁定状态),这种电平变化可以作为单片机对接收探头的接收情况进行实时监控。可对测得数据优化处理,并采用温度补偿,使测量误差降到更低限度;AT89C52还控制显示电路,用动态扫描法来实现LED数字显示。

3.2 系统总体结构设计

超声波测距仪系统结构如图3.2所示。它主要由单片机、超声波发射及接收电路、超声波传感器、LED显示电路及电源电路组成。系统主要功能包括:

1) 超声波的发射、接收,并根据计时时间计算测量距离;

2) 通过LED电源指示灯,检测电源电路是否正常工作;

3) LED显示器显示距离;

4) 单片机综合处理接收到的数据;

5) 当系统运行不正常时,用上电复位电路复位。

3.2 超声波测距仪系统结构框图



4 硬件电路的主要元器件介绍

4.1 单片机AT89C52

单片机即单片微型计算机SCMCSingle Chip Micro Computer)。它把构成一台计算机的主要功能部、器件,如CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)、中断系统、定时/计数器等集中在一块芯CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)制功能,所以又称为微控制器MCUMicrocontroller Unit)。相对于普通微机,单片机的体积要小得多,一般嵌入到其他仪器设备里,实现自动检测与控制,因此也称为嵌入式微控制器EMCUEmbedded Microcontroller Unit)

本设计的MCU采用的是DIPDual In-line Package塑料双列直插式)封装的AT89C52高性能8位单片机。AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C52提供了高性价比的解决方案。

AT89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含3个外中断口,216位可编程定时计数器,2个全双工串行通信口,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。其引脚图如右图4.1.1

AT89C52的引脚功能有: 4.1 .1 AT89C52的引脚图

1) 主电源引脚

VSS——20脚,电路接地电平。

VCC——40脚,正常运行和编程校验+5V电源。

2) 时钟源

XTAL1——19脚,一般外接晶振的一个引脚,它是片内反相放大器的输入端口。当直接采用外部信号时,此引脚应接地。

XTAL1——18脚,接外部晶振的另一个引脚,它是片内反相放大器的输出端口。当采用外部振荡信号源泉时,此引脚为外部振荡信号的输入端口,与信号源相连接。

3) 控制、选通或复用

RST/VPD——9脚,RESET复位信号输入端口。当单片机正常工作时,由该引脚输入脉宽为2个以上机器周期的高电平复位信号到单片机。在VCC掉电期间,此引脚(VPD)可接通备用电源,以保持片内RAM信息不受破坏。

——30脚,输出允许地址锁存信号。当单片机访问外部存储器时,ALE信号的负跳变将P0口上的低8位地址送入锁存器。在非访问外部存储器期间,ALE仍以1/6振荡频率固定不变地输出,因此它可对个输出或用于定时目的。要注意的是:每当访问外部存储器时将跳过一个ALE脉冲。为第二功能,当对片内程序存储器编程写入时,此引脚作为编程脉冲输入端。

——29脚,访问外部程序存储器选能信,低电平有效。当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的信号不出现。

:外部访问允许。欲使CPU访问外部程序存储器(地址0000H-FFFFH),端必须保持低电平(接地)。需注意的是:如果加密位LBI被编程,复位时内部会锁存端状态。Flash存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP

4) 多功能I/O端口

P0——32~39脚,8位漏极开路双向I/O端口。作为输出口用时,每位能吸收电流的方式驱动8TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问数据存储器或程序存储器时,这组口线分时转换地址和数据总线复用,在访问期间激活内部上拉电阻。

P1——1~8脚,具有内部上拉电路的8位准双向I/O端口。在对片内程序存储器(EPROM型)进行程序编程和校验时,用做低8位地址总线。

P2——21~28脚,具有内部上拉电路的8位准双向I/O端口。当单片机访问存储器时,用做高8位地址总线;在对片内程序存储器(EPROM型)进行程序编程和校验时,亦用做高8位地址总线。

P3——10~17脚,具有内部上拉电路的8位准双向I/O端口。它还提供特殊的第二变异功能。它的每一位均可独立定义为第一功能的I/O口或第二变异功能。第二变异功能的具体含义如表4.1.2

端口引脚

第二功能

P3.0

RXD (串行输入口)

P3.1

TXD (串行输出口)

P3.2

(外中断0

P3.3

(外中断1

P3.4

T0 (定时/计数器0

P3.5

T1 (定时/计数器1

P3.6

(外部数据存储器写选通)

P3.7

(外部数据存储器读选通)

4.1.2 P3口的第二变异功能

4.2 超声波传感器

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

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

超声波传感器结构如下:

5 超声波测距硬件电路设计

5.1 超声波发射电路

超声波发射电路原理图如图5.1所示。发射电路主要由反相器74HC04和超声波发射换能器T40构成,单片机P3.3端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采用两个反向器并联,用以提高驱动能力。上位电阻R1R5一方面可以提高反向器74HC04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。

5.1 超声波发射电路原理图

5.2 超声波接收电路

超声波接收包括接收探头,信号放大以及波形变换电路三部分,超声波接收探头必须与发送探头相同的型号,否则可能导致接收效果甚至不能接收。由于超声波接收探头的信号非常弱,所以必须用放大器放大,放大后的正弦波不能被微处理器处理,所以必须经过波形变换。

本次设计为了降低调试难度,减少成本,提供系统可靠性,所以我们采用了一种用在彩色电视机上面的一种红外接收检波芯片CX20106A,由于红外遥控的中心频率在38KHz,和超声波的40KHz很接近,所以可以用来做接收电路。CX20106A是日本索尼公司的产品,采用单列8引脚的直插式封装,内部包含自动偏置控制电路、前置放大电路、带通滤波、峰值检波、积分比较器、斯密特整形输出电路,配合少量外接元件就可以对38KHz左右的信号的接收与处理。

超声波接收电路如图5.2所示。

5.2 超声波接收电路

5.3 四位LED数码管显示电路

显示电路如图5.3,四位LED组成动态扫描电路,由AT89C52P0口输出。动态扫描时,由P2口控制LED的当前显示位。当距离测量结束并调用显示程序,就会显示距离大小,显示两位小数。

超声波显示电路如图5.3所示:

5.3 显示电路

5.3超声波显示电路

5.4 USB供电电源电路

电源电路如图5.4所示。为方便起见,本设计采用的是5V USB供电,输出+5V稳恒直流电,作为电路的电源。LED是电源指示灯,通电后发光。

5.4 电源电路

5.5 单片机复位电路

AT89C52复位有一个专用的外部引脚RESET,外部可通过此引脚输入一个正脉冲使单片机复位。所谓复位,就是强制单片机系统恢复到确定的初始状态,并使系统重新从初始状态开始工作。本设计采用的是电平式开关与上电复位电路,为了能使运行中的系统,经人工干预,强制系统进行复位。

复位电路图如5.5所示:



6 软件控制程序的设计与概述

6.1 主程序流程

主程序对整个单片机系统进行初始化后,先将超声波的回波接收标志位置位并且使单片机P3.3端口输出一个低电平用来启动超声波发射电路,同时将定时器T0启动,然后调用距离计算的子程序,再根据定时器T0记录的时间计算出所需要测量的距离,然后再调用显示子程序,再将测出的距离以十进制的形式送到数码管显示。最后主程序通过对回波信号的接收,完成后续的工作,假如标志位清零则说明接收到了回波信号,那么主程序就返回到初始端重新将回波接收标志位置位,并且在单片机的P3.3端口上发送低电平到超声波发射电路,就这样,连续不断地运行,循环不断地工作用来实现测距。

整个系统的设计的关键是对距离进行测量的,然后通过单片机来处理测量数据是比较容易实现的,能精确的实现测距。在测距中,各种信号包括温度对声速的影响都将干扰到测距的准确性,其中超声波的余波信号对整个设计中测距的精确度的干扰的影响比较大。超声波接收回路中的超声波信号一共有两种波信号:第一种波信号为余波信号就是当发射探头发射出信号之后,超声波接收探头马上就接收到的超声波信号,实际就是超声波的发射信号;另一种波信号就是有效信号,即经过障碍物表面反射回来的超声波回波信号,也是所需要测量的距离数值。

在进行超声波测距时,实际上测距就是记录从超声波发射电路发射超声波信号开始到接收到信号的声波的往返时间差,然后通过数据计算出距离,对于回波信号需要进行检测的有效信号是反射物体反射的回波信号,所以要尽量避免在检测时候检测到余波信号。余波就是在发射超声波时超声波信号直接到达接收探头的波信号,同时余波信号也是超声波测量时存在测量盲区的最主要的原因。

超声波接收电路在接收到超声波回波后,通过CX20106A电路进行检波整形比较,并向单片机发出有效信号,单片机通过外部中断的改变记录回波信号的到达时间,中断发生之后就是表示已经接收到了回波信号,这个时候停止计时,并且读取计数器中的数值,这个数值就是需要进行测量的时间差的数据。

程序中对测距距离的计算方法是按S=17×N/1000=0.017×N(cm)进行计算的,其中,N为计数器的值,声速的值取为340 m/s

综合以上的分析可得到系统主程序流程图,系统主程序的流程图如图6.1所示。

6.1 系统主程序流程图

6.2 子程序设计

6.2.1 声波发送子程序及超声波接收中断子程序

超声波发生子程序的作用是通过P3.3端口发送超声波脉冲信号(频率约40kHz的方波),脉冲宽度为12μs左右,同时把计数器T1打开进行计时,定时器T1工作在方式0

超声波测距仪主程序利用外中断1检测返回超声波信号,一旦接收到返回超声波信号(即引脚出现低电平),立即进入中断程序。进入中断后就立即关闭计时器T1停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T1溢出中断将外中断1关闭,并将测距成功标志字赋值0表示此次测距不成功。

T0中断服务程序如下:

sbit send=P3^3;

void timer0(void)interrupt 1

{ send=!send;

TH0=0x1f;

TL0=0xf4;

}

超声波接收(外部中断1)程序:

void int1(void)interrupt 2

{ if(TH1!=0x00&&TH0!=0x00)

{ b=1;

TR1=0;

TR0=0;

t=TH1*256+TL1;

t=t/1000000;

TH0=0x1f;

TL0=0xf4;

TH1=0x00;

TL1=0x00;

}

else

{ b=0;

TR1=0;

TR0=0;

TH0=0x1f;

TL0=0xf4;

TH1=0x00;

TL1=0x00;

} }

6.2.2 距离计算子程序

当超声波往返时间测量出来后,用C语言根据公式计算距离来编程是比较简单的算法。

根据测量距离,而其中,故可简化为: ,其实现程序算法如下:

#include

void distance(void)

{

double radical,dist,t;

radical=sqrt(1+(temnum+273)/273);

dist=165.7*t*radical;

return(dist);

}

6.2.3 显示子程序

显示电路由四位LED组成动态扫描电路,编程比较简单,详情可见附录B

7 软件调试及系统仿真

7.1 软件编译调试环境——Keil

单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会事半功倍。

7.2 Keil工程文件的建立、设置与目标文件的获得

7.2.1 Keil工程的建立

首先启动Keil软件的集成开发环境,如果已正确安装了该软件,可以从桌面上直接双击uVision的图标以启动该软件。uVison启动后,程序窗口的左边有一个工程管理窗口,该窗口有3个标签,分别是FilesRegs、和Books,这三个标签页分别显示当前项目的文件结构、CPU的寄存器及部份特殊功能寄存器的值(调试时才出现)和所选CPU的附加说明文件,如果是第一次启动Keil,那么这三个标签页全是空的。

1) 源文件的建立

使用菜单“File->New”或者点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新的文本编缉窗口,在该窗口中输入汇编语言或C语言源程序,然后保存该文件,注意必须加上扩展名(汇编语言源程序一般用asma51为扩展名,而C语言源程序一般用为扩展名),这里假定将文件保存为exam1.asm。需要说明的是,源文件就是一般的文本文件,不一定使用Keil软件编写,可以使用任意文本编缉器编写,而且,Keil的编缉器对汉字的支持不好,建议使用UltraEdit之类的编缉软件进行源程序的输入。

2) 建立工程文件

在项目开发中,并不是仅有一个源程序就行了,还要为这个项目选择CPUKeil支持数百种CPU,而这些CPU的特性并不完全相同),确定编译、汇编、连接的参数,指定调试的方式,有一些项目还会有多个文件组成等,为管理和使用方便,Keil使用工程(Project)这一概念,将这些参数设置和所需的所有文件都加在一个工程中,只能对工程而不能对单一的源程序进行编译(汇编)和连接等操作。点击“Project->New Project…”菜单,出现一个对话框,要求给将要建立的工程起一个名字,可以在编缉框中输入一个名字(设为exam1),不需要扩展名。点击“保存”按钮,出现第二个对话框,如图7.1所示:

这个对话框要求选择目标CPUKeil支持的CPU很多,我们选择Atmel公司的89C51芯片。点击ATMEL前面的“+”号,展开该层,点击其中的89C51,然后再点击“确定”按钮,回到主界面,此时,在工程窗口的文件页中,出现了“Target1”,前面有“+”号,点击“+”号展开,可以看到下一层的“Source Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图7.2所示。

选中其中的“Add file toGroupSource Group1”,出现一个对话框,要求寻找源文件,注意:该对话框下面的“文件类型”默认为C source file(*.c),也就是以C为扩展名的文件,而我们的文件是以asm为扩展名的,所以在列表框中找不到exam1.asm,要将文件类型改掉,点击对话框中“文件类型”后的下拉列表,找到并选中“Asm Source File(*.a51,*.asm),这样,在列表框中就可以找到exam1.asm文件了。双击exam1.asm文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,如果误认为操作没有成功而再次双击同一文件,这时会出现重复加入文件错误的对话框,提示你所选文件已在列表中,此时应点击“确定”,返回前一对话框,然后点击“Close”即可返回主界面,返回后,点击“SourceGroup 1”前的加号,会发现exam1.asm文件已在其中。双击文件名,即打开该源程序。

7.2.2 工程的详细设置

工程建立好以后,还要对工程进行进一步的设置,以满足要求。

首先点击左边Project窗口的Target 1,然后使用菜单“Project->Option for targettarget1’”即出现对工程设置的对话框,这个对话框可谓非常复杂,共有8个页面,要全部搞清可不容易,好在绝大部份设置项取默认值就行了。

设置对话框中的Target页面,如图7.3所示,

Xtal后面的数值是晶振频率值,默认值是所选目标CPU的最高可用频率值,对于我们所选的AT89C51而言是24M,该数值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间。正确设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率相同,如果没必要了解程序执行的时间,也可以不设,这里设置为12Memory Model用于设置RAM使用情况,有三个选择项,Small是所有变量都在单片机的内部RAM中;Compact是可以使用一页外部扩展RAM,而Larget则是可以使用全部外部的扩展RAMCode Model用于设置ROM空间的使用,同样也有三个选择项,即Small模式,只用低于2K的程序空间;Compact模式,单个函数的代码量不能超过2K,整个程序可以使用64K程序空间;Large模式,可用全部64K空间。Use on-chip ROM选择项,确认是否仅使用片内ROM(注意:选中该项并不会影响最终生成的目标代码量);Operating项是操作系统选择,Keil提供了两种操作系统:Rtx tinyRtx full,关于操作系统是另外一个很大的话题了,通常我们不使用任何操作系统,即使用该项的默认值:None(不使用任何操作系统);Off Chip Code memory用以确定系统扩展ROM的地址范围,Off Chip xDatamemory组用于确定系统扩展RAM的地址范围,这些选择项必须根据所用硬件来决定,由于该例是单片应用,未进行任何扩展,所以均不重新选择,按默认值设置。

设置对话框中的OutPut页面,如图7.4所示,

7.4 对输出进行控制

这里面也有多个选择项,其中Creat Hex file用于生成可执行代码文件(可以用编程器写入单片机芯片的HEX格式文件,文件的扩展名为.HEX),默认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项,在此特别提醒注意。选中Debug information将会产生调试信息,这些信息用于调试,如果需要对程序进行调试,应当选中该项。Browse information是产生浏览信息,该信息可以用菜单view->Browse来查看,这里取默认值。按钮“Select Folder for objects”是用来选择最终的目标文件所在的文件夹,默认是与工程文件在同一个文件夹中。Name of Executable用于指定最终生成的目标文件的名字,默认与工程的名字相同,这两项一般不需要更改。

工程设置对话框中的其它各页面与C51编译选项、A51的汇编选项、BL51连接器的连接选项等用法有关,这里均取默认值,不作任何修改。以下仅对一些有关页面中常用的选项作一个简单介绍。

Listing标签页用于调整生成的列表文件选项。在汇编或编译完成后将产生(*.lst)的列表文件,在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节,其中比较常用的选项是“C Compile Listing”下的“Assamble Code”项,选中该项可以在列表文件中生成C语言源程序所对应的汇编代码。

C51标签页用于对KeilC51编译器的编译过程进行控制,其中比较常用的是“CodeOptimization”组,如图7.5所示,

7.5 代码生成控制

该组中Level是优化等级,C51在对源程序进行编译时,可以对代码多至9级优化,默认使用第8级,一般不必修改,如果在编译中出现一些问题,可以降低优化级别试一试。Emphasis是选择编译优先方式,第一项是代码量优化(最终生成的代码量小);第二项是速度优先(最终生成的代码速度快);第三项是缺省。默认的是速度优先,可根据需要更改。设置完成后按确认返回主界面,工程文件建立、设置完毕。

7.2.3 编译、连接

在设置好工程后,即可进行编译、连接。选择菜单Project->Build target,对当前工程进行连接,如果当前文件已修改,软件会先对该文件进行编译,然后再连接以产生目标代码;如果选择Rebuild All target files将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate.项则仅对该文件进行编译,不进行连接。以上操作也可以通过工具栏按钮直接进行。图7.6是有关编译、设置的工具栏按钮:

7.6 有关编译连接项目设置的工具条

从左到右分别是:编译、编译连接、全部重建、停止编译和对工程进行设置。编译过程中的信息将出现在输出窗口中的Build页中,如果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,对源程序反复修改之后,最终会得到如图7.7所示的结果:

7.7 正确编译连接之后的结果

提示获得了名为exam1.hex的文件,该文件即可被编程器读入并写到芯片中,同时还产生了一些其它相关的文件,可被用于Keil的仿真与调试,这时可以进入下一步调试的工作。

7.3 系统仿真环境——DXP2004

ProtelDXP2004拓展了Protel软件的原设计领域 Protel DXP功能更加完备、风格更加成熟,并且界面更加灵活,尤其在仿真和PLD电路设计方面有了重大改进,Protel 旧版具有的功能它都具有。

Protel是目前国内最流行的通用EDA软件,它将电路原理图设计、PCB板图设计、电路仿真和PLD设计等多个实用工具组合起来构成EDA工作平台,是第1个将EDA软件设计成基于Windows的普及型产品。 Protel 99SE软件相比,Protel DXP功能更加完备、风格更加成熟,并且界面更加灵活,尤其在仿真和PLD电路设计方面有了重大改进。摆脱了Protel前期版本基于PCB设计的产品定位,显露出一个普及型全线EDA产品崭新的面貌。

7.4 系统仿真

7.4.1 DXP2004工作界面

DXP2004的工作界面是一种标准的Windows界面,如图7.8所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。

7.4.2 DXP2004原理图的绘制

DXP2004中原理图绘制比较简单,具体可参见其帮助,暂不赘述。

7.4.3 仿真

由于DXP2004里没有超声波传感器,也没有能够完全代替它功能元件,所以本设计只叙述其能仿真出来一部分。

1) 仿真编译的实现

一切准备就绪后,点击 compile document mypcb.schdoc,就开始仿真编译了。

7.9为本设计的系统仿真原理图。

7.9 系统仿真原理图

7.5 误差及特性分析

根据超声波的特性,距离测量时必须满足条件:

①被测目标必须垂直于超声波测距仪。

②被测目标表面必须平坦。

③测量时在超声波测距仪周围没有其他可反射超声波的物体。因此在测量过程中稍不小心就会接收不到超声波,而导致没有测量结果。

硬件电路制作应避免出现虚焊或焊接短路的情况,完成并调试好后,便可将程序文件下载到单片机芯片试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲个数和两次测量的间隔时间,以适应不同距离的测量需要。

根据文中电路参数和程序,测距器可测量的范围为0.07~1.5m,在试验中对测量范围0.03~2.0m内的物体做了多次测试,经过多次测量发现,在同一温度下有如下规律:

(1)对于同一距离进行多次测量取平均值的方法,所测数据稳定性较好1.5m范围内变化平均值误差最大不超过1cm;

(2)测量误差随着所测距离的增大而增大。

这里的误差包含两种:一种是固定误差测量的起始位置与探头的压电晶片所在位置之间的距离,这种误差不随测量环境和距离的变化而变化;另一种是可变误差随着距离的增大而增大,主要是由接收超声波越过阀值的时间与超声波实际到达探头的时间不同引起的。

37cm以内是盲区。

误差分析:

声波传输速度与媒介的弹性模量和密度相关,因此,利用声速测量距就要考虑这些因素对声速影响。在气体中,压强、温度、湿度等因素会引密变化,气体中声速主要受密度影响。液体的深度、温度等因素会引起度变化,固体中弹性模量对声速影响较密度影响更大。一般超声波在固体传播速度最快,液体次之,在气体中的传播速度最慢。气体中声速受温度影响最大‘声波扰动是机械的,声波在传播中带有机械能量,声能传播的中逐渐转变成热,从而出现随距离而逐渐衰减的现象,称为声吸收。



超声波测距的原理是利用超声波的发射和接收,根据超声波传播的时间来计算出传播距离。实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;另一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪;此次设计采用反射波方式。

超声波测距仪硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。单片机采用AT89C52。采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P3.3端口输出超声波换能器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,位码用PNP三极管S8550驱动。

超声波测距仪的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而超声波测距仪的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序可采用C语言编程。

利用51系列单片机设计的测距仪便于操作、读数直观。经实际测试证明,该类测距仪工作稳定,能满足一般近距离测距的要求,且成本较低、有良好的性价比。由于该系统中锁相环锁定需要一定时间,测得的距离有误差,在汽车雷达应用中可忽略不计;但在精度要求较高的工业领域如机器人自动测距等方面,此误差不能忽略,可以通过改变一些硬件的应用实现对超声波的快速锁定或根据自己的需要在程序中加入测距软件补偿的代码,使误差进一步减小,可以满足更高要求。

本设计完整地做出之后可测量两米以内的距离。因为超声波的特性,测距时保证传感器与被测物间,以及测量轴线上没有障碍物;且要尽量保证传感器轴线与被测物表面垂直;实际测距范围与被测物表面材料等因素有关,一般不要测量表面为毛料的物体表面。



参考文献

[1] 林伟, 梁家宁, 李才安. 便携式多功能超声波测距仪的设计与实现[J]. 电子测量技术2008, (01): 29-31.

[2] 陈美銮, 尹浩, 黎飘, 董博然. 智能盲人导行仪的设计与实现[J]. 电子技术应用, 2006,(10): 2-5.

[3] 罗庆生, 韩宝玲. 一种基于超声波与红外线探测技术的测距定位系统[J]. 计算机测量与控制, 2005,(04): 1-3.

[4] 高飞燕. 基于单片机的超声波测距系统的设计[J]. 信息技术, 2005,(07): 43-45.

[5] 赵海鸣,卜英勇, 王纪婵, 周知进. 一种高精度超声波测距方法的研究[J]. 湖南科技大学学报(自然科学版), 2006,(03): 8-10.

[6] 路锦正, 王建勤, 杨绍国, 赵珂, 赵太飞. 超声波测距仪的设计[J] .传感器技术, 2002,(08): 9-11.

[7] 牛余朋, 成曙. 基于单片机的超声波测距系统[J]. 兵工自动化, 2005, (04): 44-46.

[8] 张健, 李钢. 超声波测距系统的研究与设计[J]. 合肥工业大学学报(自然科学版), 2004,(06): 13-15.

[9] 李建树, 刘伟华, 涂亚庆. 提高超声液位测量精度的新方法[J]. 自动化与仪表, 1997,(01): 3-5.

[10]阮成功, 蓝兆辉, 陈硕. 基于单片机的超声波测距系统[J]. 应用科技, 2004, (07): 8-10.

[11]童峰, 许水源, 许天增. 一种高精度超声波测距处理方法[J]. 厦门大学学报(自然科学版), 1998,(04)810.

[12]孙育才,孙华芳,王荣兴. 单片机原理及其应用[]. 北京:电子工业出版社,20061287.

[13]王丰,栾学德. 单片机原理与应用技术[]. 北京:北京航空航天大学出版社,2007254261.

[14]胡大可,李培弘,方路平. 基于单片机8051的嵌入式开发指南[]. 北京:电子工业出版社,20031150.

[15]求是科技. 单片机通信技术与工程实践[]. 北京:人民邮电出版社,20051191.

[16]潭浩强. C程序设计[]. 北京:清华大学出版社,20051378.

[17]林志琦,郎建军,李会杰,佟大鹏. 基于Proteus的单片机可视化软硬件仿真[]. 北京:北京航空航天大学出版社,2006193.

[18]华中理工大学电子学教研室编. 电子技术基础数字部分(第四版) []. 北京:高等教育出版社,2004: 371-377.

[19] 陈兴梧,刘鸣,赵煜,赵慧影. 数字式温度计DS18B20的特性及应用[EB/OL. http://www.eeworld.com.cn/designarticles/measure/200605/1976.html.



从开始做论文到论文基本完成,经历了很长一段时间,从开始的一知半解到现在的全面了解算是经历了一个漫长的过程。在这个过程中有很数人给予我莫大的帮助。

首先要感谢的是我的指导老师郭蓓蕾老师。感谢她在此次毕业设计过程中给予我的悉心指导与各方面的帮助,她给了我许多非常有益的建议和意见,使我在思路上得到了很大的开阔,从中认识到了自己存在的不足,并且学到了很多非常宝贵的知识。她严谨的治学态度和踏实的工作作风也给我留下了非常深刻的印象。我不仅学到了课题设计研究的方法,还明白了一个很重要的道理:做学问应以科学严谨的态度,并且要脚踏实地认真去做,切不可好高骛远,急躁冒进。这些都使我受益匪浅,也极大的激励了我,使我能在紧张的时间里完成我的毕业设计并达到设计要求。还要感谢给我们提供优越学习条件和优良仪器的各位老师。同时也要感谢班里其他同学在设计中给我提供的帮助和支持,以及各位老师对我论文的悉心审阅与批评指正。

其次我要感谢和我度过四年大学生活的同学,因为没有你们的帮助我是无法顺利地完成这个课题的!还有个别同学的专业知识让我深表佩服,以及他助人为乐的精神让我无法忘却,从心里表示的深深感谢!

还有我的母校,它给我提供了良好的学习环境,使我可以在这里学习自己喜欢的专业知识和技能。大学是个令人难忘的地方,在这里的生活记忆是我印象最深刻的,也是最美好的。

最后祝愿我的母校祝越来越美丽。祝福老师们身体健康,工作顺利!同学们都能找到称心如意的好工作!

学生签名:岳晓帅

期:2013531



附录A 整体电路图



附录B 程序清单

#include

#include

//#include

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

bit symbol;

uchar dispbit[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x00,0xff,0x7f}; //共阳数码管

uchar scanbit[4]={0xfe,0xfd,0xfb,0xf7};

sbit transmit=P3^3; //发射口

data uchar testok;

void delayus(unsigned char t) //延时函数

{

while(--t);

}

void display(uchar *temp)

{

uchar i;

for(i=0;i<4;i++)

{

if(i==2&&symbol==1)

P0=dispbit[*temp]&0x7f;

else P0=dispbit[*temp];

P2=scanbit[i];

delayus(200);

temp++;

P0=0xff;

P2=0xff;

}

}

void cs_t()

{

uchar i;

TH0=0;

TL0=0;

transmit=1;

TR0=1;

for(i=0;i<10;i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

transmit=~transmit;

}

transmit=1;

}

void main(void)

{

uchar data dispram[4]={0x0a,0x0a,0x0a,0x0a};

data uint i;

data ulong time;

// data ulong temp;

symbol=0;

P0 = 0xff;

P2=0xff;

TMOD = 0x11;

IE = 0x80;

while (1)

{

cs_t();

delayus(10);

testok = 0;

EX0 = 1;

ET0 = 1;

while (!testok) display(dispram);

if ( testok==1 )

{

time = TH0;

time = (time<<8) | TL0;

time *=174;

time /= 10000;

dispram[0] = (uchar) (time % 10);

time /= 10;

dispram[1] = (uchar) (time % 10);

time /= 10;

dispram[2] = (uchar) (time % 10);

dispram[3] = (uchar) (time / 10);

if((dispram[2]!=0)|(dispram[3]!=0))symbol=1;

else symbol=0;

}

else

{

dispram[0] = 10;

dispram[1] = 10;

dispram[2] = 10;

dispram[3] = 10;

}

for (i=0; i<10; i++) display(dispram);

}

}

//

void cs_r(void) interrupt 0

{

TR0 = 0;

ET0 = 0;

EX0 = 0;

testok = 1;

}

void overtime(void) interrupt 1

{

EX0 = 0;

TR0 = 0;

ET0 = 0;

testok = 2;

本文来源:https://www.2haoxitong.net/k/doc/220657aa48649b6648d7c1c708a1284ac85005af.html

《基于单片机的超声波测距仪设计与制作.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式