单片机超声波传感器测量距离
算公式: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
;
单片机超声波传感器测量距 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)