原创 用AT89C2051设计超声波测距仪

2009-8-13 08:57 1968 5 5 分类: MCU/ 嵌入式
摘要:本文介绍了AT89C2051单片机的性能和特点,并在分析了超声波测距原理的基本上,指出了设计测距仪的思路和所需考虑的问题,给出了实现超声波测距方案的软、硬件设计系统框图。该设计系统经校正后,其测量精度可达0.1米。

L~K5? A'bcr43075   关键词:超声波  换能器  测距  AT89C2051电子园51单片机学习网-z#TRl.jfA/c


k@3XB Pqp ? R43075    超声波测距主要应用于倒车雷达、建筑施工工地以及一些工业现场,例如:液位、井深、管道长度等场合。目前国内一般使用专用集成电路设计超声波测距仪,但是专用集成电路的成本很高,并且没有显示,操作使用很不方便。本文介绍一种以AT89C2051或GSM97C2051单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。实际使用证明该仪器工作稳定,性能良好。电子园51单片机学习网E1gHI\ `

电子园51单片机学习网!k5yd/q3S9|$WDn

1 超声波测距原理

Ji2d&B5kx'p3SD-m43075

K.oM1UGXW43075    超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距离S=Ct/2,式中的C为超声波波速。

b,[*^ `;g43075

eOc B;E43075    由于超声波也是一种声波,其声速C与温度有关,表1列出了几种不同温度下的声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返的时间,即可求得距离。这就是超声波测距仪的机理。其系统框图如图1所示。电子园51单片机学习网HcD7|uIB

电子园51单片机学习网[.lp"O4\ Y$dn

2 AT89C2051的功能特点6136_200904071957111kdaW.gif

^u-`~^%d43075电子园51单片机学习网 a_+A mqT'}@&p

    AT89C2051是一个2k字节可编程EPROM的高性能微控制器。它与工业标准MCS-51的指令和引脚兼容,因而是一种功能强大的微控制器,它对很多嵌入式控制应用提供了一个高度灵活有效的解决方案。AT89C2051有以下特点:2k字节EPROM、128字节RAM、15根I/O线、2 个16位定时/计数器、5个向量二级中断结构、1个全双向的串行口、并且内含精密模拟比较器和片内振荡器,具有4.25V至5.5V的电压工作范围和 12MHz/24MHz工作频率,同时还具有加密阵列的二级程序存储器加锁、掉电和时钟电路等。此外,AT89C2051还支持二种软件可选的电源节电方式。空闲时,CPU停止,而让RAM、定时/计数器、串行口和中断系统继续工作。可掉电保存RAM的内容,但可使振荡器停振以禁止芯片所有的其它功能直到下一次硬件复位。电子园51单片机学习网 i6z:? B/z"U2a@

电子园51单片机学习网8yFm8|0FKE)vU

    AT89C2051有2个16位计时/计数器寄存器Timer0t Timer1。作为一个定时器,每个机器周期寄存器增加1,这样寄存器即可计数机器周期。因为一个机器周期有12个振荡器周期,所以计数率是振荡器频率的 1/12。作为一个计数器,该寄存器在相应的外部输入脚P3.4/T0和P3.5/T1上出现从1至0的变化时增1。由于需要二个机器周期来辨认一次1到 0的变化,所以最大的计数率是振荡器频率的1/24,可以对外部的输入端P3.2/INT0和P3.3/INT1编程,便于测量脉冲宽度的门。电子园51单片机学习网Dt!G!Q)pW*B

1CD.V\e[*}RD43075表1 声速与温度关系表

'PKAU jqxH/D%K#Y43075
温度(℃)-30-20-100102030100
声速(米/称)313319325323338344349386
电子园51单片机学习网4g_nH | y3y

    充分利用AT89C2051的片内资源,即可在很少外围电路的情况下构成功能完善的超声波测距系统。

W?.eb;l2G){Z43075电子园51单片机学习网RE9x0p B'_$I

3 系统硬件电路设计电子园51单片机学习网s#JNX?8wMk

电子园51单片机学习网-I%Q@/K3X$N9W?l

    超声波测距仪的硬件电路如图2所示。电子园51单片机学习网`+mH/F5d

电子园51单片机学习网S"_ KOFe!a\2\#dp"B

    AT89C2051通过外部引脚P1.6输出脉冲宽度为250μs,载波为40kHz的10个脉冲的脉冲群,以推挽形式加到变压器的初级,经升压变换推动超声波换能器发射出去。在发射的同时,P1.7输出一个高电平启动,给电容C4充电。发射结束时高电平翻转为低电平,C4开始对R2、R3组成的分压器放电并输出到比较器的负端。超声波接收换能器将接收到的障碍物反射的超声波送到放大器进行放大,这是一个高增益、低噪声放大器,在对放大后的信号进行检波后将检测回波送到比较器的正输入端。发射时P1.7输出的电平可以抑制比较器的翻转,这样就可以抑制发射器发射的超声波直接辐射到接收器而导致错误检测。

Yx~zcg43075电子园51单片机学习网jxYlPL ]cG

    图3是超声波测距原理的波形图,从图中可以看到,测出回波和发射脉冲之间的时间间隔,利用S=Ct/2就可以算出距离,再在LCD上显示出来。当然还可以设置若干个键,以用来控制电路的工作状态。限制系统的最大可测距离存在四个因素:超声波的幅度,反射而的质地,反射而和入射声波之间的夹角以及接收换能器的灵敏度。接收换能器对声波脉冲的直接接收能力将决定最小的可测距离。

