当前位置:文档之家› 单片机控制的水箱液位检测装置

单片机控制的水箱液位检测装置

题目:单片机控制的水箱液位检测装置

单片机控制的水箱液位检测装置

摘要

本设计是由单片机控制的水箱液位检测装置,可以对水箱液位进行检测与显示。本文介绍了8051单片机、MPX10DP差压传感器、模数转换芯片ADC0804的整体功能,并且完成了硬件电路的设计。硬件部分利用差压传感器MPX10DP对被测水箱中的液位信息进行采集,将采集到的压力信号转换成微弱的电压信号,再对此电压信号进行调零、放大处理后送入模数转换模块ADC0804进行信号转换,将转换后得到的数字信号送入8051单片机进行数据处理,由单片机把处理完成的数据送到数码管中进行显示,这样就完成了对水箱的液位检测。

本设计中的液位检测装置达到了设计要求,可以对水箱液位进行检测。利用本设计方法构成的检测装置性能稳定并且操作方便,克服了传统人工水位检测耗时耗力、检测结果误差大的缺点,满足现代工业对液位检测的要求,可以广泛应用在民用或工业中。

关键词:MPX10DP;8051;ADC0804;液位检测

Single-chip Microcomputer Control of Tank Liquid Level Detection

Device

ABSTRACT

This design is a tank liquid level detection device controlled by single-chip microcomputer. This design can detect and display the water tank liquid level.8051 single-chip microcomputer plays an important role in this paper,including MPX10DP pressure difference transducer,and ADC0804 chip, in addition,this paper completed the design of hardware circuit as well.Hardware part make use of MPX10DP to gather liquid level information of the water tank under test,and then convert this pressure signal into voltage signal.After putting the voltage signal into zero and amplify,log on this signal into ADC0804 to have a transform.Finally, 8051 single-chip microcomputer deal with the figure signal and then put it into nixie tube to display data analysis.This system completes the water tank liquid level detection.

This design of water tank liquid level detection device reached the design requires,can carry out on tank liquid level.A device using this method to detect tank liquid level not only have a stable performance but also easy to use,it has overcomed traditional manual water level detection time-consuming and the accuracy of the results.Device like this satisfies modern industry requires and can be widely used in civil or industrial.

Keywords: MPX10DP;8051;ADC0804;Liquid level detection

目录

1 引言 (1)

1.1 水位检测系统的发展状况 (1)

1.2 本课题主要研究内容及方法 (1)

2 系统硬件设计 (2)

2.1 系统硬件功能整体概述 (2)

2.2 核心芯片选择 (2)

2.2.1 8051单片机 (2)

2.2.2 差压传感器MPX10DP (3)

2.2.3 A/D转换芯片ADC0804 (4)

2.3 信号检测与放大电路设计 (5)

2.4 A/D转换电路 (6)

2.5 显示电路的设计 (8)

2.6 单片机外围电路设计 (8)

2.6.1 单片机的复位电路 (9)

2.6.2 单片机的时钟电路 (9)

2.7 +5V稳压电源的设计 (10)

3 系统软件设计 (11)

3.1 软件功能概述 (11)

3.2 主程序设计 (11)

3.3 延时程序设计 (13)

3.4 显示程序设计 (13)

3.5 中断程序设计 (14)

4 结论 (16)

参考文献 (17)

致谢 (18)

附录 (19)

1 引言

1.1 水位检测系统的发展状况

在人类的生活环境中,液位检测贯彻在生产与生活的始终。现代液位检测技术飞速发展,在工业领域中有着举足轻重的地位,尤其是在类似石油化工行业中。现代液位检测系统的发展基于电子技术、传感技术、以及计算机技术在当今社会中的快速发展。传统的水位监测控制是人为控制。这样的控制方式不仅耗费人力物力,并且工作效率和测量值的准确度较低,无法适应现代水位监测的需求。而单片机液位检测系统控制精度高,性能稳定可靠,人为操作方便并且造价低,把单片机的这些特点应用到液位检测系统中可以加强人机交互能力,使系统的可靠性得到提高[1]。

