# High Resolution ADC for Noisy Sensors in Variable Conditions

Intro

In response to this question about adaptive amplifiers, It was recommended that in order to deal with variable conditions, it may be more economical to simply use an ADC with higher resolution so that I don't need to worry about amplification and I can do scaling in software.

Overview

I'm trying to design a data acquisition circuit for body mounted textile-based stretch sensors. The textile varies resistance as it's stretched (about 1 order of magnitude, 10k$\Omega$-100k$\Omega$ with 30% stretch). The exact ranges will change depending on how the textile is cut, whether it's soaked with sweat, the temperature, how old the material is, how it's mounted, etc. The entire thing needs to be as small as possible because it's mounted on the hand, so minimizing the number of components is a big plus.

Moreover, I'd like the circuit to be reusable for other applications that may have worse performance. For instance, if I use a cheaper version of the textile, my resistance range may be as bad as 100$\Omega$ to 300$\Omega$.

Signal Path

[textile] -> [Wheatstone bridge] -> [lowpass] -> [instrumentation amp] -> [ADC] -> [AVR]

Requirements

So, I'm looking for an ADC that will meet my requirements. The ADC should be:

1. 16bits+
2. As easy to use as possible: much better if there is interface code already written for AVR/Arduino...
3. ...yet at the same time as comprehensive as possible: I've seen some ADC's with lowpass filters and PGA's built in – all the better as long as it doesn't make configuration a pain
4. 8+ channels, or if it's easy enough to implement, 2x 4+ channels. EDIT: If I'm using a Wheatstone bridge, perhaps I want 8 differential input channels (so 16 channels)...
5. I don't think operation voltage matters... (best if not above 5V)
6. Surface mount
7. Doesn't need to be cheap (it's a one-off)
8. SPI vs. I2C doesn't matter I think...
9. 100+ Hz

Research

So far through Googling, I've found the following chips:

and the following tutorials:

Voltage Reference?

Finally, some people have recommended a precision voltage reference, such as the Analog Devices REF19x series. Do you think this is necessary? Resolution is definitely important for me.

Conclusion

Let me know if you have any recommendations! I'm also not sure exactly what I'm looking for, so tips on how to decide are also appreciated.

• I'm hoping to avoid this kind of story: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1264346368 – terrace Mar 24 '11 at 20:22
• @msutherl - Would it be a big deal if you had to use a mux to connect to this ADC? You'll have a hard time finding a 16-channel, 16+ bit ADC, but 1-channel or 2-channel parts are fairly easy... – Kevin Vermeer Mar 24 '11 at 20:50
• Bits alone don't determine dynamic range. 24-bit converters theoretically could have a dynamic range of 144 dB, but real converters are 100-120 dB or so. Are you sure you need this much resolution for a stretch sensor? You're trying to handle lots of different stretch sensors of different values? It would be better to just use a variable-gain amplifier, I would think, and adjust it for each one. You're going to have to do that calibration somewhere anyway. – endolith Mar 24 '11 at 21:00
• Do you need 100Hz+ for each sensor or for all of them? With multi-channel ADCs you frequently get 1 ADC and a mux so you will have to divide the SPS by the channel count (or more if the mux/adc pair cannot switch channels very fast). – jpc Mar 25 '11 at 10:11
• @msutherl Yes, a manual gain pot, or a programmable-gain amplifier. Something like a PGA116 could handle sampling all your sensors in round-robin fashion at different gains for each, with everything done in software? – endolith Mar 25 '11 at 13:52

ADS1256 from TI has eight single-ended 24bit channels with high-impedance input buffer and PGA. OpenEXG project has PIC code to interface it (they use two channel version ADS1255, but it should be the same).

If you want differential inputs, then there is ADS1298, with 8 channels, PGAs and A/Ds, internal reference, plus ECG/EEG circuitry which you can ignore. I am not sure you can find any example code for this one, though.

If you are looking for resolution, then precise, low noise reference is a must.

A maybe unconventional idea, I am curious what you guys think about it:

One order of magnitude seems a large enough change to measure it directly in a voltage divider circuit.

You could then use a smaller ADC and vary the current through the sensor. A filtered PWM voltage source + a voltage follower (may be one NPN transistor if you are thigh on space) may drastically improve your dynamic range.

You could use one or two of these and switch the voltage when measuring different sensors.

• Not unconventional at all. In fact, if he wants to use small 8 bit microcontroller, this way he can avoid dealing with 24 bit values and the complexity may be smaller than interfacing these sophisticated ADCs. The dynamic range can be sum of dynamic ranges of ADC and PWM in ideal case. On the other hand, it seems that for many people analog designs are harder than digital, so just using 24 bit ADC may be simpler. Also, dynamic range of ADC can be increased by oversampling and digital filtering ... well, not simple anymore. – Jaroslav Cmunt Mar 25 '11 at 10:57
• @Jaroslav Thanks. 1. He already has a Wheatstone bridge so I guess he is not totally afraid of the analog part. :) 2. 1 or 2 bits of additional resolution should be achievable by a simple running sum filter. – jpc Mar 25 '11 at 12:21
• Indeed! Here is a link for OP: http://www.dspguide.com/ch15.htm – Jaroslav Cmunt Mar 25 '11 at 12:42

If your main worry is to have a wide dynamic range for any given "sensor", you might consider using DAC's (or even just MPU-pin controlled voltage sources) to adjust the amplifier offset/gain to alter the system performance for different materials.

You might also follow this variable gain stage with a charge integration circuit so that you can gain fine tune signal sensitivity by adjusting the "exposure" period.

If you have enough compute power for the sample rate you need, consider digital filtering. A Savitzky-Golay filter, f/ex.

• You can change algorithms easier than you can change parts;
• By pushing some of the filtering onto the software, you can probably use a lower spec part than if the part itself had to be more noise tolerant or do all the filtering;
• You'll learn a bunch more about your inputs and and what you need from them and can make a better informed parts choice, if you do, in fact, need a higher spec part.