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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于USB和DSP的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)

          基于USB和DSP的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)

          作者: 時(shí)間:2008-08-07 來(lái)源:網(wǎng)絡(luò) 收藏

          摘 要:介紹了一種利用2.0的高速傳輸特性,基于的數(shù)據(jù)采集系統(tǒng)。詳細(xì)論述了系統(tǒng)的總體結(jié)構(gòu)、部分硬件設(shè)計(jì),并簡(jiǎn)要敘述了相應(yīng)固件程序的實(shí)現(xiàn)。
          關(guān)鍵詞: 高速傳輸

          測(cè)量?jī)x器一般由數(shù)據(jù)采集、數(shù)據(jù)分析和顯示三部分組成,而數(shù)據(jù)分析和顯示可以由PC機(jī)的軟件來(lái)完成,因此只要額外提供一定的數(shù)據(jù)采集硬件就可以和PC機(jī)組成測(cè)量?jī)x器。這種基于PC機(jī)的測(cè)量?jī)x器被稱為虛擬儀器[1]。而在一些數(shù)據(jù)量比較大、采集時(shí)間比較長(zhǎng)的場(chǎng)合,就需要采用高速的數(shù)據(jù)傳輸通道?;谔摂M儀器的思想和高速傳輸通道的要求,設(shè)計(jì)了一種基于和USB2.0的高速數(shù)據(jù)傳輸接口。
          1 數(shù)據(jù)采集系統(tǒng)硬件
          數(shù)據(jù)采集系統(tǒng)由A/D數(shù)據(jù)采集單元、USB從接口單元、U盤讀寫單元組成。硬件原理圖如圖1所示。被測(cè)信號(hào)經(jīng)A/D轉(zhuǎn)換后寫入FIFO中;當(dāng)FIFO數(shù)據(jù)半滿后,產(chǎn)生中斷,通知DSP進(jìn)行數(shù)據(jù)壓縮處理;DSP把壓縮好的數(shù)據(jù)依次寫入U(xiǎn)SB接口芯片的4個(gè)從FIFO中,4個(gè)從FIFO對(duì)應(yīng)USB的4個(gè)端點(diǎn),DSP一邊寫入數(shù)據(jù),已寫滿的從FIFO就一邊通過(guò)相應(yīng)端點(diǎn)由SIE把數(shù)據(jù)發(fā)送到上位機(jī),上位機(jī)一邊把收到的數(shù)據(jù)通過(guò)多線程存儲(chǔ)到硬盤中,一邊把數(shù)據(jù)解壓并把波形實(shí)時(shí)顯示出來(lái)。對(duì)于少量的數(shù)據(jù),可以存儲(chǔ)到U盤,送回PC機(jī)進(jìn)行分析顯示。


          1.1 A/D采集模塊
          作為單通道輸入的MAX1189,主要控制信號(hào)有CS、R/C(Read/Conversion)、EOC(End of Conversion)。圖2為MAX1189的時(shí)序圖[2]。如圖2所示,每個(gè)采樣周期長(zhǎng)達(dá)CS信號(hào)的三個(gè)周期。在第一個(gè)CS信號(hào)的下降沿,如果R/C為低電平,也就進(jìn)入了應(yīng)答模式,這是開(kāi)始采樣前必須的準(zhǔn)備工作。為了適應(yīng)不同的輸入極性要求,MAX1189的內(nèi)部參考電壓可以在每次轉(zhuǎn)換結(jié)束后進(jìn)行設(shè)置,這是通過(guò)在第二個(gè)CS下降沿時(shí),R/C的高低電平變化來(lái)控制的,非常簡(jiǎn)便。低電平時(shí),ADC內(nèi)部參考電壓無(wú)需進(jìn)行轉(zhuǎn)換,這樣在開(kāi)始下一個(gè)周期的轉(zhuǎn)換時(shí)無(wú)需等待電壓的變化。高電平時(shí),內(nèi)部參考電壓會(huì)進(jìn)行調(diào)變,這樣在開(kāi)始下一周期的轉(zhuǎn)換時(shí)需要等待大約12?滋s的時(shí)間。在CS信號(hào)的第三個(gè)下降沿,EOC信號(hào)變?yōu)榈碗娖?,表示采樣結(jié)束,此時(shí)R/C信號(hào)為高電平,會(huì)把采樣數(shù)據(jù)放到總線上,這樣就完成了一個(gè)周期的采樣。采樣模塊的控制信號(hào)是由控制的。


          1.2 DSP與FIFO的連接
          主處理器DSP既要控制采集,又要完成數(shù)據(jù)的處理和傳輸,因此數(shù)據(jù)采集模塊采集來(lái)的數(shù)據(jù)不能直接傳送給DSP,這會(huì)極大影響DSP的處理效率。解決辦法是利用數(shù)據(jù)緩沖器如雙口RAM、FIFO等,對(duì)數(shù)據(jù)進(jìn)行適度緩存,當(dāng)緩存的數(shù)據(jù)量達(dá)到一個(gè)設(shè)定值時(shí),可以通知CPU進(jìn)行一次高速數(shù)據(jù)傳輸,將緩存的數(shù)據(jù)一次性地讀入。在設(shè)計(jì)中采用了緩沖,較好地解決了采集端與處理端的速度匹配問(wèn)題。
          FIFO的讀寫由各自的控制時(shí)鐘FIFOR和FIFOW控制,寫時(shí)鐘與采樣時(shí)鐘同步,讀時(shí)鐘與DSP處理數(shù)據(jù)的時(shí)序有關(guān)。當(dāng)FIFO半滿后,會(huì)根據(jù)FIFOHF、FIFOE/F、FIFOPAFE的相應(yīng)位判斷FIFO是否半滿,F(xiàn)PGA便向DSP發(fā)出中斷請(qǐng)求。本設(shè)計(jì)中采用外部中斷的EXTINT3來(lái)作為FIFO緩沖數(shù)據(jù)的DMA傳輸觸發(fā)事件。DSP響應(yīng)FPGA中斷請(qǐng)求,讀取數(shù)據(jù)進(jìn)行數(shù)據(jù)壓縮。當(dāng)DSP數(shù)據(jù)處理速度跟不上采集數(shù)據(jù)速度時(shí),F(xiàn)IFO就會(huì)全滿,F(xiàn)PGA根據(jù)FIFOHF、FIFOE/F、FIFOPAFE相應(yīng)位狀態(tài)判斷到FIFO已全滿,于是向USB接口芯片單片機(jī)發(fā)出最高級(jí)中斷請(qǐng)求,通知系統(tǒng)數(shù)據(jù)己溢出,采集發(fā)生嚴(yán)重錯(cuò)誤。
          1.3 USB從接口電路
          USB從接口單元采用CYPRESS的CY7C68013芯片。如圖3所示,USB接口芯片CY7C68013由3.3V電源供電。PAO/INTO#選擇INTO工作方式,其中斷級(jí)別最高,當(dāng)FIFO全滿造成數(shù)據(jù)溢出導(dǎo)致數(shù)據(jù)采集發(fā)生嚴(yán)重錯(cuò)誤時(shí),該中斷請(qǐng)求發(fā)生,系統(tǒng)通知數(shù)據(jù)溢出錯(cuò)誤,并停止數(shù)據(jù)采集。RESET#為USB接口芯片復(fù)位輸入。


          USB的FDO~FDl5與DSP的I/O數(shù)據(jù)線相連,用于DSP與USB從FIFO通信,SLWR為寫控制時(shí)鐘。FLAGB、FLAGC用于輸出2,4,6,8相應(yīng)端點(diǎn)從FIFO的空滿狀態(tài),以便DSP寫USB從FIFO時(shí)獲取空滿狀態(tài)。
          FIFOADRO、FIFOADR1用于DSP尋址2,4,6,8相應(yīng)端點(diǎn)USB從FIFO,F(xiàn)IFOADRO及FIFOADR1功能真值表如表1所示。FIFOADRO、FIFOADR1的初值為00,對(duì)應(yīng)DSP寫端點(diǎn)2的從FIFO, FPGA對(duì)寫USB從FIFO的控制時(shí)鐘SLWR計(jì)數(shù),當(dāng)達(dá)到512次時(shí),表示端點(diǎn)2己寫滿,計(jì)數(shù)器清零,F(xiàn)IFOADRO和FIFOADR1的值自加一次變?yōu)?1,對(duì)應(yīng)DSP寫端點(diǎn)4的從FIFO。以此類推,DSP依次寫2,4,6,8端點(diǎn)數(shù)據(jù),當(dāng)FIFOADRO和FIFOADR1的值為11時(shí),再自加一次,F(xiàn)IFOADRO和FIFOADR1的值又變?yōu)?0,因此,DSP可循環(huán)寫2,4,6,8端點(diǎn)。需要說(shuō)明的是,當(dāng)DSP開(kāi)始寫一新端點(diǎn)的從FIFO之前,DSP要讀一次FLAGB、FLAGC標(biāo)志位,若該端點(diǎn)不空,則等待;若空,則進(jìn)行寫數(shù)據(jù)操作[3]。


          1.4 U盤讀寫單元
          此電路單元采用USB主控芯片CH375。CH375 是一USB總線的通用接口芯片,支持USB-HOST主機(jī)方式和USB-DEVICE/SLAVE設(shè)備方式。此系統(tǒng)中只采用USB的主功能,用來(lái)讀寫U盤[4]。
          CH375 芯片的RD#和WR#引腳分別連接DSP的讀選通輸出引腳和寫選通輸出引腳。CS#由地址譯碼電路驅(qū)動(dòng)。INT#輸出的中斷請(qǐng)求是低電平有效,可以連接到DSP的中斷輸入引腳。當(dāng)WR#為高電平并且CS#和RD#及A0都為低電平時(shí),CH375中的數(shù)據(jù)通過(guò)D7~D0 輸出;當(dāng)RD#為高電平并且CS#和WR#及A0都為低電平時(shí),D7~D0上的數(shù)據(jù)被寫入CH375芯片中;當(dāng)RD#為高電平并且CS#和WR#都為低電平而A0 為高電平時(shí),D7~D0上的數(shù)據(jù)被作為命令碼寫入CH375芯片中。CH375內(nèi)置了處理Mass-Storage 海量存儲(chǔ)設(shè)備的專用通訊協(xié)議的固件,DSP可以直接以扇區(qū)為基本單位讀寫常用的USB 存儲(chǔ)設(shè)備(包括USB硬盤/USB閃存盤/U 盤)。
          2 軟件設(shè)計(jì)
          本設(shè)計(jì)的軟件主要由兩大部分組成:USB芯片軟件及DSP通信軟件。其中,USB芯片軟件的設(shè)計(jì)是關(guān)鍵,它又包括固化程序、驅(qū)動(dòng)程序、PC機(jī)端應(yīng)用程序[5]以及DSP端通信接口程序。
          2.1 固化程序
          USB芯片的固化程序主要負(fù)責(zé):
          (1) 寄存器初始化工作,設(shè)置一些特殊功能寄存器的初值以實(shí)現(xiàn)所需的屬性或者功能;
          (2) 輔助硬件完成設(shè)備的枚舉過(guò)程,對(duì)主機(jī)的設(shè)備請(qǐng)求作出適當(dāng)?shù)捻憫?yīng);
          (3) 完成中斷處理、數(shù)據(jù)接收及發(fā)送以及對(duì)外圍電路的控制。
          2.2 驅(qū)動(dòng)程序
          開(kāi)發(fā)USB設(shè)備驅(qū)動(dòng)程序可采用Jungo公司的WinDriverv6.03,并以VC++6.0作為輔助開(kāi)發(fā)環(huán)境。利用WinDriver提供的開(kāi)發(fā)平臺(tái),用戶即可完成驅(qū)動(dòng)程序的設(shè)計(jì)工作,剩下的底層細(xì)節(jié)由WinDriver內(nèi)核統(tǒng)一處理,從而降低了對(duì)開(kāi)發(fā)者編程能力的要求,同時(shí)也大大縮短了開(kāi)發(fā)周期。下面對(duì)使用WinDriver開(kāi)發(fā)驅(qū)動(dòng)程序的步驟作一個(gè)簡(jiǎn)要說(shuō)明:
          (1) 啟動(dòng)WinDriver的DriverWizard工具;
          (2) 利用DriverWizard檢測(cè)硬件是否正常;
          (3) 在DriverWizard中選擇所使用的開(kāi)發(fā)環(huán)境,這里使用VC6.0開(kāi)發(fā)環(huán)境,并生成驅(qū)動(dòng)程序代碼;
          (4) 對(duì)生成的代碼進(jìn)行修改,使其符合系統(tǒng)的需要;
          (5) 在WinDriver環(huán)境的用戶模式下調(diào)試驅(qū)動(dòng)程序。
          2.3 PC端應(yīng)用程序
          USB主機(jī)應(yīng)用程序是計(jì)算機(jī)中完成特定功能的程序,其關(guān)鍵是實(shí)現(xiàn)從USB 外設(shè)讀取或發(fā)送特定數(shù)量的數(shù)據(jù)、USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求和特定的命令等。另外,可以對(duì)數(shù)據(jù)做進(jìn)一步的處理,如:存儲(chǔ)、顯示、快速傅立葉變換等。
          主機(jī)應(yīng)用程序的編寫使用VC編譯環(huán)境中的API函數(shù)實(shí)現(xiàn)。應(yīng)用程序的編程方法與串口編程類似。首先必須查找設(shè)備,調(diào)用WIN32函數(shù)CreateFilea( )打開(kāi)設(shè)備的句柄;然后調(diào)用WIN32函數(shù)DeviceIoControl( )就可以進(jìn)行數(shù)據(jù)讀寫和控制操作;最后關(guān)閉設(shè)備句柄。
          2.4 DSP端通信接口程序
          在本設(shè)計(jì)中,DSP處于主控地位,通過(guò)INT中斷決定什么時(shí)候接收USB送來(lái)的數(shù)據(jù),并把接收來(lái)的數(shù)據(jù)做簡(jiǎn)單的壓縮運(yùn)算,決定何時(shí)往USB發(fā)送這些數(shù)據(jù)。在讀數(shù)據(jù)時(shí),應(yīng)首先判斷FX2的FIFO2是否為空,如果不為空則將數(shù)據(jù)讀進(jìn)來(lái),一次讀進(jìn)一個(gè)16位數(shù)。在寫數(shù)據(jù)時(shí),首先判斷要寫的數(shù)據(jù)個(gè)數(shù)是否為512字節(jié)的整倍數(shù)。
          由于開(kāi)發(fā)此系統(tǒng)涉及到USB驅(qū)動(dòng)開(kāi)發(fā)以及應(yīng)用程序的設(shè)計(jì),比較繁瑣,嘗試?yán)肕ass Storage協(xié)議開(kāi)發(fā)虛擬設(shè)備,把數(shù)據(jù)采集卡當(dāng)作一個(gè)Windows的外圍設(shè)備,采用文件系統(tǒng)格式直接以文件形式存儲(chǔ)數(shù)據(jù)。這部分主要是修改CY7C68013的固件程序,如設(shè)備描述符、端點(diǎn)描述符,主機(jī)會(huì)把采集卡認(rèn)為是一Mass Storage設(shè)備,然后利用SCSI協(xié)議以及文件系統(tǒng)就可以直接存儲(chǔ)由DSP傳過(guò)來(lái)的數(shù)據(jù),這樣就省去了復(fù)雜的驅(qū)動(dòng)和應(yīng)用程序設(shè)計(jì)。
          本文介紹了基于USB2.0的16bit數(shù)據(jù)采集系統(tǒng),采用數(shù)據(jù)壓縮算法完成了數(shù)據(jù)量的壓縮以及高速數(shù)據(jù)傳輸[6]。由于USB的即插即用特性,彌補(bǔ)了傳統(tǒng)數(shù)據(jù)采集卡插拔困難的缺點(diǎn),相信隨著技術(shù)的進(jìn)步,USB技術(shù)必將得到更廣泛的應(yīng)用。

          參考文獻(xiàn)
          [1] 覃章健,黃洪全,葛良全.基于USB2.0的實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)研究.中國(guó)測(cè)試技術(shù),2005,31(5).
          [2] 美國(guó)美信公司. MAX-1189 DataSheet.pdf. 2004.1.
          [3] EZ-USB FX2 Manual technical reference. Cypress Semiconductor, 2002.1.
          [4] 南京沁恒電子有限公司.USB總線接口芯片CH375[DB/OL].http://www.winchiphead.com/product/ch375detail.htm,
          2005-05-10.
          [5] 鄧鵬飛,李小波,張劍云.USB2.0在DSP與計(jì)算機(jī)通信中的應(yīng)用[J].計(jì)算機(jī)數(shù)字與工程[J],2005,(6):99-103.
          [6] 曹軍軍,陳小勤.基于USB2.0的數(shù)據(jù)采集卡的設(shè)計(jì)與實(shí)現(xiàn)[J],儀器與儀表,2006,(1):37-38.
          [7] 陶峻,潘亞濤,陳健.基于DSP的USB傳輸系統(tǒng)的實(shí)現(xiàn)[J].電子技術(shù),2002,(3):56-59.



          關(guān)鍵詞: USB DSP FPGA

          評(píng)論


          相關(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); })();