国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FPGA的IEEE488接口協(xié)議實(shí)現(xiàn)及驅(qū)動程序開發(fā)

2022-08-26 05:24羅顯志周楊羅
計(jì)算機(jī)測量與控制 2022年8期
關(guān)鍵詞:寄存器聽者總線

劉 陽,羅顯志,周楊羅,李 政

(湖北大學(xué) 計(jì)算機(jī)與信息工程學(xué)院,武漢 430062)

0 引言

在自動測試系統(tǒng)中,IEEE488總線扮演著重要的角色。它是一種面向儀器設(shè)備的通用總線接口,也被稱為GPIB總線[1-2]。該接口最早由HP公司提出,經(jīng)過幾十年的發(fā)展,已經(jīng)形成了一套行業(yè)標(biāo)準(zhǔn)。且該接口能滿足設(shè)備之間互相通信的功能,實(shí)現(xiàn)信息共享的需求。

近年來,國內(nèi)在自動化控制、精密儀器研制等領(lǐng)域發(fā)展迅猛,在醫(yī)療、軍工等領(lǐng)域,對測試系統(tǒng)的需求越來也越大。GPIB作為業(yè)界使用最廣泛的測試總線,不僅成本低,而且傳輸穩(wěn)定,在未來的一段時間內(nèi),國內(nèi)市場仍然有一定的需求量。

市面上的GPIB轉(zhuǎn)換器基本都采用專用接口芯片來設(shè)計(jì),此類芯片連接微處理器,通過讀寫寄存器等操作能很

方便的實(shí)現(xiàn)GPIB接口的所有功能。目前,能自主生產(chǎn)基于IEEE-488協(xié)議的專用GPIB接口芯片的公司僅NI、TI、NEC、Intel幾家[3],但該類芯片都已停產(chǎn),可供購買的成品GPIB轉(zhuǎn)換器如NI-GPIB-USB-HS價格在3 000元以上,對國內(nèi)龐大的用戶群體來說成本過高。國內(nèi)在測試接口領(lǐng)域的研究較少,僅有電子科大等幾個團(tuán)隊(duì),且市面上國產(chǎn)轉(zhuǎn)換器占有率不高。隨著ASIC技術(shù)的飛速發(fā)展,F(xiàn)PGA在嵌入式領(lǐng)域得到了廣泛應(yīng)用,它靈活、穩(wěn)定、可移植性強(qiáng),所以能夠用來替代一些專用芯片。

基于以上因素,本文詳細(xì)闡述使用FPGA芯片來實(shí)現(xiàn)IEEE488總線協(xié)議的方案及實(shí)現(xiàn)流程,為相關(guān)開發(fā)人員提供可行性參考。

1 總體設(shè)計(jì)

基于FPGA的IEEE488協(xié)議轉(zhuǎn)換器的設(shè)計(jì)主要包括硬件和軟件兩部分。硬件部分包括硬件電路設(shè)計(jì)與硬件控制程序設(shè)計(jì);軟件部分主要是驅(qū)動程序開發(fā),最后通過用戶程序與儀器通信。該方案組建一套完整的測試系統(tǒng),其總體結(jié)構(gòu)[4]如圖1所示。

圖1 總體結(jié)構(gòu)框架

該方案的核心在于硬件控制程序設(shè)計(jì),開發(fā)前需要對IEEE488總線協(xié)議做深入研究,同時剖析NI的NAT9914的內(nèi)部結(jié)構(gòu),掌握其協(xié)議的工作原理。硬件控制程序的主要內(nèi)容是模擬GPIB接口的十種功能,然后通過讀寫控制模塊控制數(shù)據(jù)準(zhǔn)確無誤的傳輸,在PC與儀器之間搭建數(shù)據(jù)傳輸?shù)臉蛄骸\浖?qū)動程序連接PC與轉(zhuǎn)換器,實(shí)時發(fā)送程控指令并接收返回的數(shù)據(jù)。

2 硬件電路設(shè)計(jì)

硬件電路設(shè)計(jì)主要包括電源模塊、USB-UART模塊、FPGA主控模塊及外圍電路、GPIB接口模塊。硬件設(shè)計(jì)框架如圖2所示。

圖2 硬件設(shè)計(jì)框架

2.1 電源模塊

電源模塊為整個系統(tǒng)提供穩(wěn)定電壓。電源芯片使用MC34063,該芯片性能好,市場應(yīng)用廣泛,可實(shí)現(xiàn)升壓和降壓功能,但其實(shí)現(xiàn)電路不同。本系統(tǒng)采用USB接口供電,其電壓大致為5.2 V左右,所以需設(shè)計(jì)降壓電路。FPGA芯片的不同BANK所需電壓不同,因此添加LM1084可調(diào)輸出線性穩(wěn)壓器,提供3.3 V、2.5 V、1.2 V工作電壓。電源電路部分設(shè)計(jì)如圖3所示。

圖3 電源模塊

該芯片內(nèi)部有恒定的1.25 V基準(zhǔn)電壓,輸出電壓與R35和R36的阻值有關(guān),其輸出電壓的計(jì)算公式為:

Vout=1.25*(1+R36/R35)

(1)

由公式(1)推出,為輸出5 V電壓,R36和R36的阻值分別為10 K和3K3。

2.2 USB-UART模塊

USB-UART模塊建立PC端與主控芯片的數(shù)據(jù)通道。協(xié)議轉(zhuǎn)換芯片采用CH340G-USB轉(zhuǎn)串口芯片,該芯片外圍電路簡單,性能穩(wěn)定,資料豐富。電路中將Rx與Tx引腳接入FPGA芯片進(jìn)行數(shù)據(jù)交換,D+與D-接入USB接口數(shù)據(jù)引腳與PC端進(jìn)行數(shù)據(jù)交換。該芯片工作時需外接12 M晶振,同時為保證系統(tǒng)時鐘的同步,引出時鐘輸入引腳與FPGA芯片相連。USB-UART模塊如圖4所示。

圖4 USB-UART模塊

2.3 FPGA主控模塊及GPIB接口模塊

FPGA主控芯片的選擇參考市場兩大主流FPGA芯片廠商,再結(jié)合本項(xiàng)目的設(shè)計(jì)要求,最終采用Xilinx的Spartan-6系列的XC6SLX4芯片,該芯片的引腳數(shù)和容量能滿足設(shè)計(jì)需求,且網(wǎng)絡(luò)資源充足,易上手。

主控芯片的差分引腳主要與GPIB接口的16根信號線和UART模塊的數(shù)據(jù)線連接,以實(shí)現(xiàn)接口的控制和數(shù)據(jù)傳輸。外圍電路還包括JTAG下載電路、SDRAM外部存儲模塊以及時鐘和復(fù)位電路。JTAG下載調(diào)試電路使用XCF01SVO20C-FPGA配置芯片,系統(tǒng)外部時鐘采用50 M晶振。此外,使用K4S511632B-TC75存儲芯片設(shè)計(jì)SDRAM外部存儲模塊,防止因FPGA芯片內(nèi)部緩存不足造成數(shù)據(jù)丟失的現(xiàn)象。主控模塊還外接了LED小燈等外圍電路,用來作為數(shù)據(jù)讀寫的指示燈。

傳統(tǒng)的GPIB接口電路模塊一般由專用GPIB接口芯片和總線收發(fā)器組成。本方案使用FPGA芯片模擬GPIB接口功能,因此無需GPIB接口芯片和總線收發(fā)器。但GPIB接口工作電壓是5 V,而FPGA芯片的最高電壓為3.3 V,故在FPGA芯片與GPIB接口之間添加MOS-N模塊實(shí)現(xiàn)電平轉(zhuǎn)換。

3 硬件控制程序設(shè)計(jì)

硬件控制程序是設(shè)計(jì)的核心與難點(diǎn)。在設(shè)計(jì)之前,需要對IEEE488總線協(xié)議和GPIB接口芯片的內(nèi)部結(jié)構(gòu)做深入研究。

3.1 IEEE488總線介紹

IEEE488總線[5-6]自提出以來,一直被廣泛應(yīng)用于測試、控制等領(lǐng)域。它由數(shù)據(jù)線、三根握手線、五根接口管理線以及地線組成。三根握手線配合工作,通知總線何時傳輸數(shù)據(jù),何時接收數(shù)據(jù),確保數(shù)據(jù)傳輸準(zhǔn)確無誤。接口管理線ATN控制總線上傳輸?shù)氖菙?shù)據(jù)還是指令,EOI提示總線何時傳輸結(jié)束等,IFC設(shè)置所有的設(shè)備于靜止?fàn)顟B(tài),REN使能設(shè)備進(jìn)行遠(yuǎn)程編程,SRQ提醒控制器是否需要服務(wù)。在工作時,測試系統(tǒng)存在3種角色,即控者負(fù)責(zé)發(fā)送各種命令,講者發(fā)送數(shù)據(jù),聽者接收數(shù)據(jù)。

典型的GPIB專用接口芯片NAT9914的內(nèi)部電路主要分為兩部分。一部分面向GPIB總線,主要包括GPIB接口的十種功能以及各種緩沖器和譯碼器。另一部分面向微處理器,通過編寫驅(qū)動程序讓微處理器訪問25個可尋址寄存器,其主要類型有數(shù)據(jù)類寄存器、中斷類寄存器、地址類寄存器。NAT9914的內(nèi)部結(jié)構(gòu)[7-8]如圖5所示。

圖5 NAT9914內(nèi)部結(jié)構(gòu)

GPIB接口共定義了10種接口功能,分別是源方和受方掛鉤功能、講者、聽者、控者、器件清除功能、服務(wù)請求功能、并行輪詢功能、遠(yuǎn)控/本控功能、器件觸發(fā)功能。其中前五種是基本接口功能,后5種是輔助接口功能。基本功能是所有帶GPIB接口的設(shè)備必須具備的,保證測試系統(tǒng)中各儀器之間能相互通信,輔助功能讓測試系統(tǒng)更便捷、更智能。

3.2 GPIB接口功能的程序設(shè)計(jì)與仿真

該方案的硬件程序使用Verilog硬件描述語言進(jìn)行開發(fā),軟件采用Xilinx的ISE。整體設(shè)計(jì)采用自頂向下的設(shè)計(jì)思想,將整個系統(tǒng)拆分成若干個子功能模塊,其中包括串口數(shù)據(jù)收發(fā)模塊、數(shù)據(jù)讀寫控制模塊、中斷模塊以及GPIB接口功能模塊,每個子功能模塊又有不同的狀態(tài),同一時刻只允許存在同一種狀態(tài),不同的狀態(tài)又通過相互聯(lián)系的小狀態(tài)機(jī)進(jìn)行切換,且狀態(tài)的改變與之前設(shè)備所處的狀態(tài)關(guān)聯(lián),這樣就構(gòu)成了一個相互排斥又相互聯(lián)系的狀態(tài)機(jī)。通過各模塊的接口功能狀態(tài)機(jī)的聯(lián)系,最總形成一個頂層GPIB接口功能狀態(tài)機(jī)。

GPIB接口功能的實(shí)現(xiàn)依賴于各個功能模塊的實(shí)現(xiàn),由于篇幅有限,該章節(jié)主要對GPIB接口的講者(T)、聽者(L)功能、FIFO模塊的設(shè)計(jì)進(jìn)行詳細(xì)描述,并利用Modelsim軟件進(jìn)行仿真驗(yàn)證。

3.2.1 講功能(T)設(shè)計(jì)

講功能[9-10]的主要作用是將用戶發(fā)送的程控指令或者數(shù)據(jù)通過總線發(fā)送到測試系統(tǒng)中的儀器中,或者將儀器自身的工作狀態(tài)以及參數(shù)等信息通過數(shù)據(jù)總線傳輸?shù)絇C端。只有當(dāng)系統(tǒng)控者尋址講者或者設(shè)備通過ton指令將自身設(shè)置為講者時,才賦予這種功能。同一時刻,一個測試系統(tǒng)中只存在一位講者。

講功能的狀態(tài)分為TIDS(講者空閑態(tài))、TADS(講者被尋址態(tài))、TACS(講者活動態(tài))、SPAS(串行活動態(tài))、SPIS(串行空閑態(tài))、SPMS(串行模式)共6種,按照協(xié)議功能又分為講者數(shù)據(jù)傳輸和串行輪詢兩組事件,分別如圖6(a)和圖6(b)所示。講者狀態(tài)圖如圖5所示。

圖6 講功能狀態(tài)圖

事件(a)中,在設(shè)備上電后,講功能同時進(jìn)入TIDS和SPIS兩種狀態(tài),此時不具備數(shù)據(jù)傳輸能力。當(dāng)設(shè)備被尋址為講者(即MTA=1)或設(shè)備通過ton指令設(shè)置自身為講者,且ACDS為活動態(tài)時,講功能進(jìn)入被尋址態(tài),此時講者準(zhǔn)備好發(fā)送數(shù)據(jù)。ATN信號線決定系統(tǒng)傳輸?shù)臄?shù)據(jù)類型,當(dāng)ATN為假時,表示GPIB總線上傳輸?shù)氖菙?shù)據(jù),當(dāng)SPMS是活動態(tài)時,設(shè)備進(jìn)入SPAS狀態(tài);當(dāng)SPMS為假時,講者進(jìn)入TACS狀態(tài),此時配合SH功能將數(shù)據(jù)傳到GPIB數(shù)據(jù)總線。當(dāng)設(shè)備處于SPAS或TACS狀態(tài)時,若ATN為真,說明系統(tǒng)控者發(fā)送命令,講功能返回尋址態(tài)。

事件(b)中,若SPE為真,即允許串行查詢,聽者進(jìn)入串行輪詢模式狀態(tài),并參與串行輪詢。當(dāng)系統(tǒng)活動控者發(fā)送SPD命令,即禁用串行輪詢。聽者進(jìn)入串行輪詢空閑狀態(tài)。

講功能的Verilog設(shè)計(jì)包括了圖5中兩組狀態(tài),每種狀態(tài)的轉(zhuǎn)換都通過分析當(dāng)前的狀態(tài)機(jī)來轉(zhuǎn)換,結(jié)合各狀態(tài)之間相互排斥又相互聯(lián)系的特征,TIDS和SPIS采用并行語句執(zhí)行。(b)狀態(tài)的具體實(shí)現(xiàn)的核心部分代碼如下所示:

case (current_state_2)

T_STATE_2_SPIS :

if (event2_1)

current_state_2 <= T_STATE_2_SPMS;

T_STATE_2_SPMS :

if (event2_3)

current_state_2 <= T_STATE_2_SPIS;

else if (event2_2)

current_state_2 <= T_STATE_2_SPIS;

default :

current_state_2 <= T_STATE_2_SPIS;

endcase

assign event2_1 = SPE 1'b1 & ACDS 1'b1;

assign event2_2 = SPD 1'b1 & ACDS 1'b1;

assign event2_3 = IFC 1'b1;

通過編寫Testbench仿真文件,使用Modelsim仿真后波形如圖7所示。根據(jù)分析可以看出,講功能的每個狀態(tài)嚴(yán)格按照狀態(tài)圖進(jìn)行變換,且同一時刻只存在一種活動態(tài)。

圖7 講功能仿真波形

3.2.2 聽功能(L)設(shè)計(jì)

聽功能[11]的主要作用是接收儀器發(fā)送過來的狀態(tài)信息或者主控設(shè)備的指令。同一時刻,一個測試系統(tǒng)中可以存在多位聽者。

聽功能的狀態(tài)分為LIDS(聽者空閑態(tài))、LADS(聽者被尋址態(tài))、LACS(聽者活動態(tài))、LPIS(聽者主空閑態(tài))、LPAS(聽者主被尋址態(tài)),其中后兩種為擴(kuò)展聽者(LE)狀態(tài)。聽者狀態(tài)如圖8所示。

圖8 聽功能及擴(kuò)展聽功能狀態(tài)圖

