#用51单片机设计超声波测距系统的设计原理和电路附源程序Word下载.docx
《#用51单片机设计超声波测距系统的设计原理和电路附源程序Word下载.docx》由会员分享,可在线阅读,更多相关《#用51单片机设计超声波测距系统的设计原理和电路附源程序Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
图2单片机系统及显示电路
2.超声波发射电路
利用555时基电路振荡产生40kHz的超声波信号,使之和换能器的40kHz固有频率一致。
12V电源保证555时基具有足够驱动能力。
P1.1为超声波发射控制信号,由单片机控制。
发射电路如图3所示:
图3超声波发射电路原理图
3.超声波检测接收电路
超声波接收电路采用集成电路CX20106A,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38KHz和测距超声波频率40KHz较为接近,可以利用它作为超声波检测电路。
实验证明其具有很高的灵敏度和较强的抗干扰能力。
适当改变C4的大小,可改变接受电路的灵敏度和抗干扰能力。
接收电路如图4所示:
图4超声波接收电路图
四.系统软件部分
超声波测距程序设计软件部分主要由主程序,超声波发射子程序,超声波接受中断程序及显示子程序组成。
下面对超声波测距仪的算法,主程序,超声波发射子程序和超声波接受中断程序逐一介绍。
1.超声波测距仪的算法设计
下图示意了超声波测距的原理,即超声波发生器T在某一时刻发出的一个超声波信号,当超声波遇到被测物体后反射回来,就被超声波接收器R所接受。
这样只要计算出发生信号到接受返回信号所用的时间,就可算出超声波发生器和反射物体的距离。
距离计算公式:
d=s/2=(c*t)/2
*d为被测物和测距器的距离,s为声波的来回路程,c为声速,t为声波来回所用的时间
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.1端口发送超声波发射控制脉冲信号,同时把计数器T0打开进行计时。
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。
进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。
如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。
五.软硬件调试及性能
超声波发射和接收采用Φ15的超声波换能器TCT40-10F1(T发射)和TCT40-10S1(R接收),中心频率为40kHz,保持两换能器中心轴线平行并相距4~8cm。
主要性能指标:
测距仪能测的范围为0.08~3.00m,测距仪精度1cm。
程序清单
以下是用汇编语言编写的超声波测距控制源程序:
采用AT89S5212MHz晶振
显示缓冲单元在40H~43H,使用内存44H、45H、46H用于计算距离
20H用于标志
VOUTEQUP1.0;
脉冲输出端口
*中断入口程序*
ORG0000H
LJMPSTART
ORG0003H
LJMPPINT0
ORG000BH
LJMPINTT0
ORG0013H
RETI
ORG001BH
LJMPINTT1
ORG0023H
RETI
ORG002BH
*主程序*
START:
MOVSP,#4FH
MOVR0,#40H;
40~43H为显示数据存放单元(40为最高位)
MOVR7,#0BH
CLEARDISP:
MOV@R0,#00H
INCR0
DJNZR7,CLEARDISP
MOV20H,#00H
MOVTMOD,#21H;
T1为8位自动重装模式,T0为16位定时器
MOVTH0,#00H;
65ms初值
MOVTL0,#00H;
40KHz初值
MOVTH1,#0F2H
MOVTL1,#0F2H
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MOVR4,#04H;
超声波脉冲个数控制(为赋值的一半)
SETBPX0
SETBET0
STEBEA
CLR00H
SETBTR0;
开启测距定时器
START1:
LCALLDISPLAY
JNB00H,START1;
收到反射信号时标志位为1
CLREA
LCALLWORK;
计算距离子程序
SETBEA
CLR00H
SETBTR0;
重新开启测距定时器
MOVR2,#64H;
测量间隔控制(约4*100=400ms)
LOOP:
DJNZR2,LOOP
SJMPSTART1
*中断程序*
;
T0中断,65ms中断一次
INTT0:
CLRTR0
MOVTH0,#00H
MOVTL0,#00H
SETBET1
SETBTR0;
启动计时器T0,用以计算超声波来回时间
SETBTR1;
开启发超声波用定时器T1
OUT:
T1中断,发超声波用
INTT1:
CPLVOUT
DJNZR4,RETIOUT
CLRTR1;
超声波发送完毕,关T1
CLRET1
MOVR4,#04H
SETBEX0;
开启接收回波中断
RETIOUT:
外中断0,收到回波时进入
PINT0:
CLRTR0;
关计数器
CLRTR1
CLREX0
MOV44H,TL0;
将计数值移入处理单元
MOV45H,TH0
SETB00H;
接收成功标志
*延时程序*
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZR6,DL2
DJNZR6,DL1
RET
*显示程序*
40H为最高位,43H为最低位,先扫描高位
DISPLAY:
MOVR1,#40H;
G
MOVR5,#0F7H;
PLAY:
MOVA,R5
MOVP0,#0FFH
MOVP2,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A
LCALLDLIMS
INCR1
MOVA,R5
JNBACC.0,ENDOUT;
RRA
MOVR5,A
AJMPPLAY
ENDOUT;
MOVP2,#0FFH
MOVP0,#0FFH
RET
TAB;
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH
;
共阳数码管0,1,2,3,4,5,6,7,8,9,不亮,A,—
*距离计算程序(=计算值×
17/1000cm)近似
WORK:
PUSHACC
PUSHPSW
PUSHB
MOVPSW,#18H
MOVR3,45H
MOVR2,44H
MOVR1,#00D
MOVR0,#17D
LCALLMUL2BY2
MOVR3,#03H
MOVR2,#0E8H
LCALLDIV4BY2
LCALLDIV4BY2
MOV40H,R4
MOVA,40H
JNZJJ0
MOV40H,#0AH;
最高位为0,不点亮
JJ0:
MOVAR0
MOVR4,A
MOVAR1
MOVR5A
MOVR3,#00D
MOVR2,#100D
MOV41H,R4
MOVA,41H
JNZJJ1
MOVA,40H;
此高位为0,先看最高位是否为不亮
SUBBA,#0AH
JNZJJ1
MOV41H,#0AH;
最高位不亮,次高位也不亮
JJ1:
MOVA,R0
MOVA,R1
MOVR5,A
MOVR3,#00D
MOVR2,#10D
MOV42H,R4
MOVA42H
JNZJJ2
MOVA,41H;
次高位为0,先看次高位是否为不亮
SUBBA,#0AH
MOV42H,#0AH;
次高位不亮,次高位也不亮
JJ2:
MOV43H,R0
POPB
POPPSW
POPAC