基于单片机的超声波测距Word格式.docx
《基于单片机的超声波测距Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的超声波测距Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
之所以采用该方案是因为通过差分放大电路可以提高超声波的发射强度,进而增加了发送距离,最终扩大了设备的测量*围。
系统设计框图如图2-1
三、系统硬件设计
硬件电路的设计主要包括单片机系统及显示电路、温度补偿电路,超声波发射电路和超声波检测接收电路四部分。
单片机采用AT89C52或其兼容系列。
采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P1.0端口输出超声波换能器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。
显示电路采用简单实用的3位共阳LED数码管,段码用74LS273驱动,位码用PNP三极管8550驱动。
3.1单片机最小系统
5l系列单片机中典型芯片(AT89C51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256B的RAM,2个16b的定时/计数器TO和T1,4个8位的全双工IO端P0,P1,P2,P3,一个全双功串行通信口等组成。
特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。
该系列单片机所组成的最小系统如图3-1所示。
、
3.2超声波发射电路
超声波发射电路原理图如图2-2所示。
发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P1.0端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。
输出端采两个反向器并联,用以提高驱动能力。
上位电阻R1O、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。
如图3-2。
压电式超声波换能器是利用压电晶体的谐振来工作的,超声波换能器内部有两个压电晶片和一个换能板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;
反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。
超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。
3.3超声波检测接收电路
集成电路C*20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路(如图2-3)。
实验证明用C*20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。
适当更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。
如图3-3
图3-3超声波接收电路原理图
3.4.温度补偿电路
温度传感器使用了DSl8B20数字温度计提供可选择的12位(二进制)温度读数来指示周围环境的温度信息。
经过单线接口DQ与单片机进行数据交互。
从主机CPU到DSl8B20仅需一条数据接线(和地线)。
DSl8B20的电源可以由数据线本身提供而不需要接外部电源。
由于每一个DSl8B20在出厂时已经给定了唯一的序号因此任意多个DSl8B20可以存放在同一条单线总线上实现多点温度测量。
温度传感器DSl8B20的测温*围从-55摄氏度到+125摄氏度增量值为0.5度可在ls(典型值)内把温度变换成数字量,因此采用DS18B20实现温度补偿电路的设计。
3.5显示电路
显示电路主要由74ls273芯片驱动,用PNPC8550三级管进行位选,七段共阳极数码管显示,硬件电路图如图3-5所示:
四.系统软件设计
4.1主程序设计
主程序中包括温度补偿子程序,计算子程序,显示子程序,如图4-1所示:
在主程序设计中,我们采用了汇编编程。
首先进行系统初始化。
其次利用循环产生4个40KHZ的方波,由输出口进行输出,并开始计时。
第三读取外界环境的温度,由该温度确定环境中的超声波传输速度。
第四等待中断,若超声波被接收探头捕捉到,则通过中断可测得超声波在环境中的传播时长。
第五进行计算,求得测距仪到被测物的距离。
第六进行距离显示。
4.2温度补偿子程序
DS18B20正常工作需要严格的工作时序,操作起来很复杂,图4-2给出的是DS18B20的时序图,其控制程序如下:
TEMP:
SETBDQ
NOP
CLRDQ
MOVR0,#0FBH
TSR1:
DJNZR0,TSR1
MOVR0,#25H;
TSR2:
JNBDQ
TSR3DJNZR0,TSR2;
TSR3:
SETBFLAG1
CLRP2.0
AJMPTSR5
TSR4:
CLRFLAG1
LJMPTSR7
TSR5:
MOVR0,#06BHTSR6:
DJNZR0,TSR6
TSR7:
SETBDQRET
********读转换后的温度值******
GET_TEMPER:
LCALLTEMP
FLAG1,TSS2
RETTSS2:
MOVA,#0CCHLCALLWRITE_18B20
MOVA,#44HLCALLWRITE_18B20
MOVA,#0CCHLCALLWRITE_18B20
MOVA,#0BEH;
LCALLWRITE_18B20
LCALLREAD2_18B20;
RET
********写ds18b20汇编程序***
WRITE_18B20:
MOVR2,#8
CLRC
WR1:
CLRDQ
MOVR3,#6
DJNZR3,$
RRCA
MOVDQ,C
MOVR3,#23
DJNZR2,WR1
RET
;
**读18B20程序,读出两个字节的温度**
READ2_18B20:
MOVR4,#2;
MOVR1,#29H
RE00:
MOVR2,#8
RE01:
CLRC
SETBC
MOVR3,#7
MOVC,DQ
RRCA
DJNZR2,RE01
MOVR1,A
DECR1
DJNZR4,RE00
*****读出的温度进行数据转换***
CHANGE:
MOVA,29H;
MOVC,28H.0RRCA
MOVC,28H.1
MOVC,28H.2
MOVC,28H.3
MOV29H,A
五.调试及性能分析
5.1调试步骤
我们的步骤是先焊接各个模块,焊接完每个模块以后,再进行模块的单独测试,以确保在整个系统焊接完能正常的工作,首先焊接的是电源模块,其中包括USB供电和电池供电两种方式,电源模块焊接完以后,进行电源模块的测试,当插上USB以后电源指示灯并没有亮,说明电源模块有问题,后来发现稳压芯片发烫,得出一定是电源和地短了,接下来就开始检查USB的地和电源是不是接反了,然后开始检查PCB和电路图,发现确实是封装错了,USB解决以后测试,发现电源指示灯还是没有亮,不过7805还是发热,经检查知道,7805的封装也错了,经改装电源模块可以正常工作了,接下来是单片机最小系统的测试,焊接完以后发现系统没有问题,程序可以正常下载,然后是超声波发送模块的焊接,焊接完以后,编写一个专门的发射超声波的程序,然后用示波器测试通过,在测试显示程序的时候数码管不能正常工作,不亮,后来发现是驱动芯片74LS273的CLK没有和单片机的控制端连接上,不能将数据锁存到数码管中,后来用跳线连接上了。
接下来是软件的调试过程,在软件的调试过程中,遇到了很多的问题,每个问题也解决了。
经过3,4天的调试终于将程序调试通过了。
5.2性能分析
虽然结果和预想的有很大的差距,但总体来说已经基本上达到了要求,理想上超声波测距能达到5到7米左右,而我们所能实现的最大距离只有3米,造成这种原因我想有以下几点:
1.由于我们采用的是11.0592MHZ的晶振,理论上是按照12MHZ的晶振计算的,所以对系统造成了一定的误差。
2.由于温度传感器DS18B20距离单片机较近,所采集到的温度严重受到单片机的影响,造成系统误差。
3.单片机接收端其中有个电阻是4.7欧姆的,由于种种原因没有找到4.7欧姆的,就找了个5.5欧姆的代替,造成系统误差。
六.心得体会
俗话说"
好的开始是成功的一半”。
通过这次实习,我们学到了很多东西。
在进行课程设计时,我们应该做到以下三点:
首先,我认为最重要的就是认真的研究老师给的题目。
其次,在老师讲解的基础上认真研究硬件电路的设计,和软件流程的设计。
最后,重点实现软硬结合的综合调试。
这次的实习算起来一共进行了三周,在这三周的时间里我们进行了硬件电路图设计,PCB板的设计,以及软件的编程实现,软硬件的综合调试。
最终一个完整的课程设计成果出来了,很高兴它能按着设计的思想与要求运作起来。
当然,这其中也有很多问题,第一、不够细心。
比如在PCB制作过程中没有建立网络报表导致了部分连线没有倒入PCB板中,还有部分封装出现了错误。
第二,实践环节上,这次课设是对我所学的理论课程的一次检验,对于这次单片机综合课程实习,使我们的动手能力得到提升,同时纠正我们对"
系统”这一概念以往的错误理解。
就实现功能来说,设计结果能够符合题意,成功完成了此次实习要求,我们不只在乎这一结果,更加在乎的,是这个过程。
这个过程中,我们花费了大量的时间和精力,更重要的是,我们在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作。
在已度过的大学时间里,我们大多数接触的是理论课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似实习就为我们提供了良好的实践平台。
同时这次实习给我们带来前所未有的的启发:
首先,查阅资料的必要性。
在做本次实习的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做单片机实习,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计,我们能做的就是理论结合实际。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:
模拟和数字电路知识等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
再次,在实习之前,我们要对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;
要有一个清晰的思路和一个完整的的软件流程图;
在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;
在实习过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力提高都会受益于我在以后的学习、工作和生活中
最后,我们在这次实习中我们使用了分模块焊接,分模块测试的方法进行硬件电路的焊接和测试,这是我们最宝贵的收获,这样做可以避免走很多弯路。
使得调试也条理分明。
总体上说,这次实习中收获很多,感触也很多。
参考文献
[1]*维祥、*旭敏.单片微型机原理及应用.:
**理工大学,1996
[2]李光飞、楼然苗、胡佳文、谢象佐.单片机课程设计与实例指导.:
航空航天大学,2004
[3]余永权.89系列FLASH单片机原理及应用.:
电子工业,2002
[4]李群芳,黄建.单片机微型计算机与接口技术.:
电子工业,2001
[5]楼然苗、李光飞.51系列单片机设计实例.:
航空航天大学,2003
[6]王守中51单片机开发入门与典型实例.:
人民邮电,2009
附录1程序清单
VOUTEQUP1.0
TEMP1EQU36H
TEP1EQU37H
DQEQUP1.7
FLAG1EQU38H
ORG0000H
JMPSTART
ORG0003H
JMPPINT0
;
************主程序******************
START:
MOVP3,0FFH
MOVP0,0FFH
MOVP1,0FFH
MOVP2,0FFH
MOVTMOD,#01H
MOVTH0,#00H
MOVTL0,#00H
CLRIE0
SETBP*0
SETBEA
SETBE*0
CLRIT0
MOVR4,#4
SETBTR0
k:
CPLP1.0
DJNZR4,K
JNBIE0,$
LCALLTEMP
LCALLGET_TEMPER
LCALLCHANGE
LCALLWORK
LCALLDISPLAY1
LJMPSTART
PINT0:
CLRTR0
CLRE*0
MOV30H,TL0
MOV31H,TH0
RETI
NOP
MOVR0,#0FBH;
给延时程序赋初值
DJNZR0,TSR1;
延时
JNBDQ,TSR3;
S18B20是否存在,存在就跳转到TSR3
DJNZR0,TSR2;
不存在等待
SETBFLAG1;
置标志位,表明DS18B20存在;
CLRP2.0;
二极管指示
TSR5:
MOVR0,#06BH
TSR6:
DJNZR0,TSR6;
SETBDQ;
表明不存在
********读转换后的温度值*********
RET;
若不存在则返回
TSS2:
MOVA,#0CCH;
跳过ROM
MOVA,#44H;
发出温度转换命令
LCALLWRITE_18B20
发出读温度换命令
读两个字节的温度
*******写ds18b20汇编程序*******
低位存在29H,高位存在28H
****读出的温度进行数据转换********
MOVC,28H.0;
将28H中的最低位移入C
LCALLCONVERSE
*************DISPLAY******
CONVERSE:
MOVA,29H;
将29H中的十六进制数转换成10进制
MOVDPTR,#TABLE
MOVCA,A+DPTR
MOVTEMP1,A
TABLE:
DB165D,165D,165D,166D,166D,166D,167D,167D,167D,167D
DB168D,168D,168D,169D,169D,169D,170D,170D,170D,171D
DB171D,171D,172D,172D,172D,173D,173D,173D,174D,174D
DB174D,174D,175D,175D,175D
*******计算子程序*********
WORK:
MOVPSW,#18h;
选择3区R系列寄存器
MOVR3,31H
MOVR2,30H
MOVR1,#00D
MOVR0,TEMP1
LCALLMUL2BY2
MOVR3,#27H
MOVR2,#10H
LCALLDIV4BY2
LCALLHBCD
*两字节无符号数乘法程序*
R7R6R5R4<
=R3R2*R1R0速度*时间/2
MUL2BY2:
CLRA
MOVR7,A
MOVR6,A
MOVR5,A
MOVR4,A
MOV46H,#10H
MULLOOP1:
MOVA,R4
RLCA
MOVA,R5
MOVA,R6
MOVA,R7
MOVA,R0
MOVR0,A
MOVA,R1
MOVR1,A
JNCMULLOOP2
ADDA,R2
ADDCA,R3
ADDCA,#00H
MULLOOP2:
DJNZ46H,MULLOOP1
*四字节/两字节无符号数除法程序*
R7R6R5R4/R3R2=R7R6R5R4(商)...R1R0(余数)/10000
DIV4BY2:
MOV46H,#20H
MOVR0,#00H
MOVR1,#00H
DIVLOOP1:
SUBBA,R2
MOVB,A
SUBBA,R3
JCDIVLOOP2
MOVR0,B
DIVLOOP2:
CPLC
DJNZ46H,DIVLOOP1
*****************************;
十六进制双字节转三字节十进制;
HBCD:
MOVA,R5
MOVR6,A
MOVA,R4
MOVR7,A
HB2:
CLRA
M