基于51单片机的超声波测距仪之倒车雷达作品设计毕业论文
基于单片机的超声波测距 电子烧友会
基于51单片机的超声波测距仪
之倒车雷达作品设计毕业论文
摘要: 超声波具有指向性强,能量消耗缓慢,传播距离较远等优点,所以,在利
用传感器技术和自动控制技术相结合的测距方案中,超声波测距是目前应用最普遍的
一种,他广泛应用于防盗、倒车雷达、水位测量、建筑施工工地以及一些工业现场。
本课题详细介绍了超声波传感器的原理和特性,以及STC 公司的STC89C52的单
片机的性能和特点,并在分析了超声波测距的原理的基础上,指出了设计测距系统的
不足并加以改进,将温度引起的误差考虑在内并且加以修正,给出了以STC89C52单
片机为核心的低成本、高精度、液晶显示超声波测距系统的硬件电路和软件设计方法。
该系统电路设计合理、工作稳定、性能良好、检测速度快、计算简单并且做到了可设
计报警范围的功能, 在测量精度方面能达到工业使用的要求。
关键词:单片机;液晶显示;报警;测距
Ultrasonic distance measurement based on single chip
Abstract: Ultrasound has a strong point, the energy consumption of the slow
spread of the advantages of distance, so the use of sensor technology and
automatic control technology, the program combines distance, ultrasonic distance measurement is the most common one, and he widely used in security, parking sensor, water level measurement, construction sites and some industrial sites. This subject introduces the principles and characteristics of ultrasonic sensors, and microcontroller STC89C52 STC's performance and characteristics, and the analysis of the ultrasonic distance measurement based on the principle that the
lack of design ranging system and make improvements, will into account the error due to temperature and should be amended to STC89C52 given low-cost
microcontroller as the core, high-accuracy, liquid crystal display ultrasonic
ranging system of hardware and software design methods. The system circuit
design is reasonable, stable, good performance, fast detection of simple
calculation and can be designed to achieve the alarm range of functions to achieve precision in the measurement requirements for industrial use.
Keywords: microcontroller; LCD display; alarm; ranging
目 录
1 绪 论 ............................................................................................................. 6
1.1 研究的背景 ............................................................................................................. 6
1.2研究的主要内容 ...................................................................................................... 6
1.3应解决的关键问题 .................................................................................................. 6
2 电路方案论证 . .............................................................................................. 6
2.1方案比较 .................................................................................................................. 6
2.1.1 激光测距.......................................................................................................................... 6
2.1.2 超声波测距 . ..................................................................................................................... 7
2.2电路总体方案 .......................................................................................................... 7
3单片机概述 .................................................................................................... 8
3.1 STC89C52主要性能 ............................................................................................... 8
3.2 STC89C52外部结构及特性 ................................................................................... 8
3.3 STC89C52内部组成 ............................................................................................... 9
4 超声波测距模块 . ........................................................................................ 11
4.1 超声波传感器介绍 ............................................................................................... 11
4.2 HC-SR04超声波测距模块的性能特点 ............................................................... 12
4.3 HC-SR04的管脚排列和电气参数 ....................................................................... 13
4.3.1 管脚简介........................................................................................................................ 13
4.3.2 HC-SR04的电气参数 . ................................................................................................... 13
4.4超声波时序图 ........................................................................................................ 13
5系统硬件电路设计 . ..................................................................................... 15
5.1单片机最小系统 .................................................................................................. 15
5.1.1 STC89C52芯片 . ............................................................................................................. 15
5.1.2 复位电路........................................................................................................................ 15
5.1.3 晶振电路........................................................................................................................ 16
5.2 驱动显示电路及报警电路 ................................................................................... 17
5.2.1 1602LCD 液晶显示屏 . ................................................................................................ 17
5.2.2 蜂鸣器报警 . ................................................................................................................... 18
5.3 HC-RS04超声波测距原理 ................................................................................... 19
5.4 5V稳压电路 .......................................................................................................... 20
5.5温度检测电路 ........................................................................................................ 20
5.5.1 温度检测方案的分析 . ................................................................................................... 20
5.5.2 数字温度传感器DS18B20简介 .................................................................................. 20
5.5.3 DS18B20的结构及电路 . ............................................................................................... 21
6系统程序的设计 . ......................................................................................... 22
6.1主程序 .................................................................................................................... 22
6.2显示数据子程序 .................................................................................................... 22
6.3报警子程序 ............................................................................................................ 23
6.4按键子程序 ............................................................................................................ 23
结 论 ............................................................................................................... 25
参考文献 ......................................................................................................... 26
附 录(A ) .................................................................... 错误!未定义书签。
附 录(B ) .................................................................................................... 30
致 谢 ............................................................................................................... 48
1 绪 论
1.1 研究的背景
单片机技术的迅速兴起与蓬勃发展,其稳定、安全、高效、经济等优点十分突出,
所以其应用也十分广泛。单片机已经无处不在、与我们生活息息相关,并且渗透到生
活的方方面面,如空调、VCD 机、手机、微波炉、自动洗衣机及汽车电子设备等。单
片机的特点是体积较小,也就是其集成特性,其内部结构是普通计算机系统的简化,
增加一些外围电路,就能够组成一个完整的小系统,单片机具有很强的可扩展性。它
具有和普通计算机类似的、强大的数据处理功能,通过使用一些科学的算法,可以获
得很强的数据处理能力。所以单片机在工业应用中,可以极大地提高工业设备的智能
化、数据处理能力和处理效率,而且单片机无需占用很大的空间。
同时,随着社会的发展和进步,超声波测距系统日益重要,应用范围迅速扩大,
由于超声测距是一种非接触检测技术,不受光线、被测对象颜色等的影响,在较恶劣
的环境(如含粉尘)具有一定的适应能力,因此用途极度广泛。在测绘地形图,建造
房屋、桥梁、道路、开挖矿山、油井等,倒车雷达、建筑施工工地以及一些工业现场,
例如液位、井深、管道长度等场合应用比较普遍。利用超声波检测往往比较迅速、方
便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求。
1.2研究的主要内容
课题《基于单片机的超声波测距》由51单片机最小系统、超声波测距模块、驱
动显示电路、5伏直流稳压电路、温度传感器等组成。利用超声波测距模块HC-SR04
测量距离,并对数据进行分析处理,传给51单片机,再通过1602 LCD 显示出来,同
时电源部分采用5V 稳压直流电源。
1.3应解决的关键问题
1、对主要硬件电路设计、制作实物时拟解决的关键问题是:温度等外界干扰对
测距精度的影响。
2、超声波测距采用软件编程实现,通过仿真验证其正确性。
2 电路方案论证
2.1方案比较
2.1.1 激光测距
激光测距一般采用两种方式来测量距离:脉冲法和相位法。脉冲法测距的过程:
测距仪发射出的激光经被测量物体的反射后又被测距仪接收,测距仪同时记录激光往
返的时间,光速和往返时间的乘积的一半,就是测距仪和被测量物体之间的距离。相
位法测距的过程:用无线电波段的频率,对激光束进行幅度调制并测定调制光往返测
线一次所产生的相位延迟,再根据调制光的波长,换算此相位延迟所代表的距离,即
用间接方法测定出光经过往返测线所需的时间。
2.1.2 超声波测距
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后
遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射电到障碍物的实际
距离,可见这与雷达测距原理相似。超声波发射器向某一方向发射超声波,在发射时
刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接
收器收到反射波就立即停止计时。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简
单,故采用了方案二。
2.2电路总体方案
图2.1是电路总体框图,包括51单片机最小系统,HC-SR04超声波测距模块,
1602 LCD显示电路,蜂鸣器,按键电路,5V 电路。
图2.1 电路基本框图
3单片机概述
3.1 STC89C52主要性能
STC89C52 是STC 公司推出的一款超强抗干扰,加密性强,在线可编程,高速,
低功耗CMOS 8位单片机。片内含 8k bytes 的可反复擦写Flash 只读程序存储器和
256 bytes 的随机数据存储器(RAM ),器件采用STC 公司的高密度、非易失性存储技
术生产,与标准MCS -51指令系统及8052产品引脚兼容, 片内置通用8位中央处理
器 (CPU )和Flash 存储单元, 功能强大的STC89C52单片机适合于许多较为复杂控
制应用场合。
3.2 STC89C52外部结构及特性
其外形封装有两种方式:双列直插式40脚封装(DIP )和方形44脚封装 (PLCC ),
直插式40 脚封装(DIP )和外部总线结构如图2和图3所示:
图3.1 STC89C52引脚排列 图3.2 外部总线
STC89C52的 4 个 8 位I/O口的功能说明如下:
(1)P0口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能
驱动8个TTL 逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部
程序和数据存储器时,P0口也被作为低 8 位地址/数据复用。在这种模式下,P0具
有内部上拉电阻。在flash 编程时,P0口也用来接收指令字节;在程序校验时,输
出指令字节。程序校验时,需要外部上拉电阻。
(2)P1口:P1口是一个具有内部上拉电阻的8位双向 I/O口,p1输出缓冲器
能驱动4个TTL 逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时
可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将
输出电流(IIL )。此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入
(P1.0/T2)和定时器/计数器 2 的触发输入(P1.1/T2EX)。在 flash 编程和校验时,
P1口接收低8位地址字节。
(3)P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器
能驱动 4 个 TTL 逻辑电平。对 P2端口写“1”时,内部上拉电阻把端口拉高,此
时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,
将输出电流(IIL )。在访问外部程序存储器或用 16 位地址读取外部数据存储器(例
如执行MOVX @DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内
部上拉发送 1。在使用8 位地址(如 MOVX @RI)访问外部数据存储器时,P2 口输
出 P2 锁存器的内容。在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一
些控制信号。
(4)P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p2 输出缓冲器
能驱动4个TTL 逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可
以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输
出电流(IIL )。在 flash 编程和校验时,P3 口也接收一些控制信号。P3 口亦作为
AT89C52特殊功能(第二功能)使用,如下所示:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INTO(外部中断0 输入口)
P3.3 INT1(外部中断 1 输入口)
P3.4 TO(定时器 0 外部输入)
P3.5 TI(定时器 1 外部输入)
P3.6 WR(外部数据存储器写选通信号)
P3.7(外部数据存储器读选通信号)
3.3 STC89C52内部组成
STC89C52单片机在一块芯片中集成了 CPU、RAM 、ROM 、定时器/计数器、看门狗
和多种功能的 I/O 口设备的等,相当于一台计算机所需要的基本功能部件。
STC89C52单片机内包含的具体部分如下:
一个8 位 CPU。
一个片内振荡器及时钟电路。
8KB Flash 程序存储器。
256 B RAM 数据存储器。
三个16 位定时器/计数器。
可寻址 64KB 的外部数据存储器和 64KB 的外部程序存储器空间的控制电路。
32 条可编程的 I/O线(4组8 位并行 I/O端口)。
一个可编程全双工串口通信。
8 个中断源、两个优先级嵌套中断结构。
STC89C52单片机的框图如图3.3所示,各功能部件由内部总线连接在一起。
图3.3 STC89C52单片机框图
4 超声波测距模块
4.1 超声波传感器介绍
超声波是一种频率比较高的声音,由于其指向性强、能量消耗缓慢、传播距离较
远等优点,而经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实
现。超声波测距主要应用于倒车雷达、建筑施工工地以及一些工业现场,例如液位、
井深、管道长度等场合。超声波测距的利用超声波检测往往比较迅速、方便、计算简
单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在测控系
统的研制上得到了广泛应用。
超声传感器是一种将其他形式的能转变为所需频率的超声能或是把超声能转变
为同频率的其他形式的能的器件。目前常用的超声传感器有两大类,即电声型与流体
动力型。电声型主要有:1 压电传感器;2 磁致伸缩传感器;3 静电传感器。流体动
力型中包括有气体与液体两种类型的哨笛。由于工作频率与应用目的不同,超声传感
器的结构形式是多种多样的,并且名称也有不同,例如在超声检测和诊断中习惯上都
把超声传感器称作探头,而工业中采用的流体动力型传感器称为“哨”或“笛”。
压电传感器属于超声传感器中电声型的一种。探头由压电晶片、楔块、接头等组
成,是超声检测中最常用的实现电能和声能相互转换的一种传感器件,是超声波检测
装置的重要组成部分。压电材料分为晶体和压电陶瓷两类。属于晶体的如石英,铌酸
锂等,属于压电陶瓷的有锆钛酸铅,钛酸钡等。其具有下列的特性:把这种材料置于
电场之中,它就产生一定的应变;相反,对这种材料施以外力,则由于产生了应变就
会在其内部产生一定方向的电场。所以,只要对这种材料加以交变电场,它就会产生
交变的应变,从而产生超声振动。因此,用这种材料可以制成超声传感器。
传感器的主要组成部分是压电晶片。当压电晶片受发射电脉冲激励后产生振动,
即可发射声脉冲,是逆压电效应。当超声波作用于晶片时,晶片受迫振动引起的形变
可转换成相应的电信号,是正压电效应。前者用于超声波的发射,后者即为超声波的
接收。超声波传感器一般采用双压电陶瓷晶片制成。这种超声传感器需要的压电材料
较少,价格低廉,且非常适用于气体和液体介质中。在压电陶瓷上加有大小和方向不
断变化的交流电压时,根据压电效应,就会使压电陶瓷晶片产生机械变形,这种机械
变形的大小和方向在一定范围内是与外加电压的大小和方向成正比的。也就是说,在
压电陶瓷晶片上加有频率为 f0交流电压,它就会产生同频率的机械振动,这种机械
振动推动空气等媒介,便会发出超声波。如果在压电陶瓷晶片上有超声机械波作用,
这将会使其产生机械变形,这种机械变形是与超声机械波一致的,机械变形使压电陶
瓷晶片产生频率与超声机械波相同的电信号。
图4.1压电式超声波传感器结构图
压电式超声波发生器实际上是利用压电晶体的谐振来工作的,超声波发生器内部
结构如图2.1所示,它有两个压电晶片和一个共振板,当它的两极外加脉冲信号,其
频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,
便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫
压电晶片作振动,将机械能转化为电信号,这时它就成为超声波传感器。
压电陶瓷晶片有一个固定的谐振频率,即中心频率 f0。发射超声波时,加在其
上面的交变电压的频率要与它的固有谐振频率一致。这样,超声传感器才有较高的灵
敏度。当所用压电材料不变时,改变压电陶瓷晶片的几何尺寸,就可非常方便的改变
其固有谐振频率。利用这一特性可制成各种频率的超声传感器。
超声波传感器的内部结构由压电陶瓷晶片、锥形辐射喇叭、底座、引线、金属壳
及金属网构成,其中,压电陶瓷晶片是传感器的核心,锥形辐射喇叭使发射和接收超
声波能量集中,并使传感器有一定的指向角,金属壳可防止外界力量对压电陶瓷晶片
及锥形辐射喇叭的损坏。金属网也是起保护作用的,但不影响发射与接收超声波。
4.2 HC-SR04超声波测距模块的性能特点
HC-SR04超声波测距模块可提供2cm-400cm 的非接触式距离感测功能,测距精度
可高达3mm ,模块包括超声波发射器、接收器与控制电路。其基本工作原理:
(1)采用IO 口TRIG 触发测距,给至少10us 的高电平信号;
(2)模块自动发送8个40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO 口ECH0输出一个高电平,高电平持续的时间就是超
声波从发射到返回的时间。测试距离=(高电平时间*声速/340M/S)/2;
(4)当TRIG 从0->1时,主控制板启动,当超时10ms 时ECH0仍然没有出现150us
的0信号,表示没有障碍。
本模块性能稳定,测度距离精确,其主要特点:
(1)超微型,只相当于两个发射,接收头的面积已经没法再小了;
(2)无盲区(10mm 内成三角形误差较大,简单可以当做0处理);
(3)反应速度快,10ms 的测量周期,不容易丢失高速目标;
(4)发射头,接收头紧靠,和被测目标基本成直线关系;
(5)模块上有LED 指示,方便观察和测试。
4.3 HC-SR04的管脚排列和电气参数
4.3.1 管脚简介
HC-SR04的外形及管脚排列如图4.2所示。
(1)VCC 为5V 电源;
(2)GND 为地线;
(3)TRIG 触发控制信号输入;
(4)ECH0回响信号输出。
C
C R I
G C H 0 N D
图4.2外形及管脚排列图
4.3.2 HC-SR04的电气参数
电气参数如表4.1所示:
表4.1 电气参数表
4.4超声波时序图
图4.3超声波时序图
此时序图表明只需提供一个10us 一上脉冲触发信号,该模块内部将发出8个
40kHz 周期电平并检测回波。一旦检测到右回波信号则输出回响信号。回响信号的脉
冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算
得到距离。公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速
(340M/S)/2;建议测量周期为60ms 一上,以防止发射信号对回响信号的影响。
5系统硬件电路设计
5.1单片机最小系统
5.1.1 STC89C52芯片
本次设计我们所采用的是STC89C52单片机,是一种带8k 字节闪烁可编程可擦除
只读存储器的低电压、高性能COMOS8的微处理器,该器件有40引脚,速度较快,价
格便宜,烧录方便,通过串口即可下载,还可以实现在线编程,采用ATMEL 高密度非
易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
5.1.2 复位电路
为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路
的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为
可靠起见,电源稳定后还要经一定的延迟才撤销复位,以防电源开关或电源插头分-
合过程中引起的抖动而影响复位。当单片机的复位引脚出现2个机器周期以上的高电
平时,单片机就执行复位操作。如果RST 持续为高电平,单片机就处于循环复位状态。
所以复位引脚的电容大一点没多大关系,顶多是复位时间长一点;但如果电容太小,
高电平持续时间太短,则单片机无法正常复位,就不能工作,电容通常取10UF 或22UF ,
铝电解电容即可。
单片机的复位电路在刚接通电时,刚开始电容是没有电的,电容内的电阻很低,
通电后,5V 的电源通过电阻给电解电容进行充电,电容两端的电会由0V 慢慢的升到
4V 左右(此时间很短一般小于0.3秒),正因为这样,复位脚由低电位升到高电位,
引起了内部电路的复位工作;当按下复位键时,电容两端放电,电容又回到0V 了,
于是又进行了一次复位工作。电路图如图5.1。
图5.1 复位电路
5.1.3 晶振电路
它是单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作。假如
振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现
的很明显:电路将无法通信。它是由一个晶振和两个瓷片电容组成的,晶振和瓷片电
容是没有正负的,两个瓷片电容相连的那端一定要接地,如图5.2所示。
图5.2 晶振电路
一般单片机的晶振工作于并联谐振状态,也可以理解为谐振电容的一部分。它是
根据晶振厂家提供的晶振要求负载电容选值的,换句话说,晶振的频率就是在它提供
的负载电容下测得的,能最大限度的保证频率值的误差,也能保证温漂等误差。
机器周期:通常从内存中读取一个指令字的最短时间来规定CPU 周期,(也就是计
算机通过内部或外部总线进行一次信息传输从而完成一个或几个微操作所需要的时
间), 它一般由12个时钟周期组成。而时钟周期=1秒/晶振频率,因此单片机的机器
周期=12秒/晶振频率 ,补充其他几个周期:
指令周期(Instruction Cycle):取出并执行一条指令的时间。
总线周期(BUS Cycle):也就是一个访存储器或I/O端口操作所用的时间。
时钟周期(Clock Cycle):又称节拍周期,是处理操作的最基本单位。(晶振频
率的倒数,也称T 状态)
指令周期、总线周期和时钟周期之间的关系:一个指令周期由若干个总线周期组
成,而一个总线周期时间又包含有若干个时钟周期。
一般处理器的一个机器周期由12个时钟周期所组成。所以单片机用12M 晶振,
运行速度为1M 。
负载电容=[(Cd*Cg)/(Cd+Cg)]+Cic+△C[6 ],跟晶振特性、单片机内部时钟电路
等效电容有关。
两个电容的取值都是相同的,或者说相差不大,如果相差太大,容易造成谐振的
不平衡,容易造成停振或者干脆不起振。其起到一个并联协振的作用,这样可以让它
的脉冲更平稳与协调。
5.2 驱动显示电路及报警电路
显示电路采用1602 LCD液晶显示屏,当超过已设定的距离时,蜂鸣器可实现报
警功能并可通过按键实现有限距离的调整。
5.2.1 1602LCD 液晶显示屏
1602LCD 显示屏是一种工业字符型液晶,所谓1602是指显示的内容为16*2,即
可以显示两行,每行16个字符,目前市面上字符液晶绝大多数是基于HD44780液晶
芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用
于市面上大部分的字符型液晶。1602液晶模块内部的字符发生存储器已经存储了160
个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号
和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A ”的代码
是01000001B(41H),显示时模块把地址41H 中的点阵字符图形显示出来,我们就能
看到字母“A ”。
其管脚功能表和寄存器选择控制表如表5.1和表5.1所示:
表5.1 管脚功能表
表5.2寄存器选择控制表
5.2.2 蜂鸣器报警
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、
打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中
作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。压电式蜂鸣器
主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由
晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,
暑促1.5~2.5kHz的音频信号,阻抗匹配器推动压电蜂鸣片发声。电磁式蜂鸣器由振
荡器、电磁线圈、磁铁、振动膜片及外壳组成。接通电源后,振荡器产生的音频信号
电流通过电磁线圈,是电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,
周期性地振动发声。本设计采用电磁式蜂鸣器,当距离超出预设值时,蜂鸣器就会发
出报警生硬。
电磁式蜂鸣器的发声原理是电流通过电磁线圈,是电磁线圈产生磁场来驱动振动
膜发声的,因此需要一定的电流才能驱动它,单片机IO 引脚输出的电流较小,单片
机输出的TTL 电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,即通
过一个PNP 型三极管8550来放大驱动蜂鸣器。原理图见图5.3。
图5.3 蜂鸣器驱动电路
5.3 HC-RS04超声波测距原理
超声波测距是借助于超声脉冲回波渡越时间法来实现的,设超声波脉冲由传感器
发出到接收所经历的时间为t ,超声波在空气中的传播速度为c ,则从传感器到目标
物体的距离D 可用下式求出:D=ct/2。其系统框图如图5.3所示。
障碍物
图5.3 系统框图
基本原理:经发射器发射出长约6mm ,频率为40khz 的超声波信号。此信号被物
体反射回来由接收头接收,接收头实质上是一种压电效应的换能器。它接收到信号后
产生mV 级的微弱电压信号。
5.4 5V稳压电路
直流稳压电源又称直流稳压器。它的供电电压大都是交流电压,当交流供电电压
的电压或输出负载电阻变化时,稳压器的直接输出电压都能保持稳定。稳压器的参数
有电压稳定度、纹波系数和响应速度等。前者表示输入电压的变化对输出电压的影响。
纹波系数表示在额定工作情况下,输出电压中交流分量的大小;后者表示输入电压或
负载急剧变化时,电压回到正常值所需时间。直流稳压电源分连续导电式与开关式两
类。前者由工频变压器把单相或三相交流电压变到适当值,然后经整流、滤波,获得
不稳定的直流电源,再经稳压电路得到稳定电压(或电流) 。这种电源线路简单、纹波
小、相互干扰小,但体积大、耗材多,效率低(常低于40%~60%) 。后者以改变调
整元件(或开关) 的通断时间比来调节输出电压,从而达到稳压。这类电源功耗小,效
率可达85%左右,但缺点是纹波大、相互干扰大。所以,80年代以来发展迅速。从
工作方式上可分为:①可控整流型。用改变晶闸管的导通时间来调整输出电压。②斩
波型。输入是不稳定的直流电压,以改变开关电路的通断比得到单向脉动直流,再经
滤波后得到稳定直流电压。③变换器型。不稳定直流电压先经逆变器变换成高频交流
电,再经变压、整流、滤波后,从所得新的直流输出电压取样,反馈控制逆变器工作
频率,达到稳定输出直流电压的目的。
5.5温度检测电路
5.5.1 温度检测方案的分析
由于超声波也是属于声速,所以在传播途中也会受到温度等外界因素的影响,为
了比较精确的得到传感器与液面之间的距离,利用温度传感器检测当时条件下的环境
温度,并换算到相对应的超声波声速,利用这个速度去计算距离就可以得到比较准确
的距离。因此在整个系统中添加一个温度传感器来对当时环境温度进行检测。
5.5.2 数字温度传感器DS18B20简介
DS18B20是美国DALLAS 公司推出的单总线数字测温芯片[8]。他具有独特的单总
线接口方式,仅需使用1个端口就能实现与单片机的双向通讯。采用数字信号输出提
高了信号抗干扰能力和温度测量精度。他的工作电压使用范围宽(3.0~5.5 V) ,可以
采用外部供电方式,也可以采用寄生电源方式,即当总线DQ 为高电平时,窃取信号
能量给DS18B20供电。他还有负压特性,电源极性接反时,DS18B20不会因接错线而
烧毁,但不能正常工作。可以通过编程实现9~12位的温度转换精度设置。设定的分
辨率越高,所需要的温度数据转换时间就越长,在实际应用中要将分辨率和转换时间
权衡考虑。
5.5.3 DS18B20的结构及电路
DS18B20采用3脚T0-92封装,形如三极管,同时也有8脚SOIC 封装,还有6脚的TSOC 封装。测温范围为-55~+125℃,在-10~85℃范围内,精度为±0.5℃。每一个DS18B20芯片的ROM 中存放了一个64位ID 号:前8位是产品类型编号,随后48位是该器件的自身序号,最后8位是前面56位的循环冗余校验码。又因其可以采用寄生电源方式供电。因此,一条总线上可以同时挂接多个DS18B20,实现多点测温系统。
图4.4 DS18B20的外形及封装
图4.5 数字温度传感器DS18B20电路图
温度传感器的DQ 脚与单片机8051的P1.4管脚相连,用于显示当时的环境温度。并把从外界检测到的温度返回到单片机中,并通过固化在程序中的温度速度表,查得最接近检测到的温度的速度值,代入距离计算公式,从而得到比较精确的距离,提高了超声波测距的精度。
6系统程序的设计
系统程序主要包括主程序、显示数据子程序、报警子程序和按键子程序等。 6.1主程序
主程序的主要功能是负责距离的显示、读出并处理HC-RS04的测量距离值,按键主程序流程图如图6.1所示。
控制有效距离限制,当测量的值超过预设值时,蜂鸣器发声报警。
图6.1主流程图
6.2显示数据子程序
显示数据子程序的主要功能就是把超声波模块测量后的结果经单片机处理完毕显示数据子程序流程图如图6.2所示。
的距离显示在LCD 液晶显示屏上。
图6.2显示数据子流程图
6.3报警子程序
报警子程序的主要功能是在距离值超过预警值时,能够使蜂鸣器发声从而达到报报警子程序流程图如图6.3所示。
警的目的。
图6.3报警子流程图
6.4按键子程序
按键子程序的主要功能是有效距离可调,功能键调整上限,再次功能键调整下限,按键子程序流程图如图6.4所示。
再次按功能退出。
图6.4按键子流程图
结 论
本次设计对将来在这方面的研究有了理论上的基础。设计的最终结果实现了超声波的发送和接收,并且能够比较精确的检测液位,达到了设计的基本要求。设计中对外界的温度采用,提高测量的精确度。从而实现利用超声波方法测量物体间的距离并且以数字的形式显示测量距离。
超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。本次设计中采用反射波的原理,通过发射波被物体反射回来后接收反射波方式用来实现测距。
超声波测距硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路、超声波检测接收电路和温度采样电路四部分。单片机采用8051。采用12MHz 高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P2.0端口输出超声波换能器所需的40kHz 的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。
超声波测距的算法设计原理为超声波发生器T 在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器R 所接收到。这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。在启动发射电路后延时0.1ms 再启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波反射波时,接收电路输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。
参考文献
[1] 胡汉才.单片机原理及系统设计[M] .北京:清华大学出版社,2002. [2] 王守中. 51单片机开发入门与典型实例[M].北京:人民邮电出版社,2007. [3] 陈雪丽. 单片机原理及接口技术[M].北京:化学工业出版社, 2005.
[4] 薛均义,张彦斌.MCS-51系列单片微型计算机及其应用. 西安:西安交通大学出版社,2005.
[5] 唐颖,程菊花,任条娟. 单片机原理与应用及C51程序设计[M].北京:北京大学出版社,2008.
27
http://shop113110031.taobao.com/
28
欢迎进店详谈,总有一款适合您!!!→→ http://shop113110031.taobao.com/
29
浙江传媒学院本科毕业论文 基于单片机的超声波测距
附 录(B )
(单片机C 源程序清单)
//宏定义
#define uchar unsigned char #define uint unsigned int #define ULint unsigned long int //温度零上与零下的标志位 char flag=0; //超声波 char flags=0; //超声波距离 char flag1s=0; //计算定时间 uint time=0; //计算距离 ULint L_=0; //温度 uint t_=0;
//显示模式 0正常 1最大值调整 2最小值调整 uchar mode=0;
uint Max=40; uint Min=0; //按键标志 uchar k=0; //数值有误 uchar FW=0; //头函数
#include #include
#include "BJ_Key.h" //报警按键 #include "display.h" #include "DS18B20.h"
//显示头函数
#include "ultrasonic_wave.h"//超声波头函数
//温度传感器头函数
//函数声明
void delayms(uint ms); //主函数 void main() {
//循环显示 while(1) {
delayms(20); //20MS tmpchange(); //温度转换 t_=tmp(); //度温度 Conut(t_/10); //计算距离
Init_ultrasonic_wave(); //屏幕初始化 Init1602(); //温度初始化 tmpchange(); t_=tmp(); tmpchange(); t_=tmp(); tmpchange(); t_=tmp();
Key(); //正常显示 if(mode==0) {
StartModule();//启动超声波 while(!RX); //当RX 为零时等待 TR0=1; TR0=0;
//开启计数 //关闭计数
while(RX); //当RX 为1计数并等待
}
{ } else { }
Display_1602(t_/10,L_);
if(FW!=1) Feng_Stop(); Feng_Start();
//调整显示 else if(mode!=0) {
//最大最小值 Init_MaxMin(); while(mode!=0) { }
//界面初始化 Init1602();
Key();
if(k==1&&mode==1) { }
else if(k==1&&mode==2) { } k=0;
Init_MaxMin();
write_com(0x8d+0x40);//设置位置
Init_MaxMin();
write_com(0x8d);//设置位置
}
}
}
void delayms(uint ms) { uchar i=100,j; for(;ms;ms--) { while(--i) { j=10; while(--j);
}
}
}
//T0中断用来计数器溢出, 超过测距范围void CJ_T0() interrupt 1 {
flags=1; }
//LCD管脚声明 sbit LCDRS = P2^7; sbit LCDEN= P2^6;
//初始画时显示的内容
uchar code Init1[]="Temperature: C"; uchar code Init2[]="Distance: 000CM";
//初始画时显示的内容
//中断溢出标志
uchar code Init3[]=" Max------ CM"; uchar code Init4[]=" Min------ CM";
//LCD延时
void LCDdelay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=10;y>0;y--); } //写命令
void write_com(uchar com) {
LCDRS=0; P0=com; LCDdelay(5); LCDEN=1; LCDdelay(5); LCDEN=0; } //写数据
void write_data(uchar date) {
LCDRS=1; P0=date; LCDdelay(5); LCDEN=1; LCDdelay(5); LCDEN=0; }
//1602初始化 void Init1602() {
uchar i=0;
write_com(0x38);//屏幕初始化
write_com(0x0C);//打开显示 无光标 无光标闪烁 write_com(0x06);//当读或写一个字符是指针后一一位 write_com(0x01);//清屏 write_com(0x80);//设置位置
for(i=0;i
} write_data(0xdf); write_data(Init1[14]);
write_com(0x80+40);//设置位置 for(i=0;i
} }
//温度 距离显示
void Display_1602(uchar W,uint L) { //温度值显示 write_com(0x80+12); write_data('0'+W/10); write_data('0'+W%10);
//长度值显示 if(flag1s==1) { write_com(0x80+0x40+0x0a);
write_data(' ');
}
}
write_data('0'+L/100); write_data('0'+L/10%10); write_data('0'+L%10);
else if(flag1s==0) { }
write_com(0x80+0x40+0x0a); write_data('-'); write_data('-'); write_data('-'); write_data('-');
//1602初始化最大化最小化调整界面 void Init_MaxMin() {
uchar i=0;
write_com(0x38);//屏幕初始化
write_com(0x0f);//打开显示 无光标 无光标闪烁 write_com(0x06);//当读或写一个字符是指针后一一位 write_com(0x01);//清屏 write_com(0x80);//设置位置
for(i=0;i
write_com(0x80+40);//设置位置 for(i=0;i
write_data(Init4[i]);
write_data(Init3[i]);
}
write_com(0x8b);//设置位置
write_com(0x80+0x40+0x0b);//设置位置
write_com(0x8d);//设置位置 }
#define uchar unsigned char #define uint unsigned int
//define interface 定义 DS18B20 接口 sbit DS=P1^4;
//variable of temperature uint temp=0;
//延时子函数
//sign of the result positive or void delay(uint count) {
uint i; while(count)
write_data('0'+Min/100); write_data('0'+Min/10%10); write_data('0'+Min%10); write_data('0'+Max/100); write_data('0'+Max/10%10); write_data('0'+Max%10);
{
i=200; while(i>0) i--; count--;
} }
//发送初始化及复位信号 void dsreset(void) {
//DS18B20 初始化
uint i; DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; }
//read a bit 读一位
bit tmpreadbit(void) {
uint i; bit dat;
//i++ for delay 小延时一下 DS=0;i++; DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return (dat); }
//read a byte date 读一个字节 uchar tmpread(void) {
uchar i,j,dat; dat=0;
for(i=1;i
j=tmpreadbit(); //读出的数据最低位在最前面,这样刚好
//一个字节在 dat 里
dat=(j>1); } //将一个字节数据返回
return(dat); }
//write a byte to ds18b20 //写一个字节到 DS18B20 里 void tmpwritebyte(uchar dat) {
uint i; uchar j; bit testb; for(j=1;j
testb=dat&0x01; dat=dat>>1;
if(testb) //write 1 {
DS=0; i++;i++; DS=1;
i=8;while(i>0)i--; } else {
DS=0; //write 0 i=8;while(i>0)i--;
写 1 部分 写 0 部分
DS=1; i++;i++; } } }
//DS18B20 begin change 发送温度转换命令 void tmpchange(void) {
dsreset(); //初始化 DS18B20 delay(1); //延时
tmpwritebyte(0xcc); //跳过序列号命令 tmpwritebyte(0x44); //发送温度转换命令 }
//get the temperature 获得温度
uint tmp() {
float tt=0; uchar a=0,b=0; dsreset(); delay(1);
//发送读取数据命令 tmpwritebyte(0xcc); tmpwritebyte(0xbe);
//连续读两个字节数据 a=tmpread(); b=tmpread();
//two byte compose a int variable //两字节合成一个整型变量。
temp=b;
temp
if(b==0xff)
flag=1; temp=~temp+1; }
//得到真实十进制温度值,因为 DS18B20
tt=temp*0.0625;
//可以精确到 0.0625 度,所以读回数据的最低位代表的是 //0.0625 度。
//放大十倍,这样做的目的将小数点后第一位 temp=tt*10+0.5;
//也转换为可显示数字,同时进行一个四舍五入操作。 }
//超声波管脚定义 sbit RX=P2^1; sbit TX=P2^0;
//超声波初始化
void Init_ultrasonic_wave() { }
//启动超声波
void StartModule() //启动模块 {
TX=1; _nop_();
41
//返回温度值
return temp;
TX=0; TH0=0;
//关闭发射
//设T0为方式1,GATE=1;
TMOD=0x01;
TL0=0;
ET0=1; //允许T0中断 EA=1;
//开启总中断
//启动一次模块
}
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0;
//计算不同温度下的速度 void JS_(uchar WD) {
//大于-30
if(WD>=30&&flag==1) { }
//大于-20
else if(WD>=20&&WD
L_=(time*3.19)/200; //算出来是CM;
42
L_=(time*3.13)/200; //算出来是CM;
}
//大于-10
else if(WD>=10&&WD
//大于0
else if(WD>=0&&WD
//大于0
else if(WD0&&flag==0) { }
//大于10
else if(WD10&&flag==0) { }
//大于20
else if(WD20&&flag==0) { } //大于30
else if(WD>30&&flag==0) { }
L_=(time*3.86)/200; //算出来是CM;
L_=(time*3.49)/200; //算出来是CM;
L_=(time*3.34)/200; //算出来是CM;
L_=(time*3.38)/200; //算出来是CM;
L_=(time*3.23)/200; //算出来是CM;
L_=(time*3.25)/200; //算出来是CM;
//距离计算 SD 为当时的超声速度
43
void Conut(uchar WD) { time=TH0*256+TL0; TH0=0; TL0=0; JS_(WD);
//距离大于200或者超时 if(L_>200||flags==1) { flags=0; //无效显示 flag1s=0; L_=0; FW=1;
Feng_Start();
}
//距离小于100 else if(L_
}
}
//管脚声明 sbit Feng=P1^0; sbit K1=P1^1; sbit K2=P1^2; sbit K3=P1^3;
44
//蜂鸣打开 void Feng_Start() { }
//蜂鸣关闭 void Feng_Stop() { } //等待
void delay_key() { }
//按键检测 void Key() {
//功能键按下 if(K1==0) {
Feng_Start();//蜂鸣器开 delay_key(); //消抖 while(K1==0);//等待松手 Feng_Stop(); //蜂鸣器关闭 mode++; //模式++ if(mode==3) //达到最大限度归为
mode=0;
//按键标志位
45
Feng=0;
Feng=1;
uchar i,j; for(i=0;i
k=1;
} //+键 else if(K2==0) { } //-键
else if(K3==0) {
Feng_Start(); delay_key(); while(K3==0);
46
Feng_Start();//蜂鸣器开 delay_key(); //消抖 while(K2==0);//等待松手 Feng_Stop(); //蜂鸣器关闭 //最大值调整
if(mode==1) //在最大值调整下 { } //最小值
else if(mode==2)//最小模式下调整 { } k=1;
Min++; { }
Min=Max;
//调整最小值
if(Min>Max) //最小值不能大于最大值 Max++; //调整最大值 if(Max==201)//到达51归为50 { }
Max=200;
Feng_Stop(); //最大值调整 if(mode==1) { Max--; if(Max
} //最小值 else if(mode==2) { Min--; if(Min==0xff) { Min=0; }
} k=1;
}
}
47
致 谢
[单击此处添加致谢语]
48