一、ADC采样通道
最常见的ADC有两种:
- ++逐次逼近型SAR-ADC++:这是我们最常见的8位/12位ADC,特点是转换速度快,适合消费类电子、小家电、充电器、个人护理等产品。
- ++∑-Δ型ADC++:通常为24位高分辨率ADC,特点是精度高、噪声低,适合充气泵、额温枪、 体重秤等产品。
尽管"逐次逼近型SAR-ADC"、"∑-Δ型ADC"听起来很复杂,但请不必担心,本文不会深入复杂的芯片设计原理,而是聚焦于如何高效使用它们。
我们以12位ADC作为讲解对象,因为它是目前应用最广泛的类型,理解了它的使用,再学习其他类型的ADC就会事半功倍。
由于ADC涉及的概念较多,我们将分多次讲解,主要内容包括:采样通道、参考电压、分辨率、精度/误差、滤波等。
ADC操作流程

采样通道

如上图,ADC的采样通道分为"内部通道"、"外部通道"。通过配置相应的寄存器选择通道,即可实现对模拟信号的采集。
外部通道,通常直接连接到MCU的GPIO,如上图中的ANx。
内部通道,不占用外部引脚,在许多应用中能简化设计并提升可靠性
- ++内部通道++ ++-VDD++:锂电池供电的应用上最为常见,可以直接将锂电池接在MCU的VDD端口,然后通过这个内部通道读取电池电压,从而省去一个额外的外部电阻分压网络和IO口,实现电池电压测量。

这里会存在另外一个问题:在VDD增加RC滤波的电路中,VDD端的电压实际比BAT要低一些,那么VDD采集电池电压如何更准确呢?
若需深入探讨,可以留言或在公众号发送信息。
- ++内部通道-GND++:ADC的参考电压实际有2个,一个是大家常说的"参考电压",另外一个是容易忽略的"GND"。如果ADC以不稳定的GND为参考,采集到的电压就会有误差,这就是所谓的"零点偏移"(也就是我们常说的Offset)。零点校准可以消除offset,实际上是通过内部通道GND的采样消除。
- ++内部通道-Vref++ :你可能会疑惑,参考电压怎么自己也能被测量?将会在"ADC-参考电压"给出答案。
通道切换
大部分应用都会使用多个ADC通道,那么在切换通道之后,需要等待多长时间,采集的数据才准确?估计很多工程师都有这个疑问。
其实,这和电路外围有关。核心原因在于外部电压需要对ADC内部的采样电容充电。如果外部阻抗比较大,达到目标电压的时间就会变长。如果在这种情况下,切换通道之后直接采集,那么采集到的值往往是不准的。也就是下图电压U以下时的采集。

电容充电曲线
一般来说,ADC的输入阻抗在用户手册的电气特性章节会给出一个最大值,并且它会和采样时间的设置相互关联,以此来判断需要多久延时。
当然,有些用户手册会提供延时说明。如果手册没有明确标注,那么在实际操作时,建议直接舍弃前1到2次的采样值。这个"舍弃"动作,本质上就是一个延时等待的过程,让信号充分稳定。
而对于切换到内部通道(比如VDD、Vref),通常不需要额外延时。
二、ADC参考电压(一)
文章关键总结
-
测量的电压需低于参考电压
-
重要公式和LSB
-
结合应用介绍典型参考电压:1.2V、2V
参考电压

假设你有一把最大量程为 2米 的身高尺,它可以轻松测量低于2米的身高,但如果遇到超过2米的人,这把尺子就无法测量了。这里的 "2米 " 相当于ADC(模数转换器)中的 参考电压 ------它决定了ADC能够测量的电压上限。
因此,实际需要测量的电压必须 低于参考电压 ,否则转换结果将不准确或溢出。
常见的ADC参考电压有以下几种类型:
-
内部1.2V
-
内部2V
-
内部2.048V
-
VDD(芯片供电电压)
具体支持哪一种或哪几种,需参考原厂的数据手册。不同厂商的芯片可能只提供其中一种参考电压选项,因此在芯片选型时,务必结合实际测量范围的需求,重点关注这一参数。
重要公式

-
转换电压 :输入到ADC采样通道的实际电压值,可查看" MCU之采样通道"
-
AD值 :ADC完成转换后的数值,通常在用户手册的寄存器描述中查看格式与范围
-
参考电压 :即本次重点介绍的基准电压
-
4096 :对应 12位ADC 的分辨率,即 2¹²,若为 8位ADC ,则该数值为 2⁸= 256
举例来说,在12位ADC中,若参考电压为2.048V,采集到的AD值为2048,则实际电压为:

重要单位:LSB
LSB,最低有效位。这个听起来有些拗口的专业名词,其实代表了ADC能识别的最小电压变化。
以一个参考电压为 2V 的 12位ADC 为例:
1 LSB = 2 / 4096 ≈ 0.00048828
这个数值有两层含义:
-
在理想情况下(不考虑误差),这是ADC能够测量的 最小电压单位 ;
-
ADC输出的两个相邻数字值(例如1000和1001)所对应的实际电压 差值 。
内部参考电压:1.2V和2V
如果要采集的电压低于0.48828mV怎么办呢,我们可以选择更低的参考电压,如1.2V。
参考电压为 1.2V 的 12位ADC,1 LSB = 1.2 / 4096 ≈ 0.00029297
内部参考电压1.2V和2V,是我们在设计方案时最常用的参考电压。
举一个实际应用:TWS充电仓

在TWS充电仓的设计中,通常需要检测一个非常微小的电流,用以判断耳机是否充满。例如,某些产品要求电流在5mA~8mA时关断充电。我们以7mA的关断电流、搭配1Ω采样电阻为例,此时采样电阻上的电压为7mV。
我们结合ADC公式,来具体对比使用内部1.2V和2V参考电压的差异:
|-----|------------|---|-----|------------|
| 内部参考电压2V || | 内部参考电压1.2V ||
| AD值 | 转换电压 mV | | AD值 | 转换电压 mV |
| 12 | 5.859375 | | 22 | 6.4453125 |
| 13 | 6.34765625 | | 23 | 6.73828125 |
| 14 | 6.8359375 | | 24 | 7.03125 |
| 15 | 7.32421875 | | 25 | 7.32421875 |
| 16 | 7.8125 | | 26 | 7.6171875 |
由上述表格可看出,在不考虑其他误差的情况下,对于7mV检测点,使用内部1.2V参考电压确实比2V具有更高的理论精度。同样采集5个数值,1.2V参考电压所对应的"转换电压"范围也更小,这意味着测量结果更加集中。
尽管在小电流检测的场景中,1.2V在参数上优于2V,但在实际项目里,内部2V参考电压通常是完全足够的。这是因为被采集的电流信号本身很小,设计时通常会预留足够的余量,且整个电路工作环境相对平稳。此外,许多MCU的ADC模块具备偏移校准/零点校准功能,可进一步保证测量准确性。因此,在实际产品应用中,1.2V和2V参考电压之间的差异通常并不明显。
由于篇幅所限,关于ADC参考电压的其他重要内容,我们将在下一篇文章中继续讲解,包括: 参考电压VDD、切换参考电压、参考电压的妙用 。
*三、*ADC参考电压(二)
文章关键总结
-
结合应用介绍参考电压:VDD
-
切换参考电压的延时及妙用
参考电压:VDD
使用参考电压VDD的典型应用:NTC温度采集、MOS驱动电路的短路/过流检测。

我们以 NTC温度采集 为例,下图是等效电路图

待测点的电压是

我们具体推算一下 VDD 和 内部2V 这两类参考电压,就能直观地判断哪种更合适。
- 参考电压VDD

- 参考电压2V

这2种的差异:使用 VDD作为参考电压 ,其计算公式中的 VDD 会自然抵消,使得结果与电源绝对值无关。
而使用 内部2V参考电压 ,必须已知VDD的精确电压,才能反推回 NTC 的阻值。

在电动牙刷、电推剪、便携式榨汁机、电子烟等产品的短路/过流检测中,常采用 VDD作为ADC参考电压。其检测原理与NTC温度采集类似,通过判断采样点电压是否超阈值来实现保护。
若需深入探讨,可以留言或在公众号发送信息。
切换参考电压
ADC参考电压切换后需等待稳定,但不同切换方向的稳定时间不同:
-
内部参考→VDD:稳定时间极短,通常可忽略
-
VDD→内部参考:需要一定稳定时间
原因:VDD由外部电容支撑,持续稳定;内部参考电压在未使用时可能关闭,重新启用需要启动和稳定时间。
具体延时请以芯片数据手册为准,必要时可通过实测或咨询原厂确定最佳值。
零延时切换是技术趋势,因此即便是同一厂商,其新旧产品在性能上也会有差异。
参考电压的妙用
在"MCU之采样通道"一文中我们提到,当采样通道选择 内部参考电压Vref ,且 参考电压源选择VDD 时,由于Vref是固定值(如2V),此时ADC的读数直接反映了VDD的电压大小,如下公式:

