沈 凯
(常州信息职业技术学院电子与电气工程学院 江苏常州 213164)
在水利、水库、油库、泵站、城市供水中,水位(闸位)是很重要的测量参数。但现有的水位计在使用过程中仍然存在系统不稳定、抗干扰能力差、精度低、现场更改程序麻烦等问题。随着微电子、计算机、网络和通讯技术的迅速发展,智能化仪表在自动检测和控制系统中以其高稳定性、高可靠性、高精度、易维护性等优点得到了广泛的应用[1]。基于以上分析,设计基于智能仪器的水位计具有现实意义。
智能水位计的主要功能:
①可通过键盘或上位机完成参数的设定(如:水位初始值、报警水位、量程、时间日期等)。
②可通过液晶显示器或上位机完成参数的显示(如:测量水位、当前时间日期等)。
③达到报警水位进行实时报警。
④能与上位机完成多点通信。
⑤采用两种传感器采集水位信号。
本系统主要有微处理器系统、模拟量的采集与模数转换、四路继电器输出报警、4~20 mA电流环输出、串行通信接口等几个功能模块。系统的总体结构框图如图1所示。
系统各个组成部分对电源的要求不一,所以系统采用两种方式供电。一种采用开关电源供电,输出+24 V和+5 V电压,+24 V的电压给达林顿驱动芯片、继电器供电,+5 V电压给单片机、前端模拟信号的电压放大部分、精密模数转换器、LCD显示驱动和按键电路供电,另外通讯接口部分通过一DC/DC模块从开关电源处获得+5 V电压,输出也为+5 V电压,使得该部分与主系统实现电气隔离。另一种是通过外部供电,主要用于4~20 mA电流环输出部分,该部分的数模变换器采用了高速光电耦合器6N136与单片机进行光电隔离,从而可以有效地抑制外部电路信号对单片机的干扰,实现与单片机完全的电气隔离。
图1 水位计系统总体结构框图
微处理是整个系统的控制核心,该部分的主要工作是将传感器测量的水位信号经A/D转换后的数字量进行数据处理,一方面送液晶显示模块显示,另一方面与设定的水位报警值进行比较,判断是否报警;对键盘模块输入的信号做出相应处理;与上位机通信,内容包括将测量数据送入上位机保存以方便进行分析处理,接收上位机发送的时间日期写入时钟模块,接收上位机发送的设定参数并作相应操作。
为了满足以上工作要求,且使整个系统的硬件电路简化,减少芯片数量和占用空间,节省功耗,提高系统的稳定性、可靠性,本系统选用性能优良、成本较低的 SOC单片机C8051F021[2]。该芯片内部集成了多种功能部件,包括UART、A/D转换器、D/A转换器、定时器、64 KB的Flash存储器和看门狗定时器等,C8051F021使用片内JTAG调试方式,使本系统能够方便地在线更新升级软件,从而达到更新升级整个系统的目的。
水位高度的采集本系统采用液位压力传感器、可变电阻传感器两种不同的传感器来完成,采集到的水位信号经模数转换电路后送单片机处理。
采用液位压力传感器测量水位时,水位为零到满量程高度对应输出的是4~20 mA的电流信号,通过电阻把它转换为0.4~2 V的电压信号,经过由AD623AN芯片构成的射极跟随器后,送入具有16位测量精度的片外ADC转换芯片AD7705的AIN1端[3],转换得到的数字信号送入单片机SPI接口的MISO端。
用可变电阻传感器来测量水位输出的是电压信号,不再经过电流/电压的转换电路,直接送入C8051F021芯片的AIN0端,直接利用单片机片内的12位ADC进行模数转换,电压基准采用外部基准,基准值是2.5 V。
采用4个继电器外接电气二次电路完成高水位1、高水位2、低水位1、低水位2报警,这四个报警水位可以通过键盘输入或上位机界面人为设定。单片机I/0口发出开关量控制信号,通过达林顿驱动芯片ULN2003来驱动继电器,使其对应的继电器常开触点接触导通,外部串接的报警电路开始报警。原理框图如图2所示。
图2 报警电路原理框图
要将待测量数据输送给测量设备需将信号转换为4~20 mA电流环。本系统采用一种高性能数字模拟变换器AD421[4],AD421与单片机的连接只用了三根数据线:CLOCK与单片机SPI接口的SCK连接;DATA与单片机SPI接口的MOSI连接;LATCH与单片机的普通I/O口P3.0连接,将单片机输出的数字信号直接转换为对应的4~20 mA输出。
C8051F021可以通过RS232和RS485两种接口方式与上位机进行通信,采用 C8051F021的UART0口来完成。RS232接口采用电平转换芯片MAX3222;RS485接口采用电平转换芯片SN65LBC184配合高速光电耦合器6N136完成。
本次水位计的程序设计采用C语言的编程方式。系统中主程序调用了三个子程序:系统初始化子程序、显示子程序和显示初始化子程序。系统初始化子程序中对 AD、DA、I/O、外部振荡器、SPI、定时器、UART以及中断系统都做了初始化的工作。显示初始化子程序是对显示部分进行初始化,为了使程序结构紧凑将显示初始化子程序放到系统初始化子程序中。显示子程序是一个死循环,在循环体中不但完成显示部分的功能,还做了一些系统应该一直查询的信号量,如按键、中断开关转换等。
本系统单片机通过RS232和RS485两种接口方式与上位机进行通信,采用C8051F021的UART0口完成与上位机通信,UART1口完成与编码器通信。
本系统选用定时器2作为UART0的波特率发生器。定时器2工作在自动重装载的模式,16位初始值被自动重装载在定时/计数寄存器中。溢出事件用作UART0的移位时钟输入,定时器2溢出可以用于产生独立的发送或接收波特率。UART0和定时器2的初始化程序如下:
UART0和上位机通信过程如下:UART0默认的中断号是4,当接收完一个数据字节后,接收中断标志R1置逻辑“1”,就进入UART0的中断子程序。在中断子程序中,单片机用CRC检验方法检验接收到的是否为正确码,若不正确则退出中断子程序,若正确则根据接收来的一帧数据的第一位判断是否是当前机器号,如果机器号正确则继续通信,否则,退出中断子程序。然后根据第二位数据判断是读命令还是写命令,如果是读命令,那么就将单片机发送所有的数据包括水位值、时间日期、各个设置值等信息作为一帧数据传送给上位机;如果是写命令,先判断修改时间日期还是修改设定的参数,再进入相应的接收数据的子程序段。
水位计的上位机监控系统以PC机为人机交互工具,利用串行口和单片机进行通信,所用的编程环境是VB(Visual Basic)语言环境。可以控制单片机向上位机发送水位值及各种工作参数,对单片机设置时间日期、修改工作参数等。
本智能水位计采用新型单片机C8051F021,准确度、稳定性、主要功能均达到了预期的目标。本系统具有采集多点模拟量输入,采集精度为12位ADC所具有精度;水位采集可采用多种传感器;可使用UART与上位机完成多点通信;可根据需要用数码管或液晶显示器完成参数的显示和参数的设定;可以手动初始化工作参数;通过上位机监控软件可以定期地存储下位机的工作状态等功能。当然本系统还存在需要改进的地方,将在使用过程中不断加以完善。
[1] 冶占武,吴百海,刘溉.基于单片机的智能仪表设计[J].机电工程技,2005(10):21-22.
[2] 门雅彬.基于C8051F021的智能化风传感器的设计[J].海洋技术,2003(2):48-50.
[3] 朱延钊.AD7705/AD7706的原理与应用[J].国外电子元器件,2002(6):59-61.
[4] 杨金岩,武翠琴,张向东.4~20 mA电流变送器AD421及其应用[J].现代电子技术,2001(7):76-78.