# -*- coding: utf-8 -*- """ @author: Nico Torasso """ import time import datetime import pyvisa as visa import numpy as np #%%-----------------------------Inicializar osciloscopio------------------------------------------ # Lo tienen que cambiar de acuerdo a lo que tengan conectado (installar NI VISA y #TEK VISA). rm = visa.ResourceManager() instrumentos = rm.list_resources() print(instrumentos) # Inicio comunicación con osciloscopio osci = rm.open_resource(instrumentos[1]) print('Osciloscopio:', osci.query('*IDN?')) # Inicio comunicación con generador fungen = rm.open_resource(instrumentos[0]) print('Datos del gnerador:',fungen.query('*IDN?')) #%% ---------------------------- Funciones ------------------------------------------------------- # Pide la configuración del osciloscopio #xze,xin=osci.query_ascii_values('WFMPRE:XZE?;XIN?',separator=';') #conf. base de tiempo #yze1,ymu1,yoff1=osci.query_ascii_values('WFMPRE:CH1:YZE?;YMU?;YOFF?',separator=';') #conf. vertical canal 1 #yze2,ymu2,yoff2=osci.query_ascii_values('WFMPRE:CH2:YZE?;YMU?;YOFF?',separator=';') #conf. vertical canal 2 ### Modo de transmision: Binario (osea, la onda digitalizada) #osci.write('DAT:ENC RPB') #osci.write('DAT:WID 1') #%% ---------------------------------Mediciones--------------------------------------- # Nombre del archivo donde se guardaran los datos med_Vin = [] med_Vout = [] # Parámetros del barrido frec1, frec2, N = 10, 100, 5 frecuencias = np.geomspace(frec1, frec2, N) # espcaido logaritmico #frecuencias = np.linspace(frec1, frec2, N) # espciado lineal espera = 2 # Tiempo de espera entre mediciones for freq in frecuencias: #print('Medicion: ', n) fungen.write('SOURCE1:FREQ %f'%freq) time.sleep(espera) osci.write('MEASUrement:IMMed:SOURCE CH1; TYP CRMs') amplitudCH1 = osci.query_ascii_values('MEASU:IMMed:VALue?')[0] osci.write('MEASUrement:IMMed:SOURCE CH2; TYP CRMs') amplitudCH2 = osci.query_ascii_values('MEASU:IMMed:VALue?')[0] med_Vin.append(amplitudCH1) med_Vout.append(amplitudCH2) datos = np.transpose(np.array([med_Vin, med_Vout])) nombre_temporal = "temp_%s.txt"%str(datetime.datetime.now())[:-7].replace(":","").replace("-","") np.savetxt(nombre_temporal, datos) print(datos) #%% print('Fin de las mediciones. Cerrando comunicacion con el osciloscopio...') osci.close() fungen.close() print('Comunicacion con el osciloscpio y generador terminada.') #%% osci.query('MEASUREMENT?') osci.query('*IDN?') SECdiv_s = [5E-9, 10E-9, 25E-9, 50E-9, 100E-9, 250E-9, 500E-9, 1E-6, 2.5E-6, 5E-6] osci.write('HORizontal:SECdiv 0.1') """ Otros comandos útiles #le pregunto la freq fungen.query('FREQ?') #le seteo la freq fungen.write('FREQ 2000') fungen.query('FREQ?') #le pregunto la amplitud fungen.query('VOLT?') #le seteo la amplitud fungen.write('VOLT 2') fungen.query('VOLT?') #le pregunto si la salida esta habilitada fungen.query('OUTPut1:STATe?') #habilito la salida fungen.write('OUTPut1:STATe 1') fungen.query('OUTPut1:STATe?') #le pregunto la impedancia de carga seteada fungen.query('OUTPUT1:IMPEDANCE?') #leo las curvas como datos binarios osci.write('DAT:SOU CH1' ) data1=osci.query_binary_values('CURV?', datatype='B',container=np.array) osci.write('DAT:SOU CH2') data2=osci.query_binary_values('CURV?', datatype='B',container=np.array) #transformo los datos tiempo = xze + np.arange(len(data1)) * xin #tiempos en s data1V = (data1-yoff1)*ymu1+yze1 #tensión canal 1 en V data2V = (data2-yoff2)*ymu2+yze2 #tensión canal 2 en V mediciones = [tiempo,data1V,data2V] np.savetxt(filename, np.transpose(mediciones)) filename = nombre + str(freq) + ' %i.csv'%n """