狀態(tài)圖(a)是聽功能的狀態(tài)圖,當(dāng)設(shè)備上電后,聽功能同時進(jìn)入LIDS和LPIS兩種狀態(tài)。當(dāng)設(shè)備被尋址為聽者(MLA=1)或者設(shè)備通過lon指令設(shè)置自身為聽者,且ACDS為活動態(tài)時,聽功能進(jìn)入被尋址態(tài),此時聽者準(zhǔn)備好接收數(shù)據(jù)。若ATN為假,表示GPIB總線上傳輸數(shù)據(jù),此時聽者變?yōu)長ACS狀態(tài),并且配合AH功能從數(shù)據(jù)總線上接收數(shù)據(jù)。若ATN為真,表示GPIB總線傳輸命令,聽者由活動態(tài)變?yōu)楸粚ぶ窇B(tài)。當(dāng)控者發(fā)出unl命令,宣布測試系統(tǒng)內(nèi)所有的設(shè)備取消聽者狀態(tài),且ACDS為真時,聽者進(jìn)入空閑態(tài)。

狀態(tài)圖(b)是擴(kuò)展聽功能的狀態(tài)圖,在LPIS狀態(tài)下,聽功能可以識別它的主地址,但無法響應(yīng)它的副地址。當(dāng)聽功能被尋址且處于接收數(shù)據(jù)狀態(tài)時,聽功能進(jìn)入被尋址主狀態(tài),此時聽功能可以識別并響應(yīng)它的副地址。

聽功能的Modelsim仿真波形如圖9所示。

圖9 聽功能仿真波形

3.2.3 FIFO模塊設(shè)計(jì)

為提高系統(tǒng)傳輸數(shù)據(jù)的穩(wěn)定性,避免因控制端和數(shù)據(jù)端傳輸速率差異造成的數(shù)據(jù)丟失現(xiàn)象,設(shè)計(jì)FIFO模塊作為數(shù)據(jù)緩沖區(qū)。

FIFO模塊連接讀寫控制端和數(shù)據(jù)總線端。讀寫控制部分由Clk、Reset_Fifo、Read、Write、Buffer_full組成,data_in[7:0]和data_out[7:0]連接數(shù)據(jù)總線。當(dāng)轉(zhuǎn)換器身份為講者時,從FIFO中取數(shù)據(jù)放入總線,若FIFO數(shù)據(jù)為空,則讀寫控制端寫入準(zhǔn)備發(fā)送的數(shù)據(jù)。當(dāng)轉(zhuǎn)換器身份為聽者時,將總線上的數(shù)據(jù)存入FIFO,若FIFO存在數(shù)據(jù),則通知讀寫控制端讀取數(shù)據(jù)。FIFO的RTL視圖如圖10(a)所示。Modelsim仿真波形如圖10(b)所示。

圖10 FIFO RTL視圖與仿真波形

3.3 內(nèi)部寄存器設(shè)計(jì)

NAT9914芯片的工作主要通過配置內(nèi)部寄存器來完成。設(shè)計(jì)中通過讀寫控制模塊對各個寄存器進(jìn)行配置,從而控制接口的數(shù)據(jù)傳輸。

設(shè)計(jì)的寄存器主要有地址寄存器、GPIB總線寄存器、GPIB狀態(tài)寄存器、接口功能寄存器、GPIB控者寄存器、讀寫控制寄存器,中斷控制寄存器。其中,中斷寄存器ISR0與聽、講功能相關(guān),其結(jié)構(gòu)如表1所示。

表1 ISR0寄存器

ISR0可讀寄存器的BI、BO、END位分別代表數(shù)據(jù)接收位、數(shù)據(jù)發(fā)送位、數(shù)據(jù)傳輸結(jié)束位。當(dāng)設(shè)備為系統(tǒng)活動控者或者講者時,BO位置1,此時可以向系統(tǒng)內(nèi)其他設(shè)備發(fā)送命令或數(shù)據(jù);當(dāng)設(shè)備為聽者時,當(dāng)數(shù)據(jù)接收寄存器接收到數(shù)據(jù)時,BI位置1;當(dāng)接收到結(jié)束符0x0A時,END位置1,結(jié)束本次數(shù)據(jù)傳輸。

3.4 GPIB數(shù)據(jù)傳輸

數(shù)據(jù)傳輸是硬件控制程序的核心部分,也是該協(xié)議轉(zhuǎn)換器要實(shí)現(xiàn)的最主要功能。

