《单片机课程设计超声波液位检测仪.doc》由会员分享,可在线阅读,更多相关《单片机课程设计超声波液位检测仪.doc(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 单片机原理及应用课程设计报告书课题名称超声波液位检测仪姓 名学 号专 业指导教师机电与控制工程学院 年 月 日任 务 书一、课题名称超声波液位检测仪的设计与制作二、设计内容及要求1、以单片机为核心,设计一个液位检测系统2、测量数据由液晶显示3、系统要有一定的可靠性和一定的测量精度目 录1、绪论 12、方案论证 23、方案说明 44、硬件方案设计 85、软件方案设计 126、调试 227、技术小结 238、参考文献 241、 绪论随着各行业的快速发展,液位测量已应用到越来越多的领域,不仅用于各种容器、管道内液体液位的测量,还用于水渠、水库、江河、湖海水位的测量。这些领域使用传统的液位测量手段已
2、经无法满足对其精确性的要求,所以超声波液位测量这种新的测量方向已经成为一种新的手段被广泛的应用。在目前市场上,按测量液位的感应元件与被测液体是否接触,液位仪表可以分为接触型和非接触型两大类。接触型液位测量主要有:人工检尺法、浮子测量装置、伺服式液位计、电容式液位计以及磁致伸缩液位计等。它们的共同点是测量的感应元件与被测液体接触,即都存在着与被测液体相接触的测量部件且多数带有可动部件。因此存在一定的磨损且容易被液体沾污或粘住,尤其是杆式结构装置,还需有较大的安装空间,不方便安装和检修。非接触型液位测量主要有微波雷达液位计、射线液位计以及激光液位计等。顾名思义,这类测量仪表的共同特点是测量的感应元
3、件与被测液体不接触。因此测量部件不受被测介质影响,也不影响被测介质,因而其适用范围较为广泛,可用于接触型测量仪表不能满足的特殊场合,如粘度高、腐蚀性强、污染性强、易结晶的介质。超声波液位测量计就属于非接触型液位测量的一种,所以它也有不受被测介质影响,不影响被测介质,能适应粘度高、腐蚀性强、污染性强、易结晶、高温、高压、低温、低压、有辐射性、毒性、易挥发易爆等特殊介质的测量的特点,能适应的范围比其它的测量手段更广泛。本次课程设计,将对超声波液位检测系统进行介绍。2、方案论证液位计量仪表早期大多采用机械原理,但近年来随着电子技术的应用,逐步向机电一体化发展,并且发展了许多新的测量原理。在传统原理中
4、也渗透了电子技术及微机技术,结构有了很大的改善、功能有了很大的提高。尤其是近二十年来,随着微处理器的引入,测量仪表更是发生了革命性的变化。液位计的量程从几米到几十米,测量精度亦大大提高。根据液位测量所涉及的液体存储容器、被测介质以及工艺过程的不同,液位计类型的选用也不同。在进行液位测量前,必须充分了解液位测量的工艺特点,以此作为液位计设计过程中的参考因素。因此,可根据系统的工作原理的不同,设计出三种不同的液位检测方法。方法一:根据连通器原理,可以直接用与被测容器连通的玻璃管或玻璃板来显示容器中的液位高度,他是最原始但仍应用较多的一种液位测量仪表,另外,利用侵入式刻度钢皮尺直接测量液面高度的人工
5、检尺法也是应用较广泛的液位计量方法,尤其是在大型油罐储油量中,也可把它用作现场检验其他测量仪表的参考手段。其精度一般为2mm的人为误差。方法二:根据悬浮物测量液位。利用浮子的比重比所测液体的比重稍小的特点,使浮子漂在液面上并随液面的升高或下降来反应液位,他也是一种应用最早并且应用范围很广的液位测量仪表;将浮子用一条多孔钢带连接至一个恒转矩装置或平衡锤上,由浮子的重量带动多于L钢带通过齿轮装置推动机械计算器作现场显示,还可连接电动变送器作现场显示,还可连接电动变送器,获得远距离显示。方法三:利用超声波对容器液位进行检测。超声波液位仪是非接触测量中发展最快的一种。该技术基于超声波在空气中的传播速度
6、及遇到被测物体表面产生反射的原理。可实现非接触测量、测量范围宽、并且测量不受介质密度、介电常数、导电性等的影响。对比以上三种方法,方法一,虽然具有测量简单、直观、成本低的优点,但测量量程有限,并且不适于恶劣环境的测量,特别是在对粘稠性较高的液体进行液位检测时,就很容易出现问题。粘性液体黏在管壁内侧,容易引起读数错误;方法二,由于滑轮机械装置的摩擦力和冒带重量,测量误差较大,且当使用时间较长时,由于滑轮机械的磨损,致使测量误差越来越大;方法三,可实现非接触测量,测量范围宽,且不受测量液体的影响,也不影响被测液体,是一种较为安全、测量精度较高的测量方法,因此它的实用性也是最广的。综上所叙,在此我们
7、选择第三种方案,即利用超声波对容器液位进行检测。3、方案说明3.1超声波的介绍简单来说,超声波就是超过人耳能听到的物体振动的声音的频率范围的声波就叫超声波。一般来说是指声音超过了20000Hz以上的声波称之为超声波。与光波不同,声波是一种弹性机械波,即机械振动在弹性媒质中的传播。超声波有以下几个特点:1.频率高波长短定向好;2.振幅小加速度大能量集中功率高强度大;3.在不同介质界面上大部分能量反射。因而,超声波特别适合于距离测量。3.1.1超声波基本性质和其他声波一样,超声波可以在气体、液体及固体中传播,并有各自的传播速度。例如,在常温下空气中的声速约为334m/s,在水中的声速约为1440m
8、/s,而在钢铁中约为5000m/s。其在空气中的传播速度主要与空气的压力和温度有关正常条件下由于大气压力变化很小因此其传播速度主要考虑温度的影响在空气中传播速度为 C=331.3+0.606T(m/s)其中C为超声波声速,T为传播介质的温度。因此只要温度已知,就能算出超声波的速度。为了简单起见,我们直接取其速度为340m/s。在空气中, 声波在介质中传播时会被吸收而衰减,气体吸收最强而衰减最大,液体其次,固体吸收最小而衰减最小。因此,对于一给定强度的声波,在气体中传播的距离会明显比在液体和固体中传播的距离短。另外,声波在介质中传播时衰减的程度还与声波的频率有关,频率越高,声波的衰减也越大,因此
9、,超声波比其他声波在传播时的衰减更明显。因此考虑到实际工程的需要,在设计超声波液位计时,选用频率等于40kHz的超声波,波长为0.85cm。3.2超声波液位检测原理超声波液位测量法是70年代发展起来的一种新型液位测量方法,该方法利用了超声波在相同的介质中传播速度不变的原理。超声波是机械波的一种,其最明显的一个特征是方向性好,能够定向传播,当碰到障碍物时能够反射回来。超声波测量方法有很多,如脉冲回波法、共振法、频差法以及声衰减法等,其中应用最广泛的是超声波脉冲回波法。超声波的测距原理是通过发射声波传感器由脉冲信号激励发出超声波,通过传声媒介传到被测液面,形成反射波,反射波再通过传声介质返回到接收
10、传感器,传感器把声信号转换成电信号,由仪表计算出超声波从发射到接收所传播的时间,再根据超声波在介质中传播的速度计算出来回的直线路径的长度,从而得到所测距离的长度。如图2-1超声波夜位检测仪示意图所示。图3-2 超声波夜位检测仪示意图该系统中是通过超声波脉冲传播的时间来确定液位,所以必须己知超声波在传声媒质中声速。然而,对于气体介质式和液体介质式超声波液位计,声速会随媒质的组成、温度、压强的变化而变化。因此,只有当测试条件比较理想,媒质的成分、温度、压强等没有很大变化,才可把传声媒质的声速近似看成不变,直接由测量的声波传播时间来确定液位,否则就应该对传声媒质的声速进行校正。在这个系统中,运用的是
11、超声波往返时间检测法进行距离的测量的。即,检测从超声波发射器发出超声波的时候算起,通过介质的传播在反射回来的到接收器的时间,叫往返时间。用往返时间与介质中超声波的速度相乘,就可以得到超声波运动的距离,然而实际的距离为所得到距离的一半,如果测量高度为h、超声波在介质里的传播速度为v,传播时间为t,可以得到: 这个公式使用于自发自收单感应器方式,探头采用垂直的方式发射超声波,然后再让超声波原路返回到探头。如果采用一发一收双感应器方式,那么探头就不在采用垂直于介质面发射的方式,因此用上面的公式计算的出来就不在是真实高度,而是超声波经过的路程。这就需要加入角,角为竖直方向与超声波方向的夹角。如图3-3
12、角示意图,图3-3 角示意图因此,系统要把测得超声波经过的距离换算成真实的高度。如果超声波经过的距离为L,要测量的真实高度为h,那么超声波经过的距离与真实高度之间有这样的关系:这时h为要测量的真实高度。在公式中,为超声波的入射角。如果实际情况无法测得角时,还可以通过测得两个探头之间的距离m来得到需要测量的高度,即 来计算。3.3测量盲区由于发射声脉冲自身有一定的宽度,加上放大器有阻塞问题,在靠近发射脉冲一段时间范围内,所要求发现的缺陷往往不能被发现,这段距离,称为盲区。用脉冲回波测量距离时,液面与超声波探头间的距离既不能太远也不能太近,存在着近限和远限。距离过远时,接收到的信号太弱,以致无法从
13、噪声信号中分辨出来,这是远限所以存在的原因。在距离过近时,接收信号将落进盲区中而无法分辨,这是近限所以存在的原因。超声波液位仪在使用一个探头情况下,同时发射和接收超声波,由于在探头上施加的发射电压强达几十伏甚至上百伏以上,虽然发射信号只维持一个极短的时间,但停止施加发射信号后,探头上还存在一定的余振,因此在一段较长时间内,加载接收放大器输入端的发射信号幅值仍是相当强的,可以达到限幅电路,引起探头振动,不能进行正确的测量,在这种情况下,选用两个探头分别用于发送和接收。双探头方式,不仅可以增加探测距离,还可以减小盲区。由于发射探头上并不直接施加发射电压,所以,从理论上说,可以没有盲区。但是,由于接
14、收电路多少会受到发射电路的感应,并且发射探头所发出的超声波可能有部分直接绕道接收探头,因此实际上仍存在一定的盲区,不过他要比单探头方式的盲区小很多。所以,在本设计中,选取了双探头的工作方式,减小盲区,同时提高检测的距离。4.硬件方案设计本文所设计的超声波液位检测仪主要由51单片机的最小系统电路、超声波发射和接收电路以及液晶显示部分组成。其总体的系统设计框图如下:41单片机最小系统最小系统是指能维护单片机运行的最简单配置系统。它主要包括晶体震荡电路、复位电路,其图如下:4.2超声波发射和接收电路超声波发生器内部结构有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频
15、率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。本次课程设计采用的超声波测距模块集发射和接收为一体,内部超声波发生器谐振频率40kHz,模块工作电压为4.5-5V。4.3液晶显示部分4.4总原理图5、软件方案设计程序代码:#include /包括一个52标准内核的头文件#include /包含_nop_()函数定义的头文件#define uchar unsigned char /定义一下方便使用#define uint unsigned int/#define ul
16、ong unsigned longsbit Tx = P33; /产生脉冲引脚sbit Rx = P32; /回波引脚sbit RS=P24; /寄存器选择位,将RS位定义为P2.0引脚sbit RW=P25; /读写选择位,将RW位定义为P2.1引脚sbit E=P26; /使能信号位,将E位定义为P2.2引脚sbit BF=P07; /忙碌标志位,将BF位定义为P0.7引脚unsigned char code string = CHAO SHENG BO; /unsigned char code string1 =QUICK STUDY MCU;unsigned char code dig
17、it =0123456789; /定义字符数组显示数字/uchar code SEG710=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/数码管0-9uint distance4; /测距接收缓冲区uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; /自定义寄存器bit succeed_flag; /测量成功标志/*函数声明void conversion(uint temp_data);void delay_20us();void pai_xu();/*函数功能:延时1ms(3j+2)*i=(3
18、33+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delay(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); /*函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*/ unsigned char BusyTest(void) bit result;RS=0; /根据规定,RS为低
19、电平,RW为高电平时,可以读状态 RW=1; E=1; /E=1,才允许读写 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 result=BF; /将忙碌标志电平赋给result E=0; /将E恢复低电平 return result; /*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*/void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就等待 RS=0; /根据规定,RS和R/W同时为低电平时,可以写入
20、指令 RW=0; E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置0 _nop_(); _nop_(); /空操作两个机器周期,给硬件反应时间 P0=dictate; /将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:指定字符显示的实际
21、地址入口参数:x*/ void WriteAddress(unsigned char x) WriteInstruction(x|0x80); /显示位置的确定方法规定为80H+地址码x /*函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)*/ void WriteData(unsigned char y) while(BusyTest()=1); RS=1; /RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置0 P0=y; /将数据送入P0口,即将数
22、据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:对LCD的显示模式进行初始化设置*/void LcdInitiate(void) delay(15); /延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x38); /显示模式设置:162显示,57点阵,8位数据接口de
23、lay(5); /延时5ms,给硬件一点反应时间 WriteInstruction(0x38);delay(5);WriteInstruction(0x38); /连续三次,确保初始化成功delay(5);WriteInstruction(0x0c); /显示模式设置:显示开,无光标,光标不闪烁delay(5); WriteInstruction(0x06); /显示模式设置:光标右移,字符不移delay(5);WriteInstruction(0x01); /清屏幕指令,将以前的显示内容清除delay(5); void main(void) / 主程序 uint distance_data,
24、a,b; uchar CONT_1; uchar k; /定义变量i指向字符串数组元素 LcdInitiate(); /调用LCD初始化函数 delay(10); /延时10ms,给硬件一点反应时间 WriteAddress(0x01); / 从第1行第3列开始显示 k = 0; /指向字符数组的第1个元素 while(stringk != 0)WriteData(stringk);k+; /指向下字符数组一个元素 i=0; flag=0;Tx=0; /首先拉低脉冲输入引脚TMOD=0x10; /定时器0,定时器1,16位工作方式/TR0=1; /启动定时器0 IT0=0; /由高电平变低电平
25、,触发外部中断/ET0=1; /打开定时器0中断EX0=0; /关闭外部中断EA=1; /打开总中断0 while(1) /程序循环 WriteAddress(0x41); / 从第2行第6列开始显示 WriteData(J); /将万位数字的字符常量写入LCD WriteData(U); /将万位数字的字符常量写入LCD WriteData(L); /将万位数字的字符常量写入LCD WriteData(I); /将万位数字的字符常量写入LCD WriteData(:); /将万位数字的字符常量写入LCD WriteData(digitbai); /将万位数字的字符常量写入LCD WriteD
26、ata(digitshi); /将千位数字的字符常量写入LCD WriteData(.); /将万位数字的字符常量写入LCD WriteData(digitge); /将百位数字的字符常量写入LCD WriteData( ); /将百位数字的字符常量写入LCD WriteData(C); /将万位数字的字符常量写入LCD WriteData(M); /将万位数字的字符常量写入LCD EA=0; Tx=1; delay_20us(); Tx=0; /产生一个20us的脉冲,在Tx引脚 while(Rx=0); /等待Rx回波引脚变高电平 succeed_flag=0; /清测量成功标志 EX0=
27、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=3) CONT_1=0; b=a; conversion(b); i=0; /*/外部中断0,用做判断回波电平INTO_() interrupt 0 / 外部中断是0号 outco
28、meH =TH1; /取出定时器的值 outcomeL =TL1; /取出定时器的值 succeed_flag=1; /至成功测量的标志 EX0=0; /关闭外部中断 /*/定时器0中断,用做显示timer0() interrupt 1 / 定时器0中断是1号 TH0=0xfd; /写入定时器0初始值 TL0=0x77; /显示数据转换程序void conversion(uint temp_data) uchar ge_data,shi_data,bai_data ; bai_data=temp_data/100 ; temp_data=temp_data%100; /取余运算 shi_dat
29、a=temp_data/10 ; temp_data=temp_data%10; /取余运算 ge_data=temp_data; /bai_data=SEG7bai_data; /shi_data=SEG7shi_data&0x7f; /ge_data =SEG7ge_data; EA=0; bai = bai_data; shi = shi_data; ge = ge_data ; EA=1; /*void delay_20us() uchar bt ; for(bt=0;btdistance1) t=distance0;distance0=distance1;distance1=t; i
30、f(distance0distance2) t=distance2;distance2=distance0;distance0=t; if(distance1distance2) t=distance1;distance1=distance2;distance2=t; 6、调试超声波液位仪安装时,应保持超声波发射和接收的两个探头处于水平状态,并且要使探头位置始终位于液面之上,防止液面淹没探头。以至使超声波发射和接收模块短路,因此其安装位置十分重要。 硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应
31、不同距离的测量需要。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。 由于受环境温度、湿度的影响, 超声传感器的测量值与实际值总有一些偏差, 表1 列出了本超声测距系统测量值与对应的实际值:表1 超声测距系统测量值与实际值单位实际值56789101112测量值5.06.17.18.39.410.811.713.2经过多次测量得出,该液位仪在一定的测量范围内测量误差较小,此范围约为4cm-8cm,当在该范围之外测量时,误差较大,因此要根据实际容器来调整程序,以求达到最小误差。误差分析:1.超声波的传播速度随温度的变化而变化2软件执行以及硬件反应都需要
32、占用一定时间而使得测量的数据偏大3.探头安装不平,致使测量距离偏大4.测量时产生的读数误差7.设计总结在本次设计中,我们广泛借鉴了各种设计的优点,充分考虑了整个设计中的各个环节。包括产生40KHz的方波,在接收电路中,对所接收方波进行滤波、放大、整形等步骤。但由于条件和技术所限,对于很多以上所分析的在发射和接收过程中所产生的误差没有得到有效的校正。比如温度误差、硬件电路误差等。在我们为期一个学期的设计中,我们用到了以前学到的很多知识,比如电工、单片机、和汇编语言等。这使我们意识到,任何一件产品的产生,都不是单一知识所能实现的。而且在电路的设计和程序的编制过程中,出现了很多意想不到的错误,让我们
33、措手不及,有些甚至是一些非常低级的错误,但是这些错误也同样让我们获益非浅,它使我们意识到,研究是一个非常严肃的过程,来不得半点马虎。必须有一个严谨的态度,加上100的努力才有可能获得成功的喜悦。总之,在本课题的设计过程中尽管走了很多的弯路,但是还是学到了不少知识,从中受益匪浅。了解了超声波传感器的原理,学会了各种放大电路的分析、设计,也掌握了单片机的开发过程中所用到的开发方法和工具。动手能力与自学能力得到了锻炼与提高,对待事物的态度也发生了变化。理论总是离不开实践的,设计制作过程中,盲目地追寻理论知识根本不足以解决任何问题,一味的死研究课本是不会真正掌握单片机的。只有真正动手去做才能发现问题,
34、解决问题,提高能力。8.参考文献1 李荣正等. PIC单片机原理及应用 M.北京:北京航天航空大学出版社,2005:34-42.2 李学海. PIC单片机实用教程基础篇 M. 北京:北京航天航空大学出版社,2006:14-22.3 阮成功,蓝兆辉,陈硕.基于单片机的超声波液位仪系统 M. 北京:高等教育出版社,2004:22-24.4 李丽霞.单片机在超声波液位仪中的应用 M. 北京:北京航天航空大学出版社,2002:7-9.5 姜道连,宁延一,袁世良.用AT89C2051设计超声波液位仪 J.国外电子元器件,2000,21(5):122-134.6 杜洪君.超声波液位仪仪电路及程序设计 M. 北京:北方工业大学,2001:172-179.7 蔡美琴. MCS-51系列单片机系统及其应用 M. 北京:高等教育出版社, 1999:72-79.8 杨元,高勇,李福德.提高超声波检测系统信噪比的理论研究及检测控制方案 J.计量学报,2001,22(7):317-319.9 卢文课,朱长纯,刘君华.超声波式数字测距仪的研究 M.北京:仪器仪表学报,2003:218-220.10 潘宗预,潘登.超声波液位仪精度的探