示波器作為電子工程師常用的測試測量儀器之一,在有些情況下,需要編程控制示波器采集數(shù)據(jù),并進(jìn)行數(shù)據(jù)處理和分析,實(shí)現(xiàn)對示波器的自動化操作完成自動測試。
有些特殊場合由于安全問題,需要把示波器放到封閉實(shí)驗(yàn)室環(huán)境下進(jìn)行測試,也需要編程控制示波器采集數(shù)據(jù)安全地完成測試任務(wù)。
實(shí)現(xiàn)對示波器的自動設(shè)置和遠(yuǎn)程采集數(shù)據(jù),成為很多前沿科學(xué)研究和實(shí)驗(yàn),以及生產(chǎn)自動化的必需環(huán)節(jié)。
由于Python免費(fèi)、開源、語法簡單、開發(fā)效率高,深受廣大工程師的喜愛。今天以實(shí)時示波器為例,介紹利用Python編程控制示波完成采集數(shù)據(jù)并顯示波形。 相應(yīng)的方法同樣適用于其它開發(fā)工具和其它測試儀器,例如采樣示波器、頻譜分析儀、任意波形發(fā)生器AWG,源表SMU,函數(shù)發(fā)生器AFG等。
利用Python編程控制示波器▽
編程前的準(zhǔn)備工作
利用Python控制儀器,需要安裝相應(yīng)的功能模塊庫才能實(shí)現(xiàn)控制儀器。下面介紹Python編程之前的準(zhǔn)備工作。
1、安裝Python
可登錄Python官方網(wǎng)站www.python.org下載Python,然后安裝Python 3.10.4新版。
2、安裝PyVISA
PyVISA是用來控制各種測量儀器的Python包,可支持GPIB、RS232、USB、Ethernet等接口??梢宰杂傻倪\(yùn)行在Windows,Linux和Mac上,適用于不同儀器廠家。PyVISA也可以通過pip命令安裝(pip install pyvisa)。
3、安裝NI-VISA
為了PyVISA可靠工作,還需要安裝一個VISA。建議安裝NI-VISA庫,可以去NI官方網(wǎng)站下載安裝。
4、接口的選擇和設(shè)置
根據(jù)儀器支持的接口,可選用GPIB、RS232、USB、Ethernet等接口來編程控制儀器,本文利用Python通過以太網(wǎng)接口編程控制示波器為例。
控制接口的選取
a. LAN
[TCPIP0::192.168.0.1::inst0::INSTR]
b. GPIB
[GPIB0::1::INSTR]
c. Serial
[serial('COM1','BaudRate',4800)]
d. USB
[USB::XXX::XXX::XXX::INSTR]
示波器和PC的設(shè)置(以LAN為例)
a. 設(shè)置示波器的IP地址 例如: 192.168.0.2
b. 設(shè)置PC的IP地址 例如: 192.168.0.1
c. 關(guān)閉示波器和PC的防火墻
d. 在PC端 ping 192.168.0.2,看是否ping通
Python控制示波器實(shí)戰(zhàn)
利用Python控制示波器,通過發(fā)送SCPI指令實(shí)現(xiàn)對示波器的控制和操作,設(shè)置示波器的參數(shù),然后采集示波器的數(shù)據(jù)并顯示。
1、調(diào)用功能模塊
利用import調(diào)用相關(guān)的功能模塊。
import time
import pyvisa
import matplotlib.pyplot as plt
import numpy as np
2、連接示波器
Python可以利用GPIB、RS232、USB、Ethernet等接口控制示波器,今天利用以太網(wǎng)口控制示波器為例。
visa_address = 'TCPIP0::192.168.0.2::inst0::INSTR'
rm = pyvisa.ResourceManager()
scope = rm.open_resource(visa_address)
print(scope.query('*idn?'))
3、設(shè)置示波器
利用Wrtie發(fā)送SCPI命令設(shè)置的參數(shù),參考示波器的編程手冊。
Reset 示波器
scope.write('*RST')
自動設(shè)置示波器
scope.write('AUTOSET EXECUTE')
設(shè)置示波器的采樣率
scope.write('HORIZONTAL:SAMPLERATE 25e9')
設(shè)置示波器運(yùn)行
scope.write('acquire:state 1')
4、讀取測量結(jié)果
先用Wrtie發(fā)送SCPI命令設(shè)置測量項(xiàng)和參數(shù),然后用Query讀取測量結(jié)果。
添加測量項(xiàng)
scope.write("MEASU:MEAS1:TYPE PERIOD")
設(shè)置測量通道
scope.write('MEASU:MEAS1:SOU CH1')
讀取測量結(jié)果
scope.query(MEASU:MEAS1:VAL?')
5、讀取波形數(shù)據(jù)
可以利用query_ascii_values讀取ASCII數(shù)據(jù),也可以利用read_raw()讀取數(shù)據(jù),還可以query_binary_values讀取讀二進(jìn)制數(shù)據(jù),今天我利用query_binary_values讀取示波器的數(shù)據(jù)為例,注意:讀取的數(shù)據(jù)還需要轉(zhuǎn)換成電壓,如何轉(zhuǎn)換電壓,請看上面的視頻。
bin_wave = scope.query_binary_values('curve?', datatype='b', container=np.array)
6、畫波形圖
利用plt把示波器采集的波形數(shù)據(jù)畫圖。
plt.plot(scaled_time, scaled_wave)
plt.title('channel 1')
plt.xlabel('time (s)')
plt.ylabel('voltage (V)')
plt.minorticks_on()
plt.show()
7、斷開儀器連接
利用close斷開與示波器通信連接。
scope.close()
rm.close()
總結(jié):本文介紹如何利用Python語言編程控制示波器采集數(shù)據(jù)并顯示波形,從而實(shí)現(xiàn)對示波器的自動化操作,完成自動測試和分析,大大提高工作效率。如果對Python編程控制示波器完整源代碼感興趣的,可在線溝通,或致電客服!