08-24-2017 06:01 AM
I need some clues how to operate pulse sweep on both channels and get data from Keithley 2612A.
One channel sweep is explained in examples of the driver.
How to measure and read data from both channels? Please help.
Solved! Go to Solution.
08-25-2017 11:49 AM
Hi Antme2017,
This is tricky to troubleshoot since National Instruments does not support most 3rd party drivers. Do you have a link to where the driver came from? Knowing the code and examples you're referring to makes it much easier to move forward.
08-26-2017 11:38 PM
Thanks.
I've started looking in Keithley forum.
If I find something let you know.
08-28-2017 03:09 PM
Hey,
In the Labview driver for the 26xx source meter there's a VI that allows the user to run TSB scripts.
something like this script that gets data from channels A and B.
--[[ Title: KE26XXB Pulsed Sweep Dual Description: This example demonstrates how to synchronize pulsed sweeps between two SMU channels on a dual channel Series 2600B SourceMeter instrument. This example performs linear sweeps but can easily be modified to perform log or list sweeps. This example also programs both SMUs to source the same levels however, this can also easily be modified for each SMU to output different levels. There are two functions contained in this example script. One function outputs pulsed voltage sweeps while the other performs pulsed current sweeps. At the conclusion of the sweeps the data is returned to the instrument console in a format that is compatible for copy and paste into Microsoft Excel. Equipment Needed: 1x Dual Channel Series 2600B SourceMeter instrument Script Functions: PulsedSweepVDual(start, stop, numPoints, pulseWidth, pulsePeriod, limitI, nplc, remoteSense) PulsedSweepIDual(start, stop, numPoints, pulseWidth, pulsePeriod, limitV, nplc, remoteSense) ]] --[[ Name: PulsedSweepVDual(start, stop, numPoints, pulseWidth, pulsePeriod, limitI, nplc, remoteSense) Description: This function performs synchronized pulsed linear voltage sweeps on dual SMU channels. Parameters: start: The voltage level of the first step in the sweep in volts stop: The voltage level of the last step in the sweep in volts numPoints: The number of points in the sweep pulseWidth: The width of the pulse in seconds pulsePeriod: The time from the start of one pulse to the start of the next pulse limitI: The current limit of the pulse in amps nplc: The measurment aperture setting in PLCs where 1 PLC = 1/60 s for 60Hz power remoteSense Set to true to enable 4-Wire (Kelvin) measurements or to false for 2-Wire measurements Notes: After calling this function you will need to press the TRIG button on the instrument's front panel to trigger the sweep to start. The code can easily be modified to trigger off other sources as well. Example Usage: PulsedSweepVDual(0, 10, 11, 1e-3, 5e-3, 0.1, 0.001, false) ]] function PulsedSweepVDual(start, stop, numPoints, pulseWidth, pulsePeriod, limitI, nplc, remoteSense) reset() -- Configure Channel A Settings --============================= smua.reset() smua.source.func = smua.OUTPUT_DCVOLTS if remoteSense == true then smua.sense = smua.SENSE_REMOTE else smua.sense = smua.SENSE_LOCAL end smua.source.autorangev = smua.AUTORANGE_OFF smua.source.rangev = math.max(math.abs(start), math.abs(stop)) smua.source.levelv = 0 -- Set the DC bias limit. This is not the limit used during the pulses. smua.source.limiti = 0.1 -- Disabling Auto-Ranging and Auto-Zero ensures accurate and consistent timing smua.measure.autozero = smua.AUTOZERO_ONCE smua.measure.autorangei = smua.AUTORANGE_OFF smua.measure.rangei = limitI smua.measure.nplc = nplc -- A timer will be used to set the measure delay and synchronize the measurement -- between the two SMUs so set the built in delay to 0. smua.measure.delay = 0 -- Prepare the Reading Buffers smua.nvbuffer1.clear() smua.nvbuffer1.collecttimestamps= 1 smua.nvbuffer2.clear() smua.nvbuffer2.collecttimestamps= 1 --============================= -- End Channel A Settings -- Configure Channel B Settings --============================= smub.reset() smub.source.func = smub.OUTPUT_DCVOLTS if remoteSense == true then smub.sense = smub.SENSE_REMOTE else smub.sense = smub.SENSE_LOCAL end smub.source.autorangev = 0 smub.source.rangev = math.max(math.abs(start), math.abs(stop)) smub.source.levelv = 0 -- Set the DC bias limit. This is not the limit used during the pulses. smub.source.limiti = 0.1 -- Disabling Auto-Ranging and Auto-Zero ensures accurate and consistent timing smub.measure.autozero = smua.AUTOZERO_ONCE smub.measure.autorangei = 0 smub.measure.rangei = limitI smub.measure.nplc = nplc -- A timer will be used to set the measure delay and synchronize the measurement -- between the two SMUs so set the built in delay to 0. smub.measure.delay = 0 -- Prepare the Reading Buffers smub.nvbuffer1.clear() smub.nvbuffer1.collecttimestamps= 1 smub.nvbuffer2.clear() smub.nvbuffer2.collecttimestamps= 1 --============================= -- End Channel B Settings -- Configure the Trigger Model --============================ -- Pressing the TRIG button on the front panel will trigger the sweep to start display.trigger.clear() -- Timer 1 controls the pulse period trigger.timer[1].count = numPoints > 1 and numPoints - 1 or 1 trigger.timer[1].delay = pulsePeriod trigger.timer[1].passthrough = true trigger.timer[1].stimulus = display.trigger.EVENT_ID -- Timer 2 controls the measurement trigger.timer[2].count = 1 -- Set the measure delay long enough so that measurements start after the pulse -- has settled, but short enough that it fits within the width of the pulse. trigger.timer[2].delay = pulseWidth - (1/localnode.linefreq)*nplc - 60e-6 trigger.timer[2].passthrough = false trigger.timer[2].stimulus = trigger.timer[1].EVENT_ID -- Timer 3 controls the pulse width trigger.timer[3].count = 1 trigger.timer[3].delay = pulseWidth trigger.timer[3].passthrough = false trigger.timer[3].stimulus = trigger.timer[1].EVENT_ID -- Configure SMUA Trigger Model for Sweep smua.trigger.source.linearv(start, stop, numPoints) smua.trigger.source.limiti = limitI smua.trigger.measure.action = smua.ENABLE smua.trigger.measure.iv(smua.nvbuffer1, smua.nvbuffer2) smua.trigger.endpulse.action = smua.SOURCE_IDLE smua.trigger.endsweep.action = smua.SOURCE_IDLE smua.trigger.count = numPoints smua.trigger.arm.stimulus = 0 smua.trigger.source.stimulus = trigger.timer[1].EVENT_ID smua.trigger.measure.stimulus = trigger.timer[2].EVENT_ID smua.trigger.endpulse.stimulus = trigger.timer[3].EVENT_ID smua.trigger.source.action = smua.ENABLE -- Configure SMUB Trigger Model for Sweep smub.trigger.source.linearv(start, stop, numPoints) smub.trigger.source.limiti = limitI smub.trigger.measure.action = smub.ENABLE smub.trigger.measure.iv(smub.nvbuffer1, smub.nvbuffer2) smub.trigger.endpulse.action = smub.SOURCE_IDLE smub.trigger.endsweep.action = smub.SOURCE_IDLE smub.trigger.count = numPoints smub.trigger.arm.stimulus = 0 smub.trigger.source.stimulus = trigger.timer[1].EVENT_ID smub.trigger.measure.stimulus = trigger.timer[2].EVENT_ID smub.trigger.endpulse.stimulus = trigger.timer[3].EVENT_ID smub.trigger.source.action = smub.ENABLE --============================== -- End Trigger Model Configuration smua.source.output = smua.OUTPUT_ON smub.source.output = smub.OUTPUT_ON -- Start the trigger model execution smua.trigger.initiate() smub.trigger.initiate() -- Sweep will not start until the TRIG button is pressed -- Wait until the sweep has completed waitcomplete() smua.source.output = smua.OUTPUT_OFF smub.source.output = smub.OUTPUT_OFF -- Print the data back to the Console in tabular format print("Time\tSMUA Voltage\tSMUA Current\tSMUB Voltage\tSMUB Current") for x=1,smua.nvbuffer1.n do -- Voltage readings are in nvbuffer2. Current readings are in nvbuffer1. print(smua.nvbuffer1.timestamps[x], smua.nvbuffer2[x], smua.nvbuffer1[x], smub.nvbuffer2[x], smub.nvbuffer1[x]) end end
Curt
08-28-2017 11:48 PM
07-17-2018 07:43 AM
When I try to run this script on a Keithley 2612A an error code states that the 'timer' cannot be set to a nil value. Am I missing anything?
07-17-2018 11:44 PM
Hi, it was almost 1 year ago. I have to check. I will try to do it ASAP.
07-18-2018 01:26 AM
Could you print the error picture please
07-18-2018 08:27 AM
I am using the code titled "KE26XXB Pulsed Sweep Dual" and receiving this error message.
07-18-2018 08:44 AM
Could you please send me a link to that code "KE26XXB Pulsed Sweep Dual"?