摘 要: 介紹了一種用于汽車姿態(tài)測量的數(shù)據(jù)采集系統(tǒng)的設計,,該系統(tǒng)基于FPGA+USB架構,采用FPGA控制整個系統(tǒng)的采集時序,, USB芯片作為數(shù)據(jù)采集通道,,上位機完成姿態(tài)解算和數(shù)據(jù)顯示功能。
關鍵詞: FPGA,;USB,;數(shù)據(jù)采集
現(xiàn)代化生產(chǎn)和科學研究對采集系統(tǒng)的要求日益提高。傳統(tǒng)的采集卡速度慢,、處理功能簡單,、采用分立元件、電路非常復雜,;而且可靠性差,、不易調試、不能很好地滿足特殊要求?,F(xiàn)場可編程門陣列(FPGA)是專用集成電路中集成度最高的一種,,用戶可對FPGA內部的邏輯模塊和I/O模塊重新配置,以實現(xiàn)用戶所需邏輯功能,。用戶對FPGA的編程數(shù)據(jù)放入芯片,,通過上電加載到FPGA中,對其進行初始化,;也可在線對其編程,,實現(xiàn)系統(tǒng)在線重構[1]。本系統(tǒng)設計采用USB2.0 CY7C68013通信接口芯片作為數(shù)據(jù)采集通道,,由FPGA芯片EP1C6Q240C8N作為采集設備的控制單元,,由PC機完成姿態(tài)的解算及結果的顯示。
1 系統(tǒng)的組成及原理
該采集系統(tǒng)主要由前端調理模塊,、A/D轉換控制模塊,、SRAM存儲模塊及USB接口模塊組成,,系統(tǒng)框圖如圖1所示。
2 FPGA主控器內部模塊
2.1 A/D轉換控制模塊
A/D轉換模塊選用AD7685芯片,。AD7685是Analog Device公司生產(chǎn)的一款16位,、電荷再分配、高速,、低功耗的逐次逼近型模數(shù)轉換器(ADC),,具有250 kS/s采樣速率。芯片在Verilog編程語言的控制下,,完成模擬信號到數(shù)字信號的轉換,。
2.2 FIFO緩存
調用FPGA片上資源實現(xiàn)片上FIFO緩存,由于A/D采樣頻率與SRAM的讀寫頻率不一致,,所以采用讀寫時鐘不同的FIFO,,達到數(shù)據(jù)緩存和轉換時鐘域的雙重目的。
2.3 SRAM乒乓緩存模塊
選用2片IS61LV25616存儲芯片,,該芯片存儲容量為256K×16,,采用Verilog硬件描述語言控制實現(xiàn)乒乓緩存,控制過程如圖2所示,。從片上FIFO輸出的數(shù)據(jù)經(jīng)選擇開關后,分別進入緩沖模塊1和緩沖模塊2,。當數(shù)據(jù)寫入緩沖模塊1時,,USB模塊從緩沖模塊2讀取數(shù)據(jù);當數(shù)據(jù)寫入緩沖模塊2時,,USB模塊從緩沖模塊1讀取數(shù)據(jù)以傳到上位機進行處理,。
2.4 USB控制模塊
USB接口芯片采用EZ-USB FX2(CY7C68013),F(xiàn)X2作為USB2.0數(shù)據(jù)通道來實現(xiàn)與主機的高速通信,。FPGA能夠滿足Slave FIFO要求的傳輸時序[2]作為Slave FIFO主控制器,。圖3分別給出了FX2與FPGA的接口圖和狀態(tài)轉換圖。
同步Slave FIFO寫時序如下:
IDLE:當寫事件發(fā)生時,,轉到狀態(tài)1,。
狀態(tài)1:指向IN FIFO,激活FIFOADR[1:0],,轉向狀態(tài)2,。
狀態(tài)2:如果FIFO滿標志為“假”(FIFO不滿),則轉向狀態(tài)3;否則停留在狀態(tài)2,。
狀態(tài)3:傳送總線驅動數(shù)據(jù),,為1個IFCLK激活SLWR,轉向狀態(tài)4,。
狀態(tài)4:如果有更多的數(shù)據(jù)要寫,,則轉向狀態(tài)2,;否則轉向IDLE。
3 USB芯片固件程序及驅動程序
3.1 FX2的固件程序設計
CY7C68013芯片固件程序負責處理PC機發(fā)來的各種USB請求,,以完成主機與外圍電路間的數(shù)據(jù)傳輸,。寫固件程序是比較復雜的,需要用到大量的函數(shù),,但其基本結構卻相對簡單,,包括下面3個過程[3]:
(1)初始化:處理器和外圍電路的初始化。
(2)主函數(shù):完成符合設備特定要求的代碼,。
(3)中斷處理:處理各種中斷的程序代碼,。
Cypress公司的EZ-USB FX2開發(fā)套件提供給用戶1個固件函數(shù)庫(Ezusb.lib)和固件框架(Framework),兩者均是基于KEIL C51進行開發(fā)的,。固件函數(shù)庫提供了一系列的函數(shù)來加速USB固件程序的開發(fā),,使用時只需在程序中包含EZUSB.H和EZREGS.H兩個頭文件,并在項目中鏈接Ezusb.lib,,就可以直接使用固件庫中的各個函數(shù)[4],。
在程序起始時,固件框架將執(zhí)行如下步驟:
(1)首先設置所有的內部狀態(tài)變量,,即設置起始的初值,。
(2)調用用戶的初始設置函數(shù)TD_Init(),待返回后,,固件框架會設置USB為未配置的狀態(tài),,并且使能中斷。
(3)緊接著在1 s的間隔內,,開始重新列舉設備,,并直到設置(SETUP)封包收到端點0為止。
(4)一旦SETUP包被檢測到,,固件程序結構框架就開始進行任務分配,。任務分配就是依次重復地執(zhí)行下面的過程:
①調用用戶函數(shù)TD_Poll()。
?、跈z測是否有標準的設備請求,,如果有,則執(zhí)行指令并做出相應的操作,。
③檢測USB核是否有USB掛起信號,,如果收到,則調用用戶程序TD_Suspend(),,從該函數(shù)成功返回后(返回值為TRUE),,再檢測是否發(fā)生USB喚醒事件。如果未檢測到,,則處理器處于掛起方式,;如果檢測到,,則調用用戶程序TD_Resume(),程序繼續(xù)運行,。如果從TD_Suspend()返回為FALSE時,,則程序繼續(xù)進行。
標準請求和vendor專用請求由框架分析和執(zhí)行,。默認情況下,,對標準請求執(zhí)行USB規(guī)定的響應,無論如何,,框架提供交互的連接,,以允許用戶程序處理或覆蓋指定的設備請求。EZ-USB中斷也交給框架進行處理,,任務循環(huán)的流程圖如圖4所示,。
在FX2芯片的固件程序設計中,最關鍵的就是系統(tǒng)初始化TD_Init(void)[3-5],,下面是其部分代碼,。
void TD_Init(void)
{
CPUCS=((CPUCS & ~bmCLKSPD)|bmCLKSPD1);
//設置CPU時鐘頻率為48 MHz
SYNCDELAY,;
//設置68013工作于Slave FIFO模式
REVCTL=0x03,;
//必須設置REVCTL.0和REVCTL.1為1
SYNCDELAY;
IFCONFIG=0x43,; //工作于同步FIFO模式
SYNCDELAY,; //配置各個端點的工作狀態(tài)
EP2CFG=0xE8; //端點2,,IN,塊傳輸,,1 024 B,,4倍緩沖區(qū)
SYNCDELAY;
EP2FIFOCFG=0x09,; //配置端點2工作于16位模式,,自動接收IN令牌包
SYNCDELAY;
PINFLAGSAB=0x00,; //定義FLAGA為可編程級標志,,F(xiàn)LAGB:FIFO滿標志位
SYNCDELAY; //定義FLAGC為滿標志,,
PINFLAGSCD=0x00,;
SYNCDELAY; //一般不需要FLAGD
PORTACFG=0x00,; //用PA7/FLAGD作為端口引腳,,不作為FIFO標志
SYNCDELAY,;
FIFOPINPOLAR=0x00; //設置所有FIFO接口引腳為低電平有效
SYNCDELAY,;
EP2AUTOINLENH=0x02,; //端點2自動接收512B數(shù)據(jù)
SYNCDELAY;
EP2AUTOINLENH=0x00,;
SYNCDELAY,;
//復位EP2的FIFO緩沖區(qū)
FIFORESET=0x80; //不接收主機發(fā)出的命令
SYNCDELAY,;
FIFORESET=0x02,; //復位EP2的FIFO緩沖區(qū)
SYNCDELAY;
FIFORESET=0x00,; //恢復正常工作
SYNCDELAY,;
Rwuen=TRUE; //使能遠程喚醒功能
}
3.2 USB設備驅動程序
USB設備驅動程序的主要功能是使Win32應用程序能正確訪問本數(shù)據(jù)采集卡的硬件設備,。本設計中將CY7C68013的固件代碼存放在上位機上,,當系統(tǒng)上電或USB連接時,再將它下載至芯片的RAM中,,由增強型8051執(zhí)行,。這一過程需要使用2個驅動程序:1個用于下載芯片的固件程序,另1個用于實現(xiàn)本數(shù)據(jù)采集卡的具體功能,。也可以使用EZ-USB的通用驅動程序,,很多USB芯片的廠商都為其USB芯片提供了通用驅動程序,可以滿足大部分系統(tǒng)的需求,,用戶可在此基礎上直接進行固件程序的開發(fā)[6],。
4 主機應用程序
應用程序主要負責讀取系統(tǒng)硬件所輸出的數(shù)據(jù)采集結果,并實時顯示波形,,所使用的編程語言為微軟的Visual C++6.0語言編寫的Win32應用程序,。
主要控件包括:采集控制組按鈕,USB組按鈕,。采集控制組按鈕負責控制硬件系統(tǒng)是否進行數(shù)據(jù)采集,,并使用USB塊傳輸來讀取采集結果。USB組按鈕主要負責讀取該數(shù)據(jù)采集卡的USB設備描述符和配置描述符,。
在該數(shù)據(jù)采集系統(tǒng)的設計中,,CY7C68013芯片靈活的接口和FPGA可編程特性簡化了外部硬件的設計,提高了系統(tǒng)的可靠性,,且利于設備的生產(chǎn)與調度,。事實證明,本文設計的系統(tǒng)完全滿足設計和使用要求。
參考文獻
[1] 嚴雪萍.基于FPGA的高速數(shù)據(jù)采集系統(tǒng)[J].微計算機信息,,2008(1-2):209-211.
[2] 華清遠見嵌入式培訓中心.FPGA應用開發(fā)入門與典型實例[M].北京:人民郵電出版社,,2008.
[3] 錢峰.EZ-USB FX2單片機原理、編程及應用[M].北京:北京航空航天大學出版社,,2006.
[4] 李英偉.USB2.0原理與工程開發(fā)(第2版)[M].北京:國防工業(yè)出版社,,2007.
[5] 張弘.USB接口技術[M].西安:西安電子科技大學出版社,2002.
[6] 薛園園.USB應用開發(fā)技術大全[M].北京:人民郵電出版社,,2007.