<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FIFO的VXI總線(xiàn)并行A/D連續采集研究

基于FIFO的VXI總線(xiàn)并行A/D連續采集研究

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

1 引言

在工業(yè)領(lǐng)域的許多測試應用中,特別是產(chǎn)品研制的調試階段需要對一組信號進(jìn)行長(cháng)時(shí)間的記錄,以便在事后根據這組記錄的數據進(jìn)行分析,或者檢驗研制產(chǎn)品的時(shí)序是否正確。一些 A/D采集模塊,存儲容量較小,如果連續循環(huán)采集,在一次采集和下一次采集之間會(huì )丟失數據,測試過(guò)程中不能實(shí)現實(shí)時(shí)監控信號,也不能夠實(shí)現數據。針對上述問(wèn)題,本文在總線(xiàn)并行A/D模塊上,結合,提出了一種可以實(shí)現大量數據長(cháng)時(shí)間的方法。

2 總線(xiàn)8通道并行A/D模塊設計

VXI總線(xiàn)8通道并行A/D模塊是A16的C尺寸寄存器基模塊。在A(yíng)16寄存器基模塊中,其訪(fǎng)問(wèn)空間限制在64字節內,而且每次訪(fǎng)問(wèn)都必須對寄存器的狀態(tài)進(jìn)行讀取判斷,很難滿(mǎn)足高速、大容量的數據傳輸要求。因此在A(yíng)16空間里,實(shí)現高速、大容量的數據傳輸,是模塊設計的重點(diǎn)和難點(diǎn)。在該模塊的設計中,采用大容量芯片IDT7207作為內置緩沖器,采集數據先放在的RAM中。VXI總線(xiàn)可以將FIFO中數據以數據塊的形式進(jìn)行高速讀取,可以解決高速、大容量的數據傳輸。電路框圖如圖1所示。

圖1 電路框圖

數據采集時(shí),本地微控制器首先通過(guò)通訊寄存器接收VXI發(fā)送的狀態(tài)設置命令,如采樣頻率、采樣方式、采樣點(diǎn)數、程控增益,然后設置相應的寄存器后,啟動(dòng)A/D,檢測A/D狀態(tài),并將轉換值寫(xiě)入FIFO。AD轉換結束,設置相應的寄存器,計算機通過(guò)判斷此寄存器的狀態(tài),進(jìn)行FIFO數據的讀取。

以上的設計中,采用大容量FIFO芯片IDT7207作為內置緩沖器,以數據塊的形式進(jìn)行高速讀取,可以實(shí)現高速、大容量的數據傳輸。但是如果需要長(cháng)時(shí)間的連續數據采集,IDT7207的容量(32K)仍然不能滿(mǎn)足要求。一個(gè)長(cháng)時(shí)間的采集任務(wù)需要采用多次采集的方式,每次采集都需要發(fā)送啟動(dòng)命令,然后等到A/D轉換結束,最后將A/D轉換數據塊讀入計算機。在兩次采集之間要讀轉換結束的數據,還需重新發(fā)送啟動(dòng)命令,因此采集的數據是不連續的。

3 基于FIFO的連續采集實(shí)現原理

從上面的分析可以得出:要實(shí)現連續采集,就不能在兩次連續采集之間有間隔。因此一種方法是讓VXI模塊的A/D轉換和計算機的讀取A/D轉換數據并行進(jìn)行。當計算機啟動(dòng)AD轉換后,VXI模塊內的A/D控制器負責不停的往存儲器中寫(xiě)入轉換后的A/D數據,計算機異步讀出存儲器數據。先進(jìn)先出結構FIFO能滿(mǎn)足這種要求。IDT72××系列中的IDT7207是IDT公司生產(chǎn)的一種高速、低功耗CMOS型FIFO雙端口RAM, 它的存儲容量為32k×9bit.,存儲時(shí)間為12ns。該芯片內的雙端口RAM具有2套數據線(xiàn),分別實(shí)現數據寫(xiě)入和讀出功能,各自獨立的讀寫(xiě)指針?lè )謩e在讀、寫(xiě)時(shí)鐘的控制下順序地從RAM中讀、寫(xiě)數據。讀、寫(xiě)指針通過(guò)RAM的最后一個(gè)單元加1回到第一個(gè)RAM單元的方式實(shí)現循環(huán)。比較和控制部分提供數據空標志(/EF)和數據滿(mǎn)標志(/FF)來(lái)防止存儲器滿(mǎn)時(shí)再寫(xiě)入數據的溢出操作和存儲器空時(shí)的存儲器空讀操作。而半滿(mǎn)標志(/HF)可以用來(lái)防止數據丟失和提高數據傳送效率。其結構如下圖2所示。

圖2 FIFO芯片IDT7207結構圖

本文中要實(shí)現長(cháng)時(shí)間的連續數據采集而不丟失數據需要利用FIFO的這個(gè)半滿(mǎn)標志。當啟動(dòng)VXI模塊的A/D轉換后,計算機便監視FIFO的狀態(tài),看是否半滿(mǎn)。如果不是半滿(mǎn),不做操作;如果半滿(mǎn)便讀取FIFO中的一半數據。其過(guò)程見(jiàn)下圖3。

