# -*- coding: utf-8 -*- """ Control de un osciloscopio Tektronix de la serie TBS1052B-EDU desde una PC via puerto USB. Ejemplo basico. Para mas informacion consultar el manual: "TBS1000-EDU Programmer Manual" que se encuentra en la pagina web de Tektronix y de la materia. """ import pyvisa as visa import time import os import numpy as np from IPython import get_ipython # Colocar la ruta de la carpeta con los archivos entre r' ': os.chdir (r'G:\Mi unidad\Labo 3 1er cuat 2022\Clase 04 19\Mediciones') ''' Descomentar la línea que corresponda. Si quieren que las figuras aparezcan en la terminal: inline Si quieren que las figuras aparezcan en una ventana emergente: qt5 ''' #get_ipython().run_line_magic('matplotlib', 'inline') get_ipython().run_line_magic('matplotlib', 'qt5') #%% rm = visa.ResourceManager() instrumentos = rm.list_resources() print(instrumentos) # Esto lista todos los dispositivos disponibles, uno de los cuales # deberia ser "USB0::0x0699::0x0368::C017044::INSTR", donde los terminos # indican "puerto::marca::modelo::nro_de_serie" del instrumento. # Elijo el elemento que corresponde en instrumentos #Con ese nombre abro el vinculo con el osciloscopio osc=rm.open_resource(instrumentos[1]) # Pide indentificacion print(osc.query('*IDN?')) #osc=rm.open_resource('USB0::0x0699::0x0363::C065093::INSTR') #Con ese nombre abro el vinculo con el generador gen=rm.open_resource(instrumentos[0]) # Pide indentificacion print(gen.query('*IDN?')) #%% #fijar los límites y el paso para el barrido en frecuencias frec = 1#fija el tiempo entre mediciones #float(input("Introduzca la frecuencia de muestreo en Hz: ")) frec1 = 10.0 #float(input("Introduzca la frecuencia minima en Hz: ")) frec2 = 10000.0 #float(input("Introduzca la frecuencia maxima en Hz: ")) #paso = float(input("Introduzca el paso en Hz: ")) N=100 #int(input("Introduzca el número de mediciones: ")) datos=[] #Rampa logaritmica de frecuencias frecuencias=np.geomspace(frec1,frec2,N) print(frecuencias) datos=[] escalav1=float(osc.query('CH1:SCAle?') ) escalav2=float(osc.query('CH2:SCAle?') ) osc.write('MEASU:MEAS3:SOURCE2') osc.write('MEASU:MEAS3:TYPE PHAse') # Rampa logaritmica de frequencias frecuencias = np.geomspace(frec1, frec2, N) for freq in frecuencias: gen.write('SOURCE1:FREQ %f' % freq) time.sleep(1/frec) osc.write('MEASUrement:IMMed:SOURCE CH1; TYPe PK2pk') amplitudCh1=float(osc.query('MEASU:IMMed:VALue?')) errampCh1=0.03*amplitudCh1+escalav1*10/255 osc.write('MEASUrement:IMMed:SOURCE CH2; TYP PK2pk') amplitudCh2=float(osc.query( 'MEASU:IMMed:VALue?')) errampCh2=0.03*amplitudCh2+escalav2*10/255 Trans= amplitudCh1/amplitudCh2 errTran=(errampCh1/amplitudCh1+errampCh2/amplitudCh2)*Trans fase=osc.query_ascii_values('MEASU:MEAS3:VAL?')[0] time.sleep(2) #errfase=estimen el error de la fase frCh1Ch2Tfa= [freq, amplitudCh1,amplitudCh2,Trans,errTran,fase] datos.append(frCh1Ch2Tfa) print(datos) A = np.array(datos) osc.close() #cerramos la comunicación gen.close() del(osc) #borramos el objeto del(gen) #%% nombre = input("Indique el nombre del archivo a guardar: ") np.savetxt(str(nombre), A) import matplotlib.pyplot as plt plt.close("all") fig, ax1 = plt.subplots() ax1.plot(A[:,0], A[:,3],'.-g') ax1.set_ylabel('Transferencia') ax1.set_xlabel('Frecuencia (Hz)'); ax2=ax1.twinx() ax2.plot(A[:,0], A[:,5],'.-r') ax2.set_ylabel('fase ', color='r') plt.show()