摘 要:CMOS型傳感器比傳統(tǒng)的CCD型傳感器具有諸多優(yōu)勢(shì),基于CMOS型傳感器的圖像系統(tǒng)已成為研究和開發(fā)的重點(diǎn)。設(shè)計(jì)一種以FPGA為核心控制芯片、基于USB接口和ADCS1121 CMOS型單色圖像傳感器的圖像采集系統(tǒng)。介紹系統(tǒng)的構(gòu)成及其硬件設(shè)計(jì)方法,給出USB固件程序、設(shè)備驅(qū)動(dòng)程序及用戶應(yīng)用程序的實(shí)現(xiàn)方法。
關(guān)鍵詞:CMOS圖像傳感器;圖像采集;USB;傳輸控制
中圖分類號(hào):TN386 文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2008)06-186-03
Design of Image Acquisition System Based on CMOS Image Sensor
DU Jiang LIN Huizhen2,HU Dongliang2
(1.Zhuhai Sanet Technology Co.Ltd.,Zhuhai,519000,China;2.Naval University of Engineering,Wuhan,430033,China)
Abstract:CMOS sensor has many advantages than traditional CCD sensor,the image system based on CMOS has became a hotspot in research and development.A image acquisition system based on USB and ADCS1121 CMOS homochromatic image sensor is designed here.The hardware of system is analyzed in detail,the program of USB interface controller and CMOS sensor driver and application software are described.Realization of USB firmware program,equipment driving program and application program are given.
Keywords:CMOS image sensor;image acquisition;USB;transmission control
1 引 言
CMOS型傳感器的象素間距急速減小,已接近于CCD型傳感器的水平,而在較小的幾何結(jié)構(gòu)內(nèi)可以集成時(shí)序和控制電路、緩沖放大器、A/D轉(zhuǎn)換器、信號(hào)處理模塊等。雖然與傳統(tǒng)的CCD型傳感器相比,CMOS型傳感器的圖像噪聲偏大,但功耗低、成本低、體積小、集成度高、分辨率已接近CCD型傳感器水平的優(yōu)點(diǎn),使其在圖像系統(tǒng)設(shè)計(jì)中得到廣泛的應(yīng)用。本文設(shè)計(jì)了一個(gè)基于USB 2.0和CMOS型傳感器的高速圖像采集系統(tǒng),具有體積小,開發(fā)方便的優(yōu)點(diǎn),可以應(yīng)用于指紋檢測(cè)、安全監(jiān)控等領(lǐng)域,也可作為圖像配準(zhǔn)的實(shí)驗(yàn)平臺(tái)。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)構(gòu)成
系統(tǒng)構(gòu)成框圖如圖1所示。主要包括CMOS圖像傳感器、FPGA控制芯片及USB接口芯片,另外還有電源芯片。
在本文中,傳感器芯片選用安捷倫公司的APS單色圖像傳感器ADCS-1121,該芯片具有噪聲低、動(dòng)態(tài)范圍大、靈敏度及分辨率高等特點(diǎn)。其主要技術(shù)指標(biāo)如表1所示。控制芯片采用XILINX公司的SPARTANII系列FPGA XC2S50-TQ144,約有5萬(wàn)個(gè)邏輯門,接口電平可配置。



在系統(tǒng)工作時(shí),首先由FPGA驅(qū)動(dòng)CMOS圖像傳感器工作,傳感器輸出8位數(shù)字信號(hào),經(jīng)過(guò)FPGA時(shí)加幀同步信號(hào)后,由USB接口芯片CY7C68013上傳到計(jì)算機(jī)處理。
2.2 硬件設(shè)計(jì)
2.2.1 圖像傳感器驅(qū)動(dòng)
圖像傳感器驅(qū)動(dòng)主要完成CMOS傳感器的初始化、工作模式配置。ADCS-1121的驅(qū)動(dòng)是通過(guò)I2C總線對(duì)其內(nèi)部的24個(gè)寄存器進(jìn)行配置實(shí)現(xiàn),工作幀頻為30幀/s。外圍電路的連接示意圖如圖2所示。

