基于USB的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與研究
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1引 言
數(shù)據(jù)采集作為獲取信息的手段,越來越多的應(yīng)用在各種工業(yè)系統(tǒng)中。目前數(shù)據(jù)采集系統(tǒng)多以PCI,ISA或。
EPP/ECP等完成數(shù)據(jù)的傳輸,這些方式開發(fā)調(diào)試比較困難,安裝不便,通用性和可移植性差;而且PC上的插槽數(shù)量、地址、中斷資源的有限導(dǎo)致這些方式的可擴(kuò)展性差[1]。目前廣泛應(yīng)用的USB總線接口具有安裝方便、高帶寬、易于擴(kuò)展等優(yōu)點(diǎn),USB 2.O的傳輸速率可達(dá)到480 Mb/s,已逐漸成為現(xiàn)代數(shù)據(jù)傳輸?shù)陌l(fā)展趨勢(shì)之一[2]。
2 EZ-USB FX2以及CY7C68013的特點(diǎn)
本文選擇C2ypress公司LISB接口芯片CY7C268013(56一pin),該芯片屬于EZ-IJSB FX2系列。Cypress EZ-USBFX2是世界上第一款USB 2.O集成微控制器[3]。其在1個(gè)芯片上集成了USB收發(fā)器(USB Transceiver),串行接口引擎(Serial Interface Engine,SIE),CPU(增強(qiáng)型8051微控制器)和一個(gè)通用可編程GPIF接口(General ProgrammableInterface,GPIF)。集成的LISB收發(fā)器通過USB電纜的D+和D一線連接到主機(jī),串行接口引擎(SIE)進(jìn)行數(shù)據(jù)的編碼和解碼、完成錯(cuò)誤校驗(yàn)、位填充和其他USB需要的信號(hào)級(jí)任務(wù)。
最終,SIE傳輸來自或?qū)⒁竭_(dá)USB接口的數(shù)據(jù)。FX2的SIE可以在全速(12 Mb/s)和高速(480 Mb/s)兩種速率下運(yùn)行。為了適應(yīng)USB 2.O增加的帶寬,F(xiàn)X2端點(diǎn)FIFO(First In FirstOut)和Slave FIFO(同外部邏輯或處理器連接的緩沖區(qū))組合在一起,這樣可以節(jié)省內(nèi)部數(shù)據(jù)之間的傳送所消耗的時(shí)間。CPU是具有快速的執(zhí)行時(shí)間和更多特點(diǎn)的增強(qiáng)型8051,他把內(nèi)部RAM用作程序和數(shù)據(jù)存儲(chǔ)。
CY7C68013有以下主要特征:
(1)軟件。8051從下載到內(nèi)部RAM的程序開始運(yùn)行,這個(gè)特征允許固件程序通過主機(jī)下載到芯片內(nèi)部RAM中,從而方便了調(diào)試和固件的改寫。
(2)四個(gè)可編程。BULK/INTERRUPT/ISOCHRO一NOUS端點(diǎn),可以是雙緩沖區(qū),三緩沖區(qū)或者四緩沖區(qū),這樣可以根據(jù)外部數(shù)據(jù)的速率調(diào)整緩沖區(qū)的寬度和深度,以適應(yīng)不同的需要。
(3)GPIF。允許直接連接到大多數(shù)并行接口:8位和16位;由可編程波形述符和配置寄存器來定義波形;支持多個(gè)Ready(RDY)輸入和Control(CTL)輸出。
(4)3.3 V。電壓供電,減小了控制器的功耗。
3數(shù)據(jù)采集系統(tǒng)的硬件設(shè)計(jì)
本系統(tǒng)主要由模數(shù)部分、通信部分和電源轉(zhuǎn)換3個(gè)部分組成。整個(gè)數(shù)據(jù)采集系統(tǒng)完成對(duì)信號(hào)的采集、傳輸和存儲(chǔ)。圖1為本采集系統(tǒng)結(jié)構(gòu)框圖。
主要工作流程:經(jīng)過調(diào)理的模擬信號(hào)經(jīng)過模/數(shù)轉(zhuǎn)換器(ADC0804)轉(zhuǎn)換為數(shù)字信號(hào);USB2.O控制器負(fù)責(zé)把ADC轉(zhuǎn)換后得到的數(shù)據(jù)讀取到其內(nèi)部FIFO緩沖區(qū),由程序判斷ADC的轉(zhuǎn)換結(jié)束;中斷信號(hào)決定ADC上的數(shù)據(jù)是否有效。PC的用戶應(yīng)用程序發(fā)出接收數(shù)據(jù)的請(qǐng)求,并由設(shè)備發(fā)出相應(yīng)的響應(yīng)決定是否開始傳輸數(shù)據(jù)。當(dāng)系統(tǒng)上電后,系統(tǒng)自動(dòng)識(shí)別設(shè)備后加載驅(qū)動(dòng)程序,USB控制器的固件程序通過USB電纜從主機(jī)自動(dòng)下載到其內(nèi)部程序RAM中,并經(jīng)過列舉和重列舉后開始正常工作,計(jì)算機(jī)可以通過用戶軟件取得系統(tǒng)的各種配置信息。USB控制器以GPIF(通用可編程接口)Master模式控制數(shù)據(jù)采集和讀取,并通過CY7C68013 GPIF的"波形圖"控制ADC的采集和讀取數(shù)據(jù)的時(shí)序。
3.1 USB控制器外圍電路設(shè)計(jì)
USB控制器及其外圍電路組成了系統(tǒng)的數(shù)據(jù)讀取和傳輸模塊,這部分主要負(fù)責(zé)讀取和傳輸ADC轉(zhuǎn)換后的數(shù)據(jù),并負(fù)責(zé)與PC機(jī)的通信,從而完成這個(gè)系統(tǒng)的功能。由于CY7C68013把多重功能都集成到一個(gè)片子上,所以外部電路顯得不是很復(fù)雜,與一般的電路比較,減少了電路復(fù)雜的外部數(shù)據(jù)線和信號(hào)線的連接,有利于提高整個(gè)系統(tǒng)的可靠性[4]。LISB控制器部分外圍電路原理圖如圖2所示。
CY7C68013用自己的片內(nèi)晶振電路和一個(gè)外部24 MHz晶振組成系統(tǒng)的時(shí)鐘電路。他有一個(gè)片內(nèi)鎖相環(huán)(PLL)電路,利用PLL可以把24 MHz振蕩器頻率倍頻至480 MHz供收發(fā)器使用。內(nèi)部計(jì)數(shù)器把24 MHz的頻率分頻為內(nèi)部8051需要的默認(rèn)的12 MHz的時(shí)鐘頻率。XTALIN和XTALOUT分別為晶振的輸入和輸出引腳,分別與晶振相連,同時(shí),晶振的兩個(gè)引腳分別通過一個(gè)20~33 pF的負(fù)載電容接地。DMINUS和DPLUS為USB的D+,D一信號(hào)線,分別和LISB連接器的相應(yīng)引腳相接。LJSB連接器上的VBUS和GND為總線電源線,整個(gè)系統(tǒng)的所需要的各種電壓都是通過該電源轉(zhuǎn)換而得到。SCL和SDA分別為I2C總線的時(shí)鐘線和數(shù)據(jù)線,在本設(shè)計(jì)中,系統(tǒng)的固件程序采取從主機(jī)下載的方法。因此,這里無需連接外部E2PROM,這兩個(gè)引腳要分別通過一個(gè)2.2 Ω的電阻連接到電源引腳VCC上。RESERVED引腳為芯片的保留引腳,通過一個(gè)2.2 Ω接地。
RESET引腳為芯片的復(fù)位引腳。該引腳有一個(gè)滯后作用并且低電平有效。因?yàn)閮?nèi)部鎖相環(huán)在VCC升至3.3 V后大約200 μs保持穩(wěn)定,所以,RESET引腳所連接的外部RC網(wǎng)絡(luò)要取適當(dāng)?shù)闹祦頋M足這個(gè)需要,典型的取值為:R-100 kΩ,C=0.1μF。wAKEUP為喚醒引腳,在805l和芯片的其他部分為低功耗狀態(tài)時(shí),USB系統(tǒng)掛起,PLL和晶振停止工作,當(dāng)外部邏輯觸發(fā)wAKEUP,晶振重新工作之后,PLL趨于穩(wěn)定,同時(shí),8051也會(huì)收到一個(gè)喚醒中斷。RDY0,CTLO,CTL1引腳分別和對(duì)應(yīng)ADC及其外圍電路的接口相連,F(xiàn)D[15:0]分別和ADC的對(duì)應(yīng)數(shù)據(jù)線連接。
3.2 A/D采樣通道設(shè)計(jì)
本文采用的是CY7C68013的GPIF工作模式,因此直接利用了GPIF的16位并行接口,這樣每次可以按字(2個(gè)8位)讀取數(shù)據(jù)??紤]到ADC0804的廉價(jià),并且省去了連接多路選擇器和其相關(guān)的控制接口電路等因素,提高系統(tǒng)的可靠性,利用2片AI)C0804同時(shí)與GPIF接口相連接,避免了利用多路開關(guān)時(shí)的所需的轉(zhuǎn)換時(shí)間m56,在程序部分,也省去了選擇模擬信號(hào)通道部分。
3.3 電源電路設(shè)計(jì)
在本設(shè)計(jì)中,需要3種大小不同的供電電源,除了ADC0804需要的+5 V供電電源外,還有CY7C68013需要的+3.3 V的供電電源,模數(shù)轉(zhuǎn)換器ADC0804需要的+2.5 V的基準(zhǔn)電壓電源。由于整個(gè)系統(tǒng)可以使用總線電源供電,不需要外加電源,因此需要把+5 V的總線電源轉(zhuǎn)換為系統(tǒng)各個(gè)部分所需的電源。+3.3 V電源是CY7C68013所需芯片供電電壓。設(shè)計(jì)中,選用的是MAxIM公司的電源轉(zhuǎn)換芯片MAX882n 0,連接電路如圖3所示。
模/數(shù)轉(zhuǎn)換器需要外部提供基準(zhǔn)電壓,ADC0804需要+2.5 V電壓,而且基準(zhǔn)電壓是否穩(wěn)定、精確,直接影響數(shù)據(jù)轉(zhuǎn)換的精度。而NationalSemiconductor公司的LM336-2.5 V是一個(gè)能提供精確+2.5 V電壓的器件,他的集成電路是精確的2.5 V并聯(lián)推挽穩(wěn)壓二極管組成,還有一個(gè)用來調(diào)節(jié)溫度對(duì)電壓影響的引腳ADJ。芯片所產(chǎn)生的2.5 V的電壓可以很方便的從5 V電壓系統(tǒng)中獲得。
4數(shù)據(jù)采集系統(tǒng)的軟件設(shè)計(jì)
該數(shù)據(jù)采集系統(tǒng)的軟件系統(tǒng)主要由3部分組成:USB固件程序(Firmware)、I_JSB設(shè)備驅(qū)動(dòng)程序以及客戶應(yīng)用程序。3部分程序之間相互協(xié)作來完成整個(gè)采集卡的功能。
4.1 固件程序設(shè)計(jì)
固件程序是指運(yùn)行在設(shè)備CPU中的程序。只有在該程序運(yùn)行時(shí),外設(shè)才能稱之為具有給定功能的外部設(shè)備。固件程序負(fù)責(zé)初始化各硬件單元,重新配置設(shè)備及A/D采樣控制。固件代碼的存儲(chǔ)位置有3種:第一種是存在主機(jī)中,設(shè)備加電后由驅(qū)動(dòng)程序把固件下載到片內(nèi)RAM后執(zhí)行,即"重新枚舉";第二種方法是把固件代碼固化到一片E2PRAM中,外設(shè)加電后由FX2通過I21C總線下載到片內(nèi)RAM后自動(dòng)執(zhí)行;最后一種方法是把程序固化到一片R()M中,使之充當(dāng)外部程序存儲(chǔ)器,連在FX2三總線上。本文選用第一種方式,這種方式便于系統(tǒng)的調(diào)試和升級(jí)。
Cypress公司為CY7C68013提供了一個(gè)開發(fā)框架,可以在KEILC51環(huán)境下開發(fā)。由于開發(fā)框架的引入,大大縮短了用戶的研發(fā)周期。該框架由以下幾部分組成:
(1)Fw.C中包含了程序框架的MAIN函數(shù),管理整個(gè)51內(nèi)核的運(yùn)行,因?yàn)镃ypreSS對(duì)這個(gè)部分的功能進(jìn)行了精心劃分,一般是不用改動(dòng)的。
(2)用戶必須將PERIP H.C實(shí)例化,他負(fù)責(zé)系統(tǒng)周邊器件的互聯(lián)。固件的設(shè)計(jì)主要針對(duì)這個(gè)文件,用戶必須根據(jù)自己系統(tǒng)的需要,實(shí)例化這個(gè)文件,以實(shí)現(xiàn)自己的功能。在這個(gè)文件中有幾個(gè)函數(shù)是比較關(guān)鍵的,在這里做特別說明:
TD Init函數(shù),負(fù)責(zé)對(duì)USB端點(diǎn)進(jìn)行初始化設(shè)置。本設(shè)計(jì)中將端點(diǎn)6設(shè)置為1 024個(gè)字節(jié),緩存深度為4級(jí),模式設(shè)為自動(dòng)輸入方式。
TD Poll函數(shù),負(fù)責(zé)系統(tǒng)中循環(huán)任務(wù)的處理。他主要是對(duì)各個(gè)端點(diǎn)的狀態(tài)進(jìn)行查詢,處理各種OUT或IN端點(diǎn)的交互。值得說明的一點(diǎn)是,這種處理只是輔助性質(zhì)的,大部分工作由硬件自動(dòng)完成。
GPIFINIT.C,其中只有一個(gè)Gpiflnit函數(shù);他是GPIF模塊的初始化函數(shù),一般在TD Init函數(shù)中調(diào)用。這個(gè)函數(shù)是由Cypress公司提供的一個(gè)GPIF、Designer開發(fā)工具根據(jù)用戶設(shè)計(jì)的波形生成的,用戶不需要自己設(shè)計(jì)波形查詢表,減輕了設(shè)計(jì)者的工作強(qiáng)度。DSCR.A51是描述表文件,負(fù)責(zé)LISB設(shè)備的描述工作,CY7C68013在上電后自動(dòng)利用其中的VID和PID取代默認(rèn)的VID和PID。
4.2驅(qū)動(dòng)程序的編寫
數(shù)據(jù)采集系統(tǒng)的設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序都是設(shè)備的主機(jī)端程序。設(shè)備驅(qū)動(dòng)程序是硬件和應(yīng)用程序之間的橋梁,通過驅(qū)動(dòng)程序,應(yīng)用程序可以對(duì)硬件進(jìn)行控制。該系統(tǒng)需要2個(gè)驅(qū)動(dòng)程序,即通用驅(qū)動(dòng)和下載固件的驅(qū)動(dòng)。通用驅(qū)動(dòng)完成與外設(shè)和用戶程序的通信及控制;而下載固件的驅(qū)動(dòng)則只負(fù)責(zé)在外設(shè)連接LISB總線后把特定的固件程序下載到FX2的RAM中,使FX2的CPU重啟,模擬斷開與USB總線的連接,完成對(duì)外設(shè)的重新設(shè)置。主機(jī)根據(jù)新的設(shè)置安裝通用驅(qū)動(dòng)程序,重新枚舉外設(shè)為一個(gè)新的USB設(shè)備。
在本系統(tǒng)的驅(qū)動(dòng)程序開發(fā)中,使用的開發(fā)工具是Jun-go公司的winDriver,他支持多種操作系統(tǒng)。winDriver開發(fā)的優(yōu)點(diǎn)是用戶不需要了解操作系統(tǒng)內(nèi)部的具體工作機(jī)理,同時(shí)也不需要了解各個(gè)系統(tǒng)DDK(Developing orDebugging in Kernel)的開發(fā)工具,用戶只需使用winDriv-er提供的開發(fā)平臺(tái),即可完成驅(qū)動(dòng)程序的設(shè)計(jì)工作,剩下的底層細(xì)節(jié)由winDrivei內(nèi)核統(tǒng)一處理。從而降低了對(duì)開發(fā)者編程能力的要求,同時(shí)也大大縮短了開發(fā)周期。下面就使用winDriver開發(fā)驅(qū)動(dòng)程序的步驟做簡(jiǎn)要說明:
啟動(dòng)winDrivet。的Dri veiwizard工具;利用Driver--wizard檢測(cè)硬件是否正常;在Driverwizard中選擇所使用的開發(fā)環(huán)境,這里使用VC++6.0開發(fā)環(huán)境,并生成驅(qū)動(dòng)程序代碼;對(duì)生成的代碼進(jìn)行修改,使其符合系統(tǒng)的需要;在winDrivet環(huán)境的用戶模式下,調(diào)試驅(qū)動(dòng)程序;如果程序需要內(nèi)核訪問以提高驅(qū)動(dòng)程序的效率,進(jìn)入內(nèi)核開發(fā)。
4.3 用戶程序的編寫
用戶程序是系統(tǒng)與用戶的接口,他通過通用驅(qū)動(dòng)程序完成對(duì)外設(shè)的控制和通信。在編寫用戶程序時(shí),首先要建立與外設(shè)的連接,然后才能實(shí)施數(shù)據(jù)的傳輸。啟動(dòng)采樣后,為了保證不丟失數(shù)據(jù),用戶程序應(yīng)該建立一個(gè)工作線程專門獲取外設(shè)傳來的數(shù)據(jù)。程序中主要用到2個(gè)API函數(shù):CreateFile()和DeviceloControl()。CreateFile()取得設(shè)備句柄后,DeviceloControl()根據(jù)該句柄完成數(shù)據(jù)傳輸。程序框圖如圖5所示。
5 結(jié) 語
本文系統(tǒng)地介紹了基于USB接口的數(shù)據(jù)采集系統(tǒng),完成了軟硬件的設(shè)計(jì)工作。數(shù)據(jù)采集系統(tǒng)具有最大20 kS/s的采樣速率,8位分辨率,采樣精度小于1%,輸入范圍為一5~+5 V。在本數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)中,CY7C68013芯片靈活的接口和可編程特性簡(jiǎn)化了外部硬件的設(shè)計(jì),提高了系統(tǒng)的可靠性,也利于PCB板的制作與調(diào)試。基于USB 2.0的數(shù)據(jù)采集卡可以即插即用,彌補(bǔ)了傳統(tǒng)采集板卡插拔困難的不足。隨著時(shí)代的進(jìn)步,技術(shù)的發(fā)展,USB必將在更廣闊的領(lǐng)域得到更深層次的運(yùn)用。