超声波测距仪课程设计报告书
目录
引言... 2
超声波测距设计方案... 2
1.总体方案设计介绍... 2
2.硬件电路设计... 3
3.系统程序的设计... 6
4.设计总结... 10
附件... 11
控制源程序... 11
引言
本课程设计,旨在用所学知识解决生活中的常见问题,真正实现知识的活学活用,为步入社会,进入真实的生产制造环节打基础;超超声波测距在生活中应用极为广泛,因其测量误差小,操作方便而被广泛使用;然其工作原理较为简单,运用大学所学的单片机原理及应用的基础知识便可以实现其基本工程原理,再结合其他科目的基础知识便可以完成这一设计。
超声波测距设计方案
1.总体方案设计介绍
超声波测距原理源于蝙蝠回声定位,设超声波在空气中的传播速度为V,在空气中的传播时间为T,测距仪与障碍物的距离为S,S=VT/2,这样可以测出测距仪与障碍物之间的距离,然后在LED显示屏上显示出来。本课程设计测量范围0.50~4.00m,测量精度1cm.属于近距测量,采用压电式超声波传感器;程序要求反应灵敏,故采用80C51单片机的汇编程序设计,显示LED采用4位共阳LED数码管。
首先由单片机驱动产生12MHZ晶振,由超声波发射探头发送出去,在遇到障碍物反射回来时由超声波接收探头检测到信号,然后经过滤波、放大、整形之后送入单片机进行计算,把计算结果输出到LED液晶显示屏上。本设计采用80C51单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成。超声波测距器系统设计如图1.1所示。
图1.1 超声波测距器系统结构设计框图
2.硬件电路设计
硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。单片机采用80C51。采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P1.0端口输出超声波传感器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管9012驱动(74LS06)。超声波发出后,单片机自动检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
2.1超声波发射和接收模组(V2.0)
本文采用的超声波测距模组集发射和接受为一体,内部超声波传感器谐振频率40KHz,模组传感器工作电压4.5V~9V,模组接口电压4.5V~5.5V。本实验采用短距(0.50~4.00m)精度1cm。模组结构示意图如图2.1:
图2.1 超声波发射及接收模组设计框图
应用时只需要用J5的第1个口与单片机Vcc连接,最后一个口与单片机GND连接,第4个接口与 单片机的INT0口相连接,J4的第3个接口与单片机1.0口连接,同时将J1跳线设置为短距模式,J2跳线设置为非外部电源供电方式(此时开发板通过10PIN排线为模组供电,板上J5选择5V,要把J2跳接到5v的一端)。这就完成了模组硬件的连接。超声波谐振频率调理电路图如图2.2:
图2.2 超声波谐振频率调整电路设计框图
由单片机产生40KHz的方波由P1.0口送出,连接模组接口J4到模组的CD4049,而后面的CD4049则对40KHz频率信号进行调理,以使超声波传感器产生谐振。
图2.3 超声波回波接收电路设计框图
超声波接受处理部分电路前级采用NE5532构成10000倍放大器,对接收信号进行放大;后级采用LM311比较器对接收信号进行调整,比较电压为LM311的3管脚的输入。
接收回路中测得的超声波信号共有两个波束,第一个为余波信号,即超声波接收头在发射头发射信号(一组40KHz的脉冲)后,马上就接收到了超声波信号,并持续一段时间。另一个波束为有效信号,即经过被测物表面反射的回波信号。超声波测距时,需要测的是开始发射到接收到信号的时间差,要尽量避免检测到余波信号,这也是检测中存在最小测量盲区的主要原因。
单片机控制模组每次发生若干完整的40KHz的脉冲信号,发射信号前打开计数器T0,进行计时,等计时到达一定值后再开启检测回波信号,以避免余波信号的干扰。采用外部中断INT0对回波信号进行检测,接收到回波信号后马上读取计数器中的数值,此数据即为需要测量的时间差数据。
2.2数据显示模块
显示电路采用简单实用的4位共阳LED数码管,断码用74LS244驱动,位码用74LS06驱动。由P0口输出显示数据,P2.0~P2.3用来位选。显示电路如图2.4
图2.4 超声波测距显示电路设计框图
3.系统程序的设计
超声波测距器的软件设计主要由主程序,超声波发生子程序,超声波接收中断程序及显示子程序组成,本次设计采用执行效率高的汇编语言实现。下面对超声波测距器的算法,主程序,超声波发生子程序和超声波接收中断程序逐一介绍。
3.1超声波测距器的算法设计
超声波测距的原理类似于蝙蝠的回声定位,既超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就会被超声波接收器R接收到。这样,只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器于反射物体的距离。该距离的计算公式如下:
d=s/2=(v×t)/2
式3-1 超声波距离计算
其中:d为被测物于测距器的距离(m);s为声波的来回路程(m);v为声速(m/s);t为声波来回所用的时间(s)。
3.2 主程序
主程序首先要对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA并对显示端口P0和P2清0;然后调用超声波发生子程序送出一个超声波脉冲。为了避免超声波从发射器直接传到接收器引起的直射波,需要延时约2.906ms(最小距离0.50m,机器周期1us)后才可打开外中断0接收返回的超声波信号。由于采用的是12MHz的晶振,计数器每计一个数就是1us,所以当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(3—2)计算,即可得被测物体与测距器之间的距离。设计时取20℃时的声速为344m/s,则有
d=(v×t)/2=(172T/1000)(cm)
式3-2 超声波距离计算
其中:T为计数器T0的计数值。
测出距离后,结果将以十进制BCD码方式送往LED显示,重复测量3-5次取加权平均即可得出最终结果。图3.1所示为主程序流程图。
图3.1 超声波测距主程序流程图
※※※※※※主程序※※※※※※
START: MOV SP, #4FH
MOV R0, #40H ;40H~43H为显示数据存放单元(40H为最高位)
MOV R7, #0BH
CLEARDISP: MOV @R0, #00H
INC R0
DJNZ R7, CLEARDISP
MOV 20H, #00H
MOV TMOD, #21H ;T1为8位自动重装模式,T0为16位定时器
MOV TH0, #C7H ;14.5ms初值
MOV TL0, #39H
MOV TH1, #0F2H ;40kHz初值
MOV TL1, #0F2H
MOV P0, #0FFH
MOV P1, #0FFH
MOV P2, #0FFH
MOV P3, #0FFH
MOV R4, #04H ;超声波脉冲个数控制(为赋值的一半)
SETB PX0
SETB ET0
SETB EA
SETB TR0 ;开启测试定时器
START1: LCALL DISPLAY
JNB 00H, START1 ;收到反射信号时标志位为1
CLR EA
LCALL WORK
SETB EA
CLR 00H
SETB TR0 ;重新开启测试定时器
MOV R2, #64H ;测量间隙控制(约4ms×100=400ms)
LOOP: LCALL DISPLAY
DJNZ R2,LOOP
SJMP START1
3.3 超声波发生子程序和超声波接收中断程序
超声波发生子程序的作用是通过P1.0端口发送两个左右的超声波脉冲信号(频率40KHz的方波),脉冲宽度为12us左右,同时把计数器T0打开进行时。超声波发生子程序较简单,但要求程序运行时间准确,所以采用汇编语言编程。
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
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入超声波接收中断程序。进入该中断后,就立即关闭计时器T0,停止计时,并将测距成功标志字赋值1.
※※※※※※中断程序※※※※※※
;T0中断,14.5ms中断一次
INTT0: CLR EA
CLR TR0
MOV TH0,#C7H
MOV TL0,#39H
SETB ET1
SETB EA
SETB TR0 ;启动计数器T0,用以计算超声来回时间
SETB TR1 ;开启发超声波用定时器T1
OUT: RETI
;T1中断,发超声波用
INTT1: CPL VOUT
DJNZ R4,RETOUT
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
如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2,以表示本次测距不成功。
4.设计总结
本次设计中,充分体现了合作共赢的重要性,这个社会是个专业化日趋加强的社会,人们的专业知识正变得集中而而有深度,此次设计,广泛整合了各方面的资源,充分证明了合作的重要性,以及专业知识的必要性,作为作为一项实际需要的产品,都综合了各方面的知识,只有强强联手,才能打造更加优异的产品。本次设计的环节不多,单片机及程序、超声波发送及接收电路,数码显示管等几大块,对于我来说,专业在于单片机及数码显示管的连接及程序设计,而超声波发射及接收电路则是由另外的合作伙伴完成,然后实现两者的连接便完成了此次设计。
当然,设计总是没有完美的,我们由于阅历尚欠,经验不足,又缺乏实践,故产品设计原型可能存在诸多问题,需要在实践中不断发现,修补完善,不断创新。不满足于已有的设计,不断寻求新的突破才是我们需要做的。
附件
控制源程序
超声波测距器
采用80C51、12MHz晶振、采用共阳LED显示器
测试范围为0.50~5.00m,堆栈在4FH以上,20H用于标志
显示缓冲单元在40H~43H,内存44H~46H用于计算距离
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 ;40H~43H为显示数据存放单元(40H为最高位)
MOV R7, #0BH
CLEARDISP: MOV @R0, #00H
INC R0
DJNZ R7, CLEARDISP
MOV 20H, #00H
MOV TMOD, #21H ;T1为8位自动重装模式,T0为16位定时器
MOV TH0, #C7H ;14.5ms初值
MOV TL0, #39H
MOV TH1, #0F2H ;40kHz初值
MOV TL1, #0F2H
MOV P0, #0FFH
MOV P1, #0FFH
MOV P2, #0FFH
MOV P3, #0FFH
MOV R4, #04H ;超声波脉冲个数控制(为赋值的一半)
SETB PX0
SETB ET0
SETB EA
SETB TR0 ;开启测试定时器
START1: LCALL DISPLAY
JNB 00H, START1 ;收到反射信号时标志位为1
CLR EA
LCALL WORK
SETB EA
CLR 00H
SETB TR0 ;重新开启测试定时器
MOV R2, #64H ;测量间隙控制(约4ms×100=400ms)
LOOP: LCALL DISPLAY
DJNZ R2,LOOP
SJMP START1
※※※※※※中断程序※※※※※※
;T0中断,1.45ms中断一次
INTT0: CLR EA
CLR TR0
MOV TH0,#C7H
MOV TL0,#39H
SETB ET1
SETB EA
SETB TR0 ;启动计数器T0,用以计算超声来回时间
SETB TR1 ;开启发超声波用定时器T1
OUT: RETI
;T1中断,发超声波用
INTT1: CPL VOUT
DJNZ R4,RETOUT
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
※※※※※※显示程序※※※※※※
;40H为最高位,43H为最低位,先扫描高位
DISPLAY: MOV R1,#40H;G
MOV R5,#0E7H;G
PLAY: MOV A,R5
MOV P0,#0FEH
MOV P2,A
MOV @R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1MS
INC R1
MOV A,R5
JNB ACC.0,ENDOUT;G
RR A
MOV R5,A
AJMP PLAY
ENDOUT: MOV P2,#0FEH
MOV P0,#0FEH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FEH,88H,0BFH
;共阳段码表 “0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,
“不亮”,“A”,“-”
※※※※※※延时程序※※※※※※
DL1MS: MOV R6, #0BH
DL1: MOV R7, #5AH
DL2: DJNZ R7, DL2
DJNZ R6, DL1
RET
※※※※※※距离计算程序※※※※※※
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 DIV4Y2
MOV 400H, 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: M0V 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 ;次高位不亮,次次高位也不亮
JJ2: MOV 43H, R0
POP B
POP PSW
POP ACC
RET
※※※※※※2字节无符号数乘法程序※※※※※※
R7R6R5R4≦R3R2×R1R0
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
MOV A,R7
RLC A
MOV R7,A
MOV A,R0
RLC A
MOV R0,A
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
MULLOOP2: DJNZ 46H,MULLOOP1
RET
※※※※※※4字节/2字节无符号数除法程序※※※※※※
;R7R6R5R4/R3R2=R7R6R5R4(商)…R1R0(余数)
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 R0
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 ;程序结束
6.2电路图
超声波发射电路
超声波接收电路
单片机及显示电路