1 引言
隨著微型光譜儀快速發(fā)展,CCD和PDA廣泛使用,,CCD和PDA的種類型號越來越多,,每種型號都需要專門的驅(qū)動采集板,使得開發(fā)產(chǎn)品周期長,、費用大,。這里提出一種基于FPGA和USB的通用CCD采集系統(tǒng)設(shè)計方案。該系統(tǒng)在不改變硬件的情況下可以采集多種CCD,,并上傳至PC機,,使用軟件處理采集到的數(shù)據(jù)。
2 通用CCD采集系統(tǒng)設(shè)計
系統(tǒng)部署圖如圖1所示。系統(tǒng)硬件分為接口板,、通用驅(qū)動采集板,、計算機。接口板匹配驅(qū)動信號,,將CCD輸出視頻信號通過前置處理后鏈接到CCD通用采集板,。在CCD通用采集板中,A/D轉(zhuǎn)換器對視頻信號進行模數(shù)轉(zhuǎn)換后,,按幀暫存在FPGA內(nèi)的FIFO中,,通過USB快速塊傳輸模式上傳到計算機中.最后計算機軟件MEMSpector處理并顯示采集到的譜線。
通用性是由通用CCD驅(qū)動模塊和16In8Out異步FIFO實現(xiàn)的,。根據(jù)不同類型的CCD編制不同的CCD驅(qū)動模塊,,采用16In8Out異步FIFO,F(xiàn)IFO根據(jù)CCD驅(qū)動模塊提供的FS幀同步來確定暫存A/D轉(zhuǎn)換一幀像元數(shù),,實現(xiàn)了采集A/D轉(zhuǎn)換數(shù)據(jù)與USB傳輸?shù)姆蛛x,,在修改或升級CCD驅(qū)動時,無需修改采集和數(shù)據(jù)輸出代碼,,實現(xiàn)了通用性,。
2.1 CCD接口板
由于大多數(shù)CCD管腳不兼容,視頻輸出電壓也不同,。CCD接口板提供CCD插座和轉(zhuǎn)接CCD驅(qū)動信號以及輸出信號電壓匹配,。CCD接口板是各種類型CCD鏈接到通用CCD采集板的紐帶。
2.2 通用驅(qū)動采集板
通用驅(qū)動采集板由A/D轉(zhuǎn)換,、FPGA(通用CCD驅(qū)動器模塊和16In8Out異步FIFO模塊),、USB 3部分組成,。A/D轉(zhuǎn)換部分完成系統(tǒng)的A/D轉(zhuǎn)換,;FPGA部分完成系統(tǒng)的CCD驅(qū)動、數(shù)據(jù)采集,、CDS實現(xiàn),;USB部分完成數(shù)據(jù)的傳輸。
2.2.1 A/D轉(zhuǎn)換部分
系統(tǒng)需采集多種CCD并實現(xiàn)CDS,,而且系統(tǒng)主要由USB供電,,這就要求A/D轉(zhuǎn)換速度快,供電電壓低,,最好參考電壓內(nèi)置,。AD9235-40屬于12位、40 MS/s模數(shù)轉(zhuǎn)換器系列,,采用3 V單電源供電,,該系列均內(nèi)置一個高性能采樣保持放大器(SHA)和基準(zhǔn)電壓源。AD923540采用多級差分流水線架構(gòu),內(nèi)置輸出糾錯邏輯,,在40 MSP/S數(shù)據(jù)速率時可提供12位精度,,并保證在整個工作溫度范圍內(nèi)無失碼。
FPGA中采集信號發(fā)生器提供A/D采集時鐘,,同時也控制FIFO和CCD驅(qū)動器,。A/D采樣速率不再受數(shù)據(jù)傳輸和采集制約,采樣速率完全和CCD速度匹配,。并可實現(xiàn)1幀內(nèi)1個像元的雙采樣,,從而實現(xiàn)CDS。
2.2.2 FPGA部分的通用CCD驅(qū)動器模塊
由于不同生產(chǎn)商的CCD器件的驅(qū)動時序往往差別很大,,因此需針對每種CCD器件編制其CCD驅(qū)動器模塊,。驅(qū)動時鐘和采集脈沖由分頻器和采集信號發(fā)生器提供,如圖2所示,。
CCD驅(qū)動器輸入信號由兩路驅(qū)動時鐘和積分時間控制信號INT組成,;輸出信號由幀同步信號FS和CCD Driver信號組成。不同的CCD驅(qū)動器模塊僅CCD Driver信號有所不同,,其他接口一樣,。在改變CCD時只需替換CCD驅(qū)動器模塊即可。
2.2. 3 FPGA部分的16In8Out異步FIFO
FIFO用于暫存A/D轉(zhuǎn)換的信號,。待存滿1幀并且USB塊傳輸空閑后,,將FIFO中的1幀數(shù)據(jù)通過快速塊傳輸上傳至計算機。1幀的像元個數(shù)由CCD驅(qū)動模塊提供的FS信號決定,。FIFO內(nèi)的存儲空間為192 Kb,。滿足線陣CCD和小型面陣CCD的數(shù)據(jù)存儲需求。圖3為16In8Out異步FIFO的內(nèi)部原理圖,。
圖3中,,F(xiàn)S是幀同步,在FIFO中重置暫存指針,,DataIN是暫存數(shù)據(jù)采集完畢信號,,DataRdy是判斷USB是否空閑信號,ADclk是FIFO的寫信號,,16BitIN是FIFO的讀16位入口,,讀取A/D信號,這里兼容16位,,本設(shè)計只用12位,,其他4位空閑。8BitOUT是FIFO的8位輸出口,,RD是FIFO的讀出時鐘信號,。在FIFO中讀入的16位信號分高低位分別存儲在2個8 bit存儲器中,,在輸出時,按先高后低的順序輸出,,從而完成16In8Out的轉(zhuǎn)換,,部分實現(xiàn)代碼如下:
在信號FS的控制下,F(xiàn)IFO不斷地對整幀信號進行刷新,,當(dāng)USB傳輸信號到來時,,刷新當(dāng)前幀完畢后,開始USB快速讀入操作,。
2.2.4 USB部分
USB采用Cypress公司的AD2131Q,,其核提供一種快速傳輸模式.改進8051的外部邏輯與同步/塊端點緩沖器之間的傳輸速度。將FASTXFR寄存器設(shè)置為01010000B,,讀寫選通時序模式為10,,提供更寬的脈沖寬度,便于讀取FPGA的異步FIFO信號,。FIFO存儲滿1幀數(shù)據(jù),,由USB器件使用快速塊傳輸上傳到計算機,約6 ms完成,。表1為塊傳輸傳一個像元數(shù)據(jù)所用匯編程序?qū)Ρ取?br />
2.3 軟件設(shè)計
軟件設(shè)計主要包括3方面工作:USB驅(qū)動程序設(shè)計,、動態(tài)鏈接庫設(shè)計以及應(yīng)用處理軟件設(shè)計。
2.3.1 USB驅(qū)動程序設(shè)計
EZ-USB提供的FPD(通用設(shè)備驅(qū)動程序)是一個通用的設(shè)備驅(qū)動程序,。利用Microsoft WDM DDK和Visiual C++5.0以上版本就可以修改和編譯驅(qū)動程序,,生成文件ezusb.sys。具體操作如下:①修改驅(qū)動程序的PID,。在工程里EzUsbDevice.cpp文件中修改PID.VID延用0x0547不變,,PID自行設(shè)定。②利用hex2c.exe將USB固件Intel HEX記錄格式的代碼文件轉(zhuǎn)換為C文件,,打開該C文件,,用其中的firmware[]數(shù)組代替在工程里zUsbFirmware.cpp文件中提供的數(shù)組。③編譯生成ezusb.sys文件并編寫相應(yīng)的INF文件,。
2.3.2 動態(tài)鏈接庫設(shè)計
動態(tài)鏈接庫主要是通過I/O控制調(diào)用來訪問EZ-USBGPD,。通過調(diào)用CreateFile()來取得訪問設(shè)備驅(qū)動程序的句柄,然后使用DeviceIoControl()提交不同I/O控制碼,,從而完成USB的控制和輸入/輸出操作。
2.3.3 應(yīng)用處理軟件設(shè)計
應(yīng)用軟件通過訪問動態(tài)鏈接庫(DLL)獲取采集譜線數(shù)據(jù),,其主要功能有顯示,、設(shè)置積分時間、定格譜線,、保存,、捕捉,、局部放大、添加譜線,。
3 測試結(jié)果
采用通用CCD采集系統(tǒng)分別對3款CCD進行驅(qū)動和采集,。這3種CCD的參數(shù)如表2所示。使用應(yīng)用軟件EMSpectro采集上述CCD譜線,,采集效果如圖4所示,。
4 結(jié)束語
采用該系統(tǒng)對3種不同型號CCD成功驅(qū)動并采集,測試結(jié)果達到了預(yù)期的效果,。系統(tǒng)體積小,、功耗低、兼容性好,、可擴展性高,。該系統(tǒng)已成功應(yīng)用于實驗室開發(fā)CCD相關(guān)項目中。