☰
ADC/DAC设计要点:从采样定理到PCB布局,硬件工程师的必修课
2026/10/5 3:03:26 网站建设 项目流程

做电路设计这些年,我最深的体会是:真正把系统逼到性能极限的瓶颈,往往不是MCU跑多快、代码多巧妙,而是模拟和数字交界的那两个器件——ADC和DAC。传感器输出的连续电压变化要进MCU的大动脉,DAC输出的波形要驱动功放或可调电源,这两者从原理到布局每一个细节,都是实打实的学问。如果你正准备入门硬件、或者已经在嵌入式开发里天天跟STM32的ADC/DAC打交道,这篇内容值得你静下心看完。

1. 为什么每个做电路设计的人都要先吃透DAC/ADC

1.1 先把信号链路串起来看

我们平时研究的电路,本质上都在处理信息:传感器把物理量变成电压,处理器把电压变成数字,控制对象再把数字变回物理量。这条链路里,ADC负责把连续变化的模拟电压换成离散的二进制码,DAC则负责反过来,把处理器算好的数字还原成模拟电压。

举个常见的例子:一个温控系统,热敏电阻的阻值随温度变化,分压后变成一个电压信号,MCU通过内部ADC采集这个电压,算出现场温度。如果PID运算结果要控制加热器,办法很多,其中一种就是把数字量通过DAC转换为一个精确的模拟基准电压,再去控制恒流源或比较器。也就是说,ADC是系统的眼睛,DAC是系统的手,缺一个,整个反馈环路都是断的。

1.2 转换器性能决定系统性能天花板

我经常跟新人说一句话:MCU的主频再高,如果ADC采样出来的数据是乱的,那系统就是废的。转换器的指标直接决定整个系统的性能上限。

举一个看得见的例子:12位ADC的理论分辨率是4096级,假如参考电压是3.3V,那么每个LSB对应约0.8mV。如果你的采样电路噪声有10mV级别,哪怕ADC本身精度再好,采集到的数值都会在十几个LSB之间乱跳。同样的道理,DAC的建立时间不够快,波形就会拖尾;参考电压没做好,输出值就会跟着参考源漂移。

所以搞懂ADC/DAC不只是懂那个芯片引脚怎么接,而是要把采样保持、参考电压、量化噪声、时钟抖动、电源去耦这一整套逻辑全打通。这也是我写这个"电路设计学习"系列的初衷,从最基础的原理开始,一步一步拆到能落地的设计。

2. 拆解DAC的几种主流实现方式与参数背后含义

2.1 R-2R电阻网络:用精度换迭代速度的经典结构

DAC的工作原理并不复杂,核心是"按权重叠加电压或电流"。最经典的实现之一是R-2R梯形电阻网络,它只用R和2R两种阻值的电阻,就能在输入端对二进制的每一位进行权重分配。

以8位R-2R网络为例,假设参考电压Vref=5V,输入数字量D从0到255,输出电压基本关系是:

Vout = Vref × D / 2^N

当D=0b10000001,也就是十进制的129时,输出理论值就是 5 × 129 / 256 ≈ 2.5195V。R-2R网络最大的优点是电阻种类少、便于用厚薄膜工艺实现高一致性,很多中低速DAC芯片内部都采用这种结构。

但R-2R也有短板:电阻精度直接影响输出精度,如果电阻误差太大,高位的权重就会篡权,输出曲线就不是线性的了。所以你在选R-2R型DAC的时候,要特别留意INL和DNL这两个参数,后面我会详细说。另一个问题是,R-2R网络本身不带保持功能,所以实际芯片会在输出端加一个运放构成的单位增益缓冲,把网络的高输出阻抗隔离开。

2.2 PWM与Σ-Δ DAC:低成本的暴力拆解方案

如果你不想买专门的DAC芯片,MCU上最现成的DAC其实是PWM模块。思路很简单:PWM输出的方波占空比和数字量成正比,只要后级加一个低通滤波器,把PWM基频和它的谐波滤掉,剩下的平均电压就是模拟值。

PWM做DAC的优点是便宜、灵活,缺点也很明显:纹波大、响应慢。假设PWM频率是20kHz,你想要的模拟带宽就注定只能到几百Hz级别,否则滤波器的截止频率和PWM频率根本拉不开距离,输出纹波会让你怀疑人生。想要提高等效分辨率,可以用"抖动"技术,在多个PWM周期里调整占空比分布,把平均值细化到比单个周期更小的步进,代价是增加了数字逻辑复杂度,纹波还得靠滤波硬扛。

