基于51单片机的超声波测距报告.docx
《基于51单片机的超声波测距报告.docx》由会员分享,可在线阅读,更多相关《基于51单片机的超声波测距报告.docx(19页珍藏版)》请在冰豆网上搜索。
基于51单片机的超声波测距报告
(一)设计目的
通过LED数码管显示所测距离,测量围为7cm~1m,误差±2cm。
(二)方案论证
常用的测距方式主要有雷达测距、红外测距、激光测距和超声波测距等4种。
雷达测距对天气的依赖性较强,且成本较高;红外测距量围窄;激光测距精度高、抗干扰能力强但成本高,且光学系统需要细心维护;超声波测距指向性强、传输距离远、受环境影响小、传输时间容易检测,而且超声波传声器结构简单、行能可靠、成本低、易集成,因此本设计采用超声波测距的方式进行距离测量。
超声波测距原理
超声波传感器分机械方式和电气方式两类,它实际上是一种换能器,在发射端它把电能或机械能转换成声能,接收端则反之。
本次设计超声波传感器采用电气方式中的压电式超声波换能器,它是利用压电晶体的谐振来工作的。
它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,产生超声波。
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。
在超声波电路中,发射端输出一系列脉冲方波,脉冲宽度越大,输出的个数越多,能量越大,所能测的距离也越远。
超声波发射换能器与接收换能器其结构上稍有不同,使用时应分清器件上的标志。
超声波测距的方法有多种:
如往返时间检测、相位检测法、声波幅值检测法。
本实验采用往返时间检测法测距。
其原理是超声波传感器发射一定频率的超声波,借助空气媒质传播,到达测量目标或障碍物后反射回来,经反射后由超
声波接收器接收脉冲,其所经历的时间即往返时间,往返时间与超声波传播的路程的远近有关。
测试传输时间可以得出距离。
假定s为被测物体到测距仪之间的距离,测得的时间为t/s。
超声波传播速度为v/m·s-1表示,则有关系式
(1)
s=vt/2
(1)
表1一些温度下声速
温度T/℃
-30
-20
-10
0
10
20
30
声速v/m·s-1
313
319
322
331
337
344
350
本方案取室温20度下的声速V=344。
(三)详细设计
·系统总体设计
本系统由超声波发射、回波信号接收、显示和单片机等硬件电路部分以及相应的软件部分构成。
系统原理框图如图1所示。
图1系统原理框图
整个系统由单片机AT89S52控制,超声波传感器采用收发分体式,分别是一支超声波发射换能器TCT40—16T和一支超声波接收换能器TCT40—16R。
超声波信号通过超声波发射换能器发射至空气中,遇被测物反射后回波被超声波接收换能器接收。
进行相关处理后,输入单片机的INT0脚产生中断,计算中间经历的时间,同时再根据具体的温度计算相应的声速,根据式
(1)就可得出相应的距离用来显示。
3.1系统硬件电路的设计
·超声波发射部分
超声波发射部分是为了让超声波发射换能器TCT40—16T能向外界发出40kHz左右的方波脉冲信号。
40kHz左右的方波脉冲信号的产生通常有两种方法:
采用硬件如由555振荡产生或软件如单片机软件编程输出,本系统采用后者。
编程由单片机P1.0端口输出40kHz左右的方波脉冲信号,由于单片机端口输出功率不够,40kHz方波脉冲信号分成两路,送给一个由74HC04组成的推挽式电路进行功率放大以便使发射距离足够远,满足测量距离要求,最后送给超声波发射换能器TCT40—16T以声波形式发射到空气中。
发射部分的电路,如图2所示。
图中输出端上拉电阻R1,R6,一方面可以提高反向器74HC04输出高电平的驱动能力,另一方面可以增加超声换能器的阻尼效果,缩短其自由振荡的时间。
图2超声波发射电路
·超声波接收部分
传统的接收电路采用LM386等功率放大器件,结合其他一些硬件电路实现,电路结构复杂,制作成本较高,且检测灵敏度没有保障。
本设计选用了索尼CX20106A芯片,这是一款专用的红外信号接收芯片,部集成了检波、除噪、放大电路,具有很高的信号检测灵敏度,且输出信号电平等级与单片机相同。
上述TCT40—16T发射的在空气中传播,遇到障碍物就会返回,超声波接收部分是为了将反射波(回波)顺利接收到超声波接收换能器TCT40—16R进行转换变成电信号,经过索尼CX20106A芯片对此电信号进行放大、滤波、整形等处理后,得到一个负脉冲送给单片机的P3.2(INT0)引脚,以产生一个中断。
超声波接收电路图如图3所
图3超声波接收电路
·单片机控制电路
单片机采用STC89C54RC+,借用实验箱电路,单片机原理电路如图4所示
图4单片机原理电路
·显示电路
显示电路借用实验箱电路,由4位共阴数码管LG3641,锁存器74hc574构成,采用动态显示,本设计只采用一个4位数码管。
显示原理图如图5所示
图5显示原理图
3.2系统程序设计
系统软件设计采用模块化设计,主要包括主程序设计、T1中断服务程序、INT0外部中断服务程序、距离计算子程序、显示子程序、延时子程序等。
系统软件编制时考虑相关硬件的连线,同时还要进行存储空间、寄存器以及定时器和外部中断引脚的分配和使用。
本设计中P1.0引脚连接到7HC04推挽放大电路再连接到超声波发射传感器,P1.0引脚输出的将是软件方式产生的40kHz方波,而P3.2(INTO)则被用来接收回波。
主程序首先要对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA并对显示端口P0和P2清0;然后调用超声波发生子程序送出一个超声波脉冲。
为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms后才打开外中断0接收返回的超声波信号。
由于采用的是12mhz晶振,计数器每计一个数就是1us,所以当主程序检测到接收成功的标志位后,将计数器T0中的数按式(3-1)计算,即可得被测物体与测距之间的距离。
设计时取20℃时的声速位344m/s,则有
CM(3-1)
其中:
为计数器T0的计数值。
测出距离后,结果将以十进制BCD码方式送往led显示约0.5s,然后再发超声波脉冲重复测量过程。
·主程序流程图
·超声波发生子程序和超声波接收中断程序
超声波发生子程序的作用是通过P1.0端口发送两个左右的超声波脉冲信号(频率为40khz的方波),脉冲宽度约为12us左右,同时把计数器T0打开进行计时。
超声波测距主程序利用外部中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0低电平),立即进入超声波接收中断程序。
进入该中断后,就立即关闭计数器T0,停止计时,并将测距成功标志子赋值1,寄存器用00h单元。
(四)调试及性能分析
超声波发射电路结构简单没有过多调试,主要对接收部分进行调试。
超声波接收电路采用的是索尼CX20106A芯片,这是一款专用的红外信号接收芯片,电路结构简单但参数设置的不当会直接影响接收的效果。
其中2号脚与地之间连接RC串联网络,它们是负反馈串联网络的组成部分,改变它们的数值能改变前置放大的增益和频率特性。
增大R或减小C将使负反馈量增大,放大倍数下降,反之则放大倍数增大。
在制作过程中R取4.7欧姆C取3.3uf,导致放大倍数过大,测距功能不能正常工作,后来R取4.7k,C不变,测距功能基本可以实现,最终为了方便调节放大倍数将R用10k电位器代替,以此达到最佳效果。
5号脚与地之间接入的电阻用以设置带通滤波器中心频率f0,阻值越大,中心频率越低,本设计采用经验值200k,此时中心频率约为40khz
6号脚与地之间接的积分电容,标准值为330pf,由于手头没有330pf的就用两个680pf的电容串联,这样做对功能有一定影响但不是很大,具体规律是电容太大会导致探测距离缩短。
其它引脚不用调试。
·测量数据
实际距离(cm)
5
7
10
20
30
50
70
90
100
测量距离(cm)
6
7
10
20
29
49
71
92
101
数据分析
测量工距用两成为23cm的三角尺,挡板。
最小有效测量距离为6cm,测量误差在1cm左右,重复性较好。
误差原因主要有尺子短,室温温度并不一定是20度即实际声速与计算时采用的声速存在误差。
软件调试
软件调试利用keil进行虚拟仿真调试
(五)课程小结
在单片机课程设计中,经过选题、设计电路、购买元件、焊接电路、程序编写调试等步骤,最终得到完整的作品。
这次课程设计是本门课程课堂教学的延伸和发展,是理论知识与工程实践之间的衔接。
通过本课程设计,我获益匪浅,增强了我对单片机专业知识的学习,加深了认识,进一步巩固了我的动手能力,培养独立自主、综合分析的思维与创新能力,最终使初步具有设计小型计算机控制系统的硬件及软件的能力。
同时,通过资料搜集、方案分析、系统设计与报告撰写的一系列过程,得到一次科学研究工作的初步训练。
从而,在专业知识与研究方法方面为日后的毕业设计乃至毕业后的工作奠定良好的基础。
本次课程设计使我得到了锻炼,让我明白学习不知能是纸上谈兵,要能在生活生产中用到的具体使用。
(六)附录
程序清单
;********************************************
;*超声波测距器*
;*采用STC89C54RC+12MHZ晶振*
;*采用共阴LED显示器LRM2011.06.20*
;********************************************
;测距围7CM-1M,堆栈在4FH以上,20H用于标志
;显示缓冲单元在40H-43H,使用存44H、45H、46H用于计算距离
;
VOUTEQUP1.0;红外脉冲输出端口
;
;********************************************
;*中断入口程序*
;********************************************
;
ORG0000H
LJMPSTART
ORG0003H;中断0
LJMPPINT0
ORG000BH;定时器0溢出
LJMPINTT0
ORG0013H;中断1
RETI
ORG001BH;定时器1溢出
LJMPINTT1
ORG0023H;串行口中断
RETI
ORG002BH
RETI
;
;********************************************
;*主程序*
;********************************************
;
START:
MOVSP,#4FH
MOVR0,#40H;40H-43H为显示数据存放单元(40H为最高位)
MOVR7,#0BH
CLEARDISP:
MOVR0,#00H
INCR0
DJNZR7,CLEARDISP
MOV20H,#00H
MOVTMOD,#21H;T1为8位自动重装模式,T0为16位定时器
MOVTH0,#00H;65毫秒初值
MOVTL0,#00H
MOVTH1,#0F2H;40KHZ初值
MOVTL1,#0F2H
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MOVR4,#08H;超声波肪冲个数控制(为赋值的一半)
SETBPX0
SETBET0
SETBEA
SETBTR0;开启测距定时器
start1:
LCALLDISPLAY
JNB00H,START1;收到反射信号时标志位为1
CLREA
LCALLWORK;计算距离子程序
SETBEA
CLR00H
SETBTR0;重新开启测距定时器
MOVR2,#64H;测量间隔控制(约4*100=400MS)
LOOP:
LCALLDISPLAY
DJNZR2,LOOP
SJMPStart1
;
;****************************************************
;*中断程序**
;****************************************************
;T0中断,65毫秒中断一次
INTT0:
CLREA
CLRTR0
MOVTH0,#00H
MOVTL0,#00H
SETBET1
SETBEA
SETBTR0;启动计数器T0,用以计算超声来回时间
SETBTR1;开启发超声波用定时器T1
OUT:
RETI
;T1中断,发超声波用
INTT1:
CPLVOUT
DJNZR4,RETIOUT
CLRTR1;超声波发送完毕,关T1
CLRET1;
MOVR4,#04H
SETBEX0;开启接收回波中断
RETIOUT:
RETI
;外中断0,收到回波时进入
PINT0:
CLRTR0;关计数器
CLRTR1
CLRET1
CLREA;
CLREX0;
MOV44H,TL0;将计数值移入处理单元
MOV45H,TH0;
SETB00H;接收成功标志
RETI
;
;****************************************************
;*显示程序*
;****************************************************
;40H为最高位,43H为最低位,先扫描高位
DISPLAY:
MOVR1,#40H;G
MOVR5,#0FEH;G
PLAY:
MOVA,R5
MOVP0,#00H
SETBP2.0;段选锁存
CLRP2.0
MOVP0,A;P2,A
SETBP2.1;位选锁存
CLRP2.1
MOVA,R1
MOVDPTR,#TAB
MOVCA,A+DPTR
MOVP0,A
SETBP2.0;段选锁存
CLRP2.0
LCALLDL1MS
INCR1
MOVA,R5
JNBACC.3,ENDOUT;G
RLA
MOVR5,A
AJMPPLAY
ENDOUT:
;MOVP2,#0FFH
MOVP0,#00H;#0FFH
RET
;
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,77H,40H
;共阴段码表"0""1""2""3""4""5""6""7""8""9""不亮""A""-"
;****************************************************
;*延时程序*
;****************************************************
;
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
;
;****************************************************
;*距离计算程序(=计数值*17/1000cm)*
;****************************************************
;
work:
PUSHACC
PUSHPSW
PUSHB
MOVPSW,#18h
MOVR3,45H
MOVR2,44H
MOVR1,#00D
MOVR0,#17D
LCALLMUL2BY2
MOVR3,#03H
MOVR2,#0E8H
LCALLDIV4BY2
LCALLDIV4BY2
MOV40H,R4
MOVA,40H
JNZJJ0
MOV40H,#0AH;最高位为零,不点亮
JJ0:
MOVA,R0
MOVR4,A
MOVA,R1
MOVR5,A
MOVR3,#00D
MOVR2,#100D
LCALLDIV4BY2
MOV41H,R4
MOVA,41H
JNZJJ1
MOVA,40H;次高位为0,先看最高位是否为不亮
SUBBA,#0AH
JNZJJ1
MOV41H,#0AH;最高位不亮,次高位也不亮
JJ1:
MOVA,R0
MOVR4,A
MOVA,R1
MOVR5,A
MOVR3,#00D
MOVR2,#10D
LCALLDIV4BY2
MOV42H,R4
MOVA,42H
JNZJJ2
MOVA,41H;次次高位为0,先看次高位是否为不亮
SUBBA,#0AH
JNZJJ2
MOV42H,#0AH;次高位不亮,次次高位也不亮
JJ2:
MOV43H,R0
POPB
POPPSW
POPACC
RET
;
;****************************************************
;*两字节无符号数乘法程序*
;****************************************************
;R7R6R5R4<=R3R2*R1R0
;
MUL2BY2:
CLRA
MOVR7,A
MOVR6,A
MOVR5,A
MOVR4,A
MOV46H,#10H
MULLOOP1:
CLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R5
RLCA
MOVR5,A
MOVA,R6
RLCA
MOVR6,A
MOVA,R7
RLCA
MOVR7,A
MOVA,R0
RLCA
MOVR0,A
MOVA,R1
RLCA
MOVR1,A
JNCMULLOOP2
MOVA,R4
ADDA,R2
MOVR4,A
MOVA,R5
ADDCA,R3
MOVR5,A
MOVA,R6
ADDCA,#00H
MOVR6,A
MOVA,R7
ADDCA,#00H
MOVR7,A
MULLOOP2:
DJNZ46H,MULLOOP1
RET
;
;****************************************************
;*四字节/两字节无符号数除法程序*
;****************************************************
;R7R6R5R4/R3R2=R7R6R5R4(商)...R1R0(余数)
;
DIV4BY2:
MOV46H,#20H
MOVR0,#00H
MOVR1,#00H
DIVLOOP1:
MOVA,R4
RLCA
MOVR4,A
MOVA,R5
RLCA
MOVR5,A
MOVA,R6
RLCA
MOVR6,A
MOVA,R7
RLCA
MOVR7,A
MOVA,R0
RLCA
MOVR0,A
MOVA,R1
RLCA
MOVR1,A
CLRC
MOVA,R0
SUBBA,R2
MOVB,A
MOVA,R1
SUBBA,R3
JCDIVLOOP2
MOVR0,B
MOVR1,A
DIVLOOP2:
CPLC
DJNZ46H,DIVLOOP1
MOVA,R4
RLCA
MOVR4,A
MOVA,R5
RLCA
MOVR5,A
MOVA,R6
RLCA
MOVR6,A
MOVA,R7
RLCA
MOVR7,A
RET
;END
原理图
参考资料:
《行走机器人的超声波测距系统的研究》作者:
曾德怀,村禧,铁,黄瑞华《基于AT89C51单片机的超声波测距系统设计》作者:
戴曰章,吴志勇《基于CX20106A的超声波倒车雷达设计》作者:
伟,颜文俊《基于单片机的超声波测距系统的研究与设计》作者:
沙爱军《基于单片机的高精度超声波测距系统》作者:
卜英勇
实物图