Hi everyone,I am working on a part of my project that is essentially a capacitance meter. So far it works well for capacitances from 2 nano Farads upwards.I have a 10 M Ohm resistor in series with the unknown capacitor and the code measures the time taken for the voltage across the capacitor to reach 63% of its final value.This is the RC time constant, and is equal to RC, from which C can then be determined.

However, I need it to go down to measure values lower that a few nano Farads. Ideally it needs to be able to measure a capacitance of a few pico Farads.Of course at the moment the RC time constant would be undetectable (a few nano seconds). So I would need to either increase the resistance, or find a new way to measure.

Is increasing the resistance into the Giga-Ohm range viable?

If not, does any one have any suggestions of how to measure small values of capacitance using Arduino microcontrollers?

Increasing the resistance to giga-ohm will cause so a lot inaccuracy (noise, leak currents), so that you can't tell what value the capacitor is.

The normal way is to pass a frequency through the capacitor, and measure how much of the signal is left.To select a range for lower values, the frequency is increased.A simple analog circuit could be accurate to 20pF.

I think the only way to test picoFarads is to use a high frequency.A timer output should be high enough for picoFarads.But you need a circuit to detect how much is passed through the capacitor.This is an example : http://www.hqew.net/circuit-diagram/Capacitance-Meter_2768.htmlThe Arduino could automatically select the range, by setting the timer output frequency.

I was not able to find an example schematic of such circuit for an Arduino.Search for LC-meter.For example this one : http://www.kerrywong.com/2010/10/16/avr-lc-meter-with-frequency-measurement/

One way that I've used to measure lower capacitance values with an Arduino is to use the capacitance under test in a CMOS 555 oscillator circuit, and use the Arduino to measure the osciilation frequency.

Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

How do I go about measuring frequencies of up to 50 kHz as would be required for measuring picofarads in a 555 setup?

Feed the 555 output into the T1 pin (aka digital pin 5 on an Arduino Uno) and use timer/counter 1 to count the number of input pulses in a fixed period of time. That works for input frequencies up to about 3MHz when the input is a square wave.

Alternatively, feed the input to digital pin 2 or 3, generate an interrupt on one edge, and increment a counter in the ISR. Measure the number of transitions in a fixed interval. That should be workable up to at least 50kHz.

Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.