在工業生產和科學技術研究中,常利用PC或工控機對各種數據進行采集,以獲得所需要的控制信息和實驗數據。傳統的數據采集系統多以ISA,EISA或PCI插卡的形式完成數據傳輸,這種方式存在安裝麻煩,受計算機插槽數量、地址、中斷資源限制,可擴展性差等缺點。由于通用串行總線(Universal Serial Bus.USB)具有自動被系統識別.自動安裝驅動程序、自行進行系統配置,以及支持不同速率的同步和異步傳輸方式,支持熱插拔和即插即用(Plug and Play,PNP)等優點,已逐漸成為現代數據傳輸的發展趨勢。目前實現USB數據傳送多采用專用的USB接口芯片,文獻采用的PDIUSBDl2可支持USBl.1協議,文獻E37采用的接口芯片為USBl00也僅支持USBl.1協議,文獻采用CP2102符合USB2.0協議,其通用的驅動程序可將設備作為虛擬的COM端口設備進行操作,文獻采用Philips公司ISPl581芯片作為USB2.0的接VI芯片’。這里采用Cypress公司的CY7C68013作為USB接口芯片,設計實現了基于單片機和USB2.0的數據采集系統。該系統可實現單通道模擬信號的采集,主機應用程序負責啟動和停止采樣,采樣間隔時間由主機應用程序設置調整,采樣數據傳給主機應用程序顯示并保存。 1 系統硬件設計 1.1 系統硬件組成 整個系統的硬件結構如圖1所示。AT89C52為主控單片機,負責控制A/D轉換、上傳采集數據、接收并執行主機的命令。CY7C68013為USB接口芯片。A/D轉換芯片采用TI公司生產的TLC549,AD780是一款高精度參考電壓芯片,可為TLc549提供2.5 V或 者3.0 V的參考電壓。系統+5 V電源由主機的USB 接口提供,CY7C68013所需的電源為+3.3 V,由+5 v 電源接穩壓芯片APlll7提供,圖中沒有畫出。 1.2 TLC549 TLC549是以8位開關電容逐次逼近A/D轉換器為基礎而構造的CMOS A/D轉換器,將其設計成能通過三態輸出與微處理器或外圍設備串行接VI。TLC549用輸入/輸出時鐘(I/O CLOCK)和芯片選擇(CS)輸入作數據控制,轉換結果由DATAOUT引腳輸出。I/o CLOCK端的最高頻率可達1.1 MHz。TLC一549片內系統時鐘工作在4 MHz(不需要外部時鐘)。片內系統時鐘使內部器件的操作獨立于串行輸入/輸出時序并允許TLC549像許多軟件和硬件所要求的那樣工作。I/O CLOCK和內部系統時鐘可以實現高速數據傳送,使得TLc549可實現40 kHz的采樣頻率。TLC549具有通用控制邏輯及自動工作或在微處理器控制下工作的片內采樣/保持電路,差分高阻抗基準電壓輸入端,易于實現比例轉換的高速轉換器,定標及隔離電路。整個開關電容逐次逼近轉換器電路的設計允許在小于17μs的時間內,以最大誤差±0.5為最低有效位的精度實現轉換。 1.3 CY7(368013及其固件程序 EZ—USB FX2系列芯片CY7C68013是業界第一個支持USB2.0,同時向下兼容USBl.1規范的單片機,為描述方便以下簡稱該芯片為FX2。FX2支持全速傳輸(12 Mb/s)和高速傳輸(480 Mb/s),該芯片將USB2.O收發器、串行接口引擎SIE、增強的8051內核、GPIF等集成于一體。FX2內含4 KB的端點緩沖區F1FO,可以被配置為具有不同大小緩沖區的IN或OUT端點(EP2,EP4,EP6,EP8),具有USB協議所規定的4種傳輸方式,即控制方式、中斷方式、批量傳輸、和同步傳輸方式。Cypress公司為FX2提供了完善的軟件開發工具包,降低了開難度,加快了開發進度。 FX2可以工作在3種不同的模式下完成USB數據的傳輸,即:Ports模式、GPIF模式和Slave FIFO模式。Ports模式下其uSB數據的傳輸主要在FX2的8051內核參與下完成,數據傳輸通過執行指令實現,因此數據的傳輸率比較低,對大批量數據傳輸一般采用后兩種方式。GPIF方式,稱為通用可編程接口方式,在此模式下,FX2的FIFO是由內部的GPIF控制的,FX2利用由軟件編程輸出讀寫控制波形讀取FIFO標志,控制FIFO的選通,并且對外部設備提供了用戶專用接口,可以對許多通用總線接口進行訪問,如ASIC,DSP和存儲器等。文獻利用FX2的GPIF方式構建了LISB數據傳輸通道。Slave FIFO方式是將FX2的FIFO作為外部控制器(如FPGA或單片機)的從屬FIFO,外部控制器可像普通FIFO操作一樣對FX2的FIFO進行讀寫,而不考慮該包的大小,傳輸速率可明顯提高,文中FX2在Slave FIFO模式下工作。FX2有3種封裝形式:128引腳、100引腳和56引腳,這里選用FX2的56引腳的封裝形式。 FX2芯片在使用時必須先下載固件程序,固件程序主要負責完成芯片初始化,對芯片進行必要的配置、處理設備請求、進行數據傳輸等相應工作。用戶通過編寫適當的固件程序完成對FX2的設置。Cypress公司提供了一個固件程序開發框架可以大大簡化FX2芯片固件程序的開發難度。通過編寫用戶初始化函數TD_Init(),用戶可以規定各種端點資源的使用以及配置外圍接口的輸入/輸出等。其主要配置語句如下: 固件程序將FX2配置為異步Slave FIFl0模式,總線寬度8位,在4個端點中,EP4和:EP8未被使用,EP2和EP6的配置如表1所示。由于采用自動輸入/輸出模式,主機和單片機通過旁路FX2的CPU直接連接,所有數據被直接通過FIFO管道提交,不需固件程序干預。在FX2的slave FIF0模式下,FIFOADR[1:0]引腳作為地址線選擇某個端點,SLCS相當于片選信號,SLwR(寫)與單片機的wR引腳相連,SLRD(讀)和SLOE(輸出使能)與單片機的RD引腳相連。單片機通過訪問地址為0x00的外部存儲器的方式就可以實現對EP2的訪問,同理可訪問EP6端點。 單片機通過FX2的3個標志引腳(FALGA,FLAGB,FLAGC)來全面掌握FX2的各端點FIFO的狀況。FLAGA定義為輸入端點EP6的滿標志,當輸入數據滿時該引腳為低電平;FLAGB被定義為輸出端點EP2的空標志,當主機傳來的數據被讀空時該引腳為低電平;FLAGC定義為當EP2端點整個FIF0中的字節數大于等于1時為低電平。假設當前主機沒有傳送命令,則FLAGC為高電平,當主機發送命令后,EP2的字節數大于等于1,則FLAGC變為低電平。這樣在FALGC引腳上產生了一個下降沿,將此引腳與單片機的INTO引腳相連,則當主機發送命令后單片機會觸發INT0中斷,在INTO的中斷處理程序中單片機讀取并執行傳來的命令。 2 系統軟件設計 2.1 驅動程序 在EZ—USB FX2開發包中,提供有通用的驅動程序包,對該程序包稍加修改就可生成一個具有下載固件并完成設備重枚舉功能的設備驅動程序。文獻對驅動程序的開發步驟有詳細的記述,這里采用的就是這個通用驅動程序(GPD)。 2.2 主機應用程序 主機應用程序主要實現向設備發送命令數據包,接收設備傳送的數據并進行顯示,主機應用程序通過通用驅動程序來完成對設備的控制和通信。應用程序采用VC6.O編寫,與設備通信時,首先通過調用win32函數CreateFile()來取得訪問設備驅動程序的句柄。該函數的語句實例如下: 用戶得到設備句柄后,就可以使用win32函數DevicelontroI()來向設備提交相應的IOCTL控制碼,進行讀寫和控制操作,完成相應操作后應用程序通過Win32函數CloseHandle()關閉設備句柄結束1次操作。以下是部分操作的代碼實例: 應用程序中有兩個線程,輔助線程為采樣線程,采樣線程的流程如圖2所示。 采樣線程負責從設備讀取數據,并通過消息傳送機制與主線程通信;主線程負責采樣數據的顯示、存盤,向設備發送命令數據包,以及啟動/停止采樣線程。當執行啟動采樣命令時,主線程先向設備發送啟動命令數據包,然后啟動采樣線程準備接收數據;當執行停止采樣命令時,主線程先向設備發送停止命令數據包,然后停止采樣線程結束數據的接收。命令數據包大小為4 B.包含有命令字和采樣間隔時間參數等信息。 2.3 單片機程序 如上所述,單片機的INTO中斷一旦觸發,表示主機有命令數據包傳送到。在INTO的中斷處理程序中,單片機讀取EP2端點的數據直到EP2端點為空(FLAGB為低電平),獲得上位機發送的命令數據包。若接收到啟動命令,則根據命令數據包的采樣間隔時間參數來設置計數變量和定時器T0的初值并啟動T0;若接收到的命令為停止命令,則停止定時器TO。在TO的中斷處理程序中若相應的計數變量達到設定值,則完成A/D轉換、讀取數據以及將數據寫入EP6端點的操作。計數變量和TO的初值均根據命令數據包的參數進行設置,因此設備的采樣間隔時間可以由主機程序進行調整。 3 結 語 工作于Slave FIFo方式下的FX2相當于在外部控制和主機之間構造了一個的數據管道。通過對FX2的FIFO標志引腳FLAGA,FALGB,FLAGc的配置,使該芯片可以方便地與單片機進行連接,單片機通過外部中斷獲知主機數據的到達,通過其他標志引腳獲得端點FIFO的信息,單片機和主機通信時,感覺不到FX2的存在。基于單片機和Fx2的數據采集系統擴展方便、編程簡單、無需外接電源、采樣間隔時間由主機調整,實現了數據采集系統的小型化和便攜化,在現場信號采集,教學實驗,儀器儀表等領域具有一定的應用前景。 |