基于51单片机的超声波测液位设计报告.docx

上传人:b****8 文档编号:9056542 上传时间:2023-02-03 格式:DOCX 页数:20 大小:403.27KB
下载 相关 举报
基于51单片机的超声波测液位设计报告.docx_第1页
第1页 / 共20页
基于51单片机的超声波测液位设计报告.docx_第2页
第2页 / 共20页
基于51单片机的超声波测液位设计报告.docx_第3页
第3页 / 共20页
基于51单片机的超声波测液位设计报告.docx_第4页
第4页 / 共20页
基于51单片机的超声波测液位设计报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于51单片机的超声波测液位设计报告.docx

《基于51单片机的超声波测液位设计报告.docx》由会员分享,可在线阅读,更多相关《基于51单片机的超声波测液位设计报告.docx(20页珍藏版)》请在冰豆网上搜索。

基于51单片机的超声波测液位设计报告.docx

基于51单片机的超声波测液位设计报告

(封面)

XXXXXXX学院

基于51单片机的超声波测液位设计报告

 

题目:

院(系):

专业班级:

学生姓名:

指导老师:

时间:

年月日

 

摘要

随着科技的发展,人们生活水平的提高,城市发展建设加快,城市给排水系统也有较大发展,其状况不断改善。

但是,由于历史原因合成时间住的许多不可预见因素,城市给排水系统,特别是排水系统往往落后于城市建设。

因此,经常出现开挖已经建设好的建筑设施来改造排水系统的现象。

城市污水给人们带来了困扰,因此箱涵的排污疏通对大城市给排水系统污水处理,人们生活舒适显得非常重要。

而设计研制箱涵排水疏通移动机器人的自动控制系统,保证机器人在箱涵中自由排污疏通,是箱涵排污疏通机器人的设计研制的核心部分。

控制系统核心部分就是超声波测距仪的研制。

因此,设计好的超声波测距仪就显得非常重要了。

本设计采用以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。

整个电路采用模块化设计,由主程序、预置子程序、发射子程序、接收子程序、显示子程序等模块组成。

各探头的信号经单片机综合分析处理,实现超声波测距仪的各种功能。

在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。

相关部分附有硬件电路图、程序流程图。

经实验证明,这套系统软硬件设计合理、抗干扰能力强、实时性良好,经过系统扩展和升级,可以有效地解决汽车倒车、建筑施工工地以及一些工业现场的位置监控。

关键词:

AT89C51;超声波发射模块;超声波接收模块;CX20106A;显示模块

 

 

1.引言

在日常生产生活中,很多场合如汽车倒车、机器人避障、工业测井、水库液位测量等需要自动进行非接触测距。

超声波是指频率大于20kHz的在弹性介质中产生的机械震荡波,其具有指向性强、能量消耗缓慢、传播距离相对较远等特点,因此常被用于非接触测距。

由于超声波对光线、色彩和电磁场不敏感,因此超声波测距对环境有较好的适应能力,此外超声波测量在实时、精度、价格也能得到很好的折衷。

2.超声波测距原理:

超声波传感器分机械方式和电气方式两类,它实际上是一种换能器,在发射端它把电能或机械能转换成声能,接收端则反之。

本次设计超声波传感器采用电气方式中的压电式超声波换能器,它是利用压电晶体的谐振来工作的。

它有两个压电晶片和一个共振板。

当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,产生超声波。

反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。

在超声波电路中,发射端输出一系列脉冲方波,脉冲宽度越大,输出的个数越多,能量越大,所能测的距离也越远。

超声波发射换能器与接收换能器其结构上稍有不同,使用时应分清器件上的标志。

  超声波测距的方法有多种:

如往返时间检测法、相位检测法、声波幅值检测法。

本设计采用往返时间检测法测距。

其原理是超声波传感器发射一定频率的超声波,借助空气媒质传播,到达测量目标或障碍物后反射回来,经反射后由超声波接收器接收脉冲,其所经历的时间即往返时间,往返时间与超声波传播的路程的远近有关。

测试传输时间可以得出距离。

  假定s为被测物体到测距仪之间的距离,测得的时间为t/s,超声波传播速度为v/m·s-1表示,则有关系式

(1)

  s=vt/2……

(1)

  在精度要求较高的情况下,需要考虑温度对超声波传播速度的影响,按式

(2)对超声波传播速度加以修正,以减小误差。

  v=331.4+0.607T……

