王元峰 ,刘 伟 ,张小伟
(1.安徽省芜湖水文水资源局,安徽 芜湖 241000;2.水利部南京水利水文自动化研究所,江苏 南京 210012;3.南京扬子水利自动化技术开发总公司,江苏 南京 210012)
感应式数字水位传感器(以下简称传感器)是一种采用先进微处理器芯片为控制器,内置通讯电路,可应用于江河、湖泊、水库、水电站、灌区及输水等水利工程中的水位监测产品,具有高可靠性及强抗干扰性能。感应式数字水位传感器利用水的导电性,引起水位变化与相应的电极导通采集水位信号。
该传感器的工作原理如下:传感器的电极密布于 1 根棒式的外壳上,组成 1 条水位信号检测线。由超音频信号发生器和发射头向水中发射检测信号,取样电路通过电极与水接通,接收检测信号。传感器的取样电路为感应式的,所以称之为感应元电路。当水位发生变化时,相应的感应元电路发出信号。即:水面和传感器的某个感应元电路接触时,该电路触发器翻转,输出信号由 1 变为 0;当水面离开电极时,输出信号由 0 变为 1。传感器上若干个感应元电路的电极,组成 1 条电子尺,相当于 1 条水位神经线。每个取样电路就好像是人体的神经,向神经中枢传递信息,因此又叫做神经元电路。每个神经元电路都是以开关脉冲的形式输出数字信号[1]。
感应式数字水位传感器在结构上分为数据采集和信息处理 2 个部分,具有以下功能特点:
(1)数据采集实现数字化,稳定可靠;
(2)抗干扰识别在保证数据采集正确的前提下,能最大限度地抑制干扰信息,大大提高了传感器的可靠性;
(3)具有信号远传能力,信号不经中继放大,可直接远传 20 km;
(4)能区分零水位和断线信号;
(5)具有采样精度与传感器的测量体长度无关的特点,对不同变幅的应用环境,测量精度保持不变,测量精度为 1 cm;
(6)可单支使用,也可以多支级联使用,级联时每支传感器具备的变送器(又称法兰头)都有各自的 ID 编号,该 ID 编号可以在线重新设定,便于级联后识别;
(7)具有多种信号输出方式:RS - 485(Modbus -RTU,SDI-12)、CAN、4~20 mA、1~5 V 等[2],可供用户自由选择。
该传感器存在以下不足:
(1)电极是获取水位信号的关键部件,但由于电极的腐蚀钝化,影响到点信号的正常传递,因此对电极腐蚀、钝化现象的研究,也是一个重要的问题;
(2)适用范围受到环境限制,感应式数字水位传感器对水质的要求较高,如含沙量和淤泥等因素都会给测量结果造成偏差。因此只适用于较为清澈的河流、山涧等。
感应式数字水位传感器的通讯协议采用 Modbus-RTU 标准协议,其波特率为 9600,1 个起始位,8 个数据位,1 个停止位,低位先发送,无校验。
在 RTU 模式中,新的信息总是以至少 3.5 个字符的静默时间开始,紧接着传送第一个域:设备地址。整帧的信息必须以 1 个连续的数据流进行传输,如果信息结束前存在超过 1.5 个字符以上的间隔时间,则出错。
1 帧信息的标准结构如表1 所示。表1 中的结构说明:地址域,从机(目标地址)的有效地址范围为0~247,0 为广播地址(使用广播地址时,应保证只接有 1 支传感器,否则会导致数据出错,或者硬件损坏);功能域,有效编码为 1~255;数据域,数据域由多组这样的数据构成,2 个 16 进制数为 1 组,范围在 00~FF 之间;CRC 校验,CRC 生成后,低字节在前,高字节在后;T1、T2、T3、T4 代表每个字节的传输时间长度,共为 4 个字节传输延迟时间。
表1 一帧的标准结构表
目前市场上一些 RTU 只提供格雷码接口,而感应式数字传感器使用 RS-485 传输方式,因此,需要设计数据转换器,实现串口数据向格雷码数据的转换。即将传感器采集到的水位数据转换成格雷码,供 RTU 读取。数据转换器每隔 3 min 定时采集 1 次数据发送到格雷码 16 Pin 引脚接口上,而 RTU 则定时(可设置)读取 16 Pin 引脚上格雷码数据,发送到中心站。
数据转换器采用的主控芯片是 8 位低功耗芯片MC68HC908GP32 芯片(以下简称 GP32)。该芯片具有串口模块(SCI)、定时器模块(TIM)、定时基模块 (TBM)和其他 IO 口模块,满足数据转换器设计需求。其中串口模块用来与传感器进行通讯,采集水位值;定时器和定时基模块用来计时;键盘模块可用来获取设置信息;其他 IO 模块分别用于格雷码口传输、5 V 控 12 V 电压、看门狗喂食等。图1 给出了转换器基本结构图。
图1 数据转换器基本结构图
数据转换器系统(以下简称系统)的开发采用 C语言编写。软件设计主要有以下几个方面:串口通信、并行 ( 格雷码 ) 输出、CRC 校验、数据转换、与传感器通信、传感器电源管理、定时基、看门狗等。系统程序的逻辑框图如图2 所示。其工作流程主要分为以下几个步骤:
(1)系统上电后,运行初始化程序,包括芯片和各个模块的初始化。
(2)查询设备的地址和长度, 并与芯片的设定值即实际值相比较,如果相等,直接跳过(3)执行。
查询设备的地址和长度命令的功能码为 03,命令格式为,目标地址(1 字节)+ 功能码(1 字节)+起始地址( 2 字节) 寄存器个数( 2 字节)+ CRC校验(2字节)。如果不知道目标地址是多少,可用广播地址“00”代替,但必须保证只接 1 支传感器。读取传感器的实际长度的命令格式同查询地址命令格式相同,接收的回执格式为,响应地址 + 功能码 + 字节计数 + 地址 + 类型 + 长度 + CRC 校验。如发送 0003 0004 0002 841B,收到的回执为 0A 0304 0A 0206 04 E0 BB。传感器的地址为 10 号,类型为感应型 (01 为电容式,02 为感应式),实际长度为 1600 mm(0640 H = 1600)。
图2 系统程序逻辑框图
(3)若设备的长度与设定的长度不一致,修改设备的地址和长度,回到(2)继续执行。
设置通讯地址、类型及传感器长度命令的功能码为 06,命令格式为,目标地址(1 字节) + 功能码(1 字节) + 起始地址(2 字节)+寄存器个数(2字节)+ 字节计数(1 字节)+ 地址(1 字节)+ 类型(1 字节)+ 长度(2 字节)+ CRC 校验(2 字节)。例如:设将地址为 0AH 的传感器地址设置为 2 号,电容式,长度为 800 mm。收到回执中,如果功能码收到的是 86,表示传感器数据不合格,另外传感器的长度应为 400 的倍数,否则无法修改成功。
(4)每隔 3 min 查询水位高度,查询完毕后进入低功耗休眠状态。
读测量数据、地址和传感器长度命令的功能码为03,命令格式同查询设备地址的命令格式。如读取 1 号地址的传感器水位值命令 0A 0300 0000 0184 0A,得到的回执为 0A 0302 02 D01D 79。得到的水位为 0C30 表示 16 进制 0C30,转换成 10 进制 3120,表示水位高度为 3120 mm。由于水位高度的值不是实时更新的,传感器每 20 s 更新 1 次,因此在程序设计时,不能连续读取水位值,需要一定的间隔时间,间隔时间为 20 s,若少于 20 s,读取的数值是上次读取的值,即为无效值。
水情遥测系统大多在野外运行,因此功耗要求比较低,遥测系统设计时要尽量降低功耗。可采取以下几种方法降低功耗:
(1)采用可控电源电压方式,在不需要与传感器通讯时将传感器断电。传感器工作电流为 10 A,如果一直供电,功耗较大。因此在设计时,用可控电源的方式,即只有系统与传感器通讯时,才给传感器上电。这里可控电源就是需要设计 1 个控制 12 V 的电路,由于 GP32 芯片 IO 口电压为 5 V,因此要设计出 5 V 控制 12 V 电路,来减少非通讯时间的数据传感器电流消耗。
(2)对MAX485芯片控电。经过测试,MAX485 芯片在通电时,VCC 引脚有电流通过。因此为了进一步降低功耗,对于 MAX485 芯片的电源芯片业采用可控的方式。在硬件设计时,考虑到串口通讯的工作时间与传感器工作时间相一致,为减少 IO 口消耗和编程方便,采用的是将可控 12 V电压通过 HT7550 降压的方式得到可控的 5 V 电压,给MAX485 芯片提供电源电压。值得一提的是,在非工作模式中,要将 TXD 和 RXD 设置为普通的 IO 口,并输出为 0,以防漏电。
(3)CRC 校验采用查表的方式,代替原来复杂的运算。采用空间换时间的方式,减少程序运行时间,即程序低功耗状态的时间相对增加,从而降低达到功耗的目的。
(4)休眠模式中,用 STOP 模式替代 WAIT 模式。HC08 系列 MCU 提供了 2 种低功耗模式供用户使用,对应的指令分别为 WAIT 和 STOP。这 2 种模式都是通过关闭时钟来减小微控制器的功耗,但是两者存在一定的差别,总体来说 WAIT 模式比 STOP 模式功耗大。
程序中运行 WAIT 指令,使 MCU 处于 WAIT 功耗模式。在 WAIT 模式下,内部 CPU 的时钟被关闭,但内部总线时钟并不停止,定时器仍在工作。MCU 还可以执行与定时器相关的工作。如果程序允许所有中断,则任何中断和外部复位均可将 MCU 从WAIT 模式“唤醒”。
程序中运行 STOP 指令,使 MCU 处于 STOP 功耗模式。在 STOP 状态下,关闭 MCU 内部时钟,包括 CPU 的时钟和内部总线上的时钟,MCU 内部一切操作停止,只有外部复位及部分中断可以“唤醒”MCU。可以“唤醒”STOP 模式的中断有键盘模块、时基模块等。
因此,系统选用 STOP 模式可以降低功耗。对于GP32 芯片,若措施得当,STOP 模式可以使得芯片工作电流降到 5 μA 左右[3]。
考虑到系统要有定时自行唤醒功能,因此要有记时功能,实现记时功能的有定时器模块和定时基模块,本系统采用系统自带的定时基模块。原因是定时器只能在 WAIT 模式下工作,在 STOP 模式下不可以工作。而定时基模块采用外部晶振计数,可以工作在 STOP 模式下。经过对比测试,采用 WAIT 模式,系统静态功耗为 20 mA,而采用 STOP 模式,系统静态功耗降为 3 mA。
(5)为了降低功耗,建议不用的引脚接地,并定义为输入。关闭所有不用的 IO 口,将 IO 口接地;需要使用的 IO 口保持数据不变。
由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的“跑飞”,而陷入死循环,程序的正常运行被打断,则单片机控制的系统无法继续工作,容易造成整个系统陷入停滞状态,发生不可预料的后果,因此要采用“看门狗”模块,并定时喂食。“看门狗”模块分为软件看门狗和硬件看门狗, 本例使用 MAX713 芯片作为看门狗芯片,MAX713 芯片要求 1.6 s 内喂食 1 次。考虑到系统使用时环境复杂,程序采用 0.5 s 喂食 1 次的方法,防止因某次喂食未成功,而引发意外复位。因此,定时基程序采取每 0.5 s 发生 1 次中断,来给看门狗喂食。
系统在接收数据时,需要安排好看门狗喂食时间。一般采用的方式为,在接受数据之前,首先给看门狗喂食,等待接收传感器发送的第一个数据。第一个数据接收后,看门狗再次喂食,并对接收到的数据进行校验,如果接收正确,接收下面的数据,由于数据数量有限,全部接收完毕,不超过 0.5 s,期间不需要给看门狗喂食,数据接收完毕,再次看门狗喂食。如果接收错误,放弃本次接收,重新发送命令等待下一次接收数据。这样做,可有效防止接收到错误数据或由于接收不到数据引起“死等”,而出现死机的现象。
数据转换器系统已于 2008 年 12 月安装在西安水情分中心的黑峪口和大峪口 2 个站点,传感器的长度分别为 4800 和 9600 mm,并通过验收,目前运行状态可靠、良好。2009 年 5 月 传感器采集的黑峪口水位过程线如图3 所示,大峪口站 2009 年 5 月部分天数 8点来报的采集和人工观察数据对比如表2 所示。
图3 西安水情分中心黑峪口水位过程线
表2 自报数据与实测数据对比表(大峪口) cm
由表2 可以看出,误差范围保持在 ±1 cm 之间,属于正常误差范围。该系统能够采集稳定、正确的实时数据,可以在野外应用。
本系统主要是针对感应式数字水位传感器设计的数据转换装置,具有针对性强,开发周期短,可移植性强等特点。由于针对性强,因此涵盖的内容少,可以快速开发用于工程应用。其他 RS-232、RS-485 或 SDI-12 通讯接口的传感器均可直接采用本系统的硬件,而软件部分只需要针对不同传感器的通讯协议稍做修改即可。
在设计的过程中,有些特别之处,如采用WAIT 模式来替代 STOP 模式,用可控电源取代直接提供电源以降低功耗,看门狗的设置等。在试验测试过程中,发现串口接收数据采用查询方式比采用中断接收方式,稳定性要增强。系统在功能较少时,串口接收完全可以用取代中断接收数据来提高系统的稳定性。另外还可以对系统进一步改进,可以将多种传感器集成在同一系统中,通过 PC 软件或者手持编程器实现对系统的设置以适应不同的传感器,增强系统的可扩展性和灵活性。
[1]吕迎春. 感应式数字水位传感器稳定性、可靠性的研究[D]. 江西:太原理工大学,2005,5.
[2]太原理工天成科技股份有限公司. TC401 感应式数字水位传感器用户手册[X]. 太原:太原理工天成科技股份有限公司,2008.
[3]王宜怀,刘晓升. 嵌入式应用技术基础教程[M]. 北京:清华大学出版社,2007,11.