0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在LabVIEW環(huán)境下通過(guò)NI-VISA實(shí)現(xiàn)USB系統(tǒng)的設(shè)計(jì)

電子設(shè)計(jì) ? 來(lái)源:郭婷 ? 作者:電子設(shè)計(jì) ? 2019-07-01 08:02 ? 次閱讀

USB(Universal Serial Bus)接口是近年來(lái)應(yīng)用在PC領(lǐng)域的新型接口技術(shù)。它基于單一的總線接口技術(shù)來(lái)滿足多種應(yīng)用領(lǐng)域的需求;它的即插即用、支持熱插拔、易于擴(kuò)展等特性極大地方便了用戶的使用,已逐漸成為現(xiàn)代數(shù)據(jù)傳輸?shù)陌l(fā)展趨勢(shì)。

傳統(tǒng)的開發(fā)USB應(yīng)用系統(tǒng)的步驟是,先用WindowsDDK(設(shè)備驅(qū)動(dòng)程序開發(fā)包)或第三方開發(fā)工具(如DriverStudio)開發(fā)USB驅(qū)動(dòng)程序,然后用Visual C++編寫DLL(動(dòng)態(tài)連接庫(kù)),最后再調(diào)有DLL來(lái)開發(fā)應(yīng)用程序。顯然,這對(duì)Windows編程不熟悉的人來(lái)說(shuō)有一定的難度,何況USB驅(qū)動(dòng)程序的開發(fā)難度很大。本文介紹一種簡(jiǎn)單、快速開發(fā)USB接口應(yīng)用系統(tǒng)的方法。它直接在LabVIEW環(huán)境下通過(guò)NI-VISA開發(fā)能驅(qū)動(dòng)用戶USB系統(tǒng)的應(yīng)用程序,完全避開了以前開發(fā)USB驅(qū)動(dòng)程序的復(fù)雜性,大大縮短了開發(fā)周期。

1 NI-VISA簡(jiǎn)介

NI-VISA(Virtual Instrument Software Architec-ture,以下簡(jiǎn)稱為“VISA”)是美國(guó)國(guó)家儀器NI(NaTIonal Instrument)公司開發(fā)的一種用來(lái)與各種儀器總線進(jìn)行通信的高級(jí)應(yīng)用編程接口。VISA總線I/O軟件是一個(gè)綜合軟件包,不受平臺(tái)、總線和環(huán)境的限制,可用來(lái)對(duì)USB、GPIB、串口、VXI、PXI和以太網(wǎng)系統(tǒng)進(jìn)行配置、編程和調(diào)試。VISA是虛擬儀器系統(tǒng)I/O接口軟件?;谧缘紫蛏辖Y(jié)構(gòu)模型的VISA創(chuàng)造了一個(gè)統(tǒng)一形式的I/O控制函數(shù)集。一方面,對(duì)初學(xué)者或是簡(jiǎn)單任務(wù)的設(shè)計(jì)者來(lái)說(shuō),VISA提供了簡(jiǎn)單易用的控制函數(shù)集,在應(yīng)用形式上相當(dāng)簡(jiǎn)單;另一方面,對(duì)復(fù)雜系統(tǒng)的組建者來(lái)說(shuō),VISA提供了非常強(qiáng)大的儀器控制功能與資源管理。

2 LabVIEW及其調(diào)用VISA的條件

LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是NI公司開發(fā)的一種基于圖形程序的編程語(yǔ)言。用戶利用創(chuàng)建和調(diào)用子程序的方法編寫程序,使創(chuàng)建的程序模塊化,而且程序編制簡(jiǎn)單、直觀。一個(gè)LabVIEW程序分為3部分:前面板、框圖程序和圖標(biāo)/接線端口。前面板用于模擬真實(shí)儀器的前面板;框圖程序是利用圖形語(yǔ)言對(duì)前面板上的控件對(duì)象(分為控制量和指示量?jī)煞N)進(jìn)行控制;圖標(biāo)/接線端口用于把LabVIEW程序定義成一一個(gè)子程序,從而實(shí)現(xiàn)模塊化編程。

當(dāng)進(jìn)行USB通信時(shí),VISA提供了兩類函數(shù)供Lab-VIEW調(diào)用,USB INSTR設(shè)備與USB RAW設(shè)備。USBINSTR設(shè)備是符合USBTMC協(xié)議的USB設(shè)備,可以通過(guò)使用USB INSTR類函數(shù)控制,通信時(shí)無(wú)需配置NI-VISA;而USB RAW設(shè)備是指除了明確符合USBTMC規(guī)格的儀器之外的任何USB設(shè)備,通信時(shí)要配置NI-VISA。

(1)配置NI-VISA的步驟

①使用Driver DevelopineInt Wizard(驅(qū)動(dòng)程序開發(fā)向?qū)В﹦?chuàng)建INF文檔;

②安裝INF文檔,并安裝使用INF文檔的USB設(shè)備;

③使用NI-VISA Interactive Control(NI-VISA互動(dòng)控制工具)對(duì)設(shè)備進(jìn)行測(cè)試,以證實(shí)USB設(shè)備已正確安裝,并獲得USB設(shè)備的各屬性值。

詳細(xì)過(guò)程可參考NI官方網(wǎng)站上免費(fèi)提供的文檔《使用NI-VISA控制USB設(shè)備》。

(2)與NI-VISA相配合的LabVIEW橫板中VI子節(jié)點(diǎn)

ViOpen,打開并指定VISA resource name的設(shè)備的連接。

ViProperty,VISA設(shè)備的屬性子節(jié)點(diǎn),可以設(shè)置端點(diǎn)或傳輸方式。

ViWnte,向VISA resource name指定的設(shè)備寫入數(shù)據(jù)。

ViRead,從VISA resource name指定的設(shè)備讀出數(shù)據(jù)。

ViClose,結(jié)束設(shè)備讀寫并關(guān)閉與指定設(shè)備的連接。

(3)USB RAW設(shè)備讀寫的操作次序

USB RAW設(shè)備的讀寫次序如圖l所示。

下面以一個(gè)USB接口的溫度采集系統(tǒng)為例,說(shuō)明基于NI-VISA驅(qū)動(dòng)的USB接口應(yīng)用系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。

3 系統(tǒng)硬件結(jié)構(gòu)

系統(tǒng)以Philips公司的增強(qiáng)型80C51單片機(jī)為核心,如圖2所示。這是一個(gè)多點(diǎn)溫度采集系統(tǒng),核心器件是含有8 KB非易失Flash程序存儲(chǔ)器的P89C52,與標(biāo)準(zhǔn)80C51完全兼容。USB通信控制芯片采用Philips公司的PDIUSBD12芯片(簡(jiǎn)稱“D12”)。它是一款較新型的專用USB通信控制芯片,符合通用串行總線USBl.1版規(guī)范,內(nèi)部集成有串行接口引擎SIE、320字節(jié)FIFO存儲(chǔ)器、收發(fā)器和電壓調(diào)節(jié)器。前端溫度傳感器采用Dallas公司生產(chǎn)的DSl8820。它是一線式數(shù)字溫度傳感器,直接以數(shù)字量輸出給微處理器,可節(jié)省大量的引線和信號(hào)調(diào)理電路。

DSl8820內(nèi)部有一個(gè)光刻ROM。這個(gè)ROM中存有64位序列號(hào)。它可以看作足該DS18820的地址序列碼,所以多路溫度傳感器可以掛在l條總線上,共同占用單片機(jī)的1條I/O線即可實(shí)現(xiàn)接口。在提升單片機(jī)I/O線驅(qū)動(dòng)能力的前提下,理論上可以任意擴(kuò)充檢測(cè)的溫度點(diǎn)數(shù)。

