单片机 ADC 详解:从原理到工程实践
ADC(Analog-to-Digital Converter,模数转换器)是单片机中最重要的模拟外设之一。它把真实世界的连续模拟量——温度、压力、电压、电流、声音、光照等——转换成单片机能够处理的离散数字量。理解 ADC 的工作原理、参数指标、外设结构和使用方法,是嵌入式开发的基本功。
下面从概念、参数、原理、单片机内部结构、工作模式、硬件设计、软件处理、应用选型等几个方面,做一个比较系统的介绍。
一、ADC 的基本概念与作用
在嵌入式系统中,单片机核心是数字电路,只能识别 0 和 1。而现实世界的大部分物理量是连续变化的模拟量。例如:
-
温度传感器输出 0.5 V ~ 2.5 V 的电压;
-
电池电压在 3.0 V ~ 4.2 V 之间变化;
-
电流采样电阻两端电压为几十 mV;
-
麦克风输出微弱的交流音频信号。
ADC 的作用就是把这些模拟电压信号转换成数字编码,例如:
输入 1.65 V,参考电压 3.3 V,12 位 ADC 输出约为 2048。
转换结果可以用公式表示:

其中:
-
VnVin:输入模拟电压;
-
Vref:参考电压;
-
N:ADC 位数;
-
D:数字输出码值。
例如 12 位 ADC,Vref=3.3V,输入 1.65V:

实际输出可能是 2047 或 2048,存在量化误差。
二、ADC 的主要技术参数
1. 分辨率
分辨率表示 ADC 能够分辨的最小模拟变化量,通常用位数表示:
-
8 位:256 个等级;
-
10 位:1024 个等级;
-
12 位:4096 个等级;
-
16 位:65536 个等级;
-
24 位:16777216 个等级。
最小分辨电压也叫 1 LSB:

例如 12 位、3.3 V 参考:

2. 参考电压
参考电压 Vref决定了 ADC 的满量程输入范围。常见单片机参考电压来源:
-
芯片内部基准,例如 1.2 V、2.5 V、3.0 V;
-
外部专用基准芯片,例如 TL431、REF3030、ADR4525;
-
单片机供电电压 VDD。
参考电压的稳定性直接影响转换精度。如果参考电压波动 1%,转换结果也会产生约 1% 的误差。
3. 转换时间与采样率
转换时间是指完成一次模数转换所需的时间。对于 SAR 型 ADC,通常由采样时间和逐次逼近时间组成。
采样率是每秒完成的转换次数,单位 SPS(Samples Per Second)或 Hz。例如:
-
低速测量:几 SPS 到几 kSPS;
-
普通单片机 ADC:几十 kSPS 到几 MSPS;
-
音频采样:44.1 kSPS 以上;
-
高速 ADC:几十 MSPS 到 GSPS。
根据奈奎斯特采样定理,要无失真恢复信号,采样率至少应为信号最高频率的 2 倍。实际工程中通常取 5~10 倍甚至更高。
4. 精度相关指标
分辨率高不代表精度高。精度还受非线性、噪声、温漂等影响。
DNL:微分非线性
实际 ADC 的相邻码宽与理想 1 LSB 之间的最大偏差。单位为 LSB。理想 ADC 的 DNL 为 0。如果 DNL 超过 ±1 LSB,可能会出现丢码。
INL:积分非线性
实际转换曲线与理想直线之间的最大偏差。INL 是 DNL 的累计效果,反映整体线性度。
失调误差与增益误差
-
失调误差:输入为 0 时,输出不为 0 的偏差;
-
增益误差:实际满量程与理想满量程之间的斜率偏差。
很多单片机 ADC 支持校准,可以修正失调和增益误差。
SNR 与 ENOB
理想 ADC 的信噪比:

实际有效位数:

