基于单片机的超声波测距系统设计
基于单片机的超声波测距系统设计
众所周p> 一、超声波测距的工作原理 渡越时间检测法的原理就是:检测从超声波发射器发出的超声波,经气体介质的传播到接收器的时间,即渡越时间[4]。而用在传媒介质为空气中声波的速度乘以该渡越时间就可以得出我声波总的传播距离。由于该距离是发射到发射面后再有接收端口接收到的,因此实际的距离则是之前声波乘以渡越时间的一半。而对于时间的计算则是通过51单片机的内部定时器来实现。
测距的具体过程如下:通过超声波发射装置向某一方向或是某一反射面发射超声波,同时激发单片机内部的定时器开始计时。在超声波发射后遇到障碍物则被反射回来,之后被超声波的接收端所接收到;与此同时,单片机的内部定时器停止计时。那么在单片机的内部定时器中的这段时间就是渡越时间,之后将这段时间送给单片机进行读取并计算,最后单片机将最终的结果显示到数码管上。
二、超声波测距系统的组成整个测距系统的话主要是由C51单片机作为核心的控制系统以及发射模块、接收模块、报警模块、显示模块、电源模块等组成。具体如图1所示:
在这其中单片机作为主要的核心,它的主要的功能将会是,为发射端口提供40KHZ的高频方波信号,经过换能器和驱动电路后将超声波发射出去。而接收电路接收到反射波后,向单片机发送一个低电平的信号。单片机接收来自接收模块的低电平信号后停止计时并读取出内部定时器的数值,同时进行相应的计算,对最后的结果进行处理后使其能显示在3位的共阳数码管上。而如果当测距的距离超出最大的测距范围时,单片机也能及时触发相应的报警模块进行蜂鸣报警。
其他例如显示模块、报警模块、发射模块等将在测距硬件部分中介绍。三、超声波测距系统的硬件模块组成
(一)发射电路模块发射电路主要是由超声波发送头、超声波脉冲变压器、电阻、三极管组成。其中脉冲变压器的主要功能就是对超声波发送头处的电压进行升压处理。这样处理的好处就是能够有效地提高发送的功率,使得我的超声波发射的距离能够大大地提高。
发送的过程就是我单片机通过编程使其产生了40KHZ的高频信号,然后该信号通过变压器后加载到了发送头上,从而驱动了超声波的发送头发送出高频超声波。♥ (二)接收电路模块
接收电路主要是由放大电路、检波电路、比较整型电路所构成。放大电路主要是由两组三极管所构成,而其他2个电路则是由三极管、电容和检波二极管所组成。⚥ 通常情况下从发射段发射出去的超声波经反射回来后会有一定程度的衰减。所以接收电路首先要做的就是对接收到的信号进行放大处理。通过两组的三级管构成的放大电路进行放大,每组放大倍数定为70倍。之后通过由IN4148构成的检波电路和电容组成的整型电路后,输出的直流信号能被单片机有效地读取到。采用这种电路♡设计方法可以使得接收性能稳定且结构简单。
(三)显示电路显示电路主要是由3位共阳级的数码管为主体所构成的。由于笔者所采用的是动态扫描的读取方式,因此还加上了S9012三极管来驱动数码管的工作。
(四)报警电路报警电路的主要是由蜂鸣器、电阻、三极管所组成。在其中设定当在进行测量中测量的距离值小于预先设好的值时,蜂鸣器将会被触发,并给予报警信号。一旦高于设定的值时,将会停止报警。
三、软件编程设计与思路超声波测距仪的软件编程主要是可以将软件执行的主要过程分为几个模块来思考。将其分为主程序模块、超声波输出模块、超声波接收模块以及显示模块。主程序将作为整个程序的核心,根据相应的需要来调用其他的相应子模块。同时在程序的执行过程中,由于该软件程序既涉及到有时间要求较高的控制过程(比如对于单片机内部定时器的开关的触发)又涉及到一系列复杂的计算问题(比如数值类型的转换和计算等),因此综合比较分析下来,使用单片机的C51语言编程比汇编语句更加有效。
(一)主程序模块主程序模块首先进行的是整个系统的环境初始化,对所用的变量恢复原始设置。之后便是对定时器开始进行一定的配置。其值为0时代表其执行计数功能,而其值为1则代表执行定时功能。过了初始化这个步骤后,当定时器标定位是0时进行的就是调用超声波输出模块,使得40KHZ的方波信号从超声波发射头中发射出去,同时启动单片机的内部定时器,开始计时。
随后紧接着一步就是进行判断,判断测距的距离是否在标定的范围内,如果不在则调用相应的报警功能。如果在相应的标定距离则进入while循环语句中,调用显示模块,用来不间断显示测距的结果值。流程图如图2所示:(二)超声波输出及接收子程序设计思路
该子程序模块的调用条件即是当之前单片机内部定时器的标定位为1时被触发。此时程序执行的就是由单片机发送4个一定频率的超声脉冲加载到超声波发送头上,之后立即激发定时器开始计时。之后将要执行一个延时子程序。这个延时子程序的作用就是防止当我的超声波从发射头中发射出去时直接就被我的接收部分的接收头收到。这种由引起的直射波触发如果不进行延时处理,将会对整个测距的准确性带来严重的误差。同样也正是因为这个原因,造成测距会有一个最小测距距离,也就是俗称的盲区值[5]。
之后就进入到接收子程序中。接收子程序主要就是进行一个判断,这次的判断主要针对接收端是否接收到了回波的信号。如果收到了回波信号则单片机内部定时器及时停止计时。下一步开始根据时间计算出相应的测量值。而如果接收端没有收到回波则,检查延时时间是否已到,如果已经到达了延时时间则停止计时;如果没有到,则继续检测接收端是否收到回波。具体如图3所示。(三)显示子程p> 显示子程序的主要思路就是在显示之前先加段位อ转换的小程序。根据之前测距距离的判断结果调用之前存在静态存储区内的段位组合情况。之后再使用动态扫描的方法将其显示出来。由于这部分知识包括动态扫描等方法都是单片机技术中一些比较常见和通用方法。在此也就不加详细阐述了。
四、结 语
在完成了硬件的焊接和软件编程后,为了验证这个测距系统的精确性能指标,笔者在学院实验室内进行了实际的测试,发现在范围50~500cm之间都能准确测量,最大误差在1cm之间。整个系统相对于传统的测距设备相比具有性能稳定,结构简单、体积较小、价格便宜等优点。而误差的原因经分析主要是由于反射面的不平整及自身的延时所致。可根据实际的情况对脉冲宽度、频率等参数作相应的调整即可。