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

圖1 模數轉換時序

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

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


數據讀取部分根據AD7674 的并口時序,當檢測到BUSY 信號為低時,將信號置低,開始準備進行數據讀取,接著按需要將指定ADC 的信號置低。在信號變低的t12時間后,ADC 會將當前的轉換結果輸出到并口總線上,此時FPGA 可以進行數據的讀取。待完成此ADC 的數據讀取后,置高該信號,同時使能下一個ADC 的信號,進行下一個ADC 的數據讀取。如此循環,實現ADC采樣數據的讀取。
以上邏輯采用狀態機的方式實現,狀態轉移圖如 圖4 所 示,分 為ADC_init、ADC_start、ADC_wait、ADC_read等狀態[13]。數據讀取狀態機實現代碼如下:

圖4 數據讀取狀態轉移圖


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

圖5 總體仿真波形

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