标题:
防腐监测仪的设计与应用
[打印本页]
作者:
Bazinga
时间:
2014-4-24 15:42
标题:
防腐监测仪的设计与应用
本帖最后由 Bazinga 于 2014-4-24 15:44 编辑
0 引言
本文介绍的腐蚀仪是为了监测野外输油管道腐蚀度而设计的,由于输油管道的腐蚀度影响到石油的生产,会造成经济损失和安全事故,故对其腐蚀度的监测是非常必要的。本系统中,可以通过检测管道里的微电流,然后通过输入经验参数来换算出管道当前的腐蚀度,并通过上位机程序把数据存档,绘制腐蚀度变化曲线图,以便操作人员可以直观的了解输油管道的腐蚀变化情况。
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);
}
AT89C52有256B的内部RAM,满足本系统对数据存储器的需求;内部有8KB的可编程只读存储器,构成应用系统时,不需要外扩程序存储器[3]。
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时访问数据寄存器[6]。另外,对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.2 I2C总线的编程实现
本系统中是用P3.0和P3.1分别作为SDA和SCL信号,
单片机
所用晶体振荡器的频率为12MHz。当无卡插入时开关闭合,PC0为低电平,当有卡插入时开关断开,PC0为拉为高电平。每个机器周期为1us,设计可根据I2C总线的工作时序用软件模拟I2C总线产生起始位、停止位以及发送字节。
3. 结束语
现有一块美国FANN公司生产的机械电流测量表,价格一万多元人民币。本文以AT89C52
单片机
为核心
处理器
设计的防腐监测仪则只需几百元的成本,而且能自动定时将腐蚀相关数据进行存储,与传统的机械电流测量表相比,无需专门的工作人员来记录相关数据,操作起来更简单方便。在外形上,本设计利用液晶屏显示,其体积更小巧。本设计能较好的对石油管道的腐蚀状况进行监测,将对减少石油管道事故和降低由此带来的经济损失起到良好效果。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0