一种基于适时时钟的水情自动监测设备的开发作者:王志刚、牛陇江摘要:本文介绍了一种基于适时时钟的水情自动测报装置的开发。并着重在芯片的层次上介绍了该装置的总体构成、工作原理等。在硬件方面本文着重介绍DS12C887时钟芯片、TCL0832A\D转换芯片,这两种芯片的工作原理及使用方法。在软件方面介绍了一种格雷码转换为二进制数的算法及其在单片机系统中的C语言实现,及系统的软件结构、通讯协议。关键词:水情自动测报、适时时钟、A\D转换、格雷码转换一:水情自动监测装置的工作任务及其监测量根据我县水情监测运行五年中所发生的问题,结合我县实际工作要求,我们设计开发了一种水情自动监测设备。江河流域的水情监测装置完成的主要工作要求是:时时不断的监测被监测流域的水位、流速、流量、蒸发量、降水量等,将监测的数据传给中心站的计算机进行显示、记录。以指导我们对水的控制。在一般的水情监测中我们往往只需监测流域的水位、流量、降水量等监测量就可以了。在这里我们只对流域的水位、降水量(蒸发量)进行监测而水域的流量可以通过标准段面的断面参数及水流速计算得知。关于水流速的问题由于不同的水质、功耗、可靠性等问题不易解决传感器的选择。在装置设计时对其不予考虑。需要监测时,可以考虑使用专用的流速仪。由于该装置工作在野外的无人工作站中,故要求该装置功耗低,工作方式根据国标要求可以采用自报/应答工作方式。自报方式在设计时可以采取增量自报、定时自报等方式。群控时应答采取轮讯方式。自报时装置可以监测通讯总线状态,以避免数据碰撞现象。二:水情自动测报装置的总体构成及工作的原理如图所示l装置数据采集部分以单片机为核心,将格雷码数据(水位)、雨量数据(频率)、电量数据及时间数据采集后存入存储器中,并通过485总线、或232总线将数据转发出去。根据不同的工作体制要求,数据的转发可以是自报或者应答。当工作于自报体制时485通讯将被取消(即在本设计中485通讯只适宜工作在应答体制下)。l整个装置是依据时钟的IRQ输出控制的电源来工作的。当时钟的IRQ输出为低电平时SK-VCC的输入控制级为高电平,从而使SK-VCC区得电。单片机及其外围系统以及传感器带电,系统硬件复位工作进行数据采集及存储(当设定在应答方式工作时可使SK-VCC输入控制极接入常高的高电平)。单片机在采集工作结束时,对时钟进行操作写入下一次工作的时间,并使时钟的IRQ输出恢复为高电平。从而将SK-VCC的电源切断。这样设计的目的主要是考虑到装置工作在野外且无人职守,此时对装置的功率将提出要求。按照这样的设计装置在大部分时间内将仅仅使时钟及其外围电路带电工作(工作时间可以通讯的方式人为设定)。实际测试装置在静态时工作电流仅为10毫安。l在本设计中由于时钟的工作状态决定了整个装置的工作。所以时钟的选取成为了关键。在设计中采用了达拉斯公司DS12C887,由于该芯片自带电源从而使电路的设计更加简洁。l设计中16位格雷码数据的读取,由于采用的单片机为8位机。所以采用了数据总线分时读取及读取位控制的方式读取。l设计中考虑到装置将工作在野外的无人站。其电源将采用太阳能+蓄电池的供电形式。为了能够详细的掌握装置供电情况,设计了电源监测电路。该电路主要由芯片TLC0832构成。该芯片是一种8位逐次逼近,串行输出的模数转换器件,转换速度快。l设计中从数据掉电不丢失,低功耗及电路简洁、经济性等方面考虑采用了24C64芯片作为数据存储器,该芯片是一种具有IIC总线的8K字节EEPROM(100万次擦写寿命)。l在设计中,装置的静、动态工作时间、数据传输终点、平安自报时间、工作制选择等均可以通过通讯方式由中心站计算机人为设置。三:设计实现中使用的关键器件A.时钟器件DS12C887DALASS公司的DS12C887芯片是一种内置晶振,备用电池的具有多种报警输出,具有并行接口时钟电路。其内部电路结构如图所示:由图可以看出DS12C887的控制主要由软件、硬件两部分:l硬件部分:由MOT控制芯片的总线选择。实际上该芯片可以是用MOTOROLA总线结构及INTEL总线结构两种总线形式。在实际设计中由于选用ATMEL公司AT89C52单片机所以选用了INTEL总线形式。AS、DS、AD0~AD7、R/W、CS分别为总线控制线。实际的硬件设计如图所示:在设计时考虑到单片机经常处于硬掉电状态,在单片机重新上电复位时,其各管脚在复位时存在不可控性。为了防止这种不可控性改写DS12C887内部数据,设计了用单片机的复位信号封死DS12C887的电路。实际使用中证明这种考虑及设计是很有用的及可靠的。l软件部分,我们由DS12C887的结构图可以看出其晶振起振、时钟分频、方波输出、中断输出,数据码制选择均由内部寄存器A/B/C/D决定。而时钟的更新直接由硬件的晶振几分频电路决定。故我们只需读、写寄存器A/B/C/D就可以控制DS12C887的运行。具体上寄存器A/B/C/D的功能及位影像如下所述:1.寄存器A:寄存器A的各位如图所示UIP位标志着数据的更新,在每一次(1秒)更新后的224微妙内该位的值为‘1’,其他时间该位的值为‘0’。DIV2~DIV0位用来选择晶振,由于该芯片内置的晶振固定为32.768KHZ。所以上述三位的值只能为“010”。至于RS3~RS0位,他们控制芯片的方波输出频率。由于在设计中没有使用方波输出,在这里不再赘述。2.寄存器B:寄存器B的各位如图所示:SET位为1时晶振停振,这时可以将对时数据写入DS12C887的时钟寄存器内。而PIE、AIE、UIE三位设置为‘1’时只要三种相应的一种中断输出条件满足。DS12C887的IRQ引脚将拉低(该脚为开路输出)。其他位图中均有表述,在这里限于篇幅限制不再赘述。3.存器C、D的功能由于在实际的控制软件中为使用,在这里就不再赘述。4.DS12C887内部寄存器影像从上述可见:实际控制该芯片时只需向寄存器写入16进制数“2X”即可以刷新时钟晶振。向寄存器B中写入“8X”即可以停止时钟,此时可以写入时钟的准确值及报警时间。向寄存器B相应位写入相应的值可以完成你想让他完成的相应功能。对CS引脚写‘1’可以禁止向其内部寄存器写入任何值,此时如果外部电源丢失,芯片将切换到内部电池上工作。综上所述DS12C887是一种较为可靠的即时时钟,且对他的控制也较为简单。B.模、数转换器件TLC0832:由于该芯片是一种8位逐次逼近的串行AD,因为他在常规的单片机设计中不易出现。所以在此对他做一个介绍。1.TLC0832的外部引脚如图CH0,CH1是模拟量输入端。允许两个输入口分别差模输入两种模拟量。VCC既是电源也是基准输入端。该器件允许共模输入。模拟量采用哪一种输入方法及从那一个通道输入由CS引脚电平变低后,DI引脚上的时序决定。CS引脚电平变低后,CLK上的输入时序给DI提供时序基准。DI时序结束后,CLK每一个由低到高的电平跳变,AD进行一次转换,并将转换结果从DO引脚输出。如图所示:在上图中模拟量输入形式及监测输入通道由DI管脚上的SGL、ODD时序位决定。具体如下表所示SGLODDCH0CH1LL共模输入+共模输入—LH共模输入—共模输入+HLCH0差模输入———HH———CH1差模输入2.由上图可以看到由于在DI出SGL、ODD时序时,DO引脚处于高阻状态。故实际使用时,可以将DI、DO管脚直接相连由单片机的一个I/O脚控制。在实际硬件设计时考虑到所检测量电源电压的监测精度没有要求。故该器件的供电没有使用基准源,同时使用单片机的P1.5~P1.7管脚控制TLC0832的CS、CLK、DI(DO)即可以很好的控制该芯片的运行。四:系统的软件设计由于系统的硬件设计的简单易行及功能的模板式的区划,使得软件设计可以分为采集存储计算程序、看门狗运行程序、通讯程序等部分。采集计算程序流程图如图所示:在作格雷码数据采集及转换时,为了适应不同传感器的要求,将格雷码数据考虑为16位格雷码输入。这时如果采用传统的查表的办法,将使程序的长度大大增大。这里介绍一种格雷码转换为二进制述的数学算法及在设计时的C语言的实现。如果某格雷码为:Gn-1,Gn-2,……..G0.。其对应的二进制数为:Bn-1,Bn-2,……..B0.。则有:Gn-1=Bn-1。BI=BI+1⊕GII=n-2,n-3…………..0。C语言实现程序如下:程序的入口为格雷码(一个字16位)出口为其对应的二进制数(一个字16位)看门狗程序的作用是在规定的总工作时间内每1秒对看门狗电路作一次复位动作,并纪录总共对看门狗进行复位的总次数。如果程序在总时间内未结束。则看门狗程序认为程序超时不再复位看门狗,并置程序超时标志。这样看门狗硬件将在1。6秒后对单片机进行复位操作,并在其自检时报程序超时错误。程序超时标志只能通过通讯程序人为清处。(程序流程图,略)通讯程序的协议主要参照研华协议的模式,进行了定义。在设计中将DS12C887的45个字节的用户RAM定义为通讯数据缓冲区。支持了数据的全双工通讯。同时使单片机的通讯工作变得更加简单,更加面向对象化(程序流程图,略)。对于在实际的设计中采用的其他硬件、软件如IMP813、MAX603、24C64等硬件,IIC总线模拟软件等。限于本文的篇幅限制,在此不再一一赘述。五:总结该装置的实际静态工作电流低于10MA,动态工作电流由传感器的工作电流确定大致为170MA左右。在电池电压接近警戒线时,还可以采取通过通讯改变工作时间间隔等方式使其在短的时期内连续运行。总的来说该装置的功能满足水情监测的基本要求。当然该装置还存在通讯类型少。不支持485自报等。还需要作进一步的改进。同时该装置的故障率等关键参数还需在今后的长时间运行中去发现。