• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于USBee DX數(shù)據(jù)采樣和LabVIEW編程的虛擬示波器

      2016-08-04 01:52:57胡險峰
      物理實(shí)驗(yàn) 2016年7期
      關(guān)鍵詞:數(shù)據(jù)采集

      胡險峰

      (四川大學(xué) 物理科學(xué)與技術(shù)學(xué)院,四川 成都 610064)

      ?

      基于USBee DX數(shù)據(jù)采樣和LabVIEW編程的虛擬示波器

      胡險峰

      (四川大學(xué) 物理科學(xué)與技術(shù)學(xué)院,四川 成都 610064)

      摘要:介紹了用LabVIEW軟件對USBee DX數(shù)據(jù)采集器編程的方法,LabVIEW通過執(zhí)行系統(tǒng)命令模塊調(diào)用C可執(zhí)行程序,實(shí)現(xiàn)USBee DX的控制和采集數(shù)據(jù)與LabVIEW程序間傳遞,實(shí)現(xiàn)用計算機(jī)模擬虛擬雙蹤示波器.

      關(guān)鍵詞:數(shù)據(jù)采集;虛擬示波器;LabVIEW;USBee DX

      利用數(shù)據(jù)采集卡或聲卡,編制程序在微機(jī)上模擬示波器[1-7],可用于各種物理實(shí)驗(yàn). 廉價的數(shù)據(jù)采集卡或聲卡,由于數(shù)據(jù)采集速度較低,虛擬的示波器帶寬小,不能滿足信號頻率較高的場合. USBee DX數(shù)據(jù)采集器使用USB接口,采樣速率可達(dá)24 MB/s,價格便宜,有多個數(shù)字模入和模出通道,主要用于虛擬邏輯分析器;還有2個獨(dú)立的8位AD模入通道可用于虛擬示波器. 用USBee DX數(shù)據(jù)采集器使用手冊[8]介紹的API函數(shù)編寫LabVIEW庫函數(shù)節(jié)點(diǎn)調(diào)用不成功,則利用USBee DX數(shù)據(jù)采集器安裝程序提供的工具創(chuàng)建器的C原程序,修改創(chuàng)建兩通道AD變換可執(zhí)行程序,通過LabVIEW執(zhí)行系統(tǒng)命令模塊調(diào)用該可執(zhí)行程序,將USBee DX采集到的數(shù)據(jù)通過執(zhí)行系統(tǒng)命令模塊的標(biāo)準(zhǔn)輸出傳遞到LabVIEW程序中. 用For循環(huán)、字符截取模塊和字符數(shù)據(jù)轉(zhuǎn)換模塊重新組織數(shù)據(jù)隊列,再從數(shù)據(jù)隊列中拆分出數(shù)字通道信號和2個AD模入通道信號. 利用LabVIEW編程進(jìn)行后續(xù)的信號處理做成虛擬示波器.

      1兩通道AD變換可執(zhí)行程序

      USBee DX數(shù)據(jù)采集器安裝程序提供的工具創(chuàng)建器的C原程序[8],包含初始化功能、基本I/O功能、邏輯分析器及示波器和信號發(fā)生器等幾個程序段,刪除其中基本I/O功能和信號發(fā)生器等幾段,保留初始化功能和邏輯分析器及示波器兩段. USBee DX的采樣速率隨應(yīng)用程序的運(yùn)行環(huán)境需要做相應(yīng)調(diào)整,不然采樣速率過高采樣會失敗,需要自動回調(diào)過高的采樣速率. 添加采樣速率自動調(diào)整,以及與LabVIEW程序通過讀寫文本文件交換采樣通道、采樣速率、采樣長度、數(shù)據(jù)傳遞長度、數(shù)據(jù)傳遞間隔和3個觸發(fā)控制數(shù)據(jù)的程序段,編譯后生成可執(zhí)行程序供LabVIEW通過執(zhí)行系統(tǒng)命令模塊調(diào)用. 修改后的原程序如下,其中斜體部分為添加或修改的語句.

      #include “stdio.h”

      #include “conio.h”

      #include “windows.h”

      #define CWAV_API __stdcall

      #define CWAV_IMPORT __declspec(dllimport)

      CWAV_IMPORT unsigned long * CWAV_API MakeBuffer(unsigned long Size);

      CWAV_IMPORT int CWAV_API DeleteBuffer(unsigned long *buffer);

      CWAV_IMPORT int CWAV_API EnumerateDXPods(unsigned int *Pods);

      CWAV_IMPORT int CWAV_API InitializeDXPod(unsigned int PodNumber);

      CWAV_IMPORT int CWAV_API StartCapture(unsigned int Channels, unsigned int Slope, unsigned int AnalogChannel, unsigned int Level,unsigned int SampleRate, unsigned int ClockMode, unsigned long *Triggers, signed int TriggerNumber, unsigned long *buffer, unsigned long length, unsigned long poststore);

      CWAV_IMPORT int CWAV_API CaptureStatus(char *breaks, char *running, char *triggered, long *start, long *end, long *trigger, char *full);

      CWAV_IMPORT int CWAV_API StopCapture(void);

      int main()

      {unsigned int PodNumber, PodID[10], NumberOfPods;

      int ReturnVal;

      NumberOfPods = EnumerateDXPods(PodID);

      if (NumberOfPods == 0) {

      printf(“No USBee DX Pods found ”);

      return 0;

      }

      PodNumber = PodID[0];

      ReturnVal = InitializeDXPod(PodNumber);

      if (ReturnVal != 1) {

      printf(“Failure Initializing the Pod ”);

      return 0;

      }

      unsignedlongx,y,z;

      unsignedlonglabview[8];

      FILE*fp;

      fp=fopen(“C:\ProgramFiles\USBeeDxLabViewOSC\data\labview.txt”,“r+”);

      y=8

      for(x= 0;x

      {fscanf(fp, “%d”, &labview[x]);

      }

      long Channels =labview[0];

      unsigned char Slope =labview[1];

      unsigned char AnalogTriggerChannel =labview[2];

      unsigned char Level =labview[3];

      unsigned char Rate =labview[4];

      unsigned char ClockMode = 2;

      unsigned long Triggers[2];

      Triggers[0]= 0;.

      Triggers[1]= 0;

      char NumberOfTriggers = 1;

      long SampleBufferLength =labview[5]* 65536;

      unsigned long *SampleBuffer;

      *SampleBuffer =MakeBuffer(SampleBufferLength);

      long PostStore = SampleBufferLength;

      char Breaks, Running, Triggered, Full;

      long Start, End, Trigger;

      SR: ReturnVal = StartCapture(Channels, Slope,

      AnalogTriggerChannel, Level, Rate, ClockMode,

      Triggers, NumberOfTriggers, SampleBuffer,

      SampleBufferLength, PostStore);

      if (ReturnVal != 1) {

      printf(“Failure Starting Capture ”);

      return 0;

      }

      do {

      Sleep(50);

      ReturnVal = CaptureStatus(&Breaks, &Running,

      &Triggered, &Start, &End, &Trigger, &Full);

      if (Running && (Breaks != 0)) {

      break;

      }

      } while (Running && (Breaks == 0));

      StopCapture();

      if(Breaks==0)

      {gotoI;}

      if(Rate==247)

      {Rate=167;gotoSR;}

      if(Rate==167)

      {Rate=127;gotoSR;}

      if(Rate==127)

      {Rate=87;gotoSR;}

      if(Rate==87)

      {Rate=67;gotoSR;}

      if(Rate==67)

      {Rate=47;gotoSR;}

      if(Rate==47)

      {Rate=37;gotoSR;}

      if(Rate==37)

      {Rate=27;gotoSR;}

      if(Rate==27)

      {Rate=17;gotoSR;}

      I:y=labview[6];

      z=labview[7];

      for(x= 0;x

      {printf(“%8x”,SampleBuffer[x]);

      }

      DeleteBuffer(SampleBuffer);

      return Rate;

      }

      由于USBee DX提供的API函數(shù)允許的最小采樣速率為1 MB/s,最小采樣長度為65 536. 當(dāng)信號頻率低時,要測量到幾個周期的信號,要增大采樣時間,則采樣長度太長,用printf方式和LabVIEW通過執(zhí)行系統(tǒng)命令模塊調(diào)用,來傳遞數(shù)據(jù)的時間太長,程序運(yùn)行速度很慢. 對于低頻信號,C可執(zhí)行程序按最低采樣速率1 MB/s采樣,盡管采樣長度會到數(shù)倍或幾十倍最小采樣長度,由于采樣速率高耗時還可以接受. 在數(shù)據(jù)傳遞時增大步長,即數(shù)據(jù)間隔,虛擬地調(diào)整采樣速率,可以減少數(shù)據(jù)傳遞量,縮短數(shù)據(jù)傳遞時間. 在LabVIEW程序中相應(yīng)調(diào)大繪圖點(diǎn)的時間間隔,以保持繪圖和采樣的總時長一致.

      2LabVIEW程序

      LabVIEW程序外層為兩級平鋪式順序結(jié)構(gòu),第一級是打開與C可執(zhí)行程序交換數(shù)據(jù)的文本文件,并初始化運(yùn)行參量;第二級中嵌入一個While循環(huán),其中又嵌入兩級平鋪式順序結(jié)構(gòu),這個平鋪式順序結(jié)構(gòu)的第一級為虛擬示波器主程序,第二級則向文本文件寫入采樣速率和采樣長度等參量. 虛擬示波器主程序如圖1所示,其中t_Scale條件語句框根據(jù)示波器掃描時基,設(shè)定USBee DX的采樣速率、采樣長度、數(shù)據(jù)傳遞長度和傳遞間隔,與通道選擇和觸發(fā)控制參量組成8個字符串的隊列寫入文本文件LabVIEW.txt中,C可執(zhí)行程序讀該文件取得這些參量.

      改變掃描時基也就是改變繪圖模塊橫向標(biāo)尺的時間長度,而繪圖窗體長度不變,則要改變繪圖模塊的Δt,即繪圖點(diǎn)之間的間隔. 若選擇固定的基本標(biāo)尺時間長度,掃描時基增大,Δt的值相應(yīng)減小. 例如標(biāo)尺長度T,分度10格,則時基為0.1T/div,若采樣速率為SR,1個標(biāo)尺長度時間里采樣點(diǎn)數(shù)為TSR,數(shù)據(jù)點(diǎn)時間間隔等于1/SR,取Δt=1/SR,在標(biāo)尺長度內(nèi)可繪完全部采樣點(diǎn). 若增加采樣點(diǎn)數(shù)為2TSR,數(shù)據(jù)點(diǎn)時間間隔仍為1/SR,而標(biāo)尺長度變?yōu)?T,時基為0.2T/div,標(biāo)尺長度增大1倍,保持繪圖窗體不變,要縮小繪圖點(diǎn)之間的間隔Δt,取Δt=1/2SR,仍然可以在1個標(biāo)尺長度T內(nèi)繪完全部采樣點(diǎn),繪圖窗體不變,總時長還是2T,時基還是0.2T/div. 若數(shù)據(jù)傳遞間隔Δτ大于采樣間隔1/SR,則傳遞的數(shù)據(jù)點(diǎn)數(shù)為2TSR/Δτ,則繪圖間隔要調(diào)整為Δt=Δτ/2SR,則保持繪圖窗體不變. 也可以選擇繪圖窗體的時間長度隨掃描時基增大,則繪圖模塊的Δt也要隨之增大,相應(yīng)的游標(biāo)位置也要隨之變化. 由于觸發(fā)控制模塊Trigger在篩選滿足觸發(fā)條件的數(shù)據(jù)點(diǎn)時,會篩除數(shù)據(jù)隊列前面不滿足觸發(fā)條件的部分?jǐn)?shù)據(jù),實(shí)際傳遞數(shù)據(jù)的時間長度要大于繪圖數(shù)據(jù)的時間長度,選擇采樣的時間長度是繪圖的時間長度的2倍.

      圖1 虛擬示波器主程序

      經(jīng)1個For 循環(huán)語句框,將C可執(zhí)行程序傳遞的16進(jìn)制字符串重新分割成8個字符1組,即4 Bytes 1組的數(shù)據(jù)隊列,其中低16位為16個數(shù)字通道的信號,高16位為2個模擬通道信號,這其中低8位為1號模擬通道信號,高8位為2號模擬通道信號. 用字符截取模塊和字符數(shù)據(jù)轉(zhuǎn)換模塊重新組織數(shù)據(jù)隊列,再經(jīng)拆分?jǐn)?shù)字模塊,從數(shù)據(jù)隊列中拆分出數(shù)字通道信號和2個AD模入通道信號. 再按采樣的電壓分辨率換算成電壓值后,經(jīng)過Trigger模塊后進(jìn)行增益控制和垂直位移控制. 最后用捆綁模塊將數(shù)據(jù)隊列和時基數(shù)據(jù)捆綁成信號簇送波形圖模塊顯示信號波形. 數(shù)據(jù)隊列變換成動態(tài)數(shù)據(jù)送單頻測量模塊和幅值電平測量模塊,測量顯示信號的頻率和峰-峰值.

      按照USBee DX使用手冊[8]介紹的數(shù)字和模擬信號采集函數(shù)StartCapture編寫USBee DX采集卡采樣觸發(fā)控制參量,生成的C可執(zhí)行程序沒有觸發(fā)控制功能. 觸發(fā)控制由LabVIEW程序?qū)崿F(xiàn),虛擬示波器主程序中觸發(fā)控制模塊Trigger,虛擬示波器觸發(fā)同步功能,改編自LabVIEW資源庫中數(shù)字虛擬示波器示例,將其中的觸發(fā)同步程序創(chuàng)建成新的IV子模塊,取名“Trigger”模塊,該模塊可以選擇觸發(fā)源、觸發(fā)電平和觸發(fā)極性.

      主程序框左側(cè)中下部分的程序用于控制4個分別綁定在信號曲線上的游標(biāo),通過控制和讀取波形圖模塊的游標(biāo)屬性,決定游標(biāo)是否可見,以及顯示游標(biāo)之間的差值.

      虛擬示波器前面板見圖2,時基和增益調(diào)節(jié)分度均按傳統(tǒng)示波器分度值設(shè)置,手動調(diào)節(jié)縮放. 起用波形圖模塊的游標(biāo)功能,還可以拖動游標(biāo)線測量信號的電壓差和時間差. 主程序包含自動測量2個通道信號的峰-峰值和頻率的功能,在前面板上自動顯示信號的峰-峰值和頻率.

      圖2 程序運(yùn)行前面板

      在Windows XP SP3系統(tǒng)下,Tualatin Celeron 1.2 GHz CPU,Geforce4 MX 440 顯卡,768 MB SDROM 內(nèi)存的老舊計算機(jī)可以充當(dāng)一臺雙蹤示波器用,采樣率最大可達(dá)到6 MB/s;若選擇單蹤顯示,采樣率最大可達(dá)到12 MB/s. 最高測量到頻率約600 kHz或1.2 MHz的信號,這時波形略微有些失真. 從C可執(zhí)行程序向LabVIEW程序傳遞數(shù)據(jù)的速率大約50 kB/s. 信號頻率低到幾十Hz,信號刷新速度也還可以接受. 當(dāng)時基為1 s/div擋,信號波形刷新時間約24 s,要測量幾Hz的信號,波形刷新過慢. 虛擬的示波器適合在幾十Hz到幾百kHz使用.

      3結(jié)束語

      USBee DX數(shù)據(jù)采集器的價格比市面上的一些USB接口或PCI接口的AD卡要低,而采樣速率要高得多. 雖然,該AD卡提供的API函數(shù)不支持LabVIEW的庫函數(shù)節(jié)點(diǎn)調(diào)用,不便于結(jié)合LabVIEW強(qiáng)大的信號處理分析功能. 通過LabVIEW調(diào)用可執(zhí)行程序功能,可以實(shí)現(xiàn)USBee DX采樣數(shù)據(jù)與LabVIEW程序?qū)樱l(fā)揮USBee DX數(shù)據(jù)采集器的價格低、采樣速率高、LabVIEW信號處理分析功能強(qiáng)的優(yōu)勢. 盡管該AD口只有8位的采樣分辨率,輸入范圍-10~10 V,電壓分辨率僅有約78 mV, 配上10∶1的測量筆,對幾V到幾十V的電壓信號,這個電壓分辨率已經(jīng)夠用. 對于信號幅度為幾V的調(diào)相信號,如外腔調(diào)制激光二極管自混合干涉信號,可以進(jìn)一步設(shè)計成傅里葉分量提取、解調(diào)和信息分析的虛擬儀器,解調(diào)出來的位移信號可達(dá)到與12位AD卡相同的位移分辨率.

      參考文獻(xiàn):

      [1]胡險峰. 用微機(jī)觀測交流磁滯回線[J]. 物理實(shí)驗(yàn),1997,17(1):19-20,18.

      [2]冷國華. 電腦示波器[J]. 物理實(shí)驗(yàn),2004,24(3):28-30.

      [3]戴新宇,王群,閆長春. 基于虛擬示波器動態(tài)判別溶液濃度[J]. 物理實(shí)驗(yàn),2004,24(6):44-46.

      [4]胡險峰,朱世國. 激光二極管反饋干涉的實(shí)驗(yàn)觀測[J]. 物理實(shí)驗(yàn),2006,26(3):3-7,15.

      [5]余觀夏,王軍,阮錫根. 基于聲卡和LabVIEW測量金屬的動態(tài)楊氏模量[J]. 物理實(shí)驗(yàn),2007,27(8):6-9.

      [6]陳東生,熊慧萍,王瑩. 以虛擬儀器為平臺的聲學(xué)實(shí)驗(yàn)[J]. 物理實(shí)驗(yàn),2008,28(2):26-29.

      [7]陳映純,吳先球. 基于虛擬儀器的楊氏模量實(shí)驗(yàn)中共振頻率的測量[J]. 物理實(shí)驗(yàn),2012,32(5):40-41,45.

      [8]CWAV. USBee DX Test Pod User’s Manual [DB/OL]. 2008. www.usbee.com.

      [責(zé)任編輯:尹冬梅]

      收稿日期:2016-02-22;修改日期:2016-03-04

      作者簡介:胡險峰(1962-),男,江西玉山人,四川大學(xué)物理科學(xué)與技術(shù)學(xué)院副教授,碩士,主要從事基礎(chǔ)物理實(shí)驗(yàn)教學(xué).

      中圖分類號:TM935.37

      文獻(xiàn)標(biāo)識碼:A

      文章編號:1005-4642(2016)07-0012-05

      Virtual oscilloscope based on USBee DX data sampling and LabVIEW programming

      HU Xian-feng

      (Physics College, Sichuan University, Chengdu 610064, China)

      Abstract:A programming method of USBee DX data acquisition with LabVIEW software was introduced. LabVIEW program called a C executable program by the System Exec.vi, to realize the exchange of control and sample data between USBee DX and LabVIEW. A double trace oscilloscope was virtualized.

      Key words:data acquisition; virtual oscilloscope; LabVIEW; USBee DX

      猜你喜歡
      數(shù)據(jù)采集
      Web網(wǎng)絡(luò)大數(shù)據(jù)分類系統(tǒng)的設(shè)計與改進(jìn)
      CAN總線通信技術(shù)在電梯監(jiān)控系統(tǒng)中的應(yīng)用
      基于大型嵌入式系統(tǒng)的污水檢測系統(tǒng)設(shè)計
      社會保障一卡通數(shù)據(jù)采集與整理技巧
      基于AVR單片機(jī)的SPI接口設(shè)計與實(shí)現(xiàn)
      CS5463在植栽用電子鎮(zhèn)流器老化監(jiān)控系統(tǒng)中的應(yīng)用
      大數(shù)據(jù)時代高校數(shù)據(jù)管理的思考
      科技視界(2016年18期)2016-11-03 22:51:40
      鐵路客流時空分布研究綜述
      基于廣播模式的數(shù)據(jù)實(shí)時采集與處理系統(tǒng)
      軟件工程(2016年8期)2016-10-25 15:54:18
      通用Web表單數(shù)據(jù)采集系統(tǒng)的設(shè)計與實(shí)現(xiàn)
      軟件工程(2016年8期)2016-10-25 15:52:53
      云龙县| 车致| 邵阳县| 宁明县| 黔南| 枣强县| 余江县| 通州市| 姜堰市| 内乡县| 新田县| 金沙县| SHOW| 张家界市| 延川县| 乌什县| 马关县| 日喀则市| 九龙县| 铜梁县| 海口市| 扶沟县| 凤台县| 霸州市| 嘉黎县| 德庆县| 富阳市| 屏东县| 南江县| 灵璧县| 和静县| 乾安县| 龙胜| 奉新县| 同德县| 扶沟县| 外汇| 桂阳县| 广元市| 柏乡县| 社旗县|