有些芯片的采样通道支持 VDD/4 ,如下公式:

在需 快速交替采集 电池电压(**用VDD作基准)**和供电电流(用内部基准Vref)的应用场景中,参考电压切换带来的延时可能无法满足实时性要求。
对此,有两种解决方案:
-
若MCU支持将内部基准电压Vref配置为 ADC采样通道 (而非基准源),则可直接测量其电压,避免切换延时;
-
若芯片本身的参考电压切换速度极快,也可直接使用。
四、AD时钟、采样与转换时间
ADC在配置并启动后,会自动执行 采样与转换 两个步骤。通常只需等待转换完成,读取结果即可。不过,不同MCU厂商通常会提供诸如AD时钟配置、采样时间选择等参数供调整。常见的程序处理方式是循环等待转换完成,这段时间即为采样与转换所需的总时间。
本文将以AD时钟、采样及转换时间为重点展开说明。
AD时钟
采样与转换的时间基于AD时钟,不同MCU厂商对AD时钟的称呼可能不同,例如中微称其为TAD,晟矽和应广则称为ADCLK。AD时钟通常由内部高频时钟分频得到。对于采用RISC内核的MCU,AD时钟频率多集中在1MHz、500kHz和250kHz;而基于51内核的MCU,其AD时钟通常更快,常见有4MHz、8MHz、12MHz和16MHz。
尽管部分用户手册支持选择更高的AD时钟频率,但在实际应用中,其表现会受到参考电压、工作电压等条件的限制。
根据中微某产品的建议(如下图),在锂电池供电条件下:
-
当参考电压为VDD时,AD时钟需设为 FHSI / 32 = 16M / 32 = 500KHz
-
当参考电压为2V时,AD时钟需设为 FHSI / 128 = 16M / 128 = 125KHz

如下图晟矽某产品的建议,其AD时钟可根据参考电压进行配置,最高频率为2MHz或1MHz:

RISC内核的采样/转换时间
我们以最常用的500kHz的AD时钟为例,说明从启动ADC到获取数值的总时间计算。ADC工作包含"采样"与"转换"两个阶段,总时间为二者之和,该时间需结合AD时钟计算。
各厂商的表述方式不同:例如中微、应广、十速等厂商的用户手册中,常用"转换时间"来指代整个过程的耗时。如前文展示的中微表格就列出了不同配置下的转换时间:

十速则在电气特性中给出答案

与之前厂商不同,晟矽将总时间明确划分为可配置的采样时间与固定的12个AD时钟转换时间。因此,总时间 = (采样时间 + 12) / AD时钟频率。
以某产品为例:AD时钟为500kHz,若设置采样时间为8个时钟周期,则总时间为 (8 + 12) / 500kHz = 40μs。

好了,现在你已清楚如何计算时序。但随之而来的问题是:我们为何要深究?直接使用厂商的Democode是不是就行了?
五、MCU方案不稳定?先看看ADC"磨蹭"了多久
在上一篇MCU之AD时钟、采样与转换时间中,我们探讨了"++AD时钟++ "与"++RISC内核的采样/转换时间++",相信不少读者心中可能会浮现出这样几个疑问:
-
8位机的采样/转换时间为何能达到几十us这么长?
-
文中提到"RISC内核",那8051内核的情况又如何呢?
-
我们为什么要特别关注ADC的采样/转换时间?
8051内核的采样/转换时间
在8051内核产品的电气特性中,单次ADC的采样/转换时间,通常以"采样率"或"转换率"来表示。

中微CMS8S6990C

