摘 要: 介紹了一種新型便攜式數(shù)據(jù)采集檢測(cè)系統(tǒng),該系統(tǒng)的數(shù)據(jù)采集設(shè)備采用USB接口傳輸數(shù)據(jù),基于Lab Windows CVI的簡(jiǎn)易虛擬示波器能顯示數(shù)據(jù)和控制數(shù)據(jù)采集設(shè)備。重點(diǎn)闡述了系統(tǒng)軟件實(shí)現(xiàn)的技術(shù)細(xì)節(jié)。測(cè)試結(jié)果表明,該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單、可靠性高、應(yīng)用靈活、易于擴(kuò)展,具有廣泛的應(yīng)用前景。
關(guān)鍵詞: 通用串行總線;虛擬示波器;Lab Windows CVI;MAX1247;PDIUSBD12
數(shù)據(jù)采集檢測(cè)系統(tǒng)早已廣泛應(yīng)用于工業(yè)生產(chǎn)及信息監(jiān)測(cè)等領(lǐng)域。目前市面上的產(chǎn)品都存在這樣或那樣的不足,如體積龐大不利于攜帶,價(jià)格昂貴難以推廣,采用RS-232接口傳輸速率低,安裝在計(jì)算機(jī)內(nèi)部受計(jì)算機(jī)插槽數(shù)量、地址、中斷資源的限制,不利于操作。本數(shù)據(jù)采集檢測(cè)系統(tǒng)采用USB接口傳輸數(shù)據(jù),具有較高的傳輸速率,且可靠性高,數(shù)據(jù)不易丟失,抗干擾性強(qiáng);采用基于PC的虛擬示波器檢測(cè)采樣對(duì)象,進(jìn)行數(shù)據(jù)顯示、分析處理,很好地解決了上述問題。
1 系統(tǒng)總體設(shè)計(jì)方案
數(shù)據(jù)采集檢測(cè)系統(tǒng)的總體結(jié)構(gòu)如圖1所示。
USB設(shè)備芯片PDIUSBD12是NXP公司在USB1.1協(xié)議設(shè)備端使用最多、技術(shù)最成熟的芯片之一,片內(nèi)集成了高性能的串行接口引擎和3個(gè)端點(diǎn)的FIFO緩沖區(qū),其中端點(diǎn)2具有64 B的雙緩沖區(qū),適合數(shù)據(jù)傳輸量較大的場(chǎng)合應(yīng)用。PDIUSBD12與NXP公司的8位MCU P89C58x2FN實(shí)現(xiàn)數(shù)據(jù)交換簡(jiǎn)單可靠。MAXIM公司的12位4通道A/D轉(zhuǎn)換器MAX1247,有較快的轉(zhuǎn)換速率(7.5 μs),在軟件控制下能實(shí)現(xiàn)對(duì)正負(fù)電壓信號(hào)量的讀取。
本系統(tǒng)主要由基于PC(USB Host)的虛擬示波器和數(shù)據(jù)采集設(shè)備(USB Device)兩部分組成。A/D轉(zhuǎn)換器MAX1247可最多連接4路模擬電壓信號(hào)量,轉(zhuǎn)換為數(shù)字量后通過其片上SPI接口傳輸給主控制器P89C59x2FN。主控制器將采集的數(shù)據(jù)包傳輸給USB接口芯片PDIUSBD12,數(shù)據(jù)將按照USB協(xié)議被傳輸給USB主機(jī)(PC),通過USB設(shè)備驅(qū)動(dòng),動(dòng)態(tài)鏈接庫,數(shù)據(jù)最后在虛擬示波器中顯示并進(jìn)行相關(guān)的處理。數(shù)據(jù)采集設(shè)備通過USB電纜線連接到PC后即上電,它將以初始采樣頻率采集數(shù)據(jù),并傳輸?shù)教摂M示波器中。
2 系統(tǒng)軟件的設(shè)計(jì)
2.1 虛擬示波器軟件設(shè)計(jì)
虛擬示波器使用Lab Windows CVI 8.0開發(fā),運(yùn)行界面如圖2所示。
虛擬示波器的主要功能是顯示數(shù)據(jù),進(jìn)行數(shù)據(jù)處理,發(fā)出命令,設(shè)置數(shù)據(jù)采集設(shè)備的工作狀態(tài)。數(shù)據(jù)的讀取由封裝在動(dòng)態(tài)鏈接庫中的讀端點(diǎn)2函數(shù)(unsigned long_stdcall ReadPort2(unsigned char*pData,unsigned long iLen))實(shí)現(xiàn),讀取的數(shù)據(jù)被存放到顯示數(shù)組(static double measureData[BUFFER_SIZE])中。為了保持顯示數(shù)據(jù)的波形是連續(xù)的、緩和的,顯示數(shù)組的容量(512 B)8倍于讀端點(diǎn)2數(shù)據(jù)包的容量(64 B),在每次將讀取的數(shù)據(jù)存放到顯示數(shù)組的首部前,要將顯示數(shù)組的數(shù)據(jù)向尾部移動(dòng)64 B,其過程如圖3所示。數(shù)據(jù)經(jīng)坐標(biāo)化處理后,通過Lab Windows CVI控件函數(shù)即可顯示。顯示原則是先接收到的數(shù)據(jù)先顯示。
從虛擬示波器發(fā)出的控制指令通過寫端點(diǎn)2函數(shù)(unsigned long_stdcall WritePort2(unsigned char*pData, unsigned long iLen))傳輸給數(shù)據(jù)采集設(shè)備。修改數(shù)據(jù)采集設(shè)備的采樣頻率時(shí),實(shí)際傳輸給數(shù)據(jù)采集設(shè)備的是定時(shí)器T1的中斷計(jì)數(shù)初值,該初值是在虛擬示波器中由采樣頻率值計(jì)算得出。這種處理可以節(jié)省單片機(jī)處理時(shí)間。
A/D芯片MAX1247的精度為12位,數(shù)據(jù)采集設(shè)備以單字節(jié)方式將數(shù)據(jù)傳輸?shù)教摂M示波器中,數(shù)據(jù)包中相鄰兩字節(jié)為一個(gè)有效的樣點(diǎn)。而數(shù)據(jù)在虛擬示波器中以有效樣點(diǎn)為處理單元。在軟件上使用聯(lián)合體變量實(shí)現(xiàn)兩個(gè)單字節(jié)數(shù)據(jù)到雙字節(jié)數(shù)據(jù)的轉(zhuǎn)換。定義的聯(lián)合體adata包括兩個(gè)成員,其中char類型的成員PortBuf[64]接收數(shù)據(jù)包,與其同首地址的short int類型成員PortBuf2[32]用于虛擬示波器中對(duì)采樣數(shù)據(jù)的處理,這樣處理效率高。
2.2 USB設(shè)備驅(qū)動(dòng)和動(dòng)態(tài)連接庫
USB設(shè)備驅(qū)動(dòng)程序D12TEST.SYS是用Win DDK 開發(fā)的,EasyD12.dll動(dòng)態(tài)連接庫是用VC++開發(fā)的,D12TEST.SYS和EasyD12.dll是連接虛擬示波器和USB數(shù)據(jù)采集設(shè)備的橋梁。D12TEST.SYS把虛擬示波器發(fā)出的讀/寫命令變成規(guī)范的USB請(qǐng)求包傳給USB數(shù)據(jù)采集設(shè)備。EasyD12.dll中封裝了PDIUSBD12的端點(diǎn)2的讀/寫函數(shù),通過這兩個(gè)函數(shù)實(shí)現(xiàn)從虛擬示波器到數(shù)據(jù)采集設(shè)備的端到端數(shù)據(jù)交換。
2.3 數(shù)據(jù)采集設(shè)備軟件設(shè)計(jì)
數(shù)據(jù)采集設(shè)備軟件使用Keil C51開發(fā),軟件結(jié)構(gòu)采用前后臺(tái)系統(tǒng),后臺(tái)程序流程如圖4所示,它是一個(gè)無限循環(huán),循環(huán)中不斷檢測(cè)USB的連接狀態(tài)。如果連接正常,就檢測(cè)數(shù)據(jù)發(fā)送允許位是否有效,如有效,將數(shù)據(jù)傳送到PDIUSBD12的端點(diǎn)2的FIFO緩沖區(qū)中。
前臺(tái)程序由中斷服務(wù)程序組成,主要包括兩個(gè)部分:(1)基于PDIUSBD12的USB協(xié)議相關(guān)的中斷服務(wù)程序,中斷源是P89C58x2FN的外部中斷INT0。由PIDUSBD12主動(dòng)發(fā)起的任何與P89C58x2FN的信息交換都是通過外部中斷INT0來實(shí)現(xiàn)。單片機(jī)讀取PDIUSBD12的中斷寄存器后,執(zhí)行相應(yīng)的中斷服務(wù)子程序。(2)數(shù)據(jù)采集的中斷服務(wù)程序。數(shù)據(jù)采集中斷服務(wù)程序流程如圖5所示,數(shù)據(jù)采集使用定時(shí)器T1實(shí)現(xiàn)定時(shí)中斷采樣,每中斷一次采集一次樣點(diǎn)。進(jìn)入中斷服務(wù)程序就對(duì)定時(shí)器T1的計(jì)數(shù)初值進(jìn)行處理,這樣由采樣頻值計(jì)算計(jì)數(shù)初值時(shí),就不用加入修正值。否則,單片機(jī)執(zhí)行中斷服務(wù)程序的耗時(shí)在計(jì)算計(jì)數(shù)初值時(shí)是不能忽略的。在主程序中A/D初始化時(shí)完成了寫A/D控制字,在中斷服務(wù)程序中,先讀取A/D轉(zhuǎn)換結(jié)果,然后再寫A/D控制字,啟動(dòng)A/D轉(zhuǎn)換,這樣處理使A/D在輸出結(jié)果前有充足的時(shí)間來完成模擬量到數(shù)字量的轉(zhuǎn)換。
2.4 A/D采樣轉(zhuǎn)換程序設(shè)計(jì)
A/D采用具有片上SPI接口的MAX1247芯片, P89C58x2FN片上沒有SPI接口,在A/D采樣轉(zhuǎn)換程序設(shè)計(jì)中,采用軟件模擬SPI主機(jī)模式。MAX1247的外部時(shí)鐘模式轉(zhuǎn)換時(shí)序如圖6所示。A/D轉(zhuǎn)換控制原理是,在每個(gè)外部時(shí)鐘脈沖的上升沿,將控制字的一位寫入MAX1247,寫入控制字(一個(gè)字節(jié))后轉(zhuǎn)換啟動(dòng),在每個(gè)外部時(shí)鐘脈沖的下降沿,將一位的轉(zhuǎn)換結(jié)果從MAX1247中讀出。這樣寫入一個(gè)控制字需要8個(gè)外部時(shí)鐘脈沖,讀出一個(gè)轉(zhuǎn)換結(jié)果需要16個(gè)時(shí)鐘脈沖,其中前12個(gè)時(shí)鐘脈沖讀出有效的轉(zhuǎn)換結(jié)果。
對(duì)A/D的控制頻繁地使用了位操作,采用匯編語言編程具有明顯的效率優(yōu)勢(shì)。寫控制字和讀采樣轉(zhuǎn)換結(jié)果程序流程如圖7所示,數(shù)據(jù)采集設(shè)備的主程序采用C語言編寫,在C語言中調(diào)用匯編語言子程序?qū)崿F(xiàn)主控制器對(duì)A/D的控制。
寫控制字和讀采樣轉(zhuǎn)換結(jié)果分屬兩個(gè)不同的匯編子程序模塊,C語言程序調(diào)用匯編子程序模塊,需要在匯編模塊前做PUBLIC聲明,使用偽指令使CODE選項(xiàng)有效,并聲明為可再定位段類型,再選擇為當(dāng)前段,函數(shù)名大。然后在C主程序中對(duì)函數(shù)進(jìn)行外部聲明,就可以像調(diào)用普通的extern函數(shù)一樣調(diào)用匯編語言子程序模塊。
3 數(shù)據(jù)采集檢測(cè)系統(tǒng)的測(cè)試
香農(nóng)采樣定理規(guī)定采樣頻率必須是信號(hào)頻率的2倍以上,才能完整保留原始信號(hào)的信息。對(duì)于復(fù)雜的規(guī)律性強(qiáng)的信號(hào),只有采樣頻率遠(yuǎn)高于信號(hào)頻率時(shí),信號(hào)才能在虛擬示波器中連續(xù)、穩(wěn)定地顯示,并得到有效、可靠的檢測(cè)結(jié)果。如圖8所示是采樣頻率為1 000 Hz、正弦波信號(hào)頻率為10 Hz的顯示效果。
在本數(shù)據(jù)采集檢測(cè)系統(tǒng)中,嵌入各種算法軟件模塊,可以很方便地對(duì)該數(shù)據(jù)進(jìn)行相關(guān)的測(cè)試與分析。
將位置式PID算法和增量式PID算法的軟件代碼嵌入到虛擬示波器中,測(cè)試結(jié)果如圖9和圖10所示。為了達(dá)到良好的測(cè)試視覺效果,這兩種算法的相關(guān)參數(shù)設(shè)置不同。
通過理論計(jì)算,數(shù)據(jù)采集設(shè)備的最高采樣頻率約為13 kHz。經(jīng)過測(cè)試,數(shù)據(jù)采集設(shè)備采集電壓信號(hào)量的頻率在500 Hz以下,規(guī)律性、復(fù)雜性強(qiáng)的電壓信號(hào)量的數(shù)據(jù)波形能夠在虛擬示波器中連續(xù)地、穩(wěn)定地顯示出來,數(shù)據(jù)經(jīng)計(jì)算處理后能達(dá)到很好的檢測(cè)效果。電壓信號(hào)量頻率過高,則虛擬示波器檢測(cè)的數(shù)據(jù)波形穩(wěn)定性差,檢測(cè)效果難以保證。
本數(shù)據(jù)采集檢測(cè)系統(tǒng)可以方便、簡(jiǎn)單地應(yīng)用于被控對(duì)象頻率不高的采集檢測(cè)領(lǐng)域,并且采樣實(shí)時(shí)性好、顯示穩(wěn)定、容易嵌入各種數(shù)據(jù)分析算法。與其他數(shù)據(jù)采集檢測(cè)系統(tǒng)相比,有體積小、使用方便、即插即拔、采用USB總線供電等優(yōu)點(diǎn)。本數(shù)據(jù)采集檢測(cè)系統(tǒng)在信號(hào)測(cè)試和系統(tǒng)監(jiān)測(cè)等瞬態(tài)信號(hào)的實(shí)時(shí)采集檢測(cè)場(chǎng)合有廣泛的應(yīng)用前景。
參考文獻(xiàn)
[1] 周立功.PDIUSBD12 USB固件編程與驅(qū)動(dòng)開發(fā)[M].北京:北京航空航天大學(xué)出版社,2003.
[2] 馬偉.計(jì)算機(jī)USB系統(tǒng)原理及其主/從機(jī)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2004.
[3] 高美珍,洪家平.基于USB接口和嵌入式芯片總線的數(shù)據(jù)采集系統(tǒng)[J].儀表技術(shù)與傳感器,2005(8):51-53.
[4] 邢微,劉開華.數(shù)據(jù)采集系統(tǒng)USB2.0接口設(shè)計(jì)[J].電子測(cè)量技術(shù),2006,29(1):12-13.
[5] 熊健民,胡長(zhǎng)暉,宋庭新.USB數(shù)據(jù)采集卡的研制[J].湖北工業(yè)大學(xué)學(xué)報(bào),2007,22(3):6-9.
[6] 姜偉,鄭青,季行健,等.嵌入式USB數(shù)據(jù)采集系統(tǒng)[J].儀表技術(shù)與傳感器,2008(2):45-46.