設(shè)計(jì)基于LabVIEW的虛擬儀器系統(tǒng)
本文將介紹如何在LabVIEW下快速搭建基于MSP-060101的虛擬示波器和頻譜分析軟件。
一、硬件部分
本文中所用到的MSP-060101是一款16bit、500ksps的單通道USB數(shù)據(jù)采集卡。它具有接口簡(jiǎn)單、量程可選(±1V與±10V)、速度快、精度高、驅(qū)動(dòng)函數(shù)接口簡(jiǎn)單等優(yōu)點(diǎn),非常適合用來(lái)快速實(shí)現(xiàn)虛擬示波器和頻譜分析功能。
MSP-060101硬件連接非常簡(jiǎn)單,將采集卡插入PC的USB接口,按說(shuō)明安裝好驅(qū)動(dòng)程序,就可以進(jìn)行數(shù)據(jù)采集了,不需要外接電源和其他繁瑣的設(shè)備。MSP-060101前端接信號(hào)的端口只有兩個(gè),分別接到差分輸入信號(hào)的正端和負(fù)端即可,簡(jiǎn)單明了,一目了然。
二、底層函數(shù)
連接好硬件,接下來(lái)了解該卡驅(qū)動(dòng)函數(shù)的使用。該卡驅(qū)動(dòng)函數(shù)只有兩個(gè),封裝于MSP-16bitDAQCard.dll中,用戶可通過(guò)調(diào)用DLL的方式來(lái)執(zhí)行函數(shù)。函數(shù)定義如下:
int SetSampleRate (int SampleRate, int DeviceNumber)
int GetVoltage(float *DataArray, int ArraySize, float mult, float Offset, int DeviceNumber)
SetSampleRate 函數(shù)用來(lái)設(shè)置采集卡的采樣率。其參數(shù)為 SampleRate(采樣率,1K-500K范圍內(nèi)任意設(shè)置) 和 DeviceNumber(設(shè)備序號(hào),同時(shí)支持10塊采集卡)。
GetVoltage 函數(shù)用來(lái)采集電壓數(shù)據(jù)。其參數(shù)為DataArray(緩存數(shù)組)、ArraySize(緩存長(zhǎng)度)、mult(增益系數(shù))、Offset(偏移量)和DeviceNumber(設(shè)備序號(hào))。
這兩個(gè)函數(shù)都有返回值,如果函數(shù)執(zhí)行成功,則返回1,否則返回0。
在LabVIEW中,是通過(guò)Call Library Function Node來(lái)調(diào)用DLL函數(shù)的。為了便于使用,我們將調(diào)用DLL的代碼做成子VI函數(shù),子VI主要有兩個(gè),即采集數(shù)據(jù).VI 和 頻率設(shè)置.VI。其內(nèi)部程序框圖如下:
三、軟件編寫
編寫好子VI,接下來(lái)的工作就是按照LabVIEW的程序設(shè)計(jì)方法來(lái)設(shè)計(jì)應(yīng)用軟件。本文以基本的示波軟件為例,并結(jié)合頻譜分析,示范如何利用LABVIEW的高效控件來(lái)編寫測(cè)試軟件。
軟件的整體設(shè)計(jì)思路大致如下:軟件執(zhí)行為一個(gè)無(wú)限循環(huán),每次循環(huán)分為三個(gè)步驟,一是設(shè)置采集卡的采樣率,二是連續(xù)采集一段長(zhǎng)度的數(shù)據(jù),三是進(jìn)行數(shù)據(jù)分析。因此,程序的主體框架就是一個(gè)while循環(huán)內(nèi)嵌套一個(gè)順序結(jié)構(gòu)。
下面我們來(lái)看每次循環(huán)的第一個(gè)步驟,設(shè)置采樣率。采樣率的設(shè)置很簡(jiǎn)單,直接調(diào)用子VI即可。但為了讓程序運(yùn)行的穩(wěn)定,防止由于采集卡無(wú)響應(yīng)造成的程序死機(jī),同時(shí)也使軟件更人性化,在這里需要加入一個(gè)硬件檢查報(bào)錯(cuò)機(jī)制。其思路是調(diào)用設(shè)置采樣率的函數(shù),如果采集卡硬件沒有連好,或是硬件工作不正常,函數(shù)執(zhí)行不成功,將返回0,則通過(guò)判斷返回值是否為0,就可以判斷采集卡硬件是否出現(xiàn)問(wèn)題。如果出現(xiàn)問(wèn)題,則向用戶報(bào)錯(cuò),提示用戶檢查硬件,并停止程序,不再向下執(zhí)行。如果硬件正常,則繼續(xù)執(zhí)行數(shù)據(jù)采集程序。
接下來(lái)是第二個(gè)步驟,采集一定長(zhǎng)度的數(shù)據(jù)。這部分也較為簡(jiǎn)單,直接調(diào)用采集函數(shù)即可。數(shù)據(jù)采集的同時(shí)可以設(shè)置數(shù)據(jù)的增益系數(shù)和偏移量,以便獲得更好的波形效果,也可以用來(lái)進(jìn)行數(shù)據(jù)校準(zhǔn)。
對(duì)于一個(gè)數(shù)據(jù)采集軟件來(lái)講,重點(diǎn)在于第三個(gè)步驟,即數(shù)據(jù)的處理。本例中,目的是要顯示一個(gè)穩(wěn)定的波形,并對(duì)其頻譜做初步的分析。這里將用到一個(gè)比較重要的功能,即軟件的內(nèi)觸發(fā)。該功能是通過(guò)判斷波形在某一個(gè)特定電平(觸發(fā)電平)點(diǎn)上是上升還是下降(觸發(fā)極性)來(lái)決定后續(xù)顯示波形的起始點(diǎn)。經(jīng)過(guò)內(nèi)觸發(fā)后,每次采集得到的波形都將從相同的電壓點(diǎn),按相同的變化趨勢(shì)開始,因此對(duì)于周期變化的信號(hào)來(lái)說(shuō),波形就能較為穩(wěn)定的重復(fù)出現(xiàn),便于人們進(jìn)行觀察和分析。在本例中,內(nèi)觸發(fā)功能被做成了功能子VI,通過(guò)調(diào)用該VI就可以將波形進(jìn)行軟件觸發(fā)。
波形經(jīng)過(guò)觸發(fā)后,基本已經(jīng)有了一個(gè)較為穩(wěn)定的顯示效果。接下來(lái)需要給波形數(shù)據(jù)加入時(shí)間特性。其方法是根據(jù)采樣率算出采樣間隔時(shí)間Δt,并通過(guò)建立波形的控件將Δt賦給波形數(shù)據(jù)。
至此,我們已經(jīng)得到了一個(gè)較為完整的顯示波形,簡(jiǎn)單示波器的功能就已經(jīng)實(shí)現(xiàn)了。
想要給軟件加上頻譜分析的功能,在LabVIEW中也是很容易實(shí)現(xiàn)的。只需將我們前面得到的波形數(shù)據(jù)直接送入FFT函數(shù)中,就可以得到波形的頻域數(shù)據(jù)。但為了便于分析,我們希望能自動(dòng)從頻域中提取信號(hào)的主頻。其算法也很簡(jiǎn)單,就是由低到高依次掃描不同頻率的功率分布值,找到最大值后,根據(jù)最大值所在的位置序號(hào)來(lái)推算主頻。值得注意的是掃描時(shí)不能從頻率0點(diǎn)開始,不然0頻率可能對(duì)應(yīng)的是最大的功率分布,一般要把前幾個(gè)點(diǎn)排除在外。
評(píng)論