D12與單片機(jī)的接口共有兩種方式:多路地址/數(shù)據(jù)總線方式和單地址/數(shù)據(jù)總線方式。這里選擇了單地址/數(shù)據(jù)總線方式,因此,D12的ALE接為低電平,而A0腳與P89C52X2的端口P3.3相連。該端口控制D12的命令和數(shù)據(jù)狀態(tài):A0=1,表示數(shù)據(jù)總線上是命令;A0=0,表示數(shù)據(jù)總線上是數(shù)據(jù)。D12的數(shù)據(jù)總線直接與P0口相連,D12的中斷引腳INT_N與P89C52X2的INT0相連。當(dāng)D12的外部巾斷有一位為1時(shí),INT_N輸出低電平,觸發(fā)P89C52X2的外部中斷。因?yàn)橄到y(tǒng)未采用DMA,所以D12的DMAcK_N引腳接高電平,EOT_N引腳通過(guò)電阻接到USB的+5 V,以正確檢測(cè)到USB連接;INT_N引腳加一個(gè)上拉電阻。因?yàn)镈12有片內(nèi)上電復(fù)位電路,故引腳RESET_N直接與電源引腳VCC相連。溫度傳感器DSl8820工作在外接電源工作方式,DQ引腳直接和P89C52X2的P1.0相連。

3.1 系統(tǒng)的工作原理

根據(jù)USB協(xié)議,任何傳輸都是由主機(jī)(host)開始的,單片機(jī)的前臺(tái)工作就是等待。主機(jī)PC首先要發(fā)送令牌包給USB,D12接收到令牌包就給單片機(jī)發(fā)中斷,單片機(jī)進(jìn)入中斷服務(wù)程序。首先讀D12的中斷寄存器,判斷USB令牌包的類型,然后執(zhí)行相應(yīng)的操作,因此,USB單片機(jī)程序主要就是中斷服務(wù)程序的編寫。在USB單片機(jī)程序中要完成對(duì)各種令牌包的響應(yīng),主要是對(duì)端口的編程。

3.2 軟件部分的設(shè)計(jì)

系統(tǒng)的固件程序從功能上分為兩部分,整個(gè)編程在Keil C環(huán)境下完成。

(1)溫度傳感器D818820的讀取程序

DSl8820單線通信功能是分時(shí)實(shí)現(xiàn)的。它有很嚴(yán)格的時(shí)序要求,對(duì)它的操作必須按協(xié)議進(jìn)行,即初始化→發(fā)ROM操作命令→發(fā)存儲(chǔ)器操作命令→數(shù)據(jù)處理。

(2)MCU和USB接口的通信程序

本程序使用D12的端點(diǎn)l和端點(diǎn)2進(jìn)行上位汁算機(jī)與MCU P89C52之間的命令和數(shù)據(jù)的傳輸。端點(diǎn)l和端點(diǎn)2設(shè)置成模式O(異步方式)。其中端點(diǎn)1以中斷傳輸方式進(jìn)行命令的傳輸和應(yīng)答,端點(diǎn)2以批量傳輸方式進(jìn)行數(shù)據(jù)的傳輸。端點(diǎn)1接收上位機(jī)發(fā)送過(guò)來(lái)的讀指令,端點(diǎn)2返回讀成功數(shù)據(jù)。

系統(tǒng)的固件程序編寫以分層結(jié)構(gòu)展開。它是一種積木式結(jié)構(gòu),如圖3所示。

①硬件提取層:對(duì)單片機(jī)的I/O口、數(shù)據(jù)總線等硬件接口進(jìn)行操作。

②PDIUSBD12命令接口:對(duì)D12器件進(jìn)行操作的模塊子程序集。

③中斷服務(wù)程序:當(dāng)D12向單片機(jī)發(fā)出中斷請(qǐng)求時(shí),讀取D12中斷傳輸來(lái)的數(shù)據(jù),并設(shè)定事件標(biāo)志“EPP-FLAGS”和Settup包數(shù)據(jù)緩沖區(qū)“CONROL_XFER”傳輸給主循環(huán)程序。

④標(biāo)準(zhǔn)設(shè)備請(qǐng)求處理程序:對(duì)USB的標(biāo)準(zhǔn)設(shè)備請(qǐng)求進(jìn)行處理。

廠商請(qǐng)求處理程序:對(duì)用戶添加的廠商請(qǐng)求進(jìn)行處理。

⑥主程序:發(fā)出USB數(shù)據(jù)傳輸請(qǐng)求,處理總線事件和調(diào)用用戶自定義功能子程序。

