朱常荣,吕 宁,詹跃东
(1.昆明理工大学信息工程与自动化学院,云南 昆明 650504; 2.昆明理工大学计算中心,云南 昆明 650504;3.昆明理工大学信息工程与自动化学院,云南 昆明 650504)
随着计算机技术的飞速发展,单片机(single chip microcomputer;SCM)已广泛应用于智能仪表、工业控制、家用电器、电子玩具等各个领域[1]。许多工业控制系统、自然科学研究都需要监测水位。比如海洋环境的监测,它是获取长期、连续的海洋环境资料的唯一途径。沿海工程、港口建设、交通运输、海洋生物资源开发、海洋环境监测、湿地保护及近岸海洋开发为海洋研究、评估和运营提供了参考。
工业控制系统对水位的监测要求也很高。它可以在正常运行和启停过程中快速计算出机组的有效数据,并可以在显示器上显示当前水位值。单片机控制模块可以快速计算出机组在正常运行和启停过程中的有用数据,并能在显示器上显示运行的水位值。在生产领域中,实现水位自动检测和控制是工业过程控制的一项关键技术,对于提高工业过程控制的自动化水平有着重要的意义。在生活领域,供水方式过去是由人力控制的,容易造成水资源的浪费。如今人们越来越关注水资源问题。目前,水位控制系统应用广泛。水位控制可以有多种实现方法,如机械控制、逻辑电路控制、机电控制、传感器控制等。本文使用的是逻辑电路控制方法。
本设计通过单片机和无线发射模块来实现水箱液位无线监控[2]。该系统主要由单片机的最小系统电路、水位检测电路、水位显示电路、水泵驱动电路和软件设计组成。运用上位机软件界面控制下位机进水,时刻监视水位状态,保持水位处在健康状态。当水箱里的水位下降时,通过该程序,显示器可以实时显示水箱中的水位值。水位传感器采集来的水位信号经过下位机处理后,经由无线模块将水位信号传输给与上位机通信的下位机;通过串口通信的方式,水位传感器将采集到的液位信息经下位机处理之后发送给上位机;上位机接收到数据后根据接收到的数据进行分析判断,以确定当前液位是否达到液位阀值。当达到水位最高值时,蜂鸣器报警一声,同时停止水泵进水;当达到液位最低值时,蜂鸣器报警两声,同时控制水泵进水。系统还增加了无线通信模块,实现了数据的无线通信。这样不但可以做到远程传输数位信号,而且避免了连接导线带来的不便。系统结构如图1所示。
图1 系统结构图Fig.1 System structure diagram
1.2.1 单片机的设计
本设计使用STC12C5A60S2单片机。它是新一代8051单片机[3],具有高速/低功耗和超强抗干扰能力。速度是同一外部晶体振荡器下8051单片机的8~12倍。因此,本文设计选择使用速度更快的STC12C5A60S2单片机。
1.2.2 无线发射模块
本单元由单片机运算单元、水位信号采集模块和无线发射模块组成。无线发射模块安放在远处的水箱上。其主要作用是检测当前液位,将采集来的数据交由下位机主控制单元进行处理后发送给接收部分。
1.2.3 无线接收模块
本单元由单片机运算单元、LCD显示模块、LED指示灯模块、继电器控制模块、报警模块、MAX232和无线接收模块组成。该单元的主要任务是接收发射模块发送的水箱的水位信息,然后将水箱的信息显示在上位机上,并对水箱的信息进行判断分析。当水箱的水位低于设定值时,控制继电器闭合给水泵供电,水泵给水箱加水;当水箱水位达到设定值后,控制继电器断开,停止水泵加水。
1.2.4 信号发射接收模块电路的设计
本设计使用的收发模块是NRF905。NRF905由功率放大器、收发解调器、频率合成器、调制器和晶体振荡器组成。本设计运用的是挪威Nordic VLSI公司推出的单片射频收发器,32引脚QFN封装,工作电压为1.9~3.6 V,工作频率为433/868/915 MHz。
1.2.5 水位检测电路的设计
NRF905有两种操作模式:ShockBurstTM接收模式和ShockBurstTM发送模式。NRF905的工作模式由TX_EN,TRX_CE和PWR_UP三个引脚决定,如表1所示。
表1 工作模式Tab.1 Operating mode
注:0 为低电平;1为高电平;×为任意电平
本系统使用电接触方法收集液位信息。电接触式是依靠水的导电性来采集水位信号,通过液位淹没导线的个数来指示当前液位的高度。这种测量方法简单易行,在水中通过12 V电压即可实现。水位检测原理如图2所示。
图2 水位检测原理图Fig.2 Water level detection schematic
1.2.6 继电器控制模块电路的设计
继电器是一种电子控制装置,通常用于自动控制电路。其工作原理是使用小电流来控制大电流的开关[5]。因此,它在电路中起到安全保护、自动调节和转换电路的作用。电磁继电器通常由接触弹簧、电枢、线圈、铁芯等组成。当电流在两端流过线圈时,产生电磁效应,并且线圈将电枢吸引到铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会因弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。通过这样的吸合、释放,达到了在电路中的导通、切断的目的。在该设计中,单片机的I/O端口通过控制三极管的通断,来控制继电器的吸和和关断,从而控制电流的通断,以控制水泵。
1.2.7 报警模块的设计
报警电路非常简单,通过单片机I/O口驱动三极管;上电时,蜂鸣器报警一次,提示上电成功。当液位达到设定值的最低液位时,报警两次提示用户当前液位过低;当达到最高液位时,蜂鸣器报警一次。
1.2.8 电源模块设计
远程液位监控系统中并不是完全都采用平常所用的5 V电压供电。NRF905对供电要求为3.3 V,单片机要求最佳电压为5 V,但是在水位测量部分选用12 V电压进行供电,所以这里涉及到电压的转换。电源模块原理如图3所示。输入电压为12 V。12 V电压主要用于向水中添加电压并驱动泵。在通过LM7805之后,它变为5 V电压,用于为微控制单元供电。
图3 电源模块原理图Fig.3 Principle of power module
在总体测量程序中,上位机作为主导,提供给使用者可视化的液位变化。其具体的软件流程如图4所示。
系统使用异步通信[7]。为确保异步通信的正确性,在数据的的字符格式中加入了终止位和起始位,就是在数据正式的发送之前,首先发送起始字符表示数据将开始发送,当数据字符发送结束后再发一个停止位用来提示数据发送结束。当接收器检测到起始位和终止位时就知道这组数据是何时接收何时停止接收。正是由于这种方式,通信协议依赖于起始位和停止位来实现内部字符同步。因此,它有时被称为启动-停止协议。
图4 软件流程图Fig.4 Software flow chart
大多数微控制器通过RS-232信号线连接到主机[8]。通信程序通过软件握手完成通信过程。本文只采用了RS-232接口中的3根线,即 RXD、TXD、GND。 由于主机超出RS-232电平,但微控制器的电平为TTL电平。因此,当主机连接到微控制器时需要电平转换电路。采用MAX232芯片进行电平转换。接收数据通过电平转换电路连接到MCU的RXD端口,主机数据通过RXD端口连接到MCU的TXD端。串口通信示意图如图5所示。
图5 串口通信示意图Fig.5 Serial communication diagram
本设计以液位监控系统为背景,给出了单片机和C++ Builder环境下的通信程序实例。传输数据采用十六进制数据,计算机与单片机之间采用主从通信。 上位机的通信程序用作整个系统中的主机,并且仅作为系统数据命令发布和分析。 本设计使用C++ Builder作为主机的开发软件[9]。在C++ Builder中实现串行通信的方法有很多种。MSComm32.OCX需要注册,可以轻松创建串行通信应用程序。
本系统使用的单片机为STC12C5A60S2,振荡频率为12 MHz,主机接收的波特率为1 200 bit/s。在上位机和下位机通电后,完成串口初始化,微控制器初始化和上位机与下位机之间的无线模块初始化。当所有的功能模块初始化完成之后,下位机等待上位机发送指令;与此同时,下位机的信号将采集来的液位信号,通过无线模块发送到接收端的下位计算机,接收端的下位计算机将上行链路发送到上位计算机;上位计算机在接收到数据后,在接口上显示当前的液位。当下位机接收到主机发送的命令时,下位机需要做的第一项任务是检测当前命令是否为命令字。如果是命令字,下位机根据命令字进行相应操作;如果不是命令字,那么下位机处于等待接收状态。但是此过程并不影响当前液位信息的采集和传输。下位机通信流程如图6所示。
图6 下位机通信流程图Fig.6 Lower computer communication flow chart
在上位界面新建一个工程,工程建立完成会出现两层窗口,其中一层用于软件的编写,另外一层就是可视化的上位机界面[10]。
在standard中选择当前程序需要的图形,拖拉到TForm1中。此处的TForm1通过调整属性可以直接改变命名,然后调整形状大小。这类可视化界面的优点是,可以直观地显示当前液位高低,同时侧栏会显示出当前液位高低的具体值,可以更明确地展示液位的变化。除此之外,上位机界面给出了手动加水按钮。手动加水的功能是当液位没有达到预设的阀值水位时,可以手动加水使水箱保持健康的水量。在完全实现要求功能的同时,加入辅助功能,通过键入串口号来进行和下位机通信,设有发送包计数,接收包计数和正确包计数,以此反映当前接收是否出现异常情况。
下位机软件使用keil软件进行C语言编程,下位机主要涉及水位信息的采集、水位信息的发送部分和接收部分。软件写好之后先进行人工检查,不要立即刻录微控制器。首先,手动检查项目中的程序。由于C语言编程,可能会有一些语法错误,例如括号不匹配、缺少分号等,必须通过仔细检查,找到并消除这些错误。人工检查无误后,上机调试。编译时给出的语法错误信息。根据提示信息,找出程序中的错误并进行更改,并从上到下依次逐一纠正。应该注意的是,一些错误行并不是真正错误的行。当确认程序没有语法错误或逻辑错误时,可以通过直接下载到微控制器来调试。采用自下而上的调试方法,即每个模块单独调整,然后连接成一个完整的系统调试。将程序刻录到微控制单元后,观察每个组件的工作是否正常,以及该功能是否已实现。
在了解了远程液位监测系统的应用背景和发展现状后,本设计提出了基于STC12C5A60S2 微控制器的液位监测系统总体方案。STC12C5A60S2 单片机不仅控制简单、接口方便、实时性强,而且速度是8051单片机的8~12倍。选用了C++ Builder 作为上位机的开发软件,使用MSComm ActiveX 控件创建串行通信应用程序,并建立实时数据采集和处理系统,以便在传感器接收外部信号时转换、收集和显示信号。