本设计采用差压传感器MPX10DP在不同液位下检测到的压力信号不同这一特点,将压力信号进一步转化为电压信号,经由调零放大、A/D转换等步骤,送入单片机进行处理,对水位检测进行高精度的自动化控制,避免了在现场进行人工的检测操作。这样不仅使人们更容易获得液位信息,并且控制方便,系统稳定性能好。单片机不仅有体积小、安装方便、功能较齐全等优点,而且有很高的性价比,同时还可以在单片机控制系统中加入数字显示模块,使得系统具有很强的可视性,更加适用于在工业生产中的应用[1]。另外,单片机的应用有助于发现可能存在的故障,通过微机实现液位检测系统的自动控制与调节,保证设备工作在安全经济的运行状态。本文是采用8051单片机为核心芯片的水箱液位检测装置,在实际的生产中得到了广泛的应用。

1.2 本课题主要研究内容及方法

本设计以8051单片机为核心芯片,并且利用其与相关硬件的连接来实现水位的检测控制系统。在用差压传感器MPX10DP测量液位的基础上,使 CPU循环检测传感器的输出状态,并用七段LED数码管显示出液位值。另外,还可以利用此基本原理对水箱的液位进行控制。通过输入给定值,将所测得的数据与给定值进行比较,进而根据比较结果控制水箱的进出水操作。还可以装设报警装置,在水箱中的液位过高或过低时实现自动报警,进而实现对液位的自动控制。

经过对本课题的反复研究以及对相关资料的分析,在对液位检测技术以及液位检测系统现状综合认识的基础上,决定采用8051作为核心处理器来完成设计。本设计主要完成以下工作:

⑴基于8051的液位检测设计方案。

⑵差压传感器的压力检测与转换。

⑶对微弱电压信号的放大,以及对电路的调理。

⑷A/D转换芯片、显示芯片与单片机的接口电路设计。

⑸软件设计,完成对主要程序模块的设计。

1

2 系统硬件设计

2.1 系统硬件功能整体概述

本系统主要实现对水箱液位的检测与显示。主要依据硬件与软件的相互协调工作来完成系统功能。其中,硬件部分对传感器信号进行采集与处理,并且在数码管中显示液位信息;软件部分支撑硬件,对采集的液位信息进行处理及显示。本系统最终拟定以8051作为核心控制芯片,主要利用压差传感器、ADC0804转换芯片和七段数码管来实现对水箱液位的检测和显示。采用压敏元件成X型的差压传感器将水箱液位的压力信号转换为微弱的电压信号,经过放大、调零处理后由8位逐次逼近型A/D转换器件ADC0804对该电压信号进行模数转换,进而可以把转换结果,即水箱液位信息传送到单片机8051芯片中进行数据处理。经由单片机转换过的数据再进一步传送到七段数码管中进行液位值的显示。系统框图如图2-1所示。

图2-1 系统框图

2.2 核心芯片选择

2.2.1 8051单片机

单片机是一个单芯片的微型计算机。单片机的优势在于实时控制能力强,并且可靠性高。本系统中采用的8051单片机就是由CPU系统部分,存储器系统部分以及I/O口和其他功能单元部分组成的[2]。

⑴8051的主要特性

·与MCS-51 兼容

·4K字节可编程闪烁存储器

·寿命:1000写/擦循环

·数据保留时间:10年

·全静态工作:0Hz-24MHz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

⑵8051引脚如图2-2所示。

图2-2 8051引脚图

①电源及时钟引脚

·Vcc:电源接入引脚

·Vss:接地引脚

·XTAL1:晶体振荡器接入引脚,在采用外部振荡器时,该引脚接地。

·XTAL2:与XTAL2同为晶体振荡器接入引脚,不同的是当采用外部振荡器时,该引脚作为外部振荡信号的接入引脚。

②控制线引脚

·RST/VPD:复位信号输入引脚/备用电源输入引脚

·PROG/ALE:编程脉冲输入引脚/地址锁存允许信号输出引脚

·EA/VPP:内外存储器选择引脚/片内EPROM编程电压输入引脚

·PSEN:外部程序存储器选通信号输出引脚

③并行I/O引脚

·P0口:一般I/O口引脚或数据/低位地址总线复用引脚

·P1口:一般I/O口引脚

·P2口:一般I/O口引脚或高位地址总线引脚

·P3口:一般I/O口引脚或第二功能引脚

2.2.2 差压传感器MPX10DP

差压传感器在本设计中起到了对信号进行采集的作用。它将水箱液位中的压力信息在器件内部利用某种特定的规律转为电压信号,便于信号的测量与处理。本设计中采用的MPX10DP传感器是双端口差压无补偿硅压阻式传感器[3]。与传统的硅压阻式传感器不同的地方在于:硅压阻式传感器采用惠斯登电桥,容易引起测量误差,不好进行调整;而MPX10DP采用的不是电桥结构,是一个独立的X型电阻元件,可以很好地克服传统硅压阻式传感器的缺点,并且线性度好,能够很好的应用到系统中[10]。MPX10DP在25℃时的工作参数如表2-1所示。

表2-1 MPX10DP工作参数表

2.2.3 A/D转换芯片ADC0804

A/D转换芯片的主要任务是进行模数转换,就是把模拟信号转换成为数字信号。其中,A/D转换芯片主要有积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型[4]。该系统中选用逐次逼近型的ADC0804芯片。ADC0804引脚如图2-3所示。

图2-3 ADC0804引脚图

ADC0804的分辨率为8位, 总误差为±1LSB,转换时间100μs , 单一电源5VDC, 基准电压5V或2.5V,也可接可调模拟电压。

·CS:片选信号。低电平有效,高电平时芯片不工作。

·RD:外部读数据控制信号。此信号低电平时ADC0804把转换完成的数据加载到DB 口。

·WR:外部写数据控制信号。此信号的上升沿可以启动ADC0804的A/D转换过程。

·CLK IN:时钟输入引脚。ADC0804使用RC振荡器作为A/D时钟,CLK IN是振动的输入端。

·转换结束输出信号。ADC0804完成一次A/D转换后,此引脚输出一个低脉冲。对单片机可以称为中断触发信号。

·Vin(+):输入信号电压的正极。

·Vin(-):输入信号电压的负极。可以连接到电源地。

·AGND:模拟电源的地线。

·Vref/2:参考电源输入端。参考电源取输入信号电压的二分之一。例如输入信号电压是0V~5V时,参考电源取2.5V;输入信号电压是0V~4V时,参考电源取2.0V。

·DGND:数字电源的地线。

·DB7~DB0:数字信号输出口,连接单片机的数据总线。

·CLK R:时钟输入端。

·VCC:5V电源引脚。

2.3 信号检测与放大电路设计

本设计中所用的MPX10DP差压传感器的输出为微弱的电压或电流信号,输出的电压信号是毫伏级的。显然这样的信号不能直接被单片机接收,必须经过放大电路进行信号放大,然后再经过A/D转换才能输入到单片机中。

在设计信号放大电路时,首先要考虑到的一个问题就是压力传感器存在零位输出,即

在液位为零时,传感器输出电压一般不为零,而为一个电压信号。为了得到准确的液位值,必须对信号进行处理。为了消除这部分的影响,可以采用软件调零和硬件调零两种方法。

本设计采用的是硬件调零,在电路设计上采用高输入电阻的差分比例运算放大电路。如图2-4所示。

由表2-1可知,对于MPX10DP型传感器,其灵敏度为3.5mv/kpa,再根据P=ρgh(ρ是水的密度1.0×103㎏/m3,g是重力加速度9.8N/kg ,h 是液位高度,单位是米)计算可知,被测水箱液位每增加1cm传感器的输出电压增加0.35mv。而ADC0804是八位A/D 转换器,即每输入约19.6mv(5v/255)模拟量,转换后数字量加1(十进制)。所以要使被测水箱液位每增加1cm,通过A/D转换数字量增加1,就需要使用放大电路实现信号放大。如图2-4中所示的用两级电路实现差分比例运算。

图2-4 信号检测与放大电路

在图2-4中,第一级为同相比例电路,其前部分为调零电路[5],该部分的电压输出做

为第一级电路的同相输入端输入,经放大器OPA1输出电压为U

