楊勇奇 王典洪 徐朝玉 倪效勇 羅林波
摘 要: 設(shè)計(jì)一種以Sony面陣CCD器件ICX618為傳感器的實(shí)時(shí)圖像采集系統(tǒng)。該系統(tǒng)采用FPGA作為控制核心,由AD9945芯片對(duì)CCD的輸出信號(hào)進(jìn)行相關(guān)雙采樣處理和A/D轉(zhuǎn)換,經(jīng)USB接口完成數(shù)據(jù)的高速傳輸,最后由上位機(jī)對(duì)數(shù)據(jù)進(jìn)行處理和顯示。實(shí)驗(yàn)表明,設(shè)計(jì)的CCD圖像采集系統(tǒng)在40 f/s的幀頻下工作穩(wěn)定,系統(tǒng)性能好、成本低、可靠性高,具有較好的實(shí)用價(jià)值,能夠?yàn)槠渌吞?hào)CCD的應(yīng)用提供參考。
關(guān)鍵詞: 圖像采集; 面陣CCD; FPGA; USB; 傳感器; 數(shù)據(jù)高速傳輸
中圖分類號(hào): TN386.5?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2018)16?0022?04
Abstract: A real?time image acquisition system with the area array CCD ICX618 made by Sony as the sensor is designed. In the system with FPGA as the control core, the AD9945 chip is used to perform the related double sampling processing and A/D conversion for output signals of the CCD. The USB interface is used to complete high?speed data transmission, and data is processed and displayed on the upper computer. The experimental results show that the designed CCD image acquisition system can work stably at the frame frequency of 40 f/s, has good performance, low cost, high reliability, and good practical value, and can provide a reference for the application of other types of CCDs.
Keywords: image acquisition; area array CCD; FPGA; USB; sensor; high?speed data transmission
CCD是一種能將光信號(hào)轉(zhuǎn)變?yōu)殡娦盘?hào)的探測(cè)器件,鑒于其體積小、功耗低、動(dòng)態(tài)范圍大、響應(yīng)速度快等優(yōu)點(diǎn),在圖像傳感和圖像檢測(cè)領(lǐng)域得到廣泛應(yīng)用[1]。在X射線衍射儀(X?Ray Diffraction,XRD)中,利用面陣CCD替代測(cè)角儀是實(shí)現(xiàn)儀器便攜式應(yīng)用的關(guān)鍵技術(shù)[2],但應(yīng)用于X射線波段的科研級(jí)大面陣CCD價(jià)格十分昂貴,單片價(jià)格達(dá)到數(shù)萬元,而且其內(nèi)部工藝復(fù)雜,對(duì)控制電路要求極其嚴(yán)格,容易因?yàn)榭刂撇划?dāng)造成損壞[3]。采用工業(yè)級(jí)的CCD搭建一個(gè)圖像采集系統(tǒng),為科研級(jí)面陣CCD的應(yīng)用提供一個(gè)前期驗(yàn)證的參考模型是非常必要的。本文設(shè)計(jì)了一套實(shí)時(shí)圖像采集系統(tǒng),采用FPGA為系統(tǒng)控制核心,以CCD為圖像傳感器,經(jīng)AD9945實(shí)現(xiàn)高速A/D轉(zhuǎn)換,通過USB接口連接FPGA和計(jì)算機(jī)完成數(shù)據(jù)和命令的傳輸,最后在上位機(jī)程序中實(shí)時(shí)顯示采集的圖像數(shù)據(jù)。
系統(tǒng)架構(gòu)如圖1所示,該系統(tǒng)硬件架構(gòu)圖由CCD圖像傳感器、FPGA、信號(hào)處理電路和USB接口組成。
系統(tǒng)上電后,首先完成FPGA內(nèi)各模塊參數(shù)的初始化。當(dāng)FPGA接收到采集命令后,輸出CCD的驅(qū)動(dòng)時(shí)序,CCD在驅(qū)動(dòng)時(shí)序的控制下輸出光電轉(zhuǎn)換后的模擬電壓。其經(jīng)射極跟隨器后對(duì)AD9945芯片進(jìn)行相關(guān)雙采樣和A/D轉(zhuǎn)換,轉(zhuǎn)換結(jié)果經(jīng)FPGA緩存和處理后傳輸至USB芯片內(nèi)置的FIFO中。當(dāng)FIFO達(dá)到給定深度時(shí)自動(dòng)向計(jì)算機(jī)發(fā)送存儲(chǔ)的數(shù)據(jù),上位機(jī)對(duì)接收的數(shù)據(jù)進(jìn)行存儲(chǔ)、處理,最終實(shí)現(xiàn)圖像的實(shí)時(shí)顯示。
1.1 FPGA驅(qū)動(dòng)及控制模塊
系統(tǒng)選用的是Altera公司的Cyclone Ⅱ系列的EP2C8T144C8N 芯片。其性價(jià)比高,擁有8 256個(gè)邏輯單元,144個(gè)I/O口,可滿足系統(tǒng)的要求。FPGA是整個(gè)系統(tǒng)的核心,主要負(fù)責(zé)各芯片的初始化參數(shù)配置、CCD驅(qū)動(dòng)時(shí)序的產(chǎn)生、A/D采樣的控制、采樣數(shù)據(jù)的預(yù)處理以及與USB接口的通信。
1.2 CCD驅(qū)動(dòng)模塊
CCD選用的是一款由Sony公司生產(chǎn)的ICX618面陣圖像傳感器,其總像素為692(V)×504(H),采取隔行掃描方式允許所有像素信號(hào)在[160] s讀出,可以通過電子快門控制芯片的曝光時(shí)間長(zhǎng)短,其具有高分辨率、高靈敏度、低暗電流噪聲的特性[4],非常適合作為圖像傳感器件。CCD的技術(shù)應(yīng)用中其驅(qū)動(dòng)電路的設(shè)計(jì)是最為關(guān)鍵的技術(shù)。只有符合器件要求的驅(qū)動(dòng)信號(hào)才能有效轉(zhuǎn)移CCD的光生電荷,這直接影響成像質(zhì)量。因而根據(jù)器件的驅(qū)動(dòng)要求設(shè)計(jì)出規(guī)范合理的驅(qū)動(dòng)電路顯得尤為重要,設(shè)計(jì)的驅(qū)動(dòng)電路如圖2所示。
根據(jù)手冊(cè)要求,ICX618需提供10路驅(qū)動(dòng)時(shí)序,分別為6路垂直轉(zhuǎn)移信號(hào)、2路水平轉(zhuǎn)移信號(hào)、1路復(fù)位信號(hào)、1路積分控制信號(hào)。垂直轉(zhuǎn)移信號(hào)中[V?1]和[V?4]要求為-5.5 V,0 V兩個(gè)等級(jí),[V?2A/B]和[V?3A/B]要求為-5.5 V,0 V,15 V三個(gè)等級(jí)。由于FPGA輸出的TTL電平為0 V,3.3 V兩個(gè)等級(jí),故引入XSG1,XSG2與垂直信號(hào)相組合,配合垂直時(shí)鐘驅(qū)動(dòng)芯片CXD1267得到三個(gè)等級(jí)的輸出。水平轉(zhuǎn)移信號(hào)[H?1]和[H?2]以及復(fù)位信號(hào)[?RG]可由FPGA直接驅(qū)動(dòng),這里使用ACT04芯片將輸入信號(hào)反向,使其與垂直信號(hào)相統(tǒng)一。
1.3 信號(hào)處理模塊
信號(hào)處理模塊包括射極跟隨器和A/D轉(zhuǎn)換電路。CCD的輸出接一個(gè)射級(jí)跟隨器,起到緩沖輸出提高負(fù)載的作用,以減少與A/D轉(zhuǎn)換電路直接相連帶來的影響,增強(qiáng)系統(tǒng)的抗干擾能力[5]。A/D采樣選用ADI公司的AD9945芯片完成,該芯片是一款針對(duì)逐行掃描面陣型CCD而設(shè)計(jì)的信號(hào)處理器。其內(nèi)部集成了可調(diào)增益放大(VGA)、黑電平鉗位、CDS以及12位高速A/D轉(zhuǎn)換等功能[6]。上電后,F(xiàn)PGA通過三線串行接口對(duì)AD9945的內(nèi)部寄存器進(jìn)行設(shè)置,主要設(shè)置鉗位電平和VGA增益等級(jí)。工作時(shí),相關(guān)雙采樣電路在每一像素周期內(nèi)對(duì)輸入的CCD信號(hào)[7]采樣兩次,一次為復(fù)位后保持的電平,一次為有效信號(hào)的電平,兩者分別對(duì)應(yīng)采樣時(shí)序信號(hào)SHP和SHD,經(jīng)過差分消除了噪聲干擾,得到了質(zhì)量較高的有效信號(hào),同時(shí)給芯片輸入光學(xué)黑電平和空白像素的時(shí)序信號(hào),以進(jìn)一步消除暗電流噪聲的影響。通過一系列的采樣處理,最終得到12位的數(shù)字信號(hào)傳輸給FPGA,進(jìn)行數(shù)據(jù)的緩存和預(yù)處理。
1.4 USB接口模塊
選用USB作為圖像系統(tǒng)的通信接口,是因?yàn)槠浼嫒菪院谩⒅С譄岵灏?、成本低、傳輸速率高等?yōu)點(diǎn),理論上最高傳輸速率為480 MB/s,完全滿足實(shí)時(shí)圖像傳輸要求。本設(shè)計(jì)中選用Cypress公司生產(chǎn)的CY7C68013A芯片,其內(nèi)部集成了USB 2.0協(xié)議的處理器、增強(qiáng)型8051內(nèi)核, 8.5 kB的RAM和4 kB的FIFO存儲(chǔ)器等,用于數(shù)據(jù)傳輸?shù)闹饕袃煞N模式:GPIF和Slave FIFO[8]。由于不考慮內(nèi)部CPU處理,只利用芯片的傳輸功能,故選擇Slave FIFO模式更利于圖像數(shù)據(jù)的高速傳輸。USB接口電路如圖3所示,F(xiàn)PGA可與CY7C68013A芯片直接相連,通過固件程序配置芯片為同步Slave FIFO寫模式,即由FPGA提供芯片的時(shí)鐘信號(hào)(IFCLK),
系統(tǒng)中設(shè)置與像素采樣頻率一致為16 MHz。SLWR是數(shù)據(jù)寫入FIFO的控制信號(hào),當(dāng)其有效時(shí),數(shù)據(jù)總線上的數(shù)據(jù)才會(huì)在時(shí)鐘信號(hào)IFCLK的上升沿被寫入FIFO,所以控制SLWR有效信號(hào)出現(xiàn)的時(shí)間作為有效圖像信號(hào)的范圍,而無需添加圖像的幀頭幀尾結(jié)構(gòu)就能準(zhǔn)確得到一幀圖像,這樣有利于減少數(shù)據(jù)傳輸量并提高圖像幀率。ON/OFF是圖像采集開啟與關(guān)閉的控制信號(hào)。SCLK和SDAT是USB芯片與FPGA串行通信的時(shí)鐘和數(shù)據(jù)線。FULL是USB芯片內(nèi)部FIFO滿狀態(tài)標(biāo)識(shí),當(dāng)FPGA向FIFO發(fā)送的數(shù)據(jù)達(dá)到滿狀態(tài)時(shí)該標(biāo)識(shí)位會(huì)發(fā)出相應(yīng)的指示狀態(tài)。系統(tǒng)中FIFO設(shè)置為四重緩沖,512 B的緩沖區(qū),滿標(biāo)識(shí)為低電平有效。
系統(tǒng)軟件設(shè)計(jì)包括FPGA程序、USB固件程序、USB設(shè)備驅(qū)動(dòng)程序和上位機(jī)程序。各程序基于不同的軟件編寫平臺(tái)和語言編寫,彼此相互配合,共同完成圖像采集工作。
2.1 FPGA程序
FPGA程序使用Quartus Ⅱ軟件以VHDL硬件描述語言編寫,采用自上而下模塊化的編程方法,主要分為ICX618驅(qū)動(dòng)時(shí)序產(chǎn)生模塊、USB串行通信模塊、AD9945配置模塊、數(shù)據(jù)發(fā)送模塊、倍頻模塊。這里主要介紹ICX618驅(qū)動(dòng)時(shí)序產(chǎn)生模塊:FPGA的主時(shí)鐘采用40 MHz,像素讀出時(shí)鐘由PLL分頻產(chǎn)生為16 MHz,又由于水平轉(zhuǎn)移信號(hào)H1,H2和復(fù)位信號(hào)RG是在每個(gè)像素周期內(nèi)的不同時(shí)間產(chǎn)生,因此以160 MHz的時(shí)鐘進(jìn)行計(jì)數(shù),一個(gè)像素周期被放大10倍,這樣可以精確地控制水平和復(fù)位信號(hào)出現(xiàn)的位置和占空比。芯片每行分為780個(gè)像素時(shí)序,用cnt表示,共有512行,用cnt_line表示。當(dāng)cnt計(jì)數(shù)滿779時(shí)自動(dòng)清零,cnt_line自動(dòng)加1,表示一行數(shù)據(jù)傳輸完成。當(dāng)cnt_line計(jì)數(shù)滿511時(shí)自動(dòng)清零,表示一幀圖像數(shù)據(jù)傳輸完成。圖像分辨率設(shè)計(jì)為640×480,因此取cnt_line>15且cnt_line<495,cnt>=140且cnt<780時(shí)為有效像素輸出。通過cnt和cnt_line兩個(gè)變量的不同取值,就可以得到各個(gè)驅(qū)動(dòng)信號(hào)在不同階段的輸出情況。不同階段是指根據(jù)ICX618 CCD的工作原理而劃分的幾個(gè)狀態(tài):空閑(idle)、光積分(integration)、幀轉(zhuǎn)移(transfer)、像素讀出初始化(init_readout)、像素讀出(read_out)。狀態(tài)間的轉(zhuǎn)移也是通過cnt和cnt_line的組合變量進(jìn)行的。用Modelsim進(jìn)行功能仿真和時(shí)序仿真,圖4為驅(qū)動(dòng)時(shí)序仿真結(jié)果。圖中劃分出了時(shí)序所對(duì)應(yīng)的狀態(tài), XSG1和XSG2只有在Transfer階段產(chǎn)生50個(gè)時(shí)鐘周期的低電平,目的是控制[V?2A/B ]和[V?3A/B]產(chǎn)生15 V的脈沖,將光積分區(qū)的電荷全部轉(zhuǎn)移到垂直寄存器中;其他階段,水平信號(hào)H1,H2保持不變時(shí),垂直轉(zhuǎn)移信號(hào)(XV1,XV2,XV3,XV4)發(fā)生改變,將電荷轉(zhuǎn)移到水平寄存器中,垂直信號(hào)保持不變時(shí),水平信號(hào)H1,H2交替變化,將水平寄存器中的電荷逐個(gè)輸出。
2.2 USB驅(qū)動(dòng)程序
USB驅(qū)動(dòng)程序是計(jì)算機(jī)與外部設(shè)備通信的前提條件,如果缺失或存在缺陷,會(huì)導(dǎo)致外部設(shè)備無法識(shí)別或者功能無法實(shí)現(xiàn)。本設(shè)計(jì)中使用的芯片由Cypress公司提供通用的USB驅(qū)動(dòng)程序,主要包含驅(qū)動(dòng)程序Cyusb.sys和INF文件Cyusb.inf。驅(qū)動(dòng)程序提供應(yīng)用程序與外部硬件設(shè)備的接口以及協(xié)調(diào)二者之間的關(guān)系,一般無需作更改[9]。INF即設(shè)備信息文件,用來指示安裝Windows驅(qū)動(dòng)程序(.sys),包含相應(yīng)USB設(shè)備的詳細(xì)信息和所使用的驅(qū)動(dòng)程序。只需將USB設(shè)備的VID/PID值添加到INF文件的適當(dāng)位置即可,設(shè)計(jì)中PID為1002,VID為0505,這樣在USB設(shè)備接入計(jì)算機(jī)時(shí),系統(tǒng)查找與設(shè)備ID相一致的INF文件,使用INF文件指示的驅(qū)動(dòng)程序完成與計(jì)算機(jī)的通信。
2.3 USB固件程序
USB固件程序的主要功能是完成相關(guān)寄存器初始化,對(duì)各種USB請(qǐng)求進(jìn)行響應(yīng),在響應(yīng)和中斷中實(shí)現(xiàn)具體的功能。Cypress公司提供了USB固件開發(fā)的基本框架,因此只需將相關(guān)Slave FIFO模式的寄存器配置正確,并在USB請(qǐng)求中添加接收和發(fā)送數(shù)據(jù)以及對(duì)I/O口控制的程序即可[10]。主要步驟包括:
1) 在PERIPH.c文件的TD_Init()函數(shù)中將芯片設(shè)置為同步Slave FIFO模式,使用端點(diǎn)2進(jìn)行數(shù)據(jù)傳輸,方向?yàn)樽詣?dòng)寫入,相應(yīng)的寄存器配置為512×4的緩存方式。
2) 在FW.c中添加自定義請(qǐng)求響應(yīng)以及對(duì)應(yīng)的處理程序,包括:開始采集、初始化寄存器、停止采集、設(shè)置積分時(shí)間、設(shè)置增益等級(jí)、設(shè)置箝位電平,對(duì)應(yīng)的請(qǐng)求碼分別為0xb2,0xb3,0xb4,0xb5,0xb6,0xb7。
3) 調(diào)試編譯成功后生成HEX文件,使用自帶的Hex2bix.exe程序?qū)EX文件轉(zhuǎn)換為iic文件,通過CyConsole控制面板將iic文件燒寫到E2PROM中,上電后便執(zhí)行固件程序。
2.4 上位機(jī)程序
上位機(jī)應(yīng)用程序主要完成對(duì)圖像系統(tǒng)參數(shù)設(shè)定、圖像采集過程控制、圖像數(shù)據(jù)的處理與顯示功能。上位機(jī)基于.NET平臺(tái)的Visual C#語言進(jìn)行開發(fā),通過調(diào)用動(dòng)態(tài)鏈接庫(kù)CyUSB.dll中提供的函數(shù),就能方便地對(duì)USB設(shè)備進(jìn)行操作。程序界面分為功能區(qū)和圖像顯示區(qū),功能區(qū)包含5個(gè)按鍵分別是連接USB設(shè)備、開始采集、積分時(shí)間、增益、鉗位電平。連接USB設(shè)備按鍵通過USBDeviceList函數(shù)獲取USB設(shè)備列表,在列表中將USBDevices[0x0505,0x1002]設(shè)定為所用的USB設(shè)備,返回值為真時(shí)會(huì)在軟件界面顯示“已經(jīng)連接”,然后就可以調(diào)用相關(guān)函數(shù)對(duì)USB設(shè)備進(jìn)行讀寫操作。開始采集按鍵控制啟動(dòng)和關(guān)閉數(shù)據(jù)采集,單獨(dú)開啟線程,通過inEndpoint.XferData函數(shù)不斷接收EP2端發(fā)送來的數(shù)據(jù),當(dāng)接收的數(shù)據(jù)量達(dá)到640×480時(shí)對(duì)數(shù)據(jù)進(jìn)行處理與顯示。
系統(tǒng)各部分研制完成后進(jìn)行功能測(cè)試。首先測(cè)試CCD驅(qū)動(dòng)電路的工作情況。使用示波器,對(duì)經(jīng)過預(yù)處理后的CCD輸出信號(hào)進(jìn)行測(cè)試和分析。圖5a)為無光條件下的輸出,圖5b)為強(qiáng)光條件下的輸出。
無光環(huán)境時(shí)峰峰值電壓為980 mV,而強(qiáng)光環(huán)境時(shí)峰峰值電壓為1.24 V,可以看到不同條件下,信號(hào)幅值變化程度與光照強(qiáng)度成正比,CCD工作正常,因而驗(yàn)證了驅(qū)動(dòng)電路的正確性。
其次測(cè)試系統(tǒng)的整體性能,將設(shè)備連接到Windows 32位系統(tǒng)的PC機(jī)上,按照提示安裝好驅(qū)動(dòng)程序,硬件被識(shí)別后,運(yùn)行上位機(jī)程序,點(diǎn)擊連接設(shè)備和開始采集按鈕進(jìn)行圖像采集。采集的圖像實(shí)時(shí)顯示在應(yīng)用程序圖像顯示區(qū),通過調(diào)節(jié)焦距使得圖像達(dá)到最佳顯示效果。圖6是經(jīng)外加光學(xué)鏡頭對(duì)焦后顯示的圖像結(jié)果。圖像的分辨率為640×480約為30萬像素,可達(dá)到40 f/s的采集速度。實(shí)驗(yàn)結(jié)果表明系統(tǒng)工作正常,功能完善,可以實(shí)現(xiàn)圖像的實(shí)時(shí)采集、傳輸和顯示。
本文設(shè)計(jì)了一種以ICX618 CCD為傳感器的圖像采集系統(tǒng)。該系統(tǒng)以FPGA為控制核心,由USB接口進(jìn)行數(shù)據(jù)傳輸,開發(fā)了上位機(jī)軟件用于操控系統(tǒng)和顯示圖像。系統(tǒng)成像質(zhì)量清晰,具備USB即插即拔的特性,同時(shí)有專用的驅(qū)動(dòng)和上位機(jī)程序,安裝方便,使用簡(jiǎn)單。這樣使得系統(tǒng)具有良好的可移植性,能夠廣泛滿足圖像處理前端數(shù)據(jù)采集的需求。通過試驗(yàn),初步驗(yàn)證了系統(tǒng)功能可靠性,能夠?yàn)榭茖W(xué)級(jí)CCD的應(yīng)用提供一種低成本的前期驗(yàn)證方案。
[1] 黃以華,黃劍峰.基于USB的高清彩色CCD圖像采集系統(tǒng)[J].電子設(shè)計(jì)工程,2012,20(4):170?173.
HUANG Yihua, HUANG Jianfeng. A high resolution color CCD image acquisition system based on USB [J]. Electronic design engineering, 2012, 20(4): 170?173.
[2] SARRAZIN P, BLAKE D, FELDMAN S, et al. Field deployment of a portable XRD/XRF instrument on Mars analog terrain [J]. Advances in x?ray analysis, 2005, 48: 194?203.
[3] 沈揚(yáng).新型X射線探測(cè)設(shè)備的探索性研究[D].上海:復(fù)旦大學(xué),2011:15?16.
SHEN Yang. An exploratory study of the new X?ray detection device [D]. Shanghai: Fudan University, 2011: 15?16.
[4] Sony Corporation. ICX618AKA: diagonal 4.5 mm (type 1/4) progressive scan CCD image sensor with square pixel for color cameras [EB/OL]. [2011?09?10]. https://wenku.baidu.com/view/d397b40fba1aa8114431d943.html.
[5] 李亞鵬,何斌,付天驕.行間轉(zhuǎn)移型面陣CCD成像系統(tǒng)設(shè)計(jì)[J].紅外與激光工程,2014,43(8):2602?2606.
LI Yapeng, HE Bin, FU Tianjiao. Design of imaging system of interline area CCD [J]. Infrared and laser engineering, 2014, 43(8): 2602?2606.
[6] Analog Devices, Inc. AD9945: complete 12?bit 40 MHz CCD signal processor [EB/OL]. [2003?01?08]. https://wenku.baidu.com/view/a8147f452b160b4e767fcf51.html.
[7] 邵冬冬.基于FPGA的彩色CCD的熒光圖像采集和驅(qū)動(dòng)模組設(shè)計(jì)[D].杭州:浙江大學(xué),2015:16?17.
SHAO Dongdong. The fluorescence image acquisition and driving module design of color CCD based on FPGA technology [D]. Hangzhou: Zhejiang University, 2015: 16?17.
[8] 趙林,孟令軍,于磊,等.基于CY7C68013A的USB 2.0高速接口設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2014,40(1):131?133.
ZHAO Lin, MENG Lingjun, YU Lei, et al. USB 2.0 high?speed interface design based on CY7C68013A [J]. Application of electronic technique, 2014, 40(1): 131?133.
[9] 鄭杰.USB 3.0編程寶典[M].北京:電子工業(yè)出版社,2013:226?227.
ZHENG Jie. USB 3.0 programming treasure [M]. Beijing: Publishing House of Electronics Industry, 2013: 226?227.
[10] Cypress Semiconductor Corporation. CY7C68013A: EZ?USB? FX2LPTM USB microcontroller, high?speed USB peripheral controller [EB/OL]. (2012?02?07) [2013?05?23]. https://www.element14.com/community/docs/DOC?54523/l/cypress?datasheet?for?cy7c68013a?ez?usb?fx2lp?usb?microcontroller?high?speed?usb?peripheral?controller.