(2)

  式中,T为实际温度单位为℃,v为超声波在介质中的传播速度单位为m/s。

(本系统以声速为344m/s计算。

 

3.系统设计

本系统由超声波发射、回波信号接收、显示和报警、电源等硬件电路部分以及相应的软件部分构成。

系统原理框图,如图1所示。

 

图1

整个系统由单片机STC89C52控制,超声波传感器采用收发分体式,分别是一支超声波发射换能器TCT40-16T和一支超声波接收换能器TCT40-16R。

超声波信号通过超声波发射换能器发射至空气中,遇被测物反射后回波被超声波接收换能器接收。

进行相关处理后,输入单片机的INT0脚产生中断,计算中间经历的时间,同时再根据具体的相应的声速,根据就可得出相应的距离用来显示,当然在一些场合也可根据需要,设置距离报警值。

3.1超声波发射部分

超声波发射部分是为了让超声波发射换能器TCT40-16T能向外界发出40kHz左右的方波脉冲信号。

40kHz左右的方波脉冲信号的产生通常有两种方法:

采用硬件如由555振荡产生或软件如单片机软件编程输出,本系统采用后者。

编程由单片机P1.0端口输出40kHz左右的方波脉冲信号,由于单片机端口输出功率不够,40kHz方波脉冲信号分成两路,送给一个由74HC04组成的推挽式电路进行功率放大以便使发射距离足够远,满足测量距离要求,最后送给超声波发射换能器TCT40-16T以声波形式发射到空气中。

发射部分的电路,如图2所示。

图中输出端上拉电阻R31,R32,一方面可以提高反向器74HC04输出高电平的驱动能力,另一方面可以增加超声换能器的阻尼效果,缩短其自由振荡的时间。

发射电路部分,如图2所示:

图2

3.2超声波接收部分

上述TCT40-16T发射的在空气中传播,遇到障碍物就会返回,超声波接收部分是为了将反射波(回波)顺利接收到超声波接收换能器TCT40-16R进行转换变成电信号,并对此电信号进行放大、滤波、整形等处理后,这里用索尼公司生产的集成芯片CX20106,得到一个负脉冲送给单片机的P3.2(INT0)引脚,以产生一个中断。

接收部分电路,如图3所示:

图3

可以看到,集成芯片CX20106在接收部分电路中起了很大的作用。

CX20106是一款应用广泛的红外线检波接收的专用芯片,其具有功能强、性能优越、外围接口简单、成本低等优点,由于红外遥控常用的载波频率38kHz与测距的超声波频率40kHz比较接近,而且CX20106内部设置的滤波器中心频率f0可由其5脚外接电阻调节,阻值越大中心频率越低,范围为30~60kHz。

故本次设计用它来做接收电路。

CX20106内部由前置放大器、限幅放大器、带通滤波器、检波器、积分器及整形电路构成。

工作过程如下:

接收的回波信号先经过前置放大器和限幅放大器,将信号调整到合适幅值的矩形脉冲,由滤波器进行频率选择,滤除干扰信号,再经整形,送给输出端7脚。

当接收到与CX20106滤波器中心频率相符的回波信号时,其输出端7脚就输出低电平,而输出端7脚直接接到STC89C52的INT0引脚上,以触发中断。

若频率有一些误差,可调节芯片引脚5的外接电阻R42,将滤波器的中心频率设置在40kHz,就可达到理想的效果。

CX20106内部框图如图4所示:

图4

其引脚图如图5所示

图5

超声波探头的有关参数如下

型号:

TCT40-16R/T(直径16mm)外观如图6所示

图6

1.标称频率(KHz):

40KHz

2.发射声压at10V(0dB=0.02mPa):

≥117dB

3.接收灵敏度at40KHz(0dB=V/ubar):

≥-65dB

4.静电容量at1KHz,<1V(PF):

2000±30%

标有T字样的是发射头,标有R字样的是接收头

以下资料只供参考.

Partnumber             NU25C16T-1    

UsingMethod           Transmitter   

Construction            Openstructuretype   

Centerfrequency        40.0±1.0KHz      

Soundpressurelevel    112dBmin.   

Sensitivity       

Capacitance             2400Pf±20%   

Maximuminputvoltage   60Vp-p    

Directivity             60°±15°(-6dB)   

Operatingtemperature   -20°C~+70°C   

StorageTemperature     -40°C~+85°C 

Weight                 2.2g

3.3数码管显示部分

本实验采用四位的LED数码管显示,由P1.4-P1.7输出位选信号,经过9012PNP三极管反向接数码管公共端。

由P2口输出段选信号,接数码管段选端。

其电路图如图7所示:

图7

3.4报警部分:

采用一个蜂鸣器,由P1.2输出一定频率的信号,在连接到蜂鸣器之前,经过一个三极管9012的放大。

报警部分的连线,如图8所示:

图8

3.5单片机复位电路:

如图9所示:

图9

3.6单片机晶振电路:

采用12MHz的晶振。

如图10所示:

图10

3.7系统软件设计:

1)软件设计分析

