ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ADC采样前为什么必须加RC抗混叠滤波器?截止频率与元件选型全解析

ADC采样前为什么必须加RC抗混叠滤波器?截止频率与元件选型全解析 1. 为什么ADC前面必须蹲一个RC滤波器很多人画ADC采样电路的时候第一反应是信号源出来直接怼到ADC引脚上就行了尤其是测直流或者低频缓变信号的时候觉得加滤波器纯属多余。我早期也这么干过结果在一款电机电流采样的板子上栽了跟头——采样值跳动得厉害换了高精度基准源也没用后来用示波器探头往ADC输入端一搭才发现信号上叠着一层几十毫伏的高频毛刺频率大概在几兆赫兹量级正好落在开关电源的开关噪声频段上。这就是混叠的经典场景。ADC采样本质上是把连续时间信号在离散时间点上拍照如果输入信号里含有超过采样率一半的频率成分也就是奈奎斯特频率以上的分量这些高频成分不会凭空消失而是会折叠到低频段和有用的低频信号混在一起再也分不开了。你后面用数字滤波器怎么滤都没用因为混叠后的频率和真实低频信号在数字域里完全重合。举个具体的数字假设采样率是100kHz奈奎斯特频率就是50kHz。如果输入端有一个80kHz的噪声分量采样后它会折叠到100-8020kHz的位置看起来就像信号里真的有一个20kHz的成分。你拿这个数据去做FFT分析会得出完全错误的频谱结论。所以RC抗混叠滤波器的核心使命就一个在信号进入ADC之前把奈奎斯特频率以上的高频成分衰减到足够低的水平让混叠产生的误差落在可接受的范围内。它不需要把高频完全消灭RC一阶滤波器也做不到只需要把高频压到ADC量化噪声以下或者系统误差预算以内就行。这里有个常见的误解需要澄清抗混叠滤波器不是可选项而是必选项。区别只在于你用一阶RC、二阶RC还是有源滤波器。对于12位以下的ADC一阶RC通常够用对于16位以上的高精度ADC一阶RC的滚降太慢往往需要二阶甚至更高阶的方案。这个取舍后面会详细展开。另外要区分两个概念抗混叠滤波器和去混叠滤波器。前者是模拟域的前置处理必须在ADC采样之前完成后者是数字域的后处理只能处理已经混叠后的数据对真正的混叠无能为力。很多人把这两个搞混以为采样后加个数字低通就行了这是方向性错误。2. RC抗混叠滤波器的截止频率到底怎么定截止频率的选取是整个设计里最容易拍脑袋的环节。我见过有人直接抄别人的电路用1kHz也见过有人干脆用10kHz保险一点。这两种做法都有问题——截止频率定得太低有用信号被衰减定得太高抗混叠效果不够。正确的做法是从采样率和精度要求反推。2.1 从采样率反推奈奎斯特频率第一步永远是确定奈奎斯特频率f_nyquist f_sample / 2。比如你用STM32的ADC配置采样率为200kHz那奈奎斯特频率就是100kHz。所有超过100kHz的成分都是敌人需要被衰减。但截止频率不能直接设成100kHz。因为RC滤波器的滚降是渐进的一阶RC的幅频特性是-20dB/十倍频程。如果你把-3dB截止频率设在100kHz那100kHz处的衰减只有3dB远远不够。你需要让截止频率远低于奈奎斯特频率给过渡带留出足够的衰减空间。2.2 用衰减量反推截止频率具体怎么算先确定你需要的衰减量。假设你用的是12位ADC信噪比理论值约74dB有效位数大概11位左右。如果你希望混叠误差不影响最后一位那高频成分需要被衰减到大约-74dB以下。但实际工程中不需要这么苛刻通常衰减到-40dB到-60dB就够用了。一阶RC滤波器的衰减公式A(f) 1 / sqrt(1 (f/fc)^2)以dB表示A_dB(f) -20 * log10(sqrt(1 (f/fc)^2))简化后A_dB(f) ≈ -20 * log10(f/fc) (当 f fc 时)假设你需要的衰减是-40dB奈奎斯特频率是100kHz代入公式-40 -20 * log10(100k/fc) 2 log10(100k/fc) 100k/fc 100 fc 1kHz也就是说一阶RC的截止频率需要设在1kHz左右才能在100kHz处获得-40dB的衰减。这个数字可能比你直觉想的要低很多——很多人会把截止频率设在几十kHz结果在奈奎斯特频率处只有十几dB的衰减根本不够。2.3 截止频率与信号带宽的冲突问题来了如果你的有用信号带宽本身就有10kHz那把截止频率设在1kHz有用信号就被严重衰减了。这就是抗混叠滤波器的核心矛盾——截止频率要低才能抗混叠但要高才能保信号。解决这个矛盾有两条路第一条路是提高采样率。如果采样率提高到1MHz奈奎斯特频率变成500kHz那截止频率可以放宽到5kHz同样-40dB衰减对10kHz信号的影响就小很多。这也是为什么现在很多高精度ADC都推荐过采样——采样率越高抗混叠滤波器的设计越轻松。第二条路是提高滤波器阶数。二阶RC滤波器在同样截止频率下高频衰减速度是一阶的两倍-40dB/十倍频程。如果截止频率设在10kHz二阶RC在100kHz处可以获得-40dB衰减而一阶只有-20dB。代价是电路复杂度和相位延迟增加。下面这张表可以直观对比不同方案滤波器阶数滚降斜率fc10kHz时100kHz处衰减对10kHz信号影响一阶RC-20dB/dec-20dB-3dB二阶RC-40dB/dec-40dB-6dB三阶RC-60dB/dec-60dB-9dB从表里能看出来阶数越高同样截止频率下抗混叠效果越好但对有用信号的衰减也越大。实际选型时需要在两者之间找平衡点。3. 电阻和电容的取值不是随便选的确定了截止频率fc之后下一步是选R和C的具体值。公式很简单fc 1 / (2 * pi * R * C)但满足这个公式的R和C组合有无穷多组怎么选这里有几个工程约束需要同时考虑。3.1 电阻取值对信号源阻抗的影响电阻R不能太大。原因有两个一是R会和ADC输入端的等效电容形成额外的RC延迟影响采样保持电路的建立时间二是R太大会引入热噪声对于高精度ADC来说热噪声可能直接吃掉几个LSB。热噪声电压的公式是V_noise sqrt(4 * k * T * R * BW)其中k是玻尔兹曼常数1.38e-23T是绝对温度室温约300KBW是噪声带宽。假设R10kΩBW100kHz算下来噪声电压大约是4μV RMS。对于12位ADC、3.3V基准来说1个LSB约0.8mV4μV远小于1个LSB可以忽略。但如果R1MΩ噪声电压就变成40μV开始接近1个LSB的十分之一对于16位ADC来说就不可忽略了。所以经验法则是R一般取1kΩ到100kΩ之间。低于1kΩ电容值会大到不现实高于100kΩ热噪声和建立时间都会成为问题。3.2 电容取值与ADC采样保持的配合电容C也不能随便选。C太小滤波效果不稳定容易受寄生电容影响C太大会拖慢ADC采样保持电路的建立时间。这里涉及一个关键参数ADC的采样保持电容。以STM32为例ADC内部的采样保持电容大约是几pF量级。外部RC滤波器的C如果远大于这个值比如100倍以上那采样瞬间的电荷再分配对滤波器输出电压的影响就很小。但如果C和内部采样电容在同一量级每次采样都会从C上抽走一部分电荷导致电压跌落采样精度下降。一般建议外部C至少是内部采样电容的100倍以上。STM32的内部采样电容约4pF那外部C至少取400pF实际常用1nF到100nF。但C也不能太大。ADC采样保持电路需要在采样窗口内完成充电如果外部RC的时间常数太大电压还没建立稳定采样就结束了。STM32的采样时间可以配置最短的几个时钟周期对应的时间可能只有几百纳秒。如果R10kΩ、C100nF时间常数RC1ms远远不够。所以这里有个隐含约束RC时间常数必须小于ADC采样窗口时间。通常要求建立到0.5LSB以内需要约7到8个时间常数。如果采样窗口是1μs那RC时间常数不能超过125ns。结合R10kΩC就不能超过12.5pF——这又太小了和内部采样电容可比。这就是为什么实际电路中经常在RC滤波器后面再加一个缓冲器运放电压跟随器把滤波器的高输出阻抗和ADC的低输入阻抗隔离开。加了缓冲器之后RC的取值就不再受ADC采样窗口的直接约束了。3.3 一个实用的取值流程综合以上约束我通常按这个流程走根据采样率和精度要求算出截止频率fc初选R10kΩ居中值兼顾噪声和功耗计算C 1/(2pifc*R)检查C是否在1nF到1μF之间如果不在调整R重新算检查RC时间常数是否满足ADC采样窗口要求不满足则加缓冲器检查电阻热噪声是否在误差预算内举个例子fc1kHzR10kΩ算出来C15.9nF取标准值15nF或22nF。RC时间常数10kΩ*15nF150μs。如果ADC采样窗口只有1μs那必须加缓冲器。4. 一阶RC不够用的时候怎么办一阶RC滤波器结构简单、成本低、不需要供电在很多场合确实够用。但它的滚降太慢当信号带宽和奈奎斯特频率比较接近时一阶RC就力不从心了。4.1 二阶RC滤波器的两种拓扑二阶RC滤波器有两种常见结构级联型和Sallen-Key型。级联型就是把两个一阶RC首尾相连。但直接级联有个问题第二级的输入阻抗会加载第一级的输出导致实际截止频率偏移。如果两级用相同的R和C级联后的-3dB频率不是fc而是约0.64*fc。而且两级之间没有缓冲后级会从前级偷电流影响滤波特性。正确的级联方式是第一级用较小的R和较大的C第二级用较大的R和较小的C让第二级的输入阻抗远大于第一级的输出阻抗。比如第一级R1kΩ、C100nF第二级R10kΩ、C10nF。这样两级之间的加载效应可以忽略总截止频率约等于各自截止频率的几何平均。Sallen-Key型则用运放做缓冲和反馈可以实现更精确的滤波器特性包括巴特沃斯、切比雪夫等响应类型。代价是需要运放供电电路复杂度更高。对于大多数中低速ADC应用级联型二阶RC已经够用对于高速高精度场合Sallen-Key更合适。4.2 什么时候必须上二阶判断标准很简单如果一阶RC在满足信号带宽要求的前提下无法在奈奎斯特频率处提供足够的衰减就得上二阶。具体算一下假设信号带宽10kHz采样率100kHz奈奎斯特频率50kHz。要求50kHz处衰减至少-40dB。一阶RC截止频率需要设在5kHz才能在50kHz处获得-20dB衰减50k/5k1020*log10(10)20dB。但5kHz截止频率对10kHz信号衰减约-7dB太大了。二阶RC截止频率设在15kHz在50kHz处衰减约-20dB一阶部分两级级联后约-40dB。对10kHz信号衰减约-3dB每级-1.5dB可以接受。所以这个场景下二阶RC是更好的选择。4.3 二阶RC的相位延迟问题二阶RC会引入更大的相位延迟。在闭环控制系统中比如电机电流环这个延迟可能影响环路稳定性。一阶RC在截止频率处的相位延迟是-45度二阶是-90度。如果控制环的带宽接近滤波器截止频率相位裕度会被吃掉很多。我做过一个电机FOC项目电流采样用了二阶RC滤波器截止频率设在5kHz电流环带宽设了2kHz。结果发现电流环出现振荡后来把截止频率提高到10kHz才稳定下来。教训就是滤波器的相位延迟必须纳入控制系统稳定性分析不能只看幅频特性。5. 那些年我在RC抗混叠滤波器上踩过的坑5.1 电容材质选错导致非线性有一次做一款音频采集板ADC是24位的RC滤波器用了普通的X7R陶瓷电容。测试的时候发现THD总谐波失真指标怎么都达不到要求换了基准源、换了运放都没用。后来把电容换成C0G材质THD立刻好了。原因在于X7R陶瓷电容有电压系数——施加的电压不同实际容值会变化。而且这个变化是非线性的信号电压波动时容值跟着变等效于一个非线性滤波器直接引入失真。C0G电容的电压系数极小几乎可以忽略适合高精度模拟电路。这个坑的代价是一批板子已经焊好了只能全部返工换电容。从那以后我在ADC前面的RC滤波器一律用C0G或薄膜电容绝不用X7R/Y5V。5.2 忽略了PCB布局的寄生参数RC滤波器的电阻和电容在原理图上看起来是理想的但在PCB上走线有电感、焊盘有电容、地平面有阻抗。这些寄生参数在高频段会改变滤波器的实际特性。我遇到过一个案例滤波器截止频率设计在10kHz但实测在1MHz左右出现了一个谐振峰导致高频衰减反而变差。排查后发现是电容的接地走线太长引入了约20nH的寄生电感和电容形成了LC谐振。解决办法很简单电容的接地端尽量短直接打到地平面过孔电阻和电容尽量靠近ADC引脚放置滤波器下方的地平面保持完整不要被其他走线割裂。5.3 忘记考虑信号源阻抗RC滤波器的R不是孤立存在的它和信号源的输出阻抗串联。如果信号源阻抗本身就有几kΩ再加上滤波器的R总阻抗可能达到几十kΩ热噪声和建立时间都会出问题。正确做法是把信号源阻抗纳入计算。如果信号源阻抗不可忽略要么在滤波器前面加缓冲器要么把滤波器的R取小一些让信号源阻抗占主导。5.4 采样率切换时忘记重新设计滤波器有些应用需要在不同采样率之间切换比如低功耗模式下降低采样率省电。这时候如果滤波器截止频率不变低采样率下奈奎斯特频率降低原本被衰减的高频成分可能就折叠进来了。我见过一个设计正常模式采样率100kHz低功耗模式10kHz但滤波器截止频率一直保持10kHz。低功耗模式下奈奎斯特频率只有5kHz10kHz截止频率的滤波器在5kHz处几乎没有衰减混叠严重。解决办法是要么滤波器截止频率跟着采样率切换用模拟开关切换电容要么保证最低采样率下滤波器仍然有效。6. 从需求到电路的完整设计实例6.1 需求定义假设我们要设计一个振动传感器的ADC前端。传感器输出信号带宽0到5kHz幅度±2V。ADC选用16位、采样率100kHz、输入范围0到3.3V。要求混叠误差小于1个LSB。6.2 计算过程奈奎斯特频率 100kHz / 2 50kHz。16位ADC的1个LSB 3.3V / 65536 ≈ 50μV。假设高频噪声幅度为1V保守估计要衰减到50μV以下需要衰减倍率 1V / 50μV 20000即约-86dB。一阶RC在50kHz处需要-86dB衰减-86 -20 * log10(50k/fc) 4.3 log10(50k/fc) 50k/fc 20000 fc 2.5Hz截止频率2.5Hz对5kHz信号衰减太大不可行。二阶RC在50kHz处需要-86dB每阶-43dB-43 -20 * log10(50k/fc) 2.15 log10(50k/fc) 50k/fc 141 fc 355Hz355Hz截止频率对5kHz信号衰减约-23dB每阶-11.5dB还是太大。三阶RC每阶-28.7dBfc 50k / 10^(28.7/20) 50k / 27.2 1.84kHz。对5kHz信号衰减约-8.7dB每阶-2.9dB可以接受但仍有衰减。四阶RC每阶-21.5dBfc 50k / 10^(21.5/20) 50k / 11.9 4.2kHz。对5kHz信号衰减约-1.5dB每阶-0.4dB很好。但四阶RC电路复杂相位延迟大。实际工程中-86dB的衰减要求过于苛刻通常不需要这么高。如果放宽到混叠误差小于10个LSB500μV衰减要求变成-66dB。二阶RC每阶-33dBfc 50k / 10^(33/20) 50k / 44.7 1.12kHz。对5kHz信号衰减约-13dB每阶-6.5dB偏大。三阶RC每阶-22dBfc 50k / 10^(22/20) 50k / 12.6 3.97kHz。对5kHz信号衰减约-2dB每阶-0.7dB可以接受。所以最终选择三阶RC滤波器截止频率约4kHz。三阶可以用一级Sallen-Key二阶加一级RC实现或者三级RC级联加缓冲。6.3 元件取值第一级Sallen-Key二阶R1R210kΩC14.7nFC22.2nF运放用低噪声CMOS输入型。第二级RC一阶R10kΩC3.9nF。截止频率验证Sallen-Key二阶的fc ≈ 1/(2pisqrt(R1R2C1C2)) 1/(2pisqrt(10k10k4.7n2.2n)) ≈ 4.9kHz。加上第二级RC的3.9nF总截止频率约4kHz。6.4 实测验证焊好板子后用信号发生器从10Hz扫到100kHz记录输出幅度。实测-3dB点在4.2kHz50kHz处衰减约-62dB满足设计要求。用频谱分析仪看ADC采样后的数据混叠分量在噪声底以下验证通过。7. 几个容易被忽略的工程细节7.1 滤波器输出阻抗与ADC输入阻抗的匹配ADC的输入阻抗不是无穷大尤其是逐次逼近型ADC在采样瞬间输入阻抗会骤降。如果滤波器输出阻抗太高采样瞬间电压会被拉低导致采样值偏小。STM32的ADC数据手册里通常会给出最大外部输入阻抗参数比如50kΩ。如果滤波器输出阻抗超过这个值就需要加缓冲器。缓冲器用运放电压跟随器即可选低失调、低噪声、轨到轨输入输出的型号。7.2 电源噪声对滤波器的影响RC滤波器本身不产生噪声但它的性能会被电源噪声影响。如果运放供电不干净电源纹波会通过运放的电源抑制比PSRR耦合到输出。对于高精度ADC运放供电需要加LC滤波或LDO稳压。我通常会在运放供电引脚旁边放一个10μF钽电容加一个100nF陶瓷电容钽电容负责低频陶瓷电容负责高频。如果空间允许再串一个磁珠或小电感。7.3 温度漂移对截止频率的影响电阻和电容都有温度系数。普通厚膜电阻的温度系数约100ppm/°CC0G电容约30ppm/°C。在-40°C到85°C范围内截止频率可能漂移几个百分点。对于大多数应用这个漂移可以忽略但对于精密测量场合需要选低温漂元件或做温度补偿。7.4 滤波器阶数与成本的权衡每增加一阶滤波器就多一个电阻、一个电容可能还多一个运放。对于量产产品这些成本会累积。我的经验是能用一阶解决就不用二阶能用二阶解决就不用三阶。先算清楚需求再选最简单的方案。过度设计不仅增加成本还增加调试难度和故障点。8. 数字端的配合采样率、过采样与数字滤波模拟端的RC滤波器不是孤立的它需要和数字端的采样策略配合。这里有几个实用的配合技巧。8.1 过采样降低对抗混叠滤波器的要求过采样是指用远高于奈奎斯特频率的采样率采集信号然后在数字域降采样。过采样的好处是奈奎斯特频率提高了抗混叠滤波器的截止频率可以放宽设计难度降低。比如信号带宽5kHz原本用10kHz采样率奈奎斯特频率5kHz滤波器截止频率需要设在几百Hz。如果改用100kHz采样率奈奎斯特频率50kHz滤波器截止频率可以设在几kHz对5kHz信号的衰减小很多。过采样的代价是数据量增大需要数字降采样处理。但在现代MCU上这个计算量通常可以接受。STM32的ADC支持硬件过采样可以配置过采样倍数和右移位数直接输出降采样后的结果。8.2 数字滤波不能替代模拟抗混叠再强调一遍数字滤波只能处理已经采样后的数据对混叠无能为力。混叠发生在采样瞬间一旦发生就不可逆。所以模拟抗混叠滤波器必须在ADC之前数字滤波器只能在ADC之后做补充。有些应用确实可以靠过采样加数字滤波来放宽模拟滤波器的要求但模拟滤波器仍然需要存在只是截止频率可以高一些、阶数可以低一些。8.3 采样率与滤波器截止频率的联合优化实际设计中采样率和滤波器截止频率是联合优化的。提高采样率可以放宽滤波器要求但增加功耗和数据量降低采样率可以省电但滤波器要求更苛刻。需要根据系统整体需求找平衡点。我的经验法则是采样率至少是信号带宽的5到10倍这样滤波器截止频率可以设在信号带宽的1到2倍对信号衰减小同时在奈奎斯特频率处有足够衰减。9. 实测中常见的异常波形与排查思路9.1 采样值周期性跳动如果采样值以固定周期跳动首先怀疑电源噪声或开关噪声耦合。用示波器看ADC输入引脚如果看到和开关频率同步的纹波说明滤波器的截止频率太高没有把开关噪声衰减掉。解决办法是降低截止频率或增加滤波器阶数。9.2 采样值随信号幅度变化而偏移如果采样值的偏移量随输入信号幅度变化怀疑电容的电压系数问题。检查电容材质如果是X7R或Y5V换成C0G。另外也可能是运放的共模抑制比不够检查运放选型。9.3 高频信号采样后出现低频干扰这是典型的混叠症状。用信号发生器输入一个高频正弦波观察ADC采样后的频谱。如果高频信号的频率在采样后变成了一个低频分量说明抗混叠滤波器失效。检查滤波器截止频率是否足够低或者滤波器是否被意外旁路。9.4 采样值噪声底偏高如果采样值的噪声底比预期高可能是电阻热噪声、运放噪声或电源噪声。逐一排查短接ADC输入看噪声底如果仍然高说明是ADC本身或电源的问题如果短接后噪声底降低说明是前端电路的问题。然后分别检查电阻值、运放型号、电源滤波。10. 写在最后的一些个人体会RC抗混叠滤波器的设计说到底是一个在信号保真和噪声抑制之间找平衡的过程。没有万能参数也没有一劳永逸的方案。每次面对新的ADC和新的信号特性都需要重新算一遍、重新选一遍。我最大的体会是不要迷信仿真一定要实测。仿真软件里的元件是理想的PCB是理想的但实际电路里什么寄生参数都有。我养成的习惯是每块新板子回来第一件事就是用示波器和频谱分析仪看ADC输入端的实际波形确认滤波器工作正常再开始调软件。另外留调试余量很重要。滤波器设计时电阻电容不要选太极限的值留出可以并联或替换的空间。比如电容焊盘可以兼容两个封装方便后期调整容值。这个小小的预留在调试阶段能省下大量飞线的时间。最后文档记录不能省。每个滤波器的截止频率、阶数、元件值、实测结果都记在项目文档里。下次遇到类似需求可以直接参考不用从头算起。这些积累才是一个硬件工程师真正的经验财富。
返回列表