在各個子功能模塊完成的基礎(chǔ)上,構(gòu)建從UART模塊到GPIB接口模塊的數(shù)據(jù)通道。數(shù)據(jù)的傳輸主要依靠設(shè)備的聽、講功能以及讀寫控制模塊,還有FIFO存儲模塊。聽講功能控制數(shù)據(jù)傳輸?shù)姆较?,F(xiàn)IFO模塊控制數(shù)據(jù)的存取。讀寫控制模塊直接配置狀態(tài)寄存器,進(jìn)而配置GPIB的接口功能,并配合FIFO模塊完成數(shù)據(jù)的存取。在程序中設(shè)計(jì)了GPIB_Read和GPIB_Write兩個資源文件,用來實(shí)現(xiàn)GPIB的讀寫操作。在GPIB_Read模塊中,輸入輸出端口名分為GPIB接口、外部接口、FIFO模塊3部分。GPIB接口部分用來判斷當(dāng)時是否處于聽活躍狀態(tài),外部接口模塊負(fù)責(zé)產(chǎn)生數(shù)據(jù)中斷等信號,F(xiàn)IFO模塊則提示是否存在數(shù)據(jù)以及數(shù)據(jù)的存取。GPIB_Write模塊的結(jié)構(gòu)與GPIB_Read模塊基本類似。讀寫的邏輯結(jié)構(gòu)如圖11所示。

圖11 GPIB讀/寫流程圖

4 軟件驅(qū)動程序設(shè)計(jì)

4.1 VISA簡介

VISA(virtual instrument software architecture),即虛擬儀器軟件結(jié)構(gòu)[12-14]。VISA是一種通用的I/O標(biāo)準(zhǔn),提供了一套完整的、易操作的函數(shù)庫,存在于計(jì)算機(jī)系統(tǒng)內(nèi),通過軟件層與儀器建立連接。

傳統(tǒng)的儀器,不同的接口需要開發(fā)不同的驅(qū)動程序來供用戶使用,這將耗費(fèi)大量的人力物力來開發(fā)與維護(hù)。VISA獨(dú)立于接口、語言和操作系統(tǒng),采用統(tǒng)一的操作函數(shù),無論是串口、GPIB、LAN接口,都使用VISA函數(shù)來操作,體現(xiàn)了VISA的硬件無關(guān)性。統(tǒng)一的核心函數(shù)與其它無法合并的、與儀器類型相關(guān)的功能函數(shù)一起構(gòu)成了自底向上的I/O接口模型,實(shí)現(xiàn)不同類型的儀器的互操作性與兼容性,這也是VISA的最大優(yōu)點(diǎn)之一。

VISA的結(jié)構(gòu)共分為五層,資源管理層主要主要負(fù)責(zé)資源的尋址、創(chuàng)建與刪除等功能的實(shí)現(xiàn)。I/O資源層提供了底層I/O函數(shù),對硬件接口進(jìn)行讀寫等操作,該資源與傳統(tǒng)的I/O函數(shù)相似。儀器資源層主要針對不同儀器的特定功能。用戶資源層是可變層,根據(jù)用戶自己定義資源。應(yīng)用程序?qū)犹峁┯脩襞c儀器交互的窗口。

4.2 VISA驅(qū)動程序開發(fā)

本設(shè)計(jì)采用NI公司提供的VISA庫,在開發(fā)之前需安裝NI-VISA。驅(qū)動程序的一般設(shè)計(jì)流程如圖12所示。

圖12 驅(qū)動開發(fā)流程

驅(qū)動程序具體實(shí)現(xiàn)流程[15-18]如下:

1)掃描資源:首先調(diào)用viOpenDefaultRM()函數(shù)來掃描系統(tǒng)中的接口和設(shè)備資源,此后才能調(diào)用其他VISA函數(shù)。當(dāng)用戶需要查找特定的設(shè)備時,可以調(diào)用viFindRsrc()函數(shù)。

2)打開資源:通過viOpen()函數(shù)建立儀器之間的會話通道,其參數(shù)根據(jù)接口類型確定。如建立與主地址為2的GPIB接口的會話,則參數(shù)設(shè)置為GPIB0::2::INSTR。

