<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 應用CPLD及EPP技術對CCD信號像素級的高速采集(圖)

          應用CPLD及EPP技術對CCD信號像素級的高速采集(圖)

          ——
          作者:燕山大學信息與科學工程學院 薛斌 焦斌亮 常丹華 時間:2007-02-06 來源: 收藏

          前言
            ccd(charge coupled device),即電荷耦合器件,是20世紀70年代初發(fā)展起來的新型的固體成像器件,ccd芯片借助于必要的光學系統(tǒng)和合適的外圍驅動與處理電路,可以將景物圖像,通過輸入面空域上逐點的光電信號轉換、存儲和傳輸,在其輸出端產生一時序視頻信號,并經末端監(jiān)視器同步顯示出人眼可見的圖像。隨著ccd技術的迅猛發(fā)展,針對ccd信號的采集以及采集之后的信號如何與計算機進行信息通信,就成為ccd應用的一個重要問題,而能夠針對ccd每一個像素進行高速采集并實時地傳輸給計算機處理,將會大大地提高采集到的ccd信號的精度并解決實時處理的問題。


          epp技術和cpld技術
            epp技術(增強型并行接口技術)可以進行高速的雙向數(shù)據傳輸,它可以區(qū)分兩種類型的信息,并分別定義為數(shù)據和地址,而且它可以實現(xiàn)高速的方向轉換,因此非常適合數(shù)據采集領域。epp可以在一個isa總線周期內完成包括握手聯(lián)絡在內的一字節(jié)的數(shù)據讀寫工作。數(shù)據線是雙向的,一個控制信號負責確定數(shù)據端口的方向,另外兩個控制信號則用來區(qū)分數(shù)據線上的數(shù)據和地址信息。epp傳輸可以自動生成控制信號并檢測對方的應答。epp模式支持4種操作,分別是地址寫入、數(shù)據寫入、地址讀取及數(shù)據讀取。數(shù)據讀寫一般用于主機與外設之間的數(shù)據傳送,地址的讀寫一般用于地址、通道、命令和控制信息的傳送。當epp模式要寫入一個數(shù)據字節(jié),需要將數(shù)據寫入epp數(shù)據寄存器,寫操作將導致接口開啟一個完整的數(shù)據寫入周期。接口的硬件把待寫入數(shù)據置于d0~d7,然后接口自動觸發(fā)握手聯(lián)絡信號,并檢測外設的應答。讀取1字節(jié)和此類似,對epp數(shù)據寄存器進行讀操作將引發(fā)一個完整的數(shù)據讀寫周期。地址的傳輸過程和數(shù)據的傳輸過程基本上一樣。epp的基地址通常是378h,接口使用的地址為378h~37fh。

            cpld(可編程邏輯器件)技術可以將數(shù)字電路集成到一塊芯片上,大大減小了電路板的體積,而且它的可編程性使得設計好的電路在升級和修改上變得非常簡單和方便。在采集系統(tǒng)中將使用以上兩種技術并且結合a/d(模數(shù)轉換器)和fifo(先入先出緩存器)來設計,很好地解決了ccd信號的采集和處理難題。


          系統(tǒng)的構成和基本原理
            ccd信號采集系統(tǒng)由以下幾個部分構成:ccd數(shù)字傳感器、a/d、fifo、cpld、計算機,如圖1所示。

            當a/d接收到ccd信號并將ccd每一個像素點的電壓值轉換成12位精度的數(shù)字量,送入fifo中,通過cpld的邏輯控制解決fifo和a/d之間的速度不匹配問題,并控制fifo的數(shù)據傳輸給計算機并行口。

            cpld對整個采集系統(tǒng)進行控制,包括2選1數(shù)據選擇電路、工作觸發(fā)電路、ccd積分時間選擇電路、fifo工作狀態(tài)控制電路,電路圖如圖2所示。當采集準備就緒,由ccd的采集使能脈沖對采集卡的各個芯片進行初始化,此后,由ccd的采集脈沖通過ad的encode端向ad發(fā)出采集脈沖,當ad一次采集完成之后dav發(fā)出高脈沖,此脈沖作為fifo的寫脈沖信號。同時采集脈沖也向數(shù)字比較器中的計數(shù)器發(fā)出計數(shù)脈沖,并行口同時檢測采集脈沖和讀取脈沖的數(shù)目,當讀取脈沖的數(shù)目少于采集脈沖的數(shù)目時,并行口向fifo中讀取數(shù)據,這樣既可以保證fifo內不會殘留有數(shù)據,也可以保證讀寫脈沖能以最短的時間結束,大大縮短了采集時間。一次采集完成之后,等待ccd發(fā)出下一次采集的指令。其中并行口向fifo中讀取數(shù)據時,每次數(shù)據將分成2次讀取,每次讀取總位數(shù)的一半,并加上高低識別位,以使數(shù)據讀入計算機中后計算機能夠分別識別高低位。

            在采集系統(tǒng)中選擇合適的芯片將使得采集系統(tǒng)的采集速度達到并行口的最大傳輸速度,精度最大可達14位。由于采集系統(tǒng)通過并行口與計算機進行通信,避免了計算機硬件電子器件對采集卡的電磁干擾,因此具有良好的抗干擾性。


          采集系統(tǒng)的驅動程序
            vc++對底層的操作能力非常強大,可以方便地實現(xiàn)對并行口的讀寫及操作,而且后期對采集的信號進行分析處理也非常方便,通過vc++封裝動態(tài)鏈接庫(dll)作為采集系統(tǒng)的驅動程序,主要封裝以下幾個函數(shù)。

            bool pascal export ptc_open (ptc_handle *phptc);//打開并行口
            void pascal export ptc_close(ptc_handle hptc);//關閉并行口
            byte pascal export ptc_readdata (ptc_handle hptc);//讀取并行口數(shù)據寄存器
            void pascal export ptc_writedata (ptc_handle hptc, byte data);//寫并行口數(shù)據寄存器
            byte pascal export ptc_readstatus (ptc_handle hptc);//讀取并行口狀態(tài)寄存器
            byte pascal export ptc_readcontrol (ptc_handle hptc); //讀取并行口控制寄存器
            void pascal export ptc_writecontrol (ptc_handle hptc, byte data);//寫并行口控制寄存器

            詳細的代碼由于篇幅關系不再一一列舉了。


          結束語
            利用ccd信號的采集脈沖信號和數(shù)據輸入信號的同步性,采集卡可以實現(xiàn)對ccd信號的每個像素進行采集,使得采集數(shù)據達到很高的精度,而且可以通過靈活地更改cpld的主控電路來實現(xiàn)fifo不同的讀取方式,滿足不同工作的要求。此外fifo的速度和精度都非常高,可以通過更換高速、高精度的ad來達到更好的采集效果。最好通過并行口和計算機通信,避免了計算機內部電路對ccd信號的影響,也大大改善了采集的效果。

          參考文獻
          1 jan axelson,那怡超譯.并行端口大全.中國電力出版社. 2001
          2 馮敏. visual c++.net編程基礎.清華大學出版社. 2002
          3 潘松,王國棟.基于eda技術的cpld/fpga應用前景.電子與自動化出版社. 1999
          4 馮志輝.用計算機cpld設計數(shù)字電子系統(tǒng).新技術新工藝出版社. 2002
          5 戴紫彬.在系統(tǒng)可編程器件的輸入信號處理技術.電子技術出版社. 2000


          關鍵詞:

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();