做硬件这些年,模拟量输入电路属于那种“看着简单、做细了全是坑”的活儿。今天这篇是硬件篇系列的第九篇,我把去年调试过的一块双极性模拟量输入板卡拿出来聊聊。板卡支持 ±10V 电压输入和 ±20mA 电流输入,对应到工控现场最常见的伺服速度指令、变频器频率给定、还有各种变送器输出信号。文中所有电路参数、电阻取值、调试记录都是基于实际项目,能直接抄作业的那种。
这块电路解决的核心问题很明确:MCU 的 ADC 只能采 0~3.3V 单极性信号,而现场给的却是 ±10V 或者 ±20mA 这种双极性信号,直接分压进 ADC 肯定不行,必须做“缩放+平移”。我最终用的是单个反相加法器,一个运放同时完成增益和零点偏置,省了负电源、省了仪表放大器,调试下来精度和稳定性都够用。适合做工业控制板卡、数据采集模块、仪器仪表的硬件工程师参考,也适合刚接触模拟量采集的嵌入式开发者抄作业。
1. 模拟量输入需求与方案取舍
1.1 现场常见的模拟量信号分类
先理一下现场的模拟量信号,这对方案设计很重要。目前工业现场用得最多的四类是:0~10V 电压、±10V 电压、0~20mA 电流、4~20mA 电流。0~10V 和 4~20mA 最常见,变频器、温控表、压力变送器基本都是这两种。±10V 一般出现在伺服驱动器、运动控制卡的模拟量输出上,用来表示正反方向的速度或力矩指令。±20mA 相对少见,但欧系一些高端变送器和伺服接口会用它,本质上就是双极性电流信号,方向和大小同时编码在电流极性里。
做产品时,把 ±10V 和 ±20mA 集成到同一块板上,可以让一个硬件型号覆盖更多应用场景。现场配置方式也灵活,通过跳线或拨码开关切换量程,不用换板子。这个需求逻辑和很多厂商做“万能模拟量输入”是一个思路,只不过人家是全量程覆盖,我这边先做双极性这一档。
1.2 信号链路整体框架
整个采集链路从信号进入到最后 ADC 采样,分几个环节:输入保护、量程切换、信号调理、低通滤波、ADC。每个环节都不能省,尤其是保护电路,没有保护的话一次接线错误就可能烧掉整个采集通道。
信号链路设计如下:
端子接入 → TVS+自恢复保险丝+限流电阻 → 量程模式切换 → 反相加法器(缩放+偏置) → RC低通滤波 → MCU ADC输入保护用 TVS 管泄放瞬态浪涌,自恢复保险丝遮挡持续过流,限流电阻限制电流冲击。量程切换通过拨码开关选择不同的输入电阻,配合端子接法决定走电压通道还是电流通道。调理部分就是反相加法器,把 ±10V 或 ±20mA 对应的电压信号线性映射到 0~3.3V。RC 低通滤波放在 ADC 前面,滤掉高频噪声和混叠信号。
这个架构的好处是信号流向非常清晰,每一级职责单一,调试时出问题可以快速定位。之前我写过一版直接把分压电阻接 ADC 的方案,后来发现输入阻抗太低,信号源带载能力稍差误差就大得离谱,从此以后凡是模拟量前端一律上运放。
1.3 为什么不用专用模拟量前端芯片
市面上有很多现成的模拟量采集 AFE 芯片,比如 AD7124、ADS8688、MCP3564 这些,甚至有的内置 PGA 可编程增益放大,理论上更省事。我这次没用,原因有两个:一是库存和成本,项目里运放、电阻都是常用料,单独为一个采集卡备专用 AFE 芯片不划算;二是灵活性,专用芯片的输入量程、偏置方案都是固定的,要改成别的档位得动硬件甚至换芯片,不如自己搭电路,改两个电阻就能适配不同信号。
而且说实话,对于 ±10V、±20mA 这种准工业级别的信号,分立运放方案做到 0.1%~0.2% 精度是完全可行的,并不比专用 AFE 差多少。专用 AFE 的优势主要在更高精度、多通道同步采样和内置诊断,如果项目需要这些再考虑换方案不迟。
2. 核心调理电路:一个运放搞定双极性转单极性
2.1 反相加法器的工作原理
模拟量调理电路里最核心的部分是把双极性信号转成单极性信号。这里我用的是反相加法器,因为它在完成增益缩放的同时还能叠加偏置电压,相当于一步完成“缩放+平移”。
电路结构是这样的:输入信号 Vin 通过电阻 R1 接到运放反相端,参考电压 Vref 通过电阻 R2 也接到同一个反相端,反馈电阻 Rf 从输出端接回反相端,同相端直接接地。利用虚短虚断,反相端电位约等于 0V,由此列出电流方程:
[ \frac{V_{in}}{R1} + \frac{V_{ref}}{R2} + \frac{V_{out}}{Rf} = 0 ]
整理后得到:
[ V_{out} = -\frac{Rf}{R1}V_{in} - \frac{Rf}{R2}V_{ref} ]
注意这个式子里有个负号,输入正电压时输出会被拉低,输入负电压时输出反而升高。这里我是特意利用了这个特性:如果 Vref 接入一个负参考电压,比如 -5V,那么式子右端第二项就变成正偏置,输出表达式变为:
[ V_{out} = -\frac{Rf}{R1}V_{in} + \frac{Rf}{R2}|V_{ref}| ]
这样设计的好处很明显:采用单运放就同时完成增益控制和零点抬升,而且因为虚地结构,即使输入是 ±10V 的双极性信号,运放输入端的电压始终接近 0V,不需要运放具备很宽的输入共模范围,电源设计灵活性就大了很多。
这里要特别强调一下这个结构的妙处:反相输入端是虚地,所以不管输入信号是正还是负,运放反相端电位都稳定在 0V 附近。这意味着运放可以用单电源供电(5V 或 3.3V),不需要额外搞一组负电源去伺候输入信号。对降低电源成本和 PCB 面积帮助很大。
2.2 电压通道参数计算(±10V 输入)
电压通道的目标是把 ±10V 输入映射到 0~3.3V ADC 量程。我用的是 3.3V 供电的 MCU ADC,所以设计目标是:
- 输入 +10V 时输出 0V
- 输入 0V 时输出 1.65V(中间电平)
- 输入 -10V 时输出 3.3V
先根据输出表达式确定增益和偏置。增益部分:
[ \frac{Rf}{R1} = \frac{1.65V}{10V} = 0.165 ]
偏置部分,Vref 取 -5V,则需要:
[ \frac{Rf}{R2} \times 5V = 1.65V ]
解得:
[ \frac{Rf}{R2} = 0.33 ]
然后选标准电阻值。我取 Rf = 3.3kΩ,那么:
- R1 = 3.3k / 0.165 = 20kΩ
- R2 = 3.3k / 0.33 = 10kΩ
这三个都是 E96 系列中的标准阻值,而且精度选 0.1% 的金属膜贴片电阻,温漂控制在 ±25ppm/°C,可以满足 0.2% 以上的系统精度。校验一下输出方程:
[ V_{out} = -\frac{3.3k}{20k}V_{in} + \frac{3.3k}{10k} \times 5 = -0.165V_{in} + 1.65 ]
带几组典型值验证:Vin=+10V 时 Vout=0V;Vin=0V 时 Vout=1.65V;Vin=-10V 时 Vout=3.3V。映射关系完全符合设计要求。
这里有个容易让人困惑的点:输入 +10V 对应的是 ADC 量程的最低点 0V,不是最高点。第一次调试的时候我也差点当成毛病去查。其实只要软件里线性关系写对就行,ADC 读到的数值仍能正确还原输入电压。更讲究的做法是在输出端加一级反相器把正负关系再翻回来,但我个人认为没必要,白白多一个运放还引入额外失调误差。软件层面处理一个系数,比硬件上多一级电路可靠得多。
2.3 电流通道设计(±20mA 输入)
电流输入不能直接进运放反相端,因为虚地会把电流直接抽走,导致 I/V 转换完全错误。所以必须先让电流流过采样电阻,把电流信号转成电压信号,再做调理。
采样电阻选了 250Ω,理由有三:一是行业惯例,4~20mA 电流流过 250Ω 正好对应 1~5V 电压,很多变送器规格书直接按这个电阻推荐;二是 ±20mA 流过 250Ω 产生 ±5V 电压,这个范围对后端调理电路来说很好处理;三是功耗可控,20mA 电流在 250Ω 上的压降是 5V,功耗约 0.1W,用 2512 封装的 0.25W 精密电阻完全扛得住。
电流通过采样电阻产生的 ±5V 电压,需要经过一级跟随器隔离后再进入调理电路。为什么必须加跟随器?因为采样电阻的源阻抗只有 250Ω,如果直接接调理电阻 R1,采样电阻和 R1 会形成并联分压,导致实际进入调理电路的电压偏小。具体算一下:如果 R1 取 10k,250Ω 和 10k 并联后等效电阻约 244Ω,原本 20mA 在采样电阻上产生的 5V 电压会被分压到约 4.88V,误差将近 2.5%,这个精度损失是不可接受的。加了跟随器后,跟随器输入阻抗极高,采样电阻上的电压被完整传递到后端,分压误差基本消除。
电流通道的增益计算:±5V 输入要映射到 0~3.3V,所以需要的增益是:
[ \frac{Rf}{R1} = \frac{1.65V}{5V} = 0.33 ]
Rf 保持 3.3kΩ,则 R1 = 10kΩ。R2 保持 10kΩ,偏置不变。
校验输出方程:
[ V_{out} = -0.33V_{in} + 1.65 ]
Vin=+5V(对应 +20mA)时 Vout=0V;Vin=-5V(对应 -20mA)时 Vout=3.3V。量程同样被完整利用。
量程切换的实现:我在 PCB 上留了一组拨码开关和两路并联的输入电阻(20k 和 10k),电压模式选通 20k 支路,电流模式选通 10k 支路。切换原理就是改变 R1 的取值,从而改变增益。至于端子接法,电压信号接 V+ 与 AGND,电流信号接 I+ 与 AGND,两个端子在板上通过保护器件分别进入不同的电阻网络,逻辑清晰,现场接线不会太迷糊。
2.4 参考电压设计
反相加法器电路里,偏置精度完全取决于参考电压 Vref 的稳定性。如果 Vref 波动,零点就会跟着漂,这是整个电路误差的主要来源之一。
我这边用的 Vref 是 -5V,来源是板上的 -5V 电源轨。但这里有个坑:直接用开关电源产生的 -5V 往往带有较大的纹波和负载调整率误差,拿它做参考电压,输出零点会跟着电源波动剧烈抖动。测出来最明显的问题就是 ADC 读数在零点附近来回跳,数值能差出几十个 LSB。
常规的做法是加一级稳压,或者用精密基准芯片。我的板卡后续改版用了 TL431 搭了一个 -2.5V 基准,配合运放反相器得到 -2.5V 的稳定参考电压,效果明显比直接用电源轨好。如果项目预算允许,直接用专用的负基准芯片如 REF3425、ADR4525 也行,不过成本会高一些。
如果改用 -2.5V 参考电压,需要重新计算偏置电阻:
[ \frac{Rf}{R2} \times 2.5V = 1.65V \Rightarrow \frac{Rf}{R2} = 0.66 ]
Rf 仍取 3.3kΩ,则 R2 = 5kΩ,标准阻值 4.99kΩ,偏置电压实际算出来约 1.653V,偏差 0.2% 左右,软件校准时可以消掉。
3. 器件选型与 PCB 实现细节
3.1 运放选型
运放选得好不好,直接决定电路的失调、温漂和长期稳定性。对于这个双极性转单极性的应用场景,我重点看这几个指标:是否轨到轨输出、输入失调电压、失调电压温漂、输入偏置电流、供电电压范围。
轨到轨输出是硬性要求,因为方案目标输出范围就是 0~3.3V,如果运放输出不能到轨,满量程附近的精度会明显下降。输入失调电压也不能大,我的 ADC 量程是 3.3V,失调电压如果 7mV,折算到误差大约 0.2%,加上其他误差源容易超标。输入偏置电流主要影响电流通道的采样电阻电压,采样电阻才 250Ω,偏置电流引起的压降很小,但也要留意。
几个常用型号的对比:
| 型号 | 供电范围 | 输入失调电压 | 温漂 | 输出类型 | 适用场景 |
|---|---|---|---|---|---|
| LMV358 | 2.7V~5.5V | 1~7mV | 7uV/°C | 轨到轨 | 成本敏感、低精度 |
| MCP6002 | 1.8V~6V | 1.5mV | 2uV/°C | 轨到轨 | 通用低功耗采集 |
| OPA2188 | 4V~36V | 25uV | 0.02uV/°C | 轨到轨 | 精密仪表级 |
| AD8628 | 2.7V~5.5V | 1uV | 0.01uV/°C | 轨到轨 | 高精度、低功耗 |
我用的是 OPA2188,双运放封装,一只做跟随器,另一只做反相加法器,零漂移特性让温漂问题基本不用操心。如果成本紧张用 MCP6002 也可以,但失调电压需要软件校准补掉。要注意 LMV358 这类运放在 3.3V 单电源下输出摆幅虽然写轨到轨,实际负载较重时离电源轨还是有几十毫伏的差距,设计余量要留够。
3.2 精密电阻选择与误差分析
电阻的精度和温漂对调理电路的影响很大。R1、R2、Rf 这三个电阻决定了增益和偏置,采样电阻则决定电流转电压的精度。所有关键位置电阻统一选 0.1% 精度、±25ppm/°C 温漂的金属膜贴片电阻。
温漂的影响可以做个简单计算:假设环境温度变化 20°C,25ppm/°C 的电阻阻值变化率是:
[ 25 \times 10^{-6} \times 20 = 0.05% ]
三个参与增益的电阻都在变,实际总增益误差大约在 0.1%~0.2% 之间。再加上运放失调电压和参考电压的温漂,整个通道在 0~50°C 范围内的总误差可以控制在 0.3% 以内,满足工业上常见的 0.5% 精度要求。如果换成普通 1% 精度电阻,温漂可能到 100ppm/°C 甚至更高,温度一波动误差就会冲过 1%,这个级别做模拟量采集就不太能接受了。
采样电阻的选型要更仔细一点,因为它直接决定电流测量的换算系数。250Ω 的阻值在 E96 系列里有标准值,我选的是 0.1% 精度、±15ppm/°C 温漂的 2512 封装精密电阻,额定功率 0.25W,20mA 时实际功耗 0.1W,留了 2.5 倍余量,长时间工作不会因自热产生明显阻值漂移。
3.3 PCB 布局与布线要点
模拟量采集电路的 PCB 布局,经验就一句话:模拟信号走线尽量短、尽量粗、远离数字开关信号。具体的几个关键点我列一下。
反相加法器周围是核心区域。反馈电阻 Rf 和运放反相输入端之间的走线要短,因为这里阻抗高,拾取噪声很容易。运放反馈电容(后面并的 10nF)要靠近反馈电阻放置。反相输入端周围的铜皮最好挖空一层,或者至少不要大面积铺地铜,减少漏电通路对虚地电位的影响。
采样电阻的焊接位置要讲究。它是四端元件最好,但贴片电阻只有两个焊盘,所以开尔文连接要靠走线实现:从采样电阻两端分别引出电压采样线,不要直接从焊盘上拉很粗的线过去,而是先走一小段细线到跟随器输入,再处理功率路径。这样能最大程度避免焊盘铜箔上的压降被算进采样电压里。
电源去耦方面,运放的电源脚要放 100nF 陶瓷电容和 1uF 钽电容,两个电容都尽量靠近电源引脚。参考电压的滤波电容也放在基准芯片输出引脚附近。输入端的 TVS 管要靠近端子座放置,泄放回路的面积要小,否则浪涌电流路径太长,保护效果会打折扣。
输入走线尽量包地处理,尤其是从端子座到限流电阻这一段,两边铺地铜并打过孔,可以有效屏蔽干扰。有条件的话,把模拟区域和数字区域在 PCB 上分开布局,ADC 转换部分靠近 MCU,模拟调理部分靠近端子,中间用单点接地连起来。
4. 调试、校准与实测数据
4.1 上电前的检查事项
拿到焊好的板子别急着上电,先做几项检查。用万用表测电源对地阻抗,确认没有明显短路。检查运放供电方向,特别是有双电源的情况,正负电源接反是板子烧毁的头号原因。检查跳线和拨码开关的状态,确认量程档位和当前要测试的信号类型一致。检查极性电容方向,错一个就可能上电冒烟。
上电后用万用表测各电源轨电压是否正常。然后不接外部信号,直接测运放输出端电压。正常情况下,输出应该在 1.65V 附近。如果差得很多,先查 R2 和参考电压通路,再看运放是否虚焊。
这个零点检查其实很有用。反相加法器只要供电正常、电阻网络无误、参考电压存在,输出就应该是 1.65V 左右。这一级验证通过后,再接入实际信号才更有把握。
4.2 校准流程
硬件电路存在一定容差,系统级校准是必须的。我用的方法是最少两点校准:一个零点,一个满量程点。
零点校准:输入端接 0V(电压模式短接 V+ 与 AGND,电流模式断开 I+ 输入),记录 ADC 采样值 offset。理论上应该是满量程的一半,但实际会有几 mV 的偏差,记录下来在软件里扣除。
满量程校准:输入 +9V 电压(电压模式)或 +18mA 电流(电流模式),记录 ADC 采样值。计算实际增益和理论增益的偏差,得到一个增益校正系数。这里注意不要让输入满量程(比如 +10V 对应输出 0V),因为0V 附近运放输出接近电源地,精度反而不好,所以在量程的 90% 处取点更稳妥。
三点校准可以做分段线性化:取 0V、+5V、+9V 三个点,分别记录 ADC 值,然后分段做线性插值。对于要求更高的场合,可以做查表+插值,不过一般 0.5% 精度下两点校准就足够了。
校准系数存到 MCU 的 EEPROM 里,生产测试时每块板子跑一遍自动校准,记录一组系数。这样即使电阻有微小偏差,最终系统精度也能拉回正常范围。
4.3 实测数据参考
用高精度信号源输入标准电压,记录 ADC 原始值和软件换算后的电压值,结果如下:
| 输入电压(V) | ADC理论值(mV) | 实测ADC值(mV) | 误差(mV) |
|---|---|---|---|
| -10 | 3300 | 3297.8 | -2.2 |
| -5 | 2475 | 2474.3 | -0.7 |
| 0 | 1650 | 1651.2 | 1.2 |
| +5 | 825 | 825.9 | 0.9 |
| +10 | 0 | 1.5 | 1.5 |
从数据看,校准之后全量程误差在 ±2.2mV 以内,折合系统精度约 0.07% 满量程。这个精度在工业模拟量采集里已经算很好了。噪声方面,输出端 RC 滤波后纹波大概在 0.5mV 以内,ADC 采样值跳动在三四 LSB,完全够用。
5. 常见故障与排查方法汇总
模拟量电路调试过程中,我整理了一些典型故障和排查思路,放这里作为速查表。
| 故障现象 | 可能原因 | 排查方法 |
|---|---|---|
| 无输入信号时输出偏离 1.65V 较多 | 参考电压不准或电阻网络虚焊 | 先测参考电压,再测 R1/R2/Rf 阻值,最后查运放供电 |
| 正电压输入时输出不下降反而上升 | R1 焊接错误或跳线切换错误 | 确认增益电阻接入的是 20k 还是 10k,查反相端虚地电压是否接近 0V |
| 输出噪声大、ADC 跳动严重 | 参考电压纹波大或输入走线屏蔽不够 | 示波器测参考电压纹波,输入端短接看噪声,排查走线是否靠近开关电源 |
| 电流输入通道精度差 | 采样电阻精度不够或跟随器未起作用 | 测采样电阻两端电压是否准确,检查跟随器输出是否等于采样电压 |
| 接上长线后读数漂移 | 线缆引入共模干扰 | 输入端加共模电感或电容,走线包地,检查接地回路是否形成环 |
| 运放发烫 | 输出短路或反馈电阻焊接问题 | 断电后用万用表测运放电源对地阻抗,检查反馈网络 |
| 高速信号下输出失真 | 运放带宽不足或反馈电容过大 | 确认电路带宽需求,调整反馈电容值,必要时换更高速率运放 |
这里我再强调两个容易踩的坑。
第一个是关于反馈电阻并电容的问题。我在反馈电阻 Rf 上并联了一个 10nF 电容用来限制带宽,结果调试时发现输出出现了高频自激振荡。原因是运放的相位裕度不够,反馈电容和运放输入电容形成额外极点。解决办法是减小电容值到 1nF,或者在反馈电阻上串联一个小电阻(几十欧姆)来补偿相位裕度。这个坑在反相放大电路里特别常见。
第二个是输入端悬空的问题。电压模式下,如果输入端悬空,运放反相端会通过 R1 吸纳微小偏置电流,虚地电位会发生偏移,导致输出不在中间电平。实际项目里,我建议输入端加一个 100kΩ 的下拉电阻到 AGND,让悬空时有一个明确的电平。虽然会轻微增加输入负载,但对大多数信号源来说完全无感。
还有一个关于保护电路的经验。TVS 管虽然能泄放瞬态浪涌,但它的结电容会影响高频信号。如果输入端处理的是高速模拟量(比如伺服驱动器输出频率较高的速度指令),TVS 管的电容可能导致信号畸变。我这边信号带宽不高,所以直接用大电容 TVS 没问题。如果做高速采集,要选低电容 TVS 或者改用钳位二极管阵列。
最后分享一个小技巧:调试反相加法器电路时,用示波器探针点虚地点,也就是运放反相输入端。如果这个点的波形不是一条干净的水平线,说明虚地没有建立起来,很可能是运放没工作或者反馈网络不对。这个点看起来不起眼,却是整个电路的“锚”,抓住它排查问题快很多。
这个方案后续要做扩展也不难。想支持 0~10V 和 4~20mA 的单极性信号,把偏置电路去掉、增益按新量程重算就行,原理和网上很多 4~20mA 转 0~10V 的电路一致,只是我这里保留了双极性处理能力。想加隔离,就在调理电路和 ADC 之间插入线性隔离放大器,例如 ISO124 或者数字隔离器配合隔离电源。想加自校准,就在输入端加一个继电器切到精密基准源,上电自动跑一遍校准流程。硬件基础打好了,后面都是扩展问题。