相比之下,Σ-Δ型DAC的思路更高明:它先对信号做远高于奈奎斯特频率的过采样,再利用反馈环路把量化误差推到高频段,最后靠后级模拟滤波器把这些高频噪声滤掉。这种方式可以用相对粗糙的低位内部转换器,换来整体高达16位、24位的有效精度,音频Codec和精密信号源基本都是这条路。

2.3 分辨率、建立时间、INL/DNL:选型要看的三个数

先说什么叫分辨率。分辨率等于DAC能给出多少个不同输出电压等级,用位数N表示时就是2^N个等级。10位DAC和12位DAC的区别,在实际输出电压值上是4倍的步进差别。

然后是建立时间,指数字输入变化后,输出电压进入最终值误差带(比如±0.5LSB)所需的时间。你如果拿一个建立时间100µs的DAC去生成20kHz正弦波,每个正弦周期只有50µs,还没等输出稳定就被拉去输出下一个点,波形自然难看。所以建立时间决定了DAC的最高更新率。

INL和DNL是一对容易混淆的兄弟。INL(积分非线性)描述实际输出曲线与理想直线之间的最大偏差,可以理解为整体的"弯曲"程度;DNL(微分非线性)描述相邻两个数字码对应的输出步进与理想步进之差,DNL超过1LSB时就有可能出现实际输出不递增的乱码情况,这在斜坡扫描时特别致命。选DAC芯片时,这三项必须放在同一张表格里横向对比,不要只看位数。

参数含义影响
分辨率输出等级数量最小步进电压
建立时间输出达到稳定误差带的时间最高更新率
INL整体线性偏差输出精度/线性度
DNL相邻步进偏差是否失码、单调性

3. ADC采样:从奈奎斯特定理到量化噪声

3.1 采样定理与混叠:为什么采样率必须大于两倍信号频率

ADC的第一个知识点,就是奈奎斯特采样定理:要无损重建一个最高频率为f的信号,采样率至少得是2f。注意这里是"至少",实际工程里往往留出不少余量。

为什么采样率不达标就会出问题?因为欠采样会把高频率信号"折叠"回低频区间,这就是混叠。一个直观的例子是车轮转动:高速摄像机的帧率跟不上轮子的转速,车轮看起来反而在倒转。电路里的混叠一样,如果被测信号里有100kHz的噪声,而你的ADC采样率只有20kHz,100kHz就会混叠叠加到10kHz甚至更低频段上,这时候你看到的数据就再也分不清真实信号和噪声了。

正因此,ADC前面必须加抗混叠滤波器。这个滤波器不一定要多陡峭,但必须让高于奈奎斯特频率的成分衰减到不影响有效位数的程度。很多入门设计只注重采样率,却漏了抗混叠这一环,结果数据漂移得莫名其妙,这就是典型的"软件查了一年,硬件一开始就错了"。

3.2 SAR、流水线、Σ-Δ:三种主流ADC结构与适用场景

现在主流的ADC大致分三类:逐次逼近型(SAR)、流水线型(Pipeline)和Σ-Δ型。

SAR ADC是MCU内置ADC的绝对主力。它的原理就像一个天平称重:先假设最高位是1,把参考电压的一半和输入信号比,信号大就保留1、小就改成0,再一步一步去比较下一位。N位就要比较N次,所以速度受限于比较器和DAC的稳定时间。SAR的优点是结构简单、功耗低、转换时间可控,适合中等采样率和中等精度,典型如12位、采样率几百kHz到几MHz。

流水线型ADC把多级低分辨率比较器串联起来,第一级先粗比较,把剩余量传给下一级做细比较,吞吐率可以做到几百Msps,适合高速数据采集、射频直采这些场景。代价是延迟大、功耗高、电路复杂,芯片价格也贵。

Σ-Δ ADC则用极高的过采样率和噪声整形换取低位硬件下极高的有效精度,常见于称重、温度、高精度电压电流测量。它内部其实只有1位比较器,但通过大量样本累积和数字滤波,能达到20位以上有效分辨率。选型时需要明白:SAR适合通用中速采集,Σ-Δ适合低速高精度,流水线适合高速宽带。

