An Analog-to-Digital Converter (ADC) is a circuit that samples a continuous analog voltage and translates it into a discrete digital binary number that a microcontroller can process. Choosing the right ADC architecture fundamentally changes your circuit's sample rate, measurement precision, and power consumption. The most common mistake hobbyists make is confusing resolution (the number of bits the ADC outputs) with accuracy (how close that output is to the true physical voltage). Think of it like a tape measure: a ruler marked in 1/16th-inch increments has higher resolution than one marked in 1/8ths, but if the ruler itself was printed slightly stretched, its high-resolution readings will still be inaccurate. In embedded systems, accuracy is dictated by the voltage reference stability, thermal noise, and the specific ADC architecture you select.

The Core ADC Architectures Compared

Not all ADCs are built the same. The silicon inside your microcontroller uses a specific architecture optimized for general-purpose tasks, while external precision sensors use entirely different topologies. According to the Analog Devices Data Converter Handbook, the three dominant architectures in modern electronics are Successive Approximation Register (SAR), Sigma-Delta, and Flash.

ADC Type Typical Resolution Sample Rate Power Draw Primary Use Case
SAR 8 to 18-bit Medium (kSPS to low MSPS) Low to Medium Microcontroller GPIO, battery monitoring, general sensors
Sigma-Delta (ΣΔ) 16 to 32-bit Slow (SPS to low kSPS) Medium Load cells, precision thermocouples, high-fidelity audio
Flash 6 to 12-bit Extremely Fast (GSPS) Very High Digital oscilloscopes, software-defined radio, radar
Dual-Slope (Integrating) 12 to 20-bit Very Slow (10-50 SPS) Low Digital multimeters (DMMs), slow panel meters

Successive Approximation Register (SAR)

The SAR ADC is the workhorse of the embedded world. It uses a binary search algorithm with an internal DAC and comparator to hone in on the input voltage. If you are reading a potentiometer on an Arduino Uno or a light sensor on an ESP32, you are using a SAR ADC. They offer a great balance of speed and resolution but require a clean, stable voltage reference to maintain accuracy.

Sigma-Delta (ΣΔ)

Sigma-Delta converters trade speed for extreme precision. They use a technique called oversampling combined with digital filtering to achieve 24-bit or even 32-bit resolution. You will almost never find a true Sigma-Delta ADC integrated into a basic microcontroller's GPIO matrix because they require continuous, high-speed clocking and digital decimation filters. Instead, they live on dedicated external ICs.

Flash ADC

Flash ADCs are the speed demons of the data conversion world. A flash ADC uses a massive ladder of resistors and comparators—one comparator for every possible voltage step. A 10-bit Flash ADC requires 1,023 comparators operating simultaneously. This makes them incredibly fast (capable of gigasamples per second) but power-hungry and expensive, restricting them to high-end test equipment.

Worked Example: Calculating LSB and Step Size

To understand how ADC types and bit-depths affect your code, let us calculate the Least Significant Bit (LSB) voltage, also known as the step size, for two common development boards. The formula for the voltage per step is:

V_step = V_ref / (2^n - 1)

Scenario A: Arduino Uno (ATmega328P)
The Uno uses an internal 10-bit SAR ADC. With the default 5.0V reference, the math is:
5.0V / (2^10 - 1) = 5.0V / 1023 = 4.88 mV per step.
If your analogRead() returns 512, the measured voltage is 512 * 0.00488 = 2.50V.
Scenario B: ESP32-WROOM-32
The original ESP32 uses a 12-bit SAR ADC. With a 3.3V reference, the math is:
3.3V / (2^12 - 1) = 3.3V / 4095 = 0.805 mV per step.
Theoretically, the ESP32 offers roughly six times finer resolution than the Uno.

However, this is where the resolution vs. accuracy distinction bites you. While the ESP32's 12-bit SAR ADC has a theoretical step size of 0.805 mV, its actual accuracy is degraded by internal noise and non-linearity. In practice, the bottom ~100mV and top ~150mV of the ESP32's ADC range are highly non-linear, and the effective number of bits (ENOB) is closer to 10.5 bits in a noisy environment. If you need true 12-bit accuracy on an ESP32, you must bypass the internal SAR and use an external I2C ADC like the 16-bit ADS1115.

Where You Meet These ADC Types in Practice

