引言
随着传感器由过去的单个变为阵列结构,仪器要处理的信号也由过去单一的参数信号变为复杂的图像信号,同时,对信号的采集与处理也变得越来越复杂,研制一种阵列声波信号采集与处理系统,并进而开发出一种阵列声波测井仪,成为目前我国石油测井仪器发展的迫切需要。为此本文设计了一套基于DSP的阵列声波信号采集与处理系统,此系统将作为正在研制的阵列声波测井仪中的一部分,应用于油田勘探中。
系统总体方案设计
阵列声波测井仪由声系、电子线路和钢外壳组成。声系在最下端,由发出声波的发射晶体和接收声波并把其转换成电信号的传感器阵列组成。电子线路分为供电模块、主CPU模块和采集模块。其中,主CPU模块是阵列声波测井仪的控制部分,它一方面把地面部分传给采集模块和声系的参数传给采集模块和声系,另一方面把采集模块传上来的数据传给地面部分。采集模块即为阵列声波采集与处理系统,它的一端接声系的传感器阵列,另一端接主CPU,主要功能为在主CPU的控制下把前端传感器阵列传过来的信号采样、数字化并进行一系列的处理,然后把处理结果上传给主CPU。
根据阵列声波采集与处理系统的性能要求和可靠性与低功耗设计原则,本设计决定采用以DSP芯片为核心的八通道实现方案,如图1所示。由于前端传感器阵列送来的数据信号比较微弱,要先由放大器对信号进行放大,同时此放大器也可以有效地减弱或消除后端ADC对前端模拟声波输入信号的影响。放大器之后是ADC,从放大器到DSP形成一个采集与处理的通道,系统中这样的通道共八个。而图1中的CPLD是系统的控制逻辑部分。此外,考虑到系统可靠性和实时性的要求,本系统设计成每个通道都有一个DSP处理器而不是八个通道共用一个DSP处理器。
图1 阵列声波信号采集与处理系统总体结构示意图
DSP设计
DSP芯片
由于整个阵列声波测井仪的其它芯片均为+5V供电,阵列声波采集与处理系统作为测井仪中的一部分,如果所选DSP芯片不是+5V供电,则需用电源转换芯片进行电压转换,这不仅使电路变得复杂,而且也不利于系统性能提高。所以本设计选用了TI公司的DSP芯片—TMS320C542(以下简称C542)。
C542除具有TMS320C54x的一般优点外,其单周期定点指令执行时间为25ns,运行速度相对较高,能够完成本系统采集与处理功能;且带有一个 BSP自动缓冲串口和一个TDM时分复用串口,两者都可用作SP标准同步串口。此外,无论是内核还是I/O引脚工作电压均为+5V,所以使用时不需电压转换芯片。
自举加载设计
传统DSP系统程序代码的引导装载多以并行EPROM作为应用程序的存储器方式,其最大弊端在于EPROM不支持在线擦写,这会对系统的调试带来很大的不便,特别是对于表贴封装的存储器,此方法基本不可用。
在本系统的设计中,采用了可以在线擦写的FLASH代替EPROM作为程序代码的存储器。因而从根本上克服了传统方法在系统调试上带来的诸多不便,对表贴封装的存储器尤为适用。调试过程中,直接将程序代码通过C542写入FLASH中,重新上电后C542即可按照FLASH的方式执行Bootloader 操作,极大的降低了硬件系统调试的难度。
本系统采用8位并行加载。C542复位期间检查MP/MC引脚是否为低电平,若不是,则从外部程序存储器0FF80h起执行用户程序;若是,则从片内 ROM的0FF80h起执行程序。启动制造商在ROM的自举加载器程序时,首先应进行初始化,然后检查INT2引脚,若有效,则从HPI-RAM自举加载;若无效,则使I/O口选通信号IS为低电平,从地址为0FFFFh的I/O口读入自举程序选择字(BRS)。BRS的低8位决定了自举加载的方式,若 BRS的低2位为01,则为8位并行加载,然后自举加载器依据FLASH的地址(BRS中的高6位 + 0000000000)就可读取自举表了。自举加载器将FLASH中的程序代码全部送到程序存储器之后,立即转移到目的地址,并开始执行程序代码。
本设计中FLASH芯片选用的是AMD公司的Am29F010,该芯片容量为1Mbit。因为C542只能寻址64K 地址,所以Am29F010的A16引脚接地。
DSP在线加载系统的硬件设计如图2所示。设计时没有让DS直接接CE,而是先让A14、A15分别接一个非门,这两个非门的输出端和IS一起接到一个或门上,此或门的输出端和DS一起接一个与门,与门的输出端再接CE。这样设计使Am29F010的48K至64K地址空间成为数据和I/O复用空间,自举加载时可从Am29F010的地址为0FFFFh的I/O口读入自举程序选择位。
图2 DSP在线加载硬件设计图
ADC设计
根据本系统对ADC分辨率为16位、转换速率大于125KSPS、低功耗的要求,决定选用ADI公司的AD976A。该芯片具有16位的分辨率,转换速率为200KSPS,工作电压为+5V,最大功耗仅为100mW。
对AD976A的转换控制和数据的输出主要涉及到R/C、CS和BUSY三个引脚。AD976A提供了两种转换模式:一种是CS一直为低电平,ADC和 DSP读数据仅由R/C控制;另一种是ADC和DSP读数据由CS和R/C共同控制。由于C542不能让ADC的片选信号一直处于选中状态,所以只有选用第二种模式,如图3所示。AD976A在CS的下降沿而R/C又为低电平时开始模数转换,在CS的下降沿而R/C又为高电平时把数据送到数据总线。 BUSY信号在模数转换开始时变为低电平,结束时变为高电平。
图3 AD976A转换模式二图
进行转换时, C542首先经过CPLD内部的组合和时序逻辑电路,向AD976A发两个低电平脉冲R/C和CS,其中R/C脉冲宽度为166.7ns,CS脉冲宽度为 83.3ns ,CS的下降沿在R/C的下降沿之后41.7ns,而上升沿却在R/C的上升沿之前41.7ns。由于这时CS为下降沿,R/C为低电平,所以 AD976A开始采集数据、进行ADC,BUSY信号也随之变为低电平。转换结束,BUSY变为高电平,经过CPLD的逻辑电路后接到C542的INT2 引脚,引起C542中断。C542接收到中断后经CPLD向AD976A发一个CS脉冲,由于这时的CS为下降沿,R/C为高电平,所以AD976A把数据放到数据总线上,C542开始读总线上的数据。
CPLD逻辑电路设计
CPLD是整个系统的控制逻辑电路部分。在CPLD内要实现的主要功能为:
① 产生AD_TRIG同步脉冲
当发声晶体发声后,八个DSP就要同时采集数据,AD_TRIG脉冲就是解决“发声”与“采集”的同步问题以及八个DSP的“采集”同步问题的。
AD_TRIG脉冲的周期是由主CPU决定,由DSP1写入CPLD。其它七个DSP不向CPLD写入AD_TRIG脉冲的周期,它们只是AD_TRIG脉冲的接收者。
② 产生控制ADC的R/C和CS信号
R/C和CS信号是在AD_TRIG同步脉冲的基础上产生的。在产生R/C和CS的时序逻辑电路中,有些触发器的时钟就是AD_TRIG脉冲,这样八个DSP的采集、转换就被同步。
③ 产生FIRE点火脉冲
FIRE点火脉冲是在CPLD内产生的使发射晶体发声的脉冲。当DSP1 接到主CPU传来的采集数据的命令时,就向CPLD发出产生FIRE脉冲的命令,CPLD经其内部组合和时序逻辑电路产生FIRE脉冲,然后送往主 CPU,主CPU接到该脉冲后向发射模块发命令,使发射晶体发声。在设计时,产生FIRE脉冲的时序逻辑电路的有些触发器也是以AD_TRIG脉冲为时钟的,这样就解决了发声晶体“发声”与DSP“采集”的同步问题。
④ 作为DSP与主CPU之间的通信接口
主CPU的命令要传给DSP,八个DSP最后处理过的数据也要传给主CPU,因此,在CPLD中设计了一个同步串口。设计此串口要注意的是当DSP向主 CPU传送数据时八个DSP不能发生冲突。下面的VHDL程序是本设计中对这一问题的解决,其中bfsx1~bfsx8是DSP1~DSP8的发送帧同步脉冲,bdx1~bdx8是DSP1~DSP8的缓冲串行口数据发送端发送的数据,fsx、dx是从CPLD输出的发送帧同步脉冲和发出的数据。
fsx《= bfsx1 and bfsx2 and bfsx3 and bfsx4 and bfsx5 and bfsx6 and bfsx7 and bfsx8;
a1《= ( not bfsx1)and bdx1; a2《= ( not bfsx2)and bdx2;
a3《= ( not bfsx3)and bdx3; a4《= ( not bfsx4)and bdx4;
a5《= ( not bfsx5)and bdx5; a6《= ( not bfsx6)and bdx6;
a7《= ( not bfsx7)and bdx7; a8《= ( not bfsx8)and bdx8;
dx《= a1 or a2 or a3 or a4 or a5 or a6 or a7 or a8;
DSP编程
在DSP内要通过编程实现对数据的如下处理:
①对数据进行平均运算
这是一个对所有数据求平均值的运算,此平均值即为噪声平均值的二倍。
②求声波的最大振幅及其时间
这是一个对所有数据的绝对值求最大值的运算,目的是进行自动增益控制(AGC)。
③对数据进行抽取滤波
声波信号的频率不超过20KHz,根据抽样定理,采样频率不小于40KHz就可不失真的恢复出原信号,但是为了提高信噪比,设计的采样频率均大于120KHz,为过采样,这就需要在DSP中设计一个抽取滤波器,对过采样后的数据进行抽取滤波。
④对数据进行压缩
声波信号是测井系统本身产生的,具有较大的数据冗余度,所以在上传给主CPU之前要对其进行压缩。本系统使用的是差分预测编码DPCM。
C54x的源程序可以使用汇编或C/C++语言编写。但是,关键的DSP程序一般还要用汇编语言编写,因为:首先,大多数广泛使用的高级语言如C,并不适合描述典型的DSP算法。典型的DSP应用都由大量计算的要求,并有严格的开销限制,使得程序的优化必不可少;其次,DSP结构的复杂性,如多存储器空间、多总线、不规则的指令集、高度专门化的硬件等,使得用C难以为其编写高效率的编译器;此外,对于底层硬件的控制,用汇编语言编写调试将更加直观高效。本系统的DSP程序主要是大量的计算,所以在实现时采用了汇编语言编写。
结语
本系统经过调试,证明总体设计思路正确,方案可行,满足性能要求。另外,本系统还可通过在DSP中编写不同的程序,来实现对不同信号的采集与处理。