超声波测距的软件设计主要是由主程序,超声波发射子程序,超声波接受中断程序及显示子程序组成。

主程序首先对系统环境进行初始化,设置定时器T0工作模式为16位的定时计数器模式,把总中断允许位EA置位,并给显示端口P0和P2清0。

然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直接波触发,必需延迟0.1ms(这就是测距器会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。

由于采用频率为12MHz的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算就可测得被测物体与测距仪之间的距离:

(3)

(4)

这样就可以计算出测距仪与障碍物之间的距离。

测出距离后得结果将以十进制BCD码方式显示LED,然后再发超声波脉冲重复测量过程,求多次测量的平均值(误差最小化)。

2)主程序框图

超声波测距系统程序设计思路如图11所示:

图11超声波测距主程序框图

3)超声波系统子程序设计

超声波发生子程序的作用是通过P1.0端口发送2个左右的超声波信号频率约为40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。

超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断服务程序。

进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值为1。

如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值为2以表示此次测距不成功。

整个软件系统如图12,图13,图14所示:

 

图12主程序流程图图13定时中断服务子程序图14外部中断服务子程序

4.实验、调试及测试结果分析

本实验由单片机的P1.0端口输出方波信号,经过推挽式功率放大器进行功率放大,使TCT40-16T发出超声波,遇到障碍物时由TCT40-16R接收,经过CX20106放大滤波整形为一个脉冲,触发单片机的外部中断,经过单片机的处理显示,数码管显示的数值就是所测到的发送探头到障碍物的距离(显示3位数距离以及1位单位c),当距离超过所设定的范围时,蜂鸣器鸣叫同时数码管显示中间的四横即数码管的G段选。

当定时器溢出(65536us)时,蜂鸣器响,并且数码管显示上面的四横即数码管的A段选。

本系统经过反复调试,多次测量均能正确显示测量距离。

优点:

测量范围广。

本系统最小能测量2cm距离,理论上最大能测量999cm。

足够满足大多数测量液位需要。

测量精度大。

本系统经过多次测量对比,误差仅为1cm。

反应时间快。

本系统0.5秒重新测量一次距离,经过多次试验均能迅速显示即时距离。

缺点:

从上电到稳定的时间较长。

本系统上电大约需要15s的时间等待系统稳定才能正确显示测量距离。

改进:

如本系统采用电池芯片供电,对整个系统进行外壳包装以及机械安装装置,即可成为便携式超声波测距仪。

5.实验结论

通过本实验可以看出,用超声波可以较为精确的对距离进行测量,这样可以很好的用来进行液位的测量,结合了单片机可以实现较为智能的功能,不但可以实现显示,还可以进行液位的监测,这样在液位进入警戒状态时,不但可以进行报警,还可以进行相应的处理,实现智能监控。

 

总结

通过本次设计,我们受益良多。

本实验不但让我们更好的了解了超声波探头的使用,还让我们更好的熟悉单片机的编程以及外围电路连接,对单片机更加了解。

另外,我们还学会了推挽式功率放大器的应用,以及CX20106的用法,CX20106的用法还很多。

总之,本实验不仅增加了我们对传感器的认知,更激发了我们进一步了解其他传感器的热情。

 

参考文献

1)《传感器与检测技术》周杏鹏主编孙永荣仇国富副主编韩九强主审清华大学出版社

2)《单片机原理及接口技术》李朝青编著北京航空航天大学出版社

3)《数字逻辑电路与系统设计》蒋立平主编姜萍谭雪琴花汉兵编电子工业出版社

4)XX搜索引擎

 

附原理图:

附程序:

//超声波模块显示程序

#include//包括一个52标准内核的头文件

#defineucharunsignedchar//定义一下方便使用

