An Analog-to-Digital Converter (ADC) is an electronic circuit that translates continuous real-world voltage signals into discrete binary numbers a microcontroller can process. When you introduce an ADC into a design, it fundamentally changes your circuit by dictating the maximum signal frequency you can capture (the Nyquist limit), adding a quantization noise floor, and forcing you to manage the source impedance of your sensors to prevent reading errors.
The Core ADC Architectures You Need to Know
Not all analog-to-digital converters are built the same. The internal architecture dictates the trade-off between speed, resolution, and power consumption. Here are the three primary types of ADC you will encounter in embedded systems:
| Architecture | Resolution | Speed (Sample Rate) | Power Draw | Best For |
|---|---|---|---|---|
| SAR (Successive Approximation) | 8 to 18-bit | Medium (kSPS to low MSPS) | Low | General MCU GPIO, battery monitoring, potentiometers |
| Sigma-Delta ($\Sigma\Delta$) | 16 to 32-bit | Slow (SPS to low kSPS) | Medium | Precision scales, thermocouples, audio, RTDs |
| Flash | 6 to 12-bit | Very Fast (GSPS) | Very High | Oscilloscopes, SDR, radar, high-speed DAQ |
Makers frequently confuse ADC resolution with accuracy. A 16-bit ADC has a resolution of 65,536 discrete steps, but its accuracy (Effective Number of Bits, or ENOB) might only be 14 bits due to internal thermal noise and integral non-linearity (INL). Always check the ENOB and Signal-to-Noise Ratio (SNR) in the datasheet, not just the marketing bit-count.
Worked Example: Calculating Step Size and the ESP32 Noise Floor
Let us compare the internal 12-bit SAR ADC of an original ESP32-WROOM-32 against an external 16-bit Sigma-Delta ADC like the Texas Instruments ADS1115, assuming both use a 3.3V reference voltage.
1. Internal ESP32 12-bit SAR ADC:
- Total steps: $2^{12} = 4096$
- Theoretical step size: $3.3V / 4096 = 0.805 mV per step
2. External ADS1115 16-bit Sigma-Delta ADC:
- Total steps: $2^{16} = 65536$
- Theoretical step size: $3.3V / 65536 = 0.050 mV per step
In a perfect mathematical world, the ADS1115 is 16 times more granular. However, the original ESP32's internal SAR ADC suffers from severe integral non-linearity (INL) near the top of its voltage range. If you feed the ESP32 GPIO pin exactly 3.0V, the internal ADC might report a value equivalent to 2.85V due to internal voltage drops, attenuation non-linearity, and substrate noise. This is a classic failure mode on the bench: relying on the internal ADC for precision voltage measurement near the positive rail.
Espressif significantly improved this in later silicon; the ESP32-S3 features a much more linear internal ADC, but for any sensor requiring better than 10mV absolute accuracy across the entire rail, you must still bypass the internal SAR and use an external I2C/SPI converter.
Where You Meet This In Practice
Different types of ADC show up in specific embedded scenarios based on the physics of the sensor you are reading and the environment you are operating in:
- Precision Load Cells (Sigma-Delta): When building a digital scale or a hopper weight monitor with a strain gauge, the signal change is in the microvolt range. You will use a dedicated 24-bit Sigma-Delta ADC like the HX711 or ADS1220. These chips include an integrated programmable gain amplifier (PGA) to boost the microvolt signal above the noise floor before conversion.
- Potentiometers and Joysticks (SAR): For reading a generic 10k linear potentiometer for a user interface dial or an RC transmitter gimbal, the internal 10-bit or 12-bit SAR ADC on an Arduino Uno or ESP32 is perfectly adequate. The mechanical noise and contact resistance variation of the physical wiper completely dwarfs the quantization noise of the ADC.
- High-Speed Motor Control (Flash or Pipelined): If you are doing field-oriented control (FOC) on a BLDC motor, you need to sample phase currents at 100kSPS or higher to commutate the motor smoothly. Internal MCU SAR ADCs (or dedicated external pipelined ADCs) handle this. Sigma-Delta converters are far too slow for real-time current loop commutation, and introducing their latency will cause your motor controller to desynchronize and stall.
- Mains-Powered Temperature Sensing (Sigma-Delta): If you are reading a PT100 RTD inside an industrial enclosure with heavy 50Hz/60Hz mains hum, a Sigma-Delta ADC's digital decimation filter inherently rejects that AC interference. A SAR ADC would require complex external analog low-pass filtering to achieve the same noise rejection.
For a deeper dive into selecting the right architecture for your specific signal chain, Analog Devices provides an excellent primer on ADC architectures that breaks down the noise and bandwidth trade-offs.
Frequently Asked Questions About Types of ADC
What are the different types of ADC used in Arduino and ESP32 boards?
Most standard Arduino boards (like the Uno R3 or Nano) use a 10-bit Successive Approximation Register (SAR) ADC built into the ATmega328P microcontroller. The original ESP32 and ESP32-C3 families use a 12-bit SAR ADC internally. Neither of these internal ADCs are true Sigma-Delta converters. If you need Sigma-Delta precision on these boards, you must wire an external chip like the ADS1115 or ADS1015 via the I2C bus.
Which type of ADC is best for high-precision temperature sensing?
For high-precision temperature sensing (like using a PT100 RTD, a thermopile, or a precision thermistor network), a Sigma-Delta ADC is the best choice. Because ambient temperature changes slowly, you do not need high sampling speeds. The Sigma-Delta architecture's digital filtering inherently rejects 50Hz/60Hz mains hum and RF interference, giving you a much cleaner reading than a SAR ADC without requiring complex external analog low-pass filters.
How do I choose between an internal SAR ADC and an external Sigma-Delta ADC?
Choose the internal SAR ADC when your signal is relatively large (0-3.3V), changes moderately fast, and you can tolerate a 10mV to 50mV error margin (e.g., reading a battery voltage divider, a coarse LDR light sensor, or a user potentiometer). Choose an external Sigma-Delta ADC when your signal is in the millivolt or microvolt range (e.g., load cells, shunt resistors for current sensing), when you need to reject AC mains noise, or when you require absolute accuracy better than 1mV.






