Hi Guys,
I'm working on developing a measurement system to measure resistance as a function of time. I am measuring samples with resistances on the order of a few hundred Mohms, which are out of the range of the Keithley 2400 (can only measure resistances up to 200 Mohms). Since I can't measure resistance "directly", I can get resistance "indirectly" by producing an IV curve (sweeping voltage (V) sweep and measuring current (I)). I need to be able to measure quickly, on the order of 10 IV curves / per second. These 10 curves are then averaged, so for each second, I have one resistance data point.
I have a working program where I am able to continuously sweep V and measure I, and I am able to adjust the measurement speed by changing the Power Line Cycles (PLC). The user specifies the desired number of IV curves per second (sample rate more or less) and the number of steps in the IV curve. Using this info and an EU cycle of 50 hz, I can calculate the required PLC (see attached picture). The lower the PLC, the faster the measurements takes (at a potential cost of accuracy).
After calculating the PLC, I configure the Keithley, but next problem is the continuous voltage sweeps. In order to do the voltage sweeps, I use a for loop within a while loop (see attached). I use data buffering to speed up the data acquisition loop. A few things aren't shown, but might be helpful to know:
The for loop runs the number of times specified by the user ( number of IV curves per second)
The input to the Keithley read subVI is the number of steps in the IV curve
The outputs from the Keithley read subVI are the voltages, current measurements, and the time stamp of each measurement
The loop where I process the data
I have autozero off to speed up measurements
After testing, I noticed that it takes longer than 1 second to complete one measurement cycle (x amounts of voltage sweeps in one second), and thinking about it now, I need to account for the time delay between LabVIEW sending Keithley the read command and Keithley sending the data back to LabVIEW (communication to/from computer). What would be the best way to do it?
One option I have thought of would be programming a PID controller at the beggining to adjust PLC so that every 1 second, I have exactly x voltage sweeps taken each second. Basically, I calculate the PLC using the inputed info and run the measurment (x sweeps in one second). Then, taking the difference between the first time stamp and the last time stamp outputed by the Keithley, I calculated the actual time it took to complete x voltage sweeps. Using this time I calculated, I feed it into a PID controlled, that adjust the PLC until it I get x voltage sweeps in one second. Does that make sense?
I hope I have made myself clear, and if anyone else has any suggestions on a better way to do continuous voltage sweeps, I would greatly appreciate it!