Python示例:使用16-bit垂直分辨率的SDG2000X / SDG6000X構(gòu)建任意波形
鼎陽科技SDG2000X和SDG6000X具有16-bit垂直分辨率。它提供了多達(dá)65,535個(gè)離散電壓等級(jí),覆蓋了輸出電壓的整個(gè)范圍(高壓負(fù)載為20
Vpp),本文將應(yīng)用Python
2.7和PyVISA1.8來創(chuàng)建一個(gè)斜坡波形,這個(gè)斜坡波形由通道1輸出的0到65535的最低有效位的步長合成。
2、正文
鼎陽科技SDG2000X和SDG6000X具有16-bit垂直分辨率。它提供了多達(dá)65,535個(gè)離散電壓等級(jí),覆蓋了輸出電壓的整個(gè)范圍(高壓負(fù)載為20 Vpp),通過信號(hào)源輸出的微小變化波形可有效測(cè)試A / D轉(zhuǎn)換和其他測(cè)量系統(tǒng)。
本文將應(yīng)用Python 2.7和PyVISA 1.8來創(chuàng)建一個(gè)斜坡波形,這個(gè)斜坡波形由通道1輸出的0到65535的最低有效位的步長合成。
SDG2000X和SDG6000X還實(shí)現(xiàn)了TrueArb功能,支持輸入特定的采樣率并且確保逐點(diǎn)輸出存儲(chǔ)器中任意波形的每一個(gè)波形數(shù)據(jù)點(diǎn),可精確地生成低抖動(dòng)的任意波形。
注意:用戶需要改變機(jī)器的ID來匹配連接特定的儀器。建議在打開儀器輸出之前就設(shè)置好振幅和其他參數(shù)。
下圖是設(shè)置好信號(hào)源參數(shù)并打開通道1輸出的圖片:
圖1
下圖是示波器捕獲信號(hào)源輸出信號(hào)的界面顯示:
圖2
點(diǎn)擊這個(gè)鏈接可以下載Zipped 版本的.PY文件:
https://www.siglentamerica.com/wp-content/uploads/2018/03/SiglentSDG16BBitSteps.zip
附這段程序的文本:
##
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
import visa #Uses PyVISA 1.8 and NI-VISA runtime Engine 15.5
import time
import binascii
#設(shè)備的USB
rm = visa.ResourceManager()
device = rm.open_resource(‘USB0::0xF4EC::0x1101::SDG6XBAQ1R0071::INSTR’) #CHANGE TO MATCH YOUR INSTRUMENT ID
#Little endian, 16位2的補(bǔ)碼
# 創(chuàng)建一個(gè)波形
wave_points = []
for pt in range(0x8000, 0xffff, 1):
wave_points.append(pt)
wave_points.append(0xffff)
for pt in range(0x0000, 0x7fff, 1):
wave_points.append(pt)
def create_wave_file():
#創(chuàng)建要給文件
f = open(“wave1.bin”, “wb”)
for a in wave_points:
b = hex(a)
#打印波形
b = b[2:]
len_b = len(b)
if (0 == len_b):
b = ‘0000’
elif (1 == len_b):
b = ‘000’ + b
elif (2 == len_b):
b = ’00’ + b
elif (3 == len_b):
b = ‘0’ + b
b = b[2:4] + b[:2] #將big-endian改為little-endian
c = binascii.a2b_hex(b) #十六進(jìn)制整數(shù)到ASCii編碼的字符串
f.write(c)
f.close()
def send_wave_data(dev):
#將波形1文件發(fā)送到設(shè)備
f = open(“wave1.bin”, “rb”) #wave1.bin 是要被發(fā)送的波形
data = f.read()
print (“write bytes:”,len(data))
dev.write_raw(“C1:WVDT WVNM,wave1,FREQ,2000.0,TYPE,8,AMPL,4.0,OFST,0.0,PHASE,0.0,WAVEDATA,%s” % (data))
#”X” series (SDG1000X/SDG2000X/SDG6000X/X-E)
dev.write(“C1:ARWV NAME,wave1”)
f.close()
if __name__ == ‘__main__’:
create_wave_file()
send_wave_data(device)
device.write(“C1:SRATE MODE,TARB,VALUE,333333,INTER,LINE”) #Use TrueArb and fixed sample rate to play every point
###
評(píng)論