Skip to content

Commit 33f9ff8

Browse files
authored
Merge pull request #7942 from trlemon/trlemon/enable-4probe-measurement-on-keithley-2600
Add param to enable four-wire measurement on Keithley 2600 driver.
2 parents 560a9ee + 2a22981 commit 33f9ff8

3 files changed

Lines changed: 65 additions & 3 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add parameter to Keithley2600 driver to enable/disable four-wire measurements.

docs/examples/driver_examples/Qcodes example with Keithley 2600.ipynb

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
},
1111
{
1212
"cell_type": "code",
13-
"execution_count": 1,
13+
"execution_count": null,
1414
"metadata": {},
1515
"outputs": [],
1616
"source": [
1717
"import qcodes as qc\n",
18-
"from qcodes.dataset import do0d, initialise_database, new_experiment, plot_dataset\n",
18+
"from qcodes.dataset import do0d, do1d, initialise_database, new_experiment, plot_dataset\n",
1919
"from qcodes.instrument_drivers.Keithley import Keithley2614B"
2020
]
2121
},
@@ -182,6 +182,53 @@
182182
"print(f\"Measured one current value: {curr} A\")"
183183
]
184184
},
185+
{
186+
"cell_type": "markdown",
187+
"metadata": {},
188+
"source": [
189+
"## Four-probe measurement \n",
190+
"\n",
191+
"Enabling four-probe measurements is simple."
192+
]
193+
},
194+
{
195+
"cell_type": "code",
196+
"execution_count": null,
197+
"metadata": {},
198+
"outputs": [],
199+
"source": [
200+
"# Select channel to work with\n",
201+
"smub = keith.smub\n",
202+
"\n",
203+
"# Set up for four-probe measurement\n",
204+
"smub.mode(\"current\") # Source current, measure voltage\n",
205+
"smub.nplc(1.0)\n",
206+
"smub.limitv(20)\n",
207+
"smub.source_autorange_i_enabled(True)\n",
208+
"smub.measure_autorange_v_enabled(True)\n",
209+
"\n",
210+
"# Set sense mode\n",
211+
"smub.four_wire_measurement(True)\n",
212+
"\n",
213+
"# Make sure output is enabled\n",
214+
"smub.output(True)\n",
215+
"\n",
216+
"# Sweep parameters\n",
217+
"i_start = 0 # A\n",
218+
"i_stop = 0.1e-6 # A (0.1 µA)\n",
219+
"n_points = 101\n",
220+
"settle_delay = 0.001\n",
221+
"\n",
222+
"# Take measurements\n",
223+
"data, _, _ = do1d(smub.curr, i_start, i_stop, n_points, settle_delay, smub.volt)\n",
224+
"\n",
225+
"# Set params to safe values\n",
226+
"smub.curr(0)\n",
227+
"smub.output(False)\n",
228+
"\n",
229+
"plot_dataset(data)"
230+
]
231+
},
185232
{
186233
"cell_type": "markdown",
187234
"metadata": {},

src/qcodes/instrument_drivers/Keithley/_Keithley_2600.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import struct
55
import warnings
66
from enum import StrEnum
7-
from typing import TYPE_CHECKING, Any, Literal
7+
from typing import TYPE_CHECKING, Any, Literal, Self
88

99
import numpy as np
1010
import numpy.typing as npt
@@ -433,6 +433,20 @@ def __init__(self, parent: Instrument, name: str, channel: str) -> None:
433433
vals=vals.Numbers(0.001, 25),
434434
)
435435
"""Number of power line cycles, used to perform measurements"""
436+
437+
self.four_wire_measurement: Parameter[bool, Self] = self.add_parameter(
438+
"four_wire_measurement",
439+
label="Four-wire (remote) sense mode",
440+
get_cmd=f"{channel}.sense",
441+
get_parser=float,
442+
set_cmd=f"{channel}.sense={{}}",
443+
val_mapping=create_on_off_val_mapping(on_val=1, off_val=0),
444+
docstring="Enables or disables four-wire (remote) sense mode. "
445+
"When enabled, voltage is measured at the DUT using "
446+
"separate sense leads, eliminating lead resistance errors.",
447+
)
448+
"""Enable or disables four-wire (remote) sense mode."""
449+
436450
# volt range
437451
# needs get after set (WilliamHPNielsen): why?
438452
self.sourcerange_v: Parameter = self.add_parameter(

0 commit comments

Comments
 (0)