孫茂一 趙普俊 崔荃
摘 要: 基于LabWindows/CVI軟件開(kāi)發(fā)平臺(tái),利用USB4814數(shù)據(jù)采集卡設(shè)計(jì)了高精度并行數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)的特點(diǎn)是選用高采樣率高精度的14位A/D轉(zhuǎn)換芯片進(jìn)行A/D轉(zhuǎn)換電路設(shè)計(jì),并行采集卡每一路都應(yīng)用獨(dú)立的A/D轉(zhuǎn)換器。采用同步并行設(shè)計(jì),通道間串?dāng)_極小,無(wú)相位差,具有極高的測(cè)量精度和相位一致性。系統(tǒng)運(yùn)用USB 3.0傳輸接口技術(shù),發(fā)揮了USB 3.0接口的優(yōu)勢(shì),提高了數(shù)據(jù)傳輸速度,滿足了高數(shù)據(jù)吞吐量要求。對(duì)系統(tǒng)的設(shè)計(jì)可達(dá)到高性價(jià)比、多功能、低功耗等特點(diǎn)的數(shù)據(jù)采集的目的。
關(guān)鍵詞: 虛擬儀器; LabWindows/CVI; USB4814; 數(shù)據(jù)采集
中圖分類號(hào): TN911?34; TP29 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)05?0120?03
Design of high?speed parallel data acquisition system based on LabWindows/CVI
SUN Mao?yi, ZHAO Pu?jun, CUI Quan
(China National Institute of Measurement and Testing Technology, Chengdu 610021, China)
Abstract:A high?speed parallel data acquisition system was designed on LabWindows/CVI software development platform by using the USB4814 data acquisition card. As for the characteristic of this system, 14?bit A/D conversion chip with sampling rate and high accuracy was selected in A/D converter circuit design. An independent A/D converter is used in each channel of the parallel acquisition card. Since the synchronous parallel design is adopted, the crosstalk between the channels is very weak and there is no phase difference. It has a very high accuracy and consistency phase. The system uses USB3.0 transmission interface technology, and takes advantage of USB3.0 interface. It improved data transfer speed, and met the high data throughput requirement. The design of this system has characteristics of high performance?price ratio, multi?function and low?power consumption.
Keywords: virtual instrument; LabWindows/CVI; USB4814; data acquisition
0 引 言
隨著信息技術(shù)的迅速發(fā)展,數(shù)據(jù)采集和處理技術(shù)廣泛應(yīng)用于雷達(dá)、通信等領(lǐng)域。而在早期的計(jì)算機(jī)系統(tǒng)上通信必須使用串口或并口來(lái)發(fā)送數(shù)據(jù),每個(gè)接口都需要占用計(jì)算機(jī)很多資源,傳統(tǒng)的接口一般都用PCI總線或RS 232串行總線。PCI總線有較高的傳輸速率,可達(dá)132 Mb/s,也可以即插即用,但是其擴(kuò)充槽有限且插拔不方便;RS 232串行總線雖然連接比較方便,但是傳輸速率太慢,不易用于高速傳送數(shù)據(jù)以及傳送大量數(shù)據(jù)。USB(通用串行總線)集中了PCI和RS 232串行總線的優(yōu)點(diǎn),具有方便的即插即用和熱插拔特性以及較高的傳輸速率,因此,將USB技術(shù)應(yīng)用于數(shù)據(jù)采集是非常合適的,可以達(dá)到數(shù)據(jù)采集系統(tǒng)的高速率處理[1?2]。本文設(shè)計(jì)了一套基于USB 3.0的便攜式高精度數(shù)據(jù)采集系統(tǒng),相對(duì)于USB以前版本,USB 3.0最突出的優(yōu)點(diǎn)就是在數(shù)據(jù)傳輸率上有了很大的提高,在原來(lái)低速率1.5 Mb/s和全速的12 Mb/s兩種模式基礎(chǔ)上,USB 3.0極大地提高了帶寬——高達(dá)5 Gb/s全雙工[3]。同時(shí)本文介紹了用LabWindows/CVI開(kāi)發(fā)數(shù)據(jù)采集系統(tǒng)的方法和步驟。
1 硬件簡(jiǎn)介
該系統(tǒng)是基于USB 3.0的高速并行數(shù)據(jù)采集卡,有4個(gè)通道,單通道的采樣率最高可達(dá)100 MS/s。采集卡的硬件主要由阻抗匹配電路、A/D轉(zhuǎn)換電路、存儲(chǔ)電路、FPGA控制電路、USB接口電路組成。其中A/D轉(zhuǎn)換電路采用的是一款專門對(duì)高頻、寬動(dòng)態(tài)范圍信號(hào)進(jìn)行數(shù)字化處理的14位80 MS/s、低功率3 V A/D轉(zhuǎn)換器,用以完成極為苛刻的成像和通信應(yīng)用的要求。FPGA控制電路選用的是CycloneIII系列EP3C55F484C8芯片,該芯片具有成本低、功耗小的優(yōu)點(diǎn)。USB接口電路采用存儲(chǔ)器直接訪問(wèn)(DMA)技術(shù),它是一種高速的數(shù)據(jù)傳輸操作,允許在外部設(shè)備和存儲(chǔ)器之間直接讀寫(xiě)數(shù)據(jù),即不通過(guò)CPU,也不需要CPU干預(yù),整個(gè)數(shù)據(jù)傳輸操作在DMA控制器下進(jìn)行,CPU除了在數(shù)據(jù)傳輸開(kāi)始和結(jié)束時(shí)作一點(diǎn)處理外,在傳輸過(guò)程中CPU可以進(jìn)行其他的工作。這樣,在大部分時(shí)間里,CPU和輸入輸出都處在并行操作。因此,使整個(gè)計(jì)算機(jī)系統(tǒng)的效率大大提高,USB4814硬件原理如圖1所示。
2 軟件設(shè)計(jì)
該系統(tǒng)的應(yīng)用程序開(kāi)發(fā)選用了LabWindows/CVI,它是在Windows環(huán)境下面向計(jì)算機(jī)測(cè)控領(lǐng)域的虛擬儀器軟件開(kāi)發(fā)平臺(tái)。該程序以ANSI C為核心,將功能強(qiáng)大的C語(yǔ)言與測(cè)控專業(yè)工具有機(jī)地結(jié)合起來(lái),在編程過(guò)程中直接調(diào)用用戶界面函數(shù)和高級(jí)分析庫(kù)函數(shù),能方便地進(jìn)行頻譜分析、信號(hào)濾波、功率譜分析、微積分等數(shù)據(jù)處理功能[4?5]。
2.1 動(dòng)態(tài)鏈接庫(kù)
動(dòng)態(tài)鏈接庫(kù)(DLL)是微軟公司在微軟視窗操作系統(tǒng)(即Windows操作系統(tǒng))中實(shí)現(xiàn)共享函數(shù)庫(kù)概念的一種方式,是一種函數(shù)或資源庫(kù)。庫(kù)中的函數(shù)可以被應(yīng)用程序或其他DLL調(diào)用[6?7]。動(dòng)態(tài)鏈接庫(kù)提供了一種方法,使進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。
2.2 USB4814DLL.DLL函數(shù)簡(jiǎn)介
USB4814的庫(kù)文件包括USB4814DLL.DLL,USB4814DLL.LIB,USB4814DLL.H三個(gè)文件。通過(guò)調(diào)用動(dòng)態(tài)鏈接庫(kù)里的函數(shù)可以完成對(duì)USB4148卡的控制。下面是函數(shù)的部分程序代碼:
intUSB4814_VBSysInit(unsigned int*sn,double*BaseLine,double*GainTable); //USB4814初始化
unsigned int _stdcall USB4814_VBSetHardWare(unsignedintSampleIdx; //采樣率序號(hào)
unsigned int RangeIdx0;unsigned int RangeIdx1;unsigned int RangeIdx2;
unsigned int RangeIdx3;
unsigned int TrigMode;
unsigned int TrigEdge; //觸發(fā)邊沿
unsigned int TrigSource; //觸發(fā)源
unsigned int SampleLengthIdx; //采樣長(zhǎng)度
unsigned int TrigPreIdx;
//預(yù)觸發(fā);double TrigLevel;//觸發(fā)電平)
unsigned int USB4814_Acq(void); //啟動(dòng)采集
unsigned int USB4814_Idle(void); //暫停采集
unsigned int USB4814_Exit(void); //退出采集
unsigned int USB4814_PackData(int Dots,double *WaveData1,double *WaveData2) //讀取數(shù)據(jù)
2.3 函數(shù)編程步驟
函數(shù)編程步驟如圖2所示。
3 應(yīng)用程序設(shè)計(jì)
3.1 程序設(shè)計(jì)分析
按照軟件實(shí)現(xiàn)的功能, 把應(yīng)用程序需要處理的任務(wù)分為用戶界面控制、數(shù)據(jù)采集、數(shù)據(jù)顯示、數(shù)據(jù)分析和處理等[8]。軟件中以用戶界面為主線程,其他為次線程。數(shù)據(jù)采集系統(tǒng)主要完成的任務(wù)有實(shí)時(shí)采集波形,對(duì)輸入信號(hào)的波形進(jìn)行直觀的顯示,對(duì)幅值、頻率等進(jìn)行譜分析,完成對(duì)分析結(jié)果的存盤和調(diào)用[9?10]。用戶界面如圖3所示。
圖4為對(duì)某一信號(hào)的FFT頻譜分析。
3.2 部分源程序
部分源程序如下:
//USB4814卡初始化;
ackstatus=USB4814_Init(&pSysInfo.Idnumber,pSysInfo.BaseLine,pSysInfo.GainTable);
if(ackstatus){ MessagePopup("info","USB4814 initialization is successful!");
ackstatus=DEVICE_SUCCESSFULLY_OPENED; }
//設(shè)置采樣控制參數(shù);
void *callbackData, int eventData1, int eventData2)
{ switch (event)
{ case EVENT_COMMIT:SetCtrlStatus(DISABLE);
mFlag.RunStatus=1;
mFlag.flagread=0;
CreatFile_IFSave(); //如果存盤,創(chuàng)建存盤文件
PackSampleSettingParameter(); //獲取面板的參數(shù)設(shè)置
mFlag.mSampleDotsPerCh=HALFFIFOPERCH*mNINTTIMESAGROUP;SetAxisRange(panel_Handle,PANEL_WAVE,VAL_MANUAL,0,mFlag.mSampleDotsPerCh-1,VAL_MANUAL,myscale*(-1.0),myscale); if(ackstatus==DEVICE_SUCCESSFULLY_OPENED)
{USB4814_VBSetHardWare(pSysInfo.ClkMode,……)//設(shè)置采集參數(shù)USB4814_Acq();
//啟動(dòng)采集}SetCtrlVal(panel_Handle,PANEL_LED,1)
SetCursorMode(HIDE);
//創(chuàng)建一個(gè)新線程來(lái)處理波形數(shù)據(jù)
[CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_]HANDLE,DaqThreadFunction, NULL,&threadFunctionId1);[DaqThreadStatus=RUNING;][CmtSetCurrentThreadPriority(THREAD_]PRIORITY_HIGHEST);break;}return 0;
//數(shù)據(jù)采集線程
static int CVICALLBACK DaqThreadFunction (void *functionData)
……
{if(USB4814_PackFifoData(4096*mNINTTIMESAGROUP,iadcdata[0],iadcdata[1],iadcdata[2],iadcdata[3],iadcdata[4],iadcdata[5],iadcdata[6],iadcdata[7]))
……}
//釋放驅(qū)動(dòng)程序,退出軟件
{{……
CmtWaitForThreadPoolFunctionCompletion
(DEFAULT_THREAD_POOL_HANDLE,threadFunctionId1,
OPT_TP_PROCESS_EVENTS_WHILE_WAITING);
CmtReleaseThreadPoolFunctionID
(DEFAULT_THREAD_POOL_HANDLE,
threadFunctionId1);……;QuitUserInterface (0);
break;}
return 0;}
4 結(jié) 語(yǔ)
本文基于 LabWindows/ CVI這一軟件開(kāi)發(fā)平臺(tái),設(shè)計(jì)了一種高速并行USB4814數(shù)據(jù)采集系統(tǒng)。利用多線程、DLL技術(shù)極大地提高了系統(tǒng)性能,使采集系統(tǒng)具有實(shí)時(shí)性、可擴(kuò)展性等特點(diǎn)。經(jīng)過(guò)測(cè)試該系統(tǒng)可以實(shí)現(xiàn)并行數(shù)據(jù)采集,每通道最高采樣率達(dá)80 MS/s。并能實(shí)現(xiàn)1 MS/s連續(xù)采樣不丟數(shù)據(jù),完全符合設(shè)計(jì)要求。
參考文獻(xiàn)
[1] 劉君華,白鵬.虛擬儀器編程語(yǔ)言LabWindows/CVI教程[M].北京:電子工業(yè)出版社,2001.
[2] 王建新,楊世鳳,隋美麗.LabWindows/CVI測(cè)試技術(shù)及工程應(yīng)用[M].北京:化學(xué)工業(yè)出版社,2006.
[3] Compaq. Universal serial bus specification, revision 3. 0 [R]. USA: Compaq, 2004.
[4] Anon. CY7C68013data sheet [EB/OL]. [2014?08?04]. http:// www.alldatasheet.com/datas.
[5] National Instrument Corporation. LabWindows/CVI user manuel [M].USA: National Instrument Corporation, 2002.
[6] 李興.虛擬儀器的軟件開(kāi)發(fā)[J].原子能科學(xué)技術(shù),1999,33(2):125?128.
[7] 周永強(qiáng).虛擬儀器數(shù)據(jù)采集系統(tǒng)的研制[J].長(zhǎng)江科學(xué)院學(xué)報(bào),1999(2):43?46.
[8] 王志強(qiáng),孫書(shū)鷹,孫世宇.USB設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)技術(shù)研究[J].微計(jì)算機(jī)信息,2006(2):265?268.
[9] 師黎.虛擬儀器技術(shù)在實(shí)驗(yàn)室建設(shè)中的應(yīng)用研究[J].鄭州工業(yè)大學(xué)學(xué)報(bào),1999(2):98?99.
[10] 王蘭省.虛擬儀器系統(tǒng)開(kāi)放技術(shù)[J].測(cè)控技術(shù),1999(4):64?65.