当前位置:首页 > 基于51单片机的超声波测距仪设计.
3.3超声波测距原理和结构
在任何一方向发射超声波的时候,同时开始计时在发射时刻的时候,可以知道超声波在空气中不断的传播和发射,在途中碰到一些的障碍物就立即返回来,超声波接收器立即停止计时。在空气中超声波的传播速度一般为340m/s,根据记录的时间t,则可以计算出发射点距障碍物的距离(s),公式为:s=340t/2 。
我们知道超声波易于定向方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。通过分析超声波测距误差产生的原因,提高测量时间差到微秒级,以及用LM92温度传感器进行声波传播速度的补偿后,我们设计的高精度超声波测距仪能达到毫米级的测量精度。
在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。
3.4超声波检测发射电路
利用555时基电路振荡产生超声波信号它的频率是40HZ,使它的频率与换能器的40kHz固有频率一样555时基具有足够驱动能力是12V的电压。由单片机控制。
图3.4超声波发射电路原理图
3.5超声波检测接受电路
CX20106A是超声波接收电路,,我们经常用的电视机红外遥控接收器。
是利用一款红外线检波接收超声波的专业芯片。设计者考虑到红外遥控常用的载波频率38KHz与测距超声波频率40KHz比较的相近所以利用它我们把它作为超声波检测电路。通过实验证明它具有较强的干扰能力和很高的灵活性。因此适当改变C4的大小,就可以改变接受电路的抗干扰能力以及灵敏度。
采用集成电路
- 5 -
第四章 系统的软硬件的调试和程序图
超声波发射和接收采用Φ15的超声波换能器TCT40-10F1和TCT40-10S1,40HZ是它的主要频率,从而保持在两换能器中心轴线平行并相距4~8cm。
测距仪能测的范围为0.08~3.00m,测距仪精度1cm。是它的主要性能指标
下面是我写的一些程序的清单是用汇编语言编写的超声波测距控制源程序:先采用AT89S52 单片机和 12MHz晶振显示缓冲单元在40H~43H,使用内存44H、45H、46H用于计算距离20H用于标志。
VOUT EQU P1.0; //65ms初值 //脉冲输出端口 MOV TL0, #00H; *中断入口程序* //40KHz初值
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为显示数据存放单元 MOV R7,#0BH
CLEARDISP:MOV @R0, #00H INC R0 DJNZ R7, CLEARDISP MOV 20H, #00H MOV TMOD, #21H; //T1为8位自动重装模式
MOV TH0, #00H;
- 6 -
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 SETB 00H;接收成功标志
*中断程序*
;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
- 7 -
RETI
*延时程序*
DL1MS: MOV R6, #14H DL1: MOV R7, #19H DJNZ R6, DL1 RET
*显示程序*
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//不亮
*超声波距离的计算程序的公式 (=计算值×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 JNZ JJ1 MOV 41H, #0AH;
//最高位不亮,次高位也不亮
JJ1: MOV A, R0 MOV R4, A
- 8 -
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;
//次高位不亮,次高位也不亮 JJ2: MOV 43H, R0 POP B POP PSW POP ACC RET
*两字节无符号数乘法程序 MUL2BY2: CLR A MOV R7, A MOV R6, A MOV R5, A MOV R4, A MOV 46H, #10H MULLOOP1: 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
高位是不是不亮
共分享92篇相关文档