最近在看一些硬件方案讨论的时候,总能看到类似的问题:手头有一片INA333,想做一个电流采集,范围要覆盖1μA到30mA,问该换哪颗运放。我每次都忍不住多说几句——在这个跨度下,只纠结“换一颗更好的运放”基本解决不了问题,真正要面对的,是如何把量程拆开、如何选采样电阻、如何做校准,这套信号链的问题不搞定,换十颗运放也一样会翻车。
这篇内容就从INA333出发,把这个“1μA~30mA”的需求彻底拆一遍,给出我实际调试过程中验证过的三套路线和一组可以直接抄的参考电路。适合正在做低功耗设备监测、电池充放电电流记录、光电二极管宽范围测量、或者传感器小信号采集的硬件工程师。看完你会发现,真正值钱的设计不是选型列表,而是整个量程管理策略。
1. 先把需求拆明白:90dB动态范围不是单一运放能扛住的
1.1 1μA和30mA之间的差距,大到你没法“一块电阻走天下”
1μA到30mA,表面上看只是30mA/1μA=30000倍,但对数坐标下是约90dB的动态范围,相当于要让同一套前端线性识别将近五位半的电流变化。问题往往就出在这个“线性”上。
假设你用一个最常规的低边采样方案,采样电阻R_sense固定为1Ω。那么1μA电流在电阻上产生1μV压降,30mA产生30mV压降。如果你想让INA333后级ADC能稳定测到1μV,一来放大器自身失调、温漂、噪声早就把这个信号淹没了,二来30mV满量程对大部分16位ADC来说,有效位数也浪费得厉害。
如果把采样电阻加大到1kΩ,小电流确实好测了,1μA对应1mV,但30mA在这颗电阻上的压降是30V——不用想了,运放烧穿、ADC击穿、电源轨根本供不起。这就是典型的“单一固定电阻无法同时满足两端需求”。所以第一反应一定要是:这个项目必须分档,或者用对数压缩。
1.2 INA333的参数放在这个任务里,到底够不够用
先给INA333一个客观评价。它是一颗微功耗、零漂移的仪表放大器,静态电流约50μA,电源范围1.8~5.5V,单电源低边测量很合适。关键参数里,输入失调电压典型值在25μV级别,输入偏置电流典型值50pA、最大值在200pA级别,这两项对于微电流信号链特别重要。
如果我们把1μA通过10kΩ的采样电阻,在INA333输入端产生的信号是10mV,那25μV的失调大概占0.25%,零点校准之后可以做得更好。偏置电流200pA流过10kΩ,造成的误差只有2μV,基本可以忽略。所以结论是:INA333这颗放大器在前端性能上是够用的,它不是这个项目的短板。
但要注意一点:INA333的高频能力一般,增益越高带宽越低。在G=10附近带宽还能到百kHz级别,G=100以上就只剩下几十k到百kHz以内的空间了。如果是纯直流或缓慢变化的电流信号,完全没问题;如果要做高频动态电流波形,那就得换思路。这个项目定位在监测、采集、记录场景,INA333是站得住脚的。
2. 三条路线:单量程硬扛、分段换挡、对数压缩
2.1 路线一:固定采样电阻+高分辨率ADC,直觉上很美但坑很多
有人会问:能不能用一个1Ω采样电阻,配合24位Σ-Δ ADC和内部可编程增益,直接把1μV级别的信号读出来?理论上24位ADC的动态范围有130dB以上,好像够用。
但实际工程中,24位ADC的有效分辨率折损很严重。以满量程3V计算,24位LSB理论值是0.18μV,但在1kSPS采样率下,有效位数能做到17~18位已经不错了,对应有效LSB约11~22μV。也就是说,1μV级别的真实信号,和噪声、失调几乎是同一数量级,你根本分不清哪个是信号。再加上运放Vos、电阻热噪声、电源干扰、地环路,固定1Ω采样电阻想从1μA测到30mA,基本是自找麻烦。
这个路线唯一成立的条件是:你对1μA以下电流不要求精度,只看趋势,或者后续做长期平均滤波。通常我不推荐作为首选。
2.2 路线二:分段采样电阻+自动换挡,宽动态电流采集的实用解
这才是正经能落地的方案。核心思想很简单:小电流用大采样电阻,让信号尽量大;大电流用小采样电阻,让压降和功耗都受控。每档信号都放大到接近ADC满量程,动态范围问题就变成了量程管理问题。
我自己常用的三档设计是这样:
| 档位 | 采样电阻 | INA333增益 | 满量程电流 | 最小建议测量电流 | 输出灵敏度 |
|---|---|---|---|---|---|
| 小电流档 | 10kΩ | G=10 | 30μA | 1μA | 0.1V/μA |
| 中电流档 | 100Ω | G=100 | 300μA | 10μA | 10mV/μA |
| 大电流档 | 1Ω | G=100 | 30mA | 100μA | 0.1V/mA |
这里每个档位都把最大输出压到3V左右,配合3.3V ADC、16位分辨率,小电流档理论最小分辨能做到0.5nA级别,大电流档也能到0.5μA级别。档位之间有重叠区间,比如中档在15μA时输出150mV,小档在15μA时输出1.5V,两边都能测,这就给换挡切换和校准留出了余量。
2.3 路线三:对数放大器,一个看起来“偷懒”但很老练的选择
如果应用场景是看电流量级变化趋势,比如电池自放电曲线、设备待机功耗一整天的情况,分段换挡会显得繁琐。这时候可以考虑对数放大器。TI的LOG114是比较经典的一颗,动态范围大概在100pA到10mA,虽然不完全覆盖到30mA,但配合一点外围,1μA~30mA的主体范围基本都能吃下。
对数放大器的输出是输入电流的对数电压,大概每十倍程输出几百毫伏。好处是一颗芯片干完所有事,不需要换挡、不需要开关网络、不需要复杂的量程判断。代价是精度相对有限,小信号端整体误差可能到1%~3%,带宽也偏低。如果只是记录趋势、观察数量级,这个方案性价比极高。
如果你要我做决定:系统需要精确测量,选路线二;系统只需要看趋势,选路线三。
3. 分段换挡方案的具体设计,以及那个很多人会踩的开关坑
3.1 模拟开关不能想当然地串进采样电阻路径
我记得第一次做三档自动切换,图省事直接用模拟开关去切换三个采样电阻,结果大电流档完全没法用。原因很简单:普通模拟开关的导通电阻RON有5Ω左右,和1Ω的采样电阻串联,直接分掉了83%的压降,这已经不是误差问题,是电路功能失效问题。
所以这里有个硬规矩:不要用普通模拟开关切低阻值采样电阻。如果一定要全自动换挡,我建议用微型信号继电器、干簧管,或者只在10kΩ/100Ω这些相对高阻的支路上用低漏电流模拟开关,1Ω那条支路保持直通或者留给继电器。
如果你不想用继电器,另一个思路是让模拟开关切换INA333的增益电阻,而不是采样电阻。增益电阻路径上的RON相对Rg来说占比很小,可以通过校准修正,但前面提到的1μA小信号问题依然存在,所以我还是那句话:分档的关键在采样电阻,不在增益。
3.2 一个可以参考的完整信号链
电路结构上,我最常用的是低边采样,I_out从负载低端流过采样电阻网络,INA333差分测量采样电阻两端,输出接RC低通到ADC,MCU根据ADC读数自动切换量程。INA333的增益电阻Rg按档位固定,不用切换:
- 小电流档:R_sense=10kΩ,Rg=11.1kΩ,G≈10;
- 中电流档:R_sense=100Ω,Rg=1.01kΩ,G≈100;
- 大电流档:R_sense=1Ω,Rg=1.01kΩ,G≈100。
一定要在INA333的REF引脚接一个低阻抗的基准点,单向电流就接地,双向电流就接VCC/2。REF引脚不能悬空,否则输出参考点漂移,后期校准会很痛苦。
输出端加一阶RC低通,比如1kΩ串联电阻加100nF电容,截止频率约1.6kHz,能有效滤掉换挡瞬间的毛刺和开关电荷注入,同时不影响直流采集。然后在ADC采集软件里做滑动平均,效果比单纯堆硬件滤波器好得多。
3.3 换挡逻辑:滞回是必须的,不然会在临界点来回跳
自动换挡的软件逻辑不复杂,但有一个细节一定要处理好——滞回。如果上行和下行用同一个阈值,比如30μA切换,那电流在30μA附近轻微波动时,系统会反复切换量程,继电器或模拟开关来回动作,不仅增加时间开销,还会引入持续的毛刺。
我通常这样设计:上行阈值取满量程的90%,下行阈值取满量程的5%~10%。例如小电流档输出到2.8V(对应28μA)时切到中档,中档输出低于150mV(对应15μA)时再切回小档。这样档位之间形成一段重叠区,切换不会太频繁,数据连续性也更好。
上电初始化时,我建议从大电流档开始,也就是先使用1Ω采样电阻,确认电流安全后再逐级升档。如果一上来就默认小档,在未知负载的情况下可能瞬间给10kΩ电阻灌入几十mA,电阻功耗会到几瓦级别,直接过热损坏。
3.4 软件校准:每档都要单独标定,不能只标一次
分段换挡后,每一档的增益误差、失调电压都不一样,必须分别校准。我的做法是给每个量程都存两组数据:零点校准值和增益校准值。EEPROM里放一个结构体,三个量程各一份。
校准时,先在电流为零的状态下读ADC,记下offset;再接入标准恒流源,比如小档用10μA,中档用100μA,大档用10mA,读ADC后算gain。真正运行时,电流值就是(ADC读数-offset)/gain。采样电阻的温漂如果要求高,还要配合温度传感器做线性补偿。
实际项目里,我用这套方法做到整机跨档一致性误差在0.5%以内是没有问题的。如果不做校准,模拟开关RON、电阻误差、放大器失调加起来,误差可能轻松超过2%~3%,而且不同温度下还会漂。
4. 调试中遇到的典型问题与排查思路
4.1 小电流档读数跳得厉害,底噪明显偏大
这种情况十有八九不是运放的问题,而是低通带宽太宽,或者采样电阻值太大导致Johnso噪声叠加。10kΩ电阻在室温下的热噪声密度约12.9nV/√Hz,乘以小档G=10后,等效输出噪声密度约0.13μV/√Hz。如果不限制带宽,比如测量带宽10kHz,输出噪声就有13μV量级,换算成电流误差约0.13nA,在小电流档已经很可观。
解决思路分两级:硬件上在INA333输出端加强低通,把带宽压到几十Hz以内;软件上做多周期平均。如果还要求实时性,可以考虑限制采样率,用Σ-Δ ADC内置数字滤波器。
4.2 大电流档读数偏低但不规律
大电流档读数偏低,先查采样电阻的温漂和开关导通电阻。1Ω采样电阻如果用的是普通厚膜贴片,温度系数可能到几百ppm/°C,大电流下电阻自身轻微温升就足以产生明显偏差。建议换成合金电阻或金属箔电阻,温漂控制在25ppm/°C以内。
如果大电流档是通过继电器切换的,还要怀疑继电器触点电阻的稳定性。信号继电器触点电阻通常在几十mΩ级别,看似很小,但和1Ω采样电阻串联时,误差可能到几个百分点。解决办法是在软件校准里把继电器触点电阻折算进去,或者做大电流档校准时直接标定整条回路。
4.3 换挡瞬间ADC采到尖峰
这是换挡方案最常见的现象。模拟开关电荷注入或继电器触点抖动,都会在INA333输入端产生瞬态电压毛刺,经过100倍放大后非常夸张。
我用三招解决:一是换挡后延时10~50ms,等信号稳定;二是ADC采样丢弃前几次读数,只取稳定后的值;三是在INA333输出端加二阶滤波。组合下来,毛刺基本不会再影响数据。
4.4 高边采样时,共模电压把放大器压死
如果你不是低边采样,而是把采样电阻放在电源高边,那共模电压可能远高于运放供电轨。INA333的输入共模范围有限,单电源3.3V供电时,输入共模通常只能在V-附近到V+-0.1之间。高边共模超过这个范围,输出就会失真。
这个场景下,建议改用宽共模电流检测放大器,比如INA240、INA281这类高边专用芯片,或者用电阻分压加电平移位把共模压到INA333允许范围内,但分压会牺牲精度。优先还是建议做低边采样,如果负载不能浮地,再加专门的高边方案。
我把调试过程中遇到的问题整理成了速查表,方便后面直接对号入座。
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 小电流档噪声大 | 带宽太宽、电阻热噪声 | 加强低通、软件平均 |
| 大电流档读数偏低 | 开关RON、电阻温漂、触点电阻 | 换合金电阻、做整档校准 |
| 换挡瞬间毛刺 | 电荷注入/继电器抖动 | 延时采样、滤除前几次数据 |
| 输出饱和且不可控 | 采样档位切换不及时 | 检查滞回阈值和上电初始档 |
| 高边测量输出不对 | 共模超限 | 改低边或换高边专用芯片 |
5. 如果一定让我直接推荐“一颗运放”
5.1 先说明白:单颗运放解决不了整个量程
你如果非要一个芯片型号作为答复,那我的答复是:一颗运放无法替你解决90dB动态范围的分档问题,但如果你只是在固定的某一档中做前端放大,替换INA333的芯片选择还是有的。
如果追求更低失调、更低偏置电流,OPA388、AD8638都是零漂移运放,前级小信号性能很强。如果做跨阻放大器,LMP7721的输入偏置电流低到fA级别,适合测极小的电流源。但这些芯片换上去,不能替代采样电阻和量程切换设计,只是优化了信号链的噪声和失调下限。
5.2 想要跨档简单,也可以直接选用带增益切换的专用电流检测放大器
如果你不想自己搭量程切换网络,市场上也有自带增益选择的电流检测放大器,例如INA190系列、INA191系列,它们内部集成了可选的固定增益档位,配合外部采样电阻能在一定范围内扩展动态。这类方案的优势是电路简单、共模范围宽,但微安级别的低端性能依然依赖于采样电阻和噪声处理。
如果应用环境允许,我自己更倾向用INA333做前端差分放大,一路固定增益100倍,再拿普通模拟开关切换采样电阻网络。这样做的好处是放大器只负责把模拟小信号提到安全水平,量程逻辑完全由采样电阻和软件控制,出现问题也容易定位,好调试、好维护。
最后说点个人体会
这类宽动态电流采集,我做过的项目不算少,每次踩坑几乎都踩在同一类地方:不是运放选得不够高端,而是没有把采样电阻、开关网络、软件校准当成一个整体来设计。看到有人只纠结“INA333要不要换”,我就忍不住想说,先把量程切分和校准想清楚,很多问题根本轮不到换芯片来解决。1μA到30mA确实是个挑战,但只要接受“分段处理”这个事实,做起来并没有想象中那么难。