應用CPLD及EPP技術對CCD信號像素級的高速采集(圖)
前言
ccd(charge coupled device),即電荷耦合器件,是20世紀70年代初發展起來的新型的固體成像器件,ccd芯片借助于必要的光學系統和合適的外圍驅動與處理電路,可以將景物圖像,通過輸入面空域上逐點的光電信號轉換、存儲和傳輸,在其輸出端產生一時序視頻信號,并經末端監視器同步顯示出人眼可見的圖像。隨著ccd技術的迅猛發展,針對ccd信號的采集以及采集之后的信號如何與計算機進行信息通信,就成為ccd應用的一個重要問題,而能夠針對ccd每一個像素進行高速采集并實時地傳輸給計算機處理,將會大大地提高采集到的ccd信號的精度并解決實時處理的問題。
epp技術和cpld技術
epp技術(增強型并行接口技術)可以進行高速的雙向數據傳輸,它可以區分兩種類型的信息,并分別定義為數據和地址,而且它可以實現高速的方向轉換,因此非常適合數據采集領域。epp可以在一個isa總線周期內完成包括握手聯絡在內的一字節的數據讀寫工作。數據線是雙向的,一個控制信號負責確定數據端口的方向,另外兩個控制信號則用來區分數據線上的數據和地址信息。epp傳輸可以自動生成控制信號并檢測對方的應答。epp模式支持4種操作,分別是地址寫入、數據寫入、地址讀取及數據讀取。數據讀寫一般用于主機與外設之間的數據傳送,地址的讀寫一般用于地址、通道、命令和控制信息的傳送。當epp模式要寫入一個數據字節,需要將數據寫入epp數據寄存器,寫操作將導致接口開啟一個完整的數據寫入周期。接口的硬件把待寫入數據置于d0~d7,然后接口自動觸發握手聯絡信號,并檢測外設的應答。讀取1字節和此類似,對epp數據寄存器進行讀操作將引發一個完整的數據讀寫周期。地址的傳輸過程和數據的傳輸過程基本上一樣。epp的基地址通常是378h,接口使用的地址為378h~37fh。
cpld(可編程邏輯器件)技術可以將數字電路集成到一塊芯片上,大大減小了電路板的體積,而且它的可編程性使得設計好的電路在升級和修改上變得非常簡單和方便。在采集系統中將使用以上兩種技術并且結合a/d(模數轉換器)和fifo(先入先出緩存器)來設計,很好地解決了ccd信號的采集和處理難題。
系統的構成和基本原理
ccd信號采集系統由以下幾個部分構成:ccd數字傳感器、a/d、fifo、cpld、計算機,如圖1所示。
當a/d接收到ccd信號并將ccd每一個像素點的電壓值轉換成12位精度的數字量,送入fifo中,通過cpld的邏輯控制解決fifo和a/d之間的速度不匹配問題,并控制fifo的數據傳輸給計算機并行口。
cpld對整個采集系統進行控制,包括2選1數據選擇電路、工作觸發電路、ccd積分時間選擇電路、fifo工作狀態控制電路,電路圖如圖2所示。當采集準備就緒,由ccd的采集使能脈沖對采集卡的各個芯片進行初始化,此后,由ccd的采集脈沖通過ad的encode端向ad發出采集脈沖,當ad一次采集完成之后dav發出高脈沖,此脈沖作為fifo的寫脈沖信號。同時采集脈沖也向數字比較器中的計數器發出計數脈沖,并行口同時檢測采集脈沖和讀取脈沖的數目,當讀取脈沖的數目少于采集脈沖的數目時,并行口向fifo中讀取數據,這樣既可以保證fifo內不會殘留有數據,也可以保證讀寫脈沖能以最短的時間結束,大大縮短了采集時間。一次采集完成之后,等待ccd發出下一次采集的指令。其中并行口向fifo中讀取數據時,每次數據將分成2次讀取,每次讀取總位數的一半,并加上高低識別位,以使數據讀入計算機中后計算機能夠分別識別高低位。
在采集系統中選擇合適的芯片將使得采集系統的采集速度達到并行口的最大傳輸速度,精度最大可達14位。由于采集系統通過并行口與計算機進行通信,避免了計算機硬件電子器件對采集卡的電磁干擾,因此具有良好的抗干擾性。
采集系統的驅動程序
vc++對底層的操作能力非常強大,可以方便地實現對并行口的讀寫及操作,而且后期對采集的信號進行分析處理也非常方便,通過vc++封裝動態鏈接庫(dll)作為采集系統的驅動程序,主要封裝以下幾個函數。
bool pascal export ptc_open (ptc_handle *phptc);//打開并行口
void pascal export ptc_close(ptc_handle hptc);//關閉并行口
byte pascal export ptc_readdata (ptc_handle hptc);//讀取并行口數據寄存器
void pascal export ptc_writedata (ptc_handle hptc, byte data);//寫并行口數據寄存器
byte pascal export ptc_readstatus (ptc_handle hptc);//讀取并行口狀態寄存器
byte pascal export ptc_readcontrol (ptc_handle hptc); //讀取并行口控制寄存器
void pascal export ptc_writecontrol (ptc_handle hptc, byte data);//寫并行口控制寄存器
詳細的代碼由于篇幅關系不再一一列舉了。
結束語
利用ccd信號的采集脈沖信號和數據輸入信號的同步性,采集卡可以實現對ccd信號的每個像素進行采集,使得采集數據達到很高的精度,而且可以通過靈活地更改cpld的主控電路來實現fifo不同的讀取方式,滿足不同工作的要求。此外fifo的速度和精度都非常高,可以通過更換高速、高精度的ad來達到更好的采集效果。最好通過并行口和計算機通信,避免了計算機內部電路對ccd信號的影響,也大大改善了采集的效果。
1 jan axelson,那怡超譯.并行端口大全.中國電力出版社. 2001
2 馮敏. visual c++.net編程基礎.清華大學出版社. 2002
3 潘松,王國棟.基于eda技術的cpld/fpga應用前景.電子與自動化出版社. 1999
4 馮志輝.用計算機cpld設計數字電子系統.新技術新工藝出版社. 2002
5 戴紫彬.在系統可編程器件的輸入信號處理技術.電子技術出版社. 2000
評論