1. 项目概述:双通道同步采样ADC的核心价值
在嵌入式系统、工业自动化、电机控制以及精密仪器仪表的设计中,我们常常面临一个核心挑战:如何精确、同步地捕获两个或更多通道的模拟信号。无论是三相电机的电流电压检测,还是振动分析中的多路传感器信号采集,通道间的相位一致性直接决定了后续算法(如功率计算、FFT分析)的准确性。异步采样带来的时间差会引入额外的误差和计算复杂度,这时候,一款真正的同步采样模数转换器(ADC)就成了系统性能的基石。
德州仪器(TI)推出的ADS8353、ADS7853和ADS7253系列,正是瞄准了这一痛点。它们并非简单的双ADC芯片堆叠,而是从架构上实现了两个ADC通道的严格同步采样与转换。这意味着,当转换启动信号(通常为CS引脚的下拉沿)到来时,两个通道的采样保持电路会在同一时刻冻结输入信号,随后各自独立进行量化。这种硬件级的同步能力,从根本上消除了通道间的时间偏移,为需要高保真相位信息的应用提供了可靠保障。
这三款器件是引脚兼容的家族系列,主要区别在于分辨率:ADS8353为16位,ADS7853为14位,ADS7253为12位。这种设计让开发者可以在系统精度、速度和成本之间进行灵活权衡,而无需大幅改动硬件布局。其核心魅力在于极高的灵活性:它支持单端或伪差分输入,可编程的内部基准电压源,以及多达四种可配置的串行接口模式。这种灵活性意味着你可以用同一颗芯片,通过不同的寄存器配置,去适配从高精度直流测量到高速交流采样的多种场景。
我过去在开发一款伺服驱动器时,就曾深受多片ADC采样不同步的困扰,后期软件补偿既复杂效果又不理想。直到采用了这类同步采样ADC,才真正解决了电流环控制的实时性与准确性问题。接下来,我将结合数据手册的要点和实际调试经验,深入解析如何配置和用好这三颗芯片,特别是其内部参考电压的校准潜力与四种串行接口模式的选择策略。
2. 芯片内部架构与核心功能模块解析
要熟练配置一款ADC,不能只停留在引脚连接和时序图层面,理解其内部架构和工作原理,才能在出现异常时快速定位问题,并充分发挥芯片性能。ADS8353/7853/7253的架构设计清晰地体现了其“独立且同步”的设计哲学。
2.1 双核独立ADC与基准源结构
从功能框图看,芯片内部完全独立的两套ADC核心(ADC_A和ADC_B)是其同步采样能力的物理基础。每个ADC都包含自己的采样保持电路、数模转换器阵列和比较器。更关键的是,每个ADC通道都拥有独立的基准电压输入引脚(REFIO_A和REFIO_B)以及对应的基准地引脚(REFGND_A和REFGND_B)。
这种设计带来了一个巨大优势:通道独立的增益误差校正。在大多数应用中,ADC的增益误差是一个重要的系统误差源。如果两个通道共用同一个基准源,那么基准源的任何漂移或噪声都会同等地影响两个通道,虽然相对关系可能不变,但绝对精度会受损。而ADS8353系列允许你为每个通道配置不同的基准电压(通过内部可编程基准或外部提供),这意味着你可以在软件中,针对每个通道的输入前端电路(如运放增益误差、电阻分压比误差)进行独立的满量程校准。
注意:即使你使用芯片的内部基准源,也需要为REFIO_A和REFIO_B引脚分别连接一个10μF的陶瓷电容到对应的REFGND引脚进行去耦。这个电容至关重要,它为ADC内部的开关电容电路提供了瞬态电荷池,能有效降低基准噪声,提升转换精度。在实际布局中,这两个电容应尽可能靠近芯片的相应引脚放置。
2.2 模拟输入前端等效电路
数据手册中给出了模拟输入引脚(AINP_x, AINM_x)的等效电路,这是一个经典的开关电容采样模型。简单来说,你可以将其理解为一个50欧姆的串联电阻(RS,采样开关导通电阻)后面跟着一个40pF的采样电容(CSAMPLE)。
这个模型对前端驱动电路的设计有直接指导意义:
- 建立时间要求:在采样窗口打开期间,外部信号源必须能在有限时间内,通过这个RC网络(50Ω + 外部驱动阻抗 与 40pF + PCB寄生电容),将采样电容充电到目标电压的1/2 LSB误差范围内。对于高频信号或高阻抗源,这可能要求驱动运放具有足够的输出电流和压摆率。
- 输入阻抗:由于是开关电容结构,其输入阻抗是动态变化的,平均输入阻抗与采样频率成反比。在计算前端分压网络或滤波器时,不能将其视为一个固定高阻,而需要考虑其周期性抽取电荷的特性。
理解这个等效电路,就能明白为什么数据手册会给出“最大源阻抗”的建议。如果你的信号源阻抗过高,采样电容就无法在分配到的采集时间内完成充电,导致转换结果失真。
2.3 可编程寄存器概览
芯片的所有灵活性都通过三个用户可编程寄存器实现,它们是控制芯片行为的“大脑”:
- 配置寄存器:这是最重要的寄存器,控制着输入范围、输入模式、基准源选择、输出数据格式、接口模式等全局性设置。
- REFDAC_A 和 REFDAC_B 寄存器:这两个寄存器分别控制ADC_A和ADC_B的内部基准电压输出值(当启用内部基准时)。它们是一个9位的DAC,允许你将内部2.5V的基准源,以大约5mV的步进,调整到2.0V至2.5V之间的任意值。
所有寄存器的读写都通过串行接口(SDI, SDO)完成。一个关键特性是配置的延迟生效:在当前帧(Frame F)写入的配置寄存器值,并不会立即影响本帧的转换,而是作用于下一帧(Frame F+1)的转换。这个细节在动态切换配置(如改变输入范围)时尤为重要,需要仔细规划你的时序和控制流,避免配置与数据帧错位。
3. 关键配置详解:从输入到输出的精细控制
拿到一颗功能强大的ADC,第一步不是急着连线上电,而是要根据你的应用需求,规划好各个配置位的设置。这一步决定了ADC的“工作模式”,是发挥其性能的前提。
3.1 输入范围与模式配置
输入配置主要由配置寄存器中的两个位控制:CFR.B9和CFR.B7。它们的组合决定了输入信号的测量范围。
CFR.B9:输入范围选择
- 0:满量程范围等于基准电压。即
FSR = VREF。例如,VREF=2.5V,则输入电压范围为 0V 至 2.5V。 - 1:满量程范围等于两倍基准电压。即
FSR = 2 × VREF。同样VREF=2.5V,则输入范围为 0V 至 5V。
这个功能非常实用,它允许你用同一个基准电压来测量不同幅值的信号,而无需改变外部基准电路或使用额外的衰减网络。但需要注意一个重要限制:当选择FSR = 2 × VREF时,必须确保模拟电源电压AVDD ≥ 2 × VREF。例如,若VREF = 2.5V,则AVDD必须至少为 5V。如果AVDD只有 3.3V,却强行设置此模式,将导致转换结果严重失真甚至损坏芯片。
CFR.B7:负输入选择
- 0:单端输入模式。此时,负输入端
AINM_x必须在外部连接到模拟地。ADC测量的是AINP_x对地的电压。 - 1:伪差分输入模式。此时,
AINM_x必须在外部连接到一个共模电压,通常为FSR/2。ADC测量的是AINP_x与AINM_x之间的差值电压。
伪差分模式对于抑制共模噪声非常有效,常见于存在较大地线噪声或使用远程传感器的场合。它将信号的有效范围从[0, FSR]平移到了[-FSR/2, +FSR/2]。例如,在FSR=5V的伪差分模式下,AINM接 2.5V,那么AINP上的电压在 0V 到 5V 之间变化时,ADC输出对应的是 -2.5V 到 +2.5V 的差分信号。
组合应用与连接示意图下表总结了四种组合模式及其对应的外部连接方式,这是硬件设计时必须对照检查的:
| 输入范围选择 | 负输入选择 | 工作模式描述 | AINM_x 外部连接 | 有效输入电压 (AINP_x - AINM_x) |
|---|---|---|---|---|
CFR.B9=0 | CFR.B7=0 | 单端, 0-VREF | 连接至 GND | 0 V 至 VREF |
CFR.B9=1 | CFR.B7=0 | 单端, 0-2*VREF | 连接至 GND | 0 V 至 2×VREF |
CFR.B9=0 | CFR.B7=1 | 伪差分, ±VREF/2 | 连接至 VREF/2 | -VREF/2 至 +VREF/2 |
CFR.B9=1 | CFR.B7=1 | 伪差分, ±VREF | 连接至 VREF | -VREF 至 +VREF |
实操心得:在电机控制中测量相电流时,我通常使用伪差分模式。将电流采样电阻两端的电压分别接入
AINP和AINM,这样可以直接得到带符号的电流值,非常便于直接用于PID计算。硬件上,需要用一个精密的电阻分压网络或基准电压芯片来产生VREF/2或VREF的共模电压,并确保其低噪声和稳定性。
3.2 内部基准电压的配置与校准
这是该系列ADC的一大特色功能。通过CFR.B6选择使用内部基准,并通过REFDAC_A/B寄存器独立调节每个通道的基准电压。
启用与配置步骤:
- 设置
CFR.B6 = 1,启用内部基准源。 - 向
REFDAC_A和REFDAC_B寄存器写入9位数据值,以设定各自的输出电压。数据手册提供了一个典型值对应表,例如写入0x1FF对应 2.5000V,0x186对应 2.35V。 - 每个通道的基准电压
VREF_x计算公式可近似理解为:VREF_x ≈ 2.0V + (DAC_CODE / 512) * 0.5V,其中DAC_CODE是写入的9位值(0-511)。这提供了约 1mV 的调节步进。
校准应用场景: 假设你的信号调理电路前级有一个增益为2.01的非理想放大器,而你的ADC基准是标准的2.5V。理论上,输入1V应输出2.01V,对应ADC码值应为(2.01/2.5) * 65536 ≈ 52680。但由于基准是2.5V,实际输出码值会是(2.01/2.5) * 65536,存在增益误差。此时,你可以微调REFDAC寄存器,将VREF_A略微调高至比如2.5125V,使得2.01 / 2.5125 ≈ 0.8,这样ADC的输出码值就会更接近理论值,从而在系统层面补偿了前级放大器的增益误差。
注意事项:数据手册特别指出,对于
REFDAC值低于0x064的区间,不建议使用。这个区间的线性度和温度特性可能无法保证。在实际校准中,TI也建议围绕手册给出的典型值,在小范围内(±5个码值)进行微调,以找到最佳性能点。
3.3 输出数据格式选择
通过CFR.B4可以选择输出数据的格式:
- 0(默认):直接二进制格式。对于单端输入,0V输入对应输出0x0000,满量程输入对应0xFFFF/3FFF/FFF(取决于分辨率)。对于伪差分输入,
-FSR/2对应 0x0000,中点(0V差分)对应 0x7FFF/1FFF/7FF,+FSR/2对应 0xFFFF/3FFF/FFF。 - 1:二进制补码格式。这对于需要处理正负值的伪差分模式尤其方便。中点(0V差分)输出0x0000,
-FSR/2输出 0x8000/2000/800(负数),+FSR/2输出 0x7FFF/1FFF/7FF(正数)。
在数字信号处理器或微控制器中,补码格式可以直接被当作有符号整数进行处理,省去了软件转换的步骤,对于实时性要求高的算法非常友好。
4. 四种串行接口模式深度剖析与选型指南
串行接口模式是这颗ADC与控制器通信的“语言协议”,选对模式可以简化硬件设计、降低时钟要求或节省GPIO资源。模式选择由CFR.B11和CFR.B10两位控制。
4.1 模式对比总览
首先,我们通过一个表格来快速了解四种模式的核心区别与适用场景:
| 接口模式 | 配置位 | 最小SCLK数 | 数据输出引脚 | 特点与适用场景 |
|---|---|---|---|---|
| 32-CLK, 双SDO | B11=0, B10=0 | 32 | SDO_A, SDO_B | 默认模式,所有型号支持。两个通道数据并行输出,时序简单,适用于GPIO充足、追求高数据吞吐率的系统。 |
| 32-CLK, 单SDO | B11=0, B10=1 | 48 | SDO_A | 节省一个GPIO引脚。ADC_A和ADC_B数据在SDO_A上串行输出,先A后B。适用于引脚紧张的主控。 |
| 16-CLK, 双SDO | B11=1, B10=0 | 16 | SDO_A, SDO_B | 仅ADS7853/7253支持。转换与数据输出在16个时钟内完成,吞吐率相同但SCLK频率可减半,或同频下转换周期更短。双线输出,兼顾速度与时钟要求。 |
| 16-CLK, 单SDO | B11=1, B10=1 | 32 | SDO_A | 仅ADS7853/7253支持。最节省引脚的模式,仅需单数据线,且时钟要求较低。适用于低速总线或引脚极缺的情况。 |
4.2 32-CLK模式详解
在32-CLK模式下,ADC的转换过程由芯片内部时钟控制,固定需要一段时间(tCONV,如ADS8353为730ns)。转换和数据传输在时序上是分开的。
工作流程(以双SDO模式为例):
CS变低,启动一个帧,SDO_A和SDO_B引脚退出高阻态并输出0。- 在
CS下降沿后,芯片立即开始对模拟输入进行采样保持,并启动内部转换。此时前16个SCLK周期,SDO引脚一直保持为0。 - 内部转换完成后(约在第16个SCLK边沿前后),采样保持器返回采样模式,为下一次转换做准备。
- 从第16个SCLK的下降沿开始,ADC_A和ADC_B的转换结果最高位分别出现在SDO_A和SDO_B上。
- 后续的SCLK下降沿依次移出剩余数据位。对于16位的ADS8353,需要再给16个SCLK(共32个)才能移出所有数据;对于14位的ADS7853,后两位为0;对于12位的ADS7253,后四位为0。
- 在第32个SCLK后,
CS拉高,结束本帧,数据线返回高阻态。同时,芯片开始采集下一组模拟信号(采集时间tACQ)。
时序计算示例: 假设使用ADS8353,目标吞吐率为500kSPS(每秒采样点数,每个通道)。则总周期tTHROUGHPUT = 1 / 500kHz = 2μs。 在32-CLK双SDO模式下,一次转换需要至少32个SCLK周期。tCONV为730ns,tACQ = tTHROUGHPUT - tCONV = 2000ns - 730ns = 1270ns。 数据手册要求tACQ ≥ 33 × tCLK - tCONV。代入公式:1270ns ≥ 33 × tCLK - 730ns=>2000ns ≥ 33 × tCLK=>tCLK ≥ 60.6ns。因此,SCLK频率最高可达约1 / 60.6ns ≈ 16.5 MHz。在这个频率下,32个时钟周期占用约32 * 60.6ns = 1.94μs,满足2μs的总周期要求。
4.3 16-CLK模式详解(仅ADS7853/7253)
这是该系列的一个高效模式。在16-CLK模式下,转换和数据输出是同步进行的,即SCLK既用于驱动SAR转换逻辑,也用于移出数据。
工作流程(以双SDO模式为例):
CS变低,启动帧,SDO引脚输出0。- 从第一个SCLK下降沿开始,芯片就同时开始转换过程,并且立即在SDO_A和SDO_B上输出转换结果的最高位。
- 后续每个SCLK下降沿,ADC完成下一比特的转换,并同时将当前比特的结果移出。
- 对于14位的ADS7853,在第14个SCLK下降沿移出最低位(D0),第15、16个SCLK周期SDO输出0。对于12位的ADS7253,在第12个SCLK移出D0,第13至16个SCLK输出0。
- 在第16个SCLK后,
CS可拉高结束帧。
优势分析: 最大的优势在于对SCLK频率要求降低。要达到同样的吞吐率,16-CLK模式所需的SCLK频率是32-CLK模式的一半。例如,同样实现500kSPS,总周期2μs。16-CLK模式需要16个时钟,则tCLK = 2μs / 16 = 125ns,对应SCLK频率仅需8MHz。这降低了对微控制器SPI时钟的要求,减少了高频时钟带来的噪声风险。或者,在SCLK频率不变的情况下,可以缩短帧时间,实现更高的吞吐率。
避坑指南:16-CLK模式虽然高效,但有一个关键限制:它依赖于SCLK的边沿来推进内部转换。因此,SCLK的时钟质量(占空比、抖动)会直接影响转换精度。必须确保SCLK稳定、干净。如果使用微控制器的硬件SPI,需确认其在该频率下的时钟波形质量。我曾遇到过因SPI时钟线过长导致边沿不佳,在16-CLK模式下引入非线性误差的情况,后来在时钟线上串联小电阻并缩短走线后解决。
4.4 接口模式选择实战建议
- 追求最高性能和简单性:如果主控GPIO充足,且SPI时钟可以跑得较高(如>10MHz),32-CLK双SDO模式是首选。它逻辑清晰,两个通道数据并行读出,软件处理简单,且不受SCLK抖动的转换过程影响。
- GPIO资源紧张:如果主控SPI接口的MISO引脚不够,或者想节省一个GPIO,选择单SDO模式。需要权衡的是,读取双通道数据需要更多的SCLK数量(48或32个),这会略微降低最大可能的吞吐率,或者要求更高的SCLK频率来维持同样的速率。
- 主控时钟频率受限或追求高吞吐率:如果你的微控制器SPI时钟最高只有8MHz,但又需要较高的采样率,那么对于ADS7853/7253,16-CLK模式是必选项。它能让你在较低的SCLK频率下达到目标吞吐率。
- 系统噪声敏感:在模拟电路噪声敏感的应用中,较低的SCLK频率意味着更少的数字开关噪声耦合到模拟部分。此时,16-CLK模式通过降低时钟频率带来了额外的好处。
5. 寄存器读写与低功耗模式实战
理解了配置和接口,下一步就是如何通过代码与芯片交互。这涉及到具体的读写时序和命令字。
5.1 寄存器写操作
所有配置都通过SDI引脚,在CS为低电平期间,随SCLK同步写入。一个关键规则是:写入操作需要特定数量的SCLK下降沿才能被“验证”并生效。
- 命令字结构:每次传输的前16位是一个命令/数据字。其中高4位
B[15:12]决定了操作类型和目标寄存器。1000: 写配置寄存器1001: 写REFDAC_A寄存器1010: 写REFDAC_B寄存器
- 验证所需的SCLK数:这个数量取决于当前生效的接口模式(见上文表4)。例如,在默认的32-CLK双SDO模式下,需要至少32个SCLK下降沿。如果你只发了16个时钟就拉高
CS,这次写入是无效的。 - 生效时机:在
CS上升沿,芯片会检查本次帧是否有效(SCLK数是否足够)。如果有效,则将在下一帧应用新的配置。这是一个重要的延迟特性。
示例代码片段(C语言风格,假设32-CLK模式):
// 函数:向ADS8353写入配置寄存器 // cfr_config: 16位的配置寄存器值 void ADS8353_WriteCFR(uint16_t cfr_config) { uint16_t command_word = 0x8000 | (cfr_config & 0x0FFF); // 高4位为1000b SPI_CS_LOW(); // 拉低CS,开始帧 SPI_Transfer16(command_word); // 发送16位命令字 // 在32-CLK模式下,还需再发送16个时钟以完成至少32个SCLK的要求 // 可以发送任意数据(如0x0000),或者继续发送后续数据(如果是在连续读写中) SPI_Transfer16(0x0000); SPI_CS_HIGH(); // 拉高CS,结束帧,配置将在下一帧生效 }5.2 转换数据读取
读取数据相对简单,在正确的接口模式下,在数据输出时段(如32-CLK模式下的第16-31个SCLK)读取SDO线上的数据即可。需要注意的是,数据格式(二进制/补码)和位数(16/14/12)需要根据配置和型号进行解析。
读取双通道数据示例(32-CLK双SDO模式,16位):
uint16_t ADS8353_ReadDualChannel(uint16_t *data_chA, uint16_t *data_chB) { uint32_t raw_data; SPI_CS_LOW(); // 发送一个空命令(例如0x0000)或下一个通道的配置命令,同时接收数据 // 在32-CLK模式下,需要传输32位(4字节)以获得完整数据 raw_data = SPI_Transfer32(0x00000000); SPI_CS_HIGH(); // 假设SPI传输为MSB先行,且数据在SCLK下降沿采样 // 根据时序图,第16-31位是ADC数据,其中高16位可能是ADC_A,低16位可能是ADC_B // 具体顺序需要根据你的SPI模式和芯片时序确认,这里仅为示例 *data_chA = (raw_data >> 16) & 0xFFFF; // 提取通道A数据 *data_chB = raw_data & 0xFFFF; // 提取通道B数据 // 对于14位的ADS7853,有效数据只有高14位,需右移2位:*data_chA >>= 2; // 对于12位的ADS7253,有效数据只有高12位,需右移4位:*data_chA >>= 4; }5.3 低功耗模式:STANDBY与软件关断
在电池供电或间歇性采样的应用中,低功耗模式至关重要。
- STANDBY模式:通过设置
CFR.B5 = 1进入。在此模式下,部分内部电路关闭以降低功耗,但内部基准(如果使能)和REFDAC寄存器内容会保持,以便快速唤醒。从数据手册图表C027和C028可以看出,在25°C下,STANDBY电流(IAVDD STANDBY)典型值远低于正常工作电流,而关断电流(IAVDD Power Down)则更低。- 进入:在有效帧中写入
CFR.B5=1,在CS上升沿后进入。 - 退出:在有效帧中写入
CFR.B5=0,芯片在CS上升沿后开始唤醒,需要等待tPU_STDBY时间(见电气特性表)后才能进行下一次有效转换。
- 进入:在有效帧中写入
- 软件关断模式:通过向SDI发送特定序列(所有位为1)进入完全关断模式,功耗最低。唤醒需要执行一次完整的复位序列或重新初始化。
注意事项:在STANDBY模式下,SDO引脚在
CS为低时会持续输出高电平(全1),这是识别芯片是否处于待机状态的一个方法。唤醒后,第一次转换的结果可能是无效的,建议在唤醒后等待规定时间,并丢弃第一次采样结果。
6. 硬件设计要点与常见问题排查
再好的芯片,也离不开扎实的硬件设计。以下是围绕ADS8353系列设计时,我总结的几个关键点和常见坑位。
6.1 电源与去耦设计
这是模拟电路设计的基石,对ADC性能影响巨大。
- 模拟与数字电源分离:务必使用独立的AVDD和DVDD电源轨,即使它们电压相同。最好采用磁珠或0欧电阻进行单点连接。这能防止数字开关噪声通过电源串扰到敏感的模拟前端。
- 去耦电容布局:
- AVDD/DVDD:在每个电源引脚附近(1cm以内)放置一个0.1μF的陶瓷电容(X7R或X5R材质)到地。同时,在电源入口处放置一个10μF的钽电容或电解电容作为储能电容。
- REFIO_A/B:这是重中之重。必须为每个REFIO引脚就近连接一个10μF的陶瓷电容到其对应的REFGND引脚。这个电容为SAR ADC内部的开关电容DAC提供电荷,其稳定性和低ESR直接关系到转换的线性度和噪声。务必使用高质量的电容。
- 接地:采用星型接地或单点接地。将模拟地、数字地、基准地在芯片下方或附近通过一个点连接。REFGND应直接连接到系统的安静模拟地平面。
6.2 模拟输入前端驱动
根据之前分析的等效输入电路,驱动源必须有能力在采集时间内对40pF的采样电容进行充放电。
- 运放选择:选择具有足够带宽、压摆率和低输出阻抗的运放。运放的建立时间应远小于ADC的采集时间
tACQ。 - RC滤波:在运放输出和ADC输入之间,通常需要串联一个小的电阻(如10-100Ω)并并联一个电容到地(如100pF-1nF),形成一个抗混叠滤波器。这个RC网络还能帮助隔离运放输出与ADC的开关电容负载,提高稳定性。但需要注意,RC时间常数不能太大,否则会影响建立时间。
- 布局:模拟输入走线应尽量短,远离数字信号线(尤其是SCLK和CS)。如果可能,用地线包围或采用差分走线(即使是伪差分)。
6.3 常见问题与排查速查表
在实际调试中,以下问题较为常见:
| 现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 读数全为0或全为满量程 | 1. 电源或基准电压未正确连接。 2. 配置寄存器设置错误,如输入模式与实际接线不符。 3. 串行通信失败。 | 1. 测量AVDD, DVDD, REFIO引脚电压。 2. 检查 CFR.B7和CFR.B9设置,确认AINM引脚连接正确(接地或接VREF/2)。3. 用逻辑分析仪抓取SPI时序,确认CS、SCLK、SDI信号正常,SCLK数量满足模式要求。 |
| 读数噪声大,跳动剧烈 | 1. 电源噪声大,去耦不足。 2. 基准电压不稳定或噪声大。 3. 模拟输入线引入噪声。 4. 数字信号线对模拟部分干扰。 | 1. 用示波器检查电源纹波,加强去耦,特别是REFIO的10μF电容。 2. 检查基准源电路,确保REFGND干净。 3. 检查输入信号是否已良好滤波,走线是否远离干扰源。 4. 确保SCLK、CS等数字信号远离模拟输入和基准走线。 |
| 两个通道读数不一致(固定偏移) | 1. 两个通道的基准电压实际值不同(内部DAC误差或外部电路差异)。 2. 输入前端电路(如运放、分压电阻)存在失配。 | 1. 直接测量REFIO_A和REFIO_B引脚电压,看是否一致。可尝试微调REFDAC寄存器进行校准。 2. 交换两个通道的输入信号,看误差是否跟随通道。如果是,则是通道间失配,需硬件匹配或软件校准。 |
| 动态性能差(高频信号失真) | 1. 前端驱动运放带宽或压摆率不足。 2. 抗混叠滤波器截止频率过低或建立时间不足。 3. 采集时间 tACQ设置过短(SCLK频率过高)。 | 1. 检查输入信号的频率和幅值是否在运放的能力范围内。 2. 重新计算RC滤波器的时间常数,确保在 tACQ内能建立稳定。3. 降低SCLK频率,或切换到16-CLK模式以延长 tACQ。 |
| 无法进入或退出低功耗模式 | 1. 写入CFR的帧无效(SCLK数量不足)。 2. 唤醒后未等待足够时间 tPU_STDBY就进行转换。 | 1. 用逻辑分析仪确认在设置CFR.B5=1或=0的帧中,SCLK下降沿数量满足当前接口模式的要求。2. 在软件中,执行退出STANDBY的命令后,增加一个大于 tPU_STDBY的延时(通常几微秒到几十微秒)。 |
6.4 校准流程建议
为了达到最佳精度,建议执行以下校准步骤:
- 零点校准:在单端模式下,将
AINP短接到AINM(即地);在伪差分模式下,将AINP与AINM短接。读取此时的ADC输出码值,作为零点偏移量存储。 - 增益校准:施加一个精确的、接近满量程的已知电压(如使用高精度电压基准)。读取ADC输出码值。根据理论码值(已知电压 / LSB大小)和实际码值,计算增益误差。
- 内部基准微调:如果使用了内部基准,可以在完成上述校准后,尝试微调
REFDAC寄存器,观察ADC对已知电压的读数是否更接近理论值。这是一个迭代过程。 - 软件补偿:在MCU中,使用公式
校准后电压 = (原始码值 - 零点偏移) * LSB大小 / 增益校正系数。对于伪差分模式,还需考虑共模电压。
最后,ADC的性能验证离不开一台好的示波器和信号发生器。观察电源纹波、基准噪声、输入信号建立情况,以及SPI时序的完整性,是解决复杂问题的直接手段。每次更改硬件或配置后,从最基本的电源和通信查起,逐步验证模拟通路,这套方法能帮你节省大量调试时间。