歡迎您光臨本站 登入註冊首頁

概述

1引言   通過對CMOS圖像感測器輸出的黑白電視信號進行視頻採集,獲得數字圖像信號,實現數字圖像的處理。該系統採用PC機和基於DSP的數字信號處理板(數字板)構成主從式……

1 引言
    通過對CMOS 圖像感測器輸出的黑白電視信號進行視頻採集, 獲得數字圖像信號, 實現數字圖像的處理。該系統採用PC 機和基於DSP 的數字信號處理板(數字板) 構成主從式成像系統。採用計算機作為主機, DSP 作為輔助機的主從式結構。文章主要介紹系統的視頻圖像採集部分採用FPGA (現場可編程門陣列) 進行邏輯控制實現視頻圖像採集的原理及實現。

2 系統組成及基本原理
    一個完整的成像系統不但要具備圖像信號的採集功能, 能對圖像進行實時顯示, 且要求完成圖像信號的分析, 處理演算法(如圖像壓縮、圖像識別等) 以及圖像處理結果的反饋控制。通常這些演算法的運算量大, 同時又要滿足實時顯示的要求, 因此採用高速DSP 晶元作為數據核心處理單元。
    另外, 要求系統滿足通用性的同時, 針對不同的應用和不斷出現的新處理方法, 還要使系統便於功能的改進和擴展。為此, 我們以PC 機為主機, 以TI 公司的DSP ( TMS320C6201) 作為數字信號處理板的核心, 用FPGA 作為系統數據採集的控制部分, 設計出實時圖像處理系統。圖1 是基於DSP 的實時圖像系統的原理圖。文章將詳細闡述該系統數據採集部分的實現方法。
 
圖1  基於DSP 的實時圖像系統的原理圖

3  視頻信號採集部分的實現原理
3.1 信號說明
    黑白複合視頻圖像信號通常由圖像信號、消隱信號以及同步信號共同組成。我們採用黑白電視信號作為模擬輸入, 以FPGA 作為採集系統的控制單元進行邏輯控制實現採樣。圖2 是複合視頻圖像信號波形,
 
圖2  複合視頻圖像信號波形示意圖
    黑白電視信號說明如下:
(1) 掃描方式為隔行掃描;
(2) 每秒50 場, 場周期為20 ms , 每場312.5行, 行周期為64μs ;
(3) 黑白電視信號由圖象信號, 複合消隱脈衝,複合同步脈衝組成, 場消隱期寬度為25 個行同期,場同步脈衝寬度為215 個行周期, 行消隱期寬度為12μs , 行同步脈衝寬度為4.7μs。
    由於系統採用逐場逐行採集電視信號, 並且要求控制所採集的圖像大小為128 ×128 像素, 因此必須對視頻信號的同步信號進行分離, 提取視頻信號的同步信號, 以便採集部分的實現。

3.2  視頻信號複合同步信號提取電路
    我們採用視頻同步分離器LM1881 晶元來完成這一功能, LM1881 可以從0.5 ~ 2 V 標準負極性NTSC 制、PAL 制或SECAM 制視頻信號中提取組合同步、場同步、奇偶場識別等信號, 這些信號都是進行圖像數字採集所需要的同步信號, 有了它們, 才能確定在哪一場、哪一行。因此我們選用LM1881 來獲取複合同步信號。採用LM1881 同步提取電路, 能夠十分方便地提取採集同步信號, 且電路十分簡單, 該部分的電路圖和信號波形如圖3 所示。其中Vin 是標準視頻信號, Hs 為行同步信號, Vs 為場同步信號,ODEV 為奇偶場信號。
 
圖3  LM1881 複合同步信號提取電路及信號波形
    圖4 是實際提取的視頻同步信號波形, 可以看出, 我們採用LM1881 可以獲得很好的視頻同步信號, 為視頻信號採集提供了好的控制信號。
 
圖4  視頻同步信號波形圖

