趙冬青 孟宇航
(中北大學(xué)電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室 太原 030051)
隨著電子技術(shù)的快速發(fā)展,機(jī)器視覺(jué)技術(shù)在目標(biāo)檢測(cè)、尺寸測(cè)量、PCB 缺陷檢測(cè)等領(lǐng)域發(fā)揮著越來(lái)越重要的作用[1~4]。圖像采集系統(tǒng)為機(jī)器視覺(jué)系統(tǒng)提供了圖像來(lái)源,而且正在向高速度和高實(shí)時(shí)性的趨勢(shì)發(fā)展[5]。為滿足機(jī)器視覺(jué)系統(tǒng)進(jìn)行圖像處理時(shí)對(duì)實(shí)時(shí)采集清晰圖像的需求,根據(jù)CMOS 圖像傳感器功耗低、速度快、噪聲低的優(yōu)勢(shì)[6~8]和FPGA速度快、邏輯資源多、編程靈活、并行性高的特點(diǎn)[9~11],設(shè)計(jì)了一種高性能圖像傳輸采集傳輸系統(tǒng)。綜合考慮機(jī)器視覺(jué)系統(tǒng)在圖像處理時(shí)對(duì)實(shí)時(shí)性和分辨率的要求,系統(tǒng)需滿足圖像采集速率為90fps、圖像分辨率1280×1024的指標(biāo)。
系統(tǒng)工作過(guò)程為上電復(fù)位后,F(xiàn)PGA 通過(guò)SPI接口配置圖像傳感器的工作模式、數(shù)據(jù)輸出通道數(shù)量等;配置完成后,傳感器開(kāi)始采集圖像數(shù)據(jù),經(jīng)過(guò)FIFO 緩存后寫(xiě)入DDR 進(jìn)行緩存[12],最后讀出DDR中的數(shù)據(jù)并通過(guò)以太網(wǎng)傳輸至上位機(jī)中。因此,系統(tǒng)可分為主控、圖像采集、DDR 控制、網(wǎng)絡(luò)傳輸?shù)饶K。圖像采集模塊使用PYTHON1300 作為圖像采集前端。由主控模塊通過(guò)SPI 接口配置傳感器內(nèi)部寄存器,令傳感器內(nèi)部時(shí)鐘頻率為72MHz,輸出圖像同步信號(hào)、同步時(shí)鐘信號(hào)和10 位圖像數(shù)據(jù);DDR 控制模塊負(fù)責(zé)接收?qǐng)D像同步信號(hào)和圖像數(shù)據(jù),接收完成后對(duì)圖像數(shù)據(jù)添加以太網(wǎng)包信息,根據(jù)圖像同步信號(hào)控制DDR 緩存圖像數(shù)據(jù),并控制DDR 將圖像數(shù)據(jù)輸出至網(wǎng)絡(luò)傳輸模塊,同時(shí)根據(jù)主控模塊發(fā)出的重傳地址重新傳輸圖像數(shù)據(jù);主控模塊接收網(wǎng)絡(luò)傳輸模塊的配置命令并以此控制圖像傳感器,同時(shí)接收網(wǎng)絡(luò)傳輸模塊發(fā)送的重傳命令,將命令解碼后得到的需重傳圖像地址輸出至DDR 控制模塊;網(wǎng)絡(luò)傳輸模塊將打包后的圖像數(shù)據(jù)通過(guò)千兆以太網(wǎng)傳輸至上位機(jī)進(jìn)行顯示,同時(shí)接收上位機(jī)傳送的增益、分辨率、曝光等配置命令并傳給主控模塊。若上位機(jī)接收數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤,則網(wǎng)絡(luò)傳輸模塊會(huì)接收上位機(jī)下發(fā)的重傳命令并輸出至主控模塊[13]。圖像采集傳輸系統(tǒng)總體設(shè)計(jì)如圖1所示。
圖1 圖像采集傳輸系統(tǒng)總體方案設(shè)計(jì)
為便于控制圖像采集的時(shí)序,采用傳感器的觸發(fā)快門(mén)模式,通過(guò)控制TRIGGER0來(lái)控制傳感器對(duì)圖像數(shù)據(jù)的采集和輸出。當(dāng)檢測(cè)到TRIGGER0 上升沿時(shí),傳感器開(kāi)始采集圖像、轉(zhuǎn)換成數(shù)據(jù)并通過(guò)LVDS數(shù)據(jù)通道輸出。
傳感器輸出圖像數(shù)據(jù)之前首先通過(guò)sync 通道輸出IMG 信號(hào),此時(shí)FPGA 開(kāi)始讀取圖像數(shù)據(jù)并緩存至FIFO 中。傳感器輸出像素的順序?yàn)閺淖笊系接蚁?。輸出圖像以核為單位,一個(gè)核由水平方向的從左到右8 個(gè)像素組成,每個(gè)數(shù)據(jù)通道輸出屬于核的兩個(gè)相鄰像素。當(dāng)輸出圖像時(shí),若為奇數(shù)核,則輸出從核的右側(cè)到左側(cè)的像素,若為偶數(shù)核,則輸出從左側(cè)到右側(cè)的像素。因此,需要先調(diào)用FPGA的片內(nèi)RAM 對(duì)接收到的像素進(jìn)行排序再存入DDR3 中。首先將采集到的圖像數(shù)據(jù)保存到RAM中,保存8 個(gè)像素之后,將像素按圖像數(shù)據(jù)的順序依次輸出。
由于DDR3 的寫(xiě)入時(shí)鐘頻率和數(shù)據(jù)位寬與圖像傳感器的發(fā)送數(shù)據(jù)時(shí)鐘和數(shù)據(jù)輸出接口位寬均不同,因此先用FPGA的內(nèi)部FIFO緩存數(shù)據(jù)再寫(xiě)入DDR3[14]。
當(dāng)FIFO 不為空時(shí),通過(guò)向DDR 傳輸寫(xiě)命令將FIFO中的圖像數(shù)據(jù)存入DDR3中,在寫(xiě)入數(shù)據(jù)的同時(shí)計(jì)數(shù);當(dāng)FIFO 中沒(méi)有數(shù)據(jù)時(shí)則停止寫(xiě)操作,根據(jù)計(jì)數(shù)結(jié)果判斷寫(xiě)操作是否完成。當(dāng)FPGA 發(fā)出讀取信號(hào)時(shí),根據(jù)圖像在DDR 中的地址向DDR 寫(xiě)入讀命令讀取圖像數(shù)據(jù),由于DDR 和網(wǎng)絡(luò)傳輸模塊的輸入接口位寬和工作時(shí)鐘頻率都不相同,所以先使用FIFO 緩存讀取的圖像數(shù)據(jù),再輸出至網(wǎng)絡(luò)傳輸模塊[15]。圖2為圖像緩存的邏輯設(shè)計(jì)圖。
圖2 圖像緩存的邏輯設(shè)計(jì)圖
由于圖像傳感器的分辨率為1280×1024,配置的幀速率為90fps,所以采集一副圖像需要11ms,像素深度為8 位,每秒可以采集112.5MB 的數(shù)據(jù)。DDR3 實(shí)際數(shù)據(jù)吞吐量約為640MB/s,讀取一幅圖像消耗時(shí)間為2ms。采集的圖像如圖3所示。系統(tǒng)輸出的圖像數(shù)據(jù)可正常顯示且無(wú)明顯時(shí)滯。
圖3 上位機(jī)顯示的傳感器采集的圖像
本設(shè)計(jì)使用了高速、小體積、低功耗的PYTHON1300 圖像傳感器采集圖像,利用速度快、資源多的FPGA 控制系統(tǒng)運(yùn)行,采用傳輸速度快、穩(wěn)定性好的千兆以太網(wǎng)傳輸數(shù)據(jù)及命令。系統(tǒng)功耗低、數(shù)據(jù)準(zhǔn)確且不易丟失,體積小,可移植性好且占用空間小,采集和傳輸圖像速度快,達(dá)到項(xiàng)目設(shè)計(jì)要求。