尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

LMV321低成本电流检测电路设计:采样电阻、增益计算与MATLAB仿真

发布时间:2026/9/28 16:45:06

资讯中心
01
ARTICLE

LMV321低成本电流检测电路设计:采样电阻、增益计算与MATLAB仿真

LMV321低成本电流检测电路设计:采样电阻、增益计算与MATLAB仿真
做嵌入式硬件这几年我最常被问到的电路里“电流检测”绝对排得进前三。不管是电池供电的手持设备还是电机驱动板、电源监控模块几乎都要用到“小电流采样-运放放大-ADC读取”这条链路。而当我推荐用LMV321这类通用低压运放去搭低成本电流检测电路时很多人第一反应是“这玩意儿能行吗”。其实不仅能行只要把采样电阻和放大倍数算明白稳定性和精度完全够用成本还能压到一两块钱以内。这篇文章我就拿一个实际设计来走一遍完整流程采样电阻怎么选、放大倍数怎么推导、LMV321的边界在哪里、MATLAB仿真文件怎么写最后再分享几个调试现场踩过的坑。这套方案特别适合三类人一是正在做低功耗产品、不想为了电流检测专门加专用芯片的工程师二是刚开始接触运放电路、想搞清楚“电阻到底怎么算”的学生三是想把现有电流检测精度再抠一抠的嵌入式硬件老兵。下面直接开整。1. 方案选型为什么是LMV321采样点放在哪1.1 LMV321这颗运放凭什么合适LMV321是TI出品的一颗单通道、低功耗、轨到轨输入输出运放供电范围大概在2.2V到5.5V之间典型静态电流只有130μA左右。这几个参数放在一起基本就是为电池供电设备量身定做的。很多手持设备主控是3.3V或者3.0V供电ADC参考电压就取电源后端根本没有多余的负压源这时候就需要运放能单电源工作、能在接近电源轨的范围内输出。LMV321输出级是轨到轨理论上可以很靠近地端和电源端虽然实际上还差几毫伏到十几毫伏但已经足够用了。和专用电流检测放大器相比通用运放最大的优势是灵活。专用芯片像INA180这种内部增益是出厂定死的50倍就是50倍100倍就是100倍你没法自己调。你项目里最大电流变了采样电阻就得跟着变但采样电阻一变信号幅度又可能不合适。用LMV321做同相放大外面两颗电阻就把增益定了想改成多少倍就改多少倍哪怕后期改版只动一个电阻就行不用换芯片、不用改PCB。另一层优势是成本一颗LMV321在批量时的价格比专用电流检测放大器低不少这也是很多消费电子产品里大量使用它的原因。不过这颗运放也有自己的脾气最典型的就是失调电压。LMV321的Vos典型值大约1mV最大值可以到4.5mV左右。你可能觉得1mV毫不起眼但放大倍数一上去这个1mV会被一起放大。假设你设计增益是100倍那输出端就有100mV的直流偏移再把满量程输出电压一除误差就很可观了。这个点后面算误差预算的时候再展开但选型时心里要先有数。1.2 低边、高边和下桥三种采样位置怎么选电流检测电路结构上看起来简单核心就是把电流变成电压然后放大。但采样电阻往哪里放直接决定了整个电路的设计难度。我实际做过的项目里最常见有三类位置低边采样、高边采样以及电机控制里非常典型的“下桥电阻采样”。所谓低边采样是把采样电阻放在负载和系统地之间电流流过负载后先经过采样电阻再到地。这种做法的最大好处是运放输入端的共模电压很低基本在0V附近单电源运放很容易处理LMV321可以直接上场。而且低边采样对后端的ADC没有过高要求电路结构最简单、最容易调通。高边采样是把采样电阻放在电源正端和负载之间。这样采样电阻上的压降和系统电源的共模电压叠加在一起运放输入端可能同时顶着12V、24V甚至更高的电压。LMV321工作电压最高5.5V显然不能直接接这时就得用电阻分压、电平移位或者其他专用高边电流检测芯片。所以如果你做的是低压3.3V或者5V设备LMV321做高边是可行的只要共模电压不超过电源范围一旦系统电压超过5.5V通用低压运放方案就玩不转了。下桥电阻采样常见于电机驱动和开关电源里。采样电阻串在下桥MOSFET的源极和功率地之间PWM导通时电流从采样电阻流过PWM关断时电流走续流回路。这种做法的好处是没用高边电流检测芯片也能看电机相电流但问题在于采样波形是断续的而且采样电阻串在功率回路里对PCB布局和采样时机都有要求。后面第5部分我会专门讲这块的注意事项。1.3 先定设计要求再来反推参数任何电路设计都应该从指标倒推。我在做这个示例方案时先设定了四个设计目标最大被测电流 Imax 1AADC参考电压 Vref 3.3V满量程输出目标 Vout_max 2.8V给ADC留出10%余量防止过采样系统整体精度目标 ≤2%有了这四个指标采样电阻和增益就不再是拍脑袋定的了。后面两章就是围绕这组指标一步步做计算。这里先提个醒ADC参考电压直接取3.3V供电时3.3V本身可能是有波动的尤其是电池供电场景电池电压会随放电慢慢降低。如果你对精度有更高要求建议用独立基准源或者带内部基准的ADC否则运放放大倍数再准ADC参考一变读回来也是错的。本项目里先用3.3V固定值做设计严谨一点还得检查电源纹波和负载调整率。2. 采样电阻先算阻值再选封装2.1 阻值的第一层约束信号不能太小采样电阻的阻值选择有两个方向相反的约束阻值大采样信号强运放放大后信噪比好但功耗和发热也大阻值小发热小、压降低但信号太弱运放的失调电压、噪声都会被放大出来。先算信号侧的账。如果按Imax1A、用2mΩ采样电阻最大压降是Vsense_max Imax × Rs 1A × 0.002Ω 2mV要把这2mV放大到2.8V需要的增益是G Vout_max / Vsense_max 2.8V / 0.002V 1400倍这个增益放在单级运放上基本是不可用的。LMV321的增益带宽积只有1MHz1400倍留给闭环带宽只剩700Hz左右而且1mV失调电压放大1400倍就是1.4V直接把自己的满量程占掉一半这电路根本没法用。所以低阻值不是不行而是你得先接受高增益带来的副作用。如果把这2mV信号放大140倍到280mVADC在3.3V满量程下只能用到8.5%的量程分辨率损失太多。结论就是低边采样里采样电阻尽量往大选让运放放大倍数保持在100倍以内是比较舒服的范围。2.2 把阻值换算成功率预算用Imax1A继续算。为了保证信号够强我实际在这个例子里先选Rs0.01Ω即10mΩ。最大压降Vsense_max 1A × 0.01Ω 10mV需要的增益G 2.8V / 0.01V 280倍280倍虽然比1400倍好点但单级还是偏高。于是我再往上提采样电阻选Rs0.05Ω50mΩ。最大压降变成50mV增益变成G 2.8V / 0.05V 56倍56倍对通用运放来说很舒服。此时采样电阻功耗P Imax² × Rs 1A² × 0.05Ω 50mW50mW对0805贴片电阻来说非常轻松甚至0603也能承受。所以从散热角度完全没问题。再来一档如果项目最大电流是5A仍然用50mΩ功耗就会变成5² × 0.05 1.25W普通贴片电阻根本顶不住这时候就必须用2512大封装甚至功率电阻或者干脆把阻值降下来。所以采样电阻阻值选择其实是一个“信号幅度”和“功耗体积”的折中大电流时优先压功耗小电流时优先保信号。2.3 精度、温漂和电阻类型采样电阻阻值定了以后下一个问题是电阻自身精度。常见的贴片电阻精度有1%、0.5%、0.1%温漂性能差别也很大。普通厚膜电阻温漂可能到100ppm/°C甚至200ppm/°C而合金电阻或者精密薄膜电阻可以做到50ppm/°C以下。算一笔温漂的账如果环境变化40°C采样电阻是50ppm/°C那阻值变化就是50ppm/°C × 40°C 2000ppm 0.2%这个误差虽然不小但还在可以接受的范围内。如果换成200ppm/°C的普通贴片电阻40°C温升就是0.8%的阻值漂移这个直接进增益误差是最难补的。所以电流检测电路里采样电阻真心不建议用普通厚膜电阻最好选锰铜合金、康铜合金或贴片合金电阻。这些电阻本身温漂小通过大电流时自己发热导致的阻值变化也小。预算再高一点可以直接选四线开尔文结构的采样电阻这种电阻自带独立的采样引脚能避开大电流端子的接触电阻误差。2.4 布局里的开尔文接法采样电阻阻值小焊盘引脚和走线的电阻就不能忽略。一个普通PCB过孔和一段几十毫米的走线阻值可能在10mΩ到50mΩ之间这要是和采样电阻一个量级那采出来的电压就完全说不清了。解决办法是开尔文接法也叫四线接法。大电流从采样电阻两端主焊盘进出而采样引线单独从电阻两端的感测点上引出尽量不共享大电流路径。这样采样引线上几乎不流过电流引线上的压降可以忽略运放采到的就是采样电阻本体两端的真实压降。很多人第一次画低边采样电路直接把运放输入接在采样电阻的焊盘上就完事结果大电流路径上的压降全被一起采进去了波形乱七八糟。这个坑我早期踩过后面会再强调。3. 放大倍数计算与LMV321电路设计3.1 同相放大电路增益公式推导采样电阻两端的电压是差分信号但低边采样时其中一端直接接GND所以可以很自然地把采样信号接成单端送到运放的同相输入端。常规电路结构如下采样电阻输出端接运放同相输入IN反相输入IN-通过电阻Rg接地再通过反馈电阻Rf接到运放输出端。这个就是最经典的同相放大电路。负反馈稳定后运放输入端满足“虚短”即IN电压约等于IN-电压。设采样电压为Vsense则IN是Vsense。由于运放输入阻抗极高流入运放输入引脚的电流可以忽略所以流过Rg和Rf的电流相同。根据分压关系V- Vout × Rg / (Rg Rf)由虚短得到Vsense Vout × Rg / (Rg Rf)两边整理Vout Vsense × (1 Rf / Rg)这就是同相放大器的增益公式实际增益就是1加上反馈电阻比。比如Rf56kΩ、Rg1kΩ增益就是57倍。很多初学者会把公式记成“Rf除以Rg”最后算出来的增益和实际电路差一个“1”导致输出比预期低一点。注意这点别在这个细节上翻车。3.2 增益取值不是越大越好前面用Rs0.05Ω算出了需要的增益是56倍。那是不是增益越大越“能放大”当然不是。增益越大意味着运放的闭环带宽越小因为增益带宽积是固定的。LMV321的GBW约1MHz闭环-3dB带宽大约等于BW_closed GBW / G增益56倍时带宽约17.9kHz。对低频电流监控来说这足够如果只是监测电池放电电流几赫兹到几百赫兹就够用了。但如果要采样电机PWM波形的瞬时电流PWM频率可能是20kHz那这个带宽就不够看得降低增益或者换更高GBW的运放。增益大还有一个麻烦就是失调电压被同步放大。按LMV321典型Vos1mV算56倍增益下输出端直流偏移Vos_out 1mV × 56 56mV相对满量程2.8V这个偏移占比是56mV / 2800mV ≈ 2%也就是说即使输入电流为0ADC也能读到大约2%满量程的读数。这在很多消费类产品里勉强能接受但如果你想做1%精度这个偏移就必须处理。软件校准可以消掉它但前提是你知道这个偏移存在而不是莫名其妙地以为电路坏了。3.3 输出摆幅、负载驱动与带宽余量LMV321虽然叫轨到轨输出但“轨到轨”不是精确等于电源轨从数据手册看输出到地或者到电源的饱和压降大约在5mV到15mV量级。设计时一定不要把满量程卡在电源轨上否则ADC可能永远采不到满量程还可能出现非线性区。所以我前面设计目标里留了10%余量满量程输出只用到2.8V而不是3.3V这是从实践中来的经验。输出驱动能力也得看负载。如果ADC内部采样保持电容比较大或者输出走线很长运放直推会不够稳严重的会出现振荡或者建立时间太长。我的习惯是在运放输出到ADC之间串一个小电阻比如100Ω再对地并联一个1nF到10nF的电容组成一个低通滤波既滤掉高频噪声又给ADC提供一个低阻抗源。这个RC会影响信号带宽时间常数要算一下别随手选个100nF就把信号全滤没了。3.4 输入端偏置和RC滤波LMV321是CMOS输入输入偏置电流非常小可以认为是pA级所以不用太担心偏置电流流过采样电阻造成额外压降。但输入端串联电阻如果太大偏置电流流过它就会产生一个偏移电压。LMV321这样低偏置电流的运放倒是不怕但如果你换成某些双极型运放几十nA的偏置电流流过100kΩ电阻会产生几毫伏的误差那就不能忽略了。输入端RC滤波的作用主要是滤除高频噪声和采样开关噪声。比如PWM电机驱动环境里开关噪声可能非常高如果直接进运放放大以后全是毛刺。可以在运放同相输入端加一个RC低通R取1kΩ到10kΩC取1nF到100nF。需要平衡滤波效果和信号带宽RC截止频率不能低于你关心信号频段的最高频率不然会失真。4. MATLAB辅助设计与仿真4.1 参数计算脚本一秒钟出结果很多人做电路设计还在用Excel甚至手算其实用MATLAB写一小段脚本参数一改就能看结果省事很多。下面这段脚本就是我在这个方案里用的参数计算工具输入Imax、采样电阻、ADC参考电压它会自动算出增益、功耗、带宽、失调误差等关键数据。% Current sensing parameter calculator for LMV321 clear; clc; % User parameters Imax 1.0; % Maximum load current, A Rs 0.05; % Sensing resistor, ohm Vref 3.3; % ADC reference voltage, V headroom 0.1; % Output headroom, 10% GBW 1e6; % LMV321 gain-bandwidth product, Hz Vos 1e-3; % LMV321 typical offset voltage, V % Calculation VoutMax Vref * (1 - headroom); % target full-scale output VsenseMax Imax * Rs; % max sensing voltage G VoutMax / VsenseMax; % required gain P_Rs Imax^2 * Rs; % sensing resistor power BW GBW / G; % closed-loop bandwidth offsetErr (Vos * G) / VoutMax * 100; % offset error in % % Display fprintf(Vsense max : %.2f mV\n, VsenseMax * 1e3); fprintf(Required G : %.2f V/V\n, G); fprintf(Resistor P : %.2f mW\n, P_Rs * 1e3); fprintf(Closed BW : %.2f kHz\n, BW / 1e3); fprintf(Offset err : %.2f %% of full scale\n, offsetErr);这段脚本的思路是把设计指标和器件参数分离。你改任意一个输入值比如把Imax改成2A或者把Rs改成10mΩ脚本会立刻告诉你增益、带宽、失调误差会怎么变比在纸上反复估算快得多。顺手还可以把运行结果拷到项目记录里作为设计评审的依据。4.2 最坏情况误差分析用蒙特卡洛看风险光算一个“典型值”是不够的实际批量生产里电阻有容差、运放的失调电压有离散性我们需要知道最坏情况下的误差有多大。用MATLAB可以做一个简单的蒙特卡洛仿真模拟10000个样本假设采样电阻精度1%、温漂50ppm/°C、运放失调电压按正态分布最后输出误差分布。% Monte Carlo worst-case error analysis rng(2025); N 10000; r_tol 0.01; % resistor tolerance temp_drift 50e-6 * 40; % temperature drift over 40 degC Vos_std 1.5e-3; % offset voltage std-dev G_nominal 56; VoutMax 2.8; % random variables G_mc G_nominal * (1 (r_tol temp_drift) * randn(N, 1)); Vos_mc Vos_std * randn(N, 1); % output error in volts err_mc Vos_mc .* G_mc; err_percent err_mc / VoutMax * 100; fprintf(Offset error mean: %.2f%%\n, mean(err_percent)); fprintf(Offset error 99th percentile: %.2f%%\n, prctile(err_percent, 99));这个脚本没有模拟到所有误差源比如反馈电阻的比值失配也没加进去但已经足够说明问题如果你不做任何校准光运放失调这一项项就可能吃掉好几个百分点的精度。所以量产时要么选低Vos档的运放要么在出厂测试里做一次软件校准或者两种一起上。4.3 用Simulink搭电路模型验证如果你的项目里还要验证整个控制环路的联动不只想看静态参数可以用Simulink搭一个简化的电机电流采样模型。模型里用一个受控电流源模拟负载电流一个电阻接成采样网络再用一个增益模块代表LMV321同相放大最后接个一阶低通滤波模块模拟ADC前端的RC。改变PWM占空比输入就能看到采样电压和运放输出电压的波形同时也能观察到RC滤波造成的延迟和幅值衰减。这个模型的好处是能把真实系统的开关纹波、滤波影响直观呈现出来。比如20kHz的PWM你选1kΩ和1nF的RC时间常数为1μs截止频率约159kHz基本不影响20kHz的纹波测量但如果选1kΩ和100nF截止频率就掉到1.6kHz20kHz的PWM纹波会被大幅衰减结果看电流平均值还行看瞬时电流就会错很大。这种取舍在Simulink里几分钟就能验证不用动硬件。4.4 关于MATLAB版本和中文注释的一个小坑用MATLAB做这类仿真时很多国内工程师习惯把注释写成中文结果2023或者更早的一些版本里默认编码如果不是UTF-8新建的.m文件里的中文经常变成乱码。我也遇到过解决办法是在MATLAB主页的“预设项”里把文件编码设置成UTF-8或者干脆像我上面那样全用英文注释。更省事的方法是写完脚本后另存为UTF-8格式下次打开就不容易乱。另外MATLAB正版授权是硬性的学生朋友可以用校园版学习目的的轻量脚本其实也可以用GNU Octave它和MATLAB语法高度兼容跑我上面的脚本基本不用改拿来练手足够了。5. 实测、校准和常见问题排查5.1 一张实际测试数据表理论算得再漂亮最后还是得用万用表或者示波器验证。我按Rs0.05Ω、G≈56倍搭了一块测试板用可编程电子负载从0到1A逐点加电流ADC用万用表直接测量运放输出电压得到一组实测数据输入电流(A)理论输出(V)实测输出(V)绝对误差(mV)折合误差(%)000.02323—0.20.560.578183.2%0.41.121.139191.7%0.61.681.691110.7%0.82.242.24660.3%1.02.802.791-9-0.3%看数据可以发现零电流时输出并不是0V而是23mV这就是运放失调电压被放大后的结果。随着电流增大相对误差反而变小这说明失调电压是一个固定偏移不是增益性的比例误差。这种固定偏移很适合用软件方式校准减掉一个零点值就能解决大半问题。5.2 两点校准法对低成本电流检测方案我最推荐的校准方法是“两点线性校准”不需要昂贵的标定设备只需要一个能输出已知电流的直流源。第一步不给负载加电流记录ADC读数zero_code第二步通入一个接近满量程的已知电流I_cal记录ADC读数cal_code。然后按照两点确定一条直线得出实际电流的计算公式I offset slope × ADC_code这个斜率其实综合标定了采样电阻阻值、运放增益和ADC参考电压的乘积截距则主要来自运放失调电压。实际写入固件时用这个公式把这个系数存到EEPROM或者Flash里每一台产品出厂前做一次标定比只靠硬件精度省了不少成本。很多仪表类产品都是这么干的。这里有个经验零点校准要在系统正常上电、运放稳定几分钟之后再做。LMV321功耗低发热小但任何运放通电后芯片温度都会微微上升失调电压也随之稍微漂移。刚上电就校零可能半小时后零点又偏了几个毫伏。我自己的习惯是通电预热3到5分钟再校准虽然慢一点但稳定效果好。5.3 常见问题速查表实际项目中电流检测电路出问题其实非常共性。我把这几年遇到的和朋友问过的问题整理成一个速查表方便大家按图索骥。现象可能原因排查思路输出一直接近电源轨运放同相输入端悬空、采样电阻开路、反馈电阻虚焊先测运放输入引脚电压再测供电排除接触不良输出一直0V且不随负载变运放输入接反或虚焊、ADC引脚配置错误万用表直接测运放输出引脚确认是否运放根本没输出带电机或PWM负载读数跳动巨大采样点离功率回路太近、没有加RC滤波在运放输入端加RC低通采样引线改成开尔文接法输出信号叠加大幅毛刺PWM开关噪声通过地线或寄生电容耦合改善PCB布局采样地要单点接地避免与功率地共用走线输出自激振荡运放输出驱动容性负载过大或者反馈走线太长输出串一颗100Ω小电阻反馈电阻尽量靠近运放引脚零点偏移过大运放失调电压被放大、采样电阻两端焊锡接触引入了热电势软件校准零点改用低Vos运放检查焊接质量接上ADC后读数比空载低运放驱动能力不足ADC采样保持网络拉垮了输出运放输出到ADC之间加缓冲电阻并联电容或者用RC隔离5.4 下桥PWM采样里的特殊注意事项如果你的电路是电机控制里的下桥采样除了上面这些通用问题还要额外注意几点。首先采样电阻上的电压只在PWM导通期间存在PWM关断时负载电流走续流回路不经过采样电阻所以根本测不到。别指望它像线性负载那样输出一个平滑的电流波形。其次采样电阻放在功率地回路里同时它也承担了大电流回流路径。阻值不能选太大否则会在MOSFET源极上叠出一个很高的对地电位导致栅极驱动电压不足。比如下桥采样电阻选了0.05Ω通10A电流时就有500mV压降源极被抬到0.5V栅极驱动电压相对源极就少了0.5V余量驱动不足就可能发热或者烧管。再次采样时机很重要。PWM开通瞬间MOSFET导通会有米勒平台和振铃那个时间段测出来的电流完全不可信。正确做法是等开关稳定之后再采样很多MCU的ADC都支持PWM中心对齐触发把采样安排在PWM中心时刻能避开开关边沿的噪声。如果MCU不支持也可以在采样电路上加一个RC滤波器时间常数设为开关周期的几分之一把开关纹波平均掉。不过RC滤波会损失电流的快速变化信息做无刷电机换相判断时要特别注意。最后还有一点容易被忽略下桥采样电阻上的压降虽然小但它也是“悬浮”在功率地回路里的。采样电阻两端应该用差分走线直接连到运放输入不要让采样引线和大电流走线串在一起更不能让采样引线绕一大圈经过MCU再回到运放。我见过一个同事把采样引线走了十几厘米结果测出来的不是电阻压降而是整块板子上的地噪声折腾了一下午才发现是走线问题。结尾一个小小的量产经验如果让我给一个最重要的建议那就是采样电阻和增益参数算完之后一定不要直接开批量先焊几块板实测一遍尤其是把温度和环境电磁噪声因素考虑进去。我吃过一次亏用公式算出来好好的结果产品放到工业现场就出现读数跳变最后查下来是采样电阻开尔文接法没做好大电流走线的压降全部耦合到运放输入。后来把采样电阻的四线接法落到PCB布局规范里问题再没出现过。希望这篇文章能帮你少走这段弯路。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。