5UP,m:?;R#j8tc0c43075

;a8o[#}q+np430754 系统软件设计6136_200904071957112T7Ft.gif电子园51单片机学习网!^ho'{8w2?x

电子园51单片机学习网^.X)FU A'zv"\

    AT89C2051单片机和其开发应用系统具有语言简洁、可移植性好、表达能力强、表达方式灵活、可进行结构化设计、可以直接控制计算机硬件、生成代码质量高、使用方便等诸多优点。超声波测距仪就是用AT89C51单片机开发设计的。它采用模块化设计,由主程序、发射子程序、查蟓接收子程序、定时子程序、显示子程序等模块组成。电子园51单片机学习网z'@,we3wqs\

电子园51单片机学习网TnT"k]X"RW

    图4和图5分别为主程序和测量子程序的框图。该系统的主程序处于键控循环工作方式,当按下测量键时,主程序开始调用发射子程序、查询接收子程序、定时子程序,并把测量结果用显示子程序在液晶屏上显示出来。

+O`iJf~a~5^9b@43075

Ro8I3pGO43075    必须指出的是,由于液晶要使用同一P3口,所以必须全部使用位操作,否则将导致LCD不能正常显示。另外,在系统还可以加入温度传感器来监测环境温度,把表1所列的数据做到程序中可进行温度被偿。为了增强系统的可靠性,应在软硬件上采用一些特殊措施。限于篇幅,下面仅给出部分程序,感兴趣者可与作者联系。

G v,H H;LU5pHX#a43075

BXY@2i9c#?43075    # pragma DB OE CD OT(5,SPEED) ROM(LARGE)IV电子园51单片机学习网B!g `0yE7li

电子园51单片机学习网N3Vq(v5S3P(s

    /*连接所需要的库*/电子园51单片机学习网m;cz,yaZ

电子园51单片机学习网 hY];uQy,p4r

    #include<reg52.h>

/X1a;@7~"Z+h#R5ze43075电子园51单片机学习网2OJ\d,pM {X

    #include<absacc.h>

ubf-FO Z.h43075电子园51单片机学习网(oL-U*S/q;KZ,}

    #include<stdio.h>电子园51单片机学习网1Hf:L1BOBK

电子园51单片机学习网\{1s hMX g

    /*定义数据类型*/

)Y+hC(Fq_43075

J*}1mrLJW43075    typedef unsingned char byte;电子园51单片机学习网^9v/_ZbKL t pYf7X;V


"I t z'C1o43075    typedef unsigned int word电子园51单片机学习网"q.YaQ&n*jh

电子园51单片机学习网 iWl.GdLT F+}

    #define uchar unsigned char

p*~&J"qH]C:LI7K8U43075

.e:ys?'|'e&b43075    #define unint unsigned int

KqZ7xng'J43075

Y.~'iF"DJh,K43075    #define ulong unsigned long电子园51单片机学习网_.d6A.t9S'p4w!EY*H0S


DH9HL!E43075    /*定义系统常数*/

b\5?q.u8f J43075

