[单片机测控系统设计]课程设计报告

超声波测距系统设计

专业班级:

学生学号:

学生姓名:

指导老师:

二〇XX 年X 月

目录

第一章 研究方案 . ........................................................ 1

1.1 研究对象分析 . ................................................... 1

1.2 测试要求 . ....................................................... 1

1.3 系统框图 . ....................................................... 1

1.4 器件选择 . ....................................................... 2

1.4.1 传感器的选择 . ............................................. 2

1.4.2 单片机的选择 . ............................................. 4

1.4.3 显示器件的选择 . ........................................... 6

1.5 系统研制可行性分析 .............................................. 7

第二章 硬件电路设计 . ..................................................... 9

2.1 理论依据 . ....................................................... 9

2.1.1 什么是超声波 . ............................................. 9

2.1.2 超声波的特性及特点 . ...................................... 10

2.1.3 超声波测距原理 . .......................................... 10

2.1.4 整体控制方式 . ............................................ 11

2.2 电路设计 . ...................................................... 11

2.2.1 传感器电路 . .............................................. 11

2.2.2 单片机系统电路 . .......................................... 11

2.3 实物测试 . ...................................................... 13

第三章 软件设计 . ....................................................... 15

3.1 系统总体设计 . .................................................. 15

3.2 测距子程序设计 . ................................................ 16

3.3 显示子程序设计 . ................................................ 17

第四章 调试与误差分析 . ................................................. 19

4.1 电路调试 . ....................................................... 19

4.2 软件调试 . ....................................................... 19

4.3 误差分析 . ....................................................... 19

4.4 课程心得 . ....................................................... 21

参考文献 . ............................................................... 23

附录A 实物图 .......................................................... 25

附录B 总程序 .......................................................... 27

第一章 研究方案

1.1 研究对象分析

测距的原理和方法有很多,根据其信息载体的不同可归纳为光学方法、无线电方法和超声波方法。前两者在某些地方有局限性,相比之下,超声波方法具有突出的优点。首先,超声波对色彩、光照度不敏感,可用于测量透明及漫反射性差的物体(如玻璃、抛光体),可以直接测量近距离目标、适用范围广、方向性强、覆盖面较大等优点;其次,超声波对于被测物体处于黑暗,有灰尘,烟雾,电磁干扰,有毒等恶劣的环境有一定的适应能力。因此在液位测量,机械手控制,车辆自动导航,物体识别等方面有广泛的应用。尤其是在空气测距的应用中,由于空气中波速较慢,其回波信号中包含的沿传播方向上的结构信息很容易检测出来,具有很高的分辩力,因而其准确度也较其它方法高,而且超声波传感器具有结构简单,体积小,费用低,信号处理简单可靠,易于小型化和集成化等特点。超声波测距作为一种非接触式测距技术,是利用超声波传播速度在相当大范围内与频率无关,通过计算超声波在声波探头与被测物体之间的传输时间来测量距离,在相关计算中相当灵活,且测量过程中对被测目标无损害。基于超声波的这些独特优点,使得超声波测距技术越来越受到人们的重视。

本课程设计旨在研究超声波测距系统的原理和应用。

1.2 测试要求

选择合适的超声波测距模块测量距离,设计外部电路和应用单片机系统实现对距离的测量并通过显示装置显示距离。进行试验验证,并分析讨论相关特性参数等。

1.3 系统框图

图1 系统框图

1.4 器件选择

距离传感器是利用测时间来实现测距离的原理,以检测物体的距离的一种传感器。在三角测量、导线测量、地形测量和工程测量等工作中都需要进行距离测量。目前测量距离一般有以下几种方法:1、超声波测距法。利用超声波传感器产生超声波和接收超声波,同时超声波在空气中的传播速度已知,通过测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。2、激光测距法。激光测距一般有脉冲法和相位法。脉冲法测距过程:测距仪发射出的激光经被测量物体的反射后又被测距仪接收,测距仪同时记录激光往返的时间。光速和往返时间的乘积的一半,就是测距仪和被测量物体之间的距离。脉冲法测量距离的精度是一般是在+/- 10厘米左右。另外,此类测距仪的测量盲区一般是1米左右。3、红外测距法。红外测距传感器具有一对红外信号发射与接收二极管,利用的红外测距传感器LDM301发射出一束红外光,在照射到物体后形成一个反射的过程,反射到传感器后接收信号,然后利用CCD 图像处理接收发射与接收的时间差的数据。经信号处理器处理后计算出物体的距离。4、24GHZ 雷达测距法。24GHz 雷达传感器是可以将微波回波信号转换为电信号的微波传感器的一种类型,将24GHz 选为发射频率,利用发送与接收信号的频率差,通过公式计算出物体运动的速度。经过参考信号与回波信号的混频,双通道传感器输出两个频率幅度相同,相位差为90°的中频信号IF1和IF2,根据90°相位引导的信号类型,可识别物体的运动方向(远离或靠近)。如果要测量一个参数(距离),如静态物体到传感器的距离,那么选用线性升坡或降坡作为发射频率的时间相关函数就足够了,并定期重复这些坡,以期得到可能的平均值。根据延迟效应的计算公式可以得到物体的距离。

1.4.1 传感器的选择

本课程设计采用的是超声波测距法,即采用超声波传感器作为采样传感器,对距离进行采样。超声波传感器是利用超声波的特性研制而成的传感器。以超声波作为检测手段,必须产生超声波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。

超声波探头的工作原理主要是基于压电压电晶体的压电效应。压电效应主要分为正压电效应和逆压电效应,所谓正压电效应就是在晶体两级加入电压时,晶体会产生机械变形,从而在晶体表面产生机械波;逆压电效应正好相反,当晶片本身产生机械形变,或者加入了机械波时,在晶体的表面就会产生电荷,从而在晶体两级产生相应的电压。

超声波传感器主要由压电晶片组成,是利用压电晶体的谐振来工作的。它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间

未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器。从而既可以发射超声波,也可以接收超声波。小功率超声探头多作探测作用。它有许多不同的结构,可分直探头(纵波)、斜探头(横波)、表面波探头(表面波)、兰姆波探头(兰姆波)、双探头(一个探头反射、一个探头接收)等。超声波传感器内部结构图如图2所示。

图2 超声波传感器内部结构图

经分析论证,本课程设计采用HC-SR04超声波测距模块集距离数据。

HC-SR04超声波测距模块可提供2cm-400cm 的非接触式距离感测功能,测距精度可达到3mm ;模块包括超声波发射器、接收器与控制电路。基本工作原理:1、采用IO 口TRIG 触发测距,给至少10us 的高电平信号;2、模块自动发送8个40KHz 的方波,自动检测是否有信号返回;3、有信号返回,通过IO 口的ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。超声波测距模块的超声波时序图如图3所示。

图3 超声波时序图

时序图表明,只需要提供一个10us 以上的的高电平信号该模块内部将自动发送8个40KHz 的周期电平,并自动检测是否有信号返回。一旦检测到有信号返回,则输出回响信号,回响高电平持续的时间就是超声波从发射到返回的时间。由此通过发射信号到收到回响的信号时间间隔可以计算得到距离。

HC-SR04超声波测距模块有四个引脚,测距模块实物图如图4所示。其中VCC 为电源引脚,供5V 电源,GND 为接地引脚,TRIG 为触发控制信号输入,ECHO 为回响信号输出。

图4 HC-SR04超声波测距模块实物图

表1 HC-SR04超声波测距模块的电气参数

本课程设计采用HC-SR04超声波测距模块进行测距的原因:该型超声波测距模块集成了包括超声波发射器、接收器与控制电路这三个主要测距电路,其高集成度之高,所以能大大地简化超声波测距电路的组成,而且该模块性能稳定,测度距离精确,高精度等特点,使得盲区超近(2cm )。

同时,在连接电路时应注意此模块不宜带电连接,如要带电连接,则先让模块的GND 端先连接,否则会影响模块的正常工作。测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的结果。

1.4.2 单片机的选择

单片微型计算机简称单片机,它把组成微型计算机的各个功能部件:中央处理器CPU 、随机存取存储器RAM 、只读存储器ROM 、可编程存储器EPROM 、并行及串行输入输出I/O接口电路、定时器/计数器、中断控制器等部件集成在一块半导体芯片上,构成一个完整的微型计算机。

单片机作为计算机发展的一个重要分支领域,根据发展情况,从不同角度,单片机

大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。

通用型是按单片机适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC 接口等功能的温度测量控制电路。

总线型是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。

控制型是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。

结合本次课程设计的实际要求,选用较89C51性能更优越的STC89C52单片机作为本次设计使用的单片机。

STC89C52是STC 公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU 和在系统可编程Flash ,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:8k 字节Flash ,512字节RAM ,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89C52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz ,6T/12T可选。

单片机各引脚功能如下:VCC :供电电压,GND :接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4

个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL )这是由于上拉的缘故。P3口也可作为STC89C52的一些特殊功能口。STC89C52引脚图如图5所示。

图5 STC89C52单片机引脚图