01 =(1+R5/R4) U

I1

。第二级

电路为差分电路,利用叠加原理,输出电压为U

0=(-R7/R6)U

01

+(1+R7/R6)U

I2

,当R4=R7,R5=R6

时,输出电压为U

0=(1+R7/R6)(U

I2

-U

I1

) (其中 U

I1

和U

I2

分别为两级放大器的同相输入端

输入,U

I2为传感器所采集的电压信号)。从电路的组成可以看出,无论对于U

I2

还是U

I1

可认为输入电阻为无穷大,本次设计取R3=R5=R6=R8=10K,R4=R7=550K,此电路的放大倍数为:R7/R6=550/10=55。

根据性能指标,知道MPX10DP型压力传感器的零位输出典型值为20mV,最大值是35mV.用两个电阻和一个滑动变阻器对+5V电压进行分压,以得到20mV~35mV电压,作为零位输

MPX10DP

出补偿,接入端U

I1电压范围为:5R2/(R0+R1+R2)< U

I1

<5(R1+R2)/(R0+R1+R2),据该计算

式就可以得到期望的补偿电压值。必须说明一点,R0和R2应该选择合适的阻值,使得滑动端滑动时所得电压在20mV~35mV范围内变化,通过计算取R2=15Ω,R1=35Ω,R0=4950Ω,便于调零操作。

2.4 A/D转换电路

微型计算机处理的数据只能是数字量,所以数据在进入计算机之前,必须经过A/D转换器把模拟量转换成数字量[6]。本设计中的A/D转换电路如图2-5所示。

图2-5 A/D转换电路

⑴把8051的P0口作为双向的通用I/O口与ADC0804的数字信号输出口的DB口相连,此时单片机中的P0口用作接口电路的数据总线。这一系列连线的目的是把经过A/D转换的数据输入到单片机中,并且存放到累加器中。

⑵ADC0804的片选信号/CS与8051的P2.0口相连,有地址选中的作用。在CS处于低电平时,ADC0804芯片工作。

⑶ADC0804的外部读控制信号/RD与8051的/RD连接。这里单片机中的/RD引脚作为8051中P3.7口的第二功能使用:片外数据存储器“读”选通控制信号。当CS=0,RD=0

时,读出A/D转换结果。

⑷ADC0804的外部写数据控制信号/WR与8051的/WR相连接。这里单片机的/WR引脚功能与/RD类似,应用了单片机中P3口的第二引脚功能。这里P3.6口作为片外数据存储器“写”选通控制信号。即当CS=0,WR=0时,启动A/D转换。

⑸ADC0804的转换结束输出信号/INTR与8051中的外部中断/INT0连接。在ADC0804进行完一次A/D转换时,INTR就会输出一个低电平信号到8051的INT0即外部中断0引脚,INT0随即对单片机提出中断申请。

⑹对ADC0804本身来说,两个时钟信号CLK R与CLK IN之间利用串联电容与电阻的手段构成RC振荡电路,作为A/D转换进行的时钟信号。另外,数字电源与模拟电源的接地线分别接地。Vin(+)与Vin(-)作为输入信号的正极连接到放大电路的输出信号端,负极接地。

2.5 显示电路的设计

这部分设计主要完成的功能是通过数码管显示当前检测值,本设计采用共阳极七段数码管作为显示器件。

图2-6 显示电路

⑴8051的P1.0~P1.7口作为通用的8位双向I/O端口通过与74LS273中D1~D8口

的分别连接向74LS273中输入数据,再由74LS273中的Q1~Q8与各显示器的数据总线连接,从而使得数据送进显示器。这些数据是单片机通过对ADC0804进行外部读指令得出初步液位信息,再经由单片机内部对数据进行处理与控制得到的。

⑵单片机的P3.0口和P3.1口分别与两个PNP三极管相连,在分别连接到数码管的位选通端。这样,就可以通过单片机对P3.0和P3.1口的控制来实现对数码管现实与关闭的选择。例如,在P3.0输出低电平时,T1截止,数码管DPY1不显示数据;在P3.0输出高电平时,T1导通,电源电压加到数码管DYP1上,DYP1则对数据进行相应的显示。

