Why is it that most ADCs, like the ones on the Arduino, give 10 bit resolution rather than 8 or 16 bit?
It just seems wierd that they don't match standard data sizes, particularly on integrated ones.
Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. It only takes a minute to sign up.Sign up to join this community
There's no major technical problem with extending a SAR (successive approximation) ADC to convert 16 bits, but the issue is that you start to see the noise floor of the analog front-end. This tends to make customers panic because they see the ADC codes jumping around, and don't always realize that they are looking at tens of microvolts of deviation.
Assuming a 5.00 V reference voltage and a 10-bit ADC, the LSB represents a voltage of 4.88 mV (5 V × 2-10). For a 16-bit ADC with a 5.00 V reference, the LSB voltage would be 76 µV.
But the power supply in a digital system is not exactly 5.00 V, it is usually specified in a range of 4.75 V to 5.25 V. Whenever there is a switching transient event inside the microcontroller, there is a little pulse of current that causes the supply voltages to twitch. If the LSB is around 5 mV you might just barely be able to see it, but at the 76 µV level it's hard not to see this noise.
In fact, once you get past 12-bit ADC, you really need to have an analog voltage reference instead of just using the digital power supply. So that adds some more cost. For best results this voltage reference should actually be a separate chip, with its own power lines, and ideally it should be away from the hot / noisy digital circuitry.
If you want a 16-bit ADC to give nice stable readings, you need a very very clean reference voltage, and thermal control, and preferably keep it far away from any fast switching digital signals... so integrating a 16-bit SAR onto the same chip as a microcontroller, would actually defeat the purpose of having those extra bits. You'd just be measuring random noise on those extra bits.
There are customer applications that do use higher resolution ADCs. The company I work at makes quite a few of these. Automated test equipment (ATE), medical ultrasound, and certain other specialized types of customers do use high-resolution ADCs, in some cases 18- or even 24-bit.
Production testing a high-resolution ADC is time-consuming (and therefore expensive). Customers that need this kind of performance pay a premium for an external standalone ADC, not the cheap SAR types that are built into many modern microcontrollers.
Then there are high-speed applications such as radar or digital sampling oscilloscope, which need to sample at 100 MHz or faster rates -- at these speeds, you're lucky to get 8 meaningful bits.
Trade off between resolution and cost.
8 bits gives 28 = 256 combinations, of which 0 is one, leaving 0 to 255 as possible digital values. This isn't enough for many applications. Every extra bit doubles the resolution and 10-bit gives 1024 steps which is good enough for most project stuff. Industrial systems might use 12-bit for even better resolution.
High resolution ADCs require tighter tolerances and are more expensive to manufacture.
A number of good and valid points have already been made. I have used 8, 10, 12 and 16 bit ADCs extensively, over the years, and it is nowadays fairly easy to achieve 16 bits with a conversion time of 4 or 5 microseconds (better are available, I will stick to what might be practicable for most people to use), in a standalone chip. But this contains a precision ladder network, often using thin film resistors, and various highly specialised analogue design techniques. (There is also, almost always, a need for high performance bipolar transistors somewhere in the circuit of a precision ADC, but all modern microcontrollers are CMOS, so there are numerous additional fabrication steps to make anything with good analogue accuracy and CMOS logic combined.) A good ADC also costs more than most microcontrollers! Not so easy to make, more production processes, possibly needs laser trimming, etc.
For instance, consider the TI ADS8509, whose predecessor the ADS7509, not quite so fast, I have used in many places in a large and important project.
It is fairly mundane by today's standards. Yet its internal design features are not compatible with the cheap manufacturing process for microcontrollers. And, it costs upwards of $15.72, more than most microcontrollers. I used them in the form of bare semiconductor die, incorporated into hermetic metal can hybrids, with carefully designed support circuits, and really did get barely over 1 LSB p-p noise, so it can be done, if you know what you are doing, and have the resources, including budget. But you will never, ever see such low noise in or around a microcontroller.
The main problem, as at least one person has explained, is that noise on the digital supply rail will directly affect the ADC. Now you can get around that, by using a good external voltage reference, where a pin is provided for that, but you need to be able to do the same with the ground too. And, those pins have to be constrained to within a few hundred mV of the digital supply and ground, or the thing blows up. Plus, of course, internal noise coupling within the silicon, from the logic, changing states in complex manners at the clock frequency, and worse, from the I/O pins, some of which may be driving and switching 10s of mA, if you have loaded them to the limit. Noise, noise and more noise...
The part I have quoted (and Google around for cheaper, faster or different ones, trade off flexibility against cost) has an SPI interface, so it is easily used EXTERNALLY to a microcontroller, with its own local ground plane, filtering, etc. Then, with care, it will really give you 16 bits.
It used to be quite hard to get more than about 10 noise free bits out of a 12 bit ADC, and still is in a dirty environment, such as close up to digital logic, which is largely why on-board ADCs within processor chips are more or less stuck at that resolution, and probably will be for ever. But TI have a 32 bit external chip. Haven't looked at the data sheet, or the cost...
If you can sacrifice absolute accuracy (i.e. the scale factor may be out by 5% or more, not to mention DC offset and its drift with time and temperature, but the linearity will be excellent) an audio grade ADC may be for you. They are at least 16 bits and designed for the mass market, so often good value, but don't expect to use one in a precision instrument which has to measure DC signals to +/- 0.1%.
You can't have everything at once. It is all a question of what matters most. Precision, noise, long term drift, speed, cost, power, interface type (serial or parallel) etc. Also you may want to multiplex several channels, so need a fast step response time, which rules out many sigma-delta ADCs, which otherwise have some very good properties.
When choosing an ADC. Google is, as always, your friend. There are plenty of articles and application notes from TI, Linear, National and various other semiconductor manufacturers. Always beware of what the data sheets do not tell you, and check to see what parameters their competitors emphasise.
But if you want it all on your microcontroller chip, don't plan on using more than 10 bits (probably 9 usable, LSB noisy) in your projects. And, plan for separate analogue reference and ground if your chip allows. That way, you will not be wasting your time.
8 bit ADC's are horrid to use because of the 0.49% steps - I've seen enough of that. Arduino, being designed for hobby electronics, uses 4 times as many steps, so near to 0.1%, which is close to achievable signal to noise (plus hum) expected from common op-amp or transistor sensor circuits. Better than that would be wasted on hobyist grade home-built electronics, and worse than that would be too steppy and horrid.
Whilst 16 bit ADC are commercially available, they take longer to settle, during which the hum or noise has moved, so you don't get a better measurement and it is slower.
When an ADC makes a conversion, it provides a digital (quantized) value for the continuous analog signal. Since, the digital value will not be exactly the analog value at the conversion moment, the difference can be considerd as additive noise. The higher the resolution of the ADC the closer the digital value from the analog value. In other words, we improve the signal to quanitization noise ratio (SQNR) by increasing the bits of the ADC. Therefore, 10-bit ADC is better that 8-bit ones (by about 12dB).
Using 16-bit A/D will be better in terms of SQNR. However, they are more expensive. And in many applications 10-bit ADC provides enough required SQNR.
As a general rule you want the number of bits in your coveter to be such that your quantisation step is a bit or so below the (analog) noise floor of the system.
Using more bits and hence having a quantisation step further below the noise floor gets you very little improvement in overall noise performance but uses more silicon either makes your conversion time longer or requires the internals of your converter to run faster (and hence be noisier)
Using less bits and hence having a quantisation step above the noise floor is generally bad. It means you are wasting the performance of the analogue circuitry and in some cases it can create systematic errors that cannot be removed through averaging (indeed sometimes designers will deliberately add noise to a system to avoid systematic errors due to quantisation).
The difference between 8 bits and 16 bits is HUGE. The former ends up with a quantisation step that is too large even in systems with fairly poor noise performance. The latter is wasted on any system that doesn't have very careful analog design. So unsurprisingly micro-controllers end up somewhere in between.
Note that people often talk about "quantisation noise" but it is important to remember that the concept of "quantisation noise" is a simplified model of reality that breaks down in some circumstances.
The most common use of ADCs is arguably in the sound processing area (VoIP, CD music etc.). Music is not of interest here, since that requires 16 bits. But VoIP is what drives the lower-bit ADC market. VoIP usually uses companding, which produces an 8-bit compressed PCM code from a 12-bit input signal. The input to the compression step has to have more bits - usually 12, or sometimes 10 can be enough (you can always fake the lowest two bits).
As a result, demand for 8-bit ADCs is very low, but higher-bit ADCs are in high demand, and thus available cheaply. Arduino would likely use components that are cheap and ubiquitous.