3.3  FPGA 與DSP 數據交換部分的工作原理及工作過程
    由圖1 可以看出, DSP 與FPGA 中是採用一個雙口RAM 來實現數據交換的, 雙口RAM 的容量為4 K ×32 bit 。雙口RAM 作為圖像數據的中間存儲區, 圖像採集部分由DSP 負責啟動控制及採集數據的讀取。為了實現圖像的實時採集與處理, 應當使對圖像信號的採集與外部對圖像的讀取能夠同時進行,因而將4 K的雙口RAM 劃分成兩塊圖像數據緩存區域, 假設前2 K為RAM-1 , 后2 K為RAM-2 。在系統工作的任一時刻, 一塊緩存用於圖像的採集, 採集部分向該存儲區寫圖像數據; 另一塊用於外部對圖像數據的讀取, DSP 可以讀取該存儲區中的圖像數據。
    雙緩存結構的一個重要特點在於DSP 對存儲區的數據操作是隨著雙口RAM 存儲地址來回切換的。當AD 轉換數據寫滿RAM-1 時, FPGA 會向DSP 發出一個中斷信號, 此時, DSP 讀取RAM-1 中的數據,同時, AD 轉換數據寫入RAM-2 , 當RAM-2 中的數據寫滿時, FPGA 會向DSP 發出一個中斷信號,此時, DSP 讀取RAM-2 中的數據, 同時, AD 轉換數據寫入RAM-1 , 如此交替, 實現數據的寫入與讀取同時進行。由於DSP 讀取雙口RAM 中數據的速度遠遠大於AD 轉換寫入數據的速度, 就允許採集與外部訪問的同時進行, 採用兩塊存儲區操作的乒乓式切換, 滿足數據實時交換的要求。
    系統的工作過程為:
(1) DSP 通過ENAD 信號控制採集系統的運行, 當ENAD = 1 , 數據採集系統開始工作, 數據通過AD 不斷地送入雙口RAM , 且雙口RAM 每隔2 K發出一個中斷, 通知DSP 讀取前一段已完成轉換的數據;
(2) 當ENAD = 0 , 即系統停止工作, 採集時鐘為低電平, 存儲器片選均為低電平(片選為高電平有效) , 整個系統處於低能耗的待命狀態。

3.4  FPGA 採集控制部分的邏輯結構
    實際上一場視頻圖像的奇行場和偶行場分別為312.5 行, 場消隱期寬度為25 個行周期, 由於我們採集的行數一定, 因而只需對奇行場進行採集即可,為使圖像的採集行範圍不落入場消隱期中, 我們確定一場的採集從場同步滯后32 個Hs 脈衝開始, 採集128 行后停止, 這樣可以保證不會採到消隱電平。圖像每行時間為64μs , 其中行消隱期寬度為12μs , 行消隱期中有4.7 μs 的行同步頭, 行同步頭在消隱期中的位置一般靠前。我們確定從採集行行同步滯后7μs 后開始採集(滯后時間可視具體信號稍加調整) ,採集時鐘為6.66 MHz , 采128 個點需要19.2μs。可以用一個6 分頻的計數器, 將40M 的輸入時鐘CLOCK變換為6.66 M 的採集時鐘AD_CLK。根據3.3 中說明的系統工作過程, FPGA 的控制邏輯過程為:
當ENAD = 0 時, 採集系統停止工作, 這時LINE = 0 , ENCA = 0 , 因而沒有AD 轉換信號, 同時地址發生器不計數。
當ENAD = 1 時, 系統處於採集狀態, 採集一場圖像的過程為:
    首先ENAD 與Hs 通過AD 啟動控制部分合成,使AD 啟動, 只有Vs 上升沿到來后, 才讓Hs 通過,從而保證採集的圖像為完整的一幀圖像。當Vs 上升沿到來后, 對所有計數器及觸發器清零。Vs 上升沿后, 場消隱延時用來對Hs 計數, 以保證計數32 周期后, 場消隱期已過, 可以採集圖像。行同步計數器對Hs 進行計數。在計數的每一行中, 當Hs 上升沿到來時, 行消隱延時對AD_CLK 計數, 計數到32時, 此時行消隱已過, 點同步計數器開始對AD_CLK計數。當行同步計數達到128 后停止計數, 此時一幀圖像採集完畢。等待下一個Vs 到來。
    圖5 為FPGA 採集控制部分邏輯原理圖。設計採用原理圖輸入法, 對設計文件進行了模擬和時序分析, 其時序特性符合所需的時序要求, 該系統選用的FPGA 器件是Xilinx 公司的Spartan XL 系列XSC2000 , 在Foundation 3.1i 上完成設計, 且下載到晶元驗證。同時, 根據不同的輸入控制信號和控制要求, 只要對FPGA 內部的邏輯結構稍作修改,便可實現新的控制。
 
圖5  FPGA 採集控制部分邏輯原理框圖

    圖6 是FPGA 輸出的AD 控制信號。其中, AD_INT是中斷響應信號, ENCA 是AD 轉換控制信號。
 
