03-21-2021 08:08 PM
Hi all,
I am trying to initialize a measurement on the Keithley 2636A SMU, so that the measurement is done by the instrument and data points stored in the instrument SMU buffer. I only want to use LabView to download the data trace (i.e. multiple measurements saved in the SMU buffer) via GPIB cable to my computer once the measurement is complete.
I want the instrument to carry out the measurements (continuous sampling), instead of triggering for single measurements through LabView. This way, speed, sampling rate, and # of total measurements of my experiment are not limited by how fast the LabView trigger loop is run, or the buffer size of LabView/GPIB.
With this process flow: 1. initialize instrument and measurement parameters, 2. initialize buffer to store multiple measured data points (e.g. 100 measurements) 3. open SMU output, 4. trigger instrument to carry out the multiple measurements (100 samples) 5. print the buffer data range out to an excel file on the computer, this is the code that I wrote (at end of this note).
After some troubleshooting on my end, I realize that there is no issue initializing the SMU & measurement (first half of code doing that is fine), but when I use the BUFFER VIs in the Keithley instrument driver lib, I get an error. I was running into errors using the CONFIG BUFFER MODE VI (which is why I am not using that VI anymore in the code). Instead I use the "CREATE READING BUFFER" VI to create a buffer of size 100. And then use "CONFIG READING BUFFER DATA CHARACTERISTICS" to define my buffer.
This is the error I receive:
(Error -1074000000)
I am not sure if this is because I am not using the BUFFER VIs incorrectly, or if the trigger VI I use to call and initiate measurements is not doing any measurements (hence, the "empty buffer"). How do I call a trigger VI so that the instrument knows how many samples to store in the buffer before stopping measurement?
Please do share if you all have any thoughts on this! Whether I am using the buffer VIs incorrectly or the trigger VI is not filling up the buffer like I think?
Thanks a lot!
Snippet of trigger VI and buffer initialization. Complete VI attached.
(P.S.) The issue is not that I am not allowing enough time for the measurement after triggering (and before calling the Print Buffer VI. I tried putting a 2 minute delay there, but that does not help
03-22-2021 06:14 AM
03-22-2021 01:06 PM
Yes, you are right.
I understand that the trigger VI is not initiating a measurement. This is why my buffer is probably empty.
To initiate the measurement I use the following measurement VIs, "CONFIG MEASUREMENT CHARACTERISTICS" followed by "READ MEASUREMENT (Voltage)" VI.
But now, I get a different error:
It is a different error, but I think it is still because the measurement VIs are not doing what I think they are doing. Even though, in this program, I am trying to do a single point measurement and print it.
(The start and end index of the "Print Buffer" VI are 1 by default. The measurement count of the Voltage Measurement VI is 1 by default. So if this VI takes 1 measurement (as I would expect), then the print buffer should be able to print that 1 value at least without issues.
I feel like I am using the correct VI to do the measurement this time. So not sure what the issue is here.
P.S. (As soon as I run the LabView program, an error is displayed across my physical 2636A instrument; "TSP syntax Error -285 at line 1, unexpected symbol near = sign". This error, however, does not show on the LabView panel at all. Is this error preventing the measurement from executing? )
Edited VI using measurement VIs to initiate measurement attached to this message.
03-22-2021 03:17 PM
Hi
Did you look at
C:\Program Files (x86)\National Instruments\LabVIEW 2020\instr.lib\Keithley 2600 Series\Examples\Keithley 2600 Series Read Pulsed Voltage Measurement.vi
That seems to work and is much easier to understand.
you can control this with e.g. a sinewave or a block.
PS I have LV2020 installed, your version uses probably the same path except where the LabVIEW version is placed.
03-22-2021 06:35 PM
Thanks Albert,
I just ran this example (pulse I measure V) program on my 2636A instrument, it works great.
My only concern is,
1. Can I use this with DC current (supply DC current, but measure V in pulses)
2. Again, I am not sure if the pulse V measurement VI is for higher speed sampling, with long durations. And my end goal here is a 0.1 second sampling interval, and at least 10 - 20 minutes of data. 0.1 s sampling interval, and sweep points >> 10 (given in the example) or 100.
For this end goal, I am not sure how this VI works..
I have been doing experiments (for > 18 minutes) at high sampling rates on my instrument 2636A since forever. Just using the physical front panel of 2636 to set up the buffer and initiating a measurement in it. The idea here was to simply do the same thing with LabView on software instead of the front panel buttons.
(Since I have been having issues downloading a saved & sampled buffer to my computer/USB)
Do you think I should give up on the buffer VIs and voltage measurement VI? Is pulse V measurement still the way to go forward you think (given my sampling requirements).
Thanks again!
03-23-2021 11:18 AM
04-11-2021 03:13 PM
Hi Albert,
You commented that the Vpulse function is probably the best function to use in my experiment program. And I use the example Vpulse program to read DV across my resistor as I pulse current through it.
However, regardless of current bias or time on/off settings, my DV measurements always look this (exponentially decreasing). This is not a hardware issue of my set up (because DV measured with an external voltmeter across my R is always constant), but my guess is that the labview code (or the Vpulse function itself) is averaging DV readings to read gradually lower DV.
Is this just how Vpulse works or is there sth I can edit in the program to read actual DV across many samples (1500 to 3000 samples)? If this is how Vpulse function inherently works then do I go back to trying to run a measurement on the 2636A and then downloading the buffer?
Thanks again!
P.S. What I change in the 'Keithley 200 series read pulsed voltage' example VI, is that I am doing a four point kelvin resistance measurement instead of 2 wire resistance measurement. I am trying to use the HI - force to push pulse current through the resistor leads, and use HI-Sense and Low-Sense to measure DV.
04-11-2021 03:32 PM
I expect that the voltage is measured not in the pulse but gradually moving from pulse to a mix of pulse and low voltage.
re you sure that the measurement method does not influence the expected timing?
Make a picture with a scope of what the signal itself does.
And try to find a way to also measure the trigger moment of the measurement.
04-11-2021 03:51 PM
Dear Albert,
It if is indeed measuring voltage with a gap (after the pulse), then this is not the function for my experiment, I am sure of that.
I definitely want to measure V while the resistor is biased.
Do you think I should now go back to trying to run a series of measurements using the labview code? Looking at the code in this post, I feel like it is more efficient at this point to just fix it. I only need a way to initiate the series of measurements using a VI (that is NOT a trigger VI).
How do I execute the original approach I had in the beginning of the post (fix that original code attached to the post)? If you have any thoughts on that please let me know.
Thanks again!
04-12-2021 01:21 PM
Hi
I promised to send an example but realised later my communication is quite complex allthough the base is presented here.
I have a vi that calculates a measurement command defined by a setting of the definition of two channels of the DMM.
You can select to measure 1 or two channels and which one.
Say A, B and A and B.
Both vi's are added tot this post in LV2018. Maybe you also need the initialization vi but that is the standard init vi from keithley.
Questions I can answer later. If you miss something just post.
I hope I delivered all type definitions.....
You still have to combine these vi's but defining the measurement cmd only needs to be done once.
Calling read values can be as fast as possible,