圖3 連續采集時(shí)FIFO的數據讀取

在模塊硬件電路的實(shí)現中,將FIFO的空標志、滿(mǎn)標志和半滿(mǎn)標志引入到VXI模塊的狀態(tài)寄存器中。從而可以通過(guò)讀地址為0X4的狀態(tài)寄存器的值來(lái)判斷FIFO的狀態(tài)。狀態(tài)寄存器的狀態(tài)字如下所示:

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

其中D15為GND;D14為MODID*;D13為FIFO的滿(mǎn)標志,低有效;D12為FIFO的半滿(mǎn)標志,低有效;D11為FIFO的空標志,低有效;D9為VXI命令寫(xiě)準備好標志,高有效;D8為VXI命令讀準備好標志,高有效;D3為READY;D2為PASSED;D0為DONE;D1,D4不確定。

4 連續采集應用程序軟件設計

為了實(shí)現連續采集計算機的應用程序需要定時(shí)查詢(xún)VXI模塊的狀態(tài)寄存器。Windows操作系統中提高了兩種級別的定時(shí)器:一般級別的定時(shí)器和高精度定時(shí)器。Sleep()和GetTickCount()是屬于一般級別的定時(shí)器,它們利用系統的“Tick”時(shí)間作為計時(shí)單元,定時(shí)精度為10ms。而本文設計VXI A/D采集模塊的最高采樣率為200kHZ, A/D采集模塊中的FIFO容量為32k,如果以高采樣頻率100kHZ八通道方式進(jìn)行采集,查詢(xún)定時(shí)間隔為10ms,采用Sleep()或者GetTickCount()定時(shí)時(shí)10ms誤差會(huì )使得每次定時(shí)內約有10/1000×100×1000×8=8k個(gè)點(diǎn)留在FIFO中。在采集過(guò)程中可能出現以下情形:第一個(gè)10ms定時(shí),如果定時(shí)精確則轉換8k個(gè)點(diǎn),由于誤差造成多轉換7999個(gè)點(diǎn),總共轉換16k-1個(gè)點(diǎn),FIFO還未半滿(mǎn);然后再定時(shí)10ms,如果情形和第一次類(lèi)似轉換16k-1個(gè)點(diǎn),兩次轉換后FIFO中總共存在32k-2個(gè)點(diǎn),此時(shí)開(kāi)始讀一半FIFO數據,那么由于在讀數據中模塊還要進(jìn)行A/D數據的轉換和存儲,會(huì )因為FIFO中數據未及時(shí)讀走造成FIFO滿(mǎn)而丟失數據。

Widows95以后的操作系統版本提供了QueryPerformanceCounter()函數和QueryPerformanceFrequency()函數,可以實(shí)現更高精度的定時(shí),并要求計算機從硬件上支持高精確計時(shí)器。在進(jìn)行定時(shí)之前,首先調用QueryPerformanceFrequency()函數獲得計算機內部時(shí)鐘計數器的時(shí)鐘頻率,然后在需要高精度定時(shí)的代碼兩端分別調用QueryPerformanceCounter()函數獲得時(shí)鐘計數器的計數值,利用兩次獲得的計數值之差及時(shí)鐘頻率,計算出定時(shí)的精確時(shí)間。其定時(shí)精度為計算機內部的時(shí)鐘頻率,可以達到微妙級。

因此在需要使用較高采樣率的場(chǎng)合中,須使用高精度定時(shí)。在實(shí)際的連續采集應用中,可以將連續采集放到專(zhuān)門(mén)的工作線(xiàn)程中,與UI線(xiàn)程序分開(kāi),避免UI線(xiàn)程以及其他線(xiàn)程的操作及消息傳遞影響連續采集工作線(xiàn)程。實(shí)現流程如下圖4。

圖4 實(shí)現流程

5 連續采集的應用

該方法已被應用于某裝備測控系統中,下圖5所示為采集完后,采集數據的回放情形。

圖5 采集數據回放

采樣數據放大后,如下圖6。

圖6數據放大

6 結束語(yǔ)

在很多的測試需求中,都需要長(cháng)時(shí)間的連續A/D采集和記錄。因此本文研制了帶FIFO的VXI總線(xiàn)A/D模塊,給出了采用該模塊實(shí)現長(cháng)時(shí)間大容量連續A/D的有效方法,此方法已經(jīng)成功應用到某裝備測控系統中。本文創(chuàng )新點(diǎn):1 研制帶FIFO的VXI總線(xiàn)A/D模塊。2 實(shí)現基于FIFO的VXI總線(xiàn)連續數據采集。

參考文獻:

[1] Integrated Device Technology Inc.IDT7207 Data Sheet.2001.5

[2] 張毅剛等.自動(dòng)測試系統.哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2001

[3] 龍姝穎等.一種基于CPLD的多通道數據采集系統的設計.微計算機信息,2006(07Z):203-204,136

[4] 李?lèi)?ài)華 王章瑞.高速FIFO存儲芯片IDT7207在虛擬邏輯分析儀設計中的應用.儀表技術(shù)與傳感器,2003(3):39-42



關(guān)鍵詞: VXI FIFO 連續采集

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>