Board logo

标题: 防腐监测仪的设计与应用 [打印本页]

作者: 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