ADCS-1121的工作過(guò)程可分為復(fù)位、曝光以及讀出。曝光時(shí)間由寄存器里的計(jì)數(shù)值進(jìn)行設(shè)置,實(shí)際時(shí)間為計(jì)數(shù)值與最小時(shí)鐘周期(30 MHz時(shí)鐘)的乘積。由于配置寄存器時(shí)需要通過(guò)I2C總線(SDATA_TxD和SCLK_RxD)往寄存器寫入數(shù)據(jù),因此需要注意傳送數(shù)據(jù)前,要先送出器件地址標(biāo)識(shí)和片內(nèi)寄存器地址,本系統(tǒng)中7位地址標(biāo)識(shí)為“1010101”,R/W位設(shè)置為“0”,當(dāng)數(shù)據(jù)傳送成功時(shí),系統(tǒng)返回的ACK信號(hào)應(yīng)把SDA線拉低。
在圖2中DRDY為象素輸出同步信號(hào);nROW為行同步信號(hào);nFRAME為幀同步信號(hào);nRST為復(fù)位信號(hào);D0~D7為輸出的數(shù)據(jù)。圖3所示是這些信號(hào)者間的簡(jiǎn)單邏輯關(guān)系,DATA為輸出數(shù)據(jù)。

nFRAME與nROW類似,圖3中沒(méi)有給出。當(dāng)?shù)?行的第1個(gè)象素讀出時(shí),nROW和nFRAME均拉低,直到最后一個(gè)象素(對(duì)nROW是行,對(duì)nFRAME是幀)讀出后,兩者均變?yōu)楦唠娖健P枰⒁獾氖牵瑥?fù)位時(shí)鐘nRST需要40個(gè)周期以上的保持時(shí)間。另外,在上電配置中,為了保證配置正確,可以在FPGA內(nèi)插入延遲程序,在上電后延遲5 ms后再向CMOS傳感器輸出配置信號(hào)。
2.2.2 傳輸控制
傳輸控制主要完成數(shù)據(jù)同步信號(hào)的添加及對(duì)USB接口的控制。系統(tǒng)設(shè)計(jì)中USB芯片選用Cypress公司的CY7C68013,該芯片開發(fā)簡(jiǎn)單、資源豐富。需要注意的是IFCLK端在采用外部時(shí)鐘時(shí),只支持5~48 MHz的時(shí)鐘,同時(shí)RESERVED端必須下拉到地。在不考慮功耗時(shí),WU端可以通過(guò)一個(gè)上拉電阻接到3.3 V電源。
CMOS傳感器輸出8 b的數(shù)字信號(hào),直接送進(jìn)FPGA,由于采用同步設(shè)計(jì)沒(méi)有考慮采用緩存,因此,需要實(shí)時(shí)地在數(shù)據(jù)流中插入幀同步碼。
利用傳感器輸出的DRDY和nFrame信號(hào)作為約束,插入同步碼。DRDY有效輸出時(shí)周期為300 ns,由于DRDY對(duì)應(yīng)每個(gè)讀出的象素,因此,如果直接用于USB的寫FIFO操作,則每幀會(huì)占用8個(gè)字節(jié)的同步碼,造成丟失數(shù)據(jù)。在FPGA里可以采用外部高速的30 MHz時(shí)鐘同步,產(chǎn)生一個(gè)新的時(shí)鐘USB_CLK,即在DRDY后面伸長(zhǎng)出8個(gè)時(shí)鐘,整個(gè)圖像延遲8個(gè)DRDY周期,如圖4所示。這樣,通過(guò)FPGA內(nèi)部設(shè)置一個(gè)8B的FIFO,既保證了同步碼的嵌入又不影響對(duì)USB內(nèi)部的slave FIFO進(jìn)行寫入操作。