晟矽MC51F7084
采样率/转换率的单位是sps,即"每秒采样次数"。
例如,若采样/转换率为 1 Msps,则单次 ADC 采样转换时间为 1 μs;若转换率为 500 Ksps,则单次时间为 2 μs。与上一篇文章提到的RISC内核几十us的采样转换时间相比,8051内核的速度明显更快。
需要注意的是,电气特性中标注的采样率/转换率通常是最大值,实际使用时应当根据具体应用需求选择合适的数值。
我们为何要关注采样/转换时间呢
在大多数简单应用中,工程师通常只需参照例程编写代码,此时大家更关注的是ADC的采样结果的准确性。
但对于时间要求较高的场景,例如电子烟、无刷电机驱动、便携式榨汁机等,ADC的采样/转换时间就显得尤为关键。这类应用往往需要快速做出响应,比如在短路时必须在规定时间内关闭MOS输出。以电子烟为例,通常要求在短路发生后50μs内关闭MOS。虽然大家可能会首先想到使用比较器,但该领域中的高手往往会借助ADC来实现这一保护。在如此短的时间内,如果单次采样时间过长,且未做滤波处理,就极易导致误判。因此,AD时钟和采样/转换时间是这类应用中至关重要的参数。
从程序实现的角度来看,若将ADC放置在中断中执行,就必须考虑定时器的中断配置。假设ADC采样/转换时间为40 μs,而定时器中断周期为50 μs,那么中断频率会非常高,导致主程序运行效率大幅下降。如果定时器中断周期设为30 μs(小于ADC转换时间),则主程序将完全无法执行,这样的定时器配置也就失去了意义。
此外,如果系统中ADC通道较多,且每个通道需要多次采样,工程需若不清楚采样/转换时间的计算,就可能影响采用 时间片轮询法 编写的代码,导致各时间片的时序发生偏差。
最后,ADC采样往往需要与PWM模块配合工作。若两者能够实现最佳配置,采样到的数据就会更加稳定、准确。这也解释了为什么使用相同的产品和相同的MCU,有些人设计的系统更加稳定可靠。
六、MCU之ADC分辨率、误差、精度、有效位
ADC最核心的竞争力和最容易混淆的几个概念:分辨率、误差、精度、有效位。
分辨率
想象一下家里的空调:有的空调支持0.5℃一档加减,有的则是1℃一档。这0.5℃和1℃就是分辨率。
对于ADC来说:
-
24-bit分辨率:则切割成了 16,777,216 份(2的24次方)
-
12-bit分辨率:将参考电压切割成4096份(2的12次方)
-
8-bit分辨率:将参考电压切割成256份(2的8次方)
误区提醒:分辨率高,并不代表测量一定准。就像一把尺子刻度画得再细(分辨率高),如果尺子本身受热缩短了,量出来的长度依然是错的。所以,分辨率通常只代表ADC的"理论位数"。
误差与精度
举个例子:
在一个恒温25.0℃的实验室里,你用两个温度计测量:
-
B显示26.0℃,误差为1.0℃(误差4.0%)。
-
A显示25.2℃,误差为0.2℃(误差0.8%);
显然,A的精度比B高。
在实际电路中,ADC采集的误差 = ADC模块固有误差 + 外部电路误差。如果用MCU采集NTC热敏电阻的电压,最终发现偏差很大,这不一定是ADC的锅。外部分压电阻的精度(1%或5%)、参考电压的漂移、甚至PCB走线的干扰,都会叠加在最终结果上。
有效位
一个12位分辨率的ADC,但实际用起来,可能只有9位是稳的。
假设使用2V的参考电压,测量一个恒定的1V信号,理论ADC值应该是2048(二进制:1000 0000 0000)。
但在实际读取时,你发现最后3位一直在跳动(000~111之间随机乱变)。这意味着这最后3位是"无效"的,受噪声影响无法信任。
这时,原本12位的分辨率,扣除掉3位波动,有效位就只有9位。
这波动的3位对应约4mV的电压偏差。在普通电池电压检测中,4mV可能不算什么;但在TWS耳机充电仓检测"充满关断电流"这种微弱信号时,4mV的波动可能误判。
如下是中微SC8F076和芯圣HC18M30xF的用户手册,中微标注在选择内部参考电压时,有效位是8位;芯圣的典型值是10位。并非所有的用户手册都会标注有效位。


通过前面的对比,我们不难发现:ADC误差才是决定测量"准不准"与"稳不稳"的核心。既然误差如此关键,那它究竟是从哪儿来的?在接下来的系列文章中,我将带大家拆解 ADC 误差的来源。我们不仅会分析 ADC 本身的增益误差、偏移误差,还会涉及那些听起来让人头大的**积分非线性误差(INL)、微分非线性误差(DNL)**等等。我会延续通俗易懂的风格,带你攻克这些晦涩的专业名词。