基于USB2.0與FPGA技術(shù)的高速數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
近年來(lái)筆記本電腦迅速普及和更新,其中大部分已經(jīng)不配置RS232接口,而USB接口已成為今后一段時(shí)間PC機(jī)與外設(shè)接口的主流。本采集系統(tǒng)的設(shè)計(jì)構(gòu)建了一個(gè)基于USB接口的多功能通用數(shù)據(jù)采集、傳輸平臺(tái),將嵌入式系統(tǒng)的實(shí)時(shí)性、靈活性和PC機(jī)強(qiáng)大的數(shù)據(jù)存儲(chǔ)、處理、顯示功能結(jié)合起來(lái)。該采集系統(tǒng)在智能儀器儀表、測(cè)控系統(tǒng)、工控系統(tǒng)等領(lǐng)域有廣闊的應(yīng)用前景。
本文引用地址:http://m.butianyuan.cn/article/86243.htm1 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
1.1 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)總體結(jié)構(gòu)框圖如圖1所示,系統(tǒng)包括:單片機(jī)與USB接口模塊、FPGA模塊、信號(hào)調(diào)理及A/D模塊。其中,單片機(jī)外圍電路相對(duì)簡(jiǎn)單,整個(gè)系統(tǒng)主要通過(guò)PC機(jī)的程序界面控制操作;USB接口負(fù)責(zé)與PC機(jī)通信;FPGA模塊負(fù)責(zé)完成數(shù)據(jù)的采集與緩存。
1.2 單片機(jī)與USB接口模塊
本設(shè)計(jì)的目的是構(gòu)建以PC機(jī)為平臺(tái)的數(shù)據(jù)采集系統(tǒng),單片機(jī)的功能僅限于接收PC機(jī)的命令、控制FPGA工作。PC機(jī)作為整個(gè)系統(tǒng)的人機(jī)界面,控制整個(gè)數(shù)據(jù)采集系統(tǒng)進(jìn)行采集、存儲(chǔ)和處理。由此單片機(jī)可以選擇低成本的8XC51系列。為了提高系統(tǒng)的靈活性,采用單片機(jī)與USB接口芯片分離的方案,選擇Philip公司的ISP1581 USB2.0接口芯片。該芯片與8XC51系列單片機(jī)的接口非常簡(jiǎn)單,可以極大地降低系統(tǒng)成本。
1.3 FPGA模塊
采用FPGA進(jìn)行采樣控制的最大特點(diǎn)是系統(tǒng)具有重構(gòu)性和通用性。設(shè)計(jì)中采用了Altera公司的低成本FPGA的Cyclone系列(實(shí)際試驗(yàn)時(shí),在更便宜的Acex1k器件上也可以實(shí)現(xiàn)),控制高速A/D芯片以20MSPS的速度采樣。FPGA模塊的設(shè)計(jì)具體包括FIFO、單片機(jī)接口、A/D控制接口、DMA控制模塊和主控制器等子模塊的設(shè)計(jì)。
1.4 PC機(jī)端軟件平臺(tái)
PC機(jī)采集程序使用VC++實(shí)現(xiàn),直接調(diào)用Philips公司提供的驅(qū)動(dòng)程序進(jìn)行數(shù)據(jù)讀寫(xiě),大大降低了開(kāi)發(fā)難度與風(fēng)險(xiǎn)。本設(shè)計(jì)中,PC機(jī)端軟件設(shè)計(jì)包括應(yīng)用程序的界面設(shè)計(jì)、多線程數(shù)據(jù)采集、存儲(chǔ)與處理模塊的設(shè)計(jì),以及與USB底層驅(qū)動(dòng)程序的通信動(dòng)態(tài)鏈接庫(kù)的設(shè)計(jì)。
2 USB接口模塊設(shè)計(jì)
2.1 USB接口芯片
USB接口芯片ISP1581具有體積小、高速、與單片機(jī)的接口相對(duì)簡(jiǎn)單等特點(diǎn)。除了控制端點(diǎn)外,ISP1581還有7個(gè)輸入(IN)端點(diǎn)和7個(gè)輸出(OUT)端點(diǎn)。每個(gè)端點(diǎn)可以靈活配置數(shù)據(jù)傳輸方式以及數(shù)據(jù)緩存區(qū)(FIFO)的大小,端點(diǎn)FIFO最大容量可以達(dá)到2KB。ISP1581芯片在配置枚舉時(shí)需要單片機(jī)固件的支持,一旦正確完成了配置和驅(qū)動(dòng)加載,單片機(jī)對(duì)于ISP1581芯片就如同普通存儲(chǔ)器一樣可以進(jìn)行讀寫(xiě)操作,以發(fā)送或接收數(shù)據(jù)。
2.2 固件編程
USB通信完全由PC主機(jī)發(fā)起。在這種結(jié)構(gòu)下,固件總是一直在等待主機(jī)命令,再根據(jù)命令去執(zhí)行相應(yīng)的程序。固件的基本思想是采用模塊化設(shè)計(jì),分成 main.c等7個(gè)模塊。ISP1581固件結(jié)構(gòu)如圖2所示。圖中,main.c為主循環(huán),isr.c主要負(fù)責(zé)中斷處理,Chap9.c主要負(fù)責(zé)響應(yīng)主機(jī)的請(qǐng)求。用戶的應(yīng)用程序?qū)?lái)也可以包括在main.c循環(huán)中。
2.3 單片機(jī)端程序設(shè)計(jì)
單片機(jī)端程序主要包括初始化模塊,外圍Flash、EEPROM、RAM、液晶顯示器、按鍵等的讀寫(xiě)控制模塊,USB接口芯片固件模塊,A/D采樣工作模式、速度以及采樣數(shù)據(jù)的讀寫(xiě)的FPGA硬件控制模塊等。本設(shè)計(jì)的指導(dǎo)思想是:充分利用PC機(jī)和嵌入式系統(tǒng)的優(yōu)點(diǎn),對(duì)MCU端的要求盡量簡(jiǎn)化。具體軟件流程示意圖如圖3所示。
USB作為一個(gè)通信接口,首先必須完成配置,然后才能進(jìn)行用戶數(shù)據(jù)的發(fā)送/接收,在循環(huán)中必須隨時(shí)檢查是否有主機(jī)的配置命令。配置枚舉過(guò)程是USB固件編程當(dāng)中較為復(fù)雜的部分,其流程如圖4所示。USB設(shè)備接入到主機(jī)并被主機(jī)識(shí)別后,主機(jī)首先以默認(rèn)的地址(00H)發(fā)送一個(gè)設(shè)置(SETUP)包,新接入的設(shè)備必須接收此包并響應(yīng)請(qǐng)求。然后主機(jī)會(huì)發(fā)送輸入包讀取設(shè)備描述符,初步判斷設(shè)備的屬性后,再設(shè)置設(shè)備的地址,隨后再用這個(gè)地址讀取設(shè)備的各種描述符以識(shí)別并且配置設(shè)備。可見(jiàn),在設(shè)備配置過(guò)程中,主機(jī)讀取的數(shù)據(jù)較多,設(shè)備一旦接收到一個(gè)SETUP包之后便會(huì)判斷主機(jī)的請(qǐng)求類型,然后進(jìn)入請(qǐng)求處理循環(huán)等待主機(jī)的進(jìn)一步命令,如果再次收到一個(gè)IN令牌便會(huì)向控制端點(diǎn)中寫(xiě)入數(shù)據(jù),并且根據(jù)數(shù)據(jù)長(zhǎng)度再次寫(xiě)端點(diǎn)直到數(shù)據(jù)發(fā)送完畢。USB的標(biāo)準(zhǔn)請(qǐng)求包括讀取設(shè)備描述符、配置描述符、端點(diǎn)描述符、設(shè)置地址、配置設(shè)備等,廠商請(qǐng)求由用戶自行定義。
評(píng)論