基于STM32F103C8T6和ZigBee的油井压力监控系统研究
扫描二维码
随时随地手机看文章
引言
目前我国大多数油田地处偏远地区、分布范围广、油井分散,若对油井出现的异常情况不能及时发现,及时采取措施,可能直接导致原油产量降低,设备使用寿命减短,能耗增加,有时甚至会造成严重的经济损失,降低了经济效益力和温度是油井抽油机正常工作的重要指标,所以本文设计的重点在压力和温度数据的采集和监控。
传统的徒手抄计和便携式存储已不再适合油井开采现场数据采集中,在线远传阶段已经到来,信息化、自动化的远程集中监控是一个必然发展趋势。目前少数的远程监控系统通常采用8位或16位主芯片,通过485总线等方式进行远程通信,系统存在反应速度慢、数据传输速率低、布线复杂易受干扰等缺点叫
本文设计的油井压力数据监控系统现场数据采集和传输设计应用ZigBee传感器网络进行功能实现,嵌入式服务器部分采用32位Cortex-M3内核的STM32F103C8T6微处理芯片和高性能以太网控制芯片ENC28J60实现嵌入式以太网通信接口设计。
1系统总体构成方案
整个系统分为数据采集发送端和数据接收监测端两部分,系统总体结构如图1所示。
数据采集发送端负责油井现场每间隔一段时间采集一次压力数据,并通过ZigBee节点设备发送至嵌入式服务器中的协调器。
数据接收监测端由ZigBee协调器、STM32控制器和上位机监控软件组成,协调器负责接收由ZigBee节点发送过来的无线数据,并传送至STM32控制器通过以太网把数据发送给远程监控PC进行查看和控制。
2系统硬件设计
2.1数据采集发送端
数据采集发送端的硬件设计主要为传感器节点硬件设计,ZigBee节点选用TI公司生产的CC2530片上系统芯片来设计,CC2530芯片采用6X6QFN封装,有电源引脚、控制引脚和GPIO引脚(P0、P1为8位的I/O引脚,P2只有5位的可用1/O),总共40个引脚。该芯片除了具有符合IEEE802.15.4规范的2.4GHz标准的RF收发器外,它还在片内集成了一个8位的8051增强型微处理器、8KB的SRAM和大容量FLASH用来保存ZigBee协议栈)等。
压力传感器采用BMP085压力传感器,它的测量范围为300〜1100hPa,反应时间为7.5ms,该传感器应用于抽油机原油压力数据的测量中,合适的测量范围决定了灵敏度符合设计要求。同时它具有温度补偿功能,采用无铅陶瓷载体封装,适用在海拔500m~9000m环境,保证工作状态长期稳定。
CC2530通过I/O口与BMP085相连,CC2530内部处理器与BMP085之间采用IIC总线进行通信。传感器采集到压力和温度数据,经AD转换传送给片内8051微处理器,微处理器控制传感器节点与其它传感器节点或汇聚节点进行通信。RF无线收发器,通过SPI与处理器模块相连。其传感器节点的硬件框图如图2所示。
2.2数据监测接收端
数据监测接收端的硬件设计主要分为两部分:ZigBee协调器、STM32嵌入式以太网控制服务器设计。
ZigBee协调器同样选用CC2530芯片进行设计,但为了与主处理器连接方便,本文把协调器做成一个模块,其引脚定义如图3所示。
图3中,CC2530的I/O引脚(P0.2和P0.3)通过设定SFR寄存器作为USART的RX和TX引脚使用,与STM32的USART串口引脚相连进行通讯。
STM32嵌入式以太网控制服务器的硬件设计采用基于Cortex-M3内核的处理器STM32F103CBT6作为服务器主处理器,高性能完全满足设计要求,以太网芯片采用美国Microchip公司的独立以太网控制器ENC28J60,它采用速度高达10Mb/s的SPI三线接口作为通信通道,同时内部集成了符合IEEE802.3规则的MAC层和物理层控制器。
按照STM32指导手册,一个完整的STM32最小系统还外接所需的晶振和去耦电路。其中STM32的PA2、PA3引脚是复用功能引脚作为USART2串口与CC2530的串口引脚相连,另外本系统主处理器内部移植了uIP协议,通过USART2和CC2530连接,设置了一个缓冲队列保存串口接收带的无线模块的数据,然后应用uIP的底层驱动控制ENC28J60,利用以太网发送到上位机。
根据ENC28J60用户手册和本设计的要求,本设计选用了符合10BASE-T标准并自带RJ45插座的以太网隔离变压器HR91102A,提高系统的抗干扰性。变压器需在ENC28J60的TPIN和TPOUT两引脚相连四个50Ω电阻和两个0.01uF的电容ENC28J60连接一个25MHz的晶振,跨接一个2.75kΩ的偏置电阻均按手册连接。图4所示是STM32嵌入式以太网服务器原理图。图中STM32程序下载设计使用的是标准的JTAG仿真调试接口。
3系统软件设计
3.1系统总体设计图
系统总体实现的功能是将油井现场的抽油机压力数据在ZigBee物联传感网络中从节点设备发送至嵌入式服务器中的协调器。为了服务器处理和连接方便,本文将ZigBee协调器和STM32做成了一个模块。协调器经过初始化,选择频道和建立网络后,进入无线监听状态,当有新的传感器节点申请加入时,给新节点分配网络地址并接受节点数据通过串口发送给STM32处理器,通过以太网上传至上位监控PC,系统总体流程如图5所示。
3.2ZigBee节点和协调器软件设计
本系统利用SensorDemo模板并进行部分改写来实现ZigBee节点和协调器的软件设计。在Zigbee无线网络中存在三种逻辑设备类型:协调器(ZC)、路由器(ZR)、终端设备(ZD)。ZigBee的开发软件选用IAREW8051-8.10.1,Z-Stack协议栈选用ZStack-CC2530-2.5.0,本系统为了操作方便,将SensorDemo改动去掉按键操作,上电即自动联网并发送传感器数据。重点对voidzb_HandleKeys(uint8shift,uint8keys)的改动是删除程序中的SW1等的按键触发事件;核心对voidzb_HandleOsalEvent(uint16event)的改写如下:
voidzb_HandleOsalEvent(uint16event)
{
uint8logicalType;
if(event&ZB_ENTRY_EVENT)
{
initUart(uartRxCB);
HalLedBlink(HAL_LED_1,0,50,500);
HalLedSeKHAL_LED_2,HAL_LED_MODE_OFF);zb_ReadConfiguration(ZCD_NV_LOGICAL_TYPE,sizeof(uint8),&logicalType);
if(logicalType!=ZG_DEVICETYPE_COORDINATOR
)
{
logicalType=ZG_DEVICETYPE_
COORDINATOR;
zb_WriteConfiguration(ZCD_NV_LOGICAL_
TYPE,sizeof(uint8),&logicalType);zb_SystemReset();
}
}
}
程序运行至此,终端节点就会自动加入网络并建立绑定;到了这一步的时候,网络就已经形成了,网络形成后就可以传输采集到的压力和温度数据了;程序中需要注意的是CC2530将协调器称为gateway(网关)而不是collector。
3.3嵌入式以太网STM32软件设计
嵌入式以太网服务器要实现的功能是通过USART2接收CC2530传送的数据,并通过SPI1连接ENC28J60从以太网上传数据到监控PC。以太网服务器经过对STM32和ENC28J60进行初始化,设置系统时钟和弓脚输出方式,配置SPI总线符合ENC28J60
的时序要求,对ENC28J60的初始化是通过SPI总线对它的寄存器进行配置实现的,主要设置收发缓冲区的大小和起始地址、设置以太网过滤器、配置MAC层、物理层和LED指示灯等[4]。STM32F103可通过SPI接口发送命令,访问ENC28J60的相关寄存器来完成相应的操作。下面给出ENC28J60接收/发送数据包的程序框架:
ENC28J60发送数据包程序框架如下:
voidenc28j60PacketSend(unsignedintlen,unsignedchar*packet)
{
enc28j60Write(EWRPT,(TXSTART_INIT)&0xFF);
enc28j60Write(ETXND,(TXSTART_INIT+len)&0xFF);
enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM,0,0x00);
enc28j60WriteBuffer(len,packet);enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,
ECON1,EC
ENC28J60接收数据包主要框架程序如下:
unsignedintenc28j60PacketReceive(unsignedintmaxlen,unsignedchar*packet)
{
enc28j60Write(ERDPT,(NextPacketPtr));
NextPacketPtr=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);
NextPacketPtr|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)<<8;
len=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,
0);
len|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)<<8;
rxstat=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);
rxstat|=enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)<<8;
enc28j60ReadBuffer(len,packet);
return(len);
}
3.4高层协议uIP移植和应用层主程序的设计
完成了MAC层及物理层协议的驱动程序,要想实现嵌入式以太网服务器与其它设备之间的通信,还要在嵌入式系统中实现更高层的TCP/IP协议。本文选用uIPl.0协议栈并对其适当精简来实现功能。uIP协议栈由瑞典计算机科学研究所的AdamDunkels开发的免费、开发源代码的协议栈[7]。在本系统中程序首先用中断的方式接收ZigBee协调器发送给主处理器串口的数据,并设置接收队列暂存这些数据。在主程序中的主要任务是不断监测串口的标志位,当有数据时,把数据添高位封装后,通过ENC28J60的以太网接口发送到上位机监测软件中。其工作流程图见图6所示。
4结语
本文设计的基于STM32F103C8T6和ENC28J60的嵌入式服务器,利用ZigBee传感网络发送BMP085采集的压力和温度数据到服务器,服务器再通过以太网发送至监控端,设计稳定可靠,为油田业信息化监控提供了一个有效方案。
20211121_619a32b5a1ff7__基于STM32F103C8T6和ZigBee的油井压力监控系统研究