,,,
(中国石油集团工程技术研究院,北京 102206)
泥浆脉冲是石油钻井领域应用最广泛的井下数据传输方式[1],作为“十三五”深井超深井钻完井技术发展目标[2],中国石油集团工程技术研究院研制的高速大容量信息传输钻杆(简称信息钻杆)也使用泥浆脉冲作为备份信道。位于井下的泥浆脉冲发生器产生泥浆脉冲压力信号,包含信息的编码后的压力脉冲序列通过水眼内的循环泥浆上行到地面,由安装在立管上的压力传感器采集,立管压力信号通过硬件滤波、模/数转换、去噪解码后得到编码信息。
去噪大多通过基于傅里叶变换的滤波算法实现[3-4],由于泥浆脉冲信号是典型的非稳定信号,其噪声与信号高频有效成分在频域重叠在一起,难以通过傅里叶分析去除,小波分析有更好的去噪效果[5-7]。虽然解码成功率更高,但与傅里叶变换相比,小波分析计算量更大。在实际应用中,主计算机运行的程序往往包含泥浆脉冲信号解码、流程控制、信号处理及显示等功能,有些地质参数信号反演需要大量耗时的卷积计算。使用小波分析去噪算法后,主计算机系统负担明显增加,软件运行流畅度降低,实时传输的泥浆脉冲数据往往无法及时处理,导致井下测量数据丢失。
泥浆脉冲信号网络解码器使用高性能单板机完成小波分析去噪,以此来分担主计算机的计算工作量,并通过高速网络将含有效信息的波形信号等数据传回主计算机。为了实现实时数据采集,采用有源低通滤波器对立管压力信号完成硬件滤波,滤波后的信号由模/数转换器(ADC)转换为数字信号,经嵌入式单片机缓冲后转发给高性能单板机实施小波去噪等后续数字信号处理,完成了高速、低成本泥浆脉冲信号网络解码。
泥浆脉冲压力信号由安装在立管上的压力变送器采集,硬件低通滤波器对采集到的泥浆脉冲立管压力信号进行预处理,可以消除有效信号之外的较高频率噪声,例如井场柴油发电机产生的50/60 Hz工频干扰等。图1给出了经硬件滤波、模/数转换后的典型泥浆脉冲立管压力信号。
图1 硬件滤波后的泥浆脉冲信号
由于泥浆脉冲发生器和循环泥浆信道的限制,泥浆脉冲的传输速率最高仅有数位每秒,信号所需最高带宽也仅有几Hz。泥浆脉冲信号的主要噪声由石油矿场用往复泵(泥浆泵)产生,泥浆泵有单缸泵和多缸泵之分,额定冲次为每分钟几十到上百次,即其产生的噪声频率约为几Hz,与泥浆脉冲信号在频谱上重叠在一起。对于现场服务工程师来说,观察泥浆泵噪声的细节有助于判断泥浆泵“上水”不均匀、空气包压力异常等干扰泥浆脉冲信号的异常工况,方便及时处理排除干扰[8]。
需要仔细确定硬件低通滤波器的截止频率及模/数转换器的采样频率,以保留有效信号并滤除噪声。实验表明,采样率设定为100 sps以上,低通滤波器截止频率设定为20 Hz即可满足要求,实际采样率设定为175 sps。
随着井深的增加,泥浆泵泵压不断上升,而井底传来的压力脉冲幅度却越来越小,为了保证采样精度,模/数转换器的采样分辨率选定为16位,可满足实际作业需要。
经过硬件滤波和模/数转换后的信号通过小波分析去噪数字信号处理算法进行解码处理以还原编码信息。一维离散小波变换的Mallat算法包含分解与重构两部分[9],其分解算法公式如下:
(1)
(2)
重构算法公式如下:
(3)
小波去噪效果的优劣与基函数的选择、分解层数、阈值处理方法有关。这里使用强制去噪,将小波分解结构中的高频系数全部置零,即滤掉所有高频部分,然后完成小波重构[10]。使用强制去噪实现基线漂移修正及信号解码,分解层数分别是10层和8层。
经多种主流计算机实测,对10 500个离散数据点(60 s采样)的泥浆脉冲数据进行一次完整的基线漂移修正及信号解码大约耗时2~5 s。为了避免遗漏编码信息,需要每隔5~10 s重复一次计算。
为了满足小波去噪计算的需求,考察了台湾研扬科技基于英特尔凌动处理器的UP创客板[11]、树莓派(Raspberry Pi)。最终确定选择树莓派,原因在于该单板机具有较高的计算能力和性价比、丰富的开源硬件和软件资源以及适合电池供电的低能耗等特点。
作为泥浆脉冲信号网络解码器的计算核心,第三代树莓派型号B+的处理器为4核Cortex-A53博通BCM2837B0,主频为1.4 GHz,配备了千兆以太网口,具有I2C、SPI、UART等外设接口[12]。
树莓派可运行Linux、Windows10 IoT等多种操作系统,为了更好利用外设资源,选用官方建议的基于Linux发行版Debian的Raspbian操作系统,编程语言选用数学计算友好的Python[13]。由于Raspbian不是实时操作系统,为了实时采集立管压力数据,选用了另一款开源硬件Arduino Nano作为嵌入式控制器从模/数转换器获取数据,其板载MCU是以16 MHz频率运行的Atmel ATmega328P[14],最终完成的泥浆脉冲信号网络解码器系统结构如图2所示。
图2 系统结构示意图
为了隔离井场危险区域,使用了模拟量的隔离栅(安全栅),立管压力变送器采集泥浆脉冲信号,以电流环的方式输出到隔离栅并转换为1~5 V的电压信号,经硬件有源低通滤波器滤波后由模/数转换器数字化为离散数字信号,通过UART串口发送给Arduino Nano并保存在其MCU内存中,树莓派定时通过I2C总线从Arduino Nano内存读取数据,显然Arduino Nano起到了数据缓冲的作用,保证了立管压力的实时采集。树莓派完成信号的小波去噪及解码,解码信息及原始波形数据通过以太网发送给外部的主计算机。
采样率为175 sp/s的16位模/数转换器每秒钟可以产生将近3 KB的数据。对于树莓派而言,使用I2C总线与外设通信是较好的选择。其常规通信速率为100 kbps,仅用2根线就可以实现多主机、多从机之间的通信。模/数转换器选用了TI推出的带UART接口的ADS112U04[15],与I2C及SPI接口的同系列的模/数转换器相比,ADS112U04可以通过速率高达120 kbps的UART自动连续发送采样数据,无需通过查询指令提取,此举减轻了Arduino Nano的工作压力。所有通信环节的传输速率满足实时立管压力数据的传输需求。
树莓派及Arduino均有成品板可供选购,仅需设计包含有源低通滤波器和模/数转换器的树莓派扩展板(HAT)。该HAT完整的电路图如图3所示。图中P1为供电输入VIN和隔离栅的立管压力电压信号输入插座。
图3 树莓派HAT电路图
VIN为两组TPS5430低纹波稳压器[16]供电,输出正负5 V电压为有源滤波器和模/数转换器供电,同时为Arduino Nano板供电,该板自带稳压器并由二极管自动选择是否使用USB接口电源,通过插座P2与HAT板相连(UART),通过P3与树莓派的40PIN引脚相连(I2C)。
立管压力电压信号经由运放LM358[17]组成的具有巴特沃斯响应的单位增益Sallen-Key滤波器[18],该二阶滤波器截止频率设计为20 Hz,用±5 V双电源供电以保证直流响应。使用ADS112U04模/数转换器的AIN0单端输入,采样结果通过UART发送给Arduino Nano。ADS112U04自带电压基准和振荡器,因此外围器件较少。
由于选用了开源硬件,泥浆脉冲信号网络解码器的软件模块大多有现成代码或库,编程简便易行,这里主要说明与模/数转换器的通信流程。
此部分的嵌入式编程使用C语言在Arduino开发环境版本1.8.5中完成,包含通过串口设置并读取模/数转换器的程序(Sketch)和作为I2C从机为树莓派提供采样数据的程序。
Arduino开发环境提供了大量基础函数,串口通信通过HardwareSerial类实现,该类实例化为Serial对象:在Begin初始化时设定通信波特率及格式(8-N-1),可用available函数判断是否收到数据,用read函数读取,而重载的几个wirte函数可用于向串口写入不同类型的数据。
ADS112U04的2线UART兼容串口以字节方式传送数据,每个字节有1个起始位(S)、8个数据位(先发送LSB)和一个停止位(P)。该串口具有自动波特率检测功能,主机(这里是Arduino Nano)在发送指令之前先发送同步字(0x55),ADS112U04即可自动识别该同步字并以该波特率返回应答字节,如图4所示。
图4 模/数转换器指令应答
图5 模/数转换器初始化及读取流程
图5给出了ADS112U04初始化和自动数据读取的流程图。
上电后,作为主机的Arduino Nano先发送复位指令,等待ADS112U04复位完成后,通过WREG指令向ADS112U04的5个寄存器写入需要设置的参数,将其采样速率Data rate设置为175 sps、单端读取AIN0以及自动数据读取模式,之后用START/SYNC指令启动数据采集,每次采样数据为16位(LSB与MSB),自动发送给主机。
Arduino开发环境提供了许多扩展库,用于封装硬件底层程序或提供特殊应用。Wire库实现了I2C通信功能,该库定义了实例化为Wire对象的TwoWire类,与HardwareSerial类相同,均基于Stream流操作类,其Begin函数可设置从机地址,通过onRequest函数在从机模式下注册用于处理主机请求的函数,一旦收到树莓派主机发来的读取数据请求,在处理主机请求的函数中使用write函数返回数据。
此部分使用Python语言编程,Raspbian操作系统版本为9.3,包含通过I2C接口从Arduino Nano读取立管压力数据的程序、小波去噪及解码算法程序和作为UDP服务器为主计算机(客户端)提供波形及解码信息的程序。
可用Raspberry Pi Configuration工具使能I2C接口。树莓派提供了SMBus库用于I2C接口通信,完成库安装后,通过read_byte函数从指定地址的从机读取数据,注意3B+使用的I2C设备编号为1,默认通信速率为100 kbps。
小波分析的Mallat算法容易用计算机程序实现[9],这里不赘述,未用到Python的Math库。通过套接字(Socket)编程将树莓派作为一个UDP服务器,通过以太网交换数据[19]。与TCP相比,UDP因为无需应答而更快。主计算机作为泥浆脉冲信号网络解码器的客户端,读取立管压力波形数据及解码后的编码信息。
经过地面螺杆钻具试验台的打压试验,泥浆脉冲信号网络解码器功能正常,满足设计要求。中石油工程技术研究院成功研制了5英寸全系列高频磁耦合有缆钻杆系统。经过大庆油田、吉林油田的多次前期现场试验,在国内首次完成了全系统、全功能磁耦合有缆钻杆现场试验,通信速率为100 kbps。作为信息钻杆的备用信道,泥浆脉冲信道能够避免因为通信故障而起钻,可节省大量施工时间及费用。