引言
本文介绍了这样一种腐蚀仪:目的是监测野外输油管道腐蚀度。输油管通道的腐蚀程度直接影响到石油的生产,如果发现不及时,将会发生安全事故,从而引起经济损失和人员损失,因此,对输油管道的腐蚀度监测是必须的。本系统中,可以通过检测管道里的微电流,然后通过输入经验参数来换算出管道当前的腐蚀度,绘制出腐蚀度变化曲线图,以便使用者直观地实时地了解到输油管道的腐蚀变化情况。
1 总体方案设计
1.1 设计总体构成方案
设计主要由两个部分组成:下位机和上位机。下位机以单片机为核心,通过程序控制来采集电流的数据,并进行相应的处理,最后显示,并将有关数据存储到IC卡。上位机则是通过计算机与Q系列接触式IC卡读写器之间进行的串口通信,将IC卡里的数据导入计算机。
图1为其下位机系统框图。
图1 下位机系统框图
图2为其上位机系统的系统框图。
图2 上位机系统框图
1.2 下位机电路的设计
本系统的设计过程中,主要元件包括12位并行模/数转换芯片AD1674、扩展多功能接口芯片8155、时钟日历芯片DS12887、AT89C52单片机。
放大芯片采用了AD524放大器。腐蚀电流的取值范围通常在0uA~100uA之间,出于这一点考虑,选取固定增益值GAIN=1000,放大后的电流量满足AD1674的输入端要求。
模拟电流量通过AD1674后换算成对应的数字量。本系统中AD1674与AT89C52的硬件接口电路如图3,采用+12V、-12V双电源供电,单极输入方式,模拟量从10VIN输入。其中CS接GAL16V8的18号管脚,它的启动地址为4000H,高八位地址为4002H,低八位地址为4003H。转换结束信号STS接到INT0上,AT89C52的读写信号W/R、RD通过与非门接到AD1674的操作使能端CE来控制AD1674的读/转换操作。可用中断方式,也可用查询方式。本系统中采用查询方式,其流程如图4所示。
图3 AD1674与AT89C52的硬件接口电路
图4 AD1674转换流程图
其对应的C51语言程序如下:
#define ADSEL XBYTE[0x4000] //AD1674相关定义
#define HIGH_READ XBYTE[0x4002]
#define LOW_READ XBYTE[0x4003]无忧
unsigned int ad1674()
{ uchar high,low,j=0;
unsigned int ad_value1;
unsigned int ad_value2,ad[20],sum=0;
for(j=0;j<10;j++)
{ ADSEL="0x00"; //启动12位转换
while(STS==1) ; //等待AD转换完毕
high="HIGH"_READ; //读高八位数据
low="LOW"_READ; //读低四位数据
low》=4;
ad_value1=high*256+low; //合并12位二进制数为十进制数
ad_value2=ad_value1*0.0002442*10;
//1/0XFFF=0.0002442,这里取单位为mA级
ad[j]=ad_value2;
}
for(j=0;j<10;j++) sum+=ad[j]; //对10次采集值求平均值
sum/=10;
return (sum);
}
DS12887的MOT接GND,即选用Intel工作模式。其读写允许输入脚DS/RD、R/W分别与AT89C52的读写信号相接。它的复用地址数据总线AD0-AD7接AT89C52的P0.0-P0.7,片选输入CS接GAL16V8的15号管脚,它的命令寄存器地址为:分-5002H,小时-5004H,星期-5006H,日-5007H,月-5008H,年-5009H,寄存器A-500ah,B-500bh,C-500ch,D-500dH,不掉电数据存储器为:500EH-507FH。RESET直接接VCC,保证DSI2C887在掉电时,其内部控制寄存器不受影响。
液晶显示器NS1602,它能显示16字符X2行的内容。系统运用的是间接访问方式8位数据总线接口电路。其3个控制信号RS、R/W、E分别与AT89C52的P3.3、P3.4、P3.5口相接,8位数据信号接8155的PB端口。对液晶显示器的操作要严格遵守LCD1602的接口时序。其操作分两类:写指令代码,写显示数据。两者的区别取决于RS,RS=0时访问命令寄存器,RS=1时访问数据寄存器。另外,对LCD的初始化工作是非常重要的,包括清屏、数据格式设置、显示器特性设置、显示地址设置等。
键盘输入采用4×4键盘,其中键盘行线接P1.0-P1.3,输出接地信号;键盘列线接P1.4-P1.7,输入回馈信号,来检测按键是否按下。键盘是非编码键盘,要通过软件编程来识别键盘。键盘输入信息的主要过程是:判断是否有键按下,扫描确定按下的是哪一个键;把此键代表的信息翻译成计算机所能识别的代码。
由于IO口不够用,外加一片扩展多功能接口芯片8155。其片选端接GAL16V8的14号管脚,IO/M端接地址A8,8155的命令口地址为2100H,A口地址为2101H,B口地址为2102H,C口地址为2103H。8155的PB口为LCD的数据口。
1.3 上位机电路的设计
利用接触式IC卡读写器跟计算机之间进行串口通信将IC卡里的数据导入计算机。读写器提供了性能完善、可靠的接口函数库,在用VB编程时可直接运用这些函数。
首先要调用通讯口初始化函数IC_InitComm(Port)来检测串口,再设置卡型,成功后输入页码就可读入该页的数据了。读入的数据可通过保存控件保存到指定的路径下。程序退出之前要执行IC_ExitComm()函数关闭串口释放串口设备句柄否则再次初始化串口将出错。
2 数据的串行存储
2.1 I2C总线通信原理
I2C总线是由数据线SDA和时钟SCL构成的串行总线,SDA总线上的数据仅能在SCL为低电平时改变,每一个SCL周期表示传送一位串行码。若SCL在高电平期间,SDA由高转低,表示“开始”状态,提示一个通信进程的激活。而SDA由低转高,表示“停止”状态,该状态终止所有通信。所有地址和数据均以8位串行码为数据单位输入输出,总线上任何接收设备必需在接收到8位串行码后,将SDA总线置1位低电平以确认它成功地收到一个字节数据。写操作需在“开始”状态后, 发出一个8位的控制及器件地址码并得到确认,再发出一个8位或16位数据码地址并在被确认后随时钟不断滚动输出8位数据码,直至“停止”状态发生。
2.2 I2C总线的编程实现
本系统中是用P3.0和P3.1分别作为SDA和SCL信号,单片机所用晶体振荡器的频率为12MHz。当无卡插入时开关闭合,PC0为低电平,当有卡插入时开关断开,PC0为拉为高电平。每个机器周期为1μs,设计可根据I2C总线的工作时序用软件模拟I2C总线产生起始位、停止位以及发送字节。
3 结语
一些国外生产的进口机械电流测量表,价格通常在人民币一万元以上。而本文设计的以AT89C52单片机为核心处理器设计的防腐监测仪,只需要人民币几百元的成本,经济效益极高,而且能将腐蚀度相关数据存储自动化。将它与传统的机械电流测量表一比,也很方便简单,甚至无需专门的工作人员来记录相关数据,实现系统的全自动化。本设计还利用液晶屏显示,使其体积更小巧。本设计将有效减少石油管道事故,并降低由此带来的经济和人员损失。