基于FIFO的VXI總線并行A/D連續(xù)采集研究
1 引言
在工業(yè)領(lǐng)域的許多測試應(yīng)用中,特別是產(chǎn)品研制的調(diào)試階段需要對一組信號進行長時間的連續(xù)采集記錄,以便在事后根據(jù)這組記錄的數(shù)據(jù)進行分析,或者檢驗研制產(chǎn)品的時序是否正確。一些VXI A/D采集模塊,存儲容量較小,如果連續(xù)循環(huán)采集,在一次采集和下一次采集之間會丟失數(shù)據(jù),測試過程中不能實現(xiàn)實時監(jiān)控信號,也不能夠?qū)崿F(xiàn)連續(xù)采集數(shù)據(jù)。針對上述問題,本文在VXI總線并行A/D模塊上,結(jié)合FIFO,提出了一種可以實現(xiàn)大量數(shù)據(jù)長時間連續(xù)采集的方法。
2 VXI總線8通道并行A/D模塊設(shè)計
VXI總線8通道并行A/D模塊是A16的C尺寸寄存器基模塊。在A16寄存器基模塊中,其訪問空間限制在64字節(jié)內(nèi),而且每次訪問都必須對寄存器的狀態(tài)進行讀取判斷,很難滿足高速、大容量的數(shù)據(jù)傳輸要求。因此在A16空間里,實現(xiàn)高速、大容量的數(shù)據(jù)傳輸,是模塊設(shè)計的重點和難點。在該模塊的設(shè)計中,采用大容量FIFO芯片IDT7207作為內(nèi)置緩沖器,采集數(shù)據(jù)先放在FIFO的RAM中。VXI總線可以將FIFO中數(shù)據(jù)以數(shù)據(jù)塊的形式進行高速讀取,可以解決高速、大容量的數(shù)據(jù)傳輸。電路框圖如圖1所示。
圖1 電路框圖
數(shù)據(jù)采集時,本地微控制器首先通過通訊寄存器接收VXI發(fā)送的狀態(tài)設(shè)置命令,如采樣頻率、采樣方式、采樣點數(shù)、程控增益,然后設(shè)置相應(yīng)的寄存器后,啟動A/D,檢測A/D狀態(tài),并將轉(zhuǎn)換值寫入FIFO。AD轉(zhuǎn)換結(jié)束,設(shè)置相應(yīng)的寄存器,計算機通過判斷此寄存器的狀態(tài),進行FIFO數(shù)據(jù)的讀取。
以上的設(shè)計中,采用大容量FIFO芯片IDT7207作為內(nèi)置緩沖器,以數(shù)據(jù)塊的形式進行高速讀取,可以實現(xiàn)高速、大容量的數(shù)據(jù)傳輸。但是如果需要長時間的連續(xù)數(shù)據(jù)采集,IDT7207的容量(32K)仍然不能滿足要求。一個長時間的采集任務(wù)需要采用多次采集的方式,每次采集都需要發(fā)送啟動命令,然后等到A/D轉(zhuǎn)換結(jié)束,最后將A/D轉(zhuǎn)換數(shù)據(jù)塊讀入計算機。在兩次采集之間要讀轉(zhuǎn)換結(jié)束的數(shù)據(jù),還需重新發(fā)送啟動命令,因此采集的數(shù)據(jù)是不連續(xù)的。
3 基于FIFO的連續(xù)采集實現(xiàn)原理
從上面的分析可以得出:要實現(xiàn)連續(xù)采集,就不能在兩次連續(xù)采集之間有間隔。因此一種方法是讓VXI模塊的A/D轉(zhuǎn)換和計算機的讀取A/D轉(zhuǎn)換數(shù)據(jù)并行進行。當計算機啟動AD轉(zhuǎn)換后,VXI模塊內(nèi)的A/D控制器負責不停的往存儲器中寫入轉(zhuǎn)換后的A/D數(shù)據(jù),計算機異步讀出存儲器數(shù)據(jù)。先進先出結(jié)構(gòu)FIFO能滿足這種要求。IDT72××系列中的IDT7207是IDT公司生產(chǎn)的一種高速、低功耗CMOS型FIFO雙端口RAM, 它的存儲容量為32k×9bit.,存儲時間為12ns。該芯片內(nèi)的雙端口RAM具有2套數(shù)據(jù)線,分別實現(xiàn)數(shù)據(jù)寫入和讀出功能,各自獨立的讀寫指針分別在讀、寫時鐘的控制下順序地從RAM中讀、寫數(shù)據(jù)。讀、寫指針通過RAM的最后一個單元加1回到第一個RAM單元的方式實現(xiàn)循環(huán)。比較和控制部分提供數(shù)據(jù)空標志(/EF)和數(shù)據(jù)滿標志(/FF)來防止存儲器滿時再寫入數(shù)據(jù)的溢出操作和存儲器空時的存儲器空讀操作。而半滿標志(/HF)可以用來防止數(shù)據(jù)丟失和提高數(shù)據(jù)傳送效率。其結(jié)構(gòu)如下圖2所示。
圖2 FIFO芯片IDT7207結(jié)構(gòu)圖
本文中要實現(xiàn)長時間的連續(xù)數(shù)據(jù)采集而不丟失數(shù)據(jù)需要利用FIFO的這個半滿標志。當啟動VXI模塊的A/D轉(zhuǎn)換后,計算機便監(jiān)視FIFO的狀態(tài),看是否半滿。如果不是半滿,不做操作;如果半滿便讀取FIFO中的一半數(shù)據(jù)。其過程見下圖3。
圖3 連續(xù)采集時FIFO的數(shù)據(jù)讀取
在模塊硬件電路的實現(xiàn)中,將FIFO的空標志、滿標志和半滿標志引入到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的滿標志,低有效;D12為FIFO的半滿標志,低有效;D11為FIFO的空標志,低有效;D9為VXI命令寫準備好標志,高有效;D8為VXI命令讀準備好標志,高有效;D3為READY;D2為PASSED;D0為DONE;D1,D4不確定。
4 連續(xù)采集應(yīng)用程序軟件設(shè)計
為了實現(xiàn)連續(xù)采集計算機的應(yīng)用程序需要定時查詢VXI模塊的狀態(tài)寄存器。Windows操作系統(tǒng)中提高了兩種級別的定時器:一般級別的定時器和高精度定時器。Sleep()和GetTickCount()是屬于一般級別的定時器,它們利用系統(tǒng)的“Tick”時間作為計時單元,定時精度為10ms。而本文設(shè)計VXI A/D采集模塊的最高采樣率為200kHZ, A/D采集模塊中的FIFO容量為32k,如果以高采樣頻率100kHZ八通道方式進行采集,查詢定時間隔為10ms,采用Sleep()或者GetTickCount()定時時10ms誤差會使得每次定時內(nèi)約有10/1000×100×1000×8=8k個點留在FIFO中。在采集過程中可能出現(xiàn)以下情形:第一個10ms定時,如果定時精確則轉(zhuǎn)換8k個點,由于誤差造成多轉(zhuǎn)換7999個點,總共轉(zhuǎn)換16k-1個點,F(xiàn)IFO還未半滿;然后再定時10ms,如果情形和第一次類似轉(zhuǎn)換16k-1個點,兩次轉(zhuǎn)換后FIFO中總共存在32k-2個點,此時開始讀一半FIFO數(shù)據(jù),那么由于在讀數(shù)據(jù)中模塊還要進行A/D數(shù)據(jù)的轉(zhuǎn)換和存儲,會因為FIFO中數(shù)據(jù)未及時讀走造成FIFO滿而丟失數(shù)據(jù)。
Widows95以后的操作系統(tǒng)版本提供了QueryPerformanceCounter()函數(shù)和QueryPerformanceFrequency()函數(shù),可以實現(xiàn)更高精度的定時,并要求計算機從硬件上支持高精確計時器。在進行定時之前,首先調(diào)用QueryPerformanceFrequency()函數(shù)獲得計算機內(nèi)部時鐘計數(shù)器的時鐘頻率,然后在需要高精度定時的代碼兩端分別調(diào)用QueryPerformanceCounter()函數(shù)獲得時鐘計數(shù)器的計數(shù)值,利用兩次獲得的計數(shù)值之差及時鐘頻率,計算出定時的精確時間。其定時精度為計算機內(nèi)部的時鐘頻率,可以達到微妙級。
因此在需要使用較高采樣率的場合中,須使用高精度定時。在實際的連續(xù)采集應(yīng)用中,可以將連續(xù)采集放到專門的工作線程中,與UI線程序分開,避免UI線程以及其他線程的操作及消息傳遞影響連續(xù)采集工作線程。實現(xiàn)流程如下圖4。
圖4 實現(xiàn)流程
5 連續(xù)采集的應(yīng)用
該方法已被應(yīng)用于某裝備測控系統(tǒng)中,下圖5所示為采集完后,采集數(shù)據(jù)的回放情形。
圖5 采集數(shù)據(jù)回放
采樣數(shù)據(jù)放大后,如下圖6。
圖6數(shù)據(jù)放大
6 結(jié)束語
在很多的測試需求中,都需要長時間的連續(xù)A/D采集和記錄。因此本文研制了帶FIFO的VXI總線A/D模塊,給出了采用該模塊實現(xiàn)長時間大容量連續(xù)A/D的有效方法,此方法已經(jīng)成功應(yīng)用到某裝備測控系統(tǒng)中。本文創(chuàng)新點:1 研制帶FIFO的VXI總線A/D模塊。2 實現(xiàn)基于FIFO的VXI總線連續(xù)數(shù)據(jù)采集。
參考文獻:
[1] Integrated Device Technology Inc.IDT7207 Data Sheet.2001.5
[2] 張毅剛等.自動測試系統(tǒng).哈爾濱:哈爾濱工業(yè)大學出版社,2001
[3] 龍姝穎等.一種基于CPLD的多通道數(shù)據(jù)采集系統(tǒng)的設(shè)計.微計算機信息,2006(07Z):203-204,136
[4] 李愛華 王章瑞.高速FIFO存儲芯片IDT7207在虛擬邏輯分析儀設(shè)計中的應(yīng)用.儀表技術(shù)與傳感器,2003(3):39-42
評論