超声波测距器设计.docx
《超声波测距器设计.docx》由会员分享,可在线阅读,更多相关《超声波测距器设计.docx(22页珍藏版)》请在冰豆网上搜索。
超声波测距器设计
目录
1引言1
2超声波测距器硬件电路设计2
2.1单片机计时及控制系统设计3
2.1.1单片机芯片的选择3
2.1.2AT89C51基本电路3
2.1.3AT89C51定时计数应用电路5
2.2超声波发射电路设计5
2.3超声波接收电路设计6
2.4显示电路设计7
2.5电源电路设计9
2.6总体硬件结构与工作原理9
3系统软件设计10
3.1超声波测距器的算法设计10
3.2系统的主控制程序设计11
3.3超声波发生子程序设计11
3.4超声波接收中断程序设计11
4系统调试及性能分析12
4.1系统调试12
4.2系统性能分析12
结束语13
附录16
附录1元件清单16
附录2电路总原理图17
附录3电源电路原理图18
附录4电路PCB版图19
附录5超声波测距器源程序清单20
1引言
超声波就是频率超过声波频率的机械波,一般频率在20KHz—40KHz的范围内[1]。
由于超声波的速度较光速小,其传播时间容易检测,且其传播方向性及强度均好,易于控制等,使得超声波检测技术在物体位置测量、物体识别、空间导航等方面应用越来越广泛。
本人选择设计题目:
超声波测距器设计。
主要技术指标:
(1)能应用于汽车倒车,建筑施工工地以及一些工业现场的位置监控;
(2)显示模块采用LED数码管,能清晰稳定地显示测量结果;
(3)测量范围在0.50—4.00m,测量精度1cm,测量时与被测物体无直接接触。
2超声波测距器硬件电路设计
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距离。
路程、波速、时间之间的关系,可用下列简单的公式表示:
上式中,d为超声波传播单边的路程,s为超声波来回的路程,c为超声波波速,t为超声波来回所用的时间。
当声速确定后,只要测得超声波往返的时间,即可求得距离。
这就是超声波测距的原理。
超声波测距的原理如图1所示。
图1超声波测距原理
根据超声波测距原理,超声波测距器需要有超声波发生器、超声波接收器、超声波传播的计时器。
按照系统设计功能的要求,硬件电路由单片机计时及控制电路、超声波发射电路、超声波检测接收电路、显示电路及电源五部分组成。
系统原理总框图见图2。
图2超声波测距器的原理总框图
2.1单片机计时及控制系统设计
单片机控制电路核心是单片机芯片,其加上工作基本电路,就可以展开控制工作。
2.1.1单片机芯片的选择
MCS8031和AT89C51都具有4个8位I/O接口,但MCS8031没有内部程序存储器,需要外接,增加电路复杂性;AT89C2051和AT89C51都具有FlashROM[2],可以省去外接程序存储器;但AT89C2051接口少,不利于功能扩展;故选用AT89C51。
AT89C51单片机内部结构及主要性能特点:
40个引脚,双列直插式封装;有4个8位I/O接口,有全双工增强型UART,可编程串行通信;2个16位定时/计数器;5个中断源,2个中断优先级;有片内时钟振荡器(全静态工作方式,0-24MHz);有128字节内部RAM,4KBFlashROM(可以擦除1000次以上,数据保存10年);电源控制模式灵活(时钟可停止和恢复,空闲模式,掉电模式)。
其内部结构图如图3所示。
图3AT89C51/AT89C52内部结构图
2.1.2AT89C51基本电路
AT89C51单片机要正常工作,必须有其基本电路,包括晶振电路、复位电路。
(1)晶振电路
单片机的时钟信号通常有两种产生方式[3]:
一是内部时钟方式,二是外部时钟方式。
内部时钟方式是利用单片机内部的振荡电路产生时钟信号。
外部时钟方式是把外部已有的时钟信号引入到单片机内。
本设计采用内部时钟方式,电路如图4所示。
图4晶振电路
在单片机的XTAL1和XTAL2引脚外接石英晶体(简称晶振),作为单片机内部振荡电路的负载,构成自激振荡器,可在单片机内部产生时钟脉冲信号。
C1和C2的作用是稳定振荡频率和快速起振。
根据经典电路选择参数,本电路选用晶振12MHz,C1=C2=30PF[2]。
(时钟频率为6MHz)其中晶振周期(或外部时钟信号周期)为最小的时序单位。
(2)复位电路
复位电路如图5所示。
图5按键与上电复位电路
复位是使单片机处于某种确定的初始状态。
单片机工作从复位开始。
在单片机RST引脚引入高电平并保持2个机器周期,单片机就执行复位操作。
复位操作有两种基本方式:
一种是上电复位,另一种是上电与按键均有效的复位。
本设计采用后一种复位电路。
电路如图5所示。
开机瞬间RST获得高电平,随着电容C3的充电,RST引脚的高电平将逐渐下降。
若该高电平能保持足够2个机器周期,就可以实现复位操作。
根据经典电路选择参数,选取C3=10µF,R9=10KΩ[2]。
<—?
2.1.3AT89C51定时计数应用电路
AT89C51单片机片内集成有两个可编程的定时/计数器T0和T1[4]。
它们既可以工作于定时模式,也可以工作于外部事件计数模式。
本设计采用定时计数器T0,根据需要,让其工作于方式1。
方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位,组成16位加1计数器。
其初值在65535~0范围,计数范围为1~65536。
具体应用见程序设计部分。
2.2超声波发射电路设计
(1)选择超声波发生器类型
超声波发生器可以分为两大类[1]:
一类是用机械方式产生超声波,另一类是电气方式产生超声波。
机械方式有加尔统笛,液哨和气流旋笛等,它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。
电气方式包括压电型,电动型等;目前在近距离测量方面较为常用的是压电式超声波换能器。
压电式超声波换能器利用压电晶体的谐振来工作,其内部结构如图6所示。
超声波换能器有两个压电晶片和一个共振板。
当它的两极外加电脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将发生共振,从而带动共振板振动,产生超声波。
反之,如果在共振板上外加适当的机械振动,使压电晶片发生共振,将在压电晶片之间产生交变的电信号。
这时它就成为了超声波接收器。
图6超声波换能器内部结构图
(2)超声波发射电路设计
超声波发射电路主要由反向器74LS04和超声波发射换能器T构成,如图7所示。
图中T为超声波发射器,采用TCT40—l0Fl,外型尺寸Φ15。
输出端采用两个反向器并联,用以提高驱动能力。
上拉电阻R2,R3一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡的时间。
?
?
?
工作时,单片机的定时器T0产生40KHz方波信号,从P1.3端口输出,一路经过一级反向器后送到超声波发射器T的一个电极,另一路经过两极反向器后送到超声波发射器T的另一个电极,从而将40KHz电脉冲信号加到超声波发射器T,使T发射超声波。
?
?
?
电路采用推挽形式,向超声波发射器T提供电脉冲信号,可以提高超声波的发射强度。
图7超声波发射电路原理图
2.3超声波接收电路设计
超声波接收电路主要由超声波接收换能器R和超声波检测接收模块构成,如图8所示。
图中R为超声波接收器,采用TCT40—l0Sl,外型尺寸Φ15。
U3是超声波检测接收模块,设计时选用了红外线检波接收专用集成电路芯片CX20106A。
选用的原因是CX20106A常用的载波频率为38KHz,与测距的超声波频率40KHz较为接近,可以将发射的超声波频率控制为38KHz。
电路中设置的电容C4,适当更改其大小,可以改变接收电路的抗干扰能力;适当改变电路中的电容C6,可改变电路的灵敏度。
工作时,接收的超声波信号经R转换为电信号,加到CX20106A的输入端(1脚),处理后由CX20106A的输出端(7脚)送达单片机的中断口INT0,申请CPU处理。
图8超声波检测接收电路
2.4显示电路设计
显示电路采用LED数码管显示。
LED数码管显示有静态显示方式和动态显示方式,本系统采用并行输出的动态显示方式。
(1)动态显示原理
七段LED显示器由8个发光二极管组成,通常构成字形“日”,其中有一个发光二极管用来显示小数点。
各段LED显示器由驱动电路驱动,控制相应的二极管导通,相应的一个笔画或一个点就发光,由此就能显示出对应字符。
通常将各段发光二极管的阴极或阳极连在一起作为公共端;将各段发光二极管阳极连在一起的叫共阳极显示器,用低电平驱动;将阴极连在一起的叫共阴极显示器,用高电平驱动。
动态显示,就是一位一位地轮流点亮显示器的各个位。
LED显示器工作于动态显示方式时,所有位的段码线相应段并联在一起,由1个8位I/O口驱动控制,形成段码线多路复用。
各位的共阴极或共阳极选择线分别由相应的1条I/O线控制,形成各位的分时选通。
对显示器的每一位而言,每隔一段时间点亮一次。
虽然在同一时刻只有一位显示器点亮,但由于人眼的视觉暂留效应和发光二极管熄灭时的余辉,我们看到的却是多个字符“同时”显示。
显示器亮度既与点亮时的导通电流有关,也与点亮时间长短和点亮的间隔时间有关。
对于确定的LED,调整点亮时的导通电流和点亮的间隔时间参数,即可实现亮度较高较稳定的显示。
动态显示的优点是大大简化了硬件电路,但控制程序更复杂,控制时占用大量CPU时间;实质就是牺牲CPU时间换取器件减少。
(2)显示电路结构
根据本超声波测距器显示测距数据的需要,采用4位LED动态显示电路。
其中2位显示小数部分,2位显示整数部分。
显示信息输入部分由单片机P0输出端,连接74LS244相应输入端,驱动器输出端经限流电阻连接相应字段码端;字位控制部分分别由三极管驱动,选用PNP型晶体管9012,其基极经限流电阻连接单片机的P2口相关端子,集电极连接数码管的共用端,发射极连接电源。
显示电路如图9所示[5]。
图9超声波测距动态显示电路
(3)显示电路工作过程
工作中某时段,P0口输出相关位显示的段码,由P2口相应端输出位控信号,控制相应的显示位显示数据,同理,另一时间段,相应的另外的显示位显示数据,从而实现动态扫描显示。
2.5电源电路设计
电源电路由变压器、单相桥式电路、滤波电路和三端稳压电路构成。
其电路如图10所示。
电子设备中常使用输出电压固定的集成稳压器。
三端式稳压器只有输入、输出和公共引出端,由启动电路、基准电压电路、取样比较放大电路、调整电路和保护电路等部分组成。
在本系统中,要求电源电压为5V,由于三端式稳压器输出电压固定,故在设计中选择三端式稳压器7805。
7805电路参数[6]:
当
℃,输入为
,
,
时,输出
,本设计稳压输出5V。
三端式稳压器的输入与输出之间电压差为2-3V[7],整流桥的输出电压是输入电压(有效值)的1.2倍(这里选择IN4007组成的单相桥式整流电路),故选择220V/6V的变压器。
由于7805的最大输出电流为1A,电压为稳定的+5V,最大输出功率为5W,考虑电源消耗,故本系统选择8W的变压器。
图8中C7、C9为低频滤波电容,根据经验选择电解电容,其容值分别为C8=C10=1000μF;C9、C11为高频滤波电容,均选0.1μF的贴片电容。
发光二极管用于指示电源是否接通,选择FG1112004发光二极管,根据正向电流If=5mA,选择限流电阻R19=620Ω。
图10电源电路
2.6总体硬件结构与工作原理
超声波测距器工作原理:
打开电源,整个电路通电,单片机执行程序,对系统环境初始化,设置定时器T0工作模式,启动T0,调用超声波发生子程序,等待反射超声波,计算距离,显示距离;重复。
工作过程中,相关的子程序和中断程序被执行,相应硬件配合行动,显示测量结果。
3系统软件设计
超声波测距器的软件主要由主程序,超声波发生子程序,超声波接收中断程序以及显示子程序组成。
C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易计算程序运行时间。
本系统的程序既有较复杂的计算(计算距离时),又要求精确计算程序运行时间(超声波测距时),所以控制程序采用C语言和汇编语言混合编程。
3.1超声波测距器的算法设计
从前面距离的计算公式可知,c为声速,对于超声波,在常温20℃时,其数值为344米/秒;若能准确测量出超声波从发射到返回所用时间,则可以计算出发射点到被测障碍物之间的距离。
测量距离时,由超声波测距器的主控制器中定时器记录时间,设计中要求超声波测距时精确计算程序运行时间。
测量超声波来回所用的时间,当送出一个超声波脉冲后,需要延时约0.1ms,才打开外中断0接收返回的超声波信号,这是为了避免超声波从发射器直接传送到接收器引起直射波触发。
单片机工作时晶振频率为12MHz,计数器每计1个数就是1μs,当主程序检测到接收成功的标志位后,将停止计数器T0计数。
计算距离,将计数器T0中的计数值T0带入距离的计算公式计算,即可得被测物体与测距器之间的距离。
具体为
计算的结果,以十进制BCD码方式送往LED显示,显示时间约0.5s,然后再发超声波脉冲重复测量过程。
3.2系统的主控制程序设计
主程序包括对系统环境初始化,设置定时器T0工作模式,调用超声波发生子程序,等待反射超声波,计算距离,显示距离;重复。
主程序流程图如图11。
图11.主程序流程图
3.3超声波发生子程序设计
超声波发生子程序,主要功能是单片机控制,通过P1.3端口发送2个左右超声波脉冲信号,频率为约40kHz的方波,其脉冲宽度为12μs左右,同时把计数器T0打开进行计时。
3.4超声波接收中断程序设计
超声波接收中断程序,主要功能是单片机控制,检测外中断0返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入中断程序。
进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。
如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示本次测距不成功。
4系统调试及性能分析
4.1系统调试
超声波测距器的硬件制作注意:
安装超声波发射换能器和接收换能器时,应保持两换能器中心轴线平行并相距4—8cm,其余元件无特殊要求。
可以将超声波接收电路用金属壳屏蔽起来,以提高抗干扰性能。
硬件调试首先检查电路的焊接是否正确,并用万用表测试或通电检测电路是否接通。
硬件电路制作完成并调整好以后,便可将程序编译好下载到单片机试运行。
根据实际情况修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。
4.2系统性能分析
根据设计指标:
测量范围在0.10-4.00m,测量精度1cm的要求,实验时,可以考查比0.10m更小距离和比4.00m更大距离。
进行试测,用标准工具对比检验。
结果应该是测量范围更大、测距最大误差不超过1cm,重复一致性好。
结束语
本设计采用AT89C51单片机作为计时及主控制器、用TCT40—l0Fl作超声波发射器、用TCT40—l0Sl和CX20106A构成超声波检测接收电路。
将相关控制编程,写入单片机,实现了以单片机控制的超声波测距器。
本超声波测距器采用硬件电路和软件控制相结合,电路结构简单,低成本,操作方便,工作稳定,测量精度高,可达0.01米。
可用于日常生活及工农业生产中距离的测量及位置监控。
例如管道长度、油井深度、液面高度,建筑施工各点定位等。
本超声波测距器只具有测量显示功能,没有反馈与控制功能。
其设计思想可以应用于智能安全系统。
例如,在车辆智能自动安全系统中,检测车辆左、右动、静态障碍物,并显示距离,至危险区域后与智能模糊控制器通信以采取最佳避让措施等。
参考文献
[1]余成波.传感器与自动检测技术[M].北京.高等教育出版社,2004:
124
[2]李全利.单片计原理及接口技术[M].北京.高等教育出版社,2004:
23
[3]张毅刚.单片机原理及应用[M].北京.高等教育出版社,2004:
31
[4]周航慈.单片机应用程序设计技术[M].北京.北京航空航天大学出版,2002:
11
[5]陈明荧.8051单片机课程实训教材[M].北京.清华大学出版社,2004:
50
[6]廖先芸.电子技术实践与训练[M].北京.高等教育出版社,2000:
15-17
[7]康华光.电子技术基础模拟部分[M].北京.高等教育出版社,2003:
459
[8]刘道兴.电子技术培训教学讲义[M].内部资料,2003
附录1电路总原理图
附录2电源电路原理图
附录4电路PCB版图
附录5超声波测距器源程序清单
超声波测距器源程序清单:
//文件1:
cscjmain.c
//超声测距器单片机程序
//MCUAT89C51XAL12MHz
//BuildeByGavinPei,2006.5.28
;
#include
#defineuchatunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
externvoidcs_t(void);
externvoiddelay(uint);
externvoiddisplay(uchar*);,
datauchartestokt;
//*主程序*/
voidmain(void)
{
datauchardispram[5];
datauintI;
dataulongtime;
P0=0xff;
P2=0xff,
TMOD=0x11;
IE=0x80;
while
(1)
{
cs_t();
delay
(1),
testok=0;
EX0=1;
ET0=1;
while(!
testok)display(dispmm);
if(1==testok)
{
time=TH0;
time=(time<<8)|TL0;
time*=172;
time/=10000;
disptam[o]=(uchar)(time%10);
time/=10‘
disptam[1]=(uchar)(time%10);
time/=10;
dispram[2]=(uchar)(time%1o);
dispram[3]=(uchar)(time/10);
if(0==dispram[3])diapram[3]=17;
}
sele
{
dispram[0]=16;
dispram[0]=16;
dispram[0]=16;
dispram[0]=16;
}
for(i=0;i<300;i++)display(dispram);
}
}
/*超声接收程序(外中断0)*/
voidcs_r(void)interrupt0
{
TR0=0;
ET0=0;
EX0=0;
Testok=1;
}
/*超时清除程序(内中断T0)*/
voidovertime(void)interrupt1
{
EX0=0;
TR0=0;
ET0=0;
testok=2;
}
;//文件2:
cs_t.asm*/
;//超声发生子程序(12MHz晶振38.5Hz)
NAMECS_T
?
PR?
CS_T?
CS_TSEGMENTCODE
PUBLICCS_T
RSEG?
PR?
CS_T?
CS_T
CS_T:
PUSHACC
MOVTH0,#00H
MOVTL0,#00H
MOVA,#4D
SETBTR0
CS-T1:
CPLP1.3
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZACC,CS_T1
POPACC
RET
;
;//文件3:
rdieplay.asm*/
;四位共阳LED动态扫描显示子程序
;P0为段码口,P2为位选口(高电平有效)
;参数为要显示的字符串指针
NAMEDISPLAY
?
PR?
_DISPLAY?
DISPLAYSEGMENTCODE
?
CO?
-DISPLAY?
DISPLAYSEGMENTDATA
EXTRNCODE(_DELAY)
PUBLICDISPLAY
RSEG?
CO?
_DISPLAY?
DISPLAY
?
-DISPLAY?
BYTE:
DISPBIT:
DS1
DISPNUM:
DS1
RSEG?
PR?
_DISPLAY?
DISPLAY
DISPLAY:
PUSHACC
PUSHDPH
PUSHDPL
PUSHPSW
INCDISPNUM
MOVA,DISPNUM
CJNEA,#4D,DISP1
DISP1:
JCDISP2
MOVDISPNUM,#00H
MOVDISPBIT,#0FEH
DISP2:
MOVA,R1
ADDA,DISPNUM
MOVR0,A
MOVA,@R0
MOVDPTR,#DISPTABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,DISPNUM
CINEA,#2D,DISP3
CLRP0.7
DISP3:
MOVP2,DISPBIT
MOVR6,#00H
MOVR7,#0AH
LCALLDELAY
MOVP0,#0FFH
MOVP2,#0FFH
MOVA,DISPBIT
RLA
MOVDISPBIT,A
POPPSW
POPDPL
POPDPH
POPACC
RET
D15R1ABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H
DB0F8H,S0H,90H,88H,83H,0C6H
DB0A1H,86H,8EH,0BFH,0FFH
;”0”,”1”,”2”,”3”,“4",”5”,”6”,”7”,”8”,
”9”,"A",”B”,"C","D",“E",“F”,”一”,“”
;//文件4:
DELAY.ASM*/
;延时100机器周*参数(1^-65535)
NAMEDELAY
?
PR?
_DELAY?
DELAYSEGMENTCODE
PUBLIC_PELAY
RSEG?
PR?
_DELAY?
DELAY
DELAY:
PUSHACC;2
MOVA,R7;1
JZDELA1;2
INCR6;1
DELA1:
MOVR5,#50D;2
DJNZR5,$;2
DJNZR7,DELA1;2
DJNZR6,DELA1;2
POPACC;2
RET
END