ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

双斜率ADC原理与选型:低速高精度测量中的低调王者

双斜率ADC原理与选型:低速高精度测量中的低调王者 前两年我给一台粮仓测温仪选采样方案一开始用的是某款 SAR ADC12 位分辨率速度也不慢但数据就是稳不下来零点附近来回跳后来甚至怀疑是程序 BUG。后来我拿同一路信号去接一台老式数字万用表读数纹丝不动。那台万用表里用的不是什么神秘器件正是双斜率转换器Dual Slope Converters。从那时候起我对这类又慢又准的 ADC 彻底改了观念在低速高精度场景里它才是被低估的王者。双斜率转换器是一种积分型 ADC它的核心思路是被测电压先被“积分”成斜坡再通过与参考电压的二次积分把模拟量转换成时间量最后用计数器把时间量变成数字。它不像 SAR ADC 靠电阻网络匹配也不像 Delta-Sigma ADC 靠复杂数字滤波结构简单直接却能做到 16 位甚至 20 位以上的分辨率而且天然抑制工频干扰。这篇文章我想从原理、参数选型、PCB 布局、校准测试到芯片选型一条线讲清楚给正在做仪表、传感器采集或者低速高精度测量的朋友一个完整参考。1. 双斜率 ADC 的工作原理为什么两次积分能换来高精度1.1 二次积分的完整过程从“充电”到“放电”的时间换算双斜率这个词听起来神秘拆开就一句话先把输入电压对电容充一段固定时间再把参考电压接上去“放电”放电到零的时间正比于输入电压。积分器在整个过程中充当一个线性的电荷累加器。完整转换时序分三个阶段。第一阶段叫自动调零。此时输入开关断开积分器输入端短接到地同时反馈回路把比较器和积分器的失调电压存到自动调零电容上相当于把系统“清零”。这个阶段解决了运放偏置和比较器失调对转换精度的影响也是双斜率 ADC 能做到高精度的关键细节。很多人搭电路时容易忽略自动调零电容的质量和容量后面我会专门讲。第二阶段是信号积分。开关切到被测电压 Vin积分器对输入信号进行固定时间 T1 的积分。假设输入为正积分器输出从零开始向下或向上线性斜率变化最终电压 V1 满足V1 Vin × T1 / (R × C)关键点是 T1 固定所以 V1 与 Vin 成正比。如果 Vin 是 1V积分电容上累积了 1 个单位的电荷如果是 2V同样时间内累积 2 个单位的电荷。这一阶段并不测量什么只是把电压“搬”到电容上。第三阶段是参考回积分。开关切到与输入极性相反的参考电压 Vref积分器开始反向积分把电容上的电荷“倒回去”直到输出回到过零点。比较器检测到过零的瞬间计数器记录从第二阶段末尾到此刻的时钟数 T2。因为从 V1 回到零这个过程电容放掉的电荷等于之前充进去的电荷所以V1 × C (Vref / R) × T2把 V1 代入得到Vin × T1 / (R × C) Vref × T2 / (R × C)R 和 C 同时被约掉化简为Vin Vref × T2 / T1这个公式是整个双斜率架构最核心的结论。我猜不少人在课本上见过它但未必意识到它的分量最终结果里完全没有 R 和 C。1.2 对 RC 漂移免疫的数学本质为什么双斜率 ADC 对积分电阻和电容的温漂一点都不敏感这就像用同一个水桶盛水先装满一桶未知浓度的盐水再倒入同样体积的清水观察杂质含量桶的容积大小本身不会影响判断结果。R 和 C 不进入最终表达式意味着积分电阻的温漂、积分电容的老化、甚至同一批产品中 RC 参数的一致性问题都不会影响转换精度。这一点在实际工程里非常可怕的好处你的积分电阻可以用普通厚膜电阻积分电容可以用贴片电容只要它们在线性积分过程中没有明显的非线性失真最终的精度就不受影响。相比之下SAR ADC 的分压电阻梯形网络必须激光微调Delta-Sigma 的调制器虽然结构不同也对内部电容匹配有较高要求。更妙的是时钟频率的绝对误差也不影响精度。T1 和 T2 都是同一个时钟计数得到的。时钟慢了T1 变大但 T2 也成比例变大比值 T2/T1 不变。这就意味着你不必为双斜率 ADC 准备昂贵的恒温晶振普通 50ppm 的晶振甚至精度稍高的 RC 振荡器都足以保证转换准确度。精度真正依赖的只有参考电压 Vref 一个量这大大简化了高精度采集系统的设计约束。1.3 为什么它能压住 50Hz 工频干扰做低速模拟采集的人最头疼的就是 50Hz 工频干扰。信号调理电路里加了有源滤波器还是有点残留而双斜率 ADC 天然具备“积分平均”效果能在结构上把周期干扰折掉。看信号积分阶段积分器在 T1 时间内对输入连续积分。积分本身就是一个求平均的过程。如果 T1 恰好是 50Hz 工频干扰周期的整数倍比如 T1 100ms而 50Hz 的周期是 20ms那么 100ms 内正好包含 5 个完整工频周期。在这 5 个完整周期里工频干扰的正半周期和负半周期电荷分别被积分理想情况下它们正好相互抵消输出端的净影响为零。这个特性在双斜率 ADC 中是被专门利用的。芯片厂商在设计标准转换周期时往往会选择 100ms 或 80ms 这类与电网周期匹配的时间。更巧妙的是100ms 这个数值同时兼容 50Hz 和 60Hz 电网50Hz 的完整周期数是 560Hz 的完整周期数是 6。虽然我没有亲自验证过所有地区的电网但在实际设计中选择 100ms 作为积分时间等于自动获得了一组免费的工频陷波滤波器这是普通 SAR ADC 做不到的。我实测过一个对比给积分器输入一个叠加了 1V 峰峰值工频干扰的 0.5V 直流信号T1 设为 100ms 时转换结果稳定在 ±1 个字以内把 T1 改成 90ms结果立刻出现几十个字的跳动。这正是因为 90ms 不是 50Hz 周期的整数倍干扰无法被完全平均消除。2. 关键参数选型积分电阻、电容、时钟频率怎么定2.1 先从满量程积分电压开始反推很多初学者一上来就问“积分电阻该选多少欧”这其实是顺序错了。设计双斜率 ADC 的正确思路是先定满量程、积分时间和积分器输出摆幅再反推 R 和 C。假设你要做一个满量程 2V、分辨率 16 位的转换器。核心约束条件是在 T1 时间内满量程输入对应的积分输出电压 V1不能超过积分器输出裕量。以常见的通用运放如 TL072 为例供电正负 5V 时输出摆幅大约 ±3.5V。那我会在满量程时让 V1 保持在 2V 左右不要顶到 3.5V留出余量应对参考回积分前的噪声和过冲。选定 T1 100ms同时兼顾工频抑制那么 R 和 C 的乘积由下式决定R × C Vin_max × T1 / V1_max 2V × 0.1s / 2V 0.1s只要 R 和 C 的乘积等于 0.1 秒理论上满量程积分电压依然是 2V。这个选择很宽泛R 100kΩC 1μF或者 R 1MΩC 0.1μF或者 R 10kΩC 10μF 都行。但实际选择要考虑积分电流、电容的泄漏和频率特性。我的习惯是取 R 100kΩC 1μF。此时满量程积分电流为 2V / 100kΩ 20μA。这个电流值对大多数线性运放来说足够轻松输出噪声水平也在可控范围。若取 1MΩ电流只有 2μA运放偏置电流和漏电流的影响会显著上升若取 10kΩ电流到 200μA运放输出驱动能力没问题但功耗和参考电压缓冲器的负载要求会增加。接下来看时钟和分辨率的关系。16 位分辨率对应的最大计数值是 65536。如果让 T1 正好对应满量程计数器溢出那么 T1 65536 / fclk。T1 已经定成 100ms所以fclk 65536 / 0.1s 655.36kHz这个频率不高普通定时器就能产生。但实际设计中我不会让满量程正好等于 65536而是留大约 2% 的余量让最大计数值在 64000 左右这样就算输入超过满量程一点计数器也不会瞬间溢出。对应的 fclk 可以取 655360HzN1 65536而满量程 2V 对应的 N2 大约为 64000。代码再通过校准系数映射到真实电压。2.2 参考电压双斜率精度的真正锚点前面说过双斜率 ADC 的最终表达式里 R 和 C 被消掉了时钟误差也抵消了唯独参考电压 Vref 留着一动不动。Vref 的初始精度、温度漂移和噪声会 1:1 直接影响最终测量结果。所以参考源选型在整个设计中权重最高。参考电压怎么选第一步先看温漂。假设目标系统在 0 到 50 摄氏度的环境里工作要求温度引起的误差小于满量程的 0.01%也就是 2V 满量程时的 200μV。折算成相对误差是 100ppm。如果参考电压在该温度范围内漂移 100ppm所占预算就已经快满了。因此建议选温漂在 10 到 25ppm/°C 以内的参考源。我常用的几颗芯片包括 LM4040 系列低成本适合 1% 精度要求不高的场景、REF5025低噪声、温漂小适合较高精度设计、MAX6350 或 LT1021如果预算充足追求极低温漂和老化。输出 2.048V 或 2.5V 都可以关键是稳定。参考电压与满量程的关系也值得说。在有些芯片架构里满量程输入约等于参考电压在另一些芯片如 ICL7135里满量程设计为参考电压的两倍。自己搭建电路时可以让 Vin_max 略小于 Vref这样反向积分时间 T2 小于 T1留有余量避免计数器在满量程附近被截断。所以我上面举的例子用 Vref 2.048V满量程 2V既留出余量又利用了 2.048V 与二进制计数的方便换算。参考源的滤波也不能轻视。Vref 引脚上的高频噪声会直接串入积分电流。建议在参考输出端并联一个 1μF 到 10μF 的低 ESR 电容同时用 0.1μF 陶瓷电容滤掉高频。如果电路板空间紧张至少保留一个 1μF 电容。在较高精度的设计中还可以给参考芯片单独加一个 RC 低通滤波器比如 10Ω 串联、10μF 对地并联把噪声带宽进一步压低。2.3 时钟、比较器和自动调零环节的工程细节虽然时钟频率的绝对精度不影响比值 T2/T1但时钟的短期抖动会在计数器上产生细微误差。假设 fclk 655.36kHzT1 100ms那么 T1 内有 65536 个时钟沿。如果时钟在 T1 结束时出现一个周期的抖动则 T1 的相对误差约为 1/65536 ≈ 15ppm这会直接转换成测量误差。因此时钟可以采用单片机的定时器输出或晶振分频尽量避免用软件延时产生时钟因为软件调度会产生不可预测的抖动。比较器的设计是双斜率 ADC 中容易翻车的环节。比较器需要在积分器输出电压经过零点时给出精确的过零判断。比较器的输入失调电压、响应延迟和噪声都会影响 T2 终点判定的准确性。可以选用高速低失调比较器例如 TLV3501 或 LM311。更常见的是把比较器的同相端和反相端分别接积分器输出和地输出接单片机外部中断。如果比较器有滞后引脚建议不要加过大滞后因为过大的滞环会让过零点判断产生系统性偏移。我自己一般把滞环控制在 1mV 以内或者直接使用自稳零比较器。自动调零阶段虽然是“背景过程”但自动调零电容的选型和布局直接影响调零效果。这个电容要能保持比较器和积分器失调电压的采样值同时自身泄漏要小。C0G 陶瓷电容或薄膜电容是合理选择容值一般在 0.1μF 到 1μF 之间因为过小的电容在调零结束后电压下降快过大的电容又拉慢响应。另外调零电容的地端应连接到模拟地与积分电容地端保持等电位否则失调电压采样会引入地电位差误差。3. 实际电路搭建中的坑从 PCB 布局到器件选材3.1 积分电容选型陶瓷电容的介电吸收是隐形杀手这一节我要重点讲一个常规文档里很少提醒的问题介电吸收Dielectric Absorption。介电吸收是电介质的一种“记忆效应”电容在放电到零电压后内部偶极子需要时间释放残余电荷导致电容两端电压慢慢回升。双斜率 ADC 第二阶段就是靠电容电压回零来判定终点的如果电容有严重的介电吸收回零过程会带“尾巴”比较器触发的时刻比理想情况早或晚转换结果就会非线性。我踩过的坑是最初为了省成本积分电容用了 X7R 陶瓷电容。结果调试时发现输入电压 1V 以下小信号区域转换结果明显偏低重复性也不好。最开始还怀疑是运放问题后来换了一个 C0G 电容问题立刻消失。原因是 X7R 的直流偏压特性也会使容量随两端电压变化这相当于 R×C 乘积在积分过程中不再是常数直接破坏 V1 与 Vin 的线性关系。C0G/NP0 陶瓷电容和聚丙烯薄膜电容在这两方面表现都好得多。容值 1μF 的 C0G 贴片电容不好找可以用两个 0.47μF 并联或者改用聚丙烯薄膜电容比如 WIMA 或 EPCOS 的 1μF 轴向电容效果更稳。3.2 积分器运放和输入级设计积分器运放是双斜率 ADC 的“主力队员”它既要向积分电容提供稳定的充电电流又要保持输入端虚地同时自身偏置电流还不能干扰积分电荷。三个指标最重要输入偏置电流、输入失调电压和输出摆幅。输入偏置电流的影响要这样理解如果运放输入偏置电流是 50nA而积分电流只有 20μA满量程偏置电流相对误差约 0.25%。虽然它在两个积分阶段会部分抵消但总归是误差源。如果输入信号更小积分电流更小误差占比就更大。所以建议选择 FET 输入或 CMOS 输入的运放输入偏置电流最好在皮安级别比如 OPA140、ADA4610、TL072 这类 JFET 输入运放或者 TLV9002 这种 CMOS 输入运放。输入信号源的内阻也要特别注意。双斜率 ADC 积分阶段输入电压源需要提供积分电流如果信号源内阻达到 100kΩ而输入电阻也是 100kΩ那么实际积分电流就不是 Vin/R而是 Vin/(R Rsource)并且 Rsource 随负载变化而变化线性度就毁了。所以高阻抗信号源必须加一级缓冲运放让 ADC 从缓冲器输出直接取信号。这个缓冲器的失调电压会送到积分器但它可以在自动调零阶段被存储并抵消一部分只要选低速高精度缓冲器整体影响不大。3.3 PCB 布局与接地双斜率 ADC 对 PCB 布局的要求比数据手册里写的要严格得多。我总结过几条硬性经验。第一积分电容和积分电阻的接地端必须接到模拟地上模拟地和数字地单点连接连接点通常选在 ADC 芯片的 GND 引脚附近。不要在积分器输入区域大面积铺数字地否则数字开关噪声会通过地平面注入积分器。第二积分器输出和比较器输入的走线要尽量短并且远离数字时钟线和数据线。我在实验板上一开始把积分器输出走线从数字驱动芯片旁边穿过结果每次数码管刷新时转换结果就会跳 2 到 3 个字。后来把走线挪到 PCB 另一侧跳变就消失了。这类问题用示波器看不明显只能用排除法。第三参考电压源的位置要靠近 ADC 的参考输入引脚避免走线穿过数字信号区域。参考芯片的去耦电容最好直接放在引脚旁边的过孔附近形成一个小闭环。如果参考源离 ADC 较远建议用一条单独走线从参考引脚拉到 ADC不要和模拟输入信号共用回路。工频干扰的拾取也跟布局有关。曾经我把输入端子到积分电阻的引线绕了一大圈形成一个很大的环路工频干扰在环路上感应出的电压直接叠加在被测信号上即使 T1 取 100ms 也只能平均掉一部分。后来重新调整布局把信号环面积缩小并且在输入端子处加了共模电感才彻底解决。4. 精度测试与校准从数据手册到实测数据4.1 零点校准与增益校准的完整流程一块双斜率 ADC 板子焊好、把代码写完别急着上真实信号先做校准。虽然双斜率原理上不依赖 RC但运放失调、参考电压初始误差、比较器偏移等因素还是会形成系统误差。校准分两步零点校准和增益校准。零点校准的方法是把输入端短接到模拟地执行一次完整转换记录下来输出计数值 ZeroCode。理论上应该是 0但实际可能是几个字甚至几十个字取决于运放偏置、比较器失调和自动调零电路的残留。这个 ZeroCode 要在每次测量结果中减去。增益校准的方法是用一个高精度直流源比如 FLUKE 校准源或精度不低于 0.01% 的电压基准施加一个接近满量程的电压比如 2.000V执行转换得到 FullCode。于是增益系数可以定义为Gain 2.000V / (FullCode - ZeroCode)之后任意输入电压的换算公式就是Vin (Code - ZeroCode) × Gain这两个系数都要保存到非易失存储器里。保存时建议多存几份加校验位防止掉电写错。我在项目里习惯把校准值以浮点格式存在 EEPROM 头部同时存一个 CRC 校验上电读出时若校验失败就使用默认系数并点亮一个校准警告标志。需要注意的是校准之后如果更换了积分电阻、积分电容或参考电压芯片必须重新校准。因为虽然 RC 不影响理论精度但更换器件很可能改变了运放偏置、参考电压初值等参数原有的零点或增益系数就不再匹配。4.2 线性度与噪声测试方法校准完成后还需要评估线性度和噪声。线性度测试的做法是用高精度电压源按 0.1V、0.2V、0.5V、1.0V、1.5V、2.0V 等步进施加输入记录每个点的转换结果计算端基线性度。如果在小信号区域出现明显偏差优先怀疑积分电容的介电吸收和运放偏置电流影响。如果在大信号区域偏差明显优先怀疑积分器输出是否接近饱和或者参考积分阶段的电流是否因为回路电阻产生误差。噪声测试更简单也更重要。把输入端稳定在恒定电压比如 1.0000V连续采集 100 次统计最大最小值差和标准差。标准差越小有效分辨率越高。如果噪声主要来自参考电压可以给参考源加大电容再测看改善程度。如果噪声来自比较器可以用示波器观察积分器输出在过零点附近的抖动通常能看到毛刺。我在实际测试中得到的一组数据是使用 C0G 电容、OPA140 积分器、REF5025 参考源、T1100ms、16 位计数输入 1V 时连续测量 100 次最大最小差为 4 个 LSB算下来有效分辨率约 14 到 15 位。对于低速直流测量这个表现已经可以接受。若想继续压低噪声可以增加软件平均因为双斜率 ADC 本身的随机噪声接近白噪声平均 16 次能再获得约 2 位有效分辨率。常见的误差来源和排查手段我用表格整理了一下方便大家对照误差表现 优先怀疑对象 排查与解决办法 零点偏移大 运放偏置电流、自动调零电容质量 加大调零电容、换低偏置运放 小信号非线性 积分电容介电吸收、X7R偏压特性 换C0G或聚丙烯薄膜电容 大信号偏差大 积分器输出饱和、参考电源带载不足 减小输入满量程、加强参考源驱动 读数随工频波动 T1与电网周期不匹配、PCB信号环路 改T1为100ms、压缩信号回路面积 瞬时干扰跳字 比较器过零抖动、数字噪声串扰 加比较器小滞环、优化PCB布线 温度变化后读数漂移 参考电压温漂、积分电容温漂 换低漂移参考源、换C0G电容4.3 软件上的小技巧比例测量与斩波平均双斜率 ADC 的测量结果本质上是以 Vref 为基准的比值因此它可以天然支持比例测量。比如你要测一个电阻分压器的输出电压可以将分压器的输入电源直接作为 Vref这样只要分压比而电源波动会被完全抵消。这在应变片电桥、RTD 铂电阻测温中非常实用。软件上我还有一个小技巧如果转换速率允许可以在信号积分阶段做正反两次测量再取平均也就是输入先正常积分一次再把输入极性反接积分一次把两次结果相减除以二。这种方法能抵消积分器和比较器固定的失调漂移效果类似于自动调零的二次扩展。缺点是转换时间翻倍但低速应用完全值这个成本。5. 用在哪里和怎么选芯片万用表、温度采集和仪器仪表5.1 经典双斜率芯片ICL7135、ICL7106 系列的选型思路如果你想快速做一个可靠的双斜率 ADC不想从分立器件搭电路直接选现成芯片是最省事的路径。这类芯片经过几十年的迭代内部已经把自动调零、极性判断、时钟分频和计数器全部集成了。ICL7106/ICL7107 是最经典的低成本选择3.5 位显示分辨力内部带 LCD7106或 LED7107驱动外围只需要积分电阻、积分电容、参考电容和几个电阻电容就能工作。它们适合做数字电压表、便携面板表优点是极其皮实缺点是分辨率较低且驱动器会占不少功耗。ICL7135 是 4.5 位双斜率 ADC最大显示 19999内部自动调零输出是动态选通的 BCD 码适合外接微控制器读取数据。它在万用表和工业仪表里用了很多年性能稳定至今仍然有大量二手和老款设备在使用。如果你想要 4.5 位分辨力又不愿意自己搭模拟部分ICL7135 仍然是可以考虑的一颗老将。再往后有 TC500/TC510/TC514 系列它们提供更高的分辨力接口也更灵活支持串行或并行输出。如果项目要求低功耗、高分辨力且不想被单芯片绑架也可以参考 TI 的 ADS 系列但那些更多是 Delta-Sigma 架构不属于这次讨论的范畴。我个人选择芯片的思路很简单先看目标分辨力和速度。3.5 位用 ICL7106/71074.5 位用 ICL7135 或 TC510更高位数的低速测量就不如用分立式双斜率或者转向高性能 Delta-Sigma 方案了。双斜率的优势区域是 12 到 20 位精度、每秒几次转换以下、工频干扰强的工作环境。5.2 从单片方案到模拟前端的典型应用场景双斜率 ADC 的应用场景比很多人想象中广泛。数字万用表里的核心测量部件就是双斜率 ADC哪怕现代万用表已经转到高速 Sigma-Delta但很多台式高精度表的低速直流挡依然用手动或自动双斜率方案。原因很简单工频抑制好、线性度高、成本低。温度测量是另一个典型场景。热电偶输出只有微伏到毫伏级RTD 的电阻变化也非常缓慢但现场环境往往有电机、开关电源造成的强电磁干扰。双斜率 ADC 的积分平均特性刚好把这部分干扰压下去。设计热电偶采集时把 T1 取 100ms配合冷端补偿和线性化查表整体精度可以做到 0.1 摄氏度级别。需要注意的是热电偶信号是高阻源必须在 ADC 前加仪器放大器或缓冲级否则信号源内阻会破坏积分电流的比例关系。电池和电源监控、电化学传感器、称重传感器等低速模拟场景同样适合双斜率。只要测量对象是缓慢变化的直流信号且现场噪声大、精度要求高双斜率就有发挥空间。这些场景里它比 SAR ADC 稳定比 Delta-Sigma ADC 简单调试和排错都更可控。5.3 为什么在低速高精度场景中双斜率并不吃亏很多人一听说双斜率转换慢就摇头觉得这架构过时了。但实际上对于温度、重量、电压校准这类测量每秒几次转换已经绰绰有余。双斜率结构带来的低噪声、高线性度、工频干扰抑制在这些场景中恰恰是稀缺品质。做一个简单的对比一片 16 位 SAR ADC 价格不高速度快但要保证 16 位有效分辨率需要非常干净的参考电压、良好的驱动和数字滤波软件上还要做平均。一片双斜率 ADC 或分立式双斜率前端代价是慢但硬件结构简单抗干扰能力几乎白送。在工业现场没有条件提供完美电源和干净地线的条件下双斜率经常是那个在复杂电磁环境中仍然保持读数稳定的选择。我个人的经验是不要被“快就是好”的说法带偏。在做粮仓测温项目时我最终把 SAR ADC 换成了双斜率方案数据稳定度从原来的 ±5 个字降到了 ±1 个字以内整个系统没有任何额外的滤波算法。那一次经历让我真正意识到精度不是堆元器件堆出来的而是架构与场景匹配的结果。最后分享一个小技巧如果 T1 因为分辨率限制无法做到与工频周期完全同步你可以在软件里对连续几次转换结果做滑动平均这样也能部分抵消工频干扰。但效果远不如直接选对 T1因为滑动平均只是事后滤波而双斜率是硬件级积分平均两者对干扰的抑制能力不在一个量级。还有如果你想彻底理解双斜率 ADC最好的入门方式不是看仿真而是买一个 ICL7135 模块用示波器盯着积分器输出看两个积分阶段的斜坡看完你会对“积分就是平均”这句话有全新的理解。
返回列表