2017-01-23 14 views
0

Мне нужно загрузить сигнал чирпа, показанный на рис. 1, в генератор волн (Agilent Technologies, 33621A).Загрузите и прочитайте сигнал Arb в генератор волн, используя python и usbtmc в linux?

Fig 1: Chirp Signal

Код, используемый для генерации Chirp Signal

кода для привода генератора волн с помощью USBTMC: Sample code to call the built-in arb wafeform SINC in Burst Mode, где imported instrument.

Я использовал следующее list of commands, чтобы создать образец кода.

Вопрос в том, как загрузить созданный сигнал чирпа в генератор волн?

ответ

0

Я решил эту проблему с помощью hognala (ведущий инженер Connectivity Support)

import instrument 
import time 
from scipy import signal 
from scipy.signal import chirp 
import scipy as sp 
import numpy as np 
import array 
import matplotlib.pyplot as plt # import matplotlib.pyplot as plot 
### CHIRP 
fs = 10e6;fc= 50e6;dt = 1e-6;ts = 1e9; # GigaSamples/Second 
N = ts/1e6;step = 1./N; # N Samples in MicroSecond 
t = np.arange(0,1+step,step)*dt; 
# CHIRP 
chirp_w = chirp(t, f0=fs, f1=fc, t1=np.max(t), method='linear'); 
# TUKEY 
tukey_w = signal.tukey(len(chirp_w)); 
# TUKEY*CHIRP 
chirp_tukey_w = tukey_w*chirp_w; 
######Waveform Genertor 
wavegen = instrument.usbtmc("/dev/usbtmc2"); 
# Drive the Wave Generator 
wavegen.write("*IDN?"); 
print wavegen.read(100); 
wavegen.write('*RST;*CLS;*OPC?') #reset instrument 
time.sleep(2) #wait 2 seconds for the reset to complete 
wavegen.read(1000) #read *OPC? response 
wavegen.write('SOUR1:DATA:VOL:CLE') #clear volatile waveforms 
wavegen.write('SOUR1:FUNC ARB') #tell the instrument to use the arb feature 
dataString = "DATA:ARB CHIRP" 
for datapoint in chirp_tukey_w : 
dataString +=","+ str(datapoint) 
wavegen.write(dataString) 
wavegen.write('SOUR1:FUNC:ARB CHIRP') 
#set some parameters for the arb and output it 
wavegen.write('SOUR1:VOLT 2.5') # 
wavegen.write('SOUR1:VOLT:OFFS 0') 
wavegen.write('OUTP1:LOAD 50') 
wavegen.write('SOUR1:FUNC:ARB:SRAT 1e9') 
wavegen.write('SOUR1:BURS:STAT ON') #need to set burst rate before turning on 
wavegen.write('SOUR1:BURS:INT:PER 20e-6') 
wavegen.write('OUTP1 ON') 
wavegen.write('MMEM:STORE:DATA "INT:\CHIRP.arb"')‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 

Примечания для новых пользователей:

  • мин/макс сигнала АРБ только от +1 до -1
  • минимум 32 точек (33600 серии) и до 1000000 точек, если вы будет использовать меньше 32, вы будете иметь ошибку «+882, отн: сегмент слишком маленький»
  • вы можете найти больше примеров в http://literature.cdn.keysight.com/litweb/pdf/33500-90901.pdf?id=2197440 странице 241.
  • к см. сообщение об ошибке в генераторе сигналов, нажмите: «Система -> Справка -> 2. Просмотр очереди ошибок удаленной команды». (Список сообщений об ошибках начинается на стр. 448.)
1

