基于51单片机的超声波测距仪说明书 引言
超声波测距仪,可使用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。利用超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。 一、性能要求
该超声波测距仪,要求测量范围在0.08-3.00m,测量精度1cm,测量时和被测物体无直接接触,能够清晰稳定地显示测量结果。 二、工作原理及方案论证 超声波传感器及其测距原理
超声波是指频率高于20KHz的机械波。用超声波传感器产生超声波和接收超声波,习惯上称为超声波换能器或超声波探头。超声波传感器有发送器和接收器.超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOF(timeofflight)。首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源和障碍物之间的距离。
根据要求并综合各方面因素,采用ATC52单片机作为主控制
器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成,超声波测距仪的系统框图如下图所示:
图1 超声波测距仪系统设计框图 三、系统硬件部分
硬件部分主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。 1.单片机系统及显示电路
单片机采用ATC52来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。单片机通过P1.1引脚发射脉冲控制超声波的发送,然后单片机不停的检测外中断0口INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器和障碍物之间的距离。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管驱动。 单片机系统及显示电路如下图所示:
C2U119XTAL151020pXT1R51018XTAL2U212M2.超声波发射电路 9RST1191OE2OE74LS244P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD739383736353433321A01A11A21A32A02A12A22A31Y01Y11Y21Y32Y02Y12Y22Y3246811131517181614129753293031PSENALEEAC320pR810KGNDC1Q1Vcc9012S13.3uQ29012Q39012Q49012P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A152122232425262728R14.7KR24.7KR34.7KR44.7K12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7ATC52P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD图2 单片机系统及显示电路 1011121314151617
利用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。
程序清单
以下是用汇编语言编写的超声波测距控制源程序: 采用ATS52 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, #H ; 测量间隔控制(约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 ;T1中断,发超声波用
INTT1: CPL VOUT
DJNZ R4,RETIOUT
CLR TR1 ;超声波发送完毕,关T1 CLR ET1 MOV R4,#04H
SETB EX0 ;开启接收回波中断 RETIOUT: RETI
;外中断0,收到回波时进入
PINT0: CLR TR0 ;关计数器 CLR TR1 CLR ET1 CLR EA CLR EX0
MOV 44H, TL0 ;将计数值移入处理单元 MOV 45H, TH0
SETB 00H ;接收成功标志 RETI
*延时程序*
DL1MS: MOV R6, #14H DL1: MOV R7, #19H DL2: DJNZ R6, DL2 DJNZ R6, DL1 RET
*显示程序*
;40H为最高位,43H为最低位,先扫描高位 DISPLAY: MOV R1, #40H;G MOV R5,#0F7H;G PLAY: MOV A, R5 MOV P0, #0FFH MOV P2, A MOV A, @R1 MOV DPTR, #TAB
MOVC A, @A+DPTR MOV P0, A LCALL DLIMS INC R1 MOV A, R5
JNB ACC.0, ENDOUT;G RR A MOV R5, A AJMP PLAY
ENDOUT; MOV P2, #0FFH MOV P0, #0FFH RET
TAB; DB 0C0H,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: PUSH ACC PUSH PSW PUSH B MOV PSW, #18H MOV R3, 45H MOV R2, 44H MOV R1, #00D MOV R0, #17D LCALL MUL2BY2 MOV R3, #03H MOV R2, #0E8H LCALL DIV4BY2 LCALL DIV4BY2 MOV 40H, R4 MOV A, 40H JNZ JJ0 MOV 40H, #0AH ;最高位为0,不点亮 JJ0: MOV A R0 MOV R4, A MOV A R1 MOV R5 A MOV R3, #00D MOV R2, #100D LCALL DIV4BY2 MOV 41H, R4 MOV A, 41H JNZ JJ1 MOV A, 40H ;此高位为0,先看最高位是否为不亮 SUBB A, #0AH
JJ1: JJ2:
MUL2BY2:
MULLOOP1: JNZ JJ1
MOV 41H, #0AH ; 最高位不亮,次高位也不亮 MOV A, R0 MOV R4, A MOV A, R1 MOV R5, A MOV R3, #00D MOV R2, #10D LCALL DIV4BY2 MOV 42H, R4 MOV A 42H JNZ JJ2
MOV A, 41H ;次高位为0,先看次高位是否为不亮 SUBB A, #0AH JNZ JJ2
MOV 42H, #0AH ;次高位不亮,次高位也不亮 MOV 43H, R0 POP B POP PSW POP ACC RET
*两字节无符号数乘法程序
CLR A MOV R7, A MOV R6, A MOV R5, A MOV R4, A
MOV 46H, #10H CLR C MOV A, R4 RLC A MOV R4, A MOV A, R5 RLC A MOV R5, A MOV A, R6 RLC A MOV R6, A MOV A, R7 RLC A MOV R7, A MOV A, R0 RLC A MOV R0, A
MULLOOP2:
MOV A, R1 RLC A MOV R1, A
JNC MULLOOP2 MOV A, R4 ADD A, R2 MOV R4, A MOV A, R5 ADDC A, R3 MOV R5, A MOV A, R6 ADDC A, #00H MOV R6, A MOV A, R7 ADDC A, #00H MOV R7, A
DJNZ 46H, MULLOOP1 RET
*四字节/两字节无符号数除法程序*
DIV4BY2: MOV 46H, #20H MOV R0, #00H MOV R1, #00H DIVLOOP1: MOV A, R4 RLC A MOV R4, A MOV A, R5 RLC A MOV R5, A MOV A, R6 RLC A MOV R6, A MOV A, R7 RLC A MOV R7, A MOV A, R0 RLC A MOV R0, A MOV A, R1 RLC A MOV R1, A CLR C MOV A, R0 SUBB A, R2 MOV B, A
MOV A, R1 SUBB A, R3 JC DIVLOOP2 MOV R0, B MOV R1, A DIVLOOP2: CPL C DJNZ 46H, DIVLOOP1 MOV A, R4 RLC A MOV R4, A MOV A, R5 RLC A MOV R5, A MOV A, R6 RLC A MOV R6, A MOV A, R7 RLC A MOV R7, A RET ; END 附C51程序
#INCLUDE #DEFINE UCHAR UNSIGNED CHAR #DEFINE UINT UNSIGNED INT #DEFINE ULONG UNSIGNED LONG EXTERN VOID CS_T(VOID); EXTERN VOID DELAY(UINT); EXTERN VOID DISPLAY(UCHAR*); //DATA UCHAR DISPLAY(UCHAR*); DATA UCHAR TESTOK; VOID MAIN (VOID) { DATA UCHAR DISPRAM[5]; DATA UINT I; DATA ULONG TIME; P0=0XFF; P2=0XFF; TMOD=0X11; IE=0X80; WHILE (1) { CS_T(); DELAY(1); TESTOK=0; EX0=1; ET0=1; WHILE(! TESTOK) DISPLAY(DISPRAM); IF (1==TESTOK) { TIME=TH0; TIME=(TIME<<8)| TL0; TIME*=172; TIME/=10000; DISPRAM[0]=(UCHAR) (TIME%10); TIME/=10; DISPRAM[1]=(UCHAR) (TIME%10); TIME/=10; DISPRAM[2]=(UCHAR) (TIME%10); DISPRAM[3]=(UCHAR) (TIME/10); IF (0==DISPRAM[3]) DISPRAM[3]=17; } ELSE { DISPRAM [0]=16; DISPRAM [1]=16; DISPRAM [2]=16; DISPRAM [3]=16; } FOR (I=0;I<300;I++) DISPLAY(DISPRAM); } } VOID CS_R(VOID) INTERRUPT 0 { TR0=0; ET0=0; EX0=0; TESTOK=1; } VOID OVERTIME(VOID) INTERRUPT 1 { EX0=0; TR0=0; ET0=0; TESTOK=2; } NAME CS_T ?PR?CS_T?CS_T SEGMENT CODE PUBLIC CS_T RSEG ?PR?CS_T?CS_T CS_T: PUSH ACC MOV TH0, #00H MOV TL0, #00H MOV A, #4D SETB TR0 CS_T1: CPL p1.0 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DJNZ ACC,CS_T1 POP ACC RET ; END NAME DELAY ?PR?_DELAY?DELAY SEGMENT CODE PUBLIC _DELAY RSEG ?PR?_DELAY?DELAY _DELAY: PUSH ACC MOV A,R7 JZ DELA1 INC R6 DELA1: MOV R5,#50D DJNZ R5, $ DJNZ R7,DELA1 DJNZ R6,DELA1 POP ACC RET END NAME DISPLAY ?PR?_DISPLAY?DISPLAY SEGMENT CODE ?CO?_DISPLAY?DISPLAY SEGMENT DATA EXTRN CODE (_DELAY) PUBLIC _DISPLAY RSEG ?CO?_DISPLAY?DISPLAY ?_DISPLAY?BYTE: DISPBIT: DS 1 DISPNUM: DS 1 RSEG ?PR?_DISPLAY?DISPLAY _DISPLAY: PUSH ACC PUSH DPH PUSH DPL PUSH PSW INC DISPNUM MOV A,DISPNUM CJNE A,#4D,DISP1 DISP1: JC DISP2 MOV DISPNUM,#00H MOV DISPBIT,#0FEH DISP2: MOV A,R1 ADD A,DISPNUM MOV R0,A MOV A,@R0 MOV DPTR,#DISPTABLE MOVC A,@A+DPTR MOV P0,A MOV A,DISPNUM CJNE A,#2D,DISP3 CLR P0.7 DISP3: MOV P2,DISPBIT MOV R5,#00H MOV R7,#0AH LCALL _DELAY MOV P0,#0FFH MOV P2,#0FFH MOV A,DISPBIT RL A MOV DISPBIT,A POP PSW POP DPL POP DPH POP ACC RET DISPTABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFH END
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- baoquwan.com 版权所有 湘ICP备2024080961号-7
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务