1.4.3 显示器件的选择

显示器是电子计算机最重要的终端输出设备,是人机对话的窗口。显示器有电路部分和显示器件组成,采用何种显示器件,决定了显示器的电路结构,也决定了显示器的性能指标。指示或显示器件主要分为机械式指示装置和电子显示器件。传统的电压或电流表头就是一个典型的指示器件,它广泛用于稳压电源、万用表等仪器上。随着电子仪器的自能化水平提高,电子显示器件的使用日益广泛,主要有发光二极管、数码管、液晶显示器、荧光屏等。

数码管:数码管也称LED 数码管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示)这些段分别由a,b,c,d,e,f,g,dp 来表示;按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管;按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。

数码管的显示方式有两种:静态显示和动态显示。静态显示的优点是:数码管显示无闪烁,亮度高,软件控制比较容易;缺点是:需要的硬件电路较多(每一个数码管都需要一个锁存器),同时由于所有数码管都处于被点亮状态,所以需要的电流很大,当数码管的数量增多时,对电源的要求也就随之增高。所以,在大部分的硬件电路设计中,很少采用静态显示方式。动态显示的优点是:硬件电路简单(数码管越多,这个优势越明显),由于每个时刻只有一个数码管被点亮,所以所有数码管消耗的电流较小;缺点是:数码管亮度不如静态显示时的亮度高,例如有8个数码管,以1秒为单位,每个数

码管点亮的时间只有1/8秒,所以亮度较低;如果刷新率较低,会出现闪烁现象;如果数码管直接与单片机连接,软件控制上会比较麻烦等。

液晶显示器:液晶是一种液态晶体,它是有机化合物,在电场作用下会产生电光效应,其特点是工作电压低、微功耗、易于和CMOS 数字集成电路配合使用。这种显示器不能用直流驱动,因为直流电场会使液晶发生电化学分解反应,工作寿命短,因此必须采用交流驱动。它的结构是由一个公共电极和七个电极组成的七段字形。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。LCD1602是指显示的内容为16x2, 即可以显示两行,每行16个字符液晶模块(显示字符和数字)。它由若干个5x7或者5x11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM ,显示效果也不好)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的。

LCD1602液晶显示模块显示优点:a. 显示质量高。由于1602LCD 每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,画质高且不会闪烁。b. 数字式接口。1602液晶屏都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。c. 体积小、重量轻。1602液晶模块通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示屏要轻得多。d. 功耗低。相对而言,1602液晶显示屏的功耗主要消耗在其内部的电极和驱动IC 上,因而耗电量比其它显示屏要少得多。

经过分析数码管和液晶显示模块的优点,结合本课程设计,选择LCD1602液晶显示模块作为此设计的显示器件。方便显示距离大小和单位等。

1.5 系统研制可行性分析

此课设为单片机测控系统课程设计,主侧重单片机系统的设计和编写程序,故对距离进行采样时利用测距模块实现,模块集成了包括超声波发射器、接收器与控制电路这三个主要测距电路,集成度高,大大地简化超声波测距电路的组成,而且该模块性能稳定,测度距离精确,精度高,市场常见。数据处理系统利用STC89C52单片机实现,显示电路利用LCD1602液晶显示模块,两者也均为市场常见之物,因此整个系统具有研制的可行性。

本课设题目是系统设计型,主要是设计单片机系统、编写实验程序、实验调试及分析、撰写实验报告等。

第二章 硬件电路设计

硬件电路设计主要包括单片机系统、LCD 显示电路、超声波发射和接收电路三部分。在单片机系统设计方面:单片机是以89系列单片机为控制核心的设计,时钟电路采用的是12MHZ 高精度的晶振,以此来获得较为稳定的时钟信号,从而减少测量误差,选用的标准主要以稳定、快速、功能强大为主。在显示电路设计方面:通过单片机的运算,计算出测量距离,并且对测量的结果显示出来,所以在输出方面需要采用一个显示电路。选用的标准主要以显示内容丰富、方便使用为主。在超声波发射和接收电路方面:充分利用超声波的特点,选择集成度比较高的超声波测距模块,以达到系统抗干扰、稳定,准确的的功能。

2.1 理论依据

2.1.1 什么是超声波

声波是物体机械振动状态(或能量)的传播形式。所谓振动是指物质的质点在其平衡位置附近进行的往返运动形式。譬如,鼓面经敲击后,它就上下振动,这种振动状态通过空气媒质向四面八方传播,这便是声波。超声波是指振动频率大于20KHz 以上的,其每秒的振动次数(频率)甚高,超出了人耳听觉的一般上限(20KHz ),人们将这种听不见的声波叫做超声波。超声和可闻声本质上是一致的,它们的共同点都是一种机械振动模式,通常以纵波的方式在弹性介质内会传播,是一种能量的传播形式,其不同点是超声波频率高,波长短,在一定距离内沿直线传播具有良好的束射性和方向性,目前腹部超声成象所用的频率范围在 2~5MHz 之间,常用为3~3.5MHz (每秒振动1次为1Hz ,1KHz=10^3Hz,1MHz=10^6Hz,即每秒振动100万次,可闻波的频率在16~20KHz 之间)。

超声波在媒质中的反射、折射、衍射、散射等传播规律,与可听声波的规律没有本质上的区别。但是超声波的波长很短,只有几厘米,甚至千分之几毫米。与可听声波比较,超声波具有许多奇异特性:传播特性,超声波的波长很短,通常的障碍物的尺寸要比超声波的波长大好多倍,因此超声波的衍射本领很差,它在均匀介质中能够定向直线传播,超声波的波长越短,该特性就越显著;功率特性,当声音在空气中传播时,推动空气中的微粒往复振动而对微粒做功。声波功率就是表示声波做功快慢的物理量。在相同强度下,声波的频率越高,它所具有的功率就越大。由于超声波频率很高,所以超声波与一般声波相比,它的功率是非常大的。空化作用,当超声波在液体中传播时,由于液体微粒的剧烈振动,会在液体内部产生小空洞。这些小空洞迅速胀大和闭合,会使液体微粒之间发生猛烈的撞击作用,从而产生几千到上万个大气压的压强。微粒间这种剧

烈的相互作用,会使液体的温度骤然升高,起到了很好的搅拌作用,从而使两种不相溶的液体(如水和油)发生乳化,且加速溶质的溶解,加速化学反应。这种由超声波作用在液体中所引起的各种效应称为超声波的空化作用。

研究超声波的产生、传播、接收,以及各种超声效应和应用的声学分支叫超声学。产生超声波的装置有机械型超声发生器(例如气哨、汽笛和液哨等)、利用电磁感应和电磁作用原理制成的电动超声发生器、以及利用压电晶体的电致伸缩效应和铁磁物质的磁致伸缩效应制成的电声换能器等。

2.1.2 超声波的特性及特点

超声波的特性:

1、超声波可在气体、液体、固体、固熔体等介质中有效传播。

2、超声波可传递很强的能量。

3、超声波会产生反射、干涉、叠加和共振现象。

4、超声波在液体介质中传播时,可在界面上产生强烈的冲击和空化现象。

超声波是声波大家族中的一员。 声波是物体机械振动状态(或能量)的传播形式。所谓振动是指物质的质点在其平衡位置附近进行的往返运动。譬如,鼓面经敲击后,它就上下振动,这种振动状态通过空气媒质向四面八方传播,这便是声波。超声波是指振动频率大于20KHz 以上的,人在自然环境下无法听到和感受到的声波。

超声波的特点:

1、超声波在传播时,方向性强,能量易于集中。

2、超声波能在各种不同媒质中传播,且可传播足够远的距离。

3、超声波与传声媒质的相互作用适中,易于携带有关传声媒质状态的信息。

超声波是一种波动形式,它可以作为探测与负载信息的载体或媒介(如B 超等用作诊断);超声波同时又是一种能量形式,当其强度超过一定值时,它就可以通过与传播超声波的媒质的相互作用,去影响,改变以致破坏后者的状态,性质及结构 。

2.1.3 超声波测距原理

超声波测距利用的是时间差测距法。超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。

超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波立即停止计时。超声波在空气中的传播速度为344m/s(20℃室温),根据计时器记录的时间t (秒),就可以计算出发射点距障碍物的距离s ,即:s 344t /2(m )。

超声波测距原理图如图6所示。

图6 超声波测距原理图 被测距离:d =s 2-(h /2) 2。式中:s 为超声波传播距离,h 为发射探头与接收探头之间的距离,d 为实际距离。

由于s 远大于h ,因此可近似认为d =s ,则:d =s =ct /2,t 为发射超声波与接收超声波的时间间隔,c 为超声波在空气中的传播速度。

2.1.4 整体控制方式

采用单片机系统控制方式。单片机系统接收输出回响信号,进行计算、处理,把数据传送给LCD 显示模块,达到实时检测和反馈的功能。基于单片机的距离测量系统,具有硬件电路简单,程序简单和运算速度快,测速范围广,抗干扰性能好的特点。

2.2 电路设计

2.2.1 传感器电路