以NI-VISA為驅(qū)動(dòng)的主機(jī)LabVIEW應(yīng)用程序的設(shè)計(jì),NI-VISA采用3.2版本,LabVIEW采用7.1版本。

整個(gè)應(yīng)用程序的主框架使用了WHILF循環(huán)來(lái)進(jìn)行不斷的查詢。在程序的編寫過(guò)程中,采用了類似Windows程序中的事件驅(qū)動(dòng)機(jī)制,LabVIEW提供了這樣的結(jié)構(gòu)——事件結(jié)構(gòu)。各個(gè)消息的產(chǎn)生利用了各種界面控件并由Case選擇結(jié)構(gòu)給出。程序框圖如圖4所示。

為了便于說(shuō)明USB操作次序,把圖4中事件結(jié)構(gòu)展開,有圖5所示的具體USB操作次序。

在圖5中,USB RAW設(shè)備通信采用端點(diǎn)1以中斷傳輸方式接收上位機(jī)操作命令,協(xié)議可以自己約定。端點(diǎn)2以批量傳輸方式給上位機(jī)發(fā)回溫度數(shù)據(jù)。其中端點(diǎn)數(shù)“130”是對(duì)應(yīng)十六進(jìn)制數(shù)“0082”的十進(jìn)制數(shù),此數(shù)表示端點(diǎn)2批量輸入;而端點(diǎn)數(shù)“1”則是對(duì)應(yīng)十六進(jìn)制數(shù)“0001”的十進(jìn)制數(shù),此數(shù)表示端點(diǎn)1中斷輸出。

因?yàn)镹I-VISA3.2版本不支持USB屬性“中斷輸出”(interrupt out),因此為了實(shí)現(xiàn)USB端點(diǎn)1的中斷輸出問(wèn)題,這里把USB屬性“批量輸出”(bulk out pipe)和“VI Write”節(jié)點(diǎn)組合在一起,來(lái)實(shí)現(xiàn)端點(diǎn)l中斷輸出。從NI-VISA3.3起,可以直接利用“中斷輸出”(interruptout)屬性來(lái)實(shí)現(xiàn)。

4 結(jié)語(yǔ)