ENOB 比标称位数更能反映真实精度。例如一个标称 12 位的 ADC,由于噪声大,实际 ENOB 可能只有 10.5 位。
三、常见 ADC 工作原理
单片机内部最常用的是逐次逼近型 ADC(SAR ADC),此外还有 Sigma-Delta ADC、Flash ADC 等。
1. 逐次逼近型 SAR ADC
SAR 是 Successive Approximation Register 的缩写。它在分辨率、速度、功耗和成本之间取得了很好的平衡,因此绝大多数单片机都集成 SAR ADC。
SAR ADC 的核心结构包括:
-
采样保持电路;
-
比较器;
-
DAC;
-
逐次逼近寄存器;
-
控制逻辑。
工作过程如下:
采样阶段:开关闭合,输入电压对内部采样电容充电,电容电压跟随输入电压。此阶段结束后开关断开,保持电压。
比较阶段:逐次逼近寄存器首先将最高位 MSB 设为 1,其余位为 0。DAC 将该数字码转换为参考电压的一半。
比较器比较采样保持电压与 DAC 输出电压:
-
如果输入电压大于 DAC 输出,则保留 MSB = 1;
-
如果输入电压小于 DAC 输出,则清除 MSB = 0。
依次对下一位重复上述过程,直到最低位 LSB 确定。
转换结束,寄存器中的二进制码即为转换结果。
SAR ADC 每比较一次需要 1 个 ADC 时钟周期,因此 N 位 SAR ADC 通常需要 N 个左右的时钟周期完成转换,有时还需要额外几个周期用于采样和建立。
特点:
-
速度中等,适合从几十 kSPS 到几 MSPS;
-
分辨率通常 8~16 位;
-
功耗低,可集成到单片机;
-
需要抗混叠滤波;
-
对输入驱动阻抗敏感。
2. Sigma-Delta ADC
Sigma-Delta ADC 采用过采样和噪声整形技术,用很低的内部量化位数(通常是 1 位)实现很高的分辨率,常见于高精度低速测量,如称重传感器、温度测量、音频 ADC。
特点:
-
分辨率高,可达 16~24 位甚至更高;
-
采样率较低,适合直流或低频信号;
-
内部数字滤波,对模拟前端要求较低;
-
常用于独立 ADC 芯片,部分单片机也集成。
3. Flash ADC
Flash ADC 使用大量比较器并行工作,一个时钟周期即可完成转换,速度极快,但电路规模随位数指数增长。一般用于高速应用,如示波器、视频处理。单片机中较少集成。
四、单片机内部 ADC 外设结构
以常见的 STM32、AVR、MSP430、ESP32 等单片机为例,内部 ADC 外设通常包含以下模块:
1. 模拟多路开关
单片机通常有多个 ADC 输入通道,但内部可能只有一个 ADC 内核。通过模拟多路选择器,分时切换不同通道。
例如 STM32F103 的 ADC1 有 16 个外部通道,可以扫描转换多个引脚。
2. 采样保持电路
负责在转换期间保持输入电压恒定。采样时间需要根据输入信号源阻抗和内部采样电容确定。如果采样时间太短,电容充电不足,会导致较大误差。
3. 逐次逼近转换器
完成核心的量化过程。
4. 转换结果寄存器
保存转换结果,通常为 16 位寄存器,但有效数据位取决于分辨率。结果可以左对齐或右对齐。
5. 触发控制
ADC 转换可以由以下方式启动:
-
软件触发:程序直接写启动位;
-
定时器触发:由 PWM 或定时器事件触发,实现固定采样率;
-
外部引脚触发。
定时器触发在电机控制、数字电源等需要等间隔采样的场合非常重要。
6. 中断和 DMA
转换完成后可以产生中断,或者通过 DMA 自动把结果搬运到内存缓冲区,减少 CPU 负担。
7. 模拟看门狗
很多单片机 ADC 支持窗口比较功能。可以设置上限和下限,当转换结果超出范围时产生中断。常用于电源电压监测、过流保护等。
8. 内部专用通道
除了外部引脚,很多单片机 ADC 还连接了内部信号:
-
内部温度传感器;
-
内部参考电压;
-
电池电压监测通道;
-
DAC 输出回读通道。
例如 STM32 的 ADC 通道 16 常接内部温度传感器,通道 17 接内部参考电压。
五、单片机 ADC 的常见工作模式
1. 单次转换模式
软件或外部触发一次,ADC 完成一次转换,然后停止,等待下一次触发。适合不需要连续采样的场合,如按键检测、温度巡检。
2. 连续转换模式
ADC 一次转换结束后自动开始下一次转换,持续输出转换结果。适合需要连续监测的场合,但 CPU 负担较重,通常配合 DMA 使用。
3. 扫描模式
多个通道依次转换。扫描模式可以配合单次或连续转换。
例如:
-
通道 0:温度;
-
通道 1:电压;
-
通道 2:电流。
ADC 会自动按顺序转换所有使能的通道,结果可以存入不同的数据寄存器或通过 DMA 传输到数组。
4. 注入模式(Injected Mode)
部分单片机(如 STM32)支持注入通道。注入通道具有更高的优先级,可以由外部事件触发,打断常规转换。常用于电机控制中的电流采样,需要在特定时刻立即获取结果。
5. 间断模式
每次触发只转换一个或几个通道,然后停止,等待下一次触发。适合低功耗应用,可以降低平均功耗。
6. 过采样与硬件平均
部分单片机 ADC 支持硬件过采样,多次采样求和或平均,可以提高有效分辨率、降低噪声。
例如 STM32L4 系列支持硬件过采样,可配置 2x~256x 过采样率,有效位数可增加。
六、ADC 硬件设计要点
1. 参考电压设计
-
使用专用基准芯片,保证精度和温漂;
-
在参考引脚附近加去耦电容(如 100nF + 10uF);
-
避免参考电压走线经过大电流区域;
-
如果使用内部基准,注意其精度和温漂指标。
2. 输入信号调理
-
分压:当被测电压超过 ADC 量程时,使用电阻分压;
-
滤波:在 ADC 输入引脚加 RC 低通滤波器,滤除高频噪声和抗混叠;
-
缓冲:如果信号源阻抗较高,使用运放缓冲,否则采样电容充电不足会导致误差;
-
保护:加钳位二极管或串联电阻,防止过压损坏引脚。
3. 阻抗匹配
SAR ADC 采样时,内部采样电容需要从信号源抽取电荷。如果信号源阻抗太大,采样时间内电容电压无法稳定到输入电压,会产生误差。一般要求信号源阻抗小于几 kΩ,具体看手册。
计算公式(近似):

