From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Keithley 2600 - remote pulse sweep scripts

Hi sund002,

 

Please, can you better specify the question?

 

Are you starting the measurement from the front panel of the instrument or remotely using the GPIB and some program? 

In case of controling the instrument remotely, what language do you use to create the test script - C, VB, LabView...?

 

Ivan

0 Kudos
Message 11 of 17
(4,849 Views)
i was trying to use GPIB -USB and the software Test-script buillder. i was not sure how to write the script to achieve the following: I would like to do a voltage pulse (40 Volt) duration 100 msec, and measure the corresponding current transient resonse during and after the pulse so that i can determine the current decay time. I would like to record the I-V data into either a text file or xls file. thank you if you could provide details regarding the script.
0 Kudos
Message 12 of 17
(4,839 Views)

Hi Sund0002,

 

Test Script Builder is an application developed and supported by Keithley, however if you search for it you can find tutorials on how to create scripts with TSB to control instruments. (See this tutorial for instance: https://admin.acrobat.com/_a16893448/p47921631)

 

If you have further questions on the Test Script Builder, I recommend contacting Keithley, I am sure they will be happy to help you as well.

 

Regards,

Barna D.

National Instruments. 

0 Kudos
Message 13 of 17
(4,827 Views)

Hi all,

I want to use two SMUs in Keithley 2602 to measure FET. I use channel I as a Voltage Pulse source and channel B as Voltage DC source. I wonder how to store the Current of two channel at the same time on its buffer? 

Thanks in advance.

 

0 Kudos
Message 14 of 17
(4,593 Views)

Hi Daitruong,

 

Unfortunately this question is more question to Keithley then to NI but anyway I will try to help You. As far I know 2602 can communicate with computer via GPIB/HPIB. So one way of programming is to use LabVIEW for that and communicate with 2602 based on VISA commands. The way of programming 2602 is based on sending previously prepared script to device. I see for now two possible ways how to solve Your issue:

 

1. Try to prepare script in the way to measure channel A and save to buffer then immediately measure channel B and save to buffer. Later, You can read data from buffers and send it to LabVIEW. Here the problem is whether it is possible to do that in reasonable time by Keithley 2602 - You may try to contact Keithley and ask about that.

2. You may also try to perform measurement on channel A and send back to LabVIEW then perform measurement on channel B and send back to LabVIEW. Here the limitation might be that the LabVIEW working on Windows might be not fully deterministic and when there will be some unexpected CPU load then the readings might be postponed (this method is called software timed).

 

Anyway in order to fully understand Your problem I would like to ask You what exactly application shall do and what are the time limits for that? Maybe the time delay in both above cases (range of couple of ms) might be fine for You.

 

Thanks!

 

Best Regards,

Wojciech Sommer.

Applications Engineer

National Instruments

0 Kudos
Message 15 of 17
(4,563 Views)

I don't know if this well help anyone but I use a Keithley 2401 and for some reason the remote command to turn on the output has to be the first command no matter what before any other function will work. then I can perform sweeps, etc... as expected.

0 Kudos
Message 16 of 17
(4,230 Views)

Hello,

 

I am new to TSB scripting and I have problem on re-coding TSB script to work in LabVIEW VISA environment especially with function command in script. I couldn't find best tutorial on the re-coding TSB script into LabVIEW. 

I have 2x 2651 A keithley instruments and I have TSB program. I tried to use one example file: KE2651A_Fast ADC Usage.tsp and copy/paste the code into LabVIEW VISA write string. I did different approaches and failed to generate the data as I can do with TSB that can easily generate data. I try to get LabVIEW VISA environment to generate data just like TSB could but I got various errors with some approaches and also sometimes got no errors but unable to get any data.. Also, for loop from script seems is also a problem that LabVIEW complained about..

I would appreciate any help. Once I learn how to translate any TSB scripts into LabVIEW then rest should be easy..

 

Thanks!

 

I'll copy/paste one *.tsp code example here. 

--[[
Title: Fast ADC Usage

Description: This script is designed to output pulses and
capture both the current and the voltage of the pulse using
the fast ADC of the Model 2651A High Power System SourceMeter
instrument.

Equipment Needed:
1x 2651A
]]

--[[
Name: CapturePulseV(pulseLevel, pulseWidth, pulseLimit,
numPulses)
Description:
This function outputs voltage pulses with a 1% duty cycle and
performs measurements using the fast ADC to capture each pulse in
its entirety. At the conclusion of the pulse train, the data is
returned to the instrument console in a Microsoft Excel
compatible format.

Parameters:
pulseLevel: The voltage level of the pulse in volts
pulseWidth: The width of the pulse in seconds
100e-6 <= pulseWidth <= 4e-3
pulseLimit: The current limit of the pulse in amps
numPulses: The number of pulses to output

Example Usage:
CapturePulseV(5, 300e-6, 50, 5)
]]
function CapturePulseV(pulseLevel, pulseWidth, pulseLimit, numPulses)
if (numPulses == nil) then numPulses = 1 end

-- Configure the SMU
reset()
smua.reset()
smua.source.func = smua.OUTPUT_DCVOLTS
smua.sense = smua.SENSE_REMOTE
smua.source.rangev = pulseLevel
smua.source.levelv = 0 -- The bias level
smua.source.limiti = 5 -- The DC Limit
smua.measure.autozero = smua.AUTOZERO_ONCE

-- Use a measure range that is as large as the biggest
-- possible pulse
smua.measure.rangei = pulseLimit
smua.measure.rangev = pulseLevel

-- Select the fast ADC for measurements
smua.measure.adc = smua.ADC_FAST

-- Set the time between measurements. 1us is the smallest
smua.measure.interval = 1e-6

-- Set the measure count to be 1.25 times the width of the pulse
-- to ensure we capture the entire pulse plus falling edge.
smua.measure.count =
(pulseWidth / smua.measure.interval) * 1.25

-- Prepare the reading buffers
smua.nvbuffer1.clear()
smua.nvbuffer1.collecttimestamps = 1
smua.nvbuffer1.collectsourcevalues = 0
smua.nvbuffer2.clear()
smua.nvbuffer2.collecttimestamps = 1
smua.nvbuffer2.collectsourcevalues = 0
-- Can't use source values with async measurements

-- Configure the Pulsed Sweep setup
-----------------------------------
-- Timer 1 controls the pulse period
trigger.timer[1].count = numPulses - 1
-- -- 1% Duty Cycle
trigger.timer[1].delay = pulseWidth / 0.01
trigger.timer[1].passthrough = true
trigger.timer[1].stimulus = smua.trigger.ARMED_EVENT_ID

-- Timer 2 controls the pulse width
trigger.timer[2].count = 1
trigger.timer[2].delay = pulseWidth - 3e-6
trigger.timer[2].passthrough = false
trigger.timer[2].stimulus =
smua.trigger.SOURCE_COMPLETE_EVENT_ID


-- Configure SMU Trigger Model for Sweep/Pulse Output
-----------------------------------------------------
-- Pulses will all be the same level so set start and stop to
-- the same value and the number of points in the sweep to 2
smua.trigger.source.linearv(pulseLevel, pulseLevel, 2)
smua.trigger.source.limiti = pulseLimit
smua.trigger.measure.action = smua.ASYNC
-- We want to start the measurements before the source action takes
-- place so we must configure the ADC to operate asynchronously of
-- the rest of the SMU trigger model actions

-- Measure I and V during the pulse
smua.trigger.measure.iv(smua.nvbuffer1, smua.nvbuffer2)

-- Return the output to the bias level at the end of the pulse/sweep
smua.trigger.endpulse.action = smua.SOURCE_IDLE
smua.trigger.endsweep.action = smua.SOURCE_IDLE
smua.trigger.count = numPulses
smua.trigger.arm.stimulus = 0
smua.trigger.source.stimulus = trigger.timer[1].EVENT_ID
smua.trigger.measure.stimulus = trigger.timer[1].EVENT_ID
smua.trigger.endpulse.stimulus = trigger.timer[2].EVENT_ID
smua.trigger.source.action = smua.ENABLE


smua.source.output = 1
smua.trigger.initiate()
waitcomplete()
smua.source.output = 0

PrintPulseData()
end

 

function PrintPulseData()
print("Timestamp\tVoltage\tCurrent")
  for i=1, smua.nvbuffer1.n do
  print(string.format("%g\t%g\t%g",
            smua.nvbuffer1.timestamps[i],
            smua.nvbuffer2[i],
            smua.nvbuffer1[i]))
  end
end







0 Kudos
Message 17 of 17
(3,891 Views)