Understanding these architectures prevents you from designing circuits that fail in the real world. Here is where you will encounter specific ADC types on the workbench.

The ESP32 WiFi vs. ADC2 Conflict (SAR Architecture Limitation)

Because SAR ADCs rely on switching internal capacitors to sample voltage, they are sensitive to digital noise. On the original ESP32, the ADC2 peripheral shares silicon routing with the WiFi radio. Espressif's official documentation explicitly warns that ADC2 pins cannot be used while WiFi is active. If your IoT project reads a soil moisture sensor on GPIO25 (an ADC2 pin) and suddenly returns garbage values the moment the board connects to your router, you have hit a SAR hardware multiplexing limit. The fix is to either move the sensor to an ADC1 pin (like GPIO34) or upgrade to an ESP32-S3, which features redesigned SAR routing that mitigates this conflict.

Safety & Hardware Note: Never feed more than 3.3V into an ESP32 ADC pin, even if your board is powered via the 5V USB pin. The internal SAR circuitry is tied directly to the 3.3V rail and lacks internal overvoltage clamping diodes capable of handling sustained 5V overvoltage. Use a simple resistor voltage divider to scale 5V signals down to 3.3V.

Precision Weighing Scales (Sigma-Delta in Action)

If you are building a digital scale or a DIY brewing system that needs to measure liquid weight to the gram, a microcontroller's internal SAR ADC will not cut it. Load cells output microscopic voltage changes in the millivolt range. For this, you use a dedicated Sigma-Delta IC like the HX711 or the newer NAU7802. These chips contain an internal programmable gain amplifier (PGA) that boosts the millivolt signal, followed by a 24-bit Sigma-Delta modulator that filters out 50Hz/60Hz mains hum. You communicate with them via a simple two-wire serial protocol, completely bypassing the microcontroller's internal analog limitations.

High-Speed Motor Control Feedback

When building a custom BLDC motor controller using an STM32 or Teensy 4.1, you need to read phase currents thousands of times per second to implement Field Oriented Control (FOC). Sigma-Delta is far too slow for this. You rely on the microcontroller's internal high-speed SAR ADCs, often triggered directly by the hardware PWM timers to sample the current exactly in the middle of the PWM pulse, avoiding the switching noise spikes that occur when the MOSFETs turn on and off.

Frequently Asked Questions About ADC Types

Which ADC type is best for audio processing?

Sigma-Delta (ΣΔ) is the undisputed standard for audio processing. Audio requires high resolution (16 to 24 bits) to capture the dynamic range of sound, but it only requires moderate sample rates (44.1 kHz to 192 kHz). Sigma-Delta converters excel here because their oversampling and digital filtering naturally push quantization noise out of the audible frequency band, resulting in a clean signal without requiring expensive, high-precision analog anti-aliasing filters.

Why does my ESP32 ADC read non-linear values at 0V and 3.3V?

This is a known characteristic of the ESP32's internal 12-bit SAR ADC. The internal switching capacitors and comparator thresholds create a "deadband" near the ground rail and the positive reference rail. Readings below ~0.1V often snap to 0, and readings above ~3.1V snap to 4095. To fix this in precision applications, you should either use an external I2C ADC (like the ADS1115) or use the ESP32's internal eFuse calibration data via the ESP-IDF ADC calibration API, which mathematically corrects the non-linear curve.

Can I use a Sigma-Delta ADC for fast motor control feedback?

No. Sigma-Delta ADCs rely on oversampling and digital decimation filters, which introduces significant group delay (latency) into the measurement. In motor control, you need to read the current and adjust the PWM duty cycle within a few microseconds to maintain stability. The latency of a Sigma-Delta converter will cause your control loop to oscillate or fail. You must use a low-latency SAR or Flash ADC for high-speed closed-loop control.

What is the difference between an ADC and a DAC?

An ADC (Analog-to-Digital Converter) reads real-world analog voltages and turns them into digital numbers for the microcontroller to process (e.g., reading a temperature sensor). A DAC (Digital-to-Analog Converter) does the exact opposite: it takes a digital number generated by the microcontroller and outputs a corresponding physical analog voltage (e.g., generating a sine wave for an audio amplifier or setting a precise voltage reference for a power supply). Many modern microcontrollers include both, but DACs are typically lower resolution (8 to 12 bits) compared to ADCs.