經(jīng)實(shí)踐證明,采用基于NI-VISA驅(qū)動(dòng)的USB接口應(yīng)用系統(tǒng)的設(shè)計(jì)非常容易,開發(fā)難度低,對(duì)開發(fā)者的要求不高;開發(fā)出的系統(tǒng)穩(wěn)定可靠,即使對(duì)Windows編程不熟悉的人也可以開發(fā)出USB應(yīng)用系統(tǒng),它提供了另一種開發(fā)USB驅(qū)動(dòng)應(yīng)用程序的捷徑。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • LabVIEW
    +關(guān)注

    關(guān)注

    1958

    文章

    3651

    瀏覽量

    321523
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7854

    瀏覽量

    263362
  • 虛擬儀器
    +關(guān)注

    關(guān)注

    22

    文章

    775

    瀏覽量

    87256
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于labviewni-visa有些問(wèn)題求教

    通過(guò)ni-visa采集一個(gè)u***手寫板的信息,本人是labview新手,現(xiàn)在要用labview做一個(gè)程序,實(shí)現(xiàn)在手寫板上畫畫,
    發(fā)表于 05-16 08:06

    哪位有labview2011 對(duì)應(yīng)的 NI-VISA ?

    哪位有labview2011 對(duì)應(yīng)的 NI-VISA? 麻煩給個(gè)下載地址。先謝了。
    發(fā)表于 12-14 20:20

    LabviewNI-VISA做Cypress cy7c68013A的驅(qū)動(dòng)

    LabviewNI-VISA做Cypress cy7c68013A的驅(qū)動(dòng) 安完驅(qū)動(dòng)后 cypress官方固件下載器就識(shí)別不到USB了~求大神幫忙
    發(fā)表于 03-13 20:29

    基于單片機(jī)labviewNI-VISA的u***應(yīng)用

    基于單片機(jī)labviewNI-VISA的u***應(yīng)用
    發(fā)表于 05-15 10:54

    關(guān)于USB設(shè)置VISA的問(wèn)題

    最近使用一個(gè)USB設(shè)備,在用LabVIEW做上位機(jī)程序時(shí),要將其轉(zhuǎn)換成VISA的接口使用VISA的函數(shù),轉(zhuǎn)化過(guò)程中遇到了下面一個(gè)問(wèn)題,電腦
    發(fā)表于 10-29 21:06

    NI-VISA怎么實(shí)現(xiàn)多串口卡的驅(qū)動(dòng)編寫??

    做了一個(gè)多串口卡,客戶要求用NI-VISA編寫驅(qū)動(dòng)。要實(shí)現(xiàn)在設(shè)備管理器中識(shí)別出卡上所有的串口。求大神告知?。?!之前沒有接觸過(guò)NI-VISA,最好詳細(xì)的。
    發(fā)表于 04-02 11:33

    NI-VISAUSB驅(qū)動(dòng)問(wèn)題

    win10可以安裝通過(guò)NI-VISA驅(qū)動(dòng)生成向?qū)У?b class='flag-5'>USB驅(qū)動(dòng)嗎?為什么我的不兼容,我想USB通信而不是串口通信,哪位大神有解決辦法???請(qǐng)指導(dǎo)
    發(fā)表于 08-02 10:38

    【求助】使用 NI-VISAUSB設(shè)備進(jìn)行通信

    各位吧友請(qǐng)教一個(gè)問(wèn)題:想實(shí)現(xiàn)NI-VISAUSB設(shè)備進(jìn)行通信,其中USB設(shè)備用到了C8051F320單片機(jī)。我參考了NI
    發(fā)表于 11-01 21:26

    NI-VISANI-VISA Runtime的區(qū)別在哪里

    安裝VISA 驅(qū)動(dòng)時(shí),發(fā)現(xiàn)有兩種不同的選項(xiàng),不知道該怎么選,求大神告知,NI-VISANI-VISA Runtime的區(qū)別是什么?用法有什么不同?
    發(fā)表于 01-08 10:47

    LabVIEW讀寫USB設(shè)備

    文件,DLL中通過(guò)調(diào)用WIN API函數(shù)讀寫USB設(shè)備的數(shù)據(jù),并存在緩沖區(qū)中,LabVIEW通過(guò)
    發(fā)表于 04-28 10:04

    labview2021 64w位、32位、VIsionBuild2020、VDM、NI-VISA全套資料

    labview2021 64w位、32位、VIsionBuild2020、VDM、NI-VISA全套資料
    發(fā)表于 05-17 19:51

    LabVIEWNI MAX中缺少串口

    操作系統(tǒng)更新后,再也看不到了。無(wú)法LabVIEW中選擇串口作為VISA資源。NI MAX中缺少串行設(shè)備。解決方案此問(wèn)題通常是由于
    發(fā)表于 06-06 20:30

    ni-visa創(chuàng)建usb驅(qū)動(dòng)遇到問(wèn)題

    ni-visa創(chuàng)建usb驅(qū)動(dòng),遇到這種情況,有大佬知道咋解決不
    發(fā)表于 04-26 23:29

    使用NI-VISA的測(cè)控設(shè)備遠(yuǎn)程自動(dòng)化測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)說(shuō)明

    Studio. Net 2010開發(fā)環(huán)境,結(jié)合NI-VISA、Measurement Studio用戶控件、數(shù)據(jù)庫(kù)技術(shù)等設(shè)計(jì)一套兼容多類型測(cè)量?jī)x器的遠(yuǎn)程自動(dòng)化測(cè)試系統(tǒng),并對(duì)其關(guān)鍵技術(shù)進(jìn)行了深入的討論。
    發(fā)表于 01-18 16:23 ?33次下載
    使用<b class='flag-5'>NI-VISA</b>的測(cè)控設(shè)備遠(yuǎn)程自動(dòng)化測(cè)試<b class='flag-5'>系統(tǒng)</b>的設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>說(shuō)明

    基于NI-VISA的晶圓測(cè)試探針臺(tái)遠(yuǎn)程控制軟件

    基于NI-VISA的晶圓測(cè)試探針臺(tái)遠(yuǎn)程控制軟件
    發(fā)表于 06-29 15:07 ?23次下載