I apologise if this is a straightforward question.
I'm using a Keithley 2410. I have a vi (modified from the NI example IV sweep code, labview 15) that performs a logarithmic sweep between -1e-6 and -400 Volts, and back again. The results are then sent to an external file, using the Write Measurement to File subVI, the data is converted using Convert to Dynamic Data.
The code executes successfully.
However: the sweep only records the current to the microAmp, and the Voltage to 10mV (it records 0 until the sweep reaches these values). I need it to measure to nanoAmp, and to microVolt.
I could get the precision I need manually, but I'm hoping there is a setting I've overlooked that means I can still use the labview code.
The instructions sent to the Keithley are:
The instructions are repeated on the downwards sweep, with the exception :_SOUR:_SWE:_DIR DOWN
Thanks for your help
Solved! Go to Solution.
You should attach your code if you want help debugging it! Without the LabVIEW code we can only guess.
Here's my guess. Your printout of the SCPI commands shows that you have set a manual range for current measurement (5E-6Amps), but its doesn't show that the autorange feature is turned on. (SCPI like "ENS:CURR:RANG:AUTO") If you look at the code for the "Configure Measurement.vi" you should have it setup with Enable Auto Range=True.
If that doesn't work for you then there's more going on with your modifications and we need to see the code.
I tried SCPI autorange like you suggested, however it doesn't seem to have made a difference.
I've attached my code, and the output file so you can see what's happening in more detail.
The sensor has a strict 1microAmp compliance level, so I really need the setup to measure the nanoAmp range!
I would also like to have the measurements to 2 significant digits if possible, though that's a secondary concern at the moment.
thanks for your help
Your code is quite messy and hard to follow, making it neater will help you debug in future.
I think your code is missing two things:
1) You don't turn the output of the SMU ON before you do the Ascending sweep, only before the Descending half.
2) I don't see where you set a compliance limit. You try to set a range limit, but that's not the same. Compliance limits physically limit the voltage or current during test while Range limit simply ignores any voltage or current above its measurement range. Better check you didn't fry what you are testing.
Here's a good example of how to do what you are trying to do - https://forums.ni.com/t5/LabVIEW/Source-voltage-using-Keithley-2400/m-p/3803093/highlight/true#M1073...
Hope that helps.
Oops, my bad. Looking at the code again I see compliance and output are both there just quite obfuscated by messy wires. Not sure what's wrong exactly, and I can't test until tomorrow.
A suggestion would be to try the previous mentioned example. Then implement saving the file. I wouldn't use the dynamic data conversion before saving the file like you did, just use "Write delimited Spreadsheet.vi" - http://zone.ni.com/reference/en-XX/help/371361M-01/glang/write_delimited_spreadsheet/
As you can see you have the option to limit the precision using the "format" input. Use ".%2f","%.2e" or "%.2g" in your case to get 2 digits of precision. See this for more formatting options - http://zone.ni.com/reference/en-XX/help/371361M-01/lvconcepts/format_specifier_syntax/
Changing dynamic data to Write Delimited Spreadsheet has improved the situation,
Using "%.2e" or "%.2g" records the current properly.
Unfortunately it's still not recording Voltage below 50mV.
I've just had a chance to look at your Excel file. Are you taking logarithmic steps? If so I think the SMU is not autoranging the source range but using the 1000V range, which has a limited 50mV resolution. You should run your code again and look at the settings for range after its finished.
Did you try the code I suggested? Using a "List Sweep" and autoranging source and measure features you should be able to set the exact source value you want and measure on the most sensitive scale range as well. Let me know if that works for you.
Ok, I did a few tests with a ~100kOhm resistor.
I wrote 3 programs;
This seemed wrong for the internal sweep method. At first I thought it was the Log pts, so I RTFM. Of course there's a SCPI command buried in there for OURWE:RANG <BEST,AUTO,FIXed> which fixes the problem I was seeing. I implemented a VI for it, since the K24xx driver doesn't have it.
Attached are all 3 versions of the code with default K2400 data saved as defaults. Different model K24xx SMUs will have different scale range limits, and will result in different measured values.