06-15-2016 12:00 PM
I have a large capacitive load on a DUT I need to curve trace using a pulsed sequence. Sounds like an ideal candidate for utilizing the SourceAdapt features in my PXIe-4139. OK, but...
There is very little example code for this and the code that's out there has zero information about how to actually tune SourceAdapt properly.
There is a white paper for SourceAdapt with more details:
Regarding reactive loads, the white paper states, " A capacitor introduces a pole at a frequency inversely proportional to the capacitance and the output stage’s shunt resistor, affecting both gain and phase."
Unfortunately, the specification for PXIe-4139 doesn't even list the output stage shunt resistance. Has anyone actually implemented SourceAdapt with meaningful analysis backing up the selections for GBW, comp freq, and pole-zero ratio? How did you do this without knowing the shunt resistance?
Can anyone from NI provide the shunt resistance for all of the models that have SourceAdapt?
Solved! Go to Solution.
06-16-2016 09:34 AM
The output resistance is not a single value, it is programmable:
Programmable Output Resistance SMU Information:
NI PXIe 4139 Programmable Output Resistance:
06-16-2016 01:50 PM
I looked into that. The programmable output resistance is a "virtual" resistance. The SMU pretends there's ±X ohms on its output and will reduce/increase its voltage output accordingly. It isn't a real resistance.
In addition, according to the niDCPower Configure Output Resistence VI help file, "The output resistance setting is applicable only if the output function of the channel is set to DC Voltage or DC Current using the niDCPower Configure Output Function VI."
Since SourceAdapt was designed to assist with the pulsing function of the SMU, the programmable output resistance is not applicable.
My guess is that the real shunt resistance is tied to the range setting, but I'm not 100% sure.
06-16-2016 06:32 PM
You're correct. For measuring current, there is an internal shunt resistor whose value changes depending on the Current Limit Range (or Current Level Range if operating in DCI mode) you have programmed. However these values are generally not helpful. Because of the control loop architecture the effective output resistance that any DUT you connect will see is 0 Ω. To answer your question though, the values of the shunt resistors are contained below:
|3 A / 10 A (pulsing)||50 mΩ|
|1 A||500 mΩ|
|100 mA||5.5 Ω|
|10 mA||55 Ω|
|1 mA||510 Ω|
|100 µA||5.5 kΩ|
|10 µA||55 kΩ|
|1 µA||550 kΩ|
As far as SourceAdapt goes, tuning the custom transient parameters to minimize rise/fall times is most successful when manual experimentation is used rather than actually calculating ideal values for GBW, comp freq, and PZ Ratio.
Are you using LabVIEW? I've attached some code that I've used for tuning the custom transient parameters in the past. I back-saved it for LV 2013. Let me know if you need an earlier version.
The code outputs a single voltage or current pulse. It currently doesn't use the pulsing API, however. It just outputs a 3 setpoint sequence the first and third point of which are 0. I designed the program to sample very quickly while the sequence outputs so you can see the shape of the output signal much like you would see on a scope.
Below issome information about the custom parameters and the methodology I generally use when tuning the output for a specific DUT.
The 4138/9 has three preset Transient Response settings: Slow, Normal, and Fast. It also allows for custom Transient Response tuning by setting the Transient Response Property to Custom and using the 6 lower-level Custom Transient Response parameters. In order to achieve a 10 µs slew rate from 10 mA to 200 mA you will likely need to adjust these lower-level parameters. The attached code is a good tool for getting familiar with the custom transient response parameters and will help you tune your 4139 to get your desired slew rate.
The image below shows the front panel of the attached code:
The sequence is 3 points long: 0 V, the value from the Pulse Amplitude control, and then 0 V again. The sequence outputs continuously in a loop. At each setpoint the SMU takes a group of voltage and current measurements with a length of the value in the Measure Record Length field. Each of these measurements has an aperture time equal to the value in the Aperture Time field.
The graph updates continuously and you are able to change the front panel settings on-the-fly. If you want to use the graph zoom tools to get a closer look at a rising or falling edge, toggle the Autorange button and zoom in on the section of the graph you’re interested in. Toggle autorange again to return to the view of the full waveform.
The lower-left hand section of the graph includes the custom transient response parameters. There are two sets of parameters: Voltage and Current. The voltage parameters affect the voltage control loop and the current parameters affect the current control loop. Voltage and Current measurements are constantly being taken at the output of the SMU. These measurements are used to control the output, allowing the device to achieve its programmed setpoint while enforcing the programmed limits. The control of the output is automatically passed back and forth between the Voltage and Current control loops depending on the settings and the readings at the output. Generally in DCV mode the voltage control loop dominates control over the output, and therefore changing the voltage parameters will have the largest impact on the output. However, if the current measurements get near the programmed current limit, this can cause the current control loop to play a larger role in the regulation of the output and you may also need to adjust the current parameters as well. If there is a lot of headroom between the output current and the current limit, you will likely find that adjusting the current parameters will have little effect on transient speed of the output. Similarly, sudden sharp spikes in current can cause the current control loop to take over even if the spike isn't close to the current limit.
The three parameters are Gain Bandwidth, Compensation Frequency, and Pole-Zero Ratio. Gain Bandwidth directly affects how aggressively the output attempts to reach its setpoint. Reducing this value will increase the slew rate, while increasing it will decrease the slew rate. Increasing it too much can put the output in an unstable state. Compensation Frequency and Pole-Zero Ratio can be used to adjust the stability of the output. The general method I use when trying to minimize slew rate is to slowly increase the Gain Bandwidth until I see a bit of overshoot. I then adjust the Comp Freq and/or PZ Ratio to get rid of the overshoot. I then repeat this process until I cannot reduce the slew time any further without causing the output to become unstable. In my experience the best way to tune these settings is to make small incremental updates to these values and watch how the waveform changes. If a small increase of PZ Ratio seems to make the overshoot larger, try a small decrease. Sometimes changing the PZ Ratio or Comp Freq will seem to make no difference in the output at all.
Be careful when changing any of these parameters. Adjusting them too much can result in an unstable output that can exceed the programmed current level/voltage limit. You can prevent this from happening by monitoring the apparent stability of the output signal. Refer to the two graphs below. The upper signal looks stable. I then adjusted the Comp Freq in the lower signal and saw that the output began to oscillate a tad. This let me know I should back off the Comp Freq and not push it any further in that direction.
Once you have found some Custom Transient settings that achieve the slew rate you want, you can program them into your test code. This will allow you to achieve that specific slew rate any time you run the current sequence you described on a DUT.
Let me know any questions you have. I hope this was helpful.
06-17-2016 12:24 PM
This is great information! Your post could be the start of a how-to white paper on SourceAdapt.
My specific application is to curve trace a diode that is used in a charge pump circuit. I need to test the forward voltage drop up to 3A, while the anode has a cap that cannot be removed.
I have an old LabView driver for a PXIe-4140 that I use as the basis for a custom step type in TestStand. It basically treats the SMU as a glorified power supply. I am updating it to include sequencing, pulsing, and Source Adapt (since it should be useful for my application.) Based on your description of how SourceAdapt should be used, however, this sort of custom step type is not practical. Experimenting with parameters in TestStand isn't efficient and adds to test time. Also, I wonder how environmental factors (temperature and semiconductor process) will affect this tuning. Can I set it once and forget it?
Any advice on how to proceed?