2.3 軟件設(shè)計(jì)
軟件包括USB固件程序、驅(qū)動(dòng)程序以及用戶應(yīng)用程序。
2.3.1 EZ-USB FX2固件
固件是能否令圖像傳感器正常工作及USB進(jìn)行正常通信的關(guān)鍵。他的主要功能包括:接受并處理USB驅(qū)動(dòng)程序的請(qǐng)求及應(yīng)用程序的控制指令,控制USB接口芯片與主機(jī)間的通信,根據(jù)應(yīng)用程序要求正確設(shè)置圖像傳感器寄存器。設(shè)計(jì)中需要編寫EZUSB的固件。CYPRESS公司提供的Development Kits里提供了豐富的資源,利用EZ USB-FX2固件框架可以簡(jiǎn)化和加速開發(fā)基于EZ-USB FX2的外圍設(shè)備。固件框架里提供了現(xiàn)成的源代碼,主要包括初始化、處理設(shè)備請(qǐng)求以及USB掛起電源管理,只需用戶編寫USB描述符以及外設(shè)功能代碼即可。固件框流程圖如圖5所示。
2.3.2 驅(qū)動(dòng)程序
在操作系統(tǒng)中通過(guò)運(yùn)行內(nèi)核層的驅(qū)動(dòng)程序才能控制硬件。Windows應(yīng)用環(huán)境下的USB設(shè)備驅(qū)動(dòng)程序可以通過(guò)WinDriver,Driver Studio等工具開發(fā)。而Cypress公司的開發(fā)工具在安裝路徑下的Driver文件夾里提供了簡(jiǎn)單的驅(qū)動(dòng)程序。對(duì)于本文所設(shè)計(jì)的系統(tǒng),這種驅(qū)動(dòng)程序可以直接使用,能夠滿足需要。值得注意的是,在使用這個(gè)驅(qū)動(dòng)程序時(shí),由于ezusbsys.c文件里管道最大傳輸字節(jié)數(shù)只有64 000,所以應(yīng)用程序里緩存區(qū)不能超過(guò)64 000;如果需要開辟大緩存,可以用Windows DDK生成新的驅(qū)動(dòng)。
2.3.3 應(yīng)用程序
應(yīng)用程序用Visual C++完成。對(duì)于USB設(shè)備控制,只需要2個(gè)函數(shù):DeviceIoControl 和CreateFile。
由CreateFile得到句柄,通過(guò)DeviceIoControl實(shí)現(xiàn)預(yù)定的操作。以傳輸64 000個(gè)數(shù)據(jù)為例,核心代碼為:
DWORDinPacketSize;
// 定義接收緩沖
BYTE * inBuffer = new BYTE[MEM_SIZE];
Memset (inBuffer,0,MEM_SIZE);
BULK_TRANSFER_CONTROLbulkControl;
BOOLEANbResult = FALSE;
intnBytes = 0;

// ENDPOINT8 IN
bulkControl.pipeNum=3;
inPacketSize=64000;
bResult = DeviceIoControl
( hDevice,IOCTL_EZUSB_BULK_READ,
bulkControl,
Sizeof ( BULK_TRANSFER_CONTROL ),
inBuffer,inPacketSize,
(unsigned long *)nBytes,
NULL
);
通過(guò)指針inBuffer,可以對(duì)上傳的數(shù)據(jù)進(jìn)行捕獲幀同步、濾波、顯示等后處理。
3 結(jié) 語(yǔ)
基于USB和CMOS傳感器的圖像系統(tǒng)體積小、重量輕、功耗低,可以有效地在指紋檢測(cè)、條形碼檢測(cè)、安全監(jiān)控等場(chǎng)合得到應(yīng)用,而USB2.0的傳輸方式能快速地將數(shù)字圖像信號(hào)上傳,可以滿足這些場(chǎng)合的實(shí)時(shí)性的要求。
參考文獻(xiàn)
[1]潘銀松,袁祥輝,林聚承,等.CMOS數(shù)字圖像傳感器研究進(jìn)展[J].重慶大學(xué)學(xué)報(bào):自然科學(xué)版,2005,28(9):16-18.
[2]江川貴,廖啟征,魏世民.基于CMOS圖像傳感器的USB接口圖像采集系統(tǒng)設(shè)計(jì)[J].儀表技術(shù),2005(3):18-20.
[3]李杰,劉金國(guó),王英霞,等.CMOS有源圖像傳感器的最新研究進(jìn)展[J].傳感器技術(shù),2005,24(1):7-8.
[4]錢峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[5]余國(guó)華,馮啟明.基于CMOS圖像傳感器的視頻采集系統(tǒng)設(shè)計(jì)[J].武漢理工大學(xué)學(xué)報(bào):交通科學(xué)與工程版,2004,28(1):145-147.
作者簡(jiǎn)介 杜 江 男,工程師。研究方向?yàn)殡娮庸こ獭?/p>