p?{7Q)Om!k43075    #define TRUE 1

nH:Y{}%We43075电子园51单片机学习网3xR!s vK'u

    #define FALSE 0

6DI,Rw2G]B43075

I UHe1l5w'o?43075    #define C="340" /*声速*/电子园51单片机学习网4H ~ T,c2V`L ?


.{X1JE"P _43075    /*定义功能位*/电子园51单片机学习网:L/u3g;Ri#m5O0P1oO


6W r+fjd.l0X}/j*X43075    sbit bflag="ACC7";6136_200904071957113NSMT.gif电子园51单片机学习网gS/Hn0Rr

电子园51单片机学习网Y"lj1S ~\

    sbit VOLCK="P1"^5;

qh{I1Q43075

'M*JXj3oLs43075    sbit MING="P3"^5;

z8E]2mf;mo43075电子园51单片机学习网BB ]+L6Y-vM)?Y

    sbit QUIET="P1"^3;

C \rZ d`[43075电子园51单片机学习网M ] p%J1h,n ON7]

    sbit BACK="P1"^2;电子园51单片机学习网&jq.dybm


,@ @\9H$xt0i43075    /*定义显示缓冲区*/电子园51单片机学习网$`0\'N5l3S

电子园51单片机学习网w8?"M$n7d Wfu/m

    uchar idata ON[16]={’,’L’,’E’,’N’,’G’,’T’,’H’,’=’,’8’,’.’,’8’8’,’m’,’’,’’,’’};电子园51单片机学习网 xlC np)}c?J

电子园51单片机学习网|t+]Zhj

    /*主程序用延时子程序*/电子园51单片机学习网J3@V(\b DP(Z

电子园51单片机学习网M2X]DzT-Sm7z

    woid main-delay(void)电子园51单片机学习网iQ#f(G(r{

电子园51单片机学习网H-ka9i3t'G(R `;_

    {

,jd9b J*{P,w7R43075

Z}*?$S8x0S"S"b1E43075    register i;

FiE U |8DH43075

7J2KE(R8f y}N43075    TRO="1";

+q+y Ue_JD P43075电子园51单片机学习网1Bn"tKj}

    for(i=0;i<15;i++)

G mUi;zE([0_43075电子园51单片机学习网1nH};s TP"e$l+L

    {

$gX/DB Cbp)@ w43075电子园51单片机学习网,{dX5T%j~9y

    TH0=0;

zP6u1T!L Qh{KIX43075

c }$h\ zP43075    TL0=0;

!`7V0| D @W+G HUQ/P43075

&{{c7zV.B;JF+m43075    Do{}while(!TF0);电子园51单片机学习网9{{P'H't:v bp

电子园51单片机学习网 UUhf1E3Y

    TF0=0;电子园51单片机学习网;s}+qoleo^


Ge$M*NA43075    }电子园51单片机学习网j5|o9D]U$h1V a:}


]+S2J0Y8RHK43075    TR0=0;

u/A&W&@ Tw5j~D43075电子园51单片机学习网6eqK&d3`5W4bQ9t

    }6136_2009040719571143k20.gif电子园51单片机学习网oq&i*i:j

电子园51单片机学习网`zA'i` cA;@#q

    */通用延时子程序*/电子园51单片机学习网'N?*Q|s4m8{


r9Z9u'S7I0U43075    void delay(void)

hK7]ZJ)^v{43075

0BzD l*c4Z$}@43075    {

5UN'NYW\0I@r [43075电子园51单片机学习网HD%J fu*A9eUJ

    unint i;电子园51单片机学习网Vz-Fl2yvSD

电子园51单片机学习网'cD-wA:ad-d2O3l;a

    for(i=0;i<200;i++){;}

o F4`LA qX%U-x43075

8G-yr{n:r1H\43075    }

.Y'b}u9{jz-J43075电子园51单片机学习网8f6kw].q

    /*键盘延时子程序*/电子园51单片机学习网 P#Bp%tx\


uhe;J dw43075    void key-delay(void)电子园51单片机学习网:ZF3?3i4\&@5F


P*}4x%h1n@#G43075    {电子园51单片机学习网:Jy0i0dF.~oX4A

电子园51单片机学习网K"\4M O8z

    unint i;

V0D{"R,g~j43075电子园51单片机学习网+O hc.I E`6] ~8I%~

    for(i=0;i<200;i++){;}

LcX&vb0a43075电子园51单片机学习网@ ?0D*L)ge0I0rN7@&t

    }电子园51单片机学习网0JWA ~Utu ^

