用SoC的DMA方式记录井下钻具的振动
扫描二维码
随时随地手机看文章
引言
从上个世纪九十年代起,电子技术在钻井井下得到应用。但井下钻具的振动会给很多传感器带来不利影响,特别是对测量井下钻头姿态的惯性导航传感器影响巨大,在随钻振动环境中,如果对信号不作处理,根本就不能测量出正确的井斜角和方位角,也就无法实现井眼轨迹随钻控制的要求。本文介绍应用SoC芯片中的DMA技术对振动的高速采集和存储功能的实现方法,并给出了钻井环境中测试的结果。
方法的提出
传统的数据采集方法采用CPU直接控制的方式进行数据采集,数据传送需要经过CPU的中转才能存入存储器,传送速度慢且采集速率受到CPU的限制,极大影响了系统的采样频率,不能满足对振动信号高速采集的要求。而在DMA传送方式下,数据传送不经过CPU,由DMA控制器来实现内存和外设之间数据的直接快速传送。在XTCS的测控系统中,CPU采用的SoC芯片中集成有DMA,将其与其它器件协同工作就可以实现采集与存储的同时进行,达到高速采集信号的目的,得到高保真的井下振动信号。
系统介绍
该采集系统以C8051F060 SoC为核心,C8051F060内部集成有ADC和DMA。另外,以大容量存储芯片K9F2808作为数据存储器。系统结构如图1所示。
图1 信号采集系统结构图
该系统应用于井下相关信号的检测装置。由于通过压力与振动传感器所采集的压力和振动信号比较微弱,故还需放大电路对信号进行调理放大。传感器的输出均为模拟信号,采集数据时会受到噪声的干扰,为了消除噪声并提高电路的共模抑制比和输入阻抗,该采集放大电路使用了前置输入缓冲器三运放结构。由于SoC内的ADC0只能采集正信号,因而在经过调理放大电路后设有偏置电路,将-5V ~ +5V的电压转换为0V~+2.5V,以利于信号的采集。
CPU控制多路选择开关进行信号的采集,然后通过ADC转换,在DMA的传送方式下,采集的数据直接写入存储器K9F2808中,在DMA存储数据的同时,ADC也一直进行采集。经软件测试,即采用SoC内集成的定时器2记录采集一页512个字节所需时间是1.277ms,而向片外存储器K9F2808写一页数据需要0.722ms。ADC采集一页的时间小于DMA向片外写一页数据的时间,因而可实现数据采集与存储的同时进行,而不会出现数据覆盖丢失现象,实现快速准确的数据采集。
硬件部分
C8051F060单片机与51系列单片机内核兼容,其内部集成有两个16位SAR(逐次比较)ADC和一个DMA功能模块。片内有4352个字节的数据存储器、64KB 闪存和64KB的数据存储器接口,可以进行系统编程。两个SAR ADC的精度为16位,可作为两个单端或一个差分转换器。若采用DMA直接将数据存储到RAM中,就不再需要额外的软件开销。
K9F2808UOC存储器是NAND结构的超大容量数据存储器件,在MP3、U盘、数码相机和PDA中有广泛的应用。其电源电压为1.7V~3.6V,体积小,功耗低,按页进行读写,按块擦除,通过I/O口分时复用作为命令/地址/数据,端口支持实时双向输入输出。将闪存的各控制端口与SoC的P3口连接,通用I/O口与SoC的P7口连接,通过控制SoC口线的输出,可实现对FLASH存储器的读、写、擦除操作。图2为芯片的接口电路图。
图2 芯片接口电路图
A/D转换与数据存储
C8051F060的ADC子系统中集成了跟踪保持电路、可编程窗口检测器和DMA接口。这两个ADC可以被配置为两个独立的单端方式ADC或组成一个差分对。数据转换方式、窗口检测器和DMA接口都可用软件特殊功能寄存器来控制。ADC控制寄存器ADCnCN中的ADnEN位被置为逻辑1时ADCn被使能。该系统选用的ADC0有4种转换启动方式,由ADC0CN中的ADC0启动转换方式位(AD0CM1,AD0CM0)的状态决定。该测控系统软件采用定时器3溢出进行定时的连续转换采集。将ADC初始化后,定时器3溢出一次ADC就自动采集一次。当采集完一页的数据后,在DMA传送方式下,采集的数据直接存储到片外的闪存存储器K9F2808中,并对该芯片进行读、写及擦除。
软件设计
在该测控系统中,采用VB语言编写上位机程序,采用C51语言编写下位机程序。通过上位机来控制下位机执行相应的任务。由于该系统的SoC集成有UART,可以通过PC机的RS232串口实现通信,下位机每次接收到任务命令后,下位机程序跳入到相应的串行中断程序中执行任务。下位机主程序包括连续启动DMA程序、调用片外存储器K9F2808UOC的写程序,将用DMA方式采集的512字节送到K9F2808中,实现采集与存储同步进行。主程序流程图如图3所示。子程序主要包括:晶振初始化、端口初始化、串口初始化、ADC初始化、DMA初始化、定时器3初始化、片外存储器K9F2808UOC的擦除程序、延迟程序等。
图3 下位机主程序流程图
这里,晶振初始化主要完成对外部振荡器使用的配置;端口初始化完成对端口p0~p7的初始化配置;串口初始化完成对定时计数器T0和T1的配置及对波特率的设定;ADC0初始化对ADC0进行配置;DMA0初始化主要完成对DMA0的配置,设置外部数据存储器开始值,ADC0开启模式等;定时器3初始化主要完成对重装载值的设定,激发ADC0进行采集;片外存储器K9F2808的擦除程序完成对K9F2808内数据的擦除。
性能测试与室内实验
硬软件调试结束后,我们把测试电路和传感器送到石油仪器仪表质量检验中心的标准振动台上,在(10g,1000Hz)、(25g,100Hz)、 (25g,200Hz)、(25g,1000Hz)条件下对测试系统进行标定,证明对振动幅度的测量精度为1%,振动频率的测量精度为5‰,这样的精度可以满足导向钻井系统对振动测量的要求。
参考文献:
1. 周静,付鑫生.利用敏感井底钻具振动传递地面信息的方法[J] . 石油学报,2005.2
2. 童长飞. C8051F系列单片机开发与C语言编程[M]. 北京:北京航空航天大学出版社,2005
3. C8051F060X Data sheet
4. K9F2808(16)Q(U)OC datasheet