楊會(huì)偉,周先飛,李 敏
(蕪湖職業(yè)技術(shù)學(xué)院 信息工程學(xué)院,安徽 蕪湖 241000)
隨著電子技術(shù)和超大規(guī)模集成電路的發(fā)展,傳感器的種類越來越多,為我們從外界獲取各種信息提供了保障。大數(shù)據(jù)與云計(jì)算的出現(xiàn)方便我們從大量的數(shù)據(jù)中提取準(zhǔn)確有用的信息,為了降低信息的誤差,通常會(huì)對(duì)信息進(jìn)行多次、多點(diǎn)同步采樣,然后通過多通道AD將多點(diǎn)模擬信息轉(zhuǎn)換成數(shù)字信號(hào)進(jìn)行后期處理,提高信息的準(zhǔn)確性。[1-4]
大多的數(shù)據(jù)處理系統(tǒng)往往通過計(jì)算機(jī)中專用的數(shù)據(jù)處理軟件來完成。隨著USB總線的快速發(fā)展,大多數(shù)計(jì)算機(jī)尤其是筆記本接口都被USB總線接口取代。為了快速有效地將多通道并行數(shù)據(jù)傳輸至計(jì)算機(jī),設(shè)計(jì)一種基于FPGA+FT2232H多通道并行數(shù)據(jù)的USB采集系統(tǒng),實(shí)現(xiàn)多通道并行數(shù)據(jù)向USB串行數(shù)據(jù)的轉(zhuǎn)換,具有很好的實(shí)際意義。
要實(shí)現(xiàn)多通道并行數(shù)據(jù)的USB采集,一方面需要將多通道的并行數(shù)據(jù)依次進(jìn)行傳輸,這需要對(duì)每個(gè)通道的數(shù)據(jù)進(jìn)行緩存,然后進(jìn)行選通傳輸;另一方面還需要將每個(gè)通道的并行數(shù)據(jù)轉(zhuǎn)換成USB串行數(shù)據(jù),還沒有專用的芯片可直接實(shí)現(xiàn)并行數(shù)據(jù)到USB的轉(zhuǎn)換。目前FTDI公司的FT2232B具有 FIFO數(shù)據(jù)到USB數(shù)據(jù)轉(zhuǎn)換的特點(diǎn),結(jié)合FPGA的可編程、并行、多IP核等優(yōu)點(diǎn)可設(shè)計(jì)實(shí)現(xiàn)基于FPGA+FT2232H的多通道并行數(shù)據(jù)USB采集系統(tǒng)。該系統(tǒng)主要以FPGA作為主控制核心,采用專用的FIFO-USB器件與FPGA連接,通過在FPGA內(nèi)部定制FIFO數(shù)據(jù)緩存IP核,再通過FIFO乒乓操作將數(shù)據(jù)傳輸至FIFO-USB器件,最終完成多通道并行數(shù)據(jù)向USB數(shù)據(jù)的轉(zhuǎn)換。轉(zhuǎn)換成USB串行數(shù)據(jù)后通過USB數(shù)據(jù)線傳輸至計(jì)算機(jī)進(jìn)行顯示和存儲(chǔ)。系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 采集系統(tǒng)框圖
具體執(zhí)行流程:(1)系統(tǒng)以FPGA作為主控制核心,前端可連接1~4片8通道16位精度AD模塊;利用Verilog硬件編程語言設(shè)計(jì)該AD模塊的控制時(shí)序電路邏輯并模塊化;(2)利用FPGA內(nèi)部的存儲(chǔ)IP核資源,在FPGA內(nèi)部建立4個(gè)與AD參數(shù)匹配的FIFO存儲(chǔ)單元,根據(jù)實(shí)際前端AD模塊個(gè)數(shù),進(jìn)行FIFO選通參數(shù)設(shè)置。例如 :如果只連接一個(gè)AD,那么只選通1個(gè)FIFO有效,不使用其他3個(gè)FIFO,如果連個(gè)2個(gè)AD,那么選通2個(gè)FIFO有效,不使用其他2個(gè)FIFO,依此類推。并結(jié)合步驟(1)控制時(shí)序邏輯電路,將采集的數(shù)據(jù)依次存儲(chǔ)到各個(gè)FIFO中;(3)利用Verilog硬件描述語言,采用多分支結(jié)構(gòu),實(shí)現(xiàn)對(duì)多個(gè)FIFO的選通輸出,保證某一時(shí)刻只有一個(gè)FIFO數(shù)據(jù)輸出;(4)根據(jù)FT2232H器件的數(shù)據(jù)手冊(cè),利用Verilog語言編程完成FPGA內(nèi)部FIFO數(shù)據(jù)到FT2232H器件數(shù)據(jù)的傳輸;(5) 通過專用USB數(shù)據(jù)線將FIFO-USB模塊連接至計(jì)算機(jī);(6)上位機(jī)軟件開發(fā)實(shí)現(xiàn)人性化軟件交互界面,利用FIFO- USB模塊成熟的驅(qū)動(dòng)和函數(shù)庫(kù)實(shí)現(xiàn)多通道數(shù)據(jù)的動(dòng)態(tài)顯示和存儲(chǔ)。
系統(tǒng)主要完成多通道并行數(shù)據(jù)到USB串行數(shù)據(jù)轉(zhuǎn)換,電路設(shè)計(jì)暫不考慮FPGA前端與多路AD 模塊的硬件連接,故硬件電路主要包括:FPGA主控單元外圍電路設(shè)計(jì)、FIFO-USB模塊FT2232H電路設(shè)計(jì)、FPGA與FT2232H電路連接。
(1)FPGA電路設(shè)計(jì)
根據(jù)系統(tǒng)需求:在FPGA內(nèi)部創(chuàng)建1~4個(gè)8*16的FIFO核資源,考慮到多通道并行數(shù)據(jù)轉(zhuǎn)換成USB串行數(shù)據(jù)的效率要快、外部端口資源豐富、集成度高等因素,系統(tǒng)選用Altera公司65 nm工藝的Cyclon IV系列EP4CE6E22C8型號(hào)芯片,其電路主要包括電源模塊、外部時(shí)鐘、串行配置設(shè)備電路。
電源模塊以外部USB接口5 V電源作為外部輸入電壓,通過AS1117芯片轉(zhuǎn)換得到FPGA所需的1.5 V內(nèi)核電壓、3.3 V端口電壓以及2.5 V鎖相環(huán)電壓,電壓與地之間連接0.1 uF的濾波電容;FPGA的串行配置設(shè)備選用EPCS4作為FPGA設(shè)備串行接口閃速存儲(chǔ)裝置;外部時(shí)鐘選擇50 MHz外部時(shí)鐘。
(2)FT2232H電路設(shè)計(jì)
FT2232H是具有通道A、通道B的兩通道高速USB2.0 芯片,可支持FT232異步串行接口、FT245 FIFO接口、處理器型FIFO接口以及快速串行接口多種模式。這些模式可在復(fù)位后通過外接EEPROM芯片中配置信息進(jìn)行模式選擇。其外圍電路主要包括:3.3 V IO電壓和1.8 V內(nèi)核電壓,為了系統(tǒng)的安裝調(diào)試方便,統(tǒng)一采用USB接口5 V電壓轉(zhuǎn)換得到;根據(jù)需求外接12 MHz晶振;EEPROM配置模塊采用93C46芯片,通過IIC總線與FT2232H連接;FT2232H輸出的USB數(shù)據(jù)通過專用的兩個(gè)USB引腳DM、DP連接至外部USB接口。
(3)FPGA與FT2232H電路連接
本系統(tǒng)主要實(shí)現(xiàn)多通道并行數(shù)據(jù)的USB采集,根據(jù)需求,確定采用FT245異步FIFO模式。在該模式下,只有A通道為有效數(shù)據(jù)通道,用到的主要引腳包括:①雙向A通道8位寬度數(shù)據(jù)總線ADBUS[7:0];②讀FIFO數(shù)據(jù)有效控制信號(hào)RXE#,寫FIFO數(shù)據(jù)有效控制信號(hào)TXE#;③FIFO讀使能信號(hào)RD#,FIFO寫使能信號(hào)WR#,這些信號(hào)都是低電平有效;④有效數(shù)據(jù)USB輸出控制信號(hào)SIWU,該信號(hào)與PWREN#信號(hào)結(jié)合使用,將FT2232H的PWREN#信號(hào)引腳連接外部的下拉電阻,固定為低電平,使FT2232H工作在正常模式下。FPGA與FT2232H電路連接如圖2所示。
圖2 FPGA與FT2232H電路連接框圖
FT2232H作為高速USB2.0 芯片,在FT245異步FIFO模式下可自動(dòng)完成FIFO與USB間轉(zhuǎn)換傳遞,但是為了保證有效數(shù)據(jù)傳遞的正確性,需要編寫時(shí)序控制程序。在FPGA內(nèi)部,通過Verilog語言編程建立FIFO選通數(shù)據(jù)輸出控制模塊和FIFO-USB控制模塊。如圖3所示。
圖3 FIFO-USB接口轉(zhuǎn)換模塊及內(nèi)部電路連接圖
(1)FIFO選通數(shù)據(jù)輸出控制
系統(tǒng)前端連接4片8通道16位精度AD模塊,在FPGA內(nèi)部建立了4個(gè)FIFO存儲(chǔ)單元分別用于緩存4片AD采樣數(shù)據(jù),4個(gè)FIFO通道數(shù)據(jù)需要經(jīng)過FIFO數(shù)據(jù)選通模塊完成循環(huán)交替輸出。FIFO數(shù)據(jù)選通模塊主要通過建立iA0-iA4四個(gè)選通控制信號(hào),結(jié)合多分支結(jié)構(gòu)if…else if…else完成多FIFO的循環(huán)交替輸出。
(2)FIFO-USB控制[5-9]
FIFO數(shù)據(jù)到USB轉(zhuǎn)換控制主要通過ADBUS[7:0]、RXE#、TXE#、RD#、WR#、SIWU信號(hào)來完成。其中,RXE#、RXE#信號(hào)由FT2232T產(chǎn)生,RD#、WR#、SIWU由FPGA編程提供。讀寫控制時(shí)序如圖4、圖5所示。
圖4 FT245異步FIFO接口讀時(shí)序
圖5 FT245異步FIFO接口寫時(shí)序
設(shè)計(jì)思路如下:①首先通過FPGA將PWREN#信號(hào)設(shè)置為高電平,使FT2232處于正常模式;②將SIWU信號(hào)設(shè)置為1,使設(shè)備發(fā)送到緩沖區(qū)的任何數(shù)據(jù)都要通過USB接口發(fā)送出去,提高數(shù)據(jù)傳輸效率。③讀操作:判斷從FT2232發(fā)出的TXF#信號(hào),當(dāng)該信號(hào)為低電平時(shí),每從FIFO選通數(shù)據(jù)輸出模塊讀取一個(gè)通道數(shù)據(jù),就生成一個(gè)WR#低電平脈沖給FT2232;在WR#為低電平的時(shí)間內(nèi),將16位的AD數(shù)據(jù)通過ADBUS[7:0]上傳至FT2232芯片中,完成16位并行數(shù)據(jù)到USB數(shù)據(jù)的傳輸,數(shù)據(jù)的傳輸格式為:高8位、低8位分別發(fā)送,并且在低8位和高8位數(shù)據(jù)前加上1個(gè)字節(jié)的校驗(yàn)數(shù)據(jù),以保證數(shù)據(jù)傳輸?shù)恼_性。④寫操作,判斷從FT2232發(fā)出的RXF#信號(hào),當(dāng)該信號(hào)為低電平時(shí),生成一個(gè)RD#低電平脈沖給FT2232,并在RD#為低電平的時(shí)間內(nèi),通過ADBUS[7:0]讀取FT2232內(nèi)部FIFO數(shù)據(jù)到FPGA內(nèi)部,完成USB數(shù)據(jù)到并行數(shù)據(jù)傳輸。
FTDI公司為USB-UART和USB-FIFO提供了兩種可供選擇的軟件接口。一個(gè)軟件接口提供了一個(gè)虛擬COM端口(VCP),它在系統(tǒng)中顯示為一個(gè)遺留COM端口;另一個(gè)軟件接口D2XX是通過一個(gè)專用DLL (FTD2XX.DLL)提供的,該軟件接口提供了十分完整的庫(kù)函數(shù)和驅(qū)動(dòng)程序,支持VB.net、Visual C++6.0、LabView多種軟件開發(fā)環(huán)境。由于VB.net開發(fā)環(huán)境可視化編程效果好,并且對(duì)FTD2XX.DLL操作方便,本設(shè)計(jì)選用VB.net完成USB上位機(jī)數(shù)據(jù)的采集顯示與存儲(chǔ)。
具體設(shè)計(jì)流程如下:①通過調(diào)用庫(kù)函數(shù)FT_Open打開USB設(shè)備,根據(jù)返回值判斷是否打開成功,若打開成功,設(shè)置USB的波特率和讀寫功能,建立讀線程pThreadRead = New Thread (AddressOf ReadThread);②然后通過對(duì)USB端口進(jìn)行初始化,設(shè)置波特率、清除輸入輸出緩存和訪問超時(shí)時(shí)間;③創(chuàng)建讀線程并啟動(dòng);④執(zhí)行數(shù)據(jù)讀線程ReadThread,調(diào)用庫(kù)里的讀函數(shù)FT_Read提取有效數(shù)據(jù),并將各個(gè)通道數(shù)據(jù)分離出來;⑤將各個(gè)通道的數(shù)據(jù)經(jīng)過處理后動(dòng)態(tài)顯示出來,并利用StreamWriter()將各個(gè)通道數(shù)據(jù)寫入文件中進(jìn)行動(dòng)態(tài)保存。
將多通道并行數(shù)據(jù)的USB采集系統(tǒng)的USB接口與計(jì)算機(jī)的USB接口相連,打開電源;打開上位機(jī)軟件,選擇通道A的USB轉(zhuǎn)FIFO模式,選擇HEX格式顯示接受的內(nèi)容,打開USB設(shè)備,開始采集數(shù)據(jù),采集界面如圖6所示。
圖6 系統(tǒng)數(shù)據(jù)采集界面
本次測(cè)試共完成5個(gè)標(biāo)準(zhǔn)電壓值的16通道采樣,然后計(jì)算16通道采樣的平均值作為測(cè)試值,采樣結(jié)果如表1所示。
表1 16通道采樣表
測(cè)試結(jié)果表明:本采集系統(tǒng)能夠完成十六通道并行數(shù)據(jù)到USB接口的轉(zhuǎn)換,均值采樣絕對(duì)誤差約為0.000 8 V,可滿足電力線監(jiān)控、多相電機(jī)控制、儀表控制等領(lǐng)域應(yīng)用需求。
傳統(tǒng)的數(shù)據(jù)采集往往采用并行數(shù)據(jù)轉(zhuǎn)RS232串口來完成,傳輸效率低。目前大多數(shù)計(jì)算機(jī)尤其是筆記本都利用高速的USB接口取代了RS232串口,基于此,設(shè)計(jì)一種基于FPGA+FT2232H多通道并行數(shù)據(jù)的USB采集系統(tǒng),實(shí)現(xiàn)多通道并行數(shù)據(jù)向USB串行數(shù)據(jù)的轉(zhuǎn)換。采用FPGA作為主控單元,充分利用了FPGA的可編程、并行、多IP核的優(yōu)點(diǎn),簡(jiǎn)化外部硬件電路設(shè)計(jì),降低分立器件的數(shù)量,系統(tǒng)體積小、功耗低、抗干擾強(qiáng),穩(wěn)定性高;利用Verilog語言并行特點(diǎn)保證多個(gè)任務(wù)模塊同步并發(fā)執(zhí)行,提高數(shù)據(jù)傳輸效率;上位機(jī)采用可視化編程開發(fā)環(huán)境VB.net,可實(shí)現(xiàn)人性化的軟件交互界面,利用FIFO- USB模塊成熟的驅(qū)動(dòng)和函數(shù)庫(kù)實(shí)現(xiàn)多通道數(shù)據(jù)的采集,采樣絕對(duì)誤差約為0.000 8 V,準(zhǔn)確性和穩(wěn)定性高。在多通道數(shù)據(jù)采集、處理領(lǐng)域具有一定的應(yīng)用價(jià)值。