1. 为什么现在我会认真去评测一颗国产16位ADC先把背景交代一下。年初做一个工业现场数据采集模块需要同时兼顾精度和速度输入信号是传感器经过调理后的0~5V电压要求最终测量分辨率达到16位采样率不低于几kSPS同时整机成本还要压下来。按以前的做法这类需求多半会直接选一颗进口SAR型ADC比如TI的ADS系列或者ADI的AD76xx系列。但今年情况变了交期和价格都让人头疼手里又在推国产化方案所以我开始认真看国内厂家的高速高精度ADC产品线。拿到LTD211x系列样片的时候说实话我的预期并不高。以前用过的部分国产ADC给我的印象是“标称16位实际用起来只有14位”要么串口时序别扭要么基准内部做得太凑合。但这颗片子测完之后有些结论确实超出了我的预期也踩了一些坑所以把整个评测过程整理出来希望给正在选国产ADC的人一些参考。这篇文章不是数据手册翻译也不会把每一页规格都念一遍。我更想聊的是作为一个要落地到产品里的工程师拿到LTD211x之后到底该怎么搭评测环境、怎么测、测哪些指标、在哪翻车、最后怎么处理数据。如果你手里也有一批这类样片或者正在纠结选型这篇文章应该能帮你省掉不少弯路。需要提前说明的是我这里拿到的LTD211x是系列中的基础型号16位SAR架构SPI数字输出单端输入支持外部基准。系列里其他型号可能带多通道、差分输入、内部基准等不同配置但核心的模拟链路和数字接口逻辑是相通的评测方法与结论也可以复用。2. 拆开看规格LTD211x的定位与关键特性解析2.1 16位SAR ADC到底意味着什么很多刚接触精度的朋友会把“16位”直接理解成“分辨率比12位高4个bit”这个理解没错但不完整。SAR型ADC的16位分辨率意味着理论上能把满量程电压分成65536份。以2.5V基准、单端输入为例一个LSB对应的电压是LSB 2.5V / 65536 ≈ 38.15uV这个数字看起来不大但反过来说如果参考电压有1mV的纹波就会带来大约26个LSB的误差直接把有效位数砸回12位以下。所以说16位ADC评测的核心不是“能不能出16位数据”而是“在真实电路里噪声和干扰对最后有效位数的侵蚀程度”。LTD211x本质上是一颗逐次逼近型ADC内部是一个比较器、一个电容DAC阵列和逐次逼近寄存器。它的工作过程可以简单类比成天平称重先用最重的砝码试重了换轻的再试逐步逼近未知重量。SAR架构的优势是转换速度快、功耗低缺点是精度极度依赖内部电容匹配和比较器噪声性能而这两点恰恰是衡量一颗ADC模拟设计水平的关键。2.2 LTD211x系列的定位专为低功耗高精度采集而生从官方给出的应用方向看LTD211x主要面向便携医疗设备、工业传感器采集、电池供电的数据记录仪、以及一些需要宽温度范围测量的场景。我把它归类为“通用型精密测量ADC”不是那种动辄几MSPS的高速流水线型也不是像ADS1256那样追求极低噪声的过采样型。定位决定了评测的侧重点。我没有拿它去跑高速连续转换而是重点测了三件事静态精度非线性、短接输入后的噪声水平、以及实际采样率下的有效位数。这三个指标基本决定了一颗精密SAR ADC在实际应用中的价值。2.3 引脚与接口设计的初步印象LTD211x的封装并不复杂引脚数量不多电源、地、基准、模拟输入、SPI接口外加一个转换控制脚。SPI模式支持从模式外部MCU通过片选和时钟触发单次或连续转换。这里有一个设计细节让我印象比较深它允许通过硬件引脚配置一些工作模式而不必每次上电都往寄存器里写初始化数据。对于很多单片机资源紧张的场景能少几句初始化代码就是实在的便利。供电方面数字和模拟电源是分开引脚的这一点很关键。很多国产芯片为了省管脚会把AVDD和DVDD内部短接虽然方便但隔离噪声只能靠外部电路想办法。分开引脚意味着PCB设计上可以更讲究也能减少数字总线噪声窜入模拟核心的概率。我在评测时给模拟电源加了LC滤波数字电源单独走小电感后面测出来的噪声数据确实比直接共用电源时好不少。3. 评测平台搭建从电源到基准每一步都不能将就3.1 供电方案先把“干净”的电搞出来写这段前我要先把最重要的结论放出来测16位ADC测试电路本身的质量必须高于被测器件否则你得不出任何有效结论。我给LTD211x供电用的是低噪声LDO输出3.3V给数字部分模拟部分再经过一级LC滤波器单独给AVDD。LC滤波器选的值参考了评估板建议电感到1uH量级、电容到10uF量级就够用重点是避开自谐振点。如果你手头有示波器可以先把电源输出调到噪声底明显看到开关纹波的电源坚决不要用在16位ADC评测平台上。这里我多说一句很多评测翻车不是ADC不行而是供电先输了。你给ADC喂一个纹波5mV的电源然后测出来的码值乱跳这不能怪芯片。评估被测器件之前先评估整个测试链路这是评测工作的第一原则。3.2 基准电压一颗ADC精度的一半在基准上LTD211x支持外部基准输入。我的建议是无论如何都用外部基准除非你只做8位/10位级别的粗略测量。我选了一颗低噪声电压基准输出2.5V。选择基准时重点看两个参数初始精度和温漂。工业环境如果温度变化范围大温漂直接官宣了测量误差的上限。而初始精度则可以通过校准抵消所以优先级上温漂比初始精度更重要。基准的噪声同样是隐藏杀手。很多基准芯片有“低频噪声”指标表现为输出电压缓慢随机漂移。这种噪声跟ADC自身的量化噪声叠加在输出码值里很难通过滤波完全消除因为它分布在很低的频段。有条件的话可以在基准输出端并一个0.1uF的低ESR电容能有效压低宽带噪声。3.3 前端驱动电路被无数人忽略的“建立时间”这是LTD211x评测中我认为最关键、也最容易被忽略的环节。SAR型ADC的原理决定了它在采样阶段会对输入源瞬间抽取一个电流脉冲。如果你直接用信号发生器或运放输出直接怼到ADC输入那个节点瞬间会被“吸”掉一截电荷之后需要一定时间恢复稳定。如果恢复时间超过ADC要求的输入建立时间采样到的电压就是错误的表现为非线性增大、码值跳变甚至直流读数偏移。解决办法是在ADC输入端加一级缓冲放大器也就是驱动运放。下图是我用的电路配置思路文字描述信号源 - 前置低通 - 同相放大/缓冲运放 - RC低通 - LTD211x INP运放选择不需要特别高带宽但要求建立时间短、输出阻抗低、对容性负载不敏感。RC低通选型上串联电阻要控制在几十欧姆量级配合电容形成一个截止频率远高于信号带宽的低通同时也要兼顾ADC采样保持电路的要求。我实际测试中发现不加驱动运放直接接信号源时在几个特定输入电压点会出现1~2个LSB的重复性偏差加上驱动运放之后同样的测试条件偏差消失。这说明不是LTD211x本身线性不好而是前端建立时间不够导致采样点不准确。3.4 PCB布局接地是玄学但也是科学16位ADC的PCB布局没有太多玄学核心原则就四条模拟地和数字地单点连接、模拟电源独立滤波、基准走线远离数字总线、输入走线屏蔽短直。我用的测试板是两层板底层大面积铺地LTD211x放在模拟区域中心SPI接口引线走板边与模拟输入拉开距离。地平面在ADC下方保持完整不要在器件正下方开窗走信号。如果你用四层板要单独分配一个完整的地层效果会更好。4. 实测数据解读信噪比、有效位数与噪声来源4.1 短接输入法先看器件的本底噪声拿到板子后首次实验我先把ADC输入端短接到模拟地实际是接到驱动运放的共模电压然后连续采集几千个码值画出直方图。这一步测的是器件本底噪声加基准噪声的混合体。实测下来在3.3V供电、2.5V基准、8kSPS采样率下短接输入的输出码值散布在±3LSB以内标准偏差约为1.2LSB换算成电压大约46uV换算成有效位数约14.5位。坦白说这个结果处于主流16位SAR ADC的正常区间跟同级别进口芯片处在同一水平线上没有出现我之前担心的“国产虚标位数”的情况。需要说明的是短接输入测到的噪声不完全来自ADC内部基准噪声和测试板上的干扰也占了一部分。所以这个结果应该理解成“整个测试链路的噪声水平”而不是LTD211x单芯片的绝对极限。单芯片极限要用超低噪声基准配合极其干净的评估板才能逼近普通产品开发场景下链路噪声才是真正要关心的数字。4.2 直流线性度大步进扫描与码值采集我通过精密DAC输出系列电压信号从0V以100mV步进扫描到2.5V记录每个电压点对应的ADC码值再与理想值做差得到“码值误差曲线”。实测LTD211x在中间电压区间的最大积分非线性误差在±2LSB以内接近满量程两端时误差略微增大最高到约±3LSB。这个表现说明内部的电容DAC匹配做得不错没有出现中段突然扭曲线性的现象。对比我用过的某进口同规格芯片典型INL±1LSBLTD211x确实差一些但考虑到价格和供货因素这个差距在绝大多数工业应用里是可以接受的。如果你测出来线性误差曲线明显呈“弧度”或“阶梯”状那就要警惕弧度通常来自基准或输入端电荷注入不平衡阶梯可能来自内部DAC的电容失配这两种情况可能跟芯片本身质量有关。4.3 动态性能在全输入范围内评估真有效位数评测ADC的动态性能通常用正弦波输入加FFT分析算出信噪比(SINAD)、无杂散动态范围(SFDR)等指标。但考虑到LTD211x的采样率不算高我用的是更直观的方法输入一个接近满量程的低频正弦波采样多周期后做FFT从频谱上直接观察信号与噪声基底。实测中基波与噪声基底的落差大约在86~88dB对应的有效位数ENOB约14.1~14.3位。这个结果与短接测试推算的链路噪声基本吻合说明限制性能的主要不是谐波失真而是宽带噪声。频谱里没有看到明显的杂散尖峰说明数字接口的干扰没有串到模拟链路PCB布局方向是对的。4.4 温度漂移加热枪和冰袋的土办法验证没有恒温箱我用了两个土办法笔记本散热底座加热到约50°C以及冰袋降温到约10°C测输入电压对应的码值变化。两次测试下来零输入点的码值随温度漂移了大约4~5LSB。这个数量级对于工业级考核算正常如果项目要求的误差预算很紧建议在固件里做温度校准把ADC裸机读数与片上和外部温度传感器对应起来建一个小型查找表把漂移造成的影响压到最低。5. MCU对接SPI时序、数据拼接与采样率估算5.1 硬件接口上的几个实际注意点LTD211x的SPI从模式实现比较简单SCLK空闲极性CPOL和相位CPHA组合需要根据数据手册确认。我手上的样片按照手册要求配置为“空闲高电平第二个边沿采样”也就是通常说的SPI Mode 3。如果不确定先用示波器看CS下降沿之后首位数据线的变化时刻比盲试省心得多。片选信号建议由MCU的GPIO手动控制而不是直接挂硬件NSS便于在读取前确认转换完成状态。部分国产ADC芯片在时序上会跟STM32硬件SPI存在细微的相位兼容问题手推CS灵活性更高代码量也就多两行。5.2 STM32读取LTD211x的代码参考下面是我在STM32上驱动LTD211x的基础代码为了演示做了精简实际项目中需要加上必要的错误处理和超时机制#include spi.h #include gpio.h #define LTD211x_CS_LOW() HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_RESET) #define LTD211x_CS_HIGH() HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_SET) uint16_t LTD211x_ReadSample(void) { uint16_t raw 0; uint8_t buf[2] {0, 0}; LTD211x_CS_LOW(); /* 小延时确保片选建立 */ for (volatile int i 0; i 8; i); HAL_SPI_Receive(hspi1, buf, 2, HAL_MAX_DELAY); LTD211x_CS_HIGH(); raw (uint16_t)((buf[0] 8) | buf[1]); return raw; } /* 转换为带符号数假设输入范围为0~Vref单端 */ int16_t LTD211x_ToSigned(uint16_t raw) { return (int16_t)(raw - 32768); }这段代码的前提是SPI已经初始化为Mode 3、16位数据长度或8位两次接收、主模式。特别提醒数据拼接时务必保持最高位在buf[0]否则16位数据会整体错位表现为输出值在零点和满量程之间非规律跳变。5.3 采样率到底能跑到多少LTD211x的最高转换速度取决于芯片内部的SAR转换时间加上SPI读取时间。按我的实测连续模式下单次转换周期大约在几十微秒量级对应采样率能到十几kSPS到几十kSPS。具体数字要看具体型号不能一概而论。MCU侧影响采样率的瓶颈经常不在SPI速率而在你触发转换的周期控制上。我建议的做法是用一个定时器以固定周期产生中断中断里触发一次转换并读取数据。这样采样时间间隔抖动小后续做FFT或者数字滤波也不会引入额外的频谱泄漏。对于需要更高吞吐的场景可以考虑用DMA搬运SPI接收数据配合定时器触发把CPU从每次读数的等待中解放出来。但我个人建议先跑通查询模式验证信号链路再上DMA优化不要一上来就追求极限性能。6. 软件层面的后处理从原始码值到稳定读数6.1 为什么原始16位码值不能直接用前几轮测试下来LTD211x输出的原始码值在稳定输入下仍然有几个LSB的随机波动。这种情况在16位ADC上是完全正常的——几个LSB的散布对应微伏级别的噪声这是物理极限附近的表现。产品设计不能拿单次采样值直接用一定要做软件后处理用处理时间换噪声带宽。后处理的核心思路是低通滤波但低通滤波器的类型和参数要根据信号特征选择不能什么情况都用同一个模板。6.2 常用滤波方案与适用场景滑动平均滤波适合信号变化缓慢的场景比如温度、压力、液位。窗口长度N越大噪声越低但响应延迟也越大。N要根据系统的时间常数来选我一般先让N在4~16之间试。中位值滤波适合偶尔有尖峰干扰的场景比如电机启停瞬间的耦合噪声。窗口大小通常取5或7排序后取中间值。一阶惯性滤波相当于模拟RC低通的数字实现计算量最小适合实时性要求高的场合。系数alpha越小滤波越强但响应越慢。过采样加平均如果LTD211x的采样率有富余可以对同一个输入电压连续采N次累加平均后等效于提高了过采样率可以换回一些有效位数。实际项目里我常常组合使用先过一次中位值滤掉尖峰再进滑动平均压低宽频噪声。组合滤波的延迟需要整体估算在闭环控制项目里一定要把延时要进控制环路模型里不然容易相位滞后。6.3 C语言实现示例一个兼顾简单与稳定的滑动平均滤波函数适合在MCU上跑#define FILTER_LEN 8 static uint32_t filter_sum 0; static uint16_t filter_buf[FILTER_LEN]; static uint8_t filter_idx 0; uint16_t ADC_Filter(uint16_t new_sample) { filter_sum - filter_buf[filter_idx]; filter_buf[filter_idx] new_sample; filter_sum new_sample; filter_idx (filter_idx 1) % FILTER_LEN; return (uint16_t)(filter_sum / FILTER_LEN); }注意filter_sum是32位变量防止累加溢出。每次更新复杂度是O(1)不涉及循环遍历实时性很好。8点的窗口对抑制白噪声大约能带来2~3倍的噪声降低代价是信号带宽降低到原来的约1/8。如果MCU算力充足我更喜欢用FIR滤波转折频率设计得更平滑带外衰减更大。但对LTD211x这种几十kSPS级别的ADC滑动平均的滤波效果已经足够没必要过度设计。7. 实测中踩过的坑与排查思路7.1 第一个坑基准电压的噪声被PCB走线“放大”第一次上电测试时码值跳动远超预期标准偏差到4LSB。我怀疑基准有问题用示波器在基准输出脚测量纹波确实不大。排查了很久发现问题出在基准电压参考点与LTD211x的基准输入之间的走线太长而走线上恰好平行了一段SPI时钟线。数字时钟边沿通过寄生电容耦合到基准走线上给基准电压注入了几十微伏级别的干扰。这个干扰被16位ADC直接采集而且因为干扰与采样时钟同步在数据上表现为固定图案的跳变很难用软件滤波去除。解决办法是把基准走线移到PCB另一层SPI走线拉开距离并在基准输入脚就近加0.1uF滤波电容。改完再测标准偏差降回1.2LSB。这个案例说明低噪声设计里耦合路径的整改往往比器件本身更换更有效。7.2 第二个坑采样点对不准导致的有效位数下降在跑动态测试时我用定时器触发读取但在高几个档位采样率下FFT结果里出现了明显的频谱泄漏有效位数一下子掉了1.5位。一开始以为是滤波器不够好后来抓时序发现定时器中断里先做了一大堆其它任务导致每次读ADC的时刻抖动变大。修正方法很原始但有效触发转换后在中断里立即读SPI绝不插入无关代码需要处理的数据全部移到主循环里再做。时序抖动压下去之后FFT的噪底立刻变干净了。7.3 第三个坑输入驱动运放的相位裕度不足前端驱动运放我最初随手选了一颗通用运放配了大电容做低通。结果在输入信号快速爬升时ADC读数出现了过冲振荡。示波器看运放输出发现是大电容负载导致运放相位裕度不足输出级振铃振铃没有完全衰减就被ADC采样了。换用更大带宽的运放并把RC低通的电容减小到可接受范围问题解决。这里要记住的通用经验是给运放接大电容负载一定要检查稳定性别只看直流精度忘了交流稳定性。8. 关于LTD211x的最终评估与选型建议8.1 这套评测流程的普适性回头看我这次做的评测工作本质上不是针对LTD211x这个特定型号的“找茬”而是建立了一套通用的16位SAR ADC验收流程先保证测试链路干净电源、基准、驱动、PCB。短接输入测本底噪声和输出码分布。大步进扫描测静态线性度。低频正弦波加频谱分析测有效位数。温度粗测评估漂移。接入真实MCU跑SPI时序和数据后处理。这套流程换一颗ADC、换一个品牌同样适用。比起直接抄别人结论亲手跑过一遍后你对器件的脾气和极限会有非常准确的感觉。8.2 LTD211x适合什么项目不适合什么项目以我实际测试的结果来看LTD211x适合的项目画像大概是采样率需求不高于几十kSPS、需要16位分辨率级别的精密测量、对成本和供货稳定敏感、工作温度范围中等。典型如电池供电的便携仪表、工业变送器、实验室数据采集节点这类场景它表现称职。不太适合的场景是需要高速或连续满速率采样比如音频或振动分析、需要极低温漂基准级精度、需要多通道同时采样保持等。这些场景它的相邻产品线或更高规格型号可能更合适选型时要把“系列”里的各型号拉开对比不是所有LTD211x都一模一样。我个人的感觉是这颗芯片代表了一种信号国产精密ADC已经跨过了“能用”的门槛开始往“好用”的方向走。评测过程中遇到的坑没有一个是无法解决的硬伤更多是通用精密模拟设计本身就需要注意的常识问题。8.3 下一步还可以怎么扩展这次只完成了单端输入、外部基准的基础评测。如果你的应用需要下一步可以做差分输入和内部基准模式的对比测试实测两种配置下的噪声差异。另外LTD211x系列如果有更高采样率的型号也可以在同一个平台上评估其高速性能把测试板换成四层板配合DMA驱动的SPI做更完整的FFT指标分析。这些内容等我有进一步数据后会再整理出来分享。
阅读完成 · 觉得有帮助?