ADC設(shè)計(jì)
根據(jù)本系統(tǒng)對(duì)ADC分辨率為16位、轉(zhuǎn)換速率大于125KSPS、低功耗的要求,決定選用ADI公司的AD976A。該芯片具有16位的分辨率,轉(zhuǎn)換速率為200KSPS,工作電壓為+5V,最大功耗僅為100mW。
對(duì)AD976A的轉(zhuǎn)換控制和數(shù)據(jù)的輸出主要涉及到R/C、CS和BUSY三個(gè)引腳。AD976A提供了兩種轉(zhuǎn)換模式:一種是CS一直為低電平,ADC和DSP讀數(shù)據(jù)僅由R/C控制;另一種是ADC和DSP讀數(shù)據(jù)由CS和R/C共同控制。由于C542不能讓ADC的片選信號(hào)一直處于選中狀態(tài),所以只有選用第二種模式,如圖3所示。AD976A在CS的下降沿而R/C又為低電平時(shí)開始模數(shù)轉(zhuǎn)換,在CS的下降沿而R/C又為高電平時(shí)把數(shù)據(jù)送到數(shù)據(jù)總線。BUSY信號(hào)在模數(shù)轉(zhuǎn)換開始時(shí)變?yōu)榈碗娖剑Y(jié)束時(shí)變?yōu)楦唠娖健?/div>
進(jìn)行轉(zhuǎn)換時(shí), C542首先經(jīng)過CPLD內(nèi)部的組合和時(shí)序邏輯電路,向AD976A發(fā)兩個(gè)低電平脈沖R/C和CS,其中R/C脈沖寬度為166.7ns,CS脈沖寬度為83.3ns ,CS的下降沿在R/C的下降沿之后41.7ns,而上升沿卻在R/C的上升沿之前41.7ns。由于這時(shí)CS為下降沿,R/C為低電平,所以AD976A開始采集數(shù)據(jù)、進(jìn)行ADC,BUSY信號(hào)也隨之變?yōu)榈碗娖。轉(zhuǎn)換結(jié)束,BUSY變?yōu)楦唠娖,?jīng)過CPLD的邏輯電路后接到C542的INT2引腳,引起C542中斷。C542接收到中斷后經(jīng)CPLD向AD976A發(fā)一個(gè)CS脈沖,由于這時(shí)的CS為下降沿,R/C為高電平,所以AD976A把數(shù)據(jù)放到數(shù)據(jù)總線上,C542開始讀總線上的數(shù)據(jù)。
CPLD邏輯電路設(shè)計(jì)
CPLD是整個(gè)系統(tǒng)的控制邏輯電路部分。在CPLD內(nèi)要實(shí)現(xiàn)的主要功能為:
① 產(chǎn)生AD_TRIG同步脈沖
當(dāng)發(fā)聲晶體發(fā)聲后,八個(gè)DSP就要同時(shí)采集數(shù)據(jù),AD_TRIG脈沖就是解決“發(fā)聲”與“采集”的同步問題以及八個(gè)DSP的“采集”同步問題的。
AD_TRIG脈沖的周期是由主CPU決定,由DSP1寫入CPLD。其它七個(gè)DSP不向CPLD寫入AD_TRIG脈沖的周期,它們只是AD_TRIG脈沖的接收者。
② 產(chǎn)生控制ADC的R/C和CS信號(hào)
R/C和CS信號(hào)是在AD_TRIG同步脈沖的基礎(chǔ)上產(chǎn)生的。在產(chǎn)生R/C和CS的時(shí)序邏輯電路中,有些觸發(fā)器的時(shí)鐘就是AD_TRIG脈沖,這樣八個(gè)DSP的采集、轉(zhuǎn)換就被同步。
③ 產(chǎn)生FIRE點(diǎn)火脈沖
FIRE點(diǎn)火脈沖是在CPLD內(nèi)產(chǎn)生的使發(fā)射晶體發(fā)聲的脈沖。當(dāng)DSP1接到主CPU傳來的采集數(shù)據(jù)的命令時(shí),就向CPLD發(fā)出產(chǎn)生FIRE脈沖的命令,CPLD經(jīng)其內(nèi)部組合和時(shí)序邏輯電路產(chǎn)生FIRE脈沖,然后送往主CPU,主CPU接到該脈沖后向發(fā)射模塊發(fā)命令,使發(fā)射晶體發(fā)聲。在設(shè)計(jì)時(shí),產(chǎn)生FIRE脈沖的時(shí)序邏輯電路的有些觸發(fā)器也是以AD_TRIG脈沖為時(shí)鐘的,這樣就解決了發(fā)聲晶體“發(fā)聲”與DSP“采集”的同步問題。
④ 作為DSP與主CPU之間的通信接口
主CPU的命令要傳給DSP,八個(gè)DSP最后處理過的數(shù)據(jù)也要傳給主CPU,因此,在CPLD中設(shè)計(jì)了一個(gè)同步串口。設(shè)計(jì)此串口要注意的是當(dāng)DSP向主CPU傳送數(shù)據(jù)時(shí)八個(gè)DSP不能發(fā)生沖突。下面的VHDL程序是本設(shè)計(jì)中對(duì)這一問題的解決,其中bfsx1~bfsx8是DSP1~DSP8的發(fā)送幀同步脈沖,bdx1~bdx8是DSP1~DSP8的緩沖串行口數(shù)據(jù)發(fā)送端發(fā)送的數(shù)據(jù),fsx、dx是從CPLD輸出的發(fā)送幀同步脈沖和發(fā)出的數(shù)據(jù)。
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內(nèi)要通過編程實(shí)現(xiàn)對(duì)數(shù)據(jù)的如下處理:
①對(duì)數(shù)據(jù)進(jìn)行平均運(yùn)算
這是一個(gè)對(duì)所有數(shù)據(jù)求平均值的運(yùn)算,此平均值即為噪聲平均值的二倍。
②求聲波的最大振幅及其時(shí)間
這是一個(gè)對(duì)所有數(shù)據(jù)的絕對(duì)值求最大值的運(yùn)算,目的是進(jìn)行自動(dòng)增益控制(AGC)。
③對(duì)數(shù)據(jù)進(jìn)行抽取濾波
聲波信號(hào)的頻率不超過20KHz,根據(jù)抽樣定理,采樣頻率不小于40KHz就可不失真的恢復(fù)出原信號(hào),但是為了提高信噪比,設(shè)計(jì)的采樣頻率均大于120KHz,為過采樣,這就需要在DSP中設(shè)計(jì)一個(gè)抽取濾波器,對(duì)過采樣后的數(shù)據(jù)進(jìn)行抽取濾波。
④對(duì)數(shù)據(jù)進(jìn)行壓縮
聲波信號(hào)是測(cè)井系統(tǒng)本身產(chǎn)生的,具有較大的數(shù)據(jù)冗余度,所以在上傳給主CPU之前要對(duì)其進(jìn)行壓縮。本系統(tǒng)使用的是差分預(yù)測(cè)編碼DPCM。
C54x的源程序可以使用匯編或C/C++語言編寫。但是,關(guān)鍵的DSP程序一般還要用匯編語言編寫,因?yàn)椋菏紫,大多?shù)廣泛使用的高級(jí)語言如C,并不適合描述典型的DSP算法。典型的DSP應(yīng)用都由大量計(jì)算的要求,并有嚴(yán)格的開銷限制,使得程序的優(yōu)化必不可少;其次,DSP結(jié)構(gòu)的復(fù)雜性,如多存儲(chǔ)器空間、多總線、不規(guī)則的指令集、高度專門化的硬件等,使得用C難以為其編寫高效率的編譯器;此外,對(duì)于底層硬件的控制,用匯編語言編寫調(diào)試將更加直觀高效。本系統(tǒng)的DSP程序主要是大量的計(jì)算,所以在實(shí)現(xiàn)時(shí)采用了匯編語言編寫。
結(jié)語
本系統(tǒng)經(jīng)過調(diào)試,證明總體設(shè)計(jì)思路正確,方案可行,滿足性能要求。另外,本系統(tǒng)還可通過在DSP中編寫不同的程序,來實(shí)現(xiàn)對(duì)不同信號(hào)的采集與處理!
參考文獻(xiàn)
1 洪有密. 測(cè)井原理與綜合解釋. 石油大學(xué)出版社. 1993
2 劉樹棠, 黃建國. 離散時(shí)間信號(hào)處理. 西安交通大學(xué)出版社. 2001
3 TMS 320 C54X DSP Reference Set. Volume 1: CPU and PeripheralsTexas Instruments Inc. 1997
4 TMS 320 C54X DSP Reference Set. Volume 2: Mnemonic Instruction Set. Texas Instruments Inc. 1996
5 TMS 320 C54X DSP Reference Set. Volume 3: Algebraic Instruction Set. Texas Instruments Inc. 1998





