Measuring microvolt/nanovolt differences in circuit using Arduino ADC

To measure low level DC voltages, think AC not DC. An Arduino counter can be used to generate two opposite phase chopper drive signals which can chop the DC signal into an AC waveform which can be amplified and synchronously detected using the A/D converter.
With 5mV minimum resolution of the A/D converter an amplifier gain of 1,000 will give 1 uV sensitivity.
Special analog switches are required for these low levels and they are readily available from ON semiconductor part numbers H11F1M, H11F2M, and H11F3M. Unlike standard analog switches there is no charge transfer making them useful for sub microvolt measurements.
Only the input DC voltage needs to be chopped, the amplifier output is "detected" in the Arduino which eliminates any possible DC offset since the same A/D is making the measurement. The A/D measures the first phase output and the subtracts the second phase output and then averages the result for the final measurement.
Because chopping is essentially a sampling operation, an anti-aliasing filter is required. Because of DC offset concerns, the best filter is a one or more stage RC filter.
For applications like reading a load cell no analog switches are required, two Arduino outputs can be used to create an H bridge to drive the load cell with the output both AC and DC coupled into an op-amp. The averaging process reduces the signal bandwidth and greatly reduces noise. The non-inverting input of the op-amp is directly coupled to one side of the load cell output which then acts as the AC reference and the inverting input is connected through a capacitor to the other output. A feedback resistor is connected from the output of the amplifier to the inverting input. The gain is dependent on the ratio between the feedback resistance and the load cell resistance.
This simple circuit is useful if a load cell is to be used for some kind of simple weight sensing where super high accuracy is not required. Because the same 5 volt supply is used as a reference for the A/D and also to drive the load cell, the measurements will be repeatable.
The op-amp, Arduino and load cell must be connected with short wires as excess capacitance may cause stability problems. I've used this circuit successfully as a simple step sensor by re-purposing a cheap bathroom scale with a commodity MCP6002 op-amp.
For ultra high gains two stages are required. A single supply solution on a breadboard is possible, but op-amp input biasing is difficult and requires special attention. Also, high impedances and low voltages don't mix, to get noise levels in the nanovolt range, low resistance values are required, low as in kilohm or below.
The circuits are from an Arduino microvoltmeter project and I've attached my current research results. This is big project and when completed I will publish everything on SourceForge including the code.
It's also possible to use a computer sound card to drive the choppers through an HCMOS flip-flop and use synchronous detection to easily measure into the millivolt range with very simple hardware. The hardware is dirt simple, but the sound card is a bit of a pain to use. Six sigma repeatability of better than 50 microvolts is obtainable with 1 second sample times.
These kind of measurements have fascinated me for decades especially since the early vacuum tube meters were able to measure well under the microvolt range using relatively simple hardware. Although the hardware is simple, the signal processing techniques were quite advanced. It's a shame to see these techniques disappear from memory.

Op-Amp Bias Circuit.pdf (75.9 KB)