#defineuintunsignedint

#defineulongunsignedlong

sbitTx=P1^0;//产生脉冲引脚

sbitRx=P3^2;//回波引脚

sbitbeep=P1^1;

ucharcodeSEG7[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//数码管0-9

uintdistance[4];//测距接收缓冲区

ucharge,shi,bai,temp,flag,outcomeH,outcomeL,i;//自定义寄存器

bitsucceed_flag;//测量成功标志

//********函数声明

voidconversion(uinttemp_data);

voiddelay_20us();

voidpai_xu();

voiddelay(uintms)

{

uchart;

while(ms--)

{

for(t=0;t<120;t++);

}

}

voidmain(void)//主程序

{uintdistance_data,a,b;

ucharCONT_1;

i=0;

flag=0;

Tx=0;//首先拉低脉冲输入引脚

TMOD=0x11;//定时器0,定时器1,16位工作方式

TR0=1;//启动定时器0

IT0=0;//由高电平变低电平,触发外部中断

ET0=1;//打开定时器0中断

EX0=0;//关闭外部中断

EA=1;//打开总中断0

while

(1)//程序循环

{

EA=0;

Tx=1;

delay_20us();

Tx=0;//产生一个20us的脉冲,在Tx引脚

while(Rx==0);//等待Rx回波引脚变高电平

succeed_flag=0;//清测量成功标志

EX0=1;//打开外部中断

TH1=0;//定时器1清零

TL1=0;//定时器1清零

TF1=0;//

TR1=1;//启动定时器1

EA=1;

while(TH1<30);//等待测量的结果,周期65.535毫秒(可用中断实现)

TR1=0;//关闭定时器1

EX0=0;//关闭外部中断

if(succeed_flag==1)

{

distance_data=outcomeH;//测量结果的高8位

distance_data<<=8;//放入16位的高8位

distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据

distance_data*=12;//因为定时器默认为12分频

distance_data/=58;//微秒的单位除以58等于厘米

}//为什么除以58等于厘米,Y米=(X秒*344)/2

//X秒=(2*Y米)/344==》X秒=0.0058*Y米==》厘米=微秒/58

if(succeed_flag==0)

{

distance_data=0;//没有回波则清零

}

distance[i]=distance_data;//将测量结果的数据放入缓冲区

i++;

if(i==3)

{

distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;

pai_xu();

distance_data=distance[1];

a=distance_data;

if(a>800)

beep=0;

else

beep=1;

if(b==a)CONT_1=0;

if(b!

=a)CONT_1++;

if(CONT_1>=3)

{CONT_1=0;

b=a;

conversion(b);

}

i=0;

}

}

}

//***************************************************************

//外部中断0,用做判断回波电平

INTO_()interrupt0//外部中断是0号

{

outcomeH=TH1;//取出定时器的值

outcomeL=TL1;//取出定时器的值

succeed_flag=1;//至成功测量的标志

EX0=0;//关闭外部中断

}

//****************************************************************

//定时器0中断,用做显示

timer0()interrupt1//定时器0中断是1号

{

TH0=0xfd;//写入定时器0初始值

TL0=0x77;

switch(flag)

{case0x00:

P2=ge;P1=0x7f;flag++;break;

case0x01:

P2=shi;P1=0xbf;flag++;break;

case0x02:

P2=bai;P1=0xdf;flag=0;break;

}

}

//显示数据转换程序

voidconversion(uinttemp_data)

{

ucharge_data,shi_data,bai_data;

bai_data=temp_data/100;

temp_data=temp_data%100;//取余运算

shi_data=temp_data/10;

temp_data=temp_data%10;//取余运算

ge_data=temp_data;

bai_data=SEG7[bai_data];

shi_data=SEG7[shi_data]&0x7f;

ge_data=SEG7[ge_data];

EA=0;

bai=bai_data;

shi=shi_data;

ge=ge_data;

EA=1;

}

//******************************************************************

 

voiddelay_20us()

{ucharbt;

for(bt=0;bt<60;bt++);

}

voidpai_xu()

{uintt;

if(distance[0]>distance[1])

{t=distance[0];distance[0]=distance[1];distance[1]=t;}

if(distance[0]>distance[2])

{t=distance[2];distance[2]=distance[0];distance[0]=t;}

if(distance[1]>distance[2])

{t=distance[1];distance[1]=distance[2];distance[2]=t;}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1