类型优势劣势典型应用
SAR低功耗、低延迟、内置易用精度受限于RC匹配MCU内置采集、控制系统
流水线高速高带宽延迟大、功耗高无线通信、示波器
Σ-Δ高精度、噪声整形速度慢、有数字群延迟称重、仪表、音频

3.3 从SNR到ENOB:数字命名的水分与真实有效位数

ADC参数表里,SNR是躲不开的指标。理想N位ADC的量化噪声带来的最大信噪比是:

SNR = 6.02N + 1.76dB

12位ADC理想SNR约74dB,16位理想约98.1dB。但芯片厂商给的是理想值,实际因为热噪声、时钟抖动、电源干扰等因素,真实信噪比通常更低。ENOB,也就是有效位数,就是把实测SNR反推回分辨率得出的值:

ENOB = (SNR_measured - 1.76) / 6.02

假设某16位ADC实测SNR只有80dB,ENOB其实只有13位左右。所以看芯片参数时,如果你发现一个16位ADC实际有效位数只有14,别惊讶,这基本是行业常态。所有号称高分辨率的应用,最终拼的都是你在电路上能不能把这个ENOB保住。

还有一个常被忽略的点:过采样。如果信号本身带宽很窄,你用远高于奈奎斯特频率的采样率去采集,然后用数字滤波抽取,每提高一倍的过采样率,带内噪声功率能降3dB,等效分辨率提高0.5位。4倍过采样,等效位数就多1位。这个技巧在MCU内置ADC精度不够时特别管用,代价只是多耗点CPU和内存。

4. 设计一个稳定的ADC采样电路:实际计算与选型

4.1 摸清输入范围,先把分压网络算清楚

在实际项目里,ADC输入的电压往往不是MCU供电的0~3.3V,而是来自电流传感器、工业变送器或电源母线的0~10V。这时候第一步就是设计分压网络。

我们做一个具体的例子:输入范围0~10V,MCU的ADC参考电压3.3V,需要把10V映射到3.3V。分压系数就是3.3/10=0.33。我习惯用两个标准电阻:R1=6.8kΩ接输入,R2=3.3kΩ接地,实际分压系数约0.326,输入10V时输出3.26V,留了约0.04V余量,避免钳位二极管提前导通或ADC饱和。

算一下分压网络的功耗:总电阻约10.1kΩ,10V输入时电流约0.99mA,功耗约9.9mW,发热和功耗都可接受。但如果输入电压变成100V甚至几百伏,同样的思路就要改成串一个大阻值电阻,再并联放电管,这里不展开。分压网络还有个问题:ADC输入端的等效输入阻抗(很多MCU内部只有几kΩ到几十kΩ)会跟R2并联,拉低实际分压比。所以分压后的节点最好经过一级运放缓冲,或者选择R1、R2足够的低阻值,让输入阻抗影响控制在0.1%以内。

4.2 RC低通滤波与运算放大器缓冲

分压之后,接着考虑滤波。信号里通常有开关电源噪声、PWM耦合噪声、电机电刷火花干扰,这些都需要在进ADC之前做一次"物理净化"。

一阶RC低通是成本最低的方案。计算截止频率的公式是:

fc = 1 / (2πRC)

假设我想保留10kHz以内的信号,同时尽量抑制50kHz附近的开关噪声,选R=1kΩ、C=10nF,算出来fc≈15.9kHz。在50kHz时,一阶RC滤波只能衰减约10dB,说实话有点不够。想要更好效果,可以换成二阶有源滤波,或者用两级RC串联,但我更推荐在实际允许的情况下直接选更低一点的截止频率,比如R=2kΩ、C=10nF,fc≈8kHz,代价是10kHz信号会有些许衰减,需要根据信号频谱自行权衡。

还有一种常见做法是在运放后面加RC。运放缓冲器把前级的高阻抗分压网络隔离开,再向后级RC供电,这样可以同时解决阻抗失配和噪声抑制两个问题。RC的R要尽量小、C要尽量大,这样可以加大驱动电流,同时也让ADC内部的采样电容更快完成充电。很多MCU的数据手册会写明ADC采样电容的充电时间要求,如果外部驱动力不足,采样值就会偏低,这个问题非常隐蔽。

4.3 参考电压和端口保护:容易被忽略的两处细节

