江志東,高太長*,孫海洋,翟東力
(1.解放軍理工大學氣象學院,南京211101;2.南京眾華通電子有限公司,南京211101)
線陣圖像傳感器在圖像掃描、非接觸式尺寸檢測、位移測定和條形碼讀出等光電探測和光電成像領(lǐng)域有著廣泛的應用[1-2]。CCD圖像傳感器具有靈敏度高、頻率響應高和自掃描速度快等優(yōu)點,最早應用于上述領(lǐng)域,但CCD圖像傳感器也有一些無法克服的缺點,如功耗高、制造工藝復雜難于單片集成,且由于CCD是高電容器件讀出速度慢。CMOS圖像傳感器以其功耗低、讀出速度快、易于單片集成日益受到重視[3]。隨著超大規(guī)模集成電路工藝技術(shù)的飛速發(fā)展,CMOS傳感器性能不斷完善,感光陣列不斷增多,在工業(yè)自動化、民用視頻、軍事偵察、空問遙感成像等領(lǐng)域得到廣泛應用[4]。隨著線陣圖像傳感器感光陣列的不斷增加,在高速圖像采集處理系統(tǒng)中,對系統(tǒng)存儲和數(shù)據(jù)實時處理也提出了更高的要求,需要解決圖像傳感器時序驅(qū)動、數(shù)據(jù)的緩沖、存儲和傳輸?shù)纫幌盗袉栴}。
在氣象領(lǐng)域,基于CCD/CMOS傳感器陣列的成像技術(shù)獲取大氣粒子或者其他現(xiàn)象的二維或三維圖像,利用圖像處理理論確定大氣懸浮顆粒物[5]、云滴、雨滴[6]等粒子的濃度、尺度和速度分布信息,實現(xiàn)非接觸粒子檢測。在氣象業(yè)務中,儀器通常需要長期連續(xù)觀測且能夠?qū)崟r進行數(shù)據(jù)處理,因此需要重點考慮數(shù)據(jù)的存儲、傳輸和實時處理等需求。
傳統(tǒng)的線陣數(shù)據(jù)高速采集系統(tǒng)通常數(shù)字處理器(DSP或FPGA)、高速FIFO、比較器模塊和傳輸接口芯片等組成,對于線陣CCD還需專門的驅(qū)動電路[7]。與通用DSP芯片相比,F(xiàn)PGA增加了設(shè)計的靈活性和適應性,縮短了產(chǎn)品上市時間[8]。本文介紹了基于FPGA和USB芯片CY7C68013實現(xiàn)的高速線陣CMOS圖像數(shù)據(jù)采集系統(tǒng),解決了傳統(tǒng)采集方法中系統(tǒng)過于龐大和復雜的問題。針對高速采集數(shù)據(jù)的緩存、傳輸、實時處理及存儲等需求,設(shè)計完成了線陣CMOS的驅(qū)動時序,利用FPGA內(nèi)FIFO核實現(xiàn)了原始像素數(shù)據(jù)的緩存和抽幀輸出,同時充分利用FPGA可編程特性,在FPGA內(nèi)部實現(xiàn)了自適應閾值的比較模塊,在保留所需圖像信息的前提下,利用FPGA對比較后的二進制數(shù)據(jù)流數(shù)據(jù)進行壓縮編碼,降低了數(shù)據(jù)量,減少了對數(shù)據(jù)傳輸?shù)囊?,減輕了上位機實時數(shù)據(jù)存儲和實時處理的壓力。
FPGA采用Xilinx公司Spartan-3系列XC3S200,主要完成傳感器的時序驅(qū)動、數(shù)據(jù)的采集緩存、比較編碼及傳輸邏輯控制等功能,該芯片容量為20萬門,片上有分布式RAM 30 kbit和塊RAM 216 kbit可用于構(gòu)建FIFO和雙口RAM;圖像傳感器采用Panavision Imaging公司的DLIS-2K CMOS圖像傳感器,該芯片包含4行2 096個像素單元的線陣,每一行中有效像元個數(shù)2 080個,16個像元單元供暗電流檢測用,10位并行數(shù)字信號輸出,最大數(shù)據(jù)率為120 MHz。為便于數(shù)據(jù)緩存和傳輸,結(jié)合系統(tǒng)需求實際數(shù)據(jù)輸出取有效像素單元中的2 046個像素單元,每個像素單元數(shù)據(jù)用2個字節(jié)表示,結(jié)合幀數(shù)據(jù)頭每幀采樣數(shù)據(jù)量為4 kbyte(KB)。數(shù)據(jù)由USB芯片CY7C68013采用GPIF工作模式將數(shù)據(jù)上傳至上位機。USB工作采用 GPIF方式,利用CY7C68013的通用可編程接口GPIF模式實現(xiàn)與傳感器的無縫連接,可滿足圖像數(shù)據(jù)的實時傳輸[9]。
圖1 圖像采集系統(tǒng)硬件框圖
系統(tǒng)采用FPGA+USB的架構(gòu),該設(shè)計包括以下三個部分:線陣CMOS圖像傳感器、FPGA芯片和USB芯片CY7C68013。FPGA芯片為主控模塊,控制整個系統(tǒng)的工作時序和傳輸邏輯。根據(jù)需求系統(tǒng)可選擇工作在兩種模式下,即原始數(shù)據(jù)采集或編碼數(shù)據(jù)采集模式。在FPGA控制下,首先從CMOS傳感器的鎖存讀出圖像數(shù)據(jù),進行數(shù)據(jù)位轉(zhuǎn)換,即將10 bit像素數(shù)據(jù)輸出補為16 bit,并加入一定格式的數(shù)據(jù)幀頭,然后將16 bit像素數(shù)據(jù)送至FIFO,再通過FPGA產(chǎn)生FIFO的讀寫控制邏輯和USB的接口傳輸邏輯,數(shù)據(jù)經(jīng)USB芯片采用GPIF工作模式傳至計算機,至此可完成傳感器原始數(shù)據(jù)的傳輸。為減輕上位機存儲和實時數(shù)據(jù)處理的壓力,在保留所需圖像信息的基礎(chǔ)上,在FPGA中設(shè)計了數(shù)據(jù)比較編碼處理模塊,將原始像素數(shù)據(jù)和設(shè)定閾值進行比較,隨后將比較結(jié)果即二進制數(shù)據(jù)流編碼后的數(shù)據(jù)寫入FPGA的FIFO中,最后編碼數(shù)據(jù)仍由USB將數(shù)據(jù)上傳至上位機。
FPGA功能設(shè)計可分為接口模塊、緩沖存儲模塊、編碼處理模塊三部分。接口模塊負責前端傳感器時序驅(qū)動、FIFO讀寫控制和為USB提供傳輸接口邏輯;緩沖存儲器模塊作用有利用FIFO為不同時鐘域間數(shù)據(jù)傳輸提供緩沖,雙口RAM中可寫入經(jīng)一定算法計算后的各點的像素閾值;編碼處理模塊根據(jù)設(shè)置的閾值,將實時采集的原始數(shù)據(jù)和每個像素單元的閾值進行比較,隨后將比較后的結(jié)果編碼輸出。FPGA內(nèi)功能模塊設(shè)計如圖2。
本系統(tǒng)中,如何保證數(shù)據(jù)的完整性和準確性實現(xiàn)高速采集時大量數(shù)據(jù)的實時傳輸和處理是要考慮的重點。
圖2 FPGA內(nèi)功能模塊設(shè)計
CMOS傳感器和USB芯片工作在不同時鐘域,如何在不同時鐘系統(tǒng)間實時準確傳輸數(shù)據(jù)是本系統(tǒng)的關(guān)鍵問題之一。常用的緩存有FIFO、SRAM及雙口RAM等,雙口RAM和SRAM存儲量大但需配以復雜的地址發(fā)生器,而FIFO數(shù)據(jù)順序進出,無需地址線,操作簡單。異步FIFO(First in First Out)可以解決不同時鐘域之間的數(shù)據(jù)傳輸問題,可以容納異步信號的頻率或者相位的差異[10],F(xiàn)IFO芯片廣泛常應用于圖像數(shù)據(jù)采集的緩沖[11]。因此如何設(shè)計一個高可靠性、高速異步FIFO存儲器及控制邏輯實現(xiàn)數(shù)據(jù)的緩存、傳輸時難點之一。
本系統(tǒng)中傳感器數(shù)據(jù)采樣幀頻需在10 kHz以上,而當傳感器的幀頻為10 kHz時,實時原始像素數(shù)據(jù)量即可達到40 MB/s(Mbyte/s)。在普通計算機中,硬盤的持續(xù)傳輸速率最高可達50MB/s,但在Windows操作系統(tǒng)下,應用程序很難達到這一速率。如何保留相關(guān)必要圖像信息,減少數(shù)據(jù)傳輸量,實現(xiàn)數(shù)據(jù)的實時處理是本系統(tǒng)的難點之二。
下面著重對系統(tǒng)的數(shù)據(jù)緩沖模塊和編碼處理模塊的實現(xiàn)及工作原理分別介紹。
利用FPGA片內(nèi)異步FIFO作高速緩存,操作簡單,所用的FIFO IP核經(jīng)過充分測試和優(yōu)化,運行穩(wěn)定、可靠。實際應用時只需根據(jù)FIFO產(chǎn)生的邏輯標志設(shè)計讀寫邏輯即可,而不需考慮FIFO設(shè)計中邏輯標志的產(chǎn)生和異步電路的亞穩(wěn)態(tài)等問題[12]。
在ISE開發(fā)工具中創(chuàng)建FIFO_Core,選擇異步時鐘和使用內(nèi)部塊RAM,設(shè)置其輸入輸出數(shù)據(jù)位寬為16,F(xiàn)IFO深度為8 096,設(shè)置可編程滿信號計數(shù)為4 095,當FIFO寫計數(shù)達到4 095時(注意此對應第4 096個數(shù)據(jù)),即達到一幀數(shù)據(jù)時觸發(fā)可編程滿prog_full信號,F(xiàn)IFO的功能示意圖如圖3。在FIFO的例化調(diào)用時,寫時鐘為傳感器數(shù)據(jù)輸出同步時鐘,讀時鐘為USB的GPIF模式的IFCLK。
圖3 FIFO結(jié)構(gòu)圖
數(shù)據(jù)緩沖模塊的設(shè)計實際上是FIFO的讀寫邏輯的設(shè)計,即寫使能和讀使能的控制。FIFO采取單行復位的方式,檢測到有效數(shù)據(jù)標志上升沿后,啟動像素計數(shù),當像素計數(shù)值為29時,F(xiàn)IFO復位,像素計數(shù)值在30到2 077之間時,F(xiàn)IFO寫使能有效。其中像素計數(shù)值為30和31時,寫入FIFO數(shù)據(jù)幀頭0×9 999,其后對應CMOS輸出有效的2 046個像素數(shù)據(jù)。原始像素數(shù)據(jù)實時采集時,當FIFO寫計數(shù)達到4 095時候,觸發(fā)可編程滿prog_full信號,由prog_full做為控制FIFO異步讀數(shù)據(jù)的狀態(tài)信號之一,當prog_full有效時,F(xiàn)IFO寫使能禁止。FIFO讀使能由prog_full觸發(fā),由USB固件程序根據(jù)其端點FIFO狀態(tài)及FPGA內(nèi)部FIFO的狀態(tài)信號控制。USB工作與GPIF模式,設(shè)置為Auto-In(自動打包)模式,每次傳輸數(shù)據(jù)量為512 B(byte),對應256個像素單元數(shù)據(jù),滿足條件時無需外部控制器的干預可直接自動將FIFO中數(shù)據(jù)傳輸?shù)缴衔粰C,完成CMOS數(shù)據(jù)的實時傳輸。下面給出了FPGA中和USB連接的部分邏輯代碼:
為了減少數(shù)據(jù)傳輸量,減輕上位機數(shù)據(jù)存儲和處理壓力,結(jié)合系統(tǒng)自身功用,設(shè)計了數(shù)據(jù)編碼壓縮單元對原始像素數(shù)據(jù)進行處理。數(shù)據(jù)編碼壓縮單元包括閾值比較模塊、雙口RAM,數(shù)據(jù)編碼模塊三個部分。雙口RAM直接在ISE調(diào)用Core Generator生成,其參數(shù)為2 k·16 bit,其中A口設(shè)置為寫狀態(tài),通過上位機可控制寫入經(jīng)一定算法計算的每個像素點各自的閾值,B口為讀狀態(tài),比較模塊讀入閾值和對應的像素數(shù)據(jù)比較。
數(shù)據(jù)編碼壓縮前首先需將傳感器像素的響應曲線二值化,根據(jù)設(shè)置的閾值(此外設(shè)置為固定值,實際測量時可對每個像素點設(shè)置各自閾值),當相應像素光強響應值低于預先設(shè)置的閾值強度時,則認為該像素被完全遮擋,置為1,如圖4。數(shù)據(jù)編碼示意圖如圖5,當檢測到幀數(shù)據(jù)有效標志datavalid上升沿信號時,啟動讀像素計數(shù),讀像素計數(shù)范圍為[30,2 077]時,觸發(fā)比較使能,在讀像素計數(shù)的觸發(fā)下,雙口RAM地址遞增,像素數(shù)據(jù)值和其對應閾值進行比較(實際應用時可根據(jù)相關(guān)算法寫入對應點閾值,示意圖中采用固定閾值),當所采集的像素數(shù)據(jù)值低于設(shè)置的閾值時則比較結(jié)果為1,否則為0。數(shù)據(jù)編碼模塊是根據(jù)比較結(jié)果數(shù)據(jù)流,即二進制序列,在檢測到比較結(jié)果的上升沿時記錄當前像素數(shù)據(jù)的位置同時觸發(fā)編碼計數(shù),在比較結(jié)果下降沿記錄當前編碼計數(shù),從而確定對應的編碼寬度。將比較結(jié)果數(shù)據(jù)流編碼輸出,輸出起始位置和編碼的寬度,這樣即保留了原始數(shù)據(jù)的信息,又可以減少數(shù)據(jù)量,確保數(shù)據(jù)的實時傳輸和處理。
圖4 原始數(shù)據(jù)二值化示意圖
圖5 編碼示意圖
為檢驗模塊的功能,利用Modelsim編寫測試向量對相關(guān)設(shè)計進行了仿真,同時將程序編譯后下載至數(shù)據(jù)采集板觀測結(jié)果。
向FIFO寫數(shù)據(jù)必須滿足兩個條件:①數(shù)據(jù)總線有數(shù)據(jù)且數(shù)據(jù)有效,②FIFO寫使能有效。由于傳感器行有效標志data_valid有效時一直有數(shù)據(jù)輸出,而實際上我們只使用其中的2 046個數(shù)據(jù)(前兩個數(shù)據(jù)為數(shù)據(jù)幀頭),因此不能將data_valid直接做為FIFO的寫使能有效信號,F(xiàn)IFO寫使能標志由data_valid和FIFO的可編碼滿標志prog_ful共同確定。在檢測到行有效信號后觸發(fā)像素計數(shù),當計數(shù)值為30和31時為數(shù)據(jù)幀頭數(shù)據(jù),32~2 077為實際像素數(shù)據(jù)。時序仿真后波形如圖6(a)。將代碼下載至FPGA中運行發(fā)現(xiàn)上位機并不能實時完全處理及存儲每一幀數(shù)據(jù),即存在丟幀情況。利用模擬數(shù)據(jù)測試傳輸模塊發(fā)現(xiàn),正常情況下GPIF的傳輸數(shù)據(jù)率為20 Mbyte/s左右,此外上位機的實時處理也影響數(shù)據(jù)的傳輸。在實際應用中,原始像素數(shù)據(jù)的采集主要用于時域分析,即統(tǒng)計一定時間內(nèi)各個像素單元響應光強的平均水平,為數(shù)據(jù)比較閾值的設(shè)置提供參考。因此沒有必要將每一幀原始像素數(shù)據(jù)記錄保存,寫FIFO控制采用抽幀的控制方式,即采用多級門控信號實現(xiàn)每幾幀數(shù)據(jù)輸出一幀,每一級門控信號由data_valid觸發(fā),由多級門控信號同時觸發(fā)寫FIFO使能,如時序仿真波形圖6(b),采用每四幀輸出一幀,在此條件下可完整將輸出原始數(shù)據(jù)保存用于時域分析。經(jīng)抽幀輸出控制,對應傳感器的數(shù)據(jù)采集幀頻為10 kHz時,原始數(shù)據(jù)的輸出量由40 Mbyte降至10 Mbyte,利用CYPRESS公司提供的USB驅(qū)動和固件程序框架無需優(yōu)化即能夠?qū)崿F(xiàn)數(shù)據(jù)的正常傳輸,上位機能夠?qū)崟r原始像素數(shù)據(jù)保存用于時域分析。
圖6 異步寫FIFO時序仿真圖
在測試向量中假設(shè)二值化起始位置為20和68,結(jié)束位置分別為52和244,則編碼結(jié)果應該為[20 32][68 176],仿真時序圖如圖 7。經(jīng)編碼壓縮,對應傳感器的幀頻10 kHz時,系統(tǒng)的數(shù)據(jù)采集量由每秒40 Mbyte降至78 kbyte(每幀為數(shù)據(jù)頭加一組編碼數(shù)據(jù)時),傳輸系統(tǒng)能夠完全不丟幀降數(shù)據(jù)傳至上位機,上位機能夠?qū)崟r存儲和解碼計算。
圖7 編碼功能時序仿真圖
結(jié)合光學照明系統(tǒng)和成像系統(tǒng),對數(shù)據(jù)采集板進行了初步調(diào)試。圖8為系統(tǒng)成像示意圖,當降水粒子遮擋光路時,在線陣傳感器上產(chǎn)生投影,引起光強響應的變化。光源采用激光平行光源,中心波長650 nm,功率30 mW。傳感器采樣速率為20 000幀/s,以0.2 mm的銅絲遮擋光路引起的光強響應變化如圖9。
圖8 系統(tǒng)工作原理示意圖
圖9 實際光強響應曲線
系統(tǒng)采用可編程邏輯器件FPGA和USB2.0接口技術(shù)實現(xiàn)了線陣CMOS的時序驅(qū)動、高速采集、閾值比較和傳輸,解決了以往采集系統(tǒng)中存在軟硬件過于復雜的問題,克服了大量數(shù)據(jù)傳輸和處理時對上位機處理帶來的壓力,充分利用了FPGA芯片的片內(nèi)資源,結(jié)合自適應閾值統(tǒng)計方案,實現(xiàn)高速數(shù)據(jù)采集和比較編碼壓縮,達到了小型化、智能化和高性價比的有機結(jié)合。
初步試驗結(jié)果表明,系統(tǒng)滿足圖像數(shù)據(jù)實時采集和處理的要求,同時減輕了上位機數(shù)據(jù)存儲和處理的負擔。為實現(xiàn)不同尺度、不同下落末速度降水粒子的檢測,傳感器采樣速度應在15 000幀/s以上。DLIS-2K的最大數(shù)據(jù)輸出率為120 MHz,系統(tǒng)采樣典型的配置工作在60 MHz時,采樣速率約7 500幀/s,若設(shè)當修改傳感器參數(shù)配置、采用更高工作時鐘,可將CMOS數(shù)據(jù)采樣率提高到20 000幀/s以上。隨著FPGA的發(fā)展,利用帶有USB IP核的FPGA芯片可進一步實現(xiàn)系統(tǒng)的小型化。本系統(tǒng)可用于大氣粒子的非接觸測量,適當修改可應用到一維尺寸測量,邊緣檢測,位移測量等方面。系統(tǒng)初步實現(xiàn)了線陣圖像原始數(shù)據(jù)和編碼數(shù)據(jù)的采集,如何實現(xiàn)系統(tǒng)的業(yè)務化觀測,還需進一步確保系統(tǒng)野外運行時的穩(wěn)定性及關(guān)注系統(tǒng)自檢和定標等功能的實現(xiàn),此外對數(shù)據(jù)的后續(xù)處理及二次產(chǎn)品開發(fā)將另文探討。
[1]周根榮,姜平.基于線陣CCD的織物圖像采集系統(tǒng)[J].儀表技術(shù)與傳感器,2007,(8):51 -52.
[2]王玉田,楊妮,林曉琳.基于CCD技術(shù)的浮法玻璃厚度測量系統(tǒng)的研究[J].儀表技術(shù)與傳感器,2007(6):72-74.
[3]方杰.CMOS圖像傳感器[D].[碩士學位論文].上海:復旦大學,2004.
[4]曾桂英,潘金艷.基于FPGA的CMOS圖像傳感器采集系統(tǒng)設(shè)計[J].科學技術(shù)與工程,2010,10(03):692 -695.
[5]王丹青.基于分形理論的大氣懸浮顆粒物圖像識別[D].[碩士學位論文].武漢:武漢理工大學,2006.
[6]Baumgardner D,Greg Kok1,Dawson W,et al.A New Groundbased Precipitation Spectrometer:The Meteorological Particle Sensor(MPS)[C]//ams confex com,2002.
[7]虞益挺,饒伏波,喬大勇,等.一種新型CCD驅(qū)動電路設(shè)計方法[J].傳感技術(shù)學報,2005,18(2):388 -390.
[8]葉敏,周文暉,顧偉康.基于FPGA的實時圖像濾波及邊緣檢測方法[J].傳感技術(shù)學報,2007,20(3):623 -627.
[9]蘇建坡,馬海濤,唐玉國.基于USB2.0及GPIF的CMOS圖像傳感器視頻實時采集系統(tǒng)[J].儀表技術(shù)與傳感器,2006(9):35-37.
[10]張毅,周成英.高速同步FIFO存儲器在數(shù)字信號源中的應用[J].電子技術(shù),2003,30(11):48 -50.
[11]汪曣,白玉潔,張艷超,等.基于CCD的膠體金試紙條光電檢測儀器設(shè)計及實驗研究[J].傳感技術(shù)學報,2008,21(8):1370-1373.
[12]楊軍,孔兵,宋克儉,等.基于FPGA的高速異步FIFO存儲器設(shè)計[J].云南大學學報,2007,29(6),560 -565.