ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ADC模数转换器完全指南:架构、参数与工程实践

ADC模数转换器完全指南:架构、参数与工程实践 我们平时说“数字化仪”听起来像是实验室里某个高大上的专用设备但在嵌入式开发和电子工程领域它其实就是 ADCAnalog-to-Digital Converter模数转换器的工程化叫法。示波器内部靠它把波形变成数据点单片机靠它读取传感器电压BMC 靠它监控主板电源电能表靠它计量电流——可以说凡是需要把“连续变化的物理量”变成“CPU 能计算的一串数字”的场景都绕不开 ADC。这篇文章我会从 ADC 的工作原理讲起掰开揉碎讲清楚 SAR、∑-Δ、流水线这些主流架构到底有什么区别然后聊一聊分辨率、采样率、信噪比、建立时间这些核心参数怎么看再结合真实项目里最容易踩坑的 PCB 布局、前端 RC 滤波、校准与滤波算法把 ADC 从选型到调通的完整链路过一遍。内容比较长干货密度高适合刚接触 ADC 的嵌入式新手也适合做了几年 MCU 开发但一直没系统梳理过 ADC 细节的工程师参考。1. 数字化仪的本质ADC 到底在做什么ADC 做的事情用一句话概括就是在某个时间点把连续的模拟电压值“快照”下来再量化成二进制数字。这个“快照 量化”的过程是整个数据采集系统的基石也是理解所有 ADC 架构、参数、应用问题的起点。1.1 采样、量化、编码三步走任何 ADC 的工作流程都可以拆成三步采样按固定时间间隔对输入信号取样把连续时间信号变成离散时间信号。量化把取样得到的电压值与一组离散的参考电平比较找到最接近的一个映射成对应的数字码。编码把量化结果转换成二进制码输出。采样这一步最常见的基础理论是奈奎斯特采样定理为了无失真地重建信号采样率必须至少大于信号最高频率的两倍。工程上这个“两倍”是理论下限实际 CPU 项目里我通常按信号最高频率的 35 倍来取采样率留够余量。量化这一步特别值得展开。一个 N 位 ADC参考电压为 Vref它的量化台阶就是 1 LSB Vref / 2^N。比如 12 位 ADC、3.3V 参考电压1 LSB 大约就是 3.3 / 4096 ≈ 0.806mV。也就是说输入电压每增加 0.806mV转换结果数字码加 1。如果你的输入只有 1V那采样结果大约就是 1 / 0.000806 ≈ 1241实际会因为偏移误差和增益误差略有出入。量化误差是 ADC 天生的、无法消除的误差。理想情况下量化误差均匀分布在 ±0.5 LSB 之间对应的噪声有效值可以用 LSB / √12 来估算。这个“1/√12”经常被忽略但它解释了为什么一个 12 位 ADC 的理论信噪比不是无限的。1.2 为什么工程师必须搞懂 ADC很多做 MCU 开发的朋友第一次用到 ADC 是这样Cubemx 里拉一下外设选择通道使能中断或 DMA然后就拿着 HAL 库函数开始读数值。这种做法在简单场合没问题一旦信号源阻抗偏高、电源纹波偏大、前端 RC 不匹配、采样率提升你就会发现读出来的数据要么跳变严重要么整体偏移甚至在某几个码值附近卡住不动。搞懂 ADC 的原理不是说要把每一级比较器、每一个电容阵列的内部电路背下来而是要建立起“采样保持 量化误差 建立时间 噪声预算”这套心智模型。等你遇到“ADC 数据漂移”“DMA 数据紊乱”“采样值跳动”这些问题时才能从原理上判断是信号链的问题、电源的问题、还是配置的问题而不是盲目改滤波参数。2. ADC 主流架构盘点SAR、∑-Δ、流水线、折叠内插ADC 的架构非常多不同架构在速度、精度、功耗、成本上的取舍完全不一样。理解这些架构的异同才能在选型的时候知道“为什么这颗芯片用 SAR 而不是 ∑-Δ”也才能看懂数据手册里那些“看似矛盾”的参数。2.1 SAR ADC逐次逼近的“天平称重”SAR ADC逐次逼近型是单片机内置 ADC 的主力STM32、GD32、NXP S32K 这些 MCU 内部集成的基本都是 SAR 架构。它的工作原理特别像用天平称重先放一个半量程的砝码如果物体比砝码重就保留这个砝码否则拿走然后再放半量程的一半重复这个比较过程直到所有位都比较完。也就是说N 位 SAR ADC 完成一次转换需要 N 个比较周期。12 位 ADC 就是 12 个时钟周期完成一次“逐次逼近”的比较外加采样保持、输出等开销。SAR ADC 的优点是在中等分辨率816 位、中等速度几百 kSPS 到几 MSPS范围内功耗和面积都很均衡而且转换是“即时”的没有流水线延迟。SAR ADC 有个非常关键的工程细节它对输入信号的采样保持电路有“建立时间acquisition time”的要求。在采样阶段采样开关闭合外部信号源要通过源阻抗给内部采样电容充电。如果源阻抗太大、采样时间太短采样电容上的电压还没充到和外加信号一致就开始做比较了结果自然是偏的。2.2 ∑-Δ ADC用速度换精度∑-Δ ADCSigma-Delta西格玛-德尔塔走的是另一条路它不追求“一次比出精确结果”而是用很高的采样率远高于奈奎斯特率对信号进行过采样然后通过噪声整形把量化噪音频谱推高到高频段再用数字抽取滤波器把高频噪声滤掉。打个比方SAR ADC 像一个认真称量的天平每次只称一次但要称得准∑-Δ ADC 像一个“很吵”的秤每次称得不准但它称很多次然后取平均同时特殊设计让“称错的噪声”尽量集中到高频最后用低通滤波把这些噪声干掉。∑-Δ ADC 的主要优势是分辨率极高1624 位很常见非常适合传感器测量、音频采集、称重仪表这类对精度要求高的应用。代价是转换速度相对较慢而且由于内部有数字滤波器单次转换结果有比较大的群延迟不适合高速控制环路。2.3 流水线 ADC 与折叠内插型架构流水线 ADCPipeline ADC主要用于高速数据采集场景比如示波器、基站、雷达接收机。它把一个 N 位转换拆成多级完成每级先做低分辨率粗转换把余量放大后送给下一级。这样做的好处是一级做完、马上开始下一级的新一轮转换各级“排队工作”实现了吞吐率的大幅提升代价是输出有固定延迟latency。折叠内插型 ADCFolding/Interpolating则是在高速 ADC 中减少比较器数量的技巧。传统的全并行 Flash ADC 需要 2^N - 1 个比较器位数一高面积和功耗就爆炸。折叠技术先把输入信号进行折叠处理把大范围电压映射到较小的区间再用内插技术从相邻的比较器中“插值”出额外信息从而用更少的比较器实现较高的分辨率。折叠内插架构在高速 ADC 里很有代表性但嵌入式工程师一般接触不到独立芯片更多是在高速示波器、宽带接收机等仪器设备里间接使用。2.4 架构对比怎么选架构分辨率采样率核心优势典型场景注意点SAR8~16 位100kSPS~10MSPS功耗低、无延迟、单芯片集成MCU 内置 ADC、工业控制、电池监控对源阻抗和采样时间敏感∑-Δ16~24 位10SPS~1MSPS精度极高、抗噪好称重、温度测量、音频输出延迟大、带宽受限流水线10~16 位10MSPS~1GSPS高速 中高精度示波器、通信系统延迟固定功耗较高折叠内插6~12 位很有优势高速低功耗、面积小高速数据采集、仪器仪表多用于专用芯片选型的时候我习惯先看信号带宽再定采样率最后看分辨率。不要追求“位数越高越好”——在高速场景你可能只需要 10 位在低速称重场景 24 位也不嫌多关键是匹配真实需求。3. 看懂 ADC 的核心参数别被数据手册忽悠ADC 数据手册上参数一大堆真正决定系统性能的其实是那几个最核心的指标。这个部分我挑重点讲清楚每一个都会告诉大家它到底影响什么、怎么用。3.1 分辨率、量化噪声与理想 N 位 ADC 的信噪比分辨率就是 ADC 输出的位数 N它决定了量化台阶的大小。理想 N 位 ADC 的量化噪声有效值约为 LSB/√12而满量程正弦波的有效值是 Vref / (2√2)两者相除再取 20 倍对数就得到理论信噪比公式SNR 6.02 × N 1.76 dB这个公式非常有用。12 位 ADC 的理论 SNR 是 74 dB16 位是 98 dB。但实际芯片因为热噪声、抖动、非线性等因素永远达不到这个值。数据手册里面常用“有效位数 ENOB”来描述真实性能ENOB (SNR_actual - 1.76) / 6.02。你看到一颗“16 位 ADC”实际测量 ENOB 只有 14 位这是非常正常的。这里有个大家容易理解错的地方量化噪声和“ADC 读数的抖动”不是一回事。量化噪声是 ADC 转码时的固有误差即使输入电压非常稳定量化结果也可能在两个相邻码之间跳。而读数抖动更多是前端噪声、参考电压噪声、采样时钟抖动共同作用的结果。3.2 采样率、采样周期与建立时间采样率Sample Rate决定了 ADC 每秒执行多少次转换单位是 SPS每秒采样次数。要注意 MCU 内置 ADC 的“采样率”和“ADC 时钟频率”不是一回事。比如 STM32F103 的 ADC 时钟最大 14MHz但完成一次 12 位转换需要约 14 个 ADC 时钟周期1.5 个采样周期 12.5 个转换周期所以最快采样率大约就是 14MHz / 14 ≈ 1MSPS。配置里你通常能设置“采样周期Sampling Time”比如 1.5、7.5、13.5、28.5、41.5、71.5、239.5 个 ADC 时钟周期。这个采样时间越长采样电容充电越充分结果越准确代价是整体采样率下降。当信号源输出阻抗高时我一般会把采样时间调长宁可采样率低一点也不要读出一堆假数据。“建立时间”这个概念包括外部信号源给采样电容充电的建立时间也包括 ADC 内部放大器、比较器的建立时间。工程上吃透一点输入阻抗高 → 需要更长的采样时间或更低阻抗的前级驱动如运放跟随器。3.3 信噪比、动态参数与抖动的影响信噪比之外ADC 还有 SINAD信纳比、THD总谐波失真、SFDR无杂散动态范围、DNL微分非线性、INL积分非线性这些动态参数。DNL 描述的是“实际台阶宽度相对于理想 1 LSB 的偏差”。如果某个码对应的模拟输入范围特别窄数据手册就会写上 DNL -1 LSB这意味着这个码可能丢失missing code。INL 则是整体转换曲线偏离理想直线的程度直接影响绝对精度。采样时钟的抖动clock jitter对高分辨率 ADC 的影响经常被轻视。孔径抖动导致“采样时刻”不确定当输入信号为高频大摆幅时这种时间不确定性会转化为电压误差直接恶化 SNR。工程上经验法则是输入频率越高、ADC 位数越高对时钟抖动的容忍度越低。所以高速高精度采集系统里“用好晶振”和“设计低抖动时钟树”是刚需。3.4 别忘了参考电压参考电压Vref的稳定性对 ADC 精度的影响是“一票否决”级的。ADC 输出的数字码是输入电压相对于参考电压的比例参考电压一旦漂移所有测量值都跟着漂。所以高精度测量系统通常不会直接用 MCU 的 3.3V 电源做参考而会选用专门的基准电压芯片如 REF3030、ADR420 等并且给 Vref 引脚做好滤波和去耦。4. ADC 前端设计与 PCB 布局3 个不可忽视的坑前面讲了参数这一部分讲实践。很多 ADC 项目调不通问题不在芯片本身而在前端电路和 PCB 布局上。我挑三个最常见、影响最大的坑来展开这也是搜索热词里 “adc/dac 电路设计:规避时钟抖动与电源噪声的3个pcb布局要点” 指向的核心内容。4.1 时钟抖动怎么影响信噪比时钟抖动对 ADC 的影响本质上是“采样点时间不确定造成了电压误差”。假设输入信号是幅值 A、频率 f 的正弦波其最大变化率发生在过零点附近约为 2πfA。如果采样时刻抖动了 Δt 秒等效电压误差大约就是 2πfA × Δt。这个误差会混入采样结果成为噪声的一部分。举个例子1V 幅值、10MHz 的正弦信号如果时钟抖动是 10ps那么过零点附近的电压误差大约是 2π × 10MHz × 1V × 10ps ≈ 0.63mV。如果这是一个 12 位、2V 满量程的 ADC0.63mV 相当于 1.3 LSB 的误差已经不可忽略了。所以 PCB 设计里时钟源要尽量靠近 ADC 时钟引脚走线要短要直不要穿越数字信号区域必要的时候做包地处理。时钟线上不要随意串联大阻值电阻因为它和引脚寄生电容会形成 RC 低通导致时钟边沿变缓增大抖动。4.2 电源噪声ADC 的“隐形杀手”ADC 的供电引脚对噪声非常敏感尤其是模拟电源AVDD和参考电压Vref引脚。数字电路翻转时会在电源网络上产生高频电流毛刺如果模拟电源和数字电源没有做隔离这些毛刺会直接耦合进 ADC 的模拟比较电路表现为测量结果的随机跳动。我最常用的处理方法是模拟电源和数字电源分别走电源平面或粗线在 ADC 附近用磁珠或 0Ω 电阻单点连接模拟地和数字地。磁珠在高频下表现为高阻抗可以阻隔高频噪声但要注意磁珠的直流压降选择额定电流足够的型号。去耦电容的摆放也有讲究。每个电源引脚旁边放一个 100nF 的陶瓷电容封装 0402 或 0603再在一小片区域内放一个 10μF 的钽电容或 MLCC。电容必须尽量靠近引脚走线要先到电容再到引脚而不是先到引脚再绕去电容否则高频时走线电感会让去耦失效。4.3 PCB 布局的三个关键要点结合实践经验我总结了 ADC 相关 PCB 布局的 3 个核心原则模拟输入走线短而粗远离数字信号。模拟输入引脚通常高阻抗很容易感应噪声。信号源到 ADC 的走线尽量短不要跨越数字总线、开关电源区域。如果输入信号很微弱考虑加一级同相放大器做缓冲。地平面完整不在 ADC 下方开槽。模拟输入信号的返回路径在地平面如果地平面被分割或开槽返回电流就要绕远路形成环路面积既辐射也接收噪声。ADC 正下方尽量保持完整地层。参考电压引脚单独滤波不要和数字电源混用。哪怕芯片内部有参考缓冲外部 Vref 引脚也值得加 RC 滤波。串联 10Ω100Ω 电阻加 1μF10μF 电容带宽压低一些参考电压会干净很多。除此之外还有一个容易被忽略的点ADC 的数字输出线不要太靠近模拟输入走线。数字信号翻转的 dv/dt 很陡会通过寄生电容耦合到模拟输入端。如果 layout 空间实在紧张至少在两层之间加地平面隔离。4.4 ∑-Δ ADC 前端的 RC 滤波设计∑-Δ ADC 由于过采样 噪声整形的特性对外部 RC 滤波的要求和 SAR ADC 不太一样。SAR ADC 前端 RC 主要是为了滤除信号源的高频噪声同时 RC 要配合采样电容的并充/再充电需求不能太大而 ∑-Δ ADC 的前端 RC 主要是为了限制进入调制器的带外噪声和时钟干扰。工程上设计 ∑-Δ ADC 前端时RC 的截止频率一般要远大于信号频率但又不能太大否则带外噪声会进入调制器造成混叠。同时要注意驱动运放的输出能力运放直接驱动一个较大的电容负载可能引起振荡所以电容两端常串一个小电阻形成零点补偿。实际我在做 24 位 ∑-Δ 称重方案时传感器信号经过仪表放大器后接一个 100Ω 1nF 的 RC 低通再进入 ADC 输入。这个组合在信号带宽 10Hz 左右的应用里效果很好也几乎不影响建立时间。5. ADC 工程应用实战从 MCU 内置到外部校准讲完理论看几个真实应用场景。这个部分我把嵌入式日常开发中最常遇到 ADC 的场景串一遍每一步都有具体的配置思路和坑点。5.1 MCU 内置 ADC 的配置与 DMA 传输以 STM32 为例Cubemx 里配置 ADC 多通道 DMA 采集是非常常用的功能。关键参数包括分辨率一般选 12 位采样时间根据信号源阻抗选高阻抗选 71.5 或 239.5转换模式连续转换 or 单次转换DMA 模式循环模式CircularDMA 在这里的角色非常关键ADC 每完成一个通道的转换就把结果自动搬运到内存数组完全不需要 CPU 干预。这样 ADC 转换和 CPU 数据处理可以并行转换效率高得多。一个我踩过的坑DMA 配置时外设地址一定填hadc-DRADC 数据寄存器内存地址填目标数组方向是外设到内存数据宽度与 ADC 分辨率匹配。还有一个很容易忽略的问题是 DMA 中断和 ADC 中断的优先级设置如果 DMA 传输完成中断优先级太低在高负载中断环境下可能丢失数据表现为数组里的数据“错位”或“卡住”。5.2 多通道扫描、规则通道与注入通道STM32 的 ADC 分为规则通道Regular和注入通道Injected。规则通道组一次扫描会按配置好的顺序转换多个通道结果存到同一个数据寄存器12 位 ADC 是ADC_DR所以多通道时必须用 DMA否则每转完一个通道数据寄存器就会被下一个通道覆盖。注入通道组则有自己的数据寄存器通常用于“抢占式”的高优先级采样比如电机控制里的电流采样。我还经常看到有人问“规则组的 DMA 数据顺序会乱吗”正常情况下不会只要 DMA 通道、外设地址、内存地址配置正确转换结果按规则序列的顺序写入内存。但如果中途开启过注入通道转换注入结果不会进入规则组的 DMA 队列这是正常的别误以为数据丢了。在实用层面多通道扫描模式下我会把变化缓慢的信号温度、电压监控分配为规则通道用低频周期扫描而把需要精确时刻采样的信号如 PWM 中心对齐时的电流波形配置为注入通道或独立 ADC 的采样触发源保证采样时刻和 PWM 同步。5.3 外部 ADC 三点校准外部 ADC 的标定是许多测量设备量产时必经的一步。最常见的做法是“两点校准”零点和增益点但实际线性度不够好时我会做“三点校准”。三点校准的思路是给 ADC 输入三个已知标准电压 V1、V2、V3例如满量程的 10%、50%、90%记录 ADC 输出码值 C1、C2、C3。由于系统残余误差偏置、增益、非线性通常可以用分段折线近似就在 V1-V2 和 V2-V3 两段分别做线性插值把 ADC 原始码映射成校准后的电压。校准的计算公式很简单第一段V V1 (C - C1) × (V2 - V1) / (C2 - C1) 第二段V V2 (C - C2) × (V3 - V2) / (C3 - C2)实际应用中校准点选得越多精度越好但生产标定时间越长。三点校准是精度和效率之间的平衡点在仪表行业非常常见。还有一种“外部 ADC 校准”是校准芯片本身的偏移很多 ADC 有内部自校准寄存器可以把测量得到的偏移误差写回去。不过这个偏移会随温度漂移所以严格的做法是带温度采集做温漂补偿而不是只在出厂校一次。5.4 C 语言 ADC 值滤波函数ADC 原始数据跳变是嵌入式开发中最常见的烦恼。硬件层面该做的都做了仍然有小幅跳动那就要靠软件滤波。下面分享一个我自己常用的“中位值平均滤波法”它综合了中位值滤波去脉冲和算术平均滤波平滑的优点尤其适合 ADC 采样#define ADC_FILTER_N 5 uint32_t ADC_Filter(uint32_t *buf) { uint32_t tmp[ADC_FILTER_N]; uint32_t sum 0; uint32_t min, max; int i, j; // 拷贝数据避免影响原始缓冲区 for (i 0; i ADC_FILTER_N; i) { tmp[i] buf[i]; } // 冒泡排序取中间部分求平均 for (i 0; i ADC_FILTER_N - 1; i) { for (j i 1; j ADC_FILTER_N; j) { if (tmp[j] tmp[i]) { uint32_t t tmp[i]; tmp[i] tmp[j]; tmp[j] t; } } } min tmp[0]; max tmp[ADC_FILTER_N - 1]; for (i 0; i ADC_FILTER_N; i) { sum tmp[i]; } // 去除最大最小值后求平均等效于 N-2 个中间值求和平均 sum - min; sum - max; return sum / (ADC_FILTER_N - 2); }这个滤波的思想取连续 N 次采样去掉一个最大值和一个最小值剩下的求平均。它能抗脉冲干扰也能平滑随机噪声缺点是每次输出要等 N 次采样结束实时性略差。如果要求高可以改成滑动窗口版本维护一个 FIFO每来一个新样本就更新一次输出延迟更小。对于变化缓慢的信号我更推荐一阶低通滤波y α × x (1 - α) × y_oldα 在 0.1~0.5 之间调整。它极其轻量代码量小适合对实时性要求不高的温度、电压监控场景。5.5 ADC 按键与 BMC 读取电压ADC 还有个常见应用是“按键检测”——用一根 ADC 引脚识别多个按键。原理是每个按键按下时通过不同的分压电阻组合产生不同的电压值MCU 根据 ADC 采样结果判断是哪个按键。这样做的好处是少占用 GPIO但坏处是采样值必须稳定、可区分。设计时我会保证相邻按键对应的电压差至少大于 100 个 LSB并且考虑按键接触电阻和 ADC 误差留足够裕量。BMC基板管理控制器通过 ADC 读取主板电压也是类似的套路被监控的电源轨经过电阻分压降到 BMC ADC 的输入量程以内BMC 定期采样并换算成真实电压。这里有个隐蔽的坑分压电阻通常阻值都比较大几十 kΩ如果 BMC ADC 的采样时间偏短采样电容来不及充电读数就会偏低。遇到这种情况除了调长采样时间还可以在 ADC 引脚对地并联一个小电容如 1nF起到“预充电”作用。5.6 ADC 数据漂移排查思路“ADC 数据漂移”是很多项目的头号疑难杂症。漂移可能表现为零漂输入不变输出慢慢变、也可能表现为随温度或时间变化。排查顺序我建议按“信号链 → 参考 → 电源 → 软件”来第一步先短路 ADC 输入端到 GND看输出是否在零附近稳定。如果不稳问题在 ADC 本身、参考电压或电源而和前端信号无关。第二步短接输入端到 Vref 或固定标准电压看读数是否稳定。如果不稳优先怀疑参考电压和电源噪声。第三步接真实传感器信号对比外部高精度万用表读数。如果偏差较大但稳定多半是之前说的增益/偏移误差做校准即可。第四步如果信号本身没问题但读数周期性波动检查是否存在共地干扰或采样时刻与 PWM 开关节点耦合的问题。软件上还有一种“漂移”是采样延时变化引起的。比如启用了多个中断每次 ADC 采样到读取结果之间的时间间隔不固定如果被测信号本身是波动的读数就会看起来“漂”。解决方案是用 DMA 持续采集CPU 在固定周期读取最新结果保证采样时刻的确定性。6. 常见问题与排查技巧实录最后把工程中最常遇到的 ADC 问题整理成一张速查表并附上几条独家经验。这些内容很多是在芯片勘误表和数据手册里找不到的。现象可能原因排查与解决采样值整体偏高或偏低参考电压不准、偏移误差、增益误差外部高精度电压源校准 软件修正采样值随机跳变电源噪声、信号源阻抗太高、采样时间太短加强电源滤波、延长采样时间、前端加缓冲器多通道 DMA 数据错位DMA 配置错误、多通道扫描顺序与内存不一致检查 DMA 优先级、外设地址和内存地址采样值随温度漂移参考电压温漂、输入偏置电流温漂选低温漂基准、做温补校准读数在某个码附近卡住DNL 误差、比较器噪声、信号偏低增加抖动dither或提高输入信号幅度BMC 读取电压偏低分压电阻太大、采样电容充电不足调长采样时间、输入端并小电容CLA 读到的结果不经过 ADCOFFTRIM读取时序不对、寄存器访问冲突等转换完成信号后再读或直接读结果寄存器并手动应用偏移修正6.1 DMA 数据紊乱的典型场景GD32E230 这类国产 MCU 上ADC DMA 数据紊乱是大家常搜的热词。我排查过一个实际案例开启 ADC 扫描模式 DMA 循环模式采集三个通道数组里偶尔出现“前一个通道的值跑到后一个通道”的情况。最终定位到两个原因叠加一是 DMA 中断和 ADC 转换完成中断的优先级没配好导致 DMA 在搬运过程中被更高优先级的中断打断数据一致性被破坏二是扫描模式下的通道顺序和 DMA 内存的地址递增方向不一致。解决方法是统一中断优先级并把 DMA 配置成内存地址自动递增外设地址固定为 ADC 数据寄存器。6.2 采样时刻与 PWM 同步在电机控制或开关电源应用中ADC 采样时刻必须和 PWM 脉冲对齐否则采到的电流/电压波形会有很大的相位偏差。常见做法是使用高级定时器的触发输出TRGO来触发 ADC 采样并且把 ADC 采样点设置在 PWM 中心对齐模式下的特定时刻比如零向量中心此时开关噪声最小。STM32 高级定时器中心对齐模式和 ADC 采样的配合是经典操作配置 PWM 中心对齐设定更新事件作为 ADC 触发源再通过 ADC 注入通道在该时刻采样。这样采到的信号非常干净几乎不受开关噪声影响。6.3 斜坡法仿真 ADC 的 DNLDNL 的测试一般要用高精度 DAC 统计方法码密度测试。但如果想快速评估 ADC 的 DNL可以考虑“斜坡法”给 ADC 输入一个非常缓慢上升的斜坡电压统计每个输出码出现的次数。理想情况下如果输入信号经过每一个量化台阶的时间相同那么每个码出现的次数近似相等。实际测得的每个码的计数相对于平均值的偏差就反映了 DNL 的近似情况。这个方法精度有限但作为产品前期验证 ADC 芯片的手感已经很有参考价值了。要注意斜坡电压的线性度要远好于被测 ADC否则得到的不是 ADC 的 DNL而是斜坡发生器自己的问题。经过这些梳理你会发现 ADC 的问题大多数时候不是“芯片不行”而是“信号链没配合好”。我自己做了这么多年数据采集最大的体会是ADC 就像一个极其诚实的记录员你把什么样的信号喂给它它就原原本本把什么转成数字如果你不解决源阻抗、电源噪声、参考电压、采样时序这些前端问题而只是一味在软件里加滤波那是在掩盖症状而不是治病因。最后分享一个我个人很受用的调试习惯新板子第一次跑 ADC不要急着接传感器而是先用稳定的直流电压比如干净的 1.250V 基准接到 ADC 输入跑一整天看数据稳定性。这个基线的数据能帮你判断后面所有复杂信号的测量结果到底是不是可信的。
返回列表