ARTICLE DETAIL

资讯详情

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

用差分运放做交流信号ADC采集:电路设计到仿真详解

用差分运放做交流信号ADC采集:电路设计到仿真详解 做嵌入式这些年跟交流信号打交道是躲不掉的。无论是电机相电流采集、电网电压监测还是音频信号处理只要 MCU 需要“看”交流波形就绕不开一个核心矛盾MCU 的 ADC 只能吃 0~3.3V或 0~5V的单极性信号而交流信号天然是正负双极性摆动的。以前刚入行时图省事直接电阻分压加个偏置就把信号怼进 ADC结果小信号时波形失真、大信号时削顶还带着各种共模噪声调试起来非常痛苦。后来老老实实改用差分运放做前端调理才算是把这条路走通了。今天这篇就把这套方案从头到尾拆开讲清楚附带我在 Multisim 里的完整仿真过程和踩坑记录希望能帮你少走点弯路。1. 整体设计思路拆解为什么非要用差分运放1.1 直接采样的三个“坑”先说说最直接的方案也就是很多新手容易上手的那种——把交流信号先串联一个电容去掉直流分量再用两个电阻分压把电压抬高到 ADC 量程中点附近。比如要采 ±2.5V 的交流信号就用两个 10kΩ 电阻把 3.3V 分压成 1.65V 作为偏置然后把信号耦合进去。这个电路简单到几乎不需要动脑但实际操作中问题一堆偏置点会被信号源阻抗“拉偏”。信号源内阻不是零耦合电容和分压电阻会形成一个高通滤波器截止频率算出来可能和你预期的完全不一样。更重要的是信号源内阻会把分压点的电压拉走导致静态工作点偏移ADC 采出来的波形上下不对称。共模噪声完全没抑制。如果你的信号源和 MCU 不是共地的这在工业现场很常见比如采集远端传感器的信号地线压差会直接叠加到信号里表现出来就是波形上多了个 50Hz 的工频毛刺怎么滤波都滤不干净。带载能力差。电阻分压网络等效输出阻抗比较高而 MCU 的 ADC 采样保持电容在采样瞬间会抽取电流导致采样值偏小。尤其在 ADC 输入阻抗不够高的情况下这种误差是致命的。1.2 差分运放解决了什么差分运放差分放大器的核心价值在于两个第一它天然对共模信号不敏感只放大两个输入端的差值第二它可以把双极性信号通过电平搬移直接映射到 MCU 能接受的单极性范围。用差分运放做交流信号采集本质上是做了一个**“差分转单端 电平抬升 幅度缩放”**的信号调理电路。信号进来之后正端接信号正极负端接信号负极或者参考地运放输出的是一个以某个直流偏置为中心、幅度被缩放到 ADC 量程内的单极性信号直接进 MCU 的 ADC 引脚完全不需要担心负压。跟我们常用的同相/反相放大电路比差分结构有几个非常实际的好处输入信号和 MCU 之间是“虚短”隔离的信号源不会被 ADC 的采样电流“拽”着走负反馈深度可以精确设定增益不依赖运放的开环增益一致性非常好通过选配电阻网络可以灵活调整共模输入范围和差分增益适配不同幅度的信号。1.3 这套方案的典型应用场景电机驱动板上的相电流采样通过采样电阻把电流信号转换为差分电压再送进 MCU 算 FOC交流电压/电流计量模块从互感器二次侧取信号差分采集后做 RMS 计算音频信号电平检测音频线路输出是双极性的需要抬升到 ADC 范围内做电平指示或频谱分析电池管理系统里的绝缘检测高压侧的电压信号必须通过差分隔离采样保证安全。一句话总结只要你的信号是双极性的、信号源和 MCU 之间可能存在地电位差、或者你对采样精度有要求差分运放方案基本就是“标准答案”。2. 核心电路详解从原理图到参数计算2.1 经典差分放大电路结构先看最基础的差分放大电路也就是由单个运放加上四个电阻构成的结构信号正极 VIN 接运放同相输入端通过电阻 R1 接到输入信号同时 R2 从输出端反馈到同相输入端有的拓扑这样接信号负极 VIN- 接运放反相输入端通过 R3 接到输入信号R4 从输出端反馈到反相输入端。这里我必须强调一下常用的差分放大器拓扑其实是“同相端接 R2 到地”的版本不是把反馈接到同相端。为了避免把新人绕晕我直接给一个我实际在用的标准拓扑Multisim 里叫 Differential Amplifier 模板VIN 通过 R1 接到运放同相输入端 U同相输入端 U 通过 R2 接到一个参考电压 VREF用来做电平抬升VIN- 通过 R3 接到运放反相输入端 U-反相输入端 U- 通过 R4 接到运放输出 VOUT运放输出 VOUT 直接进 ADC。这个结构的传输函数是VOUT (R4 / R3) * (VIN - VIN-) VREF其中要求 R1 R3R2 R4才能保证共模抑制比最大化。选型时尽量用 0.1% 精度的精密电阻尤其是做高精度信号采集时电阻失配会直接劣化 CMRR。举个例子如果电阻精度只有 1%那理论上 100dB 的 CMRR 可能会被拉到 40dB 以下共模噪声问题就出来了。2.2 具体元件选型与参数计算假设我们要采集的信号是±1.5V 的交流信号MCU 的 ADC 量程是0~3.3V那么需要把信号转换成 0.15V~3.15V 的范围留出一点裕量防削顶中心偏置就是1.65V。信号峰值1.5V全摆幅 3VADC 满量程摆幅按 3.0V 算留 0.15V 上下的裕量所以增益 G 3.0 / 3.0 1偏置 VREF 1.65V。电阻选型取 R1 R3 10kΩR2 R4 10kΩ增益为 1。如果想放大 2 倍就把 R4/R3 设成 2比如 R310kΩR420kΩR2 同步改为 20kΩ且 R2 接 VREF 的那一路要通过一个电压源驱动不能用普通分压电阻直接接否则偏置会被拉偏。运放选型我推荐几个常见的型号供电范围优势适用场景MCP60021.8V~6.0V单电源、轨到轨、便宜3.3V 系统通用采集LM3583V~32V经典通用带载强5V 系统、低速信号AD86062.7V~5.5V低失调、低噪声高精度测量类应用OPA23762.3V~5.5V低偏置电流、低噪声传感器微弱信号如果是电池供电的便携设备MCP6002 这种轨到轨单电源运放是最省心的如果信号频率比较高比如几十 kHz 的电流采样要注意运放的增益带宽积GBW。MCP6002 的 GBW 只有 1MHz放大 10 倍时有效带宽只有 100kHz够用但没余量这时候我更建议用 AD8606GBW 10MHz或者做两级放大先放大后滤波。2.3 偏置电压 VREF 的两种产生方式偏置电压的干净程度直接决定 ADC 采样的精度这里有两种常见做法经验是能不用分压电阻就不用。方式一用精密基准源 IC推荐比如 TL431、REF3033 这类输出一个稳定的 1.65V 或 3.0V 基准。这个电压经过一个小电阻比如 1kΩ接到 R2再通过一个 100nF 电容对地去耦。好处是偏置电压几乎不受电源波动影响温漂也小适合对精度有要求的场景。缺点嘛多一颗芯片成本多几毛钱。方式二用运放缓冲的电阻分压网络用两个 10kΩ 电阻从 3.3V 分压得到 1.65V后面加一个运放做电压跟随器再接到 R2。这个方案的输出阻抗极低相当于一个理想电压源但多占一个运放通道。如果用的是双运放比如 MCP6002刚好一个通道做差分放大一个通道做偏置缓冲物尽其用。千万别直接把电阻分压的输出接到 R2 上。因为 R2 和 R1 会构成分压VREF 的实际值会受到信号源阻抗和运放输入端电流的影响偏置点跑偏是小事共模抑制被破坏才是大麻烦表现出来就是波形畸变、零点漂移。2.4 输入端的保护与滤波设计MCU 的 ADC 引脚是非常娇贵的过压、过流、静电都可能直接打死。所以在差分运放后面我习惯加一级 RC 低通滤波和一个钳位保护运放输出先串一个 1kΩ 电阻然后并联一个 100nF 电容到地截止频率约 1.6kHz如果信号频率高可以调小电容电阻后面再接两个二极管到 VDD 和 GND做成钳位保护也可以用 BAV99 集成双二极管确保万一运放输出异常高压不会超过 ADC 引脚的绝对最大额定值。这里有个容易忽略的点RC 滤波的电阻不能取得太大否则会跟 ADC 内部的采样开关电容形成额外的分压导致采样值系统性偏小。我的做法是 R 控制在 1kΩ 以内C 根据所需带宽来定。3. 仿真验证全流程Multisim 里的完整实操3.1 仿真文件搭建Multisim 我用的版本是 14.3新版叫 NI Multisim老版本 12 也能用操作大同小异。打开软件之后按下面的步骤搭电路放置运放菜单栏 Place - Component - 搜索 “OPAMP_5T_VIRTUAL” 或直接用 “LM358AD”后者更接近真实器件的行为仿真结果更具参考性放置电阻选 10kΩ5 个、1kΩ2 个、100nF 电容2 个信号源Place - Component - Sources - AC_POWER设置 Amplitude 为 1.5VFrequency 为 50Hz先用工频验证逻辑后续也可以改成 1kHz 正弦波验证带宽放置直流电源VCC 接 3.3VVEE 接 GND单电源供电放置参考电压源用 DC_POWER设为 1.65V接到 R2 那一端放置示波器右侧仪器栏选 Oscilloscope接运放输出。搭建完成后建议把所有电阻的 Tolerance 属性改成 0.1%否则默认的 10% 容差会让仿真出来的 VOUT 波形带上明显的直流偏置误差看起来像是电路故障其实是电阻容差导致的。3.2 仿真设置技巧Multisim 默认的仿真步长是“自动”但对于运放电路建议手动设置 Maximum time step 为 1μs否则在高频时波形会变得粗糙甚至出现“伪振荡”。具体操作Simulate - Mixed-Mode Simulation Settings - Maximum time step 填 1e-6。另外如果仿真速度特别慢可以在 Simulate - Mixed-Mode Simulation Settings 里把 “Tolerance” 从默认的 “Automatic” 改成 “Relative tolerance 0.1%”实测能提速 30% 左右精度损失基本可以忽略。3.3 仿真结果怎么看仿真跑起来后示波器上应该能看到输入信号黄色±1.5V 的正弦波中心在 0V输出信号蓝色0.15V~3.15V 的正弦波中心在 1.65V。如果输出信号不是这个形态优先检查VREF 是不是 1.65V用万用表工具实测一下节点电压电阻 R1 和 R3 是否完全相等R2 和 R4 是否完全相等运放供电是否接反V 和 V- 别搞反了LM358 的 pin4 是 VCC、pin11 是 GND双列直插时对应仿真里一般用符号表示看清楚再连。我之前遇到过一个问题输出波形中心偏了大概 300mV查了半天发现是 R1 和 R3 的实际容差不一致导致共模抑制恶化。后来把所有电阻的 Tolerance 改成 0.1% 后波形就正常了。这个坑在仿真里是“人为制造”出来的但也提醒了实际做板时电阻精度的重要性。3.4 带载与阶跃响应测试交流信号采集不只是看稳态正弦波还要关注瞬态响应。建议再做两个额外测试测试一带载能力测试。在运放输出端接一个 10kΩ 负载电阻观察输出波形幅度是否下降。如果下降明显说明运放的驱动能力偏弱轨到轨输出运放一般没这个问题或者反馈电阻取得太大比如 100kΩ 级别需要减小电阻值。测试二方波响应测试。把输入信号源从正弦波改成方波幅度 ±0.2V频率 1kHz观察输出波形上升沿有没有过冲或振铃。如果出现过冲说明电路的高频稳定性有问题可以在反馈电阻 R4 上并联一个 10pF~100pF 的小电容做相位补偿用仿真快速验证补偿效果。我在实际电路里通常习惯在 R4 两端并联一个 22pF~47pF 的电容既能限制高频增益又能改善稳定性。这个电容的取值需要在“滤波效果”和“响应速度”之间做平衡——太大了会让波形变圆太小了则高频噪声压不住。4. 硬件落地时的注意事项不仅是“照着仿真搭”仿真通过只是第一步真正把电路做出来能稳定工作还有几个硬件层面的坑要提醒。4.1 电源去耦不能省运放的电源引脚旁边必须放 100nF 陶瓷电容 10μF 电解电容的组合而且 100nF 要尽可能靠近运放的供电引脚。如果去耦不到位运放的高频电源抑制能力会急剧恶化表现出来就是输出波形上叠加了开关电源的开关纹波。这个在仿真里不容易复现但实板上极易踩坑。4.2 接地策略差分运放的地是最容易被忽视的。PCB 上模拟地AGND和数字地DGND必须单点连接而且这个点最好选在 ADC 的地引脚附近。如果模拟地和数字地大面积直接连通MCU 高速数字开关产生的噪声会通过地平面传导到运放让你采样后的数据像“心电图”一样波动。4.3 电阻选型不用追求极致但别用最便宜的很多人觉得 0.1% 精度的电阻太贵就用 1% 的厚膜电阻其实在高精度采集场景下隐患很大。厚膜电阻的温度系数通常在 ±100ppm/°C温度变化 10°C阻值就漂移 0.1%四个电阻失配后 CMRR 可能掉到 40dB 以下。预算允许的话用 ±25ppm/°C 的薄膜电阻比如 Vishay ERA 系列四个电阻用同一个批次性能会稳得多。4.4 输入保护别省如果需要接到外部端子比如电流互感器、传感器输入端一定要加 ESD 保护和过压钳位。最简单可靠的做法是输入端串联一个 1kΩ 电阻再接两个二极管到 VDD 和 GND或者用专用的 ESD 保护二极管。我在电机驱动板上吃过亏——一次静电放电直接打坏了 ADC 引脚后来所有外部接口一律加保护再没出过事。4.5 实际测量时注意探头的负载效应用示波器探头测量运放输出时有些探头方波档位有 10x 衰减如果不切换到 10x 模式探头的输入电容约 15pF~20pF会改变 RC 滤波的截止频率造成测量结果和实际信号不符。调电路时我习惯用 10x 探头并把示波器通道设置成配套的衰减比这样测出来的波形才是可靠的。5. 常见问题与排查技巧实录最后把我在设计和调试中经常遇到的问题整理成一份速查表碰到类似现象可以直接对着排查。故障现象可能原因排查方法输出波形中心偏置不是 1.65V电阻失配VREF 电压偏移用万用表测 VREF 和运放输出静态电压检查 R1/R3、R2/R4 比例输出削顶/底部削平信号幅度超过 ADC 量程范围增益设置过大用示波器测运放输出幅度减小增益或提升 VDD波形叠加高频毛刺电源去耦不良共模抑制不足检查去耦电容是否贴近电源脚确认电阻精度是否达标波形在过零处畸变运放不是轨到轨输出输出接近 GND 时非线性换轨到轨运放或把偏置点升高到 0.3V 以上采样值跳动剧烈ADC 采样保持时间不足RC 滤波带宽过窄增加 ADC 采样时间改大采样周期减小 RC 滤波电容输出有 50Hz 工频干扰地环路共模信号过大检查信号源地线是否与 MCU 地贯通用屏蔽双绞线传输信号低频波形慢慢漂移输入耦合电容偏小温漂检查耦合电容容量是否足够用低漂移运放这里面我想单独展开讲一下“输出在过零处畸变”这个问题。我们常用的 LM358 这类非轨到轨运放在输出接近地或接近电源时输出级晶体管会进入饱和区增益急剧下降甚至完全失真。如果你的偏置点是 1.65V输出范围是 0.15V~3.15V理论上没有碰到轨但如果不留裕量信号再大一点正峰值或负峰值就会“撞墙”。所以我在电路里特意把增益留了 10% 的裕量而不是按满量程算死这个小习惯帮我避免了好几次“明明仿真正常上板就失真”的尴尬。另外一个很多新手会忽略的问题是ADC 的参考电压VREF和运放的供电电压VCC必须是同一个源头。如果运放偏置用了 3.3V 供电ADC 参考却用了内部 2.5V 基准那算出来的数字量和真实电压之间的换算关系就乱了数据会整体偏差。这种情况仿真里一般不会暴露因为仿真默认都是理想电源但实板上必须统一。6. 扩展思路从单通道到多通道同步采集如果只有一路交流信号上面的电路完全够用。但实际项目里经常要同时采集三相电流、三路电压这时候就涉及多通道同步的问题。一种方案是在 MCU 端用多路 ADC 同时采样每个通道各配一套差分放大电路另一种方案是共用一套放大电路用模拟多路开关比如 CD4051切换信号源。前者的好处是真正做到同步采样相位差只有 ADC 本身的采样保持误差后者的好处是省成本、省面积但存在通道切换时间不适合高速动态信号。我做三相电机驱动时用的是第一种方案三个差分放大通道完全是镜像布局然后在软件里做了相位补偿校正。实板调下来通道间的相位差控制在微秒级完全够用了。如果你做的是电能计量这类对相位精度敏感的项目建议每路信号都配独立的差分放大通道再多花点时间做校准。写在最后的个人体会用差分运放给 MCU 设计交流信号采集电路单独看每一个知识点都不难但组合在一起就有不少细节。我最大的体会是不要迷信仿真通过就等于电路没问题。Multisim 仿真用的是理想模型很多非理想效应如电源纹波、温度漂移、器件离散性都体现不出来仿真真正的价值是帮你确认拓扑和参数的方向对不对。其次电阻精度这件事一定要较真。差分放大电路的灵魂是“对称”而对称的前提就是电阻匹配。我在项目里吃过亏四颗 1% 电阻搭出来的电路 CMRR 实测只有 35dB换成 0.1% 电阻之后直接爬到 60dB 以上这个差距在信号质量上是天壤之别。最后再分享一个小技巧调试这种电路时先用一个已知的直流电压比如 0.5V、1.0V、1.5V代替交流信号输入逐一验证放大倍数和偏置点是否准确确认无误后再切换到交流信号。这样做可以快速把“电路问题”和“信号问题”剥离开来省掉很多反复猜疑的时间。这套方案我现在基本是拿来即用也希望能帮到正被“采样负电压”困扰的朋友。如果后续有兴趣我可以再写一篇关于“如何用 MCU 对采样后的交流信号做 RMS 计算和无功功率分析”的文章那一部分同样有不少坑可以聊。
返回列表