Skip to content

Instantly share code, notes, and snippets.

@amarvutha
Last active January 3, 2016 22:39
Show Gist options
  • Save amarvutha/8529502 to your computer and use it in GitHub Desktop.
Save amarvutha/8529502 to your computer and use it in GitHub Desktop.
Python interface and utility functions for SR850 lock-in amplifier.
# Talk to SR850 lockin amplifier
# version 1, 2014-01-20
# Amar
import visa
import numpy as np
from datetime import date
import time
class LIA(visa.SerialInstrument):
# Lock-in amplifier, SR850
def __init__(self,portName):
visa.SerialInstrument.__init__(self,portName)
self.timeout = 3
self.id = self.ask("*IDN?")
def characterize(self):
warnings = ""
print self.id
print "Sensitivity = ", self.ask("SENS?")
print "Reserve = ", self.ask("RSRV?")
if self.ask("RSRV?")!="0": warnings+= "** Warning! Dynamic reserve is not 0 dB ** \n"
print "Time constant = ", self.ask("OFLT?")
print "Traces = ", self.ask("TRCD?1"), self.ask("TRCD?2"), self.ask("TRCD?3"), self.ask("TRCD?4")
FMOD = self.ask("FMOD?")
if FMOD == "0": FMODString = "internal"
elif FMOD == "1": FMODString = "internal sweep"
elif FMOD == "2": FMODString = "external"
print "Ref. source = ", FMODString
print "Ref. frequency = ", self.ask("FREQ?")
print "Ref. phase = ", self.ask("PHAS?")
print "Ref. sine level = ", self.ask("SLVL?")
print
print warnings
print
def setf(self,fi):
self.write("FREQ " + `fi`)
def setphase(self,p):
self.write("PHAS " +`p`)
def getAverage(self,channel=1,N=400):
# channel #s: 1 = X, 2 = Y, 3 = R, 4 = Theta
S = []
for i in range(N): S.append( float(self.ask("OUTP?" + `channel`)) )
S_avg = np.average(S)
S_std = np.std(S)
return S_avg, S_std
def scanP(self,f,channel=1,N=100,std=False):
# channels: 1 = X, 2 = Y, 3 = R, 4 = Theta
output, err = [], []
for fi in f:
self.setf(fi)
print self.ask("FREQ?"),
x = []
for i in range(N): x.append( float(self.ask("OUTP?"+`channel`)) )
x_avg = np.average(x)
output.append( x_avg )
x_std = np.std(x)
err.append( x_std )
if std: return output, err
else: return output
def scanR(self,f,trace=1,N=100,std=False):
# traces: 1,2,3,4
output, err = [], []
for fi in f:
self.setf(fi)
print self.ask("FREQ?"),
x = []
for i in range(N): x.append( float(self.ask("OUTR?"+`trace`)) )
x_avg = np.average(x)
output.append( x_avg )
x_std = np.std(x)
err.append( x_std )
if std: return output, err
else: return output
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment