陸 鵬,王 晶,臧 越
(中海油田服務(wù)股份有限公司,天津 300450)
在井下儀器項(xiàng)目開發(fā)中,地層響應(yīng)信號(hào)較微弱(10~100 nA 級(jí))且環(huán)境噪聲較大,加上對(duì)高測(cè)速的需求,因此在進(jìn)行信號(hào)采樣時(shí)需要較高的精度和速度。此外,儀器使用了多頻率的發(fā)射信號(hào)和多個(gè)接收電極,因而需要使用多通道的采樣電路進(jìn)行信號(hào)采集。
為實(shí)現(xiàn)高速高精度多通道采樣,需要具有高采樣率和高位數(shù)的ADC 器件以及能夠?qū)崿F(xiàn)高速采樣的多通道接口電路。因FPGA 器件具有高速、可重構(gòu)性、管腳豐富等特點(diǎn),因此設(shè)計(jì)中使用FPGA 來實(shí)現(xiàn)ADC 的接口電路。文中基于ADI 公司的ADC——AD7674 進(jìn)行FPGA 并行接口設(shè)計(jì),最終實(shí)現(xiàn)多通道的高速高精度數(shù)據(jù)采集。
AD7674 是ADI 公司生產(chǎn)的18 位分辨率、最大非線性積分誤差2.5LSB、最高800 kSps 采樣率的單通道全差分輸入ADC[1]。它采用逐次逼近型(SAR)結(jié)構(gòu),具有低功耗、高精度、無延時(shí)等特點(diǎn)。AD7674 有WARP、NORMAL、IMPULSE 3 種轉(zhuǎn)換模式,在WARP模式下采樣率最高可達(dá)800 kSps。
數(shù)據(jù)通信接口有并口模式(8 位、16 位、18 位總線)和SPI 串口模式。采用SPI 串口通信的設(shè)計(jì)如文獻(xiàn)[2-3]中所討論,這種方式具有占用管較少、連接簡(jiǎn)單等優(yōu)點(diǎn),但傳輸速度受限于串行時(shí)鐘SCLK,如當(dāng)傳輸18 位串行數(shù)據(jù)時(shí)需要18 個(gè)SCLK 時(shí)鐘;而采用并口通信時(shí),18 位采樣數(shù)據(jù)同時(shí)出現(xiàn)在并口總線,一個(gè)時(shí)鐘即可讀取,速度上有明顯優(yōu)勢(shì),而缺點(diǎn)是占用管腳較多、連接較復(fù)雜。
在測(cè)量精度方面,當(dāng)參考電壓為2.5 V時(shí),AD7674的最小量化電平為9.5 μV,誤差為±23.8 μV,遠(yuǎn)低于目標(biāo)信號(hào)最小幅值,完全滿足測(cè)量要求。
為實(shí)現(xiàn)高速采樣,文中采用了WARP 轉(zhuǎn)換模式及18 位并口數(shù)據(jù)通信模式。
AD7674 的內(nèi)部結(jié)構(gòu)和轉(zhuǎn)換原理在文獻(xiàn)[1-2]中均有介紹,這里不再贅述。為實(shí)現(xiàn)AD7674 的FPGA接口,重點(diǎn)介紹其接口工作原理。設(shè)計(jì)中將AD7674的接口分為模數(shù)轉(zhuǎn)換控制和數(shù)據(jù)讀取控制兩個(gè)部分進(jìn)行分析[4]。

圖1 模數(shù)轉(zhuǎn)換時(shí)序

圖2 從機(jī)讀并口時(shí)序(轉(zhuǎn)換結(jié)束后讀數(shù)據(jù))
AD7674 使用WARP、IMPULSE 兩根信號(hào)線來設(shè)置轉(zhuǎn)換模式,當(dāng)使用WARP 模式時(shí),WARP=1、IMPLUSE=0。使用MODE0、MODE1、D0/OB/、PD等信號(hào)線來設(shè)置通信接口模式、數(shù)據(jù)輸出格式、低功耗模式等。當(dāng)使用18 位并口時(shí),MODE0=0、MODE1=0,D0/OB/在此模式下為并口總線的Bit0位,數(shù)據(jù)輸出格式為標(biāo)準(zhǔn)二進(jìn)制格式。這些信號(hào)可以通過在AD7674引腳設(shè)置固定電平的方式來配置,也可以將其與FPGA 的引腳相連,通過FPGA 來配置,這樣的優(yōu)點(diǎn)是能夠根據(jù)需要靈活更改ADC 配置。
由于AD7674 為單通道輸入,因此若要實(shí)現(xiàn)多通道的信號(hào)采集,則需要多片AD7674。ADC 的接口設(shè)計(jì)就是對(duì)其控制信號(hào)的設(shè)計(jì),根據(jù)其工作時(shí)序在FPGA 上實(shí)現(xiàn)相應(yīng)的信號(hào)及邏輯。多通道接口的設(shè)計(jì)難點(diǎn)在于如何實(shí)現(xiàn)在多個(gè)ADC 情況下進(jìn)行有序高效的數(shù)據(jù)讀取[5]。文中根據(jù)AD7674 的特性,采用單獨(dú)使能信號(hào)輪詢ADC 的方法,進(jìn)行多ADC 的數(shù)據(jù)讀取[6-7,14]。
以兩ADC 并行接口設(shè)計(jì)為例,AD7674 的控制信號(hào)按照?qǐng)D3 的方式與FPGA 進(jìn)行連接。