ADC参考电压是一切采集精度的基准。如果Vref源一直在漂,采集值就一定跟着漂,软件滤波也救不回来。所以Vref引脚务必靠近放置0.1µF和10µF的去耦电容,并且走线要短粗,不能和数字信号线平行走很远。假如你用的是内部参考,还要确认内部参考源的温度系数和噪音指标是否满足系统需求,不满足就直接外接高精度基准芯片。

再就是端口保护。以分压节点连接ADC引脚为例,万一输入意外接错到12V甚至-5V,ADC引脚会直接损坏。简单可靠的做法是在ADC引脚对VREFO和GND各接一个肖特基二极管(如BAT54S),正向压降约0.3V,过压时能把电流引到电源钳住。注意二极管的寄生电容对高频信号有影响,如果应用频率很高,保护电路反而成了阻碍,要考虑用双二极管加串联电阻折中。

我画过很多次这个电路,最后经验固化下来就是:分压电阻→缓冲运放→RC滤波→钳位保护→ADC引脚。这个链条基本上覆盖了绝大多数通用模拟采集需求,也有很好的可移植性。

5. 时钟抖动和电源噪声如何破坏转换质量:PCB布局3个关键点

5.1 时钟抖动:看不见的时间误差

很多人在设计ADC/DAC时只关心幅度上的噪声,却忽略了时间上的误差。ADC的核心动作是"在采样时钟到来的一瞬间记住电压",但如果这个瞬间本身不稳定,落在时间轴上左右摇摆,采样到的电压值就会跟着波动,这就是孔径抖动。

时钟抖动对高频信号影响特别大,因为高频信号变化剧烈,极短的时间误差就能转化为明显的电压误差。信噪比受限的近似公式是:

SNR_jitter = -20 × log10(2π × f_signal × t_jitter)

举个例子,假设采样100MHz的高频信号,时钟抖动RMS为1ps,代进公式大约是64dB,这已经比较可观了。如果把信号频率提到300MHz,同样的1ps抖动,SNR就掉到54dB左右。这意味着你辛辛苦苦选了一个高ENOB的ADC,结果时钟源抖动太大,总系统性能直接受限。

所以在PCB设计时,采样时钟的走线要特别小心:用独立的参考层做回流路径,不要跨分割,少打过孔,必要时串联一个几十欧姆的电阻来匹配阻抗、减少反射。如果能用专门的晶振或优质时钟缓冲芯片,就不要省这几块钱去用MCU自带的普通时钟输出。

5.2 电源噪声进入信号路径的两条路径

电源噪声对ADC/DAC的伤害有两条典型路径,理解了它们就知道怎么防。

第一条是参考电压耦合。DAC的输出、ADC的量化判定,本质上都是拿输入信号和参考电压比。如果模拟电源上的纹波跑到Vref上,等于参考电压自己在那里抖动,转换结果就跟着校准乱。很多MCU的Vref引脚和模拟供电引脚是同路的,纹波指标不好,ENOB自然下降。第二条是模拟输入耦合。开关电源的几十kHz到几MHz纹波会直接感应到信号线上,如果前端滤波没有压住,ADC就会把这些噪声当信号采进去。

我在设计boost升压或buck降压电路时,深有体会。这些开关电源的纹波一旦处理不好,直接影响同一块板子上ADC的采集稳定性。电源纹波不一定是ADC数据漂移的唯一原因,但它往往是最先值得怀疑的。

5.3 规避布局要点的3个PCB布局细节

这里总结我实战后固定下来的三个布局要点,尤其是混合信号PCB设计。

  1. 参考电压去耦与走线。Vref引脚旁边的去耦电容必须以最短路径回到模拟地,电容本身可以放在芯片同面、引脚正下方。Vref走线不要跟数字信号线并行,也不要穿过数字地回流路径。

  2. 模拟地和数字地单点连接。模拟部分和数字部分分别铺地,然后在一个点上汇合。不要把它们当成两块完全孤立的岛,而是像一个树根一样,在ADC芯片的某个位置单点相连。数字部分的高速信号切换电流不要流经模拟地,这样能大幅减少地弹对采样精度的影响。

  3. 时钟与敏感信号隔离。采样时钟走线、SPI/I2C总线信号线要与模拟输入走线拉开距离,不要近距离平行。时钟线如果跨过参考层的缝隙,回流电流会被迫绕行,形成巨大的地回路天线。同时,在ADC/DAC芯片下方尽量不要走数字信号线,给模拟部分留一个干净的"屏蔽罩"区域。

