視頻監控以其直觀、方便、信息內容豐富而廣泛應用于很多場合。視頻監控成為人們生活中不可缺少的技術。在一些危險場所,用視頻監控代替人工監視,可以保證人們的生命安全。鑒于一路視頻的視野范圍有限,要充分收集目標的信息,就需要有多路視頻來對同一個物體在不同方位進行監控。因此需要有一個良好的控制手段,確保多路視頻控制穩定,可靠。針對織布機告警系統的需求,提出一種基于FPGA的多路視頻通道控制系統,本系統設計利用FPGA間接控制2塊MAX4312選通所需要的視頻通道,實現各個視頻通道間相互切換。根據開關控制信號的設計思想在FPGA中對撥動開關輸進信號做往抖動處理,然后對不同的開關操縱進行編碼,最后將信號送給DSP進行處理。
l 系統總體結構
系統總體結構如圖1所示。在1臺產業織布機上安裝了16個CCD圖像傳感器對布匹進行圖像監控,通過2片MAX4312選擇16路圖像視頻信號中的一路,經可編程視頻輸進器件SAA7111處理后從VP0輸出數字圖像信號。同時SAA7111輸出相應的行、場同步信號HS,VS以及與HS鎖定的時鐘信號LLC、LLC2,利用這些信號在EP3C25F324C8中對圖像進行預處理。然后將處理后的圖像通過PPI口送給BF561中進行算法處理,最后將處理結果送給報警和狀態指示裝置,實現織布機告警功能。為了使圖像監控更方便,該系統設計增添了電平撥動開關和脈沖撥動開關。電平開關使輸進圖像停止切換,固定于其中一路視頻輸人圖像。脈沖開關可以左右撥動,每次向左或向右撥動都會產生一個很短的上升沿脈沖,同時圖像向前或向后進行切換,實現手動選擇視頻輸進通道的功能。
2 軟件模塊設計
2.1 開關控制信號
實際工程中,BF56l連接在FPGA上的PF引腳比較少。為了節約資源,只通過BF561中的BF9來識別2個撥動開關的動作。因此首先需要將2個撥動開關輸進信號在FPGA中進行處理整合,得到合適的信號。
本系統開關控制信號的設計思想:由于設計這個信號的目的是識別開關控制動作。因此,只要任何一個開關發生了動作就需要產生一個脈沖。假如只有脈沖信號就只能知道開關發生了動作,而不知道是哪個開關發生了什么動作。所以,要識別具體是哪個開關發生了什么動作就必須配合雙口RAM中的數據進行解碼。該系統設計的脈沖持續時間對BF561來說并不重要,只要BF561能識別這個脈沖即可。由于系統中的2個撥動開關,一個是電平撥動開關,另一個是脈沖撥動開關,因此,只要根據電平撥動開關的動作制作相應的脈沖信號,再用這個信號與脈沖撥動開關產生的原始信號邏輯相與,就能得到所需要的目的信號。
由于撥動開關是機械觸點,當其斷開、閉合時會有相應的前沿、后沿抖動,為了使每次動作都只做一次響應,就必須對原始開關信號做往抖動處理。抖動信號可以分為2種:一種是時間很短的干擾信號,如高頻毛刺;另一種是時間較長的干擾信號,如開關抖動。這里的撥動開關都是人為操縱,因此每次觸發的時間都不會很短,一般小于10 Hz。根據上述分析開關抖動信號屬于后一種。因此在每次開關操縱后,對其產生的信號進行連續采樣,假如每次采樣都是低電平或者都是高電平,就以為此信號不是抖動,確實開關狀態發生了變化。整個設計過程使用Verilog硬件描述語言編寫,然后在QuartusⅡ平臺上編譯,并采用SignalTapⅡLogic Arlalvzer對信號采樣分析,調試通過后連同其他程序一起燒寫進FPGA的配置器件EPCSl6中。圖2~圖4分別是各個開關動作往抖動前和往抖動后的實時信號采樣圖。往抖動模塊中的部分代碼如下:
其中,clk為13.5 MHz頻率的時鐘信號,clk_cnt為采樣時間間隔計數器,當clk_cnt為135 000時采樣1次,即每隔10 ms采樣1次。寄存器shuru_temp存儲前一次開關信號狀態,shum存儲當前開關信號狀態。假如shuru_temp的值即是shtlm的值,則計數器test_cnt自動加l。假如連續4次采樣值相等,即test_cnt=4時往抖動輸出才隨輸進變化。
用電平撥動開關信號作為輸進,制作了一個脈沖信號用于識別開關動作,其代碼如下:
代碼中寄存器level_contrl_TEMP存儲level_contrl延時256個時鐘周期后的信號,然后用level_eontrl_TEMP中存儲的信號與level_co-ntrl的值相異或產生所需要的脈沖信號。
調試中發現,往抖動后的信號經常混有持續時間很短的高頻脈沖干擾信號,因此設計中使用兩級D觸發器延時來徹底消除高頻脈沖干擾,其程序代碼如下:
2.2 雙口RAM及開關信號編碼設計
雙口RAM分為真、假2種雙口。真雙口2個端口都可以讀寫,互不干擾。本次設計根據實際需要,添加的RAM模塊一端只讀,另一端只寫,讀寫互不干擾。根據上述分析可知,開關控制信號只能知道有開關控制動作發生,但是不能識別具體哪個開關發生了動作。因此,設計中首先利用MegaWizardPlug_In Manager中的宏功能塊RAM:2_PORT產生1個雙口RAM存儲塊,然后對這個宏功能模塊的參數進行適當調整,產生一個滿足自己特定要求的模塊,如圖5所示。
設計過程中,首先將開關動作進行編碼。然后將編碼后的數據存進空間大小為8的雙口RAM中。當BF561檢測到PF9上的脈沖后,在PF中斷中讀取RAM中指定地址的數據,然后根據這個數據進行開關狀態解碼并按解碼后的控制信息對2塊MAX4312器件進行操縱以控制視頻通道。對開關動作進行的編碼程序代碼如下:
整個設計有4種開關動作,程序中分別將其編碼成數據0l、02、03、04,然后將編碼后的這4個數據存進雙口模塊中,等待BF561來讀取并進行解碼。圖6是SignalTapⅡLogic Analyzer中對脈沖開關向右撥動后存進RAM中的數據進行采樣。
程序中RAM的讀信號rden_signal是由DSP發送的地址信號DSP_A、BANK選擇信號DSP_AMSl以及DSP讀信號DSP_ARE進行控制的。當DSP不從雙口讀取數據時,必須給DSP的數據線賦值高阻,以免影響SDRAM對DSP數據線的操縱。賦值指令如下:assignDSP_D=(rden_signal=l'b1)?DSP_D_TEMP;8 'hzz;其中DSP_D_TEMP是從雙口中讀取的數據。
3 結論
首先先容了整個系統的產業背景和硬件架構,然后著重闡述了怎樣在FPGA中處理開關控制信號,以達到可靠響應每個開關動作的目的。整個設計程序是在QuartusⅡ平臺上用Verilog硬件描述語言編寫,利用QuartusⅡ中的下載工具和SignalTapⅡLogic Analyzer工具進行下載、實時采樣,并多次調試驗證。本次設計已經成功應用于布機告警系統中,每次撥動開關都能正確、可靠的切換視頻通道。固然此系統中只有兩種開關,但是整個程序的設計思想對多種開關控制也是通用的,只需在細節上稍作改變就能識別多種開關動作。
評論
查看更多