
做数字电子或者嵌入式开发的基本都会碰到一个绕不开的环节把模拟信号变成单片机能够处理的数字量。市面上ADC的类型很多但教材里、课程设计里、面试题里高频出现的两个名字就是标题里说的积分型AD转换器和电荷再分配型AD转换器。前者常见于数字万用表这类对速度不敏感、但对精度和抗干扰要求很高的仪器后者则几乎是现代逐次逼近型SARADC的主流内核从几十块钱的工业采集卡到MCU片内ADC到处都有它的身影。这篇文章我打算把这两种转换器的来龙去脉、电路结构、核心公式、实操搭建和踩坑经验一次讲透。不管你是正在准备数字电子课程设计的学生还是想搞明白数据采集链路里ADC选型逻辑的工程师这篇文章都值得你花十几分钟读完。我会尽量把原理讲得通俗把参数算得明白把别人不太会在文档里写的工程细节也一并抖出来。1. 两种AD转换器的整体设计与思路拆解先别急着看电路图我们先把这两类转换器的“设计哲学”讲清楚。为什么有了那么多ADC架构偏偏要把这两种拎出来对比因为它们代表了两种截然不同的模拟-数字转换思路一种用时间换精度一种用循环比较换位数。1.1 积分型ADC用时间换精度的“笨办法”积分型AD转换器尤其是双斜率积分型核心思想非常直白先把未知电压转换成时间再用计数器去度量这个时间。具体说就是用积分器一个运放加一个电容对输入电压进行固定时长的积分得到一个与输入电压成正比的积分电压然后把输入切换到极性相反的基准电压让积分器反向积分记录积分器输出回到零点所花的时间。因为反向积分的斜率是完全确定的由基准电压和RC时间常数决定所以这段时间正比于输入电压的大小。把时间用高频时钟数出来就得到了数字量。这个方案放弃了对速度的追求但换来了两个非常宝贵的特性第一转换精度几乎不依赖于积分电阻和积分电容的绝对值只要它们在两次积分期间保持稳定就行第二它对工频干扰有天然的抑制能力这个后面细讲。1.2 电荷再分配型ADC用循环比较逼近的“聪明办法”电荷再分配型ADC的思路完全不一样。它的核心是一个二进制权重电容阵列加上一个比较器再加上逐次逼近逻辑SAR逻辑。整个过程就像用天平称东西先从最重的砝码开始试放上去发现太重就拿下来不够就留着再试下一个轻一点的砝码直到把所有砝码都试完。在电气层面上它利用电荷守恒原理通过把不同权重的电容底极板接到基准电压让电容阵列顶极板产生一个与基准电压成比例的电压再与输入电压对应的电荷量做比较。每一步比较决定一位数字码N位转换器只需要N个比较周期就能完成转换速度远快于积分型。1.3 两种方案怎么选一张表看懂性能维度双斜率积分型电荷再分配型SAR转换速度慢通常每秒几十次到几百次快从几十kSPS到几MSPS精度/线性度极好可达1/10^6量级良好取决于电容匹配和校准抗干扰能力强对工频干扰有陷波作用较弱需要前端滤波电路复杂度简单对元件绝对值不敏感中等到复杂对寄生和失配敏感典型应用数字万用表、温度采集、称重仪表音频采集、工业控制、MCU片内ADC功耗中等极低动态功耗很低记住这张表后面所有原理和实操都是围绕这些差异展开的。2. 积分型AD转换器的核心原理与关键参数这一节我们聚焦双斜率积分型ADC。我会把工作原理、数学关系和设计要点一次性讲透。2.1 双斜率积分的完整工作过程一个经典的双斜率积分ADC由四个核心模块组成积分器运算放大器积分电容、比较器、模拟开关切换网络、以及数字控制与计数器。整个转换过程分三个阶段。第一阶段叫“调零/复位阶段”。所有开关闭合到地积分器输出被复位到零比较器进入已知状态计数器清零。这个阶段很短但必不可少。第二阶段叫“正向积分阶段”。控制逻辑把输入开关切到被测电压Vin假设为正积分器对Vin进行固定时间T1的积分。如果输入电压是负的就切到反向放大后的电压这需要在输入端加一个绝对值电路或者极性切换电路。在T1结束时积分器输出电压为Vout -Vin × T1 / (R × C)这里的负号来自反相积分器的接法我们只关心绝对值。T1通常由振荡器分频得到比如用一个16位计数器数满65536个时钟脉冲。因为T1是固定的所以T1结束时积分器输出电压与Vin是严格的正比关系。第三阶段叫“反向积分阶段”。控制逻辑把输入开关切到与Vin极性相反的基准电压Vref。积分器开始从上次的终点往零方向积分。当积分器输出过零时比较器翻转控制逻辑锁存计数器的值。假设这段时间为T2则有Vin × T1 / (R × C) Vref × T2 / (R × C)把两边共同的R和C约掉整理得到Vin Vref × T2 / T1如果用时钟频率fclk计数T1 N1 / fclkT2 N2 / fclk那么Vin Vref × N2 / N1这就是双斜率积分的灵魂公式。注意看公式里没有R、没有C、没有时钟频率的绝对值最终结果只取决于两次积分的计数比值和基准电压的精确度。这就是为什么它可以用很普通的元件做出很高精度的原因。2.2 为什么说它对噪声和元件漂移“免疫”很多初学者不理解为什么积分型ADC的精度能做那么高难道不怕积分电容漏电不怕运放漂移吗这里的关键在于“相关双采样”的思想。正向积分和反向积分用的是同一个积分电容、同一个积分电阻或者镜像匹配的另一个积分电阻、同一个时钟源、同一个比较器。这意味着电容的绝对值变化、电阻的温漂、时钟频率的偏移、比较器的失调电压虽然在每次积分过程中都会引入误差但作为比值计算时大部分都被抵消了。打个比方你用同一根准确度存疑的尺子去量两段长度只要两段长度都用这根尺子量然后求比值尺子的刻度误差就不会影响你得到的比例关系。双斜率积分就是把“被测电压”和“基准电压”放在同一根“尺子”上量。另外如果把正向积分时间T1恰好取为工频周期20ms的整数倍则50Hz及其整数倍频率的干扰在T1时间段内积分平均值为零相当于一个天然的梳状滤波器。这就是为什么数字万用表直接用双斜率积分ADC而不需要特别复杂的模拟滤波器。2.3 关键参数选取与误差来源分析设计一个双斜率积分ADC需要确定的参数主要是这几个积分电阻R和积分电容C的乘积RC这个值决定了在最大输入电压下正向积分结束时积分器输出电压是否在运放输出摆幅范围内。一般取法让最大输入电压Vmax在T1时间内产生的积分电压大约为运放输出范围的70%左右。时钟频率fclk它直接决定了计数精度。如果T2计数有±1个时钟的量化误差那么转换结果的最大量化误差约为1/N1也就是说N1越大分辨率越高。基准电压Vref通常用精密基准源如TL431、REF192、REF5025温度系数最好在10ppm以内。工程上还有几个隐藏误差源容易被忽略。一是积分电容的介质吸收效应。普通瓷片电容的介质吸收会比较明显会造成反向积分结束时曲线“拖尾”导致比较器过零判断偏移。解决办法是选择聚丙烯CBB电容或者聚苯乙烯电容实际使用中CBB电容在音频和仪表电路里很常见。二是比较器的响应延迟。比较器不是理想的从输入过零到输出翻转需要一个有限时间这会导致T2多计几个时钟。解决办法有两个在比较器后面加少量正反馈迟滞或者把这个固定延迟时间从测量结果里扣除。三是在正向积分结束切换到反向积分时开关切换瞬间产生的电荷注入会和输入信号叠加。因此模拟开关最好选低电荷注入的型号如CD4066在电压较高时表现还可以更讲究的场合用专门的模拟开关或者用JFET构成开关。从实际效果看用常见元件搭一个4位半精度约1/20000的双斜率ADC是完全可行的我曾见过有人在面包板上用LM358加上一个CBB电容做出过0.05%精度的转换效果核心就在于T1取得够长、基准够稳、电容介质够好。3. 电荷再分配型AD转换器的核心原理与数值示例如果说积分型ADC的关键词是“时间”那电荷再分配型ADC的关键词就是“电荷”和“权重”。这一节花大力气把它的原理掰开揉碎讲清楚。3.1 二进制权重电容阵列与电荷守恒原理电荷再分配型ADC的结构核心是一个电容阵列每个电容的容值按二进制权重排列C、2C、4C、8C、……一直到2^(N-1)C。除此之外还有一个与最大电容等值的单位电容这样总电容为2^N个C。最常见的是加一个1C的冗余电容使得总电容为2^N × C。每个电容的下极板通过开关连接到三个地方输入电压Vin、基准电压Vref、地或者公共端。所有电容的上极板连在一起接到比较器的一个输入端同时也是采样节点。整个转换分两大步。第一步是采样阶段。所有电容的下极板接到Vin上极板接到地给所有电容充电每个电容上存储的电荷为Q -C_i × Vin以顶端为参考。然后断开上极板与地的连接让上极板浮空。注意此时整个电容阵列上极板的总电荷为 -Vin × ΣC_i -Vin × 2^N × C。第二步是逐次逼近阶段。把所有电容的下极板统一从Vin切换到地。由于上极板浮空电荷无处泄放上极板电压会变成 -Vin可以推导总电荷不变但下极板从Vin变为0相当于上极板相对下极板变化了 -Vin。也就是说采样完成后上极板电压为 -Vin。这个电压是需要和“由基准产生的权重电压”做比较的基准状态。接下来的每一位判断都是在某个电容的下极板上从地切换到Vref通过电容分压作用使上极板电压产生一个正跳变跳变量为ΔV Vref × C_k / C_total其中分子是被接上Vref的电容权重分母是总电容2^N × C。控制逻辑从最高位权重最大的电容开始把该电容下极板接Vref其它接地的电容保持不变比较器比较此时的上极板电压与地电位。如果上极板电压还小于0或大于0取决于接法说明当前这个权重还不够这位数字码记为1如果比较器显示已经过冲说明权重太大这位记为0并把该电容下极板重新接地或改回原来的状态。然后进入下一位。逻辑上可以用一句话概括从最高位到最低位每一位都试一遍试完记住试错就还原。3.2 一个4位电荷再分配ADC的完整计算示例光说原理还是抽象我们拿一个4位的例子手算一遍这样你就能彻底理解SAR的逼近过程。假设电容阵列为8C、4C、2C、1C再加一个1C的虚拟电容总电容16C。参考电压Vref3V待转换的输入电压Vin1.75V。采样阶段完成后顶极板存储的电荷对应电压为 -1.75V。所有下极板接地时比较器的输入端顶极板电压为 -1.75V。第一位最高位8C把8C的下极板接到3V。顶极板电压变化为 3 × (8/16) 1.5V。比较器输入电压变为 -1.75 1.5 -0.25V仍然小于0。说明加8C的权重还不够最高位记为18C保持接3V。第二位4C继续把4C下极板接到3V。顶极板电压变化为 3 × (4/16) 0.75V。此时比较器输入为 -1.75 1.5 0.75 0.5V大于0说明加多了。这一位记为04C下极板重新接地。第三位2C把2C下极板接到3V。顶极板电压变化为 3 × (2/16) 0.375V。此时比较器输入为 -1.75 1.5 0.375 0.125V仍然大于0说明也多了。这一位记为02C下极板重新接地。第四位1C把1C下极板接到3V。顶极板电压变化为 3 × (1/16) 0.1875V。比较器输入为 -1.75 1.5 0.1875 -0.0625V小于0说明还差点意思。这一位记为11C保持接3V。最后得到的数字码是1001即二进制9。对应的模拟电压为 9 × (3V/16) 1.6875V与真实输入1.75V的误差为0.0625V正好在量化步长的一半以内。你也可以看到整个逼近过程就是一次“逐位试探”每个bit的权重就是 Vref×2^k / 2^N。3.3 与传统电阻分压型SAR ADC的对比说到逐次逼近ADC很多人会同时想到用电阻分压网络R-2R或256电阻串实现的SAR。这两种方案在教科书里都有但工程上电荷再分配型明显更常见原因是多方面的。首先电阻分压型需要2^N个精密电阻串联要做高位转换电阻数量和匹配精度都是大问题。12位就需要4096个电阻串面积、功耗、噪声都很可观。而电荷再分配型只需要N个二进制权重电容总面积约2^N个单位电容12位就是4096个单位电容在先进工艺下并不算大。其次电容阵列天然就是一个采样保持器。采样阶段它顺手把输入信号采到了电容上不需要额外设计独立的采样保持电路简化了前端设计。第三电荷再分配网络在比较过程中几乎不消耗静态电流只有在开关切换的瞬间才有动态功耗这让它非常适合低功耗应用。不过电容也有它的软肋一是电容失配单位电容越小失配越严重所以高位转换为了维持匹配精度必须用足够大的单位电容二是比较器输入端的寄生电容会参与分压造成增益误差三是开关的电荷注入和时钟馈通会在采样保持瞬间改变顶极板电压。这些在后面的常见问题里我会专门讲。4. 两种ADC的实操搭建与调试要领原理说完了接下来是动手环节。这一节我分别给出两种ADC的可复现搭建方案和调试心得。4.1 用分立元件搭建一个双斜率积分ADC我建议课程设计或者毕设阶段首选双斜率积分型来搭实体电路因为它的容错率高调试友好元件也好找。器件清单如下积分运放LM358或者OP07。OP07的输入失调电压更低适合做积分器但它的压摆率不高积分电压斜率不能太陡。比较器LM311带选通端可以直接输出逻辑电平用起来很舒服。模拟开关CD4066或CD4053。CD4066是四路双向开关导通电阻约几十到几百欧姆对积分环路有影响但可接受。积分电容0.1uF到1uF的CBB电容千万别用X7R瓷片电容。基准源TL431加上电阻分压得到2.5V或者2.048V的基准。逻辑控制最省事的方案是用STM32或者Arduino的定时器和GPIO来产生控制时序并读取比较器输出进行计数。也可以用纯数字电路搭一个状态机但调试难度会大不少。关键的时序设计如下正向积分时间T1选100ms时钟频率选100kHz则N110000。假设基准Vref2V最大输入电压为1V则最大反向积分计数不会超过10000用16位计数器足够。RC参数的选择原则是正向积分结束时积分器输出不要超过运放输出范围。以OP07来说输出范围大约在Vcc-2V到Vee2V如果电源为±5V则输出范围约±3V。取R100kΩC0.1uF则RC10ms。输入Vin1VT1100ms时积分输出 -1 × 0.1 / 10ms -10V这样会严重超过输出范围实际RC要选大得多。重新算积分输出电压范围应限制在约3V以内最大输入算1VT1100ms则RC必须大于 Vin_max × T1 / 3V 0.033秒。取R470kΩC0.22uFRC0.1034秒输出约0.97V最大输入时。这是一个比较合理的设计。开关切换顺序要在代码里处理好尤其是从正向积分切换到反向积分的瞬间如果开关切换有先导通后断开先断后通应尽量避免两个输入同时导通的情况不然积分器输入会瞬间短路。调试时有一个很实用的技巧给比较器的正输入端或者负输入端取决于接法加一个很小的正反馈电阻比如1MΩ从输出反馈到同相端。这样比较器就有了约几十毫伏的迟滞可以防止过零附近因为噪声导致反复翻转计数结果会稳定很多。4.2 电荷再分配ADC的搭建与仿真方案电荷再分配ADC用分立元件搭实体电路比较痛苦因为多个开关和电容的寄生参数很难控制。我强烈建议如果是为了学习原理先在LTspice或者Multisim里做仿真如果是为了做实际产品直接买现成的SAR ADC芯片比如12位的MCP3201、ADS7841或者直接用STM32内置的12位ADC。不过这里还是给出一个仿真搭建的思路。在LTspice里用理想开关模型电压控制开关配合理想的二进制电容阵列即可。电容值可以设为单位电容1pF阵列总电容16pF4位。比较器可以用LT1011宏模型或者直接用behavioral voltage source模拟一个理想比较器。SAR逻辑可以用数字D触发器加状态机搭出来更快捷的办法是直接把比较结果反馈到一个压控开关的控制端由外部脉冲按顺序推进。建议从4位开始仿真验证波形正确后再扩展到8位。仿真时重点关注三个地方采样阶段结束时顶极板的电压是否正确假设开关切换顺序为底极板先从Vin切到地、再切到Vref顶极板电压变化是否与理论计算一致比较器输出电压翻转沿与时钟边沿之间的建立时间是否足够避免出现亚稳态。另外可以故意给某个电容加1%的失配看看转换结果的INL误差是怎么变化的这个仿真实验对理解SAR ADC的精度瓶颈非常有帮助。4.3 实际调试中的几条重要经验不管做哪种方案有几个共通的调试经验我建议大家直接抄走。第一个经验是基准电压一定要先独立测准。很多转换误差其实不是转换电路本身的问题而是基准源没有校准。我见过好几次学生折腾很久发现ADC结果偏了2%最后拿万用表一量TL431分压电阻本来标称1%但分压后精度远差于预期。第二个经验是比较器或者运放的电源去耦要做好。模拟电路最怕电源噪声建议每个运放和比较器的电源脚就近放一个0.1uF陶瓷电容和一个10uF电解电容这是最便宜有效的降噪手段。第三个经验是采样保持阶段如果发现结果跳动不要先怀疑芯片先用示波器看比较器输入端的波形有没有毛刺。很多时候是逻辑控制信号通过开关的寄生电容串到了模拟节点上解决方法是把数字控制信号和模拟信号尽量布线远一点或者在关键节点加小电容滤波。第四个经验是关于调试流程的先不开基准把输入接地确认转换结果为0附近再输入一个已知的中间电压确认转换结果落在预期范围的中间最后再测满量程电压。从零开始逐步加压比直接测一个随机电压更容易定位故障。5. 常见问题与排查技巧实录这里把我见过的、以及自己在调试中踩过的坑集中整理一下。5.1 积分型ADC常见问题现象可能原因排查与解决输出结果偏大且不稳定比较器过零翻转有延迟加正反馈迟滞改用高速比较器扣除固定延迟计数小信号下非线性严重积分电容介质吸收换CBB/聚丙烯电容适当增大RC时间常数工频干扰明显T1不是工频周期整数倍调整T1为20ms的整数倍如100ms、200ms输入短路时计数不为零运放失调、比较器失调调零电路选低失调运放在软件中做零点校准基准切换瞬间毛刺大模拟开关电荷注入选用低电荷注入开关开关两端加补偿电容积分型ADC一个隐蔽的问题是反向积分阶段如果输入电压很小积分器输出从很小的电压开始反向积分比较器可能因为输入偏置电流或者失调而提前翻转导致小信号时的结果读数偏高。解决办法是把调零做得更彻底或者干脆在硬件上让正向积分阶段结束时输出一个不小于几十毫伏的电压。还有一个实践细节CD4066的模拟开关在电压接近电源轨的时候导通电阻会增大。如果输入信号范围接近电源轨建议改用CD4053这种支持更宽电压范围的开关或者把信号预先缩放到中间范围。5.2 电荷再分配型常见问题现象可能原因排查与解决高位码明显错误电容阵列连接顺序错误核对每个权重电容对应的控制线不要搞混MSB和LSB转换结果有固定增益误差比较器输入寄生电容参与分压尽量减小比较器输入端寄生做数字增益校准结果跳动、重复性差采样保持阶段电荷泄漏或噪声缩短采样保持时间增强电容阵列周围屏蔽加大单位电容值某些码型下INL突然变大电容失配加大单位电容面积采用共质心布局做数字校准比较器建立时间不足SAR时钟过快降低时钟频率验证最差状态下比较器的稳定时间SAR型ADC最恶心的问题之一是“错码不回跳”。因为逐次逼近是逐位进行的如果高位判断错了后面所有步都会基于错误状态继续逼近而且无法自动复原。所以调试的时候建议在输入电压缓慢扫描时观察输出码跳跃情况如果发现输出码在某个阈值附近出现大幅跳变而不是±1 LSB的抖动就说明高位判断有问题要回头检查比较器和电容阵列。另一个经常被忽略的点是采样开关闭合瞬间输入信号源内阻会给电容充电。如果信号源内阻太大在有限的采样时间内电容充不满转换结果就会偏向一个方向。所以要保证信号源驱动能力足够必要时在ADC前面加一个缓冲运放。这也是为什么几乎所有SAR ADC芯片手册里都推荐前端加RC滤波加运放缓冲的原因。5.3 通用的模拟调试技巧最后分享几个万金油调试技巧。第一示波器一定要接地良好探头尽量用短地线夹而不是那个长地线鳄鱼夹不然测量到的都是共模噪声尤其电容充电瞬间的干扰会被放大。第二给你的实验电路做一个简单的屏蔽罩。不需要很高级拿一层铜箔胶带或者一个金属饼干盒接地就能挡掉很多环境辐射干扰。当年我在实验室搭积分型ADC时人一靠近显示数字就往一边飘加了屏蔽后立刻稳定就是60Hz工频电场捣的鬼。第三始终记着给模拟地和数字地做单点连接。如果电路板上有单片机这种数字器件数字部分的开关噪声会通过地线传到模拟部分。单点接地或者用磁珠隔离模拟数字地比什么滤波都有效。第四调试时多做交叉验证。用手里的万用表量同一节点电压再和ADC转换结果对比如果两者一致才说明转换链路是可信的。数字电路可以靠逻辑分析仪模拟电路最大的“调试工具”就是一块能测到毫伏级的万用表加上一个不骗人的示波器探头。我的个人体会是两类ADC虽然原理截然不同但调试的思维方式高度相通。都要盯住“参考量是否准确”“采样节点是否有额外漏电”“比较器/运放的翻转时机是否被干扰”这三件事。把这三件事捋顺了大部分转换器都能调出来。此外如果你在课程设计或者项目里选择了其中一种强烈建议把另一种也仿真一遍纸上得来终觉浅亲手走过一遍正向积分和反向积分、亲手算过一次电容逼近的累加法对这两种架构的理解就不是背公式而是真正的内化。