SAR ADC精度提升:从输入配置、误差校准到采样保持电路设计
1. 项目概述:从芯片手册到工程实践
在嵌入式系统、工业控制和精密测量领域,模数转换器(ADC)扮演着“翻译官”的角色,负责将传感器输出的连续模拟电压信号,准确地转换为微处理器能够理解和处理的离散数字代码。这个转换过程的精度,直接决定了整个系统的测量可信度和控制准确性。很多工程师在选型时,往往只关注ADC的分辨率(比如10位、12位)和采样率,认为参数越高越好,但实际搭建电路后,却发现测量结果总有些“不对劲”——要么零点漂移,要么满量程读数不准,动态信号采样时还有失真。这些问题,根源往往不在于ADC本身的理论性能,而在于对其前端接口电路和内部工作机制的理解不够深入。
我手边这份德州仪器(TI)的ADC1073x系列数据手册,虽然发布于上世纪90年代,但其阐述的核心原理——输入多路复用配置、误差调整与采样保持机制——至今仍是所有逐次逼近型(SAR)ADC设计的基石。ADC10731/32/34/38这一系列10位(带符号位)ADC,以其灵活的输入配置和可调整的参考电压,成为了当时许多中精度数据采集系统的热门选择。今天,我们就以这份经典文档为蓝本,抛开那些枯燥的参数罗列,深入芯片内部,拆解如何根据你的实际信号特点来配置输入通道,如何进行精细的零点和满量程校准,以及理解采样保持电路如何“抓住”瞬间变化的模拟信号。这些知识,不仅能帮你用好ADC1073x,更能让你举一反三,应对其他更复杂的ADC芯片。
2. 核心原理与设计思路拆解
2.1 ADC1073x系列的核心定位与架构特点
ADC1073x系列属于逐次逼近寄存器型ADC。与Σ-Δ型ADC追求高分辨率和工频抑制不同,SAR ADC的优势在于转换速度与功耗的平衡,以及相对简单的模拟前端需求。该系列提供10位二进制补码输出(带符号位),这意味着它可以直接表示正负电压,非常适合处理交流或双向信号。
其核心架构包含几个关键部分:一个可配置的输入多路复用器(MUX)、一个采样保持电路、一个SAR逻辑控制单元、一个精密DAC(通常采用电容阵列实现)以及一个比较器。转换过程始于采样保持电路对输入电压进行“冻结”,随后SAR逻辑以二分法策略,控制DAC产生一系列比较电压,与保持的电压进行比较,最终逐位确定数字代码。
这个系列提供了多种型号(ADC10731/32/34/38),主要区别在于封装和温度范围,其核心模拟功能是一致的。它的一个显著特点是参考电压(VREF+和VREF-)是外置且可调的,这为校准和适应不同输入电压范围提供了极大的灵活性。另一个关键点是其输入多路复用器支持多种模式,这是实现单芯片多通道采集且适应不同传感器接口的基础。
2.2 输入多路复用器:连接外部世界的灵活接口
输入多路复用器是ADC与多个模拟信号源之间的“路由器”。ADC1073x的MUX配置非常灵活,手册中提到了几种典型模式,理解它们的区别是正确设计前端电路的前提。
1. 4通道单端模式:这是最常用的模式。四个输入通道(AIN0-AIN3)各自以模拟地(AGND)为参考点。每个通道独立测量对地的电压。这种模式接线简单,适用于信号源一端接地且传输距离较近、共模干扰不大的场景,例如测量单电源供电的传感器输出电压。
2. 2通道差分模式:将输入通道两两配对,形成两个完全差分输入对(如AIN0+/AIN0-, AIN1+/AIN1-)。ADC测量的是这两个引脚之间的电压差。这种模式能有效抑制共模噪声(如来自电源的纹波或长线引入的干扰),是测量电桥(如应变片、压力传感器)或微小信号的首选。需要注意的是,差分输入对的两个引脚电压都必须落在ADC的输入共模电压范围内。
3. 4通道伪差分模式:这是一种折中方案。四个正输入端(AIN0-AIN3)共享一个公共的负输入端(通常指定某个通道为负端)。它测量的是每个正输入端与这个公共负端之间的电压差。相比单端模式,它提供了一定的共模抑制能力;相比全差分模式,它节省了通道资源(4个通道仅需5个引脚,而全差分4通道需要8个引脚)。适用于多个信号源参考于同一个非地电位的情况。
4. 混合模式(2单端 + 1差分):这种配置提供了最大的灵活性。你可以将部分通道配置为单端测量一些接地参考的信号,同时留出一对差分通道来测量一个需要高抗噪能力的敏感信号。这在资源有限且需求混合的应用中非常实用。
实操心得:模式选择的权衡选择哪种模式,不仅仅是看通道数量。我的经验是:优先考虑信号特性,而非仅仅通道数。
- 长导线或噪声环境:无条件选择差分模式。我曾在一个电机控制项目中,用单端模式测量电机电流采样电阻的电压,结果读数在电机启停时跳动剧烈。改为差分模式后,干扰被极大抑制。
- 信号源共地且环境干净:单端模式最简单。
- 多个传感器共用一个参考点(比如都是相对于某个偏置电压):伪差分是最佳选择,它能消除这个公共参考点的漂移带来的影响。
- ADC1073x的MUX切换是通过数字接口配置的,在转换开始前完成。切换后,必须留出足够的建立时间让内部电路稳定,否则会引入误差,这个时间与外部源阻抗有关。
2.3 误差调整的本质:让ADC的“尺子”贴合你的“量程”
任何ADC都存在误差,主要包括偏移误差(零点误差)、增益误差(满量程误差)和非线性误差。ADC1073x允许我们通过外部电路调整前两者,这就像给一把刻度不准的尺子进行“调零”和“定满标”。
零误差(Offset Error):理想情况下,当输入电压为0V(或-VREF/2 for bipolar)时,ADC应输出中间码(0)。零误差是指实际输出跳变到1 LSB的输入电压与理想值之间的偏差。手册指出,ADC自身的零误差通常很小且不需要调整。我们调整的往往是“系统零点”。
为什么要调整系统零点?因为你的信号可能根本不过零点。例如,一个温度传感器输出是0.5V到4.5V,对应-40°C到+125°C。你希望0.5V时ADC输出为0,4.5V时输出为满量程。这时,你需要将ADC的“零点”偏移到0.5V。方法就是给差分或伪差分输入的负端施加一个等于VIN(min)的偏置电压。这样,当正端输入0.5V时,差分电压为0,ADC输出即为0。
满量程误差(Full-Scale Error):理想情况下,当输入电压达到正满量程(VREF+ - 1.5 LSB)时,ADC应输出最大码(如011...111)。增益误差是指实际达到满量程输出的输入电压与理想值的偏差。调整方法是施加一个特定的校准电压,并调节VREF的大小,直到输出码发生预期的跳变。
调整的核心理念是“两点校准法”:先确定你实际应用中的“零点”和“满点”对应的物理量,然后通过硬件电路(调整负端偏置和参考电压)或软件算法(修正系数),将ADC的这两个特征点与之对齐。非线性误差无法通过简单的外部调整修正,它取决于芯片本身的制造工艺。
3. 核心细节解析与实操要点
3.1 零误差与满量程调整的数学原理与操作步骤
手册中给出了调整任意模拟输入电压范围(VMIN到VMAX)的公式和步骤,这是工程校准的精华。我们来拆解这个流程,并解释每一个参数的意义。
步骤一:零点偏移调整目标:让输入电压等于你自定义的最小值VMIN时,ADC输出码为000 0000 0000(对于单极性)或负满量程码(对于双极性,具体看配置)。
- 硬件连接:将你希望定义为“零点”的电压
VMIN连接到ADC的正输入端(AINx+)。对于差分或伪差分模式,将对应的负输入端(AINx-或公共负端)连接到一个可调的偏置电压源上。 - 施加校准电压:向正输入端施加一个电压,其值为
VMIN + ½ LSB。½ LSB的计算公式为:(VREF+ - VREF-) / (2^(n+1))。对于10位带符号的ADC1073x,n=10(符号位占一位,数据位10位?这里需注意:手册描述为10位加符号位,通常理解为11位分辨率,但输出是11位二进制补码。计算时应以实际代码跳变点为准。在单极性模式下,通常按10位计算,½ LSB = (VREF)/2048)。更稳妥的方法是查阅手册中的典型值,例如当VREF=2.5V时,½ LSB = 1.22mV。 - 调整:缓慢调整负输入端的偏置电压,同时监控ADC的输出代码。目标是让输出代码在
000 0000 0000和000 0000 0001之间临界跳变。一旦找到这个跳变点,零点就校准好了。此时,负输入端上的电压就是系统所需的“零偏置电压”VBIAS。在实际电路中,这个VBIAS通常由一个精密电阻分压网络或基准电压源加运放缓冲来产生。
步骤二:满量程调整目标:让输入电压等于你自定义的最大值VMAX时,ADC输出码为011 1111 1110到011 1111 1111的跳变点。
- 硬件连接:保持负输入端为刚才校准好的
VBIAS。 - 施加校准电压:向正输入端施加一个电压,其值由手册公式(3)给出:
Vcal = VMAX - 1.5 * LSB其中,LSB = (VREF) / (2^n)。对于我们的自定义量程,VREF在此时是待调整的变量,但LSB的概念不变。更通用的理解是,你需要施加一个比VMAX小1.5个最小分辨率单位的电压。推导理解:理想ADC的最后一个码跳变发生在VFSR - 1.5 LSB处,其中VFSR = VMAX - VMIN。所以校准电压Vcal = VMIN + (VFSR - 1.5 LSB) = VMAX - 1.5 LSB。 - 调整:施加
Vcal后,调整参考电压VREF(即VREF+与VREF-的差值),同时监控ADC输出码,使其在011...110和011...111之间跳变。注意,在伪差分或差分模式下,只要VREF+和VREF-的差值(VREF)正确,它们的绝对电位可以在电源范围内浮动,这为设计带来了便利。
注意事项:校准源的质量至关重要进行校准时,所使用的电压源(用于产生
VMIN+½LSB和VMAX-1.5LSB)的精度和稳定性必须远高于ADC的指标。通常需要使用6位半或以上的数字万用表(DMM)来监测这些电压。如果校准源本身就有几个mV的误差,那么整个ADC系统的精度就无从谈起。在批量生产时,可以考虑使用更精密的基准电压芯片(如REF50xx系列)结合精密电阻分压来生成这些校准点。
3.2 采样保持电路:捕捉瞬间的电压值
SAR ADC的转换需要一段时间(几十到几百微秒)。在这段时间内,如果输入信号发生变化,转换结果就会混乱。采样保持电路的作用,就是在转换开始的瞬间,快速“采集”并“锁定”输入电压,并在整个转换周期内保持其稳定。
ADC1073x的采样保持电路巧妙地利用了其DAC的电容阵列。在采样阶段,电容阵列通过输入多路复用器的开关连接到被选中的模拟输入引脚,对其进行充电。这个采样窗口持续4.5个时钟周期,被称为采集时间(tA)。
关键参数:采集时间与建立时间手册中的图42给出了模拟输入端的等效模型:一个由多路复用器导通电阻(RON, 典型3kΩ)、引脚寄生电容(CS1, 3.5pF)和采样电容阵列(CL, 约48pF)组成的RC网络。
- 内部建立时间:仅考虑内部RC,从0到满量程阶跃变化,达到10位精度(±0.5 LSB)所需的建立时间约为1.1μs。这4.5个时钟周期的窗口必须大于这个时间,即时钟频率不能太高:
tCLK > tA / 4.5 ≈ 244ns,对应时钟频率约< 4.1MHz。这是理论极限。 - 外部源阻抗的影响:这是实际设计中最容易出问题的地方。如果你的信号源有输出阻抗(
RS),或者你在前端加了滤波电阻(Rfilter),它们会与ADC的输入电容(CIN = CS1 + CL)形成新的RC低通网络。这个外部RC会显著增加建立时间。所需的总建立时间t_settle必须满足:t_settle ≥ (RS + RON) * CIN * N * ln(2)其中N是精度所需的位数常数(对于10位精度,N约等于9.2)。如果t_settle大于芯片提供的4.5个时钟周期,采样就不充分,导致误差。
设计要点:驱动运算放大器的选择为了应对高源阻抗和快速建立的要求,必须在ADC前端使用驱动运放。这个运放不是简单的电压跟随器,它需要:
- 足够的压摆率(Slew Rate):以应对输入信号的快速变化,确保在采样窗口内能跟踪上信号。
- 低输出阻抗:在目标频率下,运放的闭环输出阻抗要远小于ADC的输入阻抗(主要由
RON决定),以确保建立时间主要由运放自身性能决定,而非其输出阻抗与CIN的RC常数。 - 低噪声:避免引入额外的误差。
- 输入/输出范围兼容:运放的输出范围必须能覆盖ADC的输入电压范围,且其输入范围要能接受你的信号。
手册图43给出了一个经典的输入保护电路,其中运放不仅提供驱动,其反馈回路中的电阻(R2)还起到了隔离和限流作用,与二极管一起防止过压损坏ADC的精密输入级。
4. 实操过程与核心环节实现
4.1 构建一个可调零点和满量程的采集电路
假设我们需要测量一个热电偶信号,其经过信号调理后的输出范围为0.25V至2.25V(量程2V),我们希望利用ADC1073x的10位分辨率(假设为单极性10位模式,量程0-VREF)来获得最佳量化效果。
步骤1:确定工作模式与参考电压
- 模式选择:信号是单端对地,且只有一个热电偶,选择单端模式即可。
- 参考电压VREF计算:为了充分利用ADC的量化区间,我们希望信号范围(0.25V~2.25V)映射到ADC的近乎全量程。如果我们设置
VMIN= 0.25V对应数字码0,VMAX= 2.25V对应数字码1023(10位满量程)。- 所需的
VREF(即满量程输入电压跨度)理论上应等于VMAX - VMIN= 2.0V。 - 但根据调整公式,满量程校准点是
VMAX - 1.5 LSB。为了简化,我们通常选择一个接近且略大于2.0V的标准基准电压,比如2.048V(这是一个常见的基准值,对应LSB=2mV)。这样,我们的实际量程(2.0V)会略小于ADC的量程(2.048V),但可以通过软件缩放,好处是基准源容易获得且稳定。
- 所需的
步骤2:设计零点偏移电路我们需要在信号进入ADC前,减去0.25V的偏移。可以使用一个运放减法器电路。
- 电路:采用一个精密运算放大器(如OPA2188)搭建差分放大器。将热电偶调理后的信号
V_signal(0.25~2.25V) 接至同相端,同时将一个精密的0.25V参考电压V_shift接至反相端。配置电阻使增益为1。 - 计算:运放输出
V_out = V_signal - V_shift。当V_signal=0.25V时,V_out=0V。这样,ADC测量到的就是偏移归零后的信号V_out(0~2.0V)。这个0.25V的V_shift可以从系统基准电压(如2.5V)通过精密电阻分压并缓冲得到。
步骤3:设计参考电压与满量程调整电路
- 基准源:选择一颗低温漂、高精度的基准电压芯片,如REF2025,输出2.048V。将其输出作为ADC的
VREF+。VREF-接地。 - 调整电路:为了微调满量程,可以在基准源输出端串联一个微调电位器(如100Ω)到
VREF+引脚。但要注意,电位器的电阻会引入噪声和温漂,仅适用于生产校准,不适用于长期运行。更好的方法是在软件中进行增益校准。
步骤4:计算校准点并实施校准
- 零点校准:
- 将信号源设置为
VMIN= 0.25V。 - 测量此时运放减法器的输出
V_out_meas,应接近0V。 - 调整减法器中用于产生
V_shift的分压电阻(或使用数字电位器),使得V_out_meas尽可能接近0V。更精确的方法是,给正输入端施加0.25V + ½ LSB(½ LSB = 2.048V/2048 = 1mV),即0.251V,然后调整V_shift,使ADC输出码在0和1之间跳变。
- 将信号源设置为
- 满量程校准:
- 将信号源设置为
VMAX= 2.25V。 - 测量运放输出
V_out_meas,应接近2.0V。 - 计算校准电压
Vcal = VMAX - 1.5 LSB = 2.25V - 1.5 * 2mV = 2.247V。 - 将信号源设置为2.247V,调整
VREF+端的微调电位器(或记录下此时ADC的读数Code_cal),使ADC输出码在1022和1023之间跳变。 - 软件增益修正:记录下理想满量程输入(2.25V对应运放输出2.0V)时ADC的读数
Code_full。在后续测量中,真实的电压值可通过公式计算:V_real = (ADC_Code / Code_full) * (VMAX - VMIN) + VMIN。
- 将信号源设置为
4.2 采样保持前端驱动电路设计与参数验证
根据手册,ADC内部采样电容CL约48pF,多路复用器电阻RON为3kΩ。
设计一个抗混叠滤波器并验证建立时间:假设信号最高频率为1kHz,我们设计一个截止频率为2kHz的RC低通滤波器,同时满足建立要求。
- 选择滤波电阻Rfilter:为了不过多增加源阻抗,选择
Rfilter = 1kΩ。 - 计算滤波电容Cfilter:
f_c = 1/(2π * Rfilter * Cfilter)= 2000Hz,解得Cfilter ≈ 80nF。 - 验证最坏情况建立时间:当输入发生满量程阶跃(0V到2.048V)时,驱动电路需要稳定到10位精度(误差<1mV)。
- 总串联电阻
Rtotal = Rfilter + RON = 1kΩ + 3kΩ = 4kΩ。 - 总电容
Ctotal = Cfilter // CIN ≈ Cfilter(因为80nF >> 48pF),主导电容是Cfilter。 - 建立时间常数
τ = Rtotal * Cfilter = 4kΩ * 80nF = 320μs。 - 达到10位精度(0.1%精度,约7个时间常数)所需时间
t_settle ≈ 7 * τ = 2.24ms。
- 总串联电阻
分析结果:这个t_settle(2.24ms) 远远大于ADC内部提供的采样窗口时间(例如,在时钟频率为1MHz时,4.5个周期仅为4.5μs)。这意味着信号根本无法在采样窗口内建立到稳定值,测量将完全错误。
解决方案:
- 在滤波电容和ADC输入之间加入驱动运放。运放作为缓冲器,其低输出阻抗(通常<1Ω)将驱动ADC的输入电容
CIN,而滤波电阻Rfilter和滤波电容Cfilter位于运放之前。这样,建立时间主要由运放本身的建立时间决定,好的运放建立到10位精度可以在1μs内完成。 - 调整滤波器参数:如果必须使用无源滤波,则需大幅减小
Rfilter或Cfilter。例如,将Rfilter减小到100Ω,Cfilter相应增大到800nF以维持相同截止频率。此时τ = (100+3000)Ω * 800nF ≈ 2.48μs,t_settle ≈ 17.4μs。在1MHz时钟下(采样窗口4.5μs),仍然不够。必须继续降低RC值或降低时钟频率。 - 降低ADC时钟频率:延长采样窗口。如果
t_settle需要17.4μs,则采样窗口tA必须大于此值,即4.5 / fCLK > 17.4μs,解得fCLK < 258kHz。这牺牲了转换速度。
显然,加入驱动运放是最合理、最常用的方案。选择一款建立时间快、输出驱动能力强的精密运放(如THS4631)是保证采样精度的关键。
5. 常见问题与排查技巧实录
在实际使用ADC1073x或类似SAR ADC时,会遇到一些典型问题。下面是我在项目中总结的一些排查思路和解决方法。
问题1:读数不稳定,低位数字不断跳动
- 可能原因A:电源噪声。SAR ADC在转换瞬间电流变化剧烈,如果电源去耦不良,会引入噪声。
- 排查:用示波器观察ADC的电源引脚(V+和VREF),在转换期间是否有毛刺或跌落。
- 解决:在ADC的电源引脚就近放置一个10μF的钽电容或陶瓷电容并联一个0.1μF的高频陶瓷电容。确保电源走线宽而短。
- 可能原因B:模拟地数字地混合。数字信号的快速变化会通过地平面耦合到模拟部分。
- 排查:检查PCB布局,模拟地和数字地是否在单点连接(通常在ADC下方)。模拟部分的地回路是否干净。
- 解决:严格分区布局,使用磁珠或0Ω电阻进行单点接地。模拟地线尽可能粗。
- 可能原因C:外部源阻抗过高,建立不充分。
- 排查:测量信号源在采样频率下的输出阻抗。计算RC建立时间是否满足要求(如前文所述)。
- 解决:添加驱动运放缓冲器。
问题2:测量值存在固定的偏移或增益误差
- 可能原因A:零点或满量程未校准。
- 排查:输入一个已知的精确电压(如0V),读取ADC码值,是否接近0?输入一个接近满量程的精确电压,读数是否接近满码?
- 解决:执行前文所述的硬件两点校准流程。如果硬件已固定,可在软件中记录两个标准点的ADC值,进行线性插值补偿。
- 可能原因B:参考电压不准或漂移。
- 排查:使用高精度万用表测量VREF引脚的实际电压。
- 解决:选用更高精度、更低温漂的基准电压源(如REF50xx)。确保基准源的负载能力足够,或使用运放缓冲。
- 可能原因C:运放输入偏置电流。驱动运放的输入偏置电流会流过外部电阻,产生附加的偏移电压。
- 排查:检查运放数据手册的输入偏置电流参数。计算其在源电阻或滤波电阻上产生的压降(
Vos = Ibias * R)。 - 解决:选择输入偏置电流极低的运放(如CMOS输入型运放),或确保运放同相端和反相端看到的外接电阻相等,以抵消偏置电流的影响。
- 排查:检查运放数据手册的输入偏置电流参数。计算其在源电阻或滤波电阻上产生的压降(
问题3:测量动态信号时出现失真
- 可能原因A:混叠。输入信号频率超过奈奎斯特频率(采样频率的一半)。
- 排查:检查输入信号的最高频率成分。检查前端是否有抗混叠滤波器,其截止频率是否设置正确(低于fs/2)。
- 解决:在ADC前端添加一个截止频率合适的RC或运放有源低通滤波器。
- 可能原因B:驱动运放压摆率不足。
- 排查:输入一个高速大幅值方波,用示波器观察运放输出是否能够跟上,边沿是否圆滑。
- 解决:选择压摆率更高的运放。压摆率需求至少为
SR > 2π * f_max * Vpp,其中f_max是信号最高频率,Vpp是信号幅值。
- 可能原因C:采样保持建立时间不足。
- 排查:这是最隐蔽的原因。信号在采样窗口内未稳定。可以用示波器高分辨率模式观察ADC输入引脚在采样时刻(通常与CONVST信号下降沿对齐)的电压是否已稳定。
- 解决:降低ADC时钟频率以延长采样时间,或更换建立时间更快的驱动运放。
问题4:多通道切换时,通道间相互串扰
- 可能原因:多路复用器开关电荷注入。当MUX从一个通道切换到另一个通道时,开关的寄生电容会释放或吸收电荷,影响新选通通道的电压。
- 排查:固定一个通道输入直流电压,快速切换到一个悬空或接地的通道,观察该通道的第一次读数是否异常。
- 解决:
- 增加通道切换后的延迟:在切换通道后,等待一段时间(远大于建立时间)再进行下一次转换,让电荷注入效应消散。
- 降低源阻抗:低阻抗源能更快地吸收或补充注入的电荷。
- 软件补偿:丢弃切换通道后的第一次采样值,取第二次或之后的稳定值。
下表总结了上述常见问题的快速排查指南:
| 问题现象 | 可能原因 | 排查工具 | 解决方案 |
|---|---|---|---|
| 读数跳动(噪声大) | 电源噪声、地线干扰、源阻抗高 | 示波器、计算建立时间 | 加强电源去耦、优化接地、添加驱动运放 |
| 固定偏移/增益误差 | 未校准、参考电压不准、运放偏置 | 高精度DMM、检查校准点 | 执行硬件/软件两点校准、更换基准源、匹配运放输入电阻 |
| 动态信号失真 | 混叠、运放压摆率不足、建立时间不足 | 频谱分析、示波器观察边沿 | 添加抗混叠滤波器、选用高SR运放、降低采样率或换更快运放 |
| 通道间串扰 | MUX电荷注入 | 示波器、对比不同通道采样顺序 | 增加通道切换延迟、降低源阻抗、丢弃首次采样 |
ADC的精度是一个系统性问题。芯片手册给出了器件的边界条件,而真正的性能取决于你如何围绕它构建整个模拟电路。从稳定的电源和基准,到低噪声的布局布线,再到正确的前端驱动和滤波,每一个环节都至关重要。理解输入多路复用器、误差调整和采样保持这些基础模块的工作原理,就像掌握了地图,能让你在调试的迷宫中快速找到方向。对于ADC1073x这类老芯片,其设计思想历久弥新,深入理解它,对你使用任何一款现代ADC都有莫大的帮助。