本课程设计所用传感器为超声波传感器,使用超声波测距模块HC-SR04进行距离测量,超声波测距模块已在第一章介绍过,此处不重复介绍。在连接电路时只需将测距模块的VCC 接入5V 电源,GND 接地,TRIG 为触发控制信号输入与单片机连接,接收单片机发出的触发控制信号,ECHO 为回响信号输出,信号接入单片机,让单片机对信号进行处理。

2.2.2 单片机系统电路

单片机时钟电路。时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。单片机内部有一个用于构成振荡器的高增益反向放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2这两个引脚跨接在石英晶体振荡器和微调电路,就构成一个稳定的自激振荡器。

电路中的电容C1和C2典型值通常选择30pF 左右,该电容大小会影响振荡器频率的高低,振荡器的稳定性和起振的快速性。晶振的振荡器频率的范围通常在1.2~12MHz 之间,晶体的频率越高,则系统得时钟频率也就变高,单片机的运行速度也就越快。但

反过来运行速度快,对存储器的速度要求就高。对印刷电路板的工艺要求也高,即要求浅间的寄生电容要小;晶体和电容应尽可能安装得与单片机芯片靠近,以减少寄生生活,更好的保证振荡器稳定,可靠地工作。单片机时钟电路如图7所示。

图7 单片机时钟电路

单片机复位电路。为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V ±5%,即4.75~5.25V 。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC 超过4.75V 低于5.25V 以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。

单片机在启动时都需要复位,以使CPU 及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST 引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST 引脚上有一个高电平并维持2个机器周期(24个振荡周期) 以上,则CPU 就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。单片机的一个上电复位电路如图8所示。

图8 单片机复位电路

显示电路,本课程设计显示电路采用LCD1602液晶显示模块显示。LCD1602液晶显示模块可以和STC89C52单片机I/O口直接相接,由于单片机P0口特殊的漏极开路输出,当P0口作为I/O口输出的时候时,输出低电平为0,输出高电平为高阻态(并非5V ,相当于悬空状态。也就是说P0 口不能真正的输出高电平,给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC ,由电源通过这个上拉电阻给负载提供电流。此设计接的上拉电阻为10K 欧姆的9脚排阻。电路图如图9所示。液晶模块

的引脚3接地(接地时对比度最高)。

图9 显示电路

LCD1602通常有14条引脚线或16条引脚线的LCD ,多出来的2条线是背光电源线。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。工作电压一般为3.3V 或5V ,对比度可调。内含复位电路,可提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能。有80字节显示数据存储器DDRAM ,并建有192个5x7点阵的字型的字符发生器CGROM ,有8个可由用户自定义的5x7的字符发生器CGRAM 。LCD1602的引脚图如图10所示。

图10 LCD1602引脚图

2.3 实物测试

将实物按各模块电路连接,连接完毕后进行实物调试,检测实物能否达到课程设计目的,若能达到,则目的实现;若不能达到则分析是什么问题使设计不能达到目的,在分析电路时将电路按设计时的模块分成小块进行测试,分析出是哪个环节出现问题,逐步解决问题,以达到课程设计目的。

第三章 软件设计

3.1 系统总体设计

单片机按编入的程序运行,开始后对显示液晶、超声波模块和定时器进行初

始化,为后续程序做好准备,初始化好后液晶显示模块开始显示固定字符,并触发超声波发射器,发射超声波,等待回波,INT0产生中断后即进入外部中断子程序,在外部中断子程序中关闭外部中断和定时器,将定时器T0的值取出,重新开启外部中断,并返回主程序。主程序再调用运算子程序,将时间值经算法运算后得出距离信息并送到液晶模块显示。一次程序运行完进行400ms 延时,即为测量间隔。如此循环每隔400ms 刷新一次距离显示。系统总体流程图如图11所示。部分程序如下。

图11 系统总体流程图

主函数程序:

void main()

{

lcd_init(); //液晶初始化

init_t0(); //定时器0初始化

init_measuring(); //超声波相应端口初始化

while(1)

{

lcd_xianshi(); //液晶显示特定字符 trigger(); //触发超声波启动 while(echo==0) //等待回声 { ; }

work(); //进行距离测量

display(distance); //对测量结果进行显示

init_measuring(); //超声波相应端口初始化

delay(60); //每次测量间隔60ms

}

}

3.2 测距子程序设计

测距子程序实现的是开启定时器、关闭定时器、读取数据及计算数据的功能。结束一次计时后,通过读取计时数据,进行算法运算即可得到被测物体与探头之间的距离。测距子程序设计流程图如图12所示。

测距子程序:

void work()

{

uchar l;

uint h,y;

TR0 = 1; //启动定时器T0

while(echo==1)

{

;

}

TR0 = 0;

l = TL0;

h = TH0;

y = h *256+ l; //us部分 // 总时间=y + 1000 * count;//计算总时间us

TL0 = 0x9c;

TH0 = 0xff;

delay(30);

distance = (y+1000 * count)*0.344*1.25/2; //原始为:(0.344毫米/us)*时间/2

}

// 1.25为进行标定所得,进行补偿 //关闭定时器T0

图12 测距子程序流程图

3.3 显示子程序设计

显示程序初始化完毕后,先显示固定字符,等待中断子程序将计算出的数值

送到液晶显示模块并进行显示。显示子程序设计流程图如图13所示。

图13 显示子程序流程图

第四章 调试与误差分析

4.1 电路调试

在本次课程设计中采用的是超声波测距模块,电路连接较简单,注意不要接

错引脚即可。在LCD1602接开发板时,此时是不需要外接上拉电阻的,上拉电阻集成在了开发板上,但当LCD1602未接在开发板上,而接在面包板上时,应接上拉电阻才能实现P0口高电平输出,才能保证液晶显示模块显示正常。

4.2 软件调试

本课程设计本要求采用汇编语言进行编程。但由于本程序较大,而C 语言

编程具有很强的灵活性,便于编写与理解,因此采用C 程序语言编写。采用自下而上的调试方法,先调试功能电路,再调试整个系统。

本课设所使用的调试软件是51系列单片机开发软件Keil C51,它是一个基

于32位Windows 环境的应用程序,支持C 语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision。Keil 提供包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案。

Keil 能以单步执行、过程单步执行、全速执行等多种运行方式进行程序调试。如果发现程序有错,可采用在线汇编功能对程序进行在线修改,不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理。在模拟调试程序后,还须通过编程器将.hex 目标文件烧写入单片机中才能观察目标样机真实的运行状况。

4.3 误差分析

根据超声波测距公式:d =s =ct /2,其中真实距离根据三角形的勾股定理公式计算得来:d =s 2-(h /2) 2,s 为超声波传播距离,h 为发射探头与接收探头之间的距离,d 为实际距离,t 为发射超声波与接收超声波的时间间隔,c 为超声波在空气中的传播速度。因为s 远大于h ,所以才近似认为d =s 。

由此可知超声波测距的误差是由测距原理误差,超声波的传播速度误差和测

量距离传播的时间误差引起的。

1、测距原理误差

测距原理误差主要取决于两探头之间的距离,虽然探头之间距离很小,但距

离是一定存在的,距离越大,误差越大,所以应尽量使超声波探头之间的距离变小。但同时两探头之间距离过小,会使刚发射出去的超声波即被接收探头接收到,从而不能实现测距的目的,因此两探头也应保持一定的合适距离。

2、超声波传播速度误差

稳定准确的超声波传播速度是保证测量精度的必要条件。波的传播速度取决

于传播媒质的特性,传播媒质的温度、压力、密度对声速都将产生直接的影响。超声波的传播速度受空气的密度所影响,空气的密度越高则超声波的传播速度就越快,而空气的密度又与温度有着密切的关系。对于测距而言,引起声速变化的主要原因是媒质温度的变化,温度变化是造成超声波测距误差的主要来源之一。因此用20℃下的超声波传播速度344m/s来计算不同温度环境下的超声测距的距离是有很大的误差。

查阅资料可知超声波速度与温度的关系式:c =331. 5+0. 607T ,其中T (K )为绝对温度且T =t +273. 15 ,t 为摄氏温度(℃)。超声波传播速度与温度关系如表2所示。

表2 声速与温度关系表

例如当温度0℃时超声波速度是332m/s,30℃时是350m/s,温度变化引起

的超声波速度变化为18m/s。若超声波在30℃的环境下以0℃的声速测量100m 距离所引起的测量误差将达到5m ,测量1m 误差将达到5mm 。

为了提高测距精度,必须对超声波的速度进行温度补偿,用温度传感等测温

器件测得环境温度的数值,从而得到该环境下的超声波速度。也可采用声速预置和温度补偿相结合的方法对声速进行修正,将更有效地降低因温度变化而产生的误差。本课程设计因在比较稳定的温度下进行实验,因此采用声速预置的方法减小超声波传播速度误差。

3、时间误差

在测量过程中,为了防止其他信号的干扰,提高测量的可靠性,单片机开始

计数时,超声波传感器常常发射由多个方波组成的脉冲串作为测量的载体。脉冲发射频率为40KHz ,忽略脉冲电路产生的延时,可知由软件生成的起始时间对于一般要求的精度是可靠的。对于超声波传播过程,超声波在空气介质的传播过程中会有很大的衰减,因此也会引起传播时间的误差。若接收电路中的比较器的阈值电压为一定值,由于粉尘及其它物质的影响,故实际测量时,不一定是第一

个回波的过零触发。第一个回波与实际检测到的第一个回波之间也存在一定的时间误差。通过查阅资料与结论分析可知接收电路常设计为接收到第3个回波时,单片机停止计数。所以最终测得的时间比实际距离所对应的时间多出3脉冲发送时间,从而造成了回波时间t 的测量误差。

在超声波的传播速度是准确的前提下,测量距离的传播时间差值精度只要在

达到微秒级,就能保证测距误差小于1mm 的误差。使用的12MHz 晶体作时钟基准的89C52单片机定时器能方便的计数到1μs 的精度,因此系统采用89C52单片机的定时器能保证时间误差在1mm 的测量范围内。

当要求测距误差小于1mm 时,假设已知超声波速度c=344m/s (20℃室温) ,

忽略声速的传播误差。测距误差∆t

4.4 课程心得

本课程设计主要是利用软件实现功能,同时结合硬件电路,硬件与软件结合

的课程设计使我们在已有知识的基础上,对软件应用和对元器件的特性有了更深一步的了解。

参考文献

[1] 李全利. 单片机原理及应用感器原理[M]. 高等教育出版社. 2012.12.

[2] 李丽荣, 张常全, 郑建红. 51单片机应用设计[M]. 北京理工大学出版社. 2012. 194-211.

[3] 李学海. 经典80C51单片机轻松入门与上手[M]. 清华大学出版社. 2009.2

[4] 何立民. 单片机应用技术选编[M]. 北京航空航天大学出版社. 2011. 89-112.

[5] 张毅坤. 陈善久, 裘雪红. 单片微型计算机原理及应用[M]. 西安电子科技大学出版社. 2009. 124-162.

[6] 张谦琳. 超声波检测原理和方法[M]. 中国科技大学出版社. 2011.189-221.

[7] 胡萍. 超声波测距仪的研制[M]. 高等教育出版社. 2003.10

[8] 李丽荣, 张常全, 郑建红. 51单片机应用设计[M]. 北京理工大学出版社. 2012.194-211.

[9] 朱爱红. 基于AT89C52的超声波测距系统[J]. 高等教育出版社. 2009. 191-217.

附录A 实物图

附录B 总程序

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit RS=P2^6; //LCD的数据/指令选择控制线

sbit RW=P2^5; //LCD的读写控制线

sbit E=P2^7; //LCD的使能控制线

sbit trig=P1^0; //超声波测距模块Trig

sbit echo=P3^2; //超声波测距模块Echo

uchar count; //中断累加变量

long int distance; //测量所得距离

unsigned char code table[ ]={"0123456789"}; //定义字符数组显示数字

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

函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒) ,可以认为是1毫秒

