基于51单片机超声波测距仪的系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计
题目:基于51单片机超声波测距仪的系统设计学院:机械与电气工程学院
年级专业:
学生姓名:
学号:
指导教师:
完成时间:
目录
摘要: (1)
1 绪论 (1)
1.1课题背景 (1)
1.2本课题研究意义 (3)
1.3本课题的任务 (3)
1.4系统整体目标 (3)
2 系统硬件设计 (3)
2.1系统工作原理 (3)
2.2控制器模块设计 (4)
2.3STC89C52单片机 (4)
3 硬件设计 (6)
3.1单片机最小系统 (6)
3.2晶振电路设计 (7)
3.3按键电路设计 (8)
3.4复位电路 (8)
3.5超声波测距模块 (9)
3.6显示报警模块设计 (10)
3.7数码管显示模块设计 (10)
4 软件设计 (11)
4.1 软件开发工具的选择 (11)
4.2系统软件设计的一般原则 (12)
4.3系统软件设计的一般步骤 (13)
4.4主程序设计 (13)
4.5中断处理程序设计 (14)
4.6计算及显示程序设计 (15)
5调试与小结 (16)
5.1系统调试 (16)
5.2总结 (17)
附录 (20)
基于单片机的DS18B20温度传感器测温系统设计
摘要:本论文比较详细介绍了一种基于单片机的超声测距设计系统,可以用于智能停车场作为车位是否有车的传感器。
该系统是以空气中超声波的传播速度为确定条件,利用发射超声波与反射回波时间差来测量待测距离。
本系统的安装和使用较方便,价格便宜,并可与无线测控系统配合使用,有非常广阔的应用前景。
论文简单讲述了超声波检测的发展和原理,介绍超声传感器的工作原理及特性,在介绍超声测距系统功能的基础上,提出了系统的总体构成,针对测距系统发射、接收、检测、显示部分的总体设计方案进行了论证。
介绍了A T89S51单片机在系统中的应用,分析了系统各部分的硬件及软件实现。
最后测距仪进行验证。
各主要技术指标均达到设计要求。
该测距仪对室内停车场有限范围的距离测量具有较高的精度和可靠性,最后文中分析了误差产生的原因及如何对系统进行完善提出了一些改进建议。
关键词:超声测距传感器A T89S51单片机
1 绪论
1.1 课题背景
社会在进步,随着经济生活的发展,随着人们生活水平的提高,在当今社会,车辆已经逐渐成为了人们日常生活中至关重要的一部分,我们知道我们越来越离不开汽车了,以车代步已经成为生活的一部分。
关于汽车的各种新技术也层出不穷,但是放眼望去,绝大多数的厂家和研究机构的研究方向过多的集中在了设备本来已经相当高级的车上。
随着计算机技术、自动化技术发展,测距与识别问题在工业中变得十分重要。
例如,传统的如钢卷尺接触式测量仪器在测量一定距离时,这种仪器对高于3m的顶板安设困难,且测量不准确;对于横向变形量的测量,若安设于两侧之间,则妨碍人、车来往,如果不固定安设装,则测量精度很低,难以监测微小变形。
在自动化装配、检测、分类、加工与运输等过程中,要对随意放置的工件进行作业,这就必须对工件的位置、形状、姿势、种类自动地进行判别,尤其在在工件运输过程中进行识别,则问题更为复杂与困难,因此人们急切需要各种非接触式的测距仪。
我们目前的非接触式测距仪常采用超声波、激光和雷达,红外线等。
但激光和雷达测距仪造价偏高,红外线测量距离又太短,不利于广泛的普及应用,在某些应用领域有其局限性,相比之下,超声波方法具有明显突出的优点。
因此,超声波方法作为非接触检测和识别的手段,已越来越引起人们的重视。
在机器人避障、导航系统、机械加工自动化装配及检测、自动测距、无损检测、超声定位、汽车倒车、工业测井、水库液位测量等方面已经有了广泛的应用。
超声检测的原理主要是利用超声波作为载体,即通过超声在媒质中的传播、散射、吸收、波形转换等,提取反映媒质木身特性或内部结构的信息,达到检测媒质性质、物体形状或几何尺寸、内部缺陷或结构的目的。
我国无损检测技术是从无到有,从低级阶段逐渐发展到应用普及的现阶段水平。
超声波检测仪器的研制生产,也大致按此规律发展变化。
五十年代,我国开始从国外引进超声波仪器,多是笨重的电子管式仪器。
如英国的UCT-2超声波检测仪,重达24Kg,各单位积极开展试验研究工作,在一些工程检测中取得了较好的效果。
五十年代末六十年代初,国内科研单位进口了波兰产超声仪,并进行仿制生产。
随后,上海同济大学研制出CTS一10型非金属超声检测仪,也是电子管式,仪器重约20Kg,该仪器性能稳定,波形清晰。
但当时这种仪器只有个别科研单位使用,建工部门使用不多。
直至七十年代中期,因无损检测技术仍处于试验阶段,未推广普及,所以仪器没有多大发展,仍使用电子管式的UCT-2,CTS一10型仪器。
目前,计算机市场价格大幅度下降,采用非一体化超声波检测仪器,计算机可发挥它一机多用的各种功能,实际上是最大的节约。
过去那种全功能的仪器设置,还不如单独的超声仪,计算机可充分发挥各自特点。
高智能化检测仪器只能满足检测条件,使用环境,重复性测试内容等基木情况一样,才可充分发挥其特有功能。
仪器设计也应从实际情况出发,才能满足用户的要求。
综上所述,我国超声波仪器的研制与生产,有较大发展,有的型号已超过国外同类仪器水平。
目前常用的超声传感器有两大类,即电声型与流体力型。
电声型主要有:压电传感器、磁致伸缩传感器、静电传感器。
流体动型中包括有气体与液体两种类型的哨笛。
由于工作频率与应用目的不同,超声传感的结构形式是多种多样的,并且名称也有不同,例如在超声检测和诊断中习惯上都超声传感器称作探头,而工业中采用的流体动力型传感器称为“哨”或“笛”。
电子测距仪要求测量范围在0.10~5.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,公式L=(△t/2)*C简单易算,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于液位、井深、管道长度的测量等场合。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求。
1.2 本课题研究意义
传感器技术是现在信息技术的主要内容之一。
其中超声波传感器有着广泛、普遍的应用,利用单片机控制超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。
由于超声波指向性强,能量消耗缓慢,在介质中传播距离较远,与被测量物体不需要直接接触,且不受光线的影响,所以超声波测距仪经常用于汽车的倒车雷达、机器人自动避障行走、建筑施工工地以及一些工业现场,使移动的物体能够安全的避障,例如:液位、井深、管道长度等场合,为人类提供不可想象的便利。
因此研究超声波测距仪有重要的意义。
1.3 本课题的任务
本文的设计目的就是使用单片机的控制功能并利用超声波传感器实现测量距离。
具体为根据超声波测距原理设计出超声波测距器的硬件结构电路;对设计的电路进行分析并能够产生超声波,实现超声波的发送和接收,最终实现利用超声波方法实现测距;编写主程序和中断服务程序;以数字的形式显示测量距离。
1.4 系统整体目标
本文的设计目的就是使用单片机的控制功能并利用超声波传感器实现测量距离。
具体为根据超声波测距原理设计出超声波测距器的硬件结构电路;对设计的电路进行分析并能够产生超声波,实现超声波的发送和接收,最终实现利用超声波方法实现测距;编写主程序和中断服务程序;以数字的形式显示测量距离。
2 系统硬件设计
2.1 系统工作原理
设计是基于单片机的超声波测距器,采用STC89C52单片机系统,超声波传感器,电源、复位、报警等电路。
采用12MHz高精度的晶振,以获得比较稳定时钟频率,减小测
量误差。
单片机利用P1.0端口输出超声波换能器所需的40kHz的方波信号,利用外部中断INT0端口检测超声波接收电路输出的返回信号。
系统总体的设计方框图如图所示:
2.2 控制器模块设计
STC89C52单片机是本文设计的超声波测距器的核心组成部分,一方面要接收传感器发送的信号,还要对接收到的信号分别进行处理并响应,另一方面还要接收来自系统的报警请求。
本文中所用的为当前市面广泛应用的51系列单片机。
2.3 STC89C52单片机
STC89C52单片机是宏晶科技有限公司推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择。
STC89C52微控制器使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU并且具有8K在系统可编程Flash存储器,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选节电模式。
空闲模式下,CPU停止工作,允许定时器/计数器、RAM、串口、中断继续工作。
掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机的一切工作停止,一直到下一个中断或硬件复位为止。
这一模块以单片机为中心把程序代码烧进去然后外围接上复位电路、晶体振荡电路、按键控制、LED显示电路、报警电路等子模块。
(1)管脚图和主要引脚功能说明:
图2 STC89C52单片机管脚图
1)VCC(40引脚):电源电压;
2)VSS(20引脚):接地;
3)P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路8位双向的I/O口。
作为输
出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。
在访问外部程序和数据存储器的时候,P0口也可以提供低8位地址和8位数据的复用总线。
此时,P0口内部上拉电阻有效。
在Flash Rom 编程时,P0端口接收指令字节。
而在校验程序时输出指令字节,验证时,要求外接上拉电阻;
4)EA/VPP(31引脚):访问外部程序存储器控制信号。
为了使得从0000H到FFFFH的外
部程序存储器读取指令,EA必须接GND。
注意加密方式1时,EA将内部锁定位REAET,为了执行内部程序指令,EA应该接VCC;
5)ALE/PROG(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8
位地址的输出脉冲。
在Flash编程时,此引脚(PROG)也用作编程输入脉冲;
6)PSEN(29引脚):外部程序存储器选通信号;
7)P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。
P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流;
8)XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端;
9)XTAL2(18引脚):振荡器反相放大器的输出端;
10)P3端口(P3.0~P3.7,10~17引脚);P3是一个带内部上拉电阻的8位双向I/O端口。
P3的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。
P3作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流;
11)RET(9引脚):复位输入。
当输入连续两个机器周期以上高电平为有效,用来完成单
片机的复位初始化操作。
看门狗及时完成后,RST引脚输出96个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效;
12)P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。
P1
的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。
3 硬件设计
3.1 单片机最小系统
单片机最小系统如图3所示。
图 3 单片机最小系统
本文设计选用12MHz的晶振,选择使用20pf的负载电容相配合。
晶振电路与单片机的XTAL1、XTAL2引脚相接:
(1)XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
(2)XTAL2:振荡器反相放大器的输出端。
(3)选择使用的C1和R6的规格分别为10uf和10K,目的是保证在上电瞬间,RST脚上的高电平持续时间不少于两个机器周期。
3.2晶振电路设计
LCD1602显示电路原理图如图4所示。
通过10K可调电阻可以调节1602背光显示亮度。
P0口接一个10K的上拉排阻。
晶振是晶体振荡器的简称,在电气领域上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络。
这个网络有两个谐振点,这两个谐振存在一定的频率差距,其中并联谐振的频率较高于串联谐振的频率。
而且由于晶体原生特性的影响使得这个频率差距在一个极窄范围内,在这个范围内,可将晶振等效为一个电感,如果在晶振的两端分别并联一个电容将构成一个并联谐振电路。
这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路。
由于晶振等效为电感的频率范围非常窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会发生很大的变化。
晶振有一个很重要的参数,那就是负载电容值。
想要得到晶振需要的谐振频率的话,就得选择与负载电容值相等的并联电容。
一般的晶振振荡电路都是在一个反相放大器的两端接入晶振,再将两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于负载电容。
需要注意的是一般IC的引脚都有等效输入电容,这个不能够忽略。
一般的晶振负载电容为15pF或12.5pF,如果还需要考虑元件引脚的等效输入电容,那么两个22pF的电容构成晶振的振荡电路就是比较好的选择。
本文设计选择由两个30pF 的电容构成晶振的振荡电路来平衡其他元件引脚的等效输入电容。
图 4 晶振电路
3.3按键电路设计
四个独立按键电路图如图5所示,每个独立按键接一个I/O口构成独立按键,前三个按键S4~S6分别三个DS18B20,S7按下时为全三个DS18B20温度全显示。
图 5 按键电路
3.4复位电路
三个DS18B20接线如图6所示,每个传感器接一个I/O口。
单总线型DS18B20温度传感器采用一个DS18B20接一个I/O口的形式,大大简化了程序编写难度,通过排针可外接电源供电。
复位方法一般有上电自动复位和外部按键手动复位。
通过复位可以初始化单片机的所有设置,以使CPU及系统的各部件处于确定的初始状态,并从初态开始工作。
单片机在时钟电路工作以后,在RESET端持续给出两个机器周期即24个振荡周期以上的高电平时就可以完成复位操作。
本文设计选择采用的是外部手动按键复位电路,需接上拉电阻来提高输出高电平的值。
3.5超声波测距模块
本文设计采用HC-SR04超声波测距模块,该超声波测距模块可提供1cm-500cm的非接触式距离感测功能,测距精度可高达3mm。
模块包括超声波发射器、超声波接收器与控制电路。
(1)基本工作原理为:
采用IO触发测距,给至少10us的高电平信号。
模块自动发送8个40KHz的方波,自动检测是否有信号返回。
有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340m/s))/2。
(2)模块参数与接口定义
HC-SR04超声波测距模块,拥有性能稳定,测距精确,模块高精度,盲区小等优点。
目前市场前景非常可观,甚至能和国外的SRF05,SRF02等超声波测距模块相媲美。
整个模块的原理图如下:
图6超声波测距模块原理图
3.6显示报警模块设计
本文设计选择采用蜂鸣器和LED数码管。
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
拥有价格低廉、声频可控的优点。
数码管是一种半导体发光器件,其基本单元是发光二极管。
价格便宜,使用简单是其最大的优点。
图7 显示报警模块
3.7数码管显示模块设计
发光二极管的缩写是LED(Light Emitting Diode),每个数码管里面都有8只发光二极管,分别将它们记作a、b、c、d、e、f、g、dp,其中dp是小数点,每一只发光二极管都有一根电极引到外部的引脚上,另外一只二极管的引脚连接在一起同样也引到外部引脚上,此引脚就记作公共端COM。
现在市面上常用的LED数码管有两种,即共阳极数码管与共阴极数码管。
共阳极数码管是数码管里面的发光二极管的阳极接在一起作为公共引脚即公共阳极,在使用时此公共引脚接到电源正极。
与之相反,共阴极数码管就是数码管里面的发光二极管的阴极接在一起作为公共引脚即公共阴极,在使用时此引脚接到电源负极。
单片机对数码管的显示又可分为静态显示和动态显示。
静态显示可以稳定地显示数值,但是搭建电路时比较繁琐,而动态显示是数码管轮流显示再利用人眼的“视觉暂留”特性,这样看出来的就是在显示不同数值。
数码管的动态显示比较实用,电路构建简单,所以本文设计采用动态扫描的方法显示测量距离,只要轮流显示的速度足够快的时候就能够实现测量数值的显示。
显示模块选用4位共阳极数码管进行动态扫描,此种扫描方式完全达到了显示要求。
显示模块连接电路图如图所示:
图8显示模块连接电路图
4 软件设计
4.1 软件开发工具的选择
要使单片机系统按照人的意图办事,需设法让人与计算机对话,并听从人的指挥。
程序设计语言是实现人机交换信息的最基本工具,可分为机器语言、汇编语言和高级语言。
机器语言用二进制编码表示每一条指令,是计算机能直接识别和执行的语言。
用机器语言编写的程序成为机器语言程序或者指令程序(机器码程序)。
因为机器只能识别和执行这种机器码程序,所以又称它为目标程序。
用机器语言编写程序不易记忆、不易查错、不易修改。
为了克服机器语言的上述缺点,可采用有一定含义的符号,即指令助记符来表示,一般都采用某些有关的英文单词的缩写。
这样就出现了另一种程序语言—汇编语言。
汇编语言是用助记符、符号和数字等来表示指令的程序语言,容易理解和记忆,它与机器语言指令是一一对应的。
汇编语言不像高级语言(如BASIC)那样通用型强,而是属于某种计算机所独有,与计算机的内部硬件结构密切相关。
用汇编语言编写的程序称为汇编语言程序。
以上两种语言都是低级语言。
尽管汇编语言有不少优点,但它仍存在着机器语言的某些缺陷:与CPU的硬件结构密切相关,不同的CPU其汇编语言是不同的。
这使得汇编语言程序不能移植,使用不便;其次,要使用汇编语言进行程序设计必须了解所使用CPU硬件的结构与性能,对程序设计人员有较高的要求。
为此,又出现了对单片机进行编程的高级语言,如PL\M,C等。
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
经分析综合得知,本课题采用C语言进行编程。
4.2 系统软件设计的一般原则
单片机应用软件系统设计包括功能模块划分、程序流程确立、模块接口设计以及程序代码编写。
我们依据系统的功能要求,将整体软件系统分割成若干个独立的程序模块。
这些程序模块可以是几条语句的集合、功能函数或程序文件。
随后,根据个程序模块的实现功能写出流程,一般需要写出具体的实现功能描述。
程序代码通常采用汇编语言或高级语言(C语言)编写。
本课题采用C语言编程,在此必须注意以下问题:
(1)提高程序代码效率
必须熟悉当前使用的C语言编译器,试验每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道代码效率。
(2)减少程序错误
我们在编写程序时,要注重考虑如下方面。
物理参数、资源参数、应用参数、过程参数。
(3)单片机的抗干扰性
防止干扰最有效的方法是去除干扰源、隔离干扰路径。
单片机干扰最常见的现象就是复位,导致程序运行异常。
设计系统是一般需要添加一个“看门狗”监控模块,在系统出现不可逆转的干扰时,监控模块将重启系统,并从断点处继续执行。
(4)系统的可靠性
要测试单片机软件功能的完善性;上电、掉电测试;系统耗损测试。
4.3 系统软件设计的一般步骤
系统进行软件设计时,先要对本课题硬件有一个熟练的掌握,知道系统的组成,数据的传输,信号是如何被控制的,以及信号的显示。
然后进行软件设计时,先搞清楚各个部分的子程序及他们的流程图,然后进行各子程序的编写,最后通过主函数把各子程序连接起来实现设计。
4.4主程序设计
主程序在对整个单片机系统进行初始化以后,先将超声波的回波接收标志位置定位,与此同时让单片机P1.0端口输出一个低电平目的是为了启动超声波发射电路,随即将定时器T0启动。
然后调用计算距离的子程序,再根据定时器T0记录的时间计算出需要的测量的距离,之后再调用显示子程序,将测出的距离的数值以十进制的形式送到数码管并显示。
同时再调用声音处理程序来控制蜂鸣器进行报警。
最后主程序通过对回波信号的接收,完成接下来的后续工作。
如果标志位清零,那么则说明接收到了回波信号,即主程序会返回到初始端重新将回波接收标志位置定位,并且在单片机的P0.1端口上发送低电平到超声波发射电路,就这样连续不断的运行,循环不断地工作,保证测距得以实现。
整个系统设计的关键是对距离进行测量这一部分,之后通过单片机来处理测量数据还是比较容易实现的,能精确地实现测距。
在测距中,各种信号包括温度对声速的影响都将干扰到测距的准确性,为测距带来误差。
这其中超声波的余波信号对整个设计中测距精确度的干扰的影响比较大。
超声波接收回路中的超声波信号共分为两种波信号:第一种波信号为余波信号,就是当发射探头发射出信号之后,超声波接收探头能够马上接收到的超声波信号,实际就是超声波的发射信号;另一种波信号就是有效信号,即经过障碍物表面反。