4. PCB 布局
-
模拟地与数字地分开,单点连接;
-
ADC 输入走线尽量短,远离数字高速信号;
-
参考电压走线加粗,避免干扰;
-
在 ADC 引脚附近放置滤波电容。
七、ADC 软件处理技术
1. 软件滤波
平均滤波
对多次采样结果求平均,可以降低随机噪声,提高稳定性。

中值滤波
对一组采样值排序取中间值,可以有效去除脉冲干扰。
一阶低通滤波

α 为滤波系数,取值 0~1,越小滤波越强,但响应越慢。
滑动平均滤波
维护一个固定长度的队列,每次新数据入队,旧数据出队,计算平均值。
2. 过采样与抽取
如果 ADC 本身不支持硬件过采样,可以通过软件多次采样求和来提高有效位数。每增加 4 倍采样次数,有效位数理论上增加 1 位。
例如:对同一信号采样 256 次并求和,相当于 16 位 ADC 的有效分辨率(假设噪声足够)。
3. 校准
-
零点校准:短接输入到地,记录失调值,后续减去;
-
满量程校准:输入已知精确电压,计算增益修正系数;
-
两点校准:同时修正失调和增益。
4. 结果换算
将 ADC 码值换算为实际物理量,例如:

再根据传感器特性换算为温度、压力等。
八、应用选型考虑
在实际项目中选择单片机 ADC 时,需要关注:
分辨率:根据精度要求选择 10 位、12 位或更高;
采样率:根据信号频率确定;
通道数:需要同时采集几路信号;
参考电压:内部基准精度是否满足要求;
功耗:低功耗应用注意 ADC 工作电流;
DMA 支持:大量数据采集时,DMA 可减轻 CPU 负担;
模拟看门狗:需要电压监测时有用;
差分输入:某些应用需要差分测量,抑制共模干扰。
常见单片机 ADC 对比:
| STM32F103 | 12 位 | 1 MSPS | 多通道、注入模式、DMA |
| STM32L4 | 12 位 | 5 MSPS | 硬件过采样、低功耗 |
| ESP32 | 12 位 | 2 MSPS | 多通道、但线性度一般 |
| ATmega328P | 10 位 | 15 kSPS | 简单易用 |
| MSP430 | 12 位 | 200 kSPS | 超低功耗 |
| 独立 ADS1115 | 16 位 | 860 SPS | I2C 接口,高精度 |
九、总结
单片机 ADC 是连接模拟世界与数字系统的桥梁。理解其工作原理(主要是 SAR)、关键参数(分辨率、参考电压、采样率、DNL/INL)、外设结构(多路开关、采样保持、触发、DMA)以及硬件和软件设计要点,是嵌入式工程师的必备技能。
实际使用中,需要根据具体应用合理选择参考电压、配置采样时间、设计输入滤波电路,并结合软件滤波和校准来提高测量精度。只有软硬件协同优化,才能充分发挥 ADC 的性能。






