機器視覺在國民經濟、科學研究以及國防建設等領域都有著廣泛的應用。在大批量工業生產過程中,用人工視覺檢查產品質量效率低且精度不高,用機器視覺可以提高生產效率和自動化程度。圖像采集系統是機器視覺系統的重要組成部分,目前圖像采集常用的兩種圖像傳感器為CCD與CMOS圖像傳感器。CCD一般輸出帶制式的模擬信號,需要經過視頻解碼器得到數字信號才能傳入微處理器中,而CMOS圖像傳感器直接輸出數字信號,可以直接與微處理器進行連接。不同的CMOS圖像傳感器有不同的性能,主要表現在圖像分辨率大小不同、幀速率不同、曝光方式不同等,CMOS圖像傳感器可直接通過I2C來設置圖像分辨率大小及曝光、增益等參數,而CCD圖像傳感器則需要對視頻解碼器進行設置來控制圖像的曝光、增益等參數信息。相對于CCD圖像傳感器,CMOS圖像傳感器具有低功耗、小體積、高速數據傳輸和方便控制等優點,因此,CMOS圖像傳感器更適用于嵌入式系統應用中[1]。本文從實際應用出發,采用32位ARM9微處理器S3C2410A作為CPU來控制其他功能模塊,設計實現面向機器視覺的CMOS圖像采集系統,主要功能模塊有SDRAM存儲單元、圖像采集單元、以太網傳輸模塊、UART串口通信模塊、Flash模塊、電源模塊等。與傳統的“圖像采集卡-PC-終端控制設備”模式的機器視覺系統相比,具有體積小、成本低、功耗低、實時性強、設計靈活等優點。
1 系統結構
典型的機器視覺系統一般包括圖像采集模塊、圖像數字化模塊、數字圖像處理模塊、光源系統、智能判斷決策模塊和機械控制執行模塊[2]。其中圖像采集和數字圖像處理模塊的速度是評價嵌入式視覺系統硬件設計的性能指標,文獻[3~6]分別給出了目前常見的四種嵌入式視覺系統結構:(1)采用USB接口攝像頭結構[3]:圖像采集部分的硬件用USB接口的CMOS攝像頭,攝像頭應可與集成的USB的CPU接口直接相連。USB接口可以實現高速的串行通信,但USB攝像頭要開發專門的驅動,大大增加了軟件的開發量和難度。(2)引入異步FIFO結構[4]:在圖像傳感器和主控CPU間采用異步FIFO解決傳感器輸出數據頻率和主控CPU采集頻率不匹配的問題,當FIFO滿時CPU再快速讀取FIFO數據。異步FIFO可以是雙口RAM或者在FPGA內開辟。
(3)CPLD為核心的圖像采集結構[5]:直接由CPLD根據圖像傳感器輸出的時序信號,控制SRAM的讀寫,當一幀數據信息采集完畢后向CPU發送采集完畢信號;CPU需要對圖像進行處理時,再通過CPLD到SRAM里讀取數據。(4)由外部中斷實現圖像采集結構[6]:圖像傳感器的幀同步、行同步和像元同步信號分別與CPU的一個外部中斷連接,CPU根據中斷次數來判斷一幀圖像是否采集完成。
通過對幾種方案的對比分析,綜合實際應用及開發難度等因素,確定系統結構如圖1所示,系統由圖像采集、圖像緩沖和圖像處理三部分組成。在圖像緩存中,CPLD將圖像傳感器采集的10位數據移位成32位,再通過外部請求DMA的辦法,由主控CPU的DMA控制器將32位數據送到RAM保存。這樣可以減少常見中低速圖像采集的資源浪費,又避免了CPU響應滯后的缺點。
2 硬件設計
系統總體硬件結構圖如圖2所示。其中,圖像采集器采用柯達公司的CMOS單色圖像傳感器KAC9638;圖像的緩存由CPLD芯片XC95144和外擴SDRM(HY57V561620)組成;圖像處理核心部分采用Samsung公司的ARM9(S3C2410A),并外擴了UART、以太網通信接口、USB口及LCD人機接口,方便系統調試和與其他設備交換數據。
硬件系統工作流程是:(1)系統上電后ARM9通過I2C接口直接對圖像傳感器進行初始化,然后等待上位機命令;(2)接收到上位機命令后,ARM9先進行DMA初始化,然后向CPLD發送采集命令。CPLD啟動圖像采集并申請ARM9的DMA,將一幀圖像的數據保存到ARM9的SDRAM中;(3)完成圖像采集后ARM9進入DMA完成,進行圖像處理并將結果通過串口輸出。
2.1 存儲器選擇
S3C2410A芯片外部可尋址的存儲空間是1 GB,被分成8個存儲塊,每塊128 MB,各個存儲塊由片選信號nGCS0~nGCS7譯碼產生。數據總線引腳為DATA0~DATA31共32根,可配置成8 bit/16 bit/32 bit的數據寬度;地址總線引腳為ADDR0~ADDR26共27根,支持128 MB空間。S3C2410A是32位的微處理器,外部總線也是32位,要充分發揮其32位總線性能優勢,應采用32位的存儲系統。方法是采用兩片16位數據寬度的Flash存儲器芯片并聯或一片32位數據寬度的Flash存儲器芯片。本設計采用了兩片Intel的E28F128J3A組成了16M×32bit的NOR Flash,其中一片為高16位,另一片為低16位。采用三星公司的兩片半字SDRAM (HY57V561620)共同組成一個16 M×32 bit的SDRAM系統,提高了其與CPU的通信效率。
2.2 通信接口設計
2.2.1 UART及USB接口設計
S3C2410A的UART提供了三個獨立的異步串行I/O口,每個串行口可以獨立地工作在中斷模式和DMA模式。UART使用系統時鐘,支持最高230.4 kb/s波特率的數據通信。每個UART串行口提供兩個16 B的FIFO分別用來做發送和接收緩沖。本系統采用MAX202芯片作為RS-232的接收器/驅動器,將UART0和UART1連接到9DB接頭與DSP和PC通信。S3C2410A有2個USB主設備和1個USB從設備,USB設備控制器允許DMA模式的批量傳輸、中斷傳輸和控制傳輸。在系統設計中,USB設備用來和PC機通信供調試用,因此使用從設備口(兼容USB Ver1.1標準)。
2.2.2 以太網接口電路設計
S3C2410A片上沒有以太網口,因此必須外加以太網控制器才能擴展。系統采用16位以太網控制器CS8900A,該芯片的特點是:符合IEEE802.3標準,支持全雙工收發可達10 Mb/s,內置SRAM收發緩沖,減輕了對主處理器的開銷。以太網電路如圖3所示,S3C2410A通過16位數據線,20位地址線連接CA8900A。片選信號為nGCS3,即將CS8900A的內部寄存器和幀緩沖區映射到S3C2410A的Band4中連續4 KB的存儲區中,主機可以通過這個存儲空間直接訪問CS8900A的內部寄存器和幀緩沖區。CS8900A與RJ-45接口直接連接一個網絡變壓器,起到電平轉換及電氣隔離的作用。此外,CS8900A提供兩種操作模式:I/O模式和內存模式,本系統通過CPLD選擇其工作模式。
2.3 圖像采集模塊電路設計
圖像傳感器采用柯達公司生產的CMOS單色圖像傳感器KAC9638。KAC9638是高性能、低功耗、SXGA CMOS有源像元傳感器,具有以下特點:(1)KAC9638是1/2英寸,1 024×1 280有效圖像陣列的CMOS圖像傳感器,在滿足應用場合所需的分辨率條件下,還具有良好的動態范圍(55 dB),最小照度(2.40/Lux-sec)等性能;(2)KAC9638內置10位的A/D轉換器,直接輸出8位或10位的數字灰度值,在保證精度的同時不需另外接A/D轉換器,大大簡化外圍電路;(3)KAC9638具有良好的電源管理功能和低功耗特性。數據傳送時芯片的總功耗為150 mW。此外,為進一步降低系統的功耗,芯片還具有可編程“上電”和“下電”模式。CMOS圖像傳感器目前普遍采用I2C總線,本系統通過S3C2410A的I2C總線與KAC9638的SCL、SDA連接。由S3C2410A直接完成對圖像傳感器的初始化。KAC9638內部嵌入了一個10位A/D轉換器,因而可以同步輸出10位的數字視頻流,但是S3C2410A具有32位的外部總線,直接將10位數據接到總線上會造成資源浪費,降低CPU效率,因此,KAC9638和S3C2410A之間連接CPLD,由CPLD完成10位視頻數據到32位的轉換,圖像采集接口電路結構框圖如圖4所示。
為使S3C2410A能像訪問內存一樣讀取圖像傳感器的數據,將CPLD映射到S3C2410A的存儲單元上。CPLD上的圖像緩存片選信號nGCS4,地址映射到S3C2410A的Bank4,地址范圍:0x20000000~0x27ffffff。實際只用其中的一個地址0x20000000(即DMA的源地址)。圖像傳感器由S3C2410A的clockout0引腳提供。此外,PCLK、HREF、VSYNC分別為像素、行、幀同步信號;OE為圖像傳感器啟動采集信號;XINT是ARM9與CPLD的外部中斷聯絡信號;XDREQ和XDACK為S3C2410A的DMA的請求和握手信號。
3 系統驅動軟件設計
3.1 I2C串行總線通信協議
I2C總線是嵌入式系統常見的網絡接口,由SCL(串行時鐘)和SDA(串行數據)兩根總線構成。該總線有嚴格的時序要求,總線工作時,由串行時鐘線SCL傳送時鐘脈沖,由串行數據線SDA傳送數據。總線必須由主設備控制,主設備產生串行時鐘控制總線的傳輸方向,并產生起始和停止條件。I2C總線傳輸一個字節的時序如圖5所示。當主設備寫從設備時,傳輸的數據要跟有從設備的地址。從設備不能主動執行數據傳輸,所以主控設備讀從設備時必須發送一個帶有從設備地址的讀請求。本系統中ARM9是主設備,圖像傳感器是從設備,ARM9通過I2C總線改寫KAC9638寄存器的值完成初始化。根據I2C通信協議,改變某個寄存器的值的過程是:先發送CMOS傳感器特定寫地址(7位地址+0),緊接著發送需要寫的寄存器的地址,再發送數據;而要讀取某個寄存器的值的過程是:先發送CMOS傳感器特定寫地址,緊接著發送需要讀的寄存器的地址,再發送CMOS傳感器特定讀地址(7位地址+1),最后接收數據。
3.2 圖像采集CPLD時序控制
CPLD采集兩個10位像元數據組合成32位(不夠的位用0補充)可以提高圖像采集效率。并且設計中使用DMA的方式保存圖像數據,可以減少CPU的開銷。以CPLD為核心器件設計的圖像采集邏輯結構圖如圖6所示。
邏輯結構圖的工作原理如下:
(1)CLKOUT0為S3C2410A的輸出時鐘引腳,根據S3C2410A內部寄存器MisCCR中4~6位的不同設置可以輸出不同的時鐘,如系統時鐘FCLK、AHB(內部)總線時鐘HCLK和APB(外部)總線時鐘PCLK等。系統將其作為CMOS圖像傳感器的主時鐘輸入MCLK。
(2)啟動信號START為S3C2410A的一個I/O,高電平有效,由于KAC9638的啟動信號OE是低電平有效,所以它們之間要連接一個非門。
(3)VSYNC為傳感器的幀同步信號,輸出一幀有效圖像時該信號一直為高電平,用該信號連接S3C2410A的外部中斷XINT,使CPU能控制一幀圖像的開始和結束。
(4)D[9:0]為圖像傳感器輸出的數據流,D[15:10]位用0填充,組成16位數據輸入到緩沖。緩沖的寫入允許信號是啟動信號START和幀有效信號VSYNC的邏輯與。在緩沖內兩個周期移位成32位數據。
(5)緩沖寫入時鐘WRCLK由傳感器的像元輸出時鐘PCLK提高,一個周期寫入一個10位A/D值,所以一次輸出32位數據時,輸出時鐘周期是PCLK的二分頻。并將PCLK的二分頻作為S3C2410A外部DMA的請求信號XDREQ。
(6)片選信號線nGCS4:作為32位緩沖的控制線,低電平有效。在進行數據采集時將DMA方式的源地址設置在BANK4范圍內,讀操作時即選中該緩沖。
圖7是用Verilog語言編寫的程序仿真的圖像采集時序圖。
3.3 DMA方式采集圖像數據程序設計
系統采集一幀圖像數據的流程圖如圖8所示。
(1)啟動圖像采集:主控CPU從串口或其他通信口接收到采集命令后,通過START信號線通知CPLD采集信號,CPLD再通過硬件引腳OE啟動KAC9638采集圖像數據。
(2)DMA初始化:包括DMA的源地址、目標地址、DMA次數等初始化。
(3)開外中斷:當一幀數據采集完成后,通過外部中斷通知CPU。
(4)DMA數據傳輸無需CPU干預,一幀圖像完成后產生中斷。
(5)DMA中斷產生并且外部中斷產生才算是一幀圖像采集完成,然后交由主控CPU進行處理。若只有其中一個中斷產生,并且等待另一個中斷超時,則是在采集過程中丟失了數據,采集圖像失敗。
4 硬件調試
4.1 硬件調試環境
在系統硬件調試中,使用集成開發環境配合JATG仿真器進行調試是目前采用最多的一種調試方式[7]。集成開發環境選用ARM公司的ADS1.2。JTAG仿真器也稱為JTAG調試器,是通過ARM芯片的JATG邊界掃描口進行調試的設備。屬于完全非插入式(即不使用片上資源)調試。
4.2 硬件調試步驟及結果
(1)BootLoad系統引導測試
先使用英蓓特公司開發的Flash燒寫工具將BootLoad程序燒寫到Flash,若在PC超級終端上能正確接收目標板的串口返回的啟動信息,表明系統正常運行,可以用ADS下載程序到SDRAM進行調試。
(2)圖像傳感器測試
①I2C配置測試
將ADS編譯好的bin文件下載到目標板的SDRAM,超級終端接收到返回的圖像傳感器ID正確,則表明I2C通信正常。通過I2C配置圖像大小為3(H)×5(V),用示波器測量傳感器幀同步(vsync)、行同步(hsync)及像元時鐘(pclk)的關系。如圖9所示,11個像元時鐘(設定的每行3個像元加上每行開始的8個全黑像元)對應1個行同步時鐘,圖10顯示了幀同步信號及行同步信號的關系:5個行同步時鐘對應1個幀同步時鐘。測試結果表明S3C2410A可以正確配置圖像傳感器的工作方式。
②圖像采集測試
為方便檢驗采集到的圖像,將ARM采集到的圖像數據通過UART口發送到PC終端,再將數據組合成圖像顯示。接收到的數據如圖11所示。
采用CMOS圖像傳感器、CPLD和ARM9的DMA結合完成圖像的采集是本系統的特點。該方法提高了圖像的采集速度,減少了CPU的開銷。CMOS圖像傳感器價格適中,外圍簡單,且集成I2C接口便于編程控制;CPLD將CMOS傳感器輸出數據移位成32位數據,可以使傳感器以更高的速度輸出;ARM9的DMA負責圖像采集,使得CPU可以解放出來處理其他任務。實驗測試結果證明,該圖像采集系統硬件平臺方案設計合理、可行。該系統在實際中可以應用于視頻圖像監控、圖像自動檢測、醫療及軍事檢測等場所,具有良好的應用前景。
評論
查看更多