3)讀寫操作:公用的VISA底層I/O函數(shù)有viRead()、viWrite()等;GPIB接口特殊I/O函數(shù)有的viReadSTB()、viClear()等,每個函數(shù)實(shí)現(xiàn)一種接口功能。本設(shè)計(jì)調(diào)用公用I/O函數(shù)與建立會話通道的接口進(jìn)行通信。

4)關(guān)閉資源:調(diào)用viClose()函數(shù)關(guān)閉已建立的會話通道,并清除資源。

在VC++6.0環(huán)境下測試VISA驅(qū)動程序,將VISA.H和VISATYPE.H文件拷貝到工程中,使用C語言調(diào)用相關(guān)庫函數(shù)。核心代碼部分如下所示:

int main(void){

ViSession defaultRM;

....... //定義變量

status=viOpenDefaultRM (&defaultRM);

status=viOpen(defaultRM,"ASRL4::INSTR",VI_NULL,VI_NULL,&instr);

status = viSetAttribute (instr,VI_ATTR_TMO_VALUE,5000);

....... //參數(shù)配置

status=viWrite(instr,"*IDN? ",(ViUInt32)strlen("*IDN? "),&writeCount);

status = viRead (instr,buffer,100,&retCount);

if (status!

printf (" Data read:%*s ",retCount,buffer);

}

status = viClose (instr);

status = viClose (defaultRM);}

將協(xié)議轉(zhuǎn)換器和Tek1002示波器連接,運(yùn)行該程序生成的.EXE可執(zhí)行文件,運(yùn)行測試結(jié)果如圖13所示。

圖13 VC++下VISA測試結(jié)果

4.3 驅(qū)動應(yīng)用層開發(fā)

驅(qū)動應(yīng)用層開發(fā)平臺為Visual Studio 2017,采用C#面向?qū)ο蟾呒壋绦蛟O(shè)計(jì)語言,它運(yùn)行在.NET Framework框架上。.NET Framework包括3個應(yīng)用程序模型,設(shè)計(jì)采用Windows Forms模型,它屬于.NET Framework中的GUI類庫,該模型采用控件式編程,開發(fā)難度較低。

NI-VISA提供了基于.NET的VISA函數(shù)庫,在項(xiàng)目中添加NI的NationalInstruments.Visa和Ivi.Visa函數(shù)庫可直接調(diào)用VISA函數(shù)。

應(yīng)用層開發(fā)主要分兩部分,一部分為資源搜索界面,另一部分為基本讀寫操作界面。資源搜索界面通過ResourceManager.Find(“(ASRL|GPIB|TCPIP|USB”?*INSTR))函數(shù)來搜索系統(tǒng)中所有類型的設(shè)備,并將值返回ListBox列表框中。選中資源,點(diǎn)擊OK按鈕時,執(zhí)行ResourceManager.Open函數(shù)與設(shè)備建立連接。操作界面主要由Button和TextBox兩大控件組成,讀寫等按鈕執(zhí)行基本IO操作,在控件中調(diào)用RawIO.BeginWrite()和RawIO.BeginRead()函數(shù),當(dāng)點(diǎn)擊事件發(fā)生時,則執(zhí)行讀寫函數(shù),并將返回值發(fā)送到TextBox文本框中,此外還添加了Trigger和Read STB等功能型按鈕,通過調(diào)用接口功能函數(shù)對設(shè)備進(jìn)行操控。

最終設(shè)計(jì)的用戶操作界面如圖14所示。

圖14 用戶程序界面

5 SCPI指令測試

5.1 SCPI簡介

可編程儀器標(biāo)準(zhǔn)命令,簡稱SCPI[19-20]。它是一種控制儀器的語言規(guī)范,規(guī)定了一種標(biāo)準(zhǔn)的語言結(jié)構(gòu)來控制儀器,采用ASCI字符串的形式與設(shè)備之間進(jìn)行數(shù)據(jù)的交互。

早期的儀器設(shè)備,由于沒有統(tǒng)一的程控命令標(biāo)準(zhǔn),不同的儀器在軟件上很難兼容。SCPI的出現(xiàn),給整個行業(yè)提供了一套可參考的標(biāo)準(zhǔn),完美解決了不同儀器的兼容性問題。且SCPI采用助劑符的方式,把復(fù)雜的指令縮寫成簡潔且容易記住的指令,便于用戶使用。

