微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机超声波传感器测量距离

单片机超声波传感器测量距离

时间:11-18 来源:互联网 点击:

算公式:d=s/2=(c*t)/2

*d为被测物与测距器的距离,s为声波的来回路程,c为声速,t为声波来回所用的时间

声速c与温度有关,如温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返时间,即可求得距离。在系统加入温度传感器来监测环境温度,可进行温度被偿。这里可以用DS18B20测量环境温度,根据不同的环境温度确定一声速提高测距的稳定性。为了增强系统的可靠性,应在软硬件上采用抗干扰措施。

不同温度下的超声波声速表

温度/

-30

-20

-10

0

10

20

30

100

声速c(m/s)

313

319

325

323

338

344

349

386

2.主程序

主程序首先对系统环境初始化,设置定时器T0工作模式为16位的定时计数器模式,置位总中断允许位EA并给显示端口P0和P2清0。然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直接波触发,需延迟0.1ms(这也就是测距器会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。由于采用12MHz的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算即可测得被测物体与测距仪之间的距离,设计时取20℃时的声速为344m/s则有:

d=(C*T0)/2=172T0/10000cm(其中T0为计数器T0的计数值)

测出距离后结果将以十进制BCD码方式LED,然后再发超声波脉冲重复测量过程。主程序框图如下

 

3.超声波发生子程序和超声波接收中断程序

超声波发生子程序的作用是通过P1.0端口发送2个左右的超声波信号频率约40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。

六.软硬件调试及性能

超声波测距仪的制作和调试,其中超声波发射和接收采用Φ15的超声波换能器TCT40-10F1(T发射)和TCT40-10S1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。

硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。根据所设计的电路参数和程序,测距仪能测的范围为0.07~5.5m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。

后续工作需实验后才能验证

根据参考电路和集成的电路器件测距范围有限10m以内为好。

程序清单

以下是用汇编语言编写的超声波测距控制源程序:

采用AT89S51 12MHz晶振

显示缓冲单元在40H~43H,使用内存44H、45H、46H用于计算距离

20H用于标志

VOUT EQU P1.0 ;脉冲输出端口

*中断入口程序*

ORG 0000H

LJMP START

ORG 0003H

LJMP PINT0

ORG 000BH

LJMP INTT0

ORG 0013H

RETI

ORG 001BH

LJMP INTT1

ORG 0023H

RETI

ORG 002BH

RETI

*主程序*

START: MOV SP, #4FH

MOV R0, #40H ;40~43H为显示数据存放单元(40为最高位)

MOV R7,#0BH

CLEARDISP:MOV @R0, #00H

INC R0

DJNZ R7, CLEARDISP

MOV 20H, #00H

MOV TMOD, #21H ;T1为8位自动重装模式,T0为16位定时器

MOV TH0, #00H ;65ms初值

MOV TL0, #00H ;40KHz初值

MOV TH1, #0F2H

MOV TL1, #0F2H

MOV P0, #0FFH

MOV P1, #0FFH

MOV P2, #0FFH

MOV P3, #0FFH

MOV R4, #04H ;超声波脉冲个数控制(为赋值的一半)

SETB PX0

SETB ET0

STEB EA

CLR 00H

SETB TR0 ;开启测距定时器

START1: LCALL DISPLAY

JNB 00H, START1 ;收到反射信号时标志位为1

CLR EA

LCALL WORK ;计算距离子程序

SETB EA

CLR 00H

SETB TR0 ;重新开启测距定时器

MOV R2, #64H ; 测量间隔控制(约4*100=400ms)

LOOP: LCALL DISPLAY

DJNZ R2, LOOP

SJMP START 1

*中断程序*

;T0中断,65ms中断一次

INTT0: CLR EA

CLR TR0

MOV TH0, #00H

MOV TL0, #00H

SETB ET1

SETB EA

SETB TR0 ;启动计时器T0,用以计算超声波来回时间

SETB TR1 ;开启发超声波用定时器T1

OUT: RETI

;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top