电子园51单片机学习网+j1zrx(y

    /*初始化程序*/电子园51单片机学习网\)y4?d0R__

电子园51单片机学习网*IS[z(E M4Yi-W

    void start_main()

%[)_6a~2w/Av[43075电子园51单片机学习网j-_mA.p$l!V f(`2W4j

    {电子园51单片机学习网JC-T ~ U,[;|


q^Pi^J43075    tegister i;电子园51单片机学习网'e"G;n(ydk

电子园51单片机学习网:aO'z\OX3C&]

    uchar a[16]={’’,’L’,’E’,’N’,’G’,’T’,’H’,’=,’8’,’.’,’8’,’8’,’m’,’’,’’,’’};

1l$cU,sMv(v"H xaY43075电子园51单片机学习网8b/hBM.|

    for(i=0;<16;i++)电子园51单片机学习网%](v3A7wZA


D*Q%enDX43075    {ON=a;}电子园51单片机学习网N G%zE7P


k ygC NkK0f43075    nitlcd();/*初始化液晶*/

1K I!h B%J43075

!I!s C J&E b$_ r)_.?43075    display(ON);/*更新显示*/

K+P+_ ~ [43075电子园51单片机学习网u1G!Q_!M5k2D[

    }

V4~eE$Y;n6t l43075电子园51单片机学习网1U4~+o[L/MO

    /*主程序*/

;ZK.lBAf{Apt43075电子园51单片机学习网],mBzyxfe`y

    void main()电子园51单片机学习网7X4YQ+|Ae,S


l+f|CW4] f43075    {

{!K#A)Q%u+D(Pt^43075

$s r;_1{vG2K!L43075    register s,keycode;

L*[Cs4_Wz |2k43075

lWJ9xB4c43075    long idata t;电子园51单片机学习网}?R8s9[.@:}9m


RB]+h#\ g43075    start-main();/*初始化*/6136_2009040719571158bXG.gif电子园51单片机学习网#j2Ji;N:c,W[ c


Fb2rM O*[Z-g43075    main-delay();/*延时*/;

:^t"[!c~ J)E43075

4[X/d!\hN43075    if(keycoed= =true)电子园51单片机学习网%F.|;BP(Hk mS8V


:p5E&V R!h6N!z2B J43075    {

6Q3P.\0hE;G43075

eh s5XA,C43075    keycode="key-scan-wait"();

6Nc QTJ Vg43075电子园51单片机学习网+X4p$Q'jI%s M7e

    /*判断是否有测量键按下*/

]8c~_8?,c"o!P43075

a]6G2[2opcL LD43075    t="measure"();*/测量*/

UC6m/i];T U(I\43075电子园51单片机学习网$[2b[R Mo+E/x^s|-o4q

    S="0".5*t*C;*/换算*/电子园51单片机学习网 jLd g0B7xJ/R"?


.s9gBk'u f]43075    Decode-bcd(s.0x09);电子园51单片机学习网GIE$\9XDv

电子园51单片机学习网%`-d*e-u*F"F8FVg

    /*把测量结果置换入显示缓冲区*/电子园51单片机学习网9Ryg9p+w5N;K$j

电子园51单片机学习网B5Va]#M/C%B7p,{

    init-lcd();/*初始化液晶*/

R5`+q |*zD-dCr|43075电子园51单片机学习网W(xPL Uz:w,F

    display(ON);/*更新显示*/电子园51单片机学习网+@3Mn8_"H

电子园51单片机学习网3S {'`5KB;i]G

    }电子园51单片机学习网.\!wI N$z.?+Y@


~i\*Wi.D-o!H/A43075    }电子园51单片机学习网_su;r9FJv N:b)e

电子园51单片机学习网'D w3rB*W0iM

5 结束语

`3N]E1m jQ43075

7VF'tW,D Vu43075    虽然用一个单独计时器电路也可以测量超声波的传输时间,但利用AT89C2051单片机可以简化设计,便于操作和直观读数。该系统经实际测试证明,可以满足大多数场合的测距要求。

fj9q]%{Z/Q43075
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条