圖6  FPGA 輸出的AD 控制信號圖
3.5  DSP 實現中斷控制取數
    FPGA 每採集2 K 數據所發出的中斷信號AD_INT 與DSP 的外部INT7 相連, 用於實現DSP 的中斷取數, 由於FPGA 每隔2 K發出一個中斷, 且雙口RAM 的大小為4 K, 因而必須採用中斷實現取數。具體實現為在DSP 內設置中斷, 當外部中斷信號來到時, 則響應中斷服務程序, 執行中斷響應。如此反覆, 直到完成一幀圖像採集。
    該系統DSP 的中斷控制部分採用ANSI C 語言編寫, DSP 中斷主程序及中斷響應服務程序如下(讀取一幀圖像) :
A_flag = 0 ;
count = 8 ;
void main()
{
……
ICR| = 0x80 ;
IER| = 0x0083 ;// enable int 7 (start_int)
CSR| = 1 ;
* (unsigned volatile int *)ADADDR = 0x1F ;// ad start
while (1) // waiting for intrupt
{ if (count == 0) break ; }
*(unsigned volatile int *) ADADDR = 0x0 ; // ad stop
CSR = 0x100 ; // disable all interrupts
IER = 1 ; // disable all interrupts except NMI
ICR = 0xffff ; // clear all pending interrupts
……
}
interrupt void start_int ( ) // interrupt service program
{  if (A_flag == 0)
{  while (b0 < 0x2000)
  {  *(unsigned volatile int *) (0x400000 + b1) = *(unsigned volatile int *) (0x1400000 + b0) & 0xFFF ;
  b0 = b0 + 4 ;
  b1 = b1 + 4 ; }
  A_flag = 1 ; }
else if (A_flag == 1)
{   while (b0 < 0x4000)
  { *(unsigned volatile int *) (0x400000 + b1) =*(unsigned volatile int *) (0x1400000 + b0) & 0xFFF ;
  b0 = b0 + 4 ;
  b1 = b1 + 4 ; }
  b0 = 0 ;
  A_flag = 0 ; }
count-- ;
}
    在中斷矢量表中要設置硬體中斷7 的響應函數,以便有外部中斷時執行相應的中斷服務程序, 設置語句為:
INT7 : b-start_int
    程序中ICR 為中斷設置寄存器, IER 為中斷使能寄存器, CSR 為控制狀態寄存器。ADADDR 為AD 啟動/ 關閉控制字, 其地址值為0x3380000 。A_flag 標記用於識別讀取的數據是4 K 雙口RAM 的前或后2 K的標記。count 用於一幀圖像中斷次數的記數(2 K*8 = 16 K) , 雙口RAM 在DSP 的存儲器中對應的存儲器位置為0x1400000 , 因而轉移數據時, 對0x1400000 進行操作。

4 實驗結果
    採集到的數據通過PCI 口與PC 機實現數據交換, 由於PCI 口實現交換數據快(可高達120Mbyte/s) , 且可方便地讀取板卡上內存處的數據實現數據交換, 便於系統的實現。圖7 是用系統進行視頻圖像採集, 通過PCI 口實現讀數和顯示獲得的128 ×128 面陣, 按256 級灰度顯示所得的圖像。通過系統成像實驗表明, 該系統可以採集獲得很清晰的圖像, 實驗結果較為滿意。
 
圖7  採集得到的128 ×128 面陣256 級灰度圖像圖

5  結束語
    在系統中採用FPGA 作為採集控制部分, 可以提高系統處理的速度, 大大提高系統的靈活性和適應性。具體表現為:
(1) 系統性能得到大大提高: 由於在FPGA 與DSP 之間採用雙口RAM 作為數據交換區, FPGA 專門負責採集控制部分的實現, 通過中斷的方法與DSP實現數據和控制指令交換, 因而大大提高系統的性能。如果採用DSP 進行AD 採集控制, 在高頻數據採集控制中將耗去DSP 的大部分時鐘, 而降低系統的整體速度。
(2) 系統的適應性與靈活性強: 由於採用FPGA可編程邏輯器件作為系統採集控制單元, 對於不同的視頻圖像信號, 只要在FPGA 內對控制邏輯稍作修改, 便可實現信號採集。同時, 也可根據系統的需要, 控制所采圖像的位置和所采圖像的大小, 以適合不同場合的需要。
(3) 設計結構簡單, 調試方便: FPGA 的外圍硬體電路簡單, 因而在硬體設計中, 可以大大地減小硬體設計的複雜程度。而FPGA 的時序邏輯調試可在軟體上模擬實現, 因而大大降低硬體調試難度。


[admin via 研發互助社區 ] FPGA 控制實現圖像系統視頻圖像採集已經有2166次圍觀

http://cocdig.com/docs/show-post-43151.html