5.2 SCPI命令測試

測試采用對比實(shí)驗(yàn),實(shí)驗(yàn)設(shè)備使用Tek1002示波器。通過對基本指令以及示波器的數(shù)據(jù)采集等指令的測試,評估其性能。

5.2.1 公用指令測試

SCPI公用指令共39條,是所有帶GPIB接口的設(shè)備必須具備的。

公用指令測試使用自主研發(fā)的GPIB上位機(jī)和轉(zhuǎn)換器與NI控制面板和NI-GPIB-USB作比較,都發(fā)送*IDN?指令,查看其返回結(jié)果是否一致。測試結(jié)果如圖15所示。其中,圖(a)為自主研發(fā)設(shè)備返回結(jié)果,圖(b)為NI設(shè)備返回結(jié)果。

圖15 公用命令測試結(jié)果

5.2.2 性能測試

性能測試軟件采用NI公司的I/O Trace,該軟件能捕獲各函數(shù)的響應(yīng)時間,通過在同一軟件下對比自研GPIB轉(zhuǎn)換器和NI-GPIB-USB轉(zhuǎn)換器來評估該設(shè)計(jì)的設(shè)備性能。測試結(jié)果如圖16所示。圖(a)自主研發(fā)設(shè)備響應(yīng)時間,圖(b)為NI設(shè)備響應(yīng)時間。

圖16 指令響應(yīng)時間

從圖16中可以看出,自研設(shè)備在響應(yīng)*IDN?和*TST?兩個指令的時間分別為958 ms和1 252 ms,NI的響應(yīng)時間為982 ms和1 242 ms。經(jīng)對比,自研GPIB轉(zhuǎn)換器性能優(yōu)異,完全能滿足實(shí)際應(yīng)用需求。

5.3 示波器數(shù)據(jù)采集測試

GPIB接口的重要功能是采集儀器的數(shù)據(jù)。數(shù)據(jù)采集實(shí)驗(yàn)通過STM32F103開發(fā)板的DA模塊輸出波形,使用Tek1002示波器測量波形,將該設(shè)計(jì)的GPIB卡連接示波器,通過Tek公司的OpenChoiceDesktop上位機(jī)軟件連接示波器,首先發(fā)送:SELECT:CH1選擇示波器通道1,然后發(fā)送CH1:PROBE?等查詢指令查詢示波器的各種參數(shù),最后發(fā)送:CURVE?返回曲線數(shù)據(jù),并反饋到Tek公司的OpenChoiceDesktop上位機(jī)軟件上。測試結(jié)果如圖17所示。

圖17 數(shù)據(jù)采集測試結(jié)果

6 結(jié)束語

本文設(shè)計(jì)了一款以FPGA芯片為主控,通過硬件描述語言實(shí)現(xiàn)IEEE488接口的所有功能的協(xié)議轉(zhuǎn)換器。文中介紹了轉(zhuǎn)換器硬件設(shè)計(jì)、控制程序設(shè)計(jì),還詳細(xì)介紹了基于VISA的驅(qū)動程序設(shè)計(jì)流程。該設(shè)計(jì)為解決當(dāng)前市場GPIB專用芯片停產(chǎn)、轉(zhuǎn)換器價格昂貴等問題提供了一套完整的替換方案。經(jīng)測試實(shí)驗(yàn)表明,該轉(zhuǎn)換器性能穩(wěn)定、體積小,完全滿足日常測試所需,為從事相關(guān)方面研究的開發(fā)人員提供了可行性的參考案例。

猜你喜歡
寄存器聽者總線
關(guān)于CAN總線的地鐵屏蔽門控制思路論述
勞工(外二首)
飛思卡爾單片機(jī)脈寬調(diào)制模塊用法研究
口譯語體的順應(yīng)性研究
移位寄存器及算術(shù)運(yùn)算應(yīng)用
嶺南園林聲景美研究
數(shù)字電路環(huán)境下汽車控制電路信號設(shè)計(jì)
三人成虎
Q&A熱線
PCI9030及其PCI總線接口電路設(shè)計(jì)