Posted Wed, 14 Dec 2022 15:51:18 GMT by Troyer, Steve 0
I've been fighting this for the better part of two days, and I finally think I understand what's going on, but not how to prevent it.

So, my setup:

2400 SMU, communicating over GPIB

Let's say I'm in source voltage, sense current mode.

I take a current measurement with the "MEASURE:CURRENT? " command.

This, as far as I can tell, autoranges the current sensing range to make the most accurate current measurement, and as far as I can tell, there's no way to manually specify a range, or at least I don't see it in the manual.

This is all well and good, except that the current sensing range imposes a current compliance limit (separate from the explicit compliance limit that I set). So if I try and change the voltage to something that exceeds that limit, it will go into compliance, and not give me the voltage I asked for. The manual (section 6-2) claims that "range compliance" won't occur in auto range, but that's not what I've had happen. Maybe that's only true for interactive measurements from the front panel, not using GPIB.

So, for example, if I have a 460ohm resistor across the terminals:

Set a 10mV voltage
Measure the current: 22uA (sense current range auto-sets to 105uA)
Attempt to set a 1V voltage
Current clamps at 105uA, actual voltage is only 49mV

If I take another current measurement with the 1V setting, it autoranges the current sense range again, brings it up to 10.5mA, and I get the 1V I was asking for.

Is there something I'm missing here? Am I just using the instrument wrong? I can work around this, I guess. I can either force a current measurement every time I set the voltage, even if I don't need it, or I can manually turn off auto ranging and set the current range to something big after every current measurement, but both of those things seem kind of like a kludge.

"I want to be able to set an arbitrary voltage after measuring an arbitrary current" doesn't seem like a particularly exotic thing to want to do.

 
Posted Wed, 14 Dec 2022 17:02:46 GMT by A, Jake
Hello,

These are the differences between 'real' compliance and range compliance:

When in real compliance, the source clamps at the displayed compliance value. For example, if the compliance voltage is set to 1V and the measurement range is 2V, output voltage will clamp at 1V. In this case the "CMPL" annunciator will flash.

When in range compliance, the source output clamps at the maximum compliance value for the fixed measurement range(not the compliance value). For example, if compliance is set to 1V and the measurement range is 200mV, output voltage will clamp at 210mV. In this situation, the units in the compliance display will flash. For example, with the following display

Vcmpl:10mA, the "mA" units indication will flash.

Since the :MEASure:[FUNCtion]? command is a less precise measurement command, I would recommend configuring your desired settings and then using the :TRACE subsystem to report the recorded data.
The manual has more information about each command subset and additional operation information:
https://www.tek.com/en/keithley-source-measure-units/keithley-smu-2400-series-sourcemeter-manual/series-2400-sourcemeter
You can also find an example below, configuring a sweep and performing measurements at the fastest rate available. This demonstrates configuration of manual ranges and the Trace system:

*RST
:SOUR:FUNC:MODE VOLT
:SOUR:LIST:VOLT 1,0,-1
:ARM:COUNT 1
TRIG:COUN 100
:TRIG:DEL 0.0
:SOUR:DEL 0.0
:SOUR:VOLT:RANGE 1
:SENSE:CURR:PROT 1e-3
:SENSE:FUNC:CONC OFF
:SENSE:FUNC 'CURR'
:SENSE:CURR:RANGE 1e-3
:SENSE:CURR:NPLC 0.01
:SENSE:AVERAGE:STAT OFF
:DISP:ENAB OFF
:SYSTEM:AZERO:STAT OFF
:TRAC:CLE
:TRAC:POINTS 100
:TRAC:FEED SENSE1
:SOUR:VOLT:MODE LIST
:TRAC:FEED:CONT NEXT
:OUTPUT ON
:INIT

Now wait until the sweeps complete. Then send
:TRACE:DATA?
Now read the data.
You will see the timestamps show about 1msec per point.
This is the fastest voltage sweep the Model 2400 can do.
Please review all commands and their function in the manual before running a test to ensure they provide the desired operation.
Posted Wed, 14 Dec 2022 17:49:27 GMT by Troyer, Steve 0

Configuring and running sweeps through the trace subsystem doesn't really work for most of my applications, but point taken that there are more sophisticated ways to take measurements than :MEASURE:[FUNCTION]?, with more control over the relevant parameters.

When you say " the :MEASure:[FUNCtion]? command is a less precise measurement command" what do you mean by that? It's not actually a less precise measurement, right? It just gives you less manual control, right? My understanding is that you still get the full precision of the instrument with :measure, you just use the default settings for things like ranging and averaging.

I'm still interested in a way around the current sensing range compliance limiting my voltage settings, but maybe the answer is just that I need more complicated code to reset the range after every measurement.

Posted Wed, 14 Dec 2022 20:16:26 GMT by C, Andrea
You still get the full precision of the instrument according to the range and NPLC settings, etc.

The reason you are encountering range compliance even if current auto range is enabled is because the range change that would occur to get out of range compliance will not commence until you ask for a measurement.
When not connected over the bus to PC, the instrument does continuous init of new measurements in local mode.
But once you go under remote operations, that stops and you have to manage all the details.

I am not 100% sure if this will work:  After you source your new voltage value, you could query the value of the measurement condition register (read the value after this command:  :stat:meas:cond?).  Bit 14 will reflect in compliance or not state.  I'm not sure if both range compliance and real compliance will cause this bit to go to logic 1.  It might only be real compliance.

If using the more complex source-memory sweeps, there is the current range holdoff.
This feature sets the measure range = range needed for the current limit just before sourcing new voltage.
When creating the step change of voltage, there will be a displacement current (I = C * dV/dt) and the higher range gives best chance to not saturate due to current range.
Then it resumes use of the last used lower measure range for the measurement.
 
Posted Wed, 14 Dec 2022 21:54:37 GMT by Troyer, Steve 0
Okay, yeah, that squares with the behavior I'm seeing.

For most of the other instruments I use, I put them back into local mode after issuing remote commands, so that the displays continue to update and they're easy to use interactively, but doing that on the SMU seems to cause other side-effects, which is too bad because I think it would solve this problem.

I think I'm just going to embed a command in my voltage measurement routine that manually sets the current sense range to something large before setting the voltage. That should eliminate the range compliance without any real side effects: any current measurement will auto-range before it takes the measurement anyhow. Seems strange that this is necessary, but it's not hard to do.

I did try querying ":stat:meas:cond?" but that must only respond to real compliance, because it stayed at 0 in and out of range compliance. Thanks for the suggestion though. I'll probably use that as a safety check to make sure I'm not hitting my actual compliance limit. 

You must be signed in to post in this forum.