基于ARM9的CMOS圖像采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
機(jī)器視覺(jué)在國(guó)民經(jīng)濟(jì)、科學(xué)研究以及國(guó)防建設(shè)等領(lǐng)域都有著廣泛的應(yīng)用。在大批量工業(yè)生產(chǎn)過(guò)程中,用人工視覺(jué)檢查產(chǎn)品質(zhì)量效率低且精度不高,用機(jī)器視覺(jué)可以提高生產(chǎn)效率和自動(dòng)化程度。圖像采集系統(tǒng)是機(jī)器視覺(jué)系統(tǒng)的重要組成部分,目前圖像采集常用的兩種圖像傳感器為CCD與CMOS圖像傳感器。CCD一般輸出帶制式的模擬信號(hào),需要經(jīng)過(guò)視頻解碼器得到數(shù)字信號(hào)才能傳入微處理器中,而CMOS圖像傳感器直接輸出數(shù)字信號(hào),可以直接與微處理器進(jìn)行連接。不同的CMOS圖像傳感器有不同的性能,主要表現(xiàn)在圖像分辨率大小不同、幀速率不同、曝光方式不同等,CMOS圖像傳感器可直接通過(guò)I2C來(lái)設(shè)置圖像分辨率大小及曝光、增益等參數(shù),而CCD圖像傳感器則需要對(duì)視頻解碼器進(jìn)行設(shè)置來(lái)控制圖像的曝光、增益等參數(shù)信息。相對(duì)于CCD圖像傳感器,CMOS圖像傳感器具有低功耗、小體積、高速數(shù)據(jù)傳輸和方便控制等優(yōu)點(diǎn),因此,CMOS圖像傳感器更適用于嵌入式系統(tǒng)應(yīng)用中[1]。本文從實(shí)際應(yīng)用出發(fā),采用32位ARM9微處理器S3C2410A作為CPU來(lái)控制其他功能模塊,設(shè)計(jì)實(shí)現(xiàn)面向機(jī)器視覺(jué)的CMOS圖像采集系統(tǒng),主要功能模塊有SDRAM存儲(chǔ)單元、圖像采集單元、以太網(wǎng)傳輸模塊、UART串口通信模塊、Flash模塊、電源模塊等。與傳統(tǒng)的“圖像采集卡-PC-終端控制設(shè)備”模式的機(jī)器視覺(jué)系統(tǒng)相比,具有體積小、成本低、功耗低、實(shí)時(shí)性強(qiáng)、設(shè)計(jì)靈活等優(yōu)點(diǎn)。
1 系統(tǒng)結(jié)構(gòu)
典型的機(jī)器視覺(jué)系統(tǒng)一般包括圖像采集模塊、圖像數(shù)字化模塊、數(shù)字圖像處理模塊、光源系統(tǒng)、智能判斷決策模塊和機(jī)械控制執(zhí)行模塊[2]。其中圖像采集和數(shù)字圖像處理模塊的速度是評(píng)價(jià)嵌入式視覺(jué)系統(tǒng)硬件設(shè)計(jì)的性能指標(biāo),文獻(xiàn)[3~6]分別給出了目前常見(jiàn)的四種嵌入式視覺(jué)系統(tǒng)結(jié)構(gòu):(1)采用USB接口攝像頭結(jié)構(gòu)[3]:圖像采集部分的硬件用USB接口的CMOS攝像頭,攝像頭應(yīng)可與集成的USB的CPU接口直接相連。USB接口可以實(shí)現(xiàn)高速的串行通信,但USB攝像頭要開(kāi)發(fā)專門的驅(qū)動(dòng),大大增加了軟件的開(kāi)發(fā)量和難度。(2)引入異步FIFO結(jié)構(gòu)[4]:在圖像傳感器和主控CPU間采用異步FIFO解決傳感器輸出數(shù)據(jù)頻率和主控CPU采集頻率不匹配的問(wèn)題,當(dāng)FIFO滿時(shí)CPU再快速讀取FIFO數(shù)據(jù)。異步FIFO可以是雙口RAM或者在FPGA內(nèi)開(kāi)辟。
(3)CPLD為核心的圖像采集結(jié)構(gòu)[5]:直接由CPLD根據(jù)圖像傳感器輸出的時(shí)序信號(hào),控制SRAM的讀寫,當(dāng)一幀數(shù)據(jù)信息采集完畢后向CPU發(fā)送采集完畢信號(hào);CPU需要對(duì)圖像進(jìn)行處理時(shí),再通過(guò)CPLD到SRAM里讀取數(shù)據(jù)。(4)由外部中斷實(shí)現(xiàn)圖像采集結(jié)構(gòu)[6]:圖像傳感器的幀同步、行同步和像元同步信號(hào)分別與CPU的一個(gè)外部中斷連接,CPU根據(jù)中斷次數(shù)來(lái)判斷一幀圖像是否采集完成。
通過(guò)對(duì)幾種方案的對(duì)比分析,綜合實(shí)際應(yīng)用及開(kāi)發(fā)難度等因素,確定系統(tǒng)結(jié)構(gòu)如圖1所示,系統(tǒng)由圖像采集、圖像緩沖和圖像處理三部分組成。在圖像緩存中,CPLD將圖像傳感器采集的10位數(shù)據(jù)移位成32位,再通過(guò)外部請(qǐng)求DMA的辦法,由主控CPU的DMA控制器將32位數(shù)據(jù)送到RAM保存。這樣可以減少常見(jiàn)中低速圖像采集的資源浪費(fèi),又避免了CPU響應(yīng)滯后的缺點(diǎn)。
2 硬件設(shè)計(jì)
系統(tǒng)總體硬件結(jié)構(gòu)圖如圖2所示。其中,圖像采集器采用柯達(dá)公司的CMOS單色圖像傳感器KAC9638;圖像的緩存由CPLD芯片XC95144和外擴(kuò)SDRM(HY57V561620)組成;圖像處理核心部分采用Samsung公司的ARM9(S3C2410A),并外擴(kuò)了UART、以太網(wǎng)通信接口、USB口及LCD人機(jī)接口,方便系統(tǒng)調(diào)試和與其他設(shè)備交換數(shù)據(jù)。
硬件系統(tǒng)工作流程是:(1)系統(tǒng)上電后ARM9通過(guò)I2C接口直接對(duì)圖像傳感器進(jìn)行初始化,然后等待上位機(jī)命令;(2)接收到上位機(jī)命令后,ARM9先進(jìn)行DMA初始化,然后向CPLD發(fā)送采集命令。CPLD啟動(dòng)圖像采集并申請(qǐng)ARM9的DMA,將一幀圖像的數(shù)據(jù)保存到ARM9的SDRAM中;(3)完成圖像采集后ARM9進(jìn)入DMA完成,進(jìn)行圖像處理并將結(jié)果通過(guò)串口輸出。
2.1 存儲(chǔ)器選擇
S3C2410A芯片外部可尋址的存儲(chǔ)空間是1 GB,被分成8個(gè)存儲(chǔ)塊,每塊128 MB,各個(gè)存儲(chǔ)塊由片選信號(hào)nGCS0~nGCS7譯碼產(chǎn)生。數(shù)據(jù)總線引腳為DATA0~DATA31共32根,可配置成8 bit/16 bit/32 bit的數(shù)據(jù)寬度;地址總線引腳為ADDR0~ADDR26共27根,支持128 MB空間。S3C2410A是32位的微處理器,外部總線也是32位,要充分發(fā)揮其32位總線性能優(yōu)勢(shì),應(yīng)采用32位的存儲(chǔ)系統(tǒng)。方法是采用兩片16位數(shù)據(jù)寬度的Flash存儲(chǔ)器芯片并聯(lián)或一片32位數(shù)據(jù)寬度的Flash存儲(chǔ)器芯片。本設(shè)計(jì)采用了兩片Intel的E28F128J3A組成了16M×32bit的NOR Flash,其中一片為高16位,另一片為低16位。采用三星公司的兩片半字SDRAM (HY57V561620)共同組成一個(gè)16 M×32 bit的SDRAM系統(tǒng),提高了其與CPU的通信效率。
2.2 通信接口設(shè)計(jì)
2.2.1 UART及USB接口設(shè)計(jì)
S3C2410A的UART提供了三個(gè)獨(dú)立的異步串行I/O口,每個(gè)串行口可以獨(dú)立地工作在中斷模式和DMA模式。UART使用系統(tǒng)時(shí)鐘,支持最高230.4 kb/s波特率的數(shù)據(jù)通信。每個(gè)UART串行口提供兩個(gè)16 B的FIFO分別用來(lái)做發(fā)送和接收緩沖。本系統(tǒng)采用MAX202芯片作為RS-232的接收器/驅(qū)動(dòng)器,將UART0和UART1連接到9DB接頭與DSP和PC通信。S3C2410A有2個(gè)USB主設(shè)備和1個(gè)USB從設(shè)備,USB設(shè)備控制器允許DMA模式的批量傳輸、中斷傳輸和控制傳輸。在系統(tǒng)設(shè)計(jì)中,USB設(shè)備用來(lái)和PC機(jī)通信供調(diào)試用,因此使用從設(shè)備口(兼容USB Ver1.1標(biāo)準(zhǔn))。
2.2.2 以太網(wǎng)接口電路設(shè)計(jì)
S3C2410A片上沒(méi)有以太網(wǎng)口,因此必須外加以太網(wǎng)控制器才能擴(kuò)展。系統(tǒng)采用16位以太網(wǎng)控制器CS8900A,該芯片的特點(diǎn)是:符合IEEE802.3標(biāo)準(zhǔn),支持全雙工收發(fā)可達(dá)10 Mb/s,內(nèi)置SRAM收發(fā)緩沖,減輕了對(duì)主處理器的開(kāi)銷。以太網(wǎng)電路如圖3所示,S3C2410A通過(guò)16位數(shù)據(jù)線,20位地址線連接CA8900A。片選信號(hào)為nGCS3,即將CS8900A的內(nèi)部寄存器和幀緩沖區(qū)映射到S3C2410A的Band4中連續(xù)4 KB的存儲(chǔ)區(qū)中,主機(jī)可以通過(guò)這個(gè)存儲(chǔ)空間直接訪問(wèn)CS8900A的內(nèi)部寄存器和幀緩沖區(qū)。CS8900A與RJ-45接口直接連接一個(gè)網(wǎng)絡(luò)變壓器,起到電平轉(zhuǎn)換及電氣隔離的作用。此外,CS8900A提供兩種操作模式:I/O模式和內(nèi)存模式,本系統(tǒng)通過(guò)CPLD選擇其工作模式。
2.3 圖像采集模塊電路設(shè)計(jì)
圖像傳感器采用柯達(dá)公司生產(chǎn)的CMOS單色圖像傳感器KAC9638。KAC9638是高性能、低功耗、SXGA CMOS有源像元傳感器,具有以下特點(diǎn):(1)KAC9638是1/2英寸,1 024×1 280有效圖像陣列的CMOS圖像傳感器,在滿足應(yīng)用場(chǎng)合所需的分辨率條件下,還具有良好的動(dòng)態(tài)范圍(55 dB),最小照度(2.40/Lux-sec)等性能;(2)KAC9638內(nèi)置10位的A/D轉(zhuǎn)換器,直接輸出8位或10位的數(shù)字灰度值,在保證精度的同時(shí)不需另外接A/D轉(zhuǎn)換器,大大簡(jiǎn)化外圍電路;(3)KAC9638具有良好的電源管理功能和低功耗特性。數(shù)據(jù)傳送時(shí)芯片的總功耗為150 mW。此外,為進(jìn)一步降低系統(tǒng)的功耗,芯片還具有可編程“上電”和“下電”模式。CMOS圖像傳感器目前普遍采用I2C總線,本系統(tǒng)通過(guò)S3C2410A的I2C總線與KAC9638的SCL、SDA連接。由S3C2410A直接完成對(duì)圖像傳感器的初始化。KAC9638內(nèi)部嵌入了一個(gè)10位A/D轉(zhuǎn)換器,因而可以同步輸出10位的數(shù)字視頻流,但是S3C2410A具有32位的外部總線,直接將10位數(shù)據(jù)接到總線上會(huì)造成資源浪費(fèi),降低CPU效率,因此,KAC9638和S3C2410A之間連接CPLD,由CPLD完成10位視頻數(shù)據(jù)到32位的轉(zhuǎn)換,圖像采集接口電路結(jié)構(gòu)框圖如圖4所示。
為使S3C2410A能像訪問(wèn)內(nèi)存一樣讀取圖像傳感器的數(shù)據(jù),將CPLD映射到S3C2410A的存儲(chǔ)單元上。CPLD上的圖像緩存片選信號(hào)nGCS4,地址映射到S3C2410A的Bank4,地址范圍:0x20000000~0x27ffffff。實(shí)際只用其中的一個(gè)地址0x20000000(即DMA的源地址)。圖像傳感器由S3C2410A的clockout0引腳提供。此外,PCLK、HREF、VSYNC分別為像素、行、幀同步信號(hào);OE為圖像傳感器啟動(dòng)采集信號(hào);XINT是ARM9與CPLD的外部中斷聯(lián)絡(luò)信號(hào);XDREQ和XDACK為S3C2410A的DMA的請(qǐng)求和握手信號(hào)。
3 系統(tǒng)驅(qū)動(dòng)軟件設(shè)計(jì)
3.1 I2C串行總線通信協(xié)議
I2C總線是嵌入式系統(tǒng)常見(jiàn)的網(wǎng)絡(luò)接口,由SCL(串行時(shí)鐘)和SDA(串行數(shù)據(jù))兩根總線構(gòu)成。該總線有嚴(yán)格的時(shí)序要求,總線工作時(shí),由串行時(shí)鐘線SCL傳送時(shí)鐘脈沖,由串行數(shù)據(jù)線SDA傳送數(shù)據(jù)。總線必須由主設(shè)備控制,主設(shè)備產(chǎn)生串行時(shí)鐘控制總線的傳輸方向,并產(chǎn)生起始和停止條件。I2C總線傳輸一個(gè)字節(jié)的時(shí)序如圖5所示。當(dāng)主設(shè)備寫從設(shè)備時(shí),傳輸?shù)臄?shù)據(jù)要跟有從設(shè)備的地址。從設(shè)備不能主動(dòng)執(zhí)行數(shù)據(jù)傳輸,所以主控設(shè)備讀從設(shè)備時(shí)必須發(fā)送一個(gè)帶有從設(shè)備地址的讀請(qǐng)求。本系統(tǒng)中ARM9是主設(shè)備,圖像傳感器是從設(shè)備,ARM9通過(guò)I2C總線改寫KAC9638寄存器的值完成初始化。根據(jù)I2C通信協(xié)議,改變某個(gè)寄存器的值的過(guò)程是:先發(fā)送CMOS傳感器特定寫地址(7位地址+0),緊接著發(fā)送需要寫的寄存器的地址,再發(fā)送數(shù)據(jù);而要讀取某個(gè)寄存器的值的過(guò)程是:先發(fā)送CMOS傳感器特定寫地址,緊接著發(fā)送需要讀的寄存器的地址,再發(fā)送CMOS傳感器特定讀地址(7位地址+1),最后接收數(shù)據(jù)。
3.2 圖像采集CPLD時(shí)序控制
CPLD采集兩個(gè)10位像元數(shù)據(jù)組合成32位(不夠的位用0補(bǔ)充)可以提高圖像采集效率。并且設(shè)計(jì)中使用DMA的方式保存圖像數(shù)據(jù),可以減少CPU的開(kāi)銷。以CPLD為核心器件設(shè)計(jì)的圖像采集邏輯結(jié)構(gòu)圖如圖6所示。
電子鎮(zhèn)流器相關(guān)文章:電子鎮(zhèn)流器工作原理
評(píng)論