6. 实战中经常踩的坑:数据漂移、DMA紊乱与软件滤波

6.1 ADC数据漂移:先从硬件找根因,再用软件兜底

ADC数据漂移是我在论坛和项目里被问得最多的问题。现象往往是:电压明明是稳定的,ADC读数却在小数点后两位来回飘,或者随温度/时间慢慢变化。

排查思路一定是先硬件后软件。先用示波器打在参考电压引脚和ADC输入引脚上,看有没有50Hz工频、几百kHz的开关噪声、或者mV级的慢速波动。如果是参考电压在漂,优先检查Vref去耦电容是否足够、参考源芯片的散热和布局是否合理。如果是输入信号在跳,检查前级滤波电容是否虚焊、分压电阻是否受潮或焊接污染。

硬件查完再上软件滤波。最简单的滑动平均滤波,取最近N个样本求平均,能有效压低随机噪声,但会牺牲响应速度。中值滤波对脉冲干扰有效,但对高斯分布的随机噪声作用不大。卡尔曼滤波效果最好,但实现和调参成本也最高。我个人在工业采集里最常用的是"滑动平均+剔除粗大误差"组合,先去掉明显超出3σ的野值,再对剩下的样本做滑动平均,效果和性能的平衡不错。

6.2 DMA读取结果寄存器时最容易犯的错

用DMA搬运ADC数据是提高效率的必由之路,但也是问题高发区。

常见错误之一是个数据宽度不匹配。MCU的ADC结果是12位,如果DMA配置成字节宽度,结果寄存器的高低字节会错位,读出来的数据就完全是乱的,尤其在GD32、STM32等平台切换时经常踩坑。另一个常见错误是没有搞清楚ADC结果寄存器的对齐方式:很多MCU的12位ADC结果放在16位寄存器的高位或低位对齐,数据右移还是左移,每颗芯片都不同,务必仔细看数据手册。

还有一个隐蔽问题我遇到过好几次:DMA循环模式和ADC连续转换模式配合使用时,如果你在中断里修改ADC的采样序列,DMA缓存里的数据会与新序列错位,出现"本来该是通道0的数据跑到了通道1"这种诡异现象。解决办法是:修改采样序列前先停止DMA和ADC,配置完再重新启动,或者使用双缓冲DMA,在后台切换缓存区,保证读取过程中数据不会被打断。

6.3 用定时器触发DAC/ADC,把采样时刻焊死在时钟网格上

很多初学者用while循环里直接调用读取函数的方式采集ADC,这样采样时刻完全取决于代码执行路径,时基极其不稳定。当你需要DAC输出和ADC采样严格同步出现时,软件靠不住,必须用硬件触发。

以STM32为例,DAC模块可以由定时器6的TRGO事件触发启动。配置好定时器6的周期和自动重装载值后,每个更新事件都会产生一个DAC转换触发信号,于是DAC能按精确的时间间隔输出更新波形。同理,高级定时器配置成中心对齐PWM模式时,在计数器上溢或下溢的特定时刻会产生ADC触发信号。这样ADC的采样点可以精确落在PWM周期内的某个相位,对电机控制、电源数字控制这类对采样相位敏感的场景来说至关重要。

实际操作中还要注意触发极性:你希望在上溢还是下溢时刻采样,两者的时间差是半个PWM周期,在高频PWM下可能只有几微秒,却直接影响电流环的采样谐波含量。这类问题光靠示波器看不出来,只有分析频谱和系统控制效果时才会暴露。我现在的习惯是,凡是涉及PWM控制的采样,优先用定时器触发,绝不让采样时刻跟随软件飘移。

做模拟信号处理,真的就是把一个一个"看不见的细节"抠到位。时钟抖动的指标、参考电压的去耦、采样触发的相位、DMA的宽度对齐,这些单独拿出来都不起眼,却恰恰决定了你的系统是稳定可用还是一直在离散边缘挣扎。按照这个系列的路子,下一篇我会进一步展开Σ-Δ型ADC前端的RC滤波设计,以及像BMC这类场景里多通道电压监测的实际布局思路。在这之前,建议你把今天讲的分压、滤波、缓冲、参考电压、触发采样这几件事,先在手头的板子上逐一验证一遍,很多你以为的疑难杂症,其实底层的根子就在这里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询