基于单片机的超声波测距仪课程设计毕业设计完整版Word文件下载.docx
《基于单片机的超声波测距仪课程设计毕业设计完整版Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的超声波测距仪课程设计毕业设计完整版Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
![基于单片机的超声波测距仪课程设计毕业设计完整版Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/3/bb1f3696-4d07-4fce-a142-d14b2d1a153c/bb1f3696-4d07-4fce-a142-d14b2d1a153c1.gif)
机械方式有加尔统笛、液和气流旋笛等。
它们所产生的超声波的频率,功率和声波特性各不相同,因而用途也各不相同。
目前在近距离测量方面较为常用的是压电式超声波换能器。
根据设计要求并综合各方面因素,本例决定采用AT89C51单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成。
超声波测距器系统设计如图3.1所示。
图3.1超声波测距器系统设计框图
2.硬件电路设计
硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。
单片机采用AT89C51或其兼容系列。
采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P1.0端口输出超声波换能器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。
显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管9012驱动。
主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三
部分组成。
采用AT89S51来实现对超声波模组进行控制,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
2.1超声波发射和接收模组(V2.0)
本文采用的超声波测距模组集发射和接受为一体,内部超声波传感器谐振频率40KHz,模组传感器工作电压4.5V~9V,模组接口电压4.5V~5.5V。
提供三种测距模式,选择跳线可以选择短距、中距和可调距。
本实验采用短距(20~100cm)精度1cm。
模组结构示意图如下:
应用时只需要用J5的第1个口与单片机Vcc连接,最后一个口与单片机GND连接,第4个接口与单片机的INT0口相连接,J4的第3个接口与单片机1.0口连接,同时将J1跳线设置为短距模式,J2跳线设置为非外部电源供电方式(此时开发板通过10PIN排线为模组供电,板上J5选择5V,要把J2跳接到5v的一端)。
这就完成了模组硬件的连接。
超声波谐振频率调理电路图如下:
由单片机产生40KHz的方波由P1.0口送出,连接模组接口J4到模组的CD4049,而后面的CD4049则对40KHz频率信号进行调理,以使超声波传感器产生谐振。
上图为超声波回波接收处理电路,超声波接受处理部分电路前级采用NE5532构成10000倍放大器,对接收信号进行放大;
后级采用LM311比较器对接收信号进行调整,比较电压为LM311的3管脚的输入。
接收回路中测得的超声波信号共有两个波束,第一个为余波信号,即超声波接收头在发射头发射信号(一组40KHz的脉冲)后,马上就接收到了超声波信号,并持续一段时间。
另一个波束为有效信号,即经过被测物表面反射的回波信号。
超声波测距时,需要测的是开始发射到接收到信号的时间差,要尽量避免检测到余波信号,这也是检测中存在最小测量盲区的主要原因。
单片机控制模组每次发生若干完整的40KHz的脉冲信号,发射信号前打开计数器T0,进行计时,等计时到达一定值后再开启检测回波信号,以避免余波信号的干扰。
采用外部中断INT0对回波信号进行检测,接收到回波信号后马上读取计数器中的数值,此数据即为需要测量的时间差数据。
2.2数据显示模块
显示电路采用简单实用的4位共阳LED数码管,断码用74LS244驱动,位码用PNP三极管9012驱动。
由P0口输出显示数据,P2.0~P2.3用来位选。
显示电路如下图:
3.系统程序的设计
超声波测距器的软件设计主要由主程序,超声波发生子程序,超声波接收中断程序及显示子程序组成,由于C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率并且容易精确计算程序行动的时间,而超声波测距器的程序既有较复杂的计算(计算距离时),又要求精确计算程序运行时间(超声波测距时),所以控制程序可采用C语言和汇编语言混合编程。
下面对超声波测距器的算法,主程序,超声波发生子程序和超声波接收中断程序逐一介绍。
3.1超声波测距器的算法设计
图3.6示意了超声波测距的原理,既超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就会被超声波接收器R接收到。
这样,只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器于反射物体的距离。
该距离的计算公式如下:
d=s/2(v×
t)/2
其中:
d为被测物于测距器的距离;
s为声波的来回路程;
v为声速;
t为声波来回所用的时间。
超声波也是一种声波,其声速v于温度有关。
表3.1列出了几种不同温度下的超声波声速。
在使用时,如果温度变化不大,则可认为声速基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返的时间,即可求得距离。
表3.1不同温度下超声波声速表
3.2主程序
主程序首先要对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA并对显示端口P0和P2清0;
然后调用超声波发生子程序送出一个超声波脉冲。
为了避免超声波从发射器直接传到接收器引起的直射波,需要延时约0.1ms(这也就是超声波测距器会有一个最小可测距离的原因)后才可打开外中断0接收返回的超声波信号。
由于采用的是12MHz的晶振,计数器每计一个数就是1us,所以当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(3—2)计算,即可得被测物体与测距器之间的距离。
设计时取20℃时的声速为344m/s,则有
d=(v×
t)/2=(172T/10000)cm(3—2)
T为计数器T0的计数值。
测出距离后,结果将以十进制BCD码方式送往LED显示约为0.5s,然后再发超声波脉冲重复测量过程。
图3.7所示为主程序流程图。
※※※※※※主程序※※※※※※
START:
MOVSP,#4FH
MOVR0,#40H;
40H~43H为显示数据存放单元(40H为最高位)
MOVR7,#0BH
CLEARDISP:
MOV@R0,#00H
INCR0
DJNZR7,CLEARDISP
MOV20H,#00H
MOVTMOD,#21H;
T1为8位自动重装模式,T0为16位定时器
MOVTH0,#00H;
65ms初值
MOVTL0,#00H
MOVTH1,#0F2H;
40kHz初值
MOVTL1,#0F2H
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MOVR4,#04H;
超声波脉冲个数控制(为赋值的一半)
SETBPX0
SETBET0
SETBEA
SETBTR0;
开启测试定时器
START1:
LCALLDISPLAY
JNB00H,START1;
收到反射信号时标志位为1
CLREA
LCALLWORK
CLR00H
SETBTR0;
重新开启测试定时器
MOVR2,#64H;
测量间隙控制(约4ms×
100=400ms)
LOOP:
LCALLDISPLAY
DJNZR2,LOOP
SJMPSTART1
3.3超声波发生子程序和超声波接收中断程序
超声波发生子程序的作用是通过P1.0端口发送两个左右的超声波脉冲信号(频率40KHz的方波),脉冲宽度为12us左右,同时把计数器T0打开进行时。
超声波发生子程序较简单,但要求程序运行时间准确,所以采用汇编语言编程。
ORG0000H
LJMPSTART
ORG0003H
LJMPPINT0
ORG000BH
LJMPINTT0
ORG0013H
RETI
ORG001BH
LJMPINTT1
ORG0023H
ORG002BH
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入超声波接收中断程序。
进入该中断后,就立即关闭计时器T0,停止计时,并将测距成功标志字赋值1.
※※※※※※中断程序※※※※※※
;
T0中断,65ms中断一次
INTT0:
CLRTR0
MOVTH0,#00H
MOVTL0,#00H
SETBET1
启动计数器T0,用以计算超声来回时间
SETBTR1;
开启发超声波用定时器T1
OUT:
T1中断,发超声波用
INTT1:
CPLVOUT
DJNZR4,RETOUT
CLRTR1;
超声波发完毕,关T1
CLRET1
MOVR4,#04H
SETBEX0;
开启接收回波中断
RETIOUT:
;
外中断0,收到回波时进入
PINT0:
CLRTR0;
关计数器
CLRTR1
CLREX0
MOV44H,TL0;
将计数值移入处理单元
MOV45H,TH0
SETB00H;
接收成功标志
如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2,以表示本次测距不成功。
4.调试及性能分析
4.1调试
超声波测距器的制作和调试都较为简单,其中超声波发射和接收采用ø
15的超声波换能器TCT40—10F1(T发射)和TCT40—10S1(R接收),中心频率为40KHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。
若能将超声接收电路用金属壳屏蔽起来,则可提高抗干扰性能。
根据测量范围要求不同,可适当地调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成并调整好后,便可将程序编译好下载到单片机试运行。
根据实际情况,可以修改超声波子程序每次发送的脉冲个数和两次测量的间隔时间,以适应不同距离的测量需要。
4.2性能指示
根据文中电路参数和程序,测距器可测量的范围为0.07~5.50m。
实验中,对测量范围为0.07~2.50m的平面物体做了多次测试,测距器的最大误差不超过1cm,重复性很好。
5.设计总结
在本次设计中,我们广泛借鉴了各种设计的优点,充分考虑了整个设计中的各个环节。
包括产生40KHz的方波,在接收电路中,对所接收方波进行滤波、放大、整形等步骤。
但由于条件和技术所限,对于很多以上所分析的在发射和接收过程中所产生的误差没有得到有效的校正。
比如温度误差、硬件电路误差等。
在我们为期一个学期的设计中,我们用到了以前学到的很多知识,比如电工、单片机、和汇编语言等。
这使我们意识到,任何一件产品的产生,都不是单一知识所能实现的。
而且在电路的设计和程序的编制过程中,出现了很多意想不到的错误,让我们措手不及,有些甚至是一些非常低级的错误,但是这些错误也同样让我们获益非浅,它使我们意识到,研究是一个非常严肃的过程,来不得半点马虎。
必须有一个严谨的态度,加上100%的努力才有可能获得成功的喜悦。
总之,在本课题的设计过程中尽管走了很多的弯路,但是还是学到了不少知识,从中受益匪浅。
了解了超声波传感器的原理,学会了各种放大电路的分析、设计,也掌握了单片机的开发过程中所用到的开发方法和工具。
动手能力与自学能力得到了锻炼与提高,对待事物的态度也发生了变化。
理论总是离不开实践的,设计制作过程中,盲目地追寻理论知识根本不足以解决任何问题,一味的死研究课本是不会真正掌握单片机的。
只有真正动手去做才能发现问题,解决问题,提高能力。
6.附件
6.1控制源程序
单片机汇编源程序
超声波测距器
采用AT89C5112MHz晶振
采用共阳LED显示器
测试范围为0.07~4m,堆栈在4FH以上,20H用于标志
显示缓冲单元在40H~43H,内存44H~46H用于计算距离
VOUTEQUP1.0;
脉冲输出端口
※※※※※※中断入口程序※※※※※※
ORG0000H
※※※※※※主程序※※※※※※
MOVSP,#4FH
MOVR7,#0BH
MOV@R0,#00H
MOVTMOD,#21H;
MOVTL0,#00H
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MOVR4,#04H;
SETBPX0
SETBET0
SETBEA
SETBTR0;
LCALLDISPLAY
JNB00H,START1;
CLREA
LCALLWORK
SJMPSTART1
MOVTH0,#00H
MOVTL0,#00H
CLRTR1;
SETBEX0;
CLRTR0;
※※※※※※显示程序※※※※※※
40H为最高位,43H为最低位,先扫描高位
DISPLAY:
MOVR1,#40H;
G
MOVR5,#0E7H;
PLAY:
MOVA,R5
MOVP0,#0FEH
MOVP2,A
MOV@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A
LCALLDL1MS
INCR1
JNBACC.0,ENDOUT;
RRA
MOVR5,A
AJMPPLAY
ENDOUT:
MOVP2,#0FEH
MOVP0,#0FEH
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,
0FEH,88H,0BFH
共阳段码表“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,
“不亮”,“A”,“-”
※※※※※※延时程序※※※※※※
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
※※※※※※距离计算程序※※※※※※
Work:
PUSHACC
PUSHPSW
PUSHB
MOVPSW,#18h
MOVR3,45H
MOVR2,44H
MOVR1,#00D
MOVR0,#17D
LCALLMUL2BY2
MOVR3,#03H
MOVR2,#0E8H
LCALLDIV4BY2
LCALLDIV4Y2
MOV400H,R4
MOVA,40H
JNZJJ0
MOV40H,#0AH;
最高位为0,不点亮
JJ0:
MOVA,R0
MOVR4,A
MOVA,R1
MOVR5,A
MOVR3,#00D
MOVR2,#100D
MOV41H,R4
MOVA,41H
JNZJJ1
MOVA,40H;
次高位为0,先看最高位是否为不亮
SUBBA,#0AH
MOV41H,#0AH;
最高位不亮,次高位也不亮
JJ1:
M0VA,R0
MOVR2,#10D
MOV42H,R4
MOVA,42H
JNZJJ2
MOVA,41H;
次次高位为0,先看次高位是否为不亮
MOV42H,#0AH;
次高位不亮,次次高位也不亮
JJ2:
MOV43H,R0
POPB
POPPSW
POPACC
※※※※※※2字节无符号数乘法程序※※※※※※
R7R6R5R4≦R3R2×
R1R0
MUL2BY2:
CLRA
MOVR7,A
MOVR6,A
MOVR4,A
MOV46H,#10H
MULLOOP1:
CLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R5
RLCA
MOVR5,A
MOVA,R6
MOVR6,A
MOVA,R7
MOVR7,A
MOVA,R0
MOVR0,A
MOVA,R1
MOVR1,A
JNCMULLOOP2
MOVA,R4
ADDA,R2
ADDCA,R3
ADDCA,#00H
MULLOOP2:
DJNZ46H,MULLOOP1
※※※※※※4字节/2字节无符号数除法程序※※※※※※
R7R6R5R4/R3R2=R7R6R5R4(商)…R1R0(余数)
DIV4BY2:
MOV46H,#20H
MOVR0,#00H
MOVR1,#00H
DIVLOOP1:
MOVA,R4
RLCA
RLCA
RLCR0
CLRC
SUBBA,R2
MOVB,A