圖3 兩AD7674與FPGA的信號(hào)連接
FPGA 設(shè)計(jì)實(shí)現(xiàn)根據(jù)AD7674 的接口原理亦分為模數(shù)轉(zhuǎn)換和數(shù)據(jù)讀取兩部分進(jìn)行。文中程序代碼使用VHDL 語言[10]。
結(jié)合圖3,SYSCLOCK(系統(tǒng)時(shí)鐘)、Din(18 位并行總線)以及ADC_Busy 信號(hào)為FPGA 輸入信號(hào),其他信號(hào)均為FPGA 輸出信號(hào),模塊的端口代碼如下:


數(shù)據(jù)讀取部分根據(jù)AD7674 的并口時(shí)序,當(dāng)檢測(cè)到BUSY 信號(hào)為低時(shí),將信號(hào)置低,開始準(zhǔn)備進(jìn)行數(shù)據(jù)讀取,接著按需要將指定ADC 的信號(hào)置低。在信號(hào)變低的t12時(shí)間后,ADC 會(huì)將當(dāng)前的轉(zhuǎn)換結(jié)果輸出到并口總線上,此時(shí)FPGA 可以進(jìn)行數(shù)據(jù)的讀取。待完成此ADC 的數(shù)據(jù)讀取后,置高該信號(hào),同時(shí)使能下一個(gè)ADC 的信號(hào),進(jìn)行下一個(gè)ADC 的數(shù)據(jù)讀取。如此循環(huán),實(shí)現(xiàn)ADC采樣數(shù)據(jù)的讀取。
以上邏輯采用狀態(tài)機(jī)的方式實(shí)現(xiàn),狀態(tài)轉(zhuǎn)移圖如 圖4 所 示,分 為ADC_init、ADC_start、ADC_wait、ADC_read等狀態(tài)[13]。數(shù)據(jù)讀取狀態(tài)機(jī)實(shí)現(xiàn)代碼如下:

圖4 數(shù)據(jù)讀取狀態(tài)轉(zhuǎn)移圖


假設(shè)被測(cè)信號(hào)頻率為100 kHz,后期處理需要進(jìn)行8 點(diǎn)FFT 計(jì)算,則采樣時(shí)鐘需要800 kHz,AD7674最大采樣率為800 kSps,因此能夠滿足要求。當(dāng)系統(tǒng)時(shí)鐘為32 MHz 時(shí),進(jìn)行40 分頻可得到800 kHz 的采樣時(shí)鐘。
在仿真testbench 中,對(duì)輸入型信號(hào)進(jìn)行如下配置:SYSCLOCK 為32 MHz;Din 采樣輸入值設(shè)定為模擬值;ADC_Busy 信號(hào)在下降沿t3時(shí)間(35 ns)后產(chǎn)生;脈沖寬度為t4(1 μs)。
使用testbench 在ModelSim 仿真軟件中對(duì)FPGA接口程序進(jìn)行仿真[15-16],仿真結(jié)果如圖5、圖6 所示。

圖5 總體仿真波形

圖6 起始部分仿真波形
分析仿真波形可知,SYSCLOCK 頻率為32 MHz,采樣時(shí)鐘輸出為800 kHz(占空比為50%)。ADC_Busy 信號(hào)在下降沿后35 ns 產(chǎn)生上升沿,RD 讀使能信號(hào)則在ADC_Busy 下降沿120 ns 后置低,此時(shí)開始準(zhǔn)備讀取AD7674 并口數(shù)據(jù)。RD 置低240 ns 后,開始置低CS0,使能ADC0 數(shù)據(jù)輸出,此時(shí)ADC0 的18 位并行數(shù)據(jù)出現(xiàn)在總線上,在請(qǐng)求到數(shù)據(jù)有效45 ns(t12)后,讀取數(shù)據(jù)到FPGA 內(nèi)部的18位Buffer,完成采樣數(shù)據(jù)存儲(chǔ)。CS0 持續(xù)2 μs 后,置低CS1,開始使能ADC1,按同樣方法處理ADC1 的并行數(shù)據(jù)。上述工作均在的一個(gè)時(shí)鐘周期內(nèi)完成,而且數(shù)據(jù)讀取處理的時(shí)間裕度較大,能夠保證程序運(yùn)行的穩(wěn)定性。
以上結(jié)果表明,程序?qū)崿F(xiàn)了目標(biāo)邏輯,符合AD7674的工作時(shí)序要求,能夠有效穩(wěn)定地讀取多ADC 的并口數(shù)據(jù)。將程序綜合編譯并下載到實(shí)際的電路中進(jìn)行測(cè)試,亦能得到正確的結(jié)果。
文中首先介紹了AD7674 的特點(diǎn)和接口工作原理,然后詳細(xì)分析了其接口工作時(shí)序,通過采用單獨(dú)使能信號(hào)輪詢ADC 的方法,實(shí)現(xiàn)多通道的并口數(shù)據(jù)讀取。文中給出了基于該思路下兩ADC 并行轉(zhuǎn)換接口的FPGA 代碼,并給出了仿真結(jié)果。
設(shè)計(jì)中需要注意的是,F(xiàn)PGA 輸出信號(hào)的時(shí)間要求應(yīng)符合ADC 的工作時(shí)序,否則會(huì)出現(xiàn)數(shù)據(jù)讀取異常錯(cuò)誤。另外,如果將文中方法應(yīng)用在其他ADC,則需注意其信號(hào)是否對(duì)轉(zhuǎn)換有影響,當(dāng)禁止時(shí),ADC 會(huì)停止轉(zhuǎn)換,則文中方法不適用。
文中介紹的FPGA 接口設(shè)計(jì)方法可應(yīng)用到逐次逼近型ADC 的采集驅(qū)動(dòng)中,適用于多通道高速高精度的信號(hào)采集等場(chǎng)景。