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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > CCD信號采集系統(tǒng)的USB接口設(shè)計

          CCD信號采集系統(tǒng)的USB接口設(shè)計

          作者: 時間:2011-04-07 來源:網(wǎng)絡(luò) 收藏

          (ChargeCoupledDevices)電荷耦合器件是20世紀(jì)70年代初發(fā)展起來的新型半導(dǎo)體集成光電器件。由于器件具有諸多優(yōu)點:靈敏度高、光譜響應(yīng)寬、動態(tài)范圍大、空間自掃描等,使得近30年來,器件及其應(yīng)用技術(shù)的研究取得了驚人的進(jìn)展,特別是在圖像傳感和非接觸測量領(lǐng)域的發(fā)展更為迅速。目前,CCD應(yīng)用技術(shù)已成為集光學(xué)、電子學(xué)、精密機(jī)械及微計算機(jī)為一體的綜合性技術(shù),在現(xiàn)代光子學(xué)、光電檢測技術(shù)和現(xiàn)代測量技術(shù)中成果累累。隨著CCD技術(shù)的迅猛發(fā)展,針對CCD之后的如何與計算機(jī)進(jìn)行信息通信就成為CCD應(yīng)用的一個重要問題,而能夠針對CCD每一個象素進(jìn)行高速并實時的傳輸給計算機(jī)處理,將會大大的提高采集到的CCD的精度并解決實時處理的問題,這在CCD信號采集和處理領(lǐng)域都將有非常廣闊的前景。

          本文引用地址:http://www.ex-cimer.com/article/150883.htm

          通用串行總線(UniversalSerialBus)是1995年由康柏、微軟、IBM,DEC等公司為解決傳統(tǒng)總線不足而推廣的一種新型的通信標(biāo)準(zhǔn)。總線具有較高的數(shù)據(jù)傳輸率、使用靈活、易擴(kuò)展等優(yōu)點,非常適合CCD的數(shù)據(jù)采集。他有低速、全速和高速三種工作方式,即l.1版本中.的低速模式和全速模式,低速模式的傳輸速率為1.5Mb/s,支持一些不需要很大數(shù)據(jù)吞吐量和很高實時性的設(shè)備,如鼠標(biāo)、鍵盤等;全速模式的傳輸速率可以達(dá)到12Mb/s。,可以外接速率更高的外設(shè),適合用于線陣CCD的數(shù)據(jù)采集。在USB 2.0版本中,增加了一種高速模式,其數(shù)據(jù)傳輸率最高可以達(dá)到480Mb/s,完全可以滿足高速CCD數(shù)據(jù)采集的需要。

          2 硬件組成

          選用高速的AD(模數(shù))轉(zhuǎn)換器,用于采集CCD信號,配以先進(jìn)先出(FIFO)存儲器作為數(shù)據(jù)高速緩沖器,用于存儲AD轉(zhuǎn)換后的數(shù)據(jù),并采用具有微控制器的USB芯片,從而通過USB接口將采集到的數(shù)據(jù)輸入計算機(jī)。原理框圖如圖1所示。

          其中使用CPLD技術(shù)完成本采集系統(tǒng)的控制模塊。CPLD(可編程邏輯器件)技術(shù)已經(jīng)成為當(dāng)今數(shù)字電路最為流行的方式,他可以將數(shù)字電路集成到一塊芯片上,大大減小了電路板的體積和可靠性,而且他的可編程性使得好的電路在升級和修改上變得非常簡單和方便。

          USB控制芯片選用Cypress公司EZ-USB系列的AN2131QC,片內(nèi)嵌有一個增強(qiáng)型的8051微控制器,并使用片內(nèi)RAM作程序和數(shù)據(jù)存儲器,使得芯片具有軟特性,允許客戶隨時不斷地設(shè)置和升級。內(nèi)部框圖如圖2所示。

          EZ-USBAN2131QC符合USB規(guī)范1.1版本,有4種傳輸方式:控制傳輸、中斷傳輸、批量傳輸和同步傳輸。其中同步傳輸又有2種方式,即普通讀寫方式和快速讀寫方式。在本系統(tǒng)中采用的是快速讀寫方式,使得芯片可以在0.5 ms內(nèi)讀寫1 kB的數(shù)據(jù)。

          3 軟件

          軟件主要分為3部分:USB芯片的固件程序、USB設(shè)備驅(qū)動程序以及主機(jī)的用戶應(yīng)用程序。固件響應(yīng)各種來自系統(tǒng)的USB標(biāo)準(zhǔn)請求,完成各種數(shù)據(jù)的交換工作和事件處理。USB-驅(qū)動程序為USB采集系統(tǒng)提供了應(yīng)用軟件與USB設(shè)備的接口,他的開發(fā)使USB廣泛應(yīng)用于數(shù)據(jù)采集系統(tǒng)成為可能。而應(yīng)用軟件則實現(xiàn)用戶與采集系統(tǒng)的交互,完成數(shù)據(jù)采集命令,進(jìn)行實時顯示。

          3.1 固件程序代碼

          由USB芯片集成的加強(qiáng)型8051單片機(jī)來處理,當(dāng)EZ-USB設(shè)備連接到USB口時,主機(jī)進(jìn)行總線枚舉,根據(jù)設(shè)備ID先使用系統(tǒng)程序?qū)⒐碳螺d到芯片內(nèi)部,然后進(jìn)行重枚舉,固件作為用戶的功能設(shè)備開始執(zhí)行。

          Cypress公司提供固件程序框架,來完成控制傳輸和大部分的數(shù)據(jù)傳輸工作。本采集系統(tǒng)的固件程序就是基于此固件框架開發(fā)的,使用KeilC進(jìn)行編譯。程序流程圖如圖3所示。

          圖3中:TD_Init()為初始化全局變量;TD_Poll()為用戶功能;TD_Suspend()為響應(yīng)掛起事件;TD_Resume()為響應(yīng)外部喚醒事件。

          EZ-USB使用8051的INT2來響應(yīng)21種USB中斷,自動矢量(Autovector)機(jī)制幫助使8051內(nèi)核進(jìn)入相應(yīng)的ISR(Interrupt Service Routine中斷服務(wù)例程)。在初始化函數(shù)中加入使能EZ-USB的SOF(幀起始)中斷語句,可以開始同步傳輸。每1 ms開始發(fā)生SOF中斷,標(biāo)志幀的開始。在SOFISR中從外部FIFO讀取一個包長度的字節(jié)數(shù)據(jù)到端點緩沖區(qū)中。

          3.2 驅(qū)動程序設(shè)計

          USB客戶驅(qū)動程序是支持即插即用功能的標(biāo)準(zhǔn)WDM(Windows Driver Model)驅(qū)動程序,這是分層的驅(qū)動程序模型,即設(shè)備驅(qū)動被分成了若干層,典型地分成:高層驅(qū)動程序、中間層驅(qū)動程序、底層驅(qū)動程序。每層驅(qū)動再把I/O請求劃分成更簡單的請求,以傳給更下層的驅(qū)動執(zhí)行。最底層的驅(qū)動程序在收到I/O請求后,通過硬件抽象層,與硬件發(fā)生作用,從而完成I/O請求工作。在這樣的架構(gòu)下,上面的驅(qū)動層就不需要對每個操作系統(tǒng)都要開發(fā)一遍了。USB客戶驅(qū)動程序接收I/O管理器發(fā)來的IRP(I/ORequestPacket),構(gòu)造URB(USBRequest Block)傳遞給主控制驅(qū)動程序接口USBDI。在USBDI的基礎(chǔ)上進(jìn)行編程將大大簡化,用戶不用關(guān)心IRP的類型,而只需要在相應(yīng)的分發(fā)例程中通過構(gòu)造URB(USBRequestBlock)并將其通過USBDI發(fā)送下去就可以實現(xiàn)對USB設(shè)備的控制了。

          開發(fā)USB設(shè)備驅(qū)動程序的工具目前廣泛應(yīng)用的主要有2類:


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();