摘 要:針對音頻BSS(盲源分離)瞬時模型的多信源多傳感器問題,提出一種嚴格的多路并行同步數據采集的ADC方案。首先介紹ADC AD7656的性能特點,提出并實現一種并行同步多路音頻數據采集的系統方案。著重介紹AD7656周圍電路的設計和控制邏輯的實現,解決多路采集時序及數據分離的難題;設計完成PCI采集系統的數據接口和驅動程序;采用CPLD作控制核心,簡化設計,且方便應用的擴展;最后,給出測試結果。該系統已實際應用于相關課題的研究。
關鍵詞:AD7656;并行同步;S5933;音頻數據采集
中圖分類號:TP335+.1 文獻標識碼:B
文章編號:1004-373X(2008)10-167-04
Design and Implementation of Multiple Parallel-sync Audio
Data Acquisition System Based on AD7656
LI Shiliang,YANG Jun′an,YE Chunfeng
(Electronic Engineering Institute,Hefei,230037,China)
Abstract:A strict multiple parallel-sync data acquisition program of ADC has extracted to settle the multi-source and multi-sensor problem about instantaneous model of Blind Source Separation(BSS)in audio frequency .The features and functions of ADC AD7656 are introduced in this paper firstly,and then a program of the multiple parallel-sync audio data acquisition is put forward and implemented.The design of AD7656′s around circuits and its control logic are described in detail,the problem of time sequence and data separation is solved as well.The acquisition system′s design of data interface and the driver is indicated.The CPLD is used as control core to simplify the design,also,it is easier to expand the application of the system.The testing results are given at last.Now,the system has been used in related research subject successfully.
Keywords:AD7656;parallel-sync;S5933;audio data collection
1 引 言
隨著媒體技術的發展,對音頻數據的采集和處理日趨成熟,尤其在消費領域,各種產品層出不窮;然而在信號分選和處理方面,對音頻數據采集提出了新的要求。比如盲源分離,他要求多路實時并行同步地采集數據。為滿足這些方面的算法應用對音頻數據采集的要求,本文對多路并行音頻數據采集進行研究。對音頻信號盲源分離可實現對強噪聲背景,復雜信號環境下的特定信號目標的分選和識別;音頻信號盲源分離是在不知道信源數目和混合局,利用多傳感器采集的混合數據,需要并行的采集多路音頻信號,且要求各路之間有嚴格的時間相關性,實現辦法是各路嚴格地在同一時刻采樣,且各通道在設計和性能上保持一致性。
本文針對盲源分離對音頻數據采集的要求,采用模數轉換芯片 AD7656及PCI接口芯片S5933設計并實現了一種12路的PCI并行音頻數據采集系統。
2 AD7656功能結構與特性
2.1 結構與特性
AD7656是基于iCMOS(industrial CMOS)工藝的一款多通道高分辨率模數轉換芯片。iCMOS是美國模擬器件公司(ADI)發布的一種創新的半導體制造工藝,他是將高電壓半導體工藝與亞微米CMOS和互補雙極型工藝相結合的新技術。與采用傳統CMOS制造工藝不同,采用iCMOS 制造工藝的模擬IC 能承受高達30 V電源電壓,同時能提供突破的性能水平,降低系統設計成本,而且降低85%的功耗和減小30%的封裝尺寸[1,2]。圖1給出AD7656 的功能框圖。AD7656的主要特性如下:
(1) 6 通道16 b逐次逼近型ADC;
(2) 最大吞吐率為250 kS/s;
(3) 低功耗: 在供電電壓為5 V、采樣速率為250 kS/s時的功耗僅為160 mW;
(4) 寬帶寬輸入,高信噪比:輸入頻率為50 kHz 時的信噪比( SNR) 為85 dB;
(5) 片上2.5 V 基準電壓源和基準緩沖器;
(6) 有并行和串行接口;
(7) 與SPI/QSPI/μWire/DSP 兼容的高速串行接口,串行接口可進行菊花鏈式連接;
(8) 可通過引腳或軟件方式配置;
(9) 采用iCMOS工藝技術;
(10) 64 引腳LQFP封裝。
圖1 AD7656功能框圖
AD7656的6個通道是獨立的,每個通道包含1個采樣保持電路和1個16位SAR模數轉換器,由CONVST A、B、C三個啟動信號控制3對通道同時采樣和轉換,將3個信號連接在一起,便可實現6路的同時采樣和轉換。
2.2 引腳與功能
AD7656 是逐次逼近型轉換器,包括1個邏輯控制單元和每通道1個比較器、1個模/數轉換器、1個逐次逼近寄存器( SAR) 和1個輸出緩沖寄存器。轉換中的逐次逼近是按對分原理由控制邏輯電路完成的[3]。部分引腳功能[4]描述如下:
AGND,AVcc,VDD,VSS是模擬地和電源;其中AVcc只給ADC內核供電;
DGND,DVCC,DRIVE是數字地和電源,他是數字電路的參考點;所有電源引腳應該接1個10 μF和1個0.1 μF的去藕電容到相應的地;
V1~V6是信號的輸入端,其輸入范圍是由RANGE決定的;
REFIN/REFOUT 是參考電壓的輸入輸出引腳;
REFCAPA,REFCAPB,REFCAPC是3對ADC的參考電壓緩沖去偶引腳, 這幾個引腳應該分別接10 μF和0.1 μF的去偶電容;
CONVST A/B/C 是轉換啟動信號輸入,每對有其相關的CONVST信號,當他由低電平向高電平跳變時,相應的一對采樣保持器由跟蹤進入保持模式,同時開始轉換。當然, CONVST輸入信號也可以使成對的ADC進入低功耗狀態;
STBY,待機模式控制,當他為低電平時,6路ADC同時進入待機模式;
BUSY 是忙信號輸出。高電平指示轉換正在進行;
RESET 是復位信號輸入。上電時,需有一個大于100 ns的高電平復位信號;
CS,RD分別是片選信號和讀信號,均為低電平使能;
SER/PAR 是串行/并行選擇輸入信號。低電平時選擇并行接口模式;
H/S 是硬件/軟件選擇輸入引腳。低電平時,AD7656工作在硬件模式;
W/B 是字或字節模式選擇。低電平時,結果以字由DB0~DB15輸出;
DB0~DB15 并行字輸出時的數據輸出引腳。
復位時,CONVST需保持高電平,所有寄存器清0,硬件模式下根據各引腳的邏輯電平對AD7656進行配置,復位后,AD7656等待CONVST的一個上升沿啟動第一次轉換,BUSY是轉換正在進行的標志,BUSY脈沖結束,標志轉換已經結束,轉換的結果保存在6個輸出寄存器中,這時,結果可以讀出,在并口字讀出模式下,讀時序如圖2所示:
圖2 AD7656 并行接口讀操作數據流(W/B=0)
新的轉換在CONVST一個大于25 ns的低電平后的上升沿啟動,但在結果讀出前,不能啟動新的轉換。
3 并行同步多路采集的系統構成與電路設計
3.1 采集系統構成
根據聲信號的盲源分離對傳感器的要求,考慮采用2片AD7656實現12路并行數據采集,接口部分采用其高速并行16位口分別與32位PCI總線高低16位相連,然后用軟件的方法對12路信號進行分離。同步和時序采用CPLD實現。具體方案圖如圖3所示。
2塊AD的所有控制信號共用,配置也完全一樣,在一個CONVST信號控制下同步轉換,結果通過循環讀送入FIFO,S5933通過FIFO直接DMA通道將數據送入內存,整個流程由CPLD控制邏輯實現同步與協調;通過接受來自PCI總線的命令和修改CPLD程序,可以很好地擴展和修改系統的功能,適應不同的應用需要。
系統設計的重點在AD7656前端和周圍電路,這也是實現應用的關鍵;難點在PCI接口和驅動的實現及整個系統的協調控制上,以下對此分別論述。
圖3 具體方案圖
3.2 AD7656周圍電路的設計
如圖4所示,AD7656的外圍電路比較簡單,除開對電源引腳的去偶,就是控制信號的配置連接。兩塊AD7656的配置是一樣的,相同的信號連接在一起,以保證同時采集和各通道性能的一致性。其中,6個CONVST連接在一起共用為1個CONVST信號,與復位信號RESET,讀信號RD[TX-],片選CS[TX-],待機信號STBY[TX-],及忙信號BUSY一起輸入到CPLD,由CPLD提供時序控制。其余信號根據需要配置成相應的高低電平。
圖4 AD7656的外圍電路
在A/D的前端,還需要濾波和對信號電平的進行調整[5]。濾波要根據輸入信號的范圍設計濾波電路,這里直接利用運放設計了有源濾波電路,截止頻率設定在30.3 kHz,有源濾波電路如圖5所示。截止頻率由公式fc=1/RC設定。
圖5 有源濾波電路
信號電平的調整要根據輸入信號的范圍及A/D可接受的電平范圍來調整放大的倍數,整個的前端必須要考慮去噪的效果,同時防止引入其他的噪聲。具體的措施有:良好的接地,大面積的鋪地;保持各路在設計上的一致性,保證隔離以防止互擾。對電源引腳要去藕和濾波。
值得注意的是:在繪制PCB 版圖時[3],要注意將AD7656 的模擬和數字部分分開布局,并把他們放在板上的特定區域,這樣可以使地層比較容易分開,使用起來比較方便。數字地層和模擬地層應該在板上的適當的地方連接到一起,可以用0 Ω電阻器,也可以使用磁珠或直接用焊錫直接連接。建議在布線的時候不要將數據線布在該器件的正下方,因為這樣做會使信號和噪聲混在一起。電源線應該盡量粗一些,這樣可以減小電源線的脈沖干擾。去偶電容器應盡量地靠近器件,之間的連線要盡量短以減小感抗。
3.3 時序控制和數據接口的實現
數字接口部分要實現的功能包括A/D的復位、采樣轉換的啟動和轉換結果的讀出;A/D與FIFO,FIFO與S5933內部FIFO及S5933與驅動程序的協調與同步。
3.3.1 A/D的時序和控制
時序控制都由CPLD產生,對AD7656而言,相關信號是圖4中連接到CPLD的幾個信號。首先,AD7656上電時需要復位,每次轉換需要一個啟動信號啟動;其次,轉換完成后,要在下一次轉換開始前,把存于6個寄存器當中的結果讀出來。根據這些要求,主要的控制時序有:
復位及轉換啟動信號的產生
RESET信號由一個5位2進制計數器產生,上電時,計數器對33 MHz的PCI時鐘計數,產生一個600 ns的復位脈沖后;計數器清零;重新上電或收到計算機復位指令,再計數產生一個復位脈沖。部分程序如下:
case count is
when \"00000\" => ad_rst <=′0′;fifo_oe <=′0′;
when \"00001\" =>rd_pfifo <=′1′;fifo_oe <=′1′;
when \"00010\" => rd_pfifo <=′0′;ad_rst<=′1′;
when \"01000\" => divider <=DB; --set frequency dividing ratio
when \"11100\" => ad_rst<=′1′; rd_pfifo<=′1′;
when \"11101\" => fifo_oe <=′0′;
when \"11111\" => reset<=′1′;
when others =>1;
end case;
轉換啟動信號CONVST直接對時鐘進行分頻得到,分頻系數divider根據需要由計算機在復位時設定。
轉換結果的讀出:
在轉換結束和下一次轉換開始前,要產生6個讀信號將結果讀出并送到FIFO中去。6個讀脈沖也是由計數產生。仿真時序圖(見圖2)如下:
其中,ad_rd是低電平使能的,而fifo_wclk是上升沿有效。
圖6 AD的讀時序
本文所述數據采集卡數據量比較大,特別是12路的數據要一起送入內存,不得不混雜在一起傳輸,同步問題就顯得尤為重要,否則,在分離數據時就極易發生路與路之間的混疊。為解決同步問題,系統只使用了BPCLK一個時鐘,同時,利用EPM7128S的5 ns的延遲,解決A/D與外部FIFO,外部FIFO與S5933內部FIFO之間的讀寫同步;保證每一個數據都不丟失,每一個數據都不重復讀,不插入任何一個無用數據。
3.3.2 數據接口的實現
S5933有PCI總線接口、ADD-ON總線接口和外部只讀存儲器(NV-RAM)接口3種總線接口[6]。其中NV-RAM接口連接外部E2PROM,用于在系統上電初始化時對S5933內部寄存器進行配置,PCI配置空間可以通過串行或并行E2PROM配置。數據傳輸則在PCI接口與ADD-ON接口之間進行。PCI接口直接連接至PCI總線,替用戶管理PCI總線;ADD-ON接口則面向擴展邏輯,他也是用戶最為需要關注的地方。S5933為用戶提供MAILBOX方式、FIFO方式和PASS-THRU方式3種數據傳輸方式。MAILBOX可用來在ADD-ON和PCI總線之間傳輸命令和控制信息。PASS-THRU為直通通道,S5933芯片和板卡上的本地邏輯通過引腳信號BPCLK,PTATN#,PTWR,PTADR#,PTRDY#的握手來完成PASS-THRU傳輸。本文采用FIFO方式實現數據DMA傳輸。
S5933內部有輸出FIFO和輸入FIFO兩個單向的FIFO。每個FIFO的深度是8位,寬度是32位。S5933可通過他的FIFO接口在PCI總線上進行DMA(總線主控)傳輸。兩個FIFO是獨立單向的。一個用來將PCI總線上的數據傳輸到ADD-ON總線,另一個則將ADD-ON上的數據傳輸到PCI總線。主機和用戶CPU可以通過訪問控制寄存器的方式來訪問FIFO。用戶還可以通過WRFIFO#,RDFIFO#,WFULL,RDEMPTY,BPCLK這幾個引腳來直接讀寫FIFO。直接讀寫FIFO有2種工作方式:同步方式和異步方式。在同步方式下,WRFIFO#,RDFIFO#為FIFO讀寫使能信號,在BPCLK的上升沿寫入和讀出數據,輸出引腳BPCLK輸出33 MHz信號。在異步方式下,WRFIFO#和RDFIFO#為FIFO的寫信號和讀信號。WRFULL為輸出FIFO滿信號,RDEMPTY為輸入FIFO空信號。在設置時,RDEMPTY為高電平表示系統命令已被ADD-ON全部讀出。
本系統采用同步方式將ADD-ON數據以DMA方式送入計算機內存,當寫滿時,WRFULL變為高電平,產生DMA中斷,驅動一次DMA將S5933 FIFO的數據讀出。
3.3.3 驅動程序設計
AMCCS5933操作簡單,通過他內部FIFO接口在PCI總線上進行DMA高速數據傳輸,非常符合傳輸卡應用需要[7]。PCI數據采集設備需要設備驅動程序的支持。控制接口設備的工作,完成數據傳輸的任務。驅動程序不會獨立地存在,而是操作系統的一部分。通過設備驅動程序,多個進程可以同時使用這些資源,從而可以實現多進程運行。
為了完成DMA操作,在自己開發的驅動程序中,首先對硬件中斷端口進行虛擬化,編寫好中斷處理程序,然后根據自己的需要在內存中開辟并鎖定一塊物理地址連續的內存,同時把首地址返回給應用程序。并和驅動程序申請的資源結合起來,完成DMA操作,DMA操作完時,便會產生中斷信號,調用中斷服務程序,進行數據拷、DMA通道設置等工作。程序流程如圖7所示。
圖7 單路輸出波形
按照以上流程設計驅動程序,關鍵需要解決問題有:驅動程序訪問硬件;DMA傳輸;中斷處理;驅動程序和應用程序通信。
這里選擇Numega DriverWorks作為驅動程序開發工具而不是直接使用Microsoft DDK,原因是驅動程序的開發可以采用面向對象的框架結構,開發人員可以通過標準接口訪問系統核心。
此外,使用DriverWorks中的DriverWizard向導工具,可以在VC環境中建立驅動程序框架,在此基礎上根據具體應用要求添加相應代碼實現特定功能,大大簡化了開發過程并使程序具有可擴展性。
4 調試與測試
為驗證系統的有效性,采用標準信號源產生的正弦波信號對板卡進行了測試。并給出部分測試的結果和數據。由于2個AD7656分別使用了PCI總線的高低16位2路傳輸,每路只包含6個通道混在一起的數據,測試中上下二路情況是一樣的,這里,僅給出上面一路的實驗情況及結果。
其中,圖8是在輸入一路正弦波,分離后該路顯示的波形圖;圖9是輸入一路正弦波,第6路下拉到地,其余接參考電位,并按幀分離后的顯示結果。
圖8 分離效果圖1
圖9 分離效果圖2
輸入正弦波(Vp-p=1 V),由實測數據得到輸出信噪比為:60.85 dB。
測試結果表明,數據完全分離開了,各路間沒有互擾,信噪比達到了設計要求系統經過調試,系統已成功應用于基于盲源分離的戰場目標聲探測等2個課題研究,實踐證明,該系統穩定可靠。
參 考 文 獻
[1]佚名.ADI推出iCMOS模擬IC頓起波瀾[J].今日電子,2004(12):135.
[2]劉新光.高性能ADC相繼出臺,工業和通信領域備受關注[J].電子產品世界,2005(2):92-94.
[3]陳茹梅,郭建碩.AD7656型模/數轉換器在信號采集系統中的應用[J].國外電子元器件,2006(2):67-71.
[4]ANALOG DEVICES,250 kSPS,6-Channel,Simultaneous Sampling,Bipolar 16-/14-/12-Bit ADC—— AD765x Data Book.
[5]周林,殷俠.數據采集與分析技術[M].西安:西安電子科技大學出版社,2005.
[6]A MCC公司,S5933 32-Bit PCI \"MatchMaker\" February 12,1997 Revised October 1998.
[7]胡修林,劉可.一種PCI總線高速數據傳輸卡WDM驅動程序開發[J].計算機與數字工程,2004,33(5):96-99.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。