datasheet

用SoC的DMA方式记录井下钻具的振动

2008-06-30来源: EDN_china 关键字:DMA方式  DMA控制器  DMA技术  SoC  初始化  井下  ADC  擦除程序  

  从上个世纪九十年代起,电子技术在钻井井下得到应用。但井下钻具的振动会给很多传感器带来不利影响。

  特别是对测量井下钻头姿态的惯性导航传感器影响巨大,在随钻振动环境中,如果对信号不作处理,根本就不能测量出正确的井斜角和方位角,也就无法实现井眼轨迹随钻控制的要求。本文介绍应用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

关键字:DMA方式  DMA控制器  DMA技术  SoC  初始化  井下  ADC  擦除程序  

编辑:孙树宾 引用地址:http://www.eeworld.com.cn/gykz/2008/0630/article_1036.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于FPGA的多路数字量采集模块设计
下一篇:射频IC MFRC522在智能仪表中的应用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm32串口DMA方式发送数据

是:当清除IDLE标志位后,必须有接收到第一个数据后才触发,一旦接收的数据断流,即产生IDLE中断。 这里判断接收数据完成是通过串口的空闲方式实现,即当串口的数据流停止后,就会产生IDLE中断,在中断里做关闭串口接收的DMA通道。一是防止又有数据接收到,产生干扰;二是便于DMA重新配置赋值。清除DMA中断标志位从DMA寄存器中获取接收到的数据字节数(对于上层应用很有必要)重新设置DMA下次需要接收到的数据字节数(必须大于预期的接收值长度,否则计数减到0时又会复位,覆盖接收缓冲区中的数据,导致数据丢失!)开启DMA通道,等待下一次的数据接收可以设置信号量,通知应用程序数据接收完成,传递接收的数据长度,便于应用程序对数据的处理。有待
发表于 2018-09-09

STM32CubeMX配置SDIO模式(非DMA方式)

1.问题描述:使用STM32CubeMX配置SDIO模式,读取SD卡的信息。2.实际操作:(1)CubeMX软件界面配置:I.首先是Pinout界面选择:  II.接下来是Configuration界面,点击下图的SDIO,其中串口1是为了输出调试信息。 在SDIO选项里,习惯性开启全局中断和DMA使能,实际测试中并未用到。其他全部默认。 (2)KEIL5生成代码首先贴出之前找到的一份参考资料。后续的一些SD读取操作可以参考该文章。 http://www.stmcu.org/module/forum/thread-604576-1-1.html 本文章里最核心的配置部分
发表于 2018-07-19

STM32CubeMX串口接收数据(DMA方式,HAL库)

使用DMA方式可以减轻CPU负担,此例子相关配置可以参考STM32CubeMX串口接收数据(中断方式,HAL库)(1)设置USART1中断,NVIC配置如下图 (2)设置USART1的DMA,如下图 注意:要将RX的模式设置为circular ,否则只能接收一次,如果这里不作设置,网上也有其他方法介绍代码实现多次接收的,但既然用到了STM32CubeMX就尽量发挥最大作用吧! (3)生成项目工程(4)在main.c里设置变量以及启动DMA接收/* USER CODE BEGIN PV *//* Private variables
发表于 2018-06-19
STM32CubeMX串口接收数据(DMA方式,HAL库)

STM32F407ZET6 USART DMA方式收发数据

串口采用DMA方式收发数据有两种不同的方式,第一种方式:采用DMA传输完成中断进行发送和接收;第二种方式:采用串口总线空闲方式收发数据。这两种方式第二种方式更好一些,因为第二种方式可以收发不定长度的数据帧,然而第一种方式不能。但是第二种方式的逻辑复杂一些,收发过程之前都要判断总线是否是空闲。在此,以USART2的DMA收发方式举例:一、使用DMA传输完成中断收发整体思路:上位机发送四个字节的数据,STM32接收完成后进入DMA中断中,发送下位机STM32定义好的数据给上位机并且清除DMA传输完成中断标志位,最后进入发送完成中断,关闭发送通道,清除DMA发送完成标志位。在上述思路之前,要进行的自然是串口配置、DMA配置以及中断配置
发表于 2018-06-08

STM32 串口采用DMA方式接收数据

环境:主机:WINXP开发环境:MDK4.23MCU:STM32F103CBT6说明:串口可以配置成用DMA的方式接收数据,不过DMA需要定长才能产生接收中断,如何接收可变长度的数据呢?方法有以下3种:1.将RX脚与一路时钟外部引脚相连,当串口一帧发完,即可利用此定时器产生超时中断.这个实时性较高,可以做到1个字节实时监测.2.不改变硬件,开启一个定时器监控DMA接收,如果超时则产生中断.这个实时性不高,因为超时时间必须要大于需要接收帧的时间,精度不好控制.3.STM32单片机有的串口可以监测总线是否处于空闲,如果空闲则产生中断.可以用它来监测DMA接收是否完毕.这种方式实时性很高.本文采用第3种方式.在波特率576000下
发表于 2018-06-08
STM32 串口采用DMA方式接收数据

STM32串口通信USART(二)---DMA方式

刚接触到DMA的时候,一头雾水,只知道方便、快捷,但不知道该怎么使用,后来弄明白原理之后就轻松了很多,但理解的还不是很透,所以希望把自己的理解写出来,和大家分享一下!形象的说,DMA就像一个快递中转站,负责把数据从始发地搬到目的地,只要他负责的仓库有货,他就开始搬运,没货就等着,除非你把它关了。就像机器人搬东西一样,首先要告诉它从哪搬,搬到哪?东西有多大?需要搬几趟?需要搬运的东西是不是都在一起?搬完后是不是扔在那就行了,还是要放好?到芯片里,数据就是货物,把数据从一个地方移到另一个地方。你只要告诉它怎么移到就行了,就像控制一个机器人一样。并不是多有的外设都能有机会使用DMA通道,而且,一条通道上被外设使用后,通道上的其他外设
发表于 2018-06-08

小广播

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">