USBTMC является USB тест & измерения класса. командами являются команды SCPI. драйвер системы водителя, который должен быть загружен, - usb_tmc (http://lxr.free-electrons.com/source/drivers/usb/class/usbtmc.c), проверьте это на выходе dmesg после подключения в устройство. генератор wavefrom должен появиться в /dev/usbtmcx или /dev/ttySx (заменить й с номером на вашей системе)

Настройка интерфейса

Последних ядер Linux поддерживают USBTMC из коробки. Подключите свой прибор и проверьте, существует ли /dev/usbtmc*. Установите соответствующие разрешения /dev/usbtmc*

Открытый интерфейс USB инструмент t0 = usbtmc('/dev/usbtmc0')

записи слушателю usbtmc_write(t0, '*IDN?')

Блокировка чтения вызов [двоичный для чтения], возвращает uint8 array data = usbtmc_read(t0, 10000) Преобразовать uint8 массив в строку, символ (данные)

закрыть usbtmc сеанс usbtmc_close(t0)

http://wiki.octave.org/Instrument_control_package (не питон октав, только чтобы показать основное использование)

в питоне он похож, посмотреть http://scruss.com/blog/tag/usbtmc/

первого чек dmesg, что водитель usb_tmc загружается при подключении Agilent в системе и проследуйте инструкции по https://github.com/python-ivi/python-usbtmc (создать правило udev, ..., проверьте, если появляется/DEV/usbtmc0, ...)

, если все в порядке записи простой тестовый скрипт, чтобы увидеть, если Аджилент отвечает

import usbtmc 
instr = usbtmc.Instrument(2391, 5973) // the 2391 and 5973 are USB idVendor and idProduct of the Agilent MSO7104A converted to decimal 
print(instr.ask("\***IDN?")) 
# returns 'AGILENT TECHNOLOGIES,MSO7104A,MY********,06.16.0001' 

тогда вы пишете питон «драйвер», который отображает стандартный TMC команду питон функции (read(), write(), ...), как usbtmc.py в https://gist.github.com/pklaus/2597049. у вас это есть в here

очень рудиментарный сценарий управления генератором сигналов, который является объектом: //markjones112358.co.Н.З./проекты/Python-Controlled-Function-генератор/

, если вы хотите установить частоту вы пишете команду SCPI FREQ затем целевого значения

freq = 1000 
write("FREQ %f" % freq) 

, если вы хотите установить амплитуда вы пишете команду VOLT затем целевого значения

amplitude = 5 
write("VOLT %f" % amplitude) 

сложная часть создания и загрузки двоичного файла АРБ

вы не можете загрузить Аджилент с Numpy матрицы непосредственно, потому что он принимает только специальные двоичные файлы, так что вы должны преобразовать матрицу ЛЧМ в двоичный файл см. http://cp.literature.agilent.com/litweb/pdf/E4400-90627.pdf страница 42, . Могу переводить пример на странице 62, чтобы питон, чтобы сгенерировать двоичные АРБЫ файл

при создании формы сигнала двоичного файла АРБ вы можете передать его с помощью операции ИМТПА записи https://community.keysight.com/thread/20217 (в C#)

//Downloading 
    oFio.WriteIEEEBlock("SOURce1:DATA:ARBitrary testarb,",z,true); binary write 

переведенных в Python при использовании драйвера питона, как и выше, это может быть

binary_write("SOURce1:DATA:ARBitrary testarb,",z,true); (двоичная запись)

см http://rfmw.em.keysight.com/spdhelpfiles/33500/webhelp/US/Content/__I_SCPI/DATA_Subsystem.htm

(в руководстве пользователя http://cp.literature.agilent.com/litweb/pdf/33220-90002.pdf на страницах 234 и далее также резюме соответствующего ИМТПА команд, поиск сети для «AGILENT записи ARB»)

в https://de.mathworks.com/company/newsletter/articles/downloading-a-custom-waveform-to-an-arbitrary-waveform-generator.html является MATLAB набором инструментов с именем Quick-Control Генератор функций в Instrument Control Toolbox, что решить эту проблему

+0

Ничего себе, это один из самый подробный ответ, который я когда-либо получал. Большое спасибо @ralf htp. –

+0

Надеюсь, это правильно, я узнал, отвечая :) –