From cfa815e255a8b60ca051e36b795c95e1920d6641 Mon Sep 17 00:00:00 2001 From: jclederman <62153423+jclederman@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:18:20 -0500 Subject: [PATCH] Add Boonton 4240 RF power meter driver (#50) * Added draft Booton 4240 RF PM driver * Tested Boonton 4240 RF PM driver --- .../lab_instruments/Boonton_4240_PM.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 lightlab/equipment/lab_instruments/Boonton_4240_PM.py diff --git a/lightlab/equipment/lab_instruments/Boonton_4240_PM.py b/lightlab/equipment/lab_instruments/Boonton_4240_PM.py new file mode 100644 index 0000000..079359b --- /dev/null +++ b/lightlab/equipment/lab_instruments/Boonton_4240_PM.py @@ -0,0 +1,41 @@ +import time +from . import VISAInstrumentDriver + +class Boonton_4240_PM(VISAInstrumentDriver): + """ Boonton 4240 (4242) Two-Channel RF Power Meter + + `Manual: `__ + """ + + def __init__(self, name="Booton 4240 PM", address=None, **kwargs): + VISAInstrumentDriver.__init__(self, name=name, address=address, **kwargs) + + def reset(self): + return self.write("*RST") + + def getID(self): + return self.query("*IDN?") + + def getFilterTime(self, channel=1): + return float(self.query(f"SENS{channel}:FILT:TIM?")) + + def setFilterTime(self, time=0.05, channel=1): + self.write(f"SENS{channel}:FILT:TIM {time}") + + # Note: this function fails for filter times beyond 1. More investigation required + def read(self, channel=1): + for i in range(3): + try: + response = self.query(f"READ{channel}:CW:POW?") + break + except: + pass + + splitted = response.split(",") + if len(splitted) == 2: + channel = int(splitted[0]) + power = float(splitted[1]) + return power + return -99.99 + + \ No newline at end of file