2.6 单片机外围电路的设计

要使单片机正常工作,只有其与主要硬件的连接电路是远远不够的,还要有外围电路的设计。在本系统中单片机的外围电路有:复位电路、时钟电路还有稳压电源电路。2.6.1 单片机的复位电路

不论是哪个系列的单片机,在实际应用的过程中都要考虑到复位电路的设计。一般的复位电路有两种:上电复位电路和上电和按键都有效的复位[4]。在本设计中,采用上电和按键都有效的复位电路。电路原理如图2-7所示。在上电的瞬间,RST获得高电平信号,电容C开始进行充电。在电容进行充电的过程中,RST的高电平信号逐渐降低,最终恢复到低电平状态。只要电容的充电过程时间超过两个机器周期,即对单片机进行复位工作;或者再按下复位键K的瞬间,RST随即获得高电平,到松开K,RST恢复低电平,亦可以实现对单片机的复位操作[7]。

RST

8051

图2-7 单片机的复位电路

2.6.2 单片机的时钟电路

单片机的时钟电路有内部自震荡电路和外部时钟电路两种。内部的自振荡电路是根据8051单片机内部反相放大器与石英晶体和两个电容构成的,XTAL1和XTAL2分别作为放大器的输入端与输出端,电容起到了快速起振和稳定频率的作用,如图2-8(a)所示。外部时钟电路是将外部的时钟脉冲与XTAL1相连,XTAL2悬空,如图2-8(b)所示。在本设计中,采用

外接石英晶体的方法,所用晶振频率为12MHz ,所选择电容为30pF [7]。

(a) (b)

图2-8 单片机的时钟电路

2.7 +5V 稳压电源的设计

在本设计中,为了使+5V 电源电压输出稳定,采用由变压器、桥式整流和压器三部分构成的稳压电路。其中稳压器使用了78M05三端稳压器,使220V 交流电转换成系统所需要的电压。利用变压器的降压功能将220V 交流电压降为8V 左右的交流电压,以方便为桥式整流电路提供电源。这样,经过整流电路的交流电就被转化为了脉动直流电[8]。这时脉动直流电压通过滤波电路,使其变为了平滑输出的直流电压。为了使电压稳定的输出,进而增加了稳压措施,即78M05稳压器。原理电路如图2-9所示。

图2-9 稳压电源电路设计

XTAL2

8051

XTAL1 GND

XTAL2

8051

XTAL1

GND

外部时钟信号

3 系统软件设计

3.1 软件功能概述

在完成了对系统硬件的设计后,就要求有一个功能完善并且稳定的软件来指导协调硬件的内部操作,对硬件起到指导作用,使硬件系统的作用发挥到最大化,同时还要考虑到未来硬件设计的更新升级等。系统软件有监控和执行的功能。在本设计中,系统软件设计主要分为主程序设计、延时程序设计、外部中断程序设计和显示程序设计等[9]。主程序完成各器件的初始化,并且调用各个相应的子程序模块设计;延时程序空使得单片机每隔一段时间对A/D转换采样一次并进行处理;显示程序即为把采集程序模块存储的数据送到相应数码管进行显示。

3.2 主程序设计

主程序首先要完成初始化工作,另外还要对信号进行采集、处理以及显示。流程图如图3-1所示。

⑴初始化程序

程序的初始化工作就是对硬件各个芯片的初始状态进行规定,由硬件电路的设计要求等进行系统的分配及定义。在本设计中,首先是对各寄存器进行清零工作,R2用于保存液位高度的十位数字,R3用于保存液位高度的个位数字。因为本设计采用动态显示,就要进行动态扫描,利用软件进行延时,十位和个位的显示都分别延时1ms,通过给寄存器R0和R1赋初值,进行记数减1,从而保证定时1秒后,重新启动A/D转换。本设计中的初始化程序定义如下。

MOV R2,#00H ;寄存器R2和R3清零,用于存放液位十位及个位

MOV R3,#00H

MOV R0,#0AH ;R0装入计数值

MOV R1,#32H ;R1装入计数值

SETB IT0 ;选择边沿触发方式

SETB EX0 ;允许外部中断

SETB EA ;开放总中断

⑵主程序部分

本设计拟采用1S的时间间隔进行重复采样工作以及A/D转换工作。当WR=0,CS=0时,ADC0804开始进行A/D转换,启动转换地址为FEH。当转换结束时,端变成低电平,随之8051的0

INT端变成低电平,向单片机提出中断申请。中断得到响应后,便进行存储器读操作,读出A/D转换结果,然后进入显示子程序,分时显示当前液位值的十位及个位数字[11]。设计程序如下所示。

MAIN:

MOV R2,#00H

MOV R3,#00H ;寄存器R2及R3清零MOV R0,#0AH ;R0装入计数值

MOV R1,#32H ;R1装入计数值

SETB IT0 ;选择边沿触发方式

SETB EX0 ;允许外部中断

SETB EA ;开放总中断

MOV DPTR,#0FEH ;建立A/D转换器地址指针MOV P0,#0FFH ;向P0口写1

MOVX @DPTR,A ;启动A/D转换

图3-1 主程序流程图

3.3 延时程序设计

延时程序主要是利用空执行来占用CPU的处理时间,使每隔1s读取一次液位信息,进行A/D转换,送入单片机处理并且送入数码管中进行显示。利用延时程序不仅可以监控系统中软件和硬件的协调以及正常的工作,并且因为液位的变化较为缓慢,基本可以实现对液位的即时测量。延时程序设计如下[9]。

DELAY: ;延时1ms子程序

MOV R7,#20

DE1: MOV R6,#50

DE2: DJNZ R6,DE2

DJNZ R7,DE1

RET

3.4 显示程序设计

显示子程序主要完成对水箱液位值的最终显示。本系统采用七段LED数码管显示,程序设计先对十位数进行显示,经过1ms的延时后个位显示,再经1ms的延时返回,流程图如图3-2所示。而对数码管位选信号的控制是通过查表法实现的。用指令MOVC A,@A+DPTR,由P1口输出段码。为保证数码管显示时间及使数码管能够充分点亮,每一位输出显示后要有一定的延时,通过调用延时子程序来实现。同时实现判断定时1秒是否到(即R0和R1是否都减至0),1秒到时则跳转至DONE子程序,重装初值,为下一次采样值的显示做准备,否则跳转至DISPLAY,继续显示液位值。显示程序的设计如下。

DISPLAY:

SETB P3.0 ;位选码为液位高度的十位数字

MOV DPTR,#TAB ;指向换码表首址

MOV A,R2

MOVC A,@A+DPTR ;取出显示码

MOV P1,A ;从P1口输出显示码

LCALL DELAY ;调用延时程序,延时1ms

SETB P3.1 ;位选码为液位高度的个位数字

MOV DPTR,#TAB ;指向换码表首址

MOV A,R3

MOVC A,@A+DPTR ;取出显示码

MOV P1,A ;从P1口输出显示码

LCALL DELAY ;延时1ms

DJNZ R0,DISPLAY ;判断R0是否减至0,未减至0则跳转至DISPLAY

DJNZ R1,DONE ;判断R1是否减至0,未减至0则跳转至DONE LJMP DISPLAY

图3-2 显示流程图

3.5 中断程序设计

当转换结束后,ADC0804的INTR引脚由高电平变为低电平,8051单片机的0

INT端与ADC0804的INTR端相连,随之8051的0

INT端变成低电平,向CPU提出中断申请,执行中

断服务子程序。CPU总中断关闭,压栈保存现场数据。读取A/D转换结果,通过指令 MOVX A,@DPTR实现。处理数据得出液位高度的十位及个位数字并分别保存到寄存器R2和R3中。恢复现场,开放CPU总中断,中断子程序返回。具体程序如下。

PUSH PSW

PUSH ACC

MOVX A,@DPTR

ATOD: MOV B,#0AH

DIV AB

MOV R2,A ;保存当前液位的十位数字

MOV R3,B ;保存当前液位的个位数字

POP ACC

POP PSW ;恢复现场

RETI ;中断返回

图3-3 外部中断0子程序

相关主题
文本预览
相关文档 最新文档