新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于FIFO的VXI總線并行A/D連續(xù)采集研究

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

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

1 引言

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

2 總線8通道并行A/D模塊設(shè)計(jì)

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

圖1 電路框圖

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

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

3 基于FIFO的連續(xù)采集實(shí)現(xiàn)原理

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

圖2 FIFO芯片IDT7207結(jié)構(gòu)圖

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

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

在模塊硬件電路的實(shí)現(xiàn)中,將FIFO的空標(biāo)志、滿標(biāo)志和半滿標(biāo)志引入到VXI模塊的狀態(tài)寄存器中。從而可以通過讀地址為0X4的狀態(tà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的滿標(biāo)志,低有效;D12為FIFO的半滿標(biāo)志,低有效;D11為FIFO的空標(biāo)志,低有效;D9為VXI命令寫準(zhǔn)備好標(biāo)志,高有效;D8為VXI命令讀準(zhǔn)備好標(biāo)志,高有效;D3為READY;D2為PASSED;D0為DONE;D1,D4不確定。

4 連續(xù)采集應(yīng)用程序軟件設(shè)計(jì)

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

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

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

圖4 實(shí)現(xiàn)流程

5 連續(xù)采集的應(yīng)用

該方法已被應(yīng)用于某裝備測(cè)控系統(tǒng)中,下圖5所示為采集完后,采集數(shù)據(jù)的回放情形。

圖5 采集數(shù)據(jù)回放

采樣數(shù)據(jù)放大后,如下圖6。

圖6數(shù)據(jù)放大

6 結(jié)束語

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

參考文獻(xiàn):

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

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

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

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



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

評(píng)論


相關(guān)推薦

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

關(guān)閉