赋值语句占 2个机器周期(2us ),

自增/自减语句占1个机器周期(1us ),

判断语句占 2个机器周期(2us );

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

void delay1ms()

{

unsigned char i,j;

for(i=0;i

for(j=0;j

;

}

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

函数功能:延时若干毫秒

入口参数:n

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

void delay(unsigned char n)

{

unsigned char i;

for(i=0;i

delay1ms();

}

/*------------------------------------------------

LCD 写命令函数

------------------------------------------------*/

void lcd_wcom(uchar com)

{

RS=0; //选择指令寄存器

RW=0; //选择写

P0=com; //把命令字送入P0

delay(5); //延时5ms ,让1602准备接收数据

E=1; //使能线电平变化,高跳低,命令送入1602的8位数据口 E=0;

}

/*------------------------------------------------

LCD 写数据函数

------------------------------------------------*/

void lcd_wdat(uchar dat)

{

RS=1; //选择数据寄存器

RW=0; //选择写

P0=dat; //把要显示的数据送入P0

delay(5); //延时5ms ,让1602准备接收数据, 也就是检测忙信号

E=1; //使能线电平变化,数据送入1602的8位数据口

E=0;

}

/*------------------------------------------------

LCD 初始化函数

------------------------------------------------*/

void lcd_init()

{

lcd_wcom(0x38); //8位数据,双列,5*7字形 ,用到功能设定指令 lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁,用到显示开关控制指令

lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位,用到了写入模式设置指令

lcd_wcom(0x01); //清屏,用到了清屏指令

}

/*------------------------------------------------

LCD 显示固定字符函数

------------------------------------------------*/

void lcd_xianshi()

{

lcd_wcom(0x80);

lcd_wdat('D');

lcd_wdat('i');

lcd_wdat('s');

lcd_wdat('t');

lcd_wdat('a');

lcd_wdat('n');

lcd_wdat('c');

lcd_wdat('e');

lcd_wdat(':');

lcd_wcom(0x8c);

lcd_wdat('.');

lcd_wcom(0x8e); //单位是厘米//

lcd_wdat('c');

lcd_wdat('m');

}

/*------------------------------------------------

定时器0初始化,用于计算响应信号时间

------------------------------------------------*/

void init_t0()

{

TMOD=0x01;

TL0=0x18; //设初值1000us

TH0=0xfc;

ET0=1;

EA=1;

}

/*------------------------------------------------

超声波模块触发信号

------------------------------------------------*/

void trigger()

//显示位置的确定方法规定为“80H+地址码” //空3列显示小数点

{

trig=1;

_nop_(); //15us>10us

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

trig=0;

}

/*------------------------------------------------

超声波模块相应端口初始化函数

------------------------------------------------*/

void init_measuring()

{

trig=0;

echo=0;

count=0;

}

/*------------------------------------------------

超声波模块测距函数

------------------------------------------------*/

void work()

{

uchar l;

uint h,y;

TR0 = 1; //启动定时器T0

while(echo==1)

{

;

TR0 = 0;

l = TL0;

h = TH0;

y = h *256+ l; //us部分 // 总时间=y + 1000 * count;//计算总时间us

TL0 = 0x9c;

TH0 = 0xff;

delay(30);

distance = (y+1000 * count)*0.344*1.25/2; //原始为:(0.344毫米/us)*时间/2

// 1.25为进行标定所得,进行补偿 }

/*------------------------------------------------

超声波模块测量结果显示函数

------------------------------------------------*/

void display(uint x)

{

uchar i,j,k,l;

i=x/1000; //千 ,毫米

j=(x/100)%10; //百

k=(x/10)%10; //十

l=x%10;

lcd_wcom(0x89); //单位是厘米,0x89//

lcd_wdat(table[i]);

lcd_wdat(table[j]);

lcd_wdat(table[k]);

lcd_wcom(0x8d);

lcd_wdat(table[l]);

}

/*------------------------------------------------

主函数

------------------------------------------------*/

void main()

{

lcd_init(); //液晶初始化

init_t0(); //定时器0初始化

init_measuring(); //超声波相应端口初始化

//关闭定时器T0 //个

{

lcd_xianshi(); //液晶显示特定字符

trigger(); //触发超声波启动

while(echo==0) //等待回声

{

} ;

work(); //进行距离测量 display(distance); //对测量结果进行显示 init_measuring(); //超声波相应端口初始化 delay(60); //每次测量间隔60ms }

}

/*------------------------------------------------

定时器T0中断服务函数

------------------------------------------------*/

void T_0() interrupt 1

{

TF0 = 0;

TL0 = 0x18;

TH0 = 0xfc;

count++;

}

超声波测距系统设计

专业班级:

学生学号:

学生姓名:

指导老师:

二〇XX 年X 月

目录

第一章 研究方案 . ........................................................ 1

1.1 研究对象分析 . ................................................... 1

1.2 测试要求 . ....................................................... 1

1.3 系统框图 . ....................................................... 1

1.4 器件选择 . ....................................................... 2

1.4.1 传感器的选择 . ............................................. 2

1.4.2 单片机的选择 . ............................................. 4

1.4.3 显示器件的选择 . ........................................... 6

1.5 系统研制可行性分析 .............................................. 7

第二章 硬件电路设计 . ..................................................... 9

2.1 理论依据 . ....................................................... 9

2.1.1 什么是超声波 . ............................................. 9

2.1.2 超声波的特性及特点 . ...................................... 10

2.1.3 超声波测距原理 . .......................................... 10

2.1.4 整体控制方式 . ............................................ 11

2.2 电路设计 . ...................................................... 11

2.2.1 传感器电路 . .............................................. 11

2.2.2 单片机系统电路 . .......................................... 11

2.3 实物测试 . ...................................................... 13

第三章 软件设计 . ....................................................... 15

3.1 系统总体设计 . .................................................. 15

3.2 测距子程序设计 . ................................................ 16

3.3 显示子程序设计 . ................................................ 17

第四章 调试与误差分析 . ................................................. 19

4.1 电路调试 . ....................................................... 19

4.2 软件调试 . ....................................................... 19

4.3 误差分析 . ....................................................... 19

4.4 课程心得 . ....................................................... 21

参考文献 . ............................................................... 23

附录A 实物图 .......................................................... 25

附录B 总程序 .......................................................... 27

第一章 研究方案

1.1 研究对象分析

测距的原理和方法有很多,根据其信息载体的不同可归纳为光学方法、无线电方法和超声波方法。前两者在某些地方有局限性,相比之下,超声波方法具有突出的优点。首先,超声波对色彩、光照度不敏感,可用于测量透明及漫反射性差的物体(如玻璃、抛光体),可以直接测量近距离目标、适用范围广、方向性强、覆盖面较大等优点;其次,超声波对于被测物体处于黑暗,有灰尘,烟雾,电磁干扰,有毒等恶劣的环境有一定的适应能力。因此在液位测量,机械手控制,车辆自动导航,物体识别等方面有广泛的应用。尤其是在空气测距的应用中,由于空气中波速较慢,其回波信号中包含的沿传播方向上的结构信息很容易检测出来,具有很高的分辩力,因而其准确度也较其它方法高,而且超声波传感器具有结构简单,体积小,费用低,信号处理简单可靠,易于小型化和集成化等特点。超声波测距作为一种非接触式测距技术,是利用超声波传播速度在相当大范围内与频率无关,通过计算超声波在声波探头与被测物体之间的传输时间来测量距离,在相关计算中相当灵活,且测量过程中对被测目标无损害。基于超声波的这些独特优点,使得超声波测距技术越来越受到人们的重视。

本课程设计旨在研究超声波测距系统的原理和应用。

1.2 测试要求

选择合适的超声波测距模块测量距离,设计外部电路和应用单片机系统实现对距离的测量并通过显示装置显示距离。进行试验验证,并分析讨论相关特性参数等。

1.3 系统框图

图1 系统框图

1.4 器件选择

距离传感器是利用测时间来实现测距离的原理,以检测物体的距离的一种传感器。在三角测量、导线测量、地形测量和工程测量等工作中都需要进行距离测量。目前测量距离一般有以下几种方法:1、超声波测距法。利用超声波传感器产生超声波和接收超声波,同时超声波在空气中的传播速度已知,通过测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。2、激光测距法。激光测距一般有脉冲法和相位法。脉冲法测距过程:测距仪发射出的激光经被测量物体的反射后又被测距仪接收,测距仪同时记录激光往返的时间。光速和往返时间的乘积的一半,就是测距仪和被测量物体之间的距离。脉冲法测量距离的精度是一般是在+/- 10厘米左右。另外,此类测距仪的测量盲区一般是1米左右。3、红外测距法。红外测距传感器具有一对红外信号发射与接收二极管,利用的红外测距传感器LDM301发射出一束红外光,在照射到物体后形成一个反射的过程,反射到传感器后接收信号,然后利用CCD 图像处理接收发射与接收的时间差的数据。经信号处理器处理后计算出物体的距离。4、24GHZ 雷达测距法。24GHz 雷达传感器是可以将微波回波信号转换为电信号的微波传感器的一种类型,将24GHz 选为发射频率,利用发送与接收信号的频率差,通过公式计算出物体运动的速度。经过参考信号与回波信号的混频,双通道传感器输出两个频率幅度相同,相位差为90°的中频信号IF1和IF2,根据90°相位引导的信号类型,可识别物体的运动方向(远离或靠近)。如果要测量一个参数(距离),如静态物体到传感器的距离,那么选用线性升坡或降坡作为发射频率的时间相关函数就足够了,并定期重复这些坡,以期得到可能的平均值。根据延迟效应的计算公式可以得到物体的距离。

1.4.1 传感器的选择

本课程设计采用的是超声波测距法,即采用超声波传感器作为采样传感器,对距离进行采样。超声波传感器是利用超声波的特性研制而成的传感器。以超声波作为检测手段,必须产生超声波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声换能器,或者超声探头。

超声波探头的工作原理主要是基于压电压电晶体的压电效应。压电效应主要分为正压电效应和逆压电效应,所谓正压电效应就是在晶体两级加入电压时,晶体会产生机械变形,从而在晶体表面产生机械波;逆压电效应正好相反,当晶片本身产生机械形变,或者加入了机械波时,在晶体的表面就会产生电荷,从而在晶体两级产生相应的电压。

超声波传感器主要由压电晶片组成,是利用压电晶体的谐振来工作的。它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间

未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器。从而既可以发射超声波,也可以接收超声波。小功率超声探头多作探测作用。它有许多不同的结构,可分直探头(纵波)、斜探头(横波)、表面波探头(表面波)、兰姆波探头(兰姆波)、双探头(一个探头反射、一个探头接收)等。超声波传感器内部结构图如图2所示。

图2 超声波传感器内部结构图

经分析论证,本课程设计采用HC-SR04超声波测距模块集距离数据。

HC-SR04超声波测距模块可提供2cm-400cm 的非接触式距离感测功能,测距精度可达到3mm ;模块包括超声波发射器、接收器与控制电路。基本工作原理:1、采用IO 口TRIG 触发测距,给至少10us 的高电平信号;2、模块自动发送8个40KHz 的方波,自动检测是否有信号返回;3、有信号返回,通过IO 口的ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。超声波测距模块的超声波时序图如图3所示。

图3 超声波时序图

时序图表明,只需要提供一个10us 以上的的高电平信号该模块内部将自动发送8个40KHz 的周期电平,并自动检测是否有信号返回。一旦检测到有信号返回,则输出回响信号,回响高电平持续的时间就是超声波从发射到返回的时间。由此通过发射信号到收到回响的信号时间间隔可以计算得到距离。

HC-SR04超声波测距模块有四个引脚,测距模块实物图如图4所示。其中VCC 为电源引脚,供5V 电源,GND 为接地引脚,TRIG 为触发控制信号输入,ECHO 为回响信号输出。

图4 HC-SR04超声波测距模块实物图

表1 HC-SR04超声波测距模块的电气参数

本课程设计采用HC-SR04超声波测距模块进行测距的原因:该型超声波测距模块集成了包括超声波发射器、接收器与控制电路这三个主要测距电路,其高集成度之高,所以能大大地简化超声波测距电路的组成,而且该模块性能稳定,测度距离精确,高精度等特点,使得盲区超近(2cm )。

同时,在连接电路时应注意此模块不宜带电连接,如要带电连接,则先让模块的GND 端先连接,否则会影响模块的正常工作。测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的结果。

1.4.2 单片机的选择

单片微型计算机简称单片机,它把组成微型计算机的各个功能部件:中央处理器CPU 、随机存取存储器RAM 、只读存储器ROM 、可编程存储器EPROM 、并行及串行输入输出I/O接口电路、定时器/计数器、中断控制器等部件集成在一块半导体芯片上,构成一个完整的微型计算机。

单片机作为计算机发展的一个重要分支领域,根据发展情况,从不同角度,单片机

大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。

通用型是按单片机适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC 接口等功能的温度测量控制电路。

总线型是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。

控制型是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。

结合本次课程设计的实际要求,选用较89C51性能更优越的STC89C52单片机作为本次设计使用的单片机。

STC89C52是STC 公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU 和在系统可编程Flash ,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:8k 字节Flash ,512字节RAM ,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89C52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz ,6T/12T可选。

单片机各引脚功能如下:VCC :供电电压,GND :接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4

个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL )这是由于上拉的缘故。P3口也可作为STC89C52的一些特殊功能口。STC89C52引脚图如图5所示。

图5 STC89C52单片机引脚图

1.4.3 显示器件的选择

显示器是电子计算机最重要的终端输出设备,是人机对话的窗口。显示器有电路部分和显示器件组成,采用何种显示器件,决定了显示器的电路结构,也决定了显示器的性能指标。指示或显示器件主要分为机械式指示装置和电子显示器件。传统的电压或电流表头就是一个典型的指示器件,它广泛用于稳压电源、万用表等仪器上。随着电子仪器的自能化水平提高,电子显示器件的使用日益广泛,主要有发光二极管、数码管、液晶显示器、荧光屏等。

数码管:数码管也称LED 数码管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示)这些段分别由a,b,c,d,e,f,g,dp 来表示;按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管;按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。

数码管的显示方式有两种:静态显示和动态显示。静态显示的优点是:数码管显示无闪烁,亮度高,软件控制比较容易;缺点是:需要的硬件电路较多(每一个数码管都需要一个锁存器),同时由于所有数码管都处于被点亮状态,所以需要的电流很大,当数码管的数量增多时,对电源的要求也就随之增高。所以,在大部分的硬件电路设计中,很少采用静态显示方式。动态显示的优点是:硬件电路简单(数码管越多,这个优势越明显),由于每个时刻只有一个数码管被点亮,所以所有数码管消耗的电流较小;缺点是:数码管亮度不如静态显示时的亮度高,例如有8个数码管,以1秒为单位,每个数

码管点亮的时间只有1/8秒,所以亮度较低;如果刷新率较低,会出现闪烁现象;如果数码管直接与单片机连接,软件控制上会比较麻烦等。

液晶显示器:液晶是一种液态晶体,它是有机化合物,在电场作用下会产生电光效应,其特点是工作电压低、微功耗、易于和CMOS 数字集成电路配合使用。这种显示器不能用直流驱动,因为直流电场会使液晶发生电化学分解反应,工作寿命短,因此必须采用交流驱动。它的结构是由一个公共电极和七个电极组成的七段字形。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。LCD1602是指显示的内容为16x2, 即可以显示两行,每行16个字符液晶模块(显示字符和数字)。它由若干个5x7或者5x11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM ,显示效果也不好)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的。

LCD1602液晶显示模块显示优点:a. 显示质量高。由于1602LCD 每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,画质高且不会闪烁。b. 数字式接口。1602液晶屏都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。c. 体积小、重量轻。1602液晶模块通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示屏要轻得多。d. 功耗低。相对而言,1602液晶显示屏的功耗主要消耗在其内部的电极和驱动IC 上,因而耗电量比其它显示屏要少得多。

经过分析数码管和液晶显示模块的优点,结合本课程设计,选择LCD1602液晶显示模块作为此设计的显示器件。方便显示距离大小和单位等。

1.5 系统研制可行性分析

此课设为单片机测控系统课程设计,主侧重单片机系统的设计和编写程序,故对距离进行采样时利用测距模块实现,模块集成了包括超声波发射器、接收器与控制电路这三个主要测距电路,集成度高,大大地简化超声波测距电路的组成,而且该模块性能稳定,测度距离精确,精度高,市场常见。数据处理系统利用STC89C52单片机实现,显示电路利用LCD1602液晶显示模块,两者也均为市场常见之物,因此整个系统具有研制的可行性。

本课设题目是系统设计型,主要是设计单片机系统、编写实验程序、实验调试及分析、撰写实验报告等。

第二章 硬件电路设计

硬件电路设计主要包括单片机系统、LCD 显示电路、超声波发射和接收电路三部分。在单片机系统设计方面:单片机是以89系列单片机为控制核心的设计,时钟电路采用的是12MHZ 高精度的晶振,以此来获得较为稳定的时钟信号,从而减少测量误差,选用的标准主要以稳定、快速、功能强大为主。在显示电路设计方面:通过单片机的运算,计算出测量距离,并且对测量的结果显示出来,所以在输出方面需要采用一个显示电路。选用的标准主要以显示内容丰富、方便使用为主。在超声波发射和接收电路方面:充分利用超声波的特点,选择集成度比较高的超声波测距模块,以达到系统抗干扰、稳定,准确的的功能。

2.1 理论依据

2.1.1 什么是超声波

声波是物体机械振动状态(或能量)的传播形式。所谓振动是指物质的质点在其平衡位置附近进行的往返运动形式。譬如,鼓面经敲击后,它就上下振动,这种振动状态通过空气媒质向四面八方传播,这便是声波。超声波是指振动频率大于20KHz 以上的,其每秒的振动次数(频率)甚高,超出了人耳听觉的一般上限(20KHz ),人们将这种听不见的声波叫做超声波。超声和可闻声本质上是一致的,它们的共同点都是一种机械振动模式,通常以纵波的方式在弹性介质内会传播,是一种能量的传播形式,其不同点是超声波频率高,波长短,在一定距离内沿直线传播具有良好的束射性和方向性,目前腹部超声成象所用的频率范围在 2~5MHz 之间,常用为3~3.5MHz (每秒振动1次为1Hz ,1KHz=10^3Hz,1MHz=10^6Hz,即每秒振动100万次,可闻波的频率在16~20KHz 之间)。

超声波在媒质中的反射、折射、衍射、散射等传播规律,与可听声波的规律没有本质上的区别。但是超声波的波长很短,只有几厘米,甚至千分之几毫米。与可听声波比较,超声波具有许多奇异特性:传播特性,超声波的波长很短,通常的障碍物的尺寸要比超声波的波长大好多倍,因此超声波的衍射本领很差,它在均匀介质中能够定向直线传播,超声波的波长越短,该特性就越显著;功率特性,当声音在空气中传播时,推动空气中的微粒往复振动而对微粒做功。声波功率就是表示声波做功快慢的物理量。在相同强度下,声波的频率越高,它所具有的功率就越大。由于超声波频率很高,所以超声波与一般声波相比,它的功率是非常大的。空化作用,当超声波在液体中传播时,由于液体微粒的剧烈振动,会在液体内部产生小空洞。这些小空洞迅速胀大和闭合,会使液体微粒之间发生猛烈的撞击作用,从而产生几千到上万个大气压的压强。微粒间这种剧

烈的相互作用,会使液体的温度骤然升高,起到了很好的搅拌作用,从而使两种不相溶的液体(如水和油)发生乳化,且加速溶质的溶解,加速化学反应。这种由超声波作用在液体中所引起的各种效应称为超声波的空化作用。

研究超声波的产生、传播、接收,以及各种超声效应和应用的声学分支叫超声学。产生超声波的装置有机械型超声发生器(例如气哨、汽笛和液哨等)、利用电磁感应和电磁作用原理制成的电动超声发生器、以及利用压电晶体的电致伸缩效应和铁磁物质的磁致伸缩效应制成的电声换能器等。

2.1.2 超声波的特性及特点

超声波的特性:

1、超声波可在气体、液体、固体、固熔体等介质中有效传播。

2、超声波可传递很强的能量。

3、超声波会产生反射、干涉、叠加和共振现象。

4、超声波在液体介质中传播时,可在界面上产生强烈的冲击和空化现象。

超声波是声波大家族中的一员。 声波是物体机械振动状态(或能量)的传播形式。所谓振动是指物质的质点在其平衡位置附近进行的往返运动。譬如,鼓面经敲击后,它就上下振动,这种振动状态通过空气媒质向四面八方传播,这便是声波。超声波是指振动频率大于20KHz 以上的,人在自然环境下无法听到和感受到的声波。

超声波的特点:

1、超声波在传播时,方向性强,能量易于集中。

2、超声波能在各种不同媒质中传播,且可传播足够远的距离。

3、超声波与传声媒质的相互作用适中,易于携带有关传声媒质状态的信息。

超声波是一种波动形式,它可以作为探测与负载信息的载体或媒介(如B 超等用作诊断);超声波同时又是一种能量形式,当其强度超过一定值时,它就可以通过与传播超声波的媒质的相互作用,去影响,改变以致破坏后者的状态,性质及结构 。

2.1.3 超声波测距原理

超声波测距利用的是时间差测距法。超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。

超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波立即停止计时。超声波在空气中的传播速度为344m/s(20℃室温),根据计时器记录的时间t (秒),就可以计算出发射点距障碍物的距离s ,即:s 344t /2(m )。

超声波测距原理图如图6所示。

图6 超声波测距原理图 被测距离:d =s 2-(h /2) 2。式中:s 为超声波传播距离,h 为发射探头与接收探头之间的距离,d 为实际距离。

由于s 远大于h ,因此可近似认为d =s ,则:d =s =ct /2,t 为发射超声波与接收超声波的时间间隔,c 为超声波在空气中的传播速度。

2.1.4 整体控制方式

采用单片机系统控制方式。单片机系统接收输出回响信号,进行计算、处理,把数据传送给LCD 显示模块,达到实时检测和反馈的功能。基于单片机的距离测量系统,具有硬件电路简单,程序简单和运算速度快,测速范围广,抗干扰性能好的特点。

2.2 电路设计

2.2.1 传感器电路

本课程设计所用传感器为超声波传感器,使用超声波测距模块HC-SR04进行距离测量,超声波测距模块已在第一章介绍过,此处不重复介绍。在连接电路时只需将测距模块的VCC 接入5V 电源,GND 接地,TRIG 为触发控制信号输入与单片机连接,接收单片机发出的触发控制信号,ECHO 为回响信号输出,信号接入单片机,让单片机对信号进行处理。

2.2.2 单片机系统电路

单片机时钟电路。时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。单片机内部有一个用于构成振荡器的高增益反向放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2这两个引脚跨接在石英晶体振荡器和微调电路,就构成一个稳定的自激振荡器。

电路中的电容C1和C2典型值通常选择30pF 左右,该电容大小会影响振荡器频率的高低,振荡器的稳定性和起振的快速性。晶振的振荡器频率的范围通常在1.2~12MHz 之间,晶体的频率越高,则系统得时钟频率也就变高,单片机的运行速度也就越快。但

反过来运行速度快,对存储器的速度要求就高。对印刷电路板的工艺要求也高,即要求浅间的寄生电容要小;晶体和电容应尽可能安装得与单片机芯片靠近,以减少寄生生活,更好的保证振荡器稳定,可靠地工作。单片机时钟电路如图7所示。

图7 单片机时钟电路

单片机复位电路。为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V ±5%,即4.75~5.25V 。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC 超过4.75V 低于5.25V 以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。

单片机在启动时都需要复位,以使CPU 及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST 引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST 引脚上有一个高电平并维持2个机器周期(24个振荡周期) 以上,则CPU 就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。单片机的一个上电复位电路如图8所示。

图8 单片机复位电路

显示电路,本课程设计显示电路采用LCD1602液晶显示模块显示。LCD1602液晶显示模块可以和STC89C52单片机I/O口直接相接,由于单片机P0口特殊的漏极开路输出,当P0口作为I/O口输出的时候时,输出低电平为0,输出高电平为高阻态(并非5V ,相当于悬空状态。也就是说P0 口不能真正的输出高电平,给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC ,由电源通过这个上拉电阻给负载提供电流。此设计接的上拉电阻为10K 欧姆的9脚排阻。电路图如图9所示。液晶模块

的引脚3接地(接地时对比度最高)。

图9 显示电路

LCD1602通常有14条引脚线或16条引脚线的LCD ,多出来的2条线是背光电源线。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。工作电压一般为3.3V 或5V ,对比度可调。内含复位电路,可提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能。有80字节显示数据存储器DDRAM ,并建有192个5x7点阵的字型的字符发生器CGROM ,有8个可由用户自定义的5x7的字符发生器CGRAM 。LCD1602的引脚图如图10所示。

图10 LCD1602引脚图

2.3 实物测试

将实物按各模块电路连接,连接完毕后进行实物调试,检测实物能否达到课程设计目的,若能达到,则目的实现;若不能达到则分析是什么问题使设计不能达到目的,在分析电路时将电路按设计时的模块分成小块进行测试,分析出是哪个环节出现问题,逐步解决问题,以达到课程设计目的。

第三章 软件设计

3.1 系统总体设计

单片机按编入的程序运行,开始后对显示液晶、超声波模块和定时器进行初

始化,为后续程序做好准备,初始化好后液晶显示模块开始显示固定字符,并触发超声波发射器,发射超声波,等待回波,INT0产生中断后即进入外部中断子程序,在外部中断子程序中关闭外部中断和定时器,将定时器T0的值取出,重新开启外部中断,并返回主程序。主程序再调用运算子程序,将时间值经算法运算后得出距离信息并送到液晶模块显示。一次程序运行完进行400ms 延时,即为测量间隔。如此循环每隔400ms 刷新一次距离显示。系统总体流程图如图11所示。部分程序如下。

图11 系统总体流程图

主函数程序:

void main()

{

lcd_init(); //液晶初始化

init_t0(); //定时器0初始化

init_measuring(); //超声波相应端口初始化

while(1)

{

lcd_xianshi(); //液晶显示特定字符 trigger(); //触发超声波启动 while(echo==0) //等待回声 { ; }

work(); //进行距离测量

display(distance); //对测量结果进行显示

init_measuring(); //超声波相应端口初始化

delay(60); //每次测量间隔60ms

}

}

3.2 测距子程序设计

测距子程序实现的是开启定时器、关闭定时器、读取数据及计算数据的功能。结束一次计时后,通过读取计时数据,进行算法运算即可得到被测物体与探头之间的距离。测距子程序设计流程图如图12所示。

测距子程序:

void work()

{

uchar l;

uint h,y;

TR0 = 1; //启动定时器T0

while(echo==1)

{

;

}

TR0 = 0;

l = TL0;

h = TH0;

y = h *256+ l; //us部分 // 总时间=y + 1000 * count;//计算总时间us

TL0 = 0x9c;

TH0 = 0xff;

delay(30);

distance = (y+1000 * count)*0.344*1.25/2; //原始为:(0.344毫米/us)*时间/2

}

// 1.25为进行标定所得,进行补偿 //关闭定时器T0

图12 测距子程序流程图

3.3 显示子程序设计

显示程序初始化完毕后,先显示固定字符,等待中断子程序将计算出的数值

送到液晶显示模块并进行显示。显示子程序设计流程图如图13所示。

图13 显示子程序流程图

第四章 调试与误差分析

4.1 电路调试

在本次课程设计中采用的是超声波测距模块,电路连接较简单,注意不要接

错引脚即可。在LCD1602接开发板时,此时是不需要外接上拉电阻的,上拉电阻集成在了开发板上,但当LCD1602未接在开发板上,而接在面包板上时,应接上拉电阻才能实现P0口高电平输出,才能保证液晶显示模块显示正常。

4.2 软件调试

本课程设计本要求采用汇编语言进行编程。但由于本程序较大,而C 语言

编程具有很强的灵活性,便于编写与理解,因此采用C 程序语言编写。采用自下而上的调试方法,先调试功能电路,再调试整个系统。

本课设所使用的调试软件是51系列单片机开发软件Keil C51,它是一个基

于32位Windows 环境的应用程序,支持C 语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision。Keil 提供包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案。

Keil 能以单步执行、过程单步执行、全速执行等多种运行方式进行程序调试。如果发现程序有错,可采用在线汇编功能对程序进行在线修改,不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理。在模拟调试程序后,还须通过编程器将.hex 目标文件烧写入单片机中才能观察目标样机真实的运行状况。

4.3 误差分析

根据超声波测距公式:d =s =ct /2,其中真实距离根据三角形的勾股定理公式计算得来:d =s 2-(h /2) 2,s 为超声波传播距离,h 为发射探头与接收探头之间的距离,d 为实际距离,t 为发射超声波与接收超声波的时间间隔,c 为超声波在空气中的传播速度。因为s 远大于h ,所以才近似认为d =s 。

由此可知超声波测距的误差是由测距原理误差,超声波的传播速度误差和测

量距离传播的时间误差引起的。

1、测距原理误差

测距原理误差主要取决于两探头之间的距离,虽然探头之间距离很小,但距

离是一定存在的,距离越大,误差越大,所以应尽量使超声波探头之间的距离变小。但同时两探头之间距离过小,会使刚发射出去的超声波即被接收探头接收到,从而不能实现测距的目的,因此两探头也应保持一定的合适距离。

2、超声波传播速度误差

稳定准确的超声波传播速度是保证测量精度的必要条件。波的传播速度取决

于传播媒质的特性,传播媒质的温度、压力、密度对声速都将产生直接的影响。超声波的传播速度受空气的密度所影响,空气的密度越高则超声波的传播速度就越快,而空气的密度又与温度有着密切的关系。对于测距而言,引起声速变化的主要原因是媒质温度的变化,温度变化是造成超声波测距误差的主要来源之一。因此用20℃下的超声波传播速度344m/s来计算不同温度环境下的超声测距的距离是有很大的误差。

查阅资料可知超声波速度与温度的关系式:c =331. 5+0. 607T ,其中T (K )为绝对温度且T =t +273. 15 ,t 为摄氏温度(℃)。超声波传播速度与温度关系如表2所示。

表2 声速与温度关系表

例如当温度0℃时超声波速度是332m/s,30℃时是350m/s,温度变化引起

的超声波速度变化为18m/s。若超声波在30℃的环境下以0℃的声速测量100m 距离所引起的测量误差将达到5m ,测量1m 误差将达到5mm 。

为了提高测距精度,必须对超声波的速度进行温度补偿,用温度传感等测温

器件测得环境温度的数值,从而得到该环境下的超声波速度。也可采用声速预置和温度补偿相结合的方法对声速进行修正,将更有效地降低因温度变化而产生的误差。本课程设计因在比较稳定的温度下进行实验,因此采用声速预置的方法减小超声波传播速度误差。

3、时间误差

在测量过程中,为了防止其他信号的干扰,提高测量的可靠性,单片机开始

计数时,超声波传感器常常发射由多个方波组成的脉冲串作为测量的载体。脉冲发射频率为40KHz ,忽略脉冲电路产生的延时,可知由软件生成的起始时间对于一般要求的精度是可靠的。对于超声波传播过程,超声波在空气介质的传播过程中会有很大的衰减,因此也会引起传播时间的误差。若接收电路中的比较器的阈值电压为一定值,由于粉尘及其它物质的影响,故实际测量时,不一定是第一

个回波的过零触发。第一个回波与实际检测到的第一个回波之间也存在一定的时间误差。通过查阅资料与结论分析可知接收电路常设计为接收到第3个回波时,单片机停止计数。所以最终测得的时间比实际距离所对应的时间多出3脉冲发送时间,从而造成了回波时间t 的测量误差。

在超声波的传播速度是准确的前提下,测量距离的传播时间差值精度只要在

达到微秒级,就能保证测距误差小于1mm 的误差。使用的12MHz 晶体作时钟基准的89C52单片机定时器能方便的计数到1μs 的精度,因此系统采用89C52单片机的定时器能保证时间误差在1mm 的测量范围内。

当要求测距误差小于1mm 时,假设已知超声波速度c=344m/s (20℃室温) ,

忽略声速的传播误差。测距误差∆t

4.4 课程心得

本课程设计主要是利用软件实现功能,同时结合硬件电路,硬件与软件结合

的课程设计使我们在已有知识的基础上,对软件应用和对元器件的特性有了更深一步的了解。

参考文献

[1] 李全利. 单片机原理及应用感器原理[M]. 高等教育出版社. 2012.12.

[2] 李丽荣, 张常全, 郑建红. 51单片机应用设计[M]. 北京理工大学出版社. 2012. 194-211.

[3] 李学海. 经典80C51单片机轻松入门与上手[M]. 清华大学出版社. 2009.2

[4] 何立民. 单片机应用技术选编[M]. 北京航空航天大学出版社. 2011. 89-112.

[5] 张毅坤. 陈善久, 裘雪红. 单片微型计算机原理及应用[M]. 西安电子科技大学出版社. 2009. 124-162.

[6] 张谦琳. 超声波检测原理和方法[M]. 中国科技大学出版社. 2011.189-221.

[7] 胡萍. 超声波测距仪的研制[M]. 高等教育出版社. 2003.10

[8] 李丽荣, 张常全, 郑建红. 51单片机应用设计[M]. 北京理工大学出版社. 2012.194-211.

[9] 朱爱红. 基于AT89C52的超声波测距系统[J]. 高等教育出版社. 2009. 191-217.

附录A 实物图

附录B 总程序

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit RS=P2^6; //LCD的数据/指令选择控制线

sbit RW=P2^5; //LCD的读写控制线

sbit E=P2^7; //LCD的使能控制线

sbit trig=P1^0; //超声波测距模块Trig

sbit echo=P3^2; //超声波测距模块Echo

uchar count; //中断累加变量

long int distance; //测量所得距离

unsigned char code table[ ]={"0123456789"}; //定义字符数组显示数字

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

函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒) ,可以认为是1毫秒

赋值语句占 2个机器周期(2us ),

自增/自减语句占1个机器周期(1us ),

判断语句占 2个机器周期(2us );

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

void delay1ms()

{

unsigned char i,j;

for(i=0;i

for(j=0;j

;

}

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

函数功能:延时若干毫秒

入口参数:n

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

void delay(unsigned char n)

{

unsigned char i;

for(i=0;i

delay1ms();

}

/*------------------------------------------------

LCD 写命令函数

------------------------------------------------*/

void lcd_wcom(uchar com)

{

RS=0; //选择指令寄存器

RW=0; //选择写

P0=com; //把命令字送入P0

delay(5); //延时5ms ,让1602准备接收数据

E=1; //使能线电平变化,高跳低,命令送入1602的8位数据口 E=0;

}

/*------------------------------------------------

LCD 写数据函数

------------------------------------------------*/

void lcd_wdat(uchar dat)

{

RS=1; //选择数据寄存器

RW=0; //选择写

P0=dat; //把要显示的数据送入P0

delay(5); //延时5ms ,让1602准备接收数据, 也就是检测忙信号

E=1; //使能线电平变化,数据送入1602的8位数据口

E=0;

}

/*------------------------------------------------

LCD 初始化函数

------------------------------------------------*/

void lcd_init()

{

lcd_wcom(0x38); //8位数据,双列,5*7字形 ,用到功能设定指令 lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁,用到显示开关控制指令

lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位,用到了写入模式设置指令

lcd_wcom(0x01); //清屏,用到了清屏指令

}

/*------------------------------------------------

LCD 显示固定字符函数

------------------------------------------------*/

void lcd_xianshi()

{

lcd_wcom(0x80);

lcd_wdat('D');

lcd_wdat('i');

lcd_wdat('s');

lcd_wdat('t');

lcd_wdat('a');

lcd_wdat('n');

lcd_wdat('c');

lcd_wdat('e');

lcd_wdat(':');

lcd_wcom(0x8c);

lcd_wdat('.');

lcd_wcom(0x8e); //单位是厘米//

lcd_wdat('c');

lcd_wdat('m');

}

/*------------------------------------------------

定时器0初始化,用于计算响应信号时间

------------------------------------------------*/

void init_t0()

{

TMOD=0x01;

TL0=0x18; //设初值1000us

TH0=0xfc;

ET0=1;

EA=1;

}

/*------------------------------------------------

超声波模块触发信号

------------------------------------------------*/

void trigger()

//显示位置的确定方法规定为“80H+地址码” //空3列显示小数点

{

trig=1;

_nop_(); //15us>10us

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

trig=0;

}

/*------------------------------------------------

超声波模块相应端口初始化函数

------------------------------------------------*/

void init_measuring()

{

trig=0;

echo=0;

count=0;

}

/*------------------------------------------------

超声波模块测距函数

------------------------------------------------*/

void work()

{

uchar l;

uint h,y;

TR0 = 1; //启动定时器T0

while(echo==1)

{

;

TR0 = 0;

l = TL0;

h = TH0;

y = h *256+ l; //us部分 // 总时间=y + 1000 * count;//计算总时间us

TL0 = 0x9c;

TH0 = 0xff;

delay(30);

distance = (y+1000 * count)*0.344*1.25/2; //原始为:(0.344毫米/us)*时间/2

// 1.25为进行标定所得,进行补偿 }

/*------------------------------------------------

超声波模块测量结果显示函数

------------------------------------------------*/

void display(uint x)

{

uchar i,j,k,l;

i=x/1000; //千 ,毫米

j=(x/100)%10; //百

k=(x/10)%10; //十

l=x%10;

lcd_wcom(0x89); //单位是厘米,0x89//

lcd_wdat(table[i]);

lcd_wdat(table[j]);

lcd_wdat(table[k]);

lcd_wcom(0x8d);

lcd_wdat(table[l]);

}

/*------------------------------------------------

主函数

------------------------------------------------*/

void main()

{

lcd_init(); //液晶初始化

init_t0(); //定时器0初始化

init_measuring(); //超声波相应端口初始化

//关闭定时器T0 //个

{

lcd_xianshi(); //液晶显示特定字符

trigger(); //触发超声波启动

while(echo==0) //等待回声

{

} ;

work(); //进行距离测量 display(distance); //对测量结果进行显示 init_measuring(); //超声波相应端口初始化 delay(60); //每次测量间隔60ms }

}

/*------------------------------------------------

定时器T0中断服务函数

------------------------------------------------*/

void T_0() interrupt 1

{

TF0 = 0;

TL0 = 0x18;

TH0 = 0xfc;

count++;

}


相关文章

  • 基于单片机的温度报警器
  • 中原工学院信息商务学院信息工程系专业课程设计报告 专业课程设计报告 题目:单片机课程设计报告 系 别 信息工程系 专业班级 1513132151 学 号 45645464 学生姓名 [1**********] 指导教师 156123165 ...查看


  • 电子信息类毕业设计课题
  • 电子信息类毕业设计课题 [电子通讯] 出租车计价系统 [过程控制] 基于单片机实现单回路智能调节.. [电子通讯] 脉冲数字频率计 [机床仪表] 仪表机床数控系统的设计(论文.. 磁流体发电论文 [电子通讯] 基于VC++6.0的PC 机与 ...查看


  • 测控技术与系统课程设计论文
  • 目 录 摘要.................................................................................................................. ...查看


  • 高端新型电子信息工程特色专业建设研究
  • 高端新型电子信息工程特色专业建设研究 一.引言 进入21世纪以来,我国的电子信息产业发展迅猛,根据信息产业部分析,十二五期间是我国电子信息产业发展的关键时期,预计电子信息产业仍将以高于经济增速两倍左右的速度快速发展,产业前景十分广阔.未来的 ...查看


  • 对通信工程的大学生的忠告
  • 本忠告对工科的电子类专业(如:电子科学与技术.电子信息科学与技术).机电类专业(如:自动化.电气工程及其自动化)等专业同样适用. 一.计算机学习: 大一: 1.Visual Basic:最适合入门的计算机语言,可功能很强,而且用起来无比方便 ...查看


  • 精密仪器设计实验教学改革探讨
  • 摘 要:介绍了精密仪器设计课程教学内容及课内实验设置情况,分析了该课程实验教学中存在的主要问题,提出了实验教学改革措施,以提升该课程的教学质量. 关键词:精密仪器设计:实验:教学改革 Reform on experiment teachin ...查看


  • 单片机实践报告
  • 福州大学 单片机与ADC0808接口设计 专 业: 电子信息工程系 班 级 姓 名: 学 号: 240899248 指导老师 一.实践目的 1.用AT89C51单片机控制ADC0808将模拟信号(0~5v)转换成数值量(0~255),再控制 ...查看


  • 嵌入式报告
  • 嵌入式实训报告 姓名:张龙 班级:电气803 学号:08010270 嵌入式系统学习体会 一. 嵌入式发展前景 嵌入式系统无疑是当前最热门最有发展前途的IT 应用领域之一.嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器. ...查看


  • 电容式加速度传感器
  • 湖 南 科 技 大 学 课 程 设 计 课程设计名称: <传感器/测控电路>课程设计 学 生 姓 名: 李振文 学 院: 机电工程学院 专业及班级: 测控技术与仪器 2班 学 号: 0903030211 指导教师: 余以道 杨书 ...查看


热门内容