拓冰建站拓冰建站
首页 / 资讯中心 / 正文

高速ADC设计攻克高位数高采样率难题:时钟与前端是关键

1. 为什么125MSPS与16bit的组合是ADC设计里的“硬骨头”拿到“125M sps16bit ADC模块设计”这个需求我第一反应不是高兴而是警觉。单看125MSPS采样率市面上大量SAR和流水线芯片都能做到单看16bit分辨率Sigma-Delta架构能轻松拿下。但这两个参数放在一起就成了另一个维度的挑战——125MSPS下还要保住16bit的有效位数SNR和SFDR的指标线一下就拉到了非常苛刻的区间。先算一笔账大家就明白难点在哪了。16bit的理论SNR是 SNR 6.02 × N 1.76 6.02 × 16 1.76 ≈ 98.08dB这个值是纯量化噪声极限实际工程里要想让ENOB有效位数接近15bit以上系统里所有噪声源的总贡献必须压在-100dBFS以下。这还不是最要命的更要命的是采样时钟的抖动。对于输入信号频率fin时钟抖动tjitter造成的SNR劣化满足 SNR_clk 20 × log10(1 / (2π × fin × tjitter))代入几个典型输入频率算一下就知道了。如果输入信号是10MHz想要让时钟抖动不成为限制因素、保持98dB的SNR那么 tjitter 1 / (2π × 1e7 × 10^(98/20)) ≈ 0.1ps这是个什么概念普通晶振的输出抖动通常在1ps到几ps量级随便用一个LVCMOS晶振直接驱动高速ADCSNR可能直接掉到80dB以下16bit的ADC最后实测连12bit都保不住。所以这个标题背后真正的设计重点根本不在那颗ADC芯片本身而在时钟、电源、前端驱动、PCB布局这些“外围”工作。本文就把整个模块的设计主线完整捋一遍从架构选型讲到校准验证全是能直接落地的思路。适合看这篇文章的是在做高速数据采集、软件无线电、医疗超声、激光雷达等领域的硬件工程师。如果你正准备在项目里用一颗16bit的高速ADC或者已经在调试但实测指标始终上不去这篇文章能把坑提前给你标出来。2. 架构选型SAR、流水线还是折叠内插高速高精度ADC的架构选择这步是决定整个设计路线的大前提。很多第一次做高速ADC的朋友上来就看分辨率看采样率忽略了架构差异带来的应用体验和调试难度完全不同。2.1 三种主流架构的取舍逻辑SAR架构也就是逐次逼近型内部只有一个比较器一套DAC靠二分查找逐位逼近输入电压。优点是没有流水线延迟功耗较低中低频段的线性度做得相当好。SAR真能跑到125MSPS以上的也有TI的ADS4225这种流水线先放一边SAR跑到125M的产品确实不算多而且位数一般集中在12到14bit。SAR在高分辨率下的问题是电容阵列规模大高速比较器功耗会迅速上涨。流水线架构的原理是把量化过程分成多级每一级完成一部分位的量化并输出残差给下一级。每一级只需处理前一级的余量所以每一级的比较器精度要求并不高整体可以做到高速和高分辨率兼得。16bit 125MSPS这个点流水线是绝对主流TI、ADI的大量高速采集芯片都采用这个架构。代价是存在流水线延迟对多片同步或需要“零延迟”的控制场景不友好。另外流水线架构对时钟质量和PCB布局更挑剔因为级间残差放大器的建立时间直接和转换精度挂钩。折叠内插型架构在FPGA、示波器前端这样的超高速场合更常见用折叠电路把输入信号映射到多个平行比较器减少比较器数量并利用内插减少前端放大器数量。它在Gsps级别的ADC中出镜率高但在这个量级的位数和速度下实在谈不上是主流选择。我在选型时直接跳过折叠内插主要是看中后期调试成本和设计风险。2.2 具体器件选型时关注的参数在这个规格点上我建议优先看ADI的AD9653、AD9637这类16bit 125MSPS流水线ADC或者TI的ADS4225虽然是12bit的但要上16bit就得往ADS5263、ADS54J60这类高端系列看。真正的重点是几个容易被忽略的隐藏参数第一模拟输入带宽Full Power Bandwidth, FPBW。125MSPS采样率对应奈奎斯特带宽是62.5MHz但实际信号可能远高于此比如中频采样场景下信号频率能到100MHz、200MHz。这时候如果ADC的模拟输入带宽不够信号幅度在进入量化器之前就已经衰减了前端再干净也没意义。第二DNL和INL数据也就是微分非线性和积分非线性。这两个参数直接影响无杂散动态范围尤其在多音信号或高次谐波占主导的场景里INL曲线不平滑会导致谐波分量抬头SFDR一掉接收机的抗阻塞能力就崩了。选型时不仅要看典型值还要看全温范围内的最大值很多芯片在25度时写得漂亮温度一拉偏ENOB直接掉1到2位。第三功耗和散热。125MSPS 16bit的流水线ADC功耗通常在几百毫瓦量级。模块如果做在密闭机箱里热噪声会通过基准漂移和输入级失调来影响性能。选型时就要把散热路径想清楚PCB上对应位置得有足够的散热铜皮和过孔阵列。3. 时钟树与模拟前端SNR指标八成都折在这里模块设计走到原理图阶段最容易“看起来没问题”但实测翻车的就是两个部分采样时钟和模拟前端。我把这两个放在一起讲因为它们在噪声预算里是互相耦合的。3.1 时钟抖动预算与分配回到第一部分的公式125MSPS采样率下如果输入信号频率做到10MHz想保住16bit的性能时钟抖动需要控制在0.1ps左右。这个数字非常严苛普通晶振根本做不到必须用专用的低抖动时钟缓冲器或锁相环。工程上常用的方案有两类一类是全数字方案用FPGA内部的MMCM/PLL给ADC提供采样时钟。另一类是独立时钟芯片方案比如TI的LMK61E2低抖动可编程振荡器、LMK04828双环路去抖时钟芯片。我在这个模块里选了LMK61E2直接输出LVDS时钟给ADC实测抖动大约0.2ps对10MHz频段的信号来说SNR劣化不到0.3dB可以接受。如果是更高频的应用比如中频采样100MHz以上0.2ps的抖动也会吃掉1到2dB的SNR。这时候就得考虑LMK04828这类带片上环路滤波的去抖时钟配合外部VCXO把抖动压到50fs量级。代价是调试复杂度上了一个台阶寄存器配置、环路带宽的选择都会影响最终效果。我的经验是别一上来就上高端去抖芯片先用可编程振荡器把方案跑通确认整链路瓶颈在别处之后再评估是否值得加去抖。时钟信号的PCB布线也极其关键。LVDS差分对的等长误差控制在正负5mil以内阻抗按100欧差分控制走线尽量远离数字信号和电源层边缘。另外ADC的采样时钟输入有一个内部偏置电压芯片手册通常会要求在时钟输入引脚加交流耦合电容这个电容不是随便选的我喜欢在这里用0.1uF的NP0或X7R然后根据时钟输入幅度确认摆幅是否满足数据手册要求。3.2 前端RC滤波与驱动放大器设计ADC的模拟输入端不是高阻理想输入它有一个采样电容每次采样都会有一个充电瞬态电流。这个瞬态电流流过外部电阻会引入额外误差。这里有一个计算公式值得记录外部串联电阻R_s与采样电容C_s形成的时间常数决定了信号建立精度。对于16bit建立误差要小于1/2 LSB而1/2 LSB相对满量程的比例是 1 / (2 × 2^16) ≈ 7.6e-6如果采样时间是Ts那么需要满足 Ts (N 0.5) × ln2 × R_s × C_s ≈ 11.5 × R_s × C_s125MSPS采样率下如果占空比50%采样时间约4ns。代入16bit 16bit N16计算出R_s × C_s必须小于0.35ns。很多器件数据手册会给出推荐前端RC值典型取值是10欧姆串联电阻配10pF对地电容再加上芯片内部已有的采样电容。这个RC一方面起到抗混叠滤波作用另一方面缓冲采样瞬态。但是要注意电容选太大也不行它会和驱动运放形成新的极点导致信号通路带宽不足而且运放需要的驱动电流也会变大。前端驱动运放的选型是另一个老坑。16bit 125MSPS下运放的THD指标和输入驱动能力必须同时达标。普通的高速运放新号带宽够但是失真大在满摆幅输入下谐波分量飙高会把ADC的SFDR拖垮。专门的ADC驱动放大器例如TI的LMH6554、THS4509这类全差分放大器才适合干这个活。全差分结构的好处是输出共模可以灵活调整正好和ADC输入共模匹配省的用电阻分压网络去硬拉共模电压。3.3 ∑-Δ前端RC的对比参考聊到RC滤波顺便提一下∑-Δ ADC的前端设计思路。很多人看到“ADC前端RC滤波”就以为给芯片输入端加个电容就完事其实∑-Δ和SAR/流水线的RC设计逻辑完全不一样。∑-Δ ADC过采样率高采样电容小而开关频率高对外部驱动放大器建立时间的要求相对宽松但对外部RC参数更敏感RC太大会在带内形成信号衰减太小又无法抑制高频开关噪声。所以这类前端通常用较小的串联电阻加较大的旁路电容并且需要对地参考一个干净的模拟地平面。这些细节不展开但希望大家明白同一句话“前端RC滤波”在不同架构下含义天差地别拿SAR的经验去套∑-Δ往往把指标做坏。4. 电源与基准看不见的噪声比想象中更可怕高速ADC的电源抑制能力有限尤其在高频段电源上的纹波会直接耦合到参考电压或输入级变成输出数据的杂散。这个阶段犯的错在时域波形里看不清晰但一测动态参数SFDR上的某个毛刺就冒出来了。4.1 模拟电源的噪声预算16bit ADC的LSB电压按满量程2Vpp计算 LSB 2 / 2^16 ≈ 30.5uV这意味着电源纹波哪怕只有几十微伏都会在输出码值中体现出来。普通DC-DC的纹波通常在10mV量级必须经过LDO和滤波网络二次处理。LDO选型要关注两个参数输出噪声密度和电源抑制比PSRR。TI的TPS7A4701、ADI的LT3045这类超低噪声LDO输出噪声在10Hz到100kHz积分后只有几微伏是高速ADC电源的标配。LDO的输出端还要加足够的去耦电容但是注意电容类型和位置。我一般用1uF的X7R并联10nF的NP0紧贴ADS5263这类芯片的供电引脚再串联一个磁珠或小阻值电阻把LDO输出和ADC电源引脚之间做二级滤波。磁珠选交流阻抗在100MHz时约100到600欧的型号直流电阻尽量小避免吃压降。4.2 基准电压源的设计细节ADC的参考电压是整个转换精度的地基。芯片内部的基准往往噪声很大所以16bit高速ADC通常允许外部输入高精度基准。外部基准源输出的任何波动都会直接叠加到输入信号上。这里有个容易踩的坑基准输出电压的宽频噪声和温漂同样重要例如ADR445、ADR435这类基准噪声低至1.8uVpp温漂系数能做到几个ppm/°C。但光有基准芯片还不够基准输出到ADC参考输入引脚之间的走线必须用模拟地包住走线要短而宽参考输入引脚上的去耦电容按数据手册推荐值放置通常是0.1uF和10uF搭配。4.3 接地策略单点接地还是分割地关于ADC的模拟地和数字地我在这个项目里最终选择的是统一地平面加分区布置。把PCB板卡上模拟器件和数字器件分别摆在不同的区域各区域的地都直接连到同一层完整的铺铜上不在中间开槽断开。这是现代高速数据转换器布线的通行做法因为任何开槽都意味着回流路径被拉长容易形成辐射环路。数字信号如果必须穿过模拟区域请一定让走线下方的地平面保持完整并确保信号线自己有一条紧邻的回流路径否则高频回流电流窜到模拟部分再多的滤波电容都救不回来。5. PCB布局三大要点把“参考设计”变成“自己的板卡”同样的原理图画的PCB不同实测指标能差出一大截。高速ADC模块的PCB设计布局的核心目标就一句话让信号和时钟的物理路径最短让电源和地的回流路径最干净。下面三个点是我总结出来最值得反复检查的。5.1 阻抗控制与差分走线ADC的模拟输入通常是差分信号LVDS时钟和数字输出也是差分信号。PCB的差分阻抗要严格按100欧控制。计算阻抗时介质厚度和铜厚的实际值会和PCB厂商标称值有偏差所以发板前一定要让板厂提供叠层参数自己用仿真工具复核一遍。差分对内等长也是硬指标125MSPS的LVDS数据信号边沿可以做到几百皮秒以内等长差超过10mil就会引入时序问题。5.2 地过孔与去耦电容的摆放ADC芯片底部散热焊盘和接地焊盘处要打足够多的过孔不仅为了散热更是为了降低接地回路电感。这些过孔被打在焊盘正下方。去耦电容的位置理论上是越靠近电源引脚越有效但实际操作时电容要放在芯片的同一面且紧挨供电引脚过孔从电容焊盘直接落到地平面不要绕路。电源通路应该遵循LDO输出 → 磁珠 → 去耦电容阵列 → 芯片电源引脚路径上的任何支路都从主干上引出而不是串串。5.3 版图上避开“隐形振铃”这个点是我吃过大亏才记下来的时钟走线在扇出后有一段垂直参考平面的过度区域比如从差分过孔换层到另一面如果没有伴随地过孔阻抗会突变引起振铃。对125MSPS系统来说这个振铃在时域上看可能只是一点点过冲但反映到SNR上就是几个dB的损失。解决方法是差分对换层处在换层区域两侧各加一个地过孔给回流电流提供低阻抗路径。还有一个容易被忽略的不要为了“整齐”把时钟走线拉成90度直角或45度锐角能用45度钝角或圆弧就走圆弧减少不必要的寄生电容不均。6. 数字接口与数据通路采到的数据别死在传输上ADC模拟前端做得再完美数据搬运出问题整个系统照样是废的。125MSPS 16bit意味着原始数据率是 125 × 16 2Gbps如果用单端CMOS并行输出这个速率不仅引脚多而且对EMC极其不利高速ADC现在主流输出是DDR LVDS数据位宽通常是2的倍数。比如ADS5263是16bit DDR LVDS输出在125MSPS采样率下DDR时钟频率是125MHz数据总速率就是2Gbps。6.1 LVDS数据与时钟的对齐DDR LVDS接口的调试要点就一个字对齐。ADC会输出一个DCLK数据时钟和FCLK帧时钟FPGA用DCLK的上下沿去采样16bit数据FCLK用来区分一个采样点的两个半字节。很多项目调不通问题都出在PCB走线等长或FPGA的IODELAY没调准上。我的建议是FPGA里给每个bit lane都加上IODELAY通过训练函数动态调整delay值找到每个bit的最佳采样窗口。不要指望“等长做了就一定能采到”不同lane间的skew往往超出预期。具体方法是发斜坡测试信号FPGA收到数据后检查码值是否严格递增如果某一位跳变错误说明对应lane的delay偏了。6.2 数据缓存与DMA的坑在实际嵌入式系统里ADC数据终归要落进DMA或FIFO。这里要特别提醒一个STM32/GD32等MCU做高速ADC采集时的常见问题DMA“数据紊乱”。GD32E230这类MCU的ADC配置DMA时如果开启扫描模式且通道数较多而DMA配置的传输总长度和ADC的转换通道数不匹配会出现数据错位。比如四通道用DMA搬运DMA传输数量设成单个通道的长度而不是四个通道的总长度就会导致每轮数据里只有第一个通道是准的后面通道的数据全乱了。这属于配置参数不匹配不是芯片坏了。另外DMA搬运16bit数据时目标缓冲区地址必须对齐否则部分内核会触发总线错误或性能骤降。STM32如果使用三重ADC模式三个ADC轮流或同步采样后会有专门的通用规则数据寄存器ADC_CDR。读这个寄存器的时机很关键如果程序在ADC还没转换完就去读读到的可能是旧数据。正确做法是等DMA传输完成中断或等状态标志位置位后再一次性读出所有通道数据不要边转换边读否则在高速采样时很容易读到尚未更新完的半个结果。6.3 采样时刻点与PWM联动在电机控制或电源控制场景里经常需要让采样的时刻和PWM的开关点严格对齐否则电流采样会采到开关噪声。STM32的高级定时器有很多人把中心对齐模式和触发ADC的功能配置到一起中心对齐模式下定时器计数器在向上计数和向下计数两个方向都产生更新事件可以让ADC在PWM载波的中心点或边沿点采样。采样的关键是设置好TIM的触发输出TRGO和ADC的触发源、采样周期参数让ADC的采样时序落在PWM开关瞬态之前或之后的稳定区间避免电感和MOS管的dv/dt噪声进入采样窗口。这块的时序冲突很难在仿真中发现建议直接在示波器上同时观测PWM输出和ADC的采样触发信号肉眼确认触发沿的相对位置。7. 校准、滤波与动态指标验证样机性能不等于整机性能ADC模块设计不是原理图评审过了就万事大吉真正体现水平的都在调试和验证阶段。高速高精度ADC在实验室测出来的性能和装进整机后的实际表现之间隔着温度漂移、通道串扰和基准源长期稳定性的多重差距。这一节说说怎么把这些差距补回来。7.1 三点校准与通用校准思路因外部ADC增益误差和失调误差的存在即使设计完全正确直接读到的码值也未必是“真值”。最简单的单点校准只能修真失调误差更进一步的两点校准可以修正增益和失调但如果ADC的INL曲线上有明显的非线性区两点校准就无能为力了。工程上比较实用的是“三点校准”选取零点和两个非线性区附近的标准电压比如满量程的25%和75%对这三个点分别代入线性拟合公式求出分段校正系数。具体实现时用精密电压源产生多个标准电压记录ADC输出码值再用最小二乘法拟合出电压-码值直线或分段直线。16bit系统不建议只用一个截距和斜率做全量程校正因为高速ADC在大信号输入时的INL往往比小信号时差分两段或三段校正效果更明显。还有一种被忽略的校准方向——ADC的数据漂移问题。16bit系统里温度和电源电压缓慢变化会带来码值漂移。漂移来源可能是基准源温漂也可能是采样电容的介质吸收效应。这种漂移无法通过前置电路完全消除只能在软件里加补偿。建议定期例如上电自检时采集内部校准源或固定的基准电压动态修正当前工作点的偏差。这在BMC读取电压的应用里尤其常见BMC通过ADC采样系统电压如果只做单次校准整个生命周期内的温漂累积误差会相当明显必须配合周期自校准流程。7.2 C语言实现滑动平均滤波实际采集的数据高频噪声无法完全靠硬件滤除。对16bit ADC输出做软件滤波我的首选不是简单的N点平均因为它对尖峰脉冲毫无抵抗力而是滑动中值加滑动的组合先做3点或5点中值滤波剔除粗大误差再做滑动平均平滑高频噪声。下面给出一个可直接用的16bit滑动平均滤波C代码#define ADC_FILTER_N 16 uint32_t adc_filter_buf[ADC_FILTER_N] {0}; uint32_t adc_filter_sum 0; uint8_t adc_filter_idx 0; uint16_t adc_filter(uint16_t new_value) { adc_filter_sum - adc_filter_buf[adc_filter_idx]; adc_filter_buf[adc_filter_idx] new_value; adc_filter_sum new_value; adc_filter_idx (adc_filter_idx 1) (ADC_FILTER_N - 1); return (uint16_t)(adc_filter_sum 4); }注意点ADC_FILTER_N必须是2的幂这样求模和除法的位运算才成立累加器adc_filter_sum要定义成uint32_t否则16bit数据累加16次最大值接近65536 × 16 1,048,57616bit的uint16_t直接溢出。这段代码看起来简单但如果直接在中断服务函数里调用务必注意芯片的位操作效率STM32的32位除法指令虽然不慢但用移位代替除法是嵌入式开发的低保操作。7.3 动态参数测试与ENOB验证最后整个模块设计是否达标唯一的裁判是实测动态参数。不要在缺少频谱仪和信号源的情况下拍脑袋说“性能很好”。我的测试步骤是用低相噪信号源产生10MHz或20MHz单音正弦波幅度调至满量程的-1dBFS。信号经过带通滤波器后输入ADC模块滤除信号源本身的谐波分量。采集至少128K个采样点送入PC端用Hamming窗或Blackman-Harris窗做FFT。对数坐标下观察频谱SNR是信号功率与除直流和谐波外所有噪声功率之比SFDR是信号功率与最大杂散分量功率之差ENOB (SNR - 1.76) / 6.02。125MSPS 16bit模块比较理想的测试结果是中频10MHz时SNR在82到85dBSFDR在95dB以上对应的ENOB大约在13.5到14bit。注意这是“实用动态有效位”不是数据手册的分辨率。有些人拿静态INL和DNL就号称“16bit”那只是线性度好动态范围完全不是一回事。如果你测试出来的SFDR在某个频率点出现一条斜率极陡的毛刺十有八九是时钟或电源的杂散分量耦合进模拟通路了回头检查这两个部分的滤波和布局比继续调软件有效得多。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门