用LM339搭建电池电压监测电路:欠压报警与充满指示完整方案

发布时间:2026/9/28 23:06:58
用LM339搭建电池电压监测电路:欠压报警与充满指示完整方案 做电池供电项目的时候我发现自己反复在同一个需求上卡壳——要实时知道电池电压现在处于什么状态比如低于多少伏就该报警、充到多少伏算充满。手里主控的ADC通道本来就紧张又不想为了一路电压检测单独加一颗ADC芯片后来翻出几片LM339搭了一个电池电压监测电路四个比较器只用两路同时完成了欠压报警和充满指示两个判断逻辑清楚、成本也低实测下来稳定可靠。这篇把从方案选型、阈值计算、电路搭建到用AD绘制和调试实测的完整过程记录下来给正在调电压告警的朋友一个能直接抄的参考。1. 方案选型为什么选LM339而不是ADC或专用检测芯片1.1 三套方案对比LM339赢在灵活性做电池电压监测常规思路无非三种单片机ADC采集、专用电压检测芯片、比较器电路。单片机ADC要先分压、再软件滤波、还要写校准逻辑问题是ADC通道不多时就得排队而且主控跑飞或者程序卡死时硬件保护逻辑也跟着失效。专用电压检测芯片像复位IC、电池电量计精度确实好但阈值大多是固定的或要靠外部电阻微调调整一次就要重新选型备货还麻烦。LM339这类电压比较器的路子就比较野它不依赖软件阈值由外部电阻决定想设3.0V就设3.0V想改成3.2V换两颗电阻就行。响应速度微秒级比ADC快了好几个数量级还能直接用输出驱动LED或三极管不需要额外的电平转换。缺点是要自己算电阻、自己搭滞回本篇文章就是来解决这个“自己搭”的部分。1.2 看懂LM339的开漏输出和引脚后面才不会翻车LM339是四路独立电压比较器DIP-14封装工作电压范围2V到36V单电源双电源都能用。对电池监测这种场景最关键的三个特性开漏输出输出端是集电极开路结构只能拉低不能主动拉高。要在输出端和电源之间接一个上拉电阻输出高电平才有意义。这个设计也让它能直接灌电流驱动LED低电平时LED亮很多告警电路都用这个特性。输入偏置电流小典型值只有25nA左右意味着输入端几乎不吸取电流可以用大电阻分压而不用担心影响阈值。输入失调电压典型值约2mV虽然是电压比较器但不要把精度想成仪表放大器阈值点有正负几毫伏的偏差很正常设计时要留余量。再看引脚具体型号不同封装会有差异我以最常见的DIP-14为例1脚是OUT22脚是OUT13脚VCC12脚GND4脚IN1-5脚IN16脚IN2-7脚IN28脚IN3-9脚IN310脚OUT311脚OUT413脚IN4-14脚IN4。使用前先把引脚表打出来对照我第一次用的时候把IN和IN-接反结果阈值逻辑完全反过来折腾了半小时才想到查接线。2. 电压阈值设计用1%电阻把3.0V和4.2V算得明明白白2.1 整体架构一条采样网络两个独立比较器我的监测对象是单节锂电池电压范围3.0V到4.2V目标有两个低压报警电池电压低于3.0V时点亮红色LED提示该充电了。充满指示充电时电池电压达到4.2V左右点亮绿色LED提示充满。整体结构是电池电压经过同一组分压电阻后送到两个LM339比较器的输入端。一个比较器判断“是否过低”另一个判断“是否过高”。参考电压用一颗TL431产生再加电阻分压得到各自需要的阈值参考。这里有个很容易踩的坑参考电压不能用被监测电池直接分压。如果供电电压就是电池电压分压得到的参考电压和采样电压同比例下降比较器永远比较不出结果。所以我在系统里用了一路稳压后的5V给LM339和TL431供电电池电压只是作为被测量经过分压送进来这样参考电压才稳定。2.2 采样分压比计算让4.2V刚好等于2.5V先确定采样分压网络。TL431输出2.5V基准我希望电池4.2V时采样电压恰好等于2.5V这样高压比较器可以直接和2.5V基准比较省一组分压电阻。分压比需要满足V采样 4.2V × [R2 / (R1R2)] 2.5V所以R2 / (R1R2) 2.5 / 4.2 ≈ 0.595取R110kΩ则R2 14.7kΩE96系列标准电阻1%精度有货。实际分压比是14.7 / (10 14.7) ≈ 0.59514.2V时采样电压约2.4996V几乎就是2.5V。再看低压阈值电池3.0V时采样电压3.0V × 0.5951 ≈ 1.785V所以低压比较器的参考电压要设成1.785V。这个参考可以从2.5V基准分压得到Vref_low 2.5V × [R6 / (R5 R6)] 1.785V算出来R5与R6的比例约2:5取R52kΩ、R65kΩ参考电压正好约1.786V满足要求。这里提醒一下电阻精度直接影响阈值精度采样电阻和分压电阻全部用1%金属膜电阻便宜的5%碳膜电阻温度系数大实测阈值能偏出上百毫伏。买电阻时直接搜“E96 14.7k 1%”几毛钱一盘。2.3 滞回窗口设计1M反馈电阻解决了临界抖动直接拿比较器比较阈值有一个非常恶心的现象电池电压在阈值附近慢慢变化时输出会快速抖动LED忽亮忽灭看着像接触不良实际上是比较器在临界点反复翻转。解决办法是加正反馈电阻形成滞回比较器也叫迟滞比较器。简单说让“电压从高降到低触发报警”的阈值和“电压从低升到高解除报警”的阈值之间留一个窗口只有越过窗口才会翻转从根本上屏蔽噪声引起的抖动。正反馈电阻接法从输出端跨接到同相输入端。LM339输出低电平约0.2V高电平被上拉到5V。滞回窗口大小估算公式Vhys ≈ (VOH - VOL) × R源 / (R源 Rf)其中R源是采样网络的等效源阻抗约等于R1和R2并联大概6kΩ。如果取Rf1MΩ可得Vhys ≈ 5 × 6 / (6 1000) ≈ 0.03V 30mV换算到电池电压就是30mV除以分压比0.595约50mV。也就是说电池电压降到3.0V触发报警后要回升到约3.05V才会解除这几十毫伏的窗口足够覆盖绝大部分纹波和噪声。实测中如果发现还在抖动把1M改成470kΩ滞回窗口会扩大到约100mV如果觉得阈值被拖得不准就往大了调比如2MΩ。这个电阻就是用来调整“手感”的不必过于纠结。3. 完整电路连接清单照着接线就能复现3.1 元件清单本节是完整的可复现电路图。我以比较器1完成低压报警、比较器2完成充满指示大家参考元件参数如下编号元件参数/型号数量用途U1LM339DIP-14或SOP-141四通道电压比较器U2TL431TO-9212.5V基准电压源R1电阻10kΩ 1%1采样网络串联臂R2电阻14.7kΩ 1%1采样网络并联臂R3电阻1kΩ1TL431限流工作电流约2.5mAR4电阻10kΩ2比较器输出上拉R5电阻2kΩ 1%1低压参考分压上臂R6电阻5kΩ 1%1低压参考分压下臂Rf1电阻1MΩ1低压比较器滞回反馈Rf2电阻1MΩ1高压比较器滞回反馈R7、R8电阻470Ω2LED限流LED1红色LED通用1低压报警指示LED2绿色LED通用1充满指示C1陶瓷电容0.1uF1电源去耦VCC稳压电源5V1系统供电可由电池经稳压器得到VBAT被监测电池3.0V-4.2V1监测对象3.2 网络连接明细TL431基准电路R3一端接5V另一端接TL431的阴极K阳极A接地TL431的参考端R与阴极K短接。这样K点输出稳定的2.5V。采样分压R1一端接VBAT另一端接采样点VsenseR2接在Vsense与GND之间。低压比较器比较器1对应LM339的OUT1/Pin2、IN1-/Pin4、IN1/Pin5Vsense接IN1IN1-接低压参考点低压参考点来自2.5V经R5、R6分压的中点OUT1接10k上拉到5V同时接470Ω电阻串联红色LED到5V也就是LED阳极接5V阴极经470Ω接OUT1Rf1从OUT1跨接回IN1。高压比较器比较器2对应OUT2/Pin1、IN2-/Pin6、IN2/Pin7Vsense接IN2-IN2直接接TL431的2.5V输出OUT2接10k上拉同时接470Ω电阻串联绿色LED到5VRf2从OUT2跨接回IN2。去耦电容C1接在LM339的VCCPin3与GNDPin12之间尽量靠近芯片。未使用的两个比较器输入端不能悬空否则输出可能振荡、导致整片电流异常。稳妥做法是把剩下两路比较器的正相和反相输入端都接地输出悬空即可。4. 用Altium Designer画LM339电路时的三个布局细节4.1 原理图阶段引脚编号别搞混在AD里画LM339的时候库符号通常是四路独立的比较器图形放置时需要注意每路对应的封装引脚。原理图阶段最容易错的不是比较器符号而是TL431封装引脚顺序。TO-92封装从正面看从左到右一般是阴极K、阳极A、参考端R不同厂家的引脚排列可能不同放元件前先打开数据手册确认一遍。还有一个建议把Vsense网络、2.5V基准网络、3.0V参考网络分别用不同颜色的网络标签标注检查时一目了然。我一开始所有信号都叫NetLabel1、NetLabel2画到后面自己都分不清哪个接哪路。4.2 PCB布局阶段模拟信号要远离开关节点如果只搭面包板或洞洞板这一步可以跳过。但既然要打样有三个方面值得留意去耦电容放在LM339电源脚旁边距离不超过3mm走线先过电容再到VCC引脚电源纹波对阈值的影响能压到最低。采样分压电阻R1和R2放在比较器输入引脚附近尽量缩短从分压点到IN引脚的走线长度减少拾取噪声。电池电压的输入走线可以用铺铜加粗降低线阻。反馈电阻Rf不能离输入端太远。滞回比较器靠的是输出对输入的反馈走线长了会引入寄生电容可能导致翻转沿变慢甚至自激。DRC检查时重点看未连接引脚和单端网络LM339这种四路比较器漏接一路非常常见。5. 面包板调试与实测数据阈值偏了先查这两个地方5.1 三步递进式调试顺序调这个电路我推荐从后往前调不然出了问题很难定位。第一步先不接比较器单独给TL431通电量输出是否为2.50V再量低压参考点是否为1.786V左右。参考电压不对后面全是白调。第二步接上采样网络用可调电源代替电池分别设定3.0V、4.2V量Vsense点的电压验证分压比。3.0V时应该约1.786V4.2V时约2.499V。如果差很多优先怀疑电阻值选错万用表直接量电阻两头确认。第三步把LM339接进电路两路LED先不上用示波器或万用表看输出电平。从3.5V开始慢慢调低可调电源电压监视红色LED对应的输出脚降到阈值时输出应该从高跳到低。再把电压缓慢升高观察是否在比阈值高约50mV的位置跳回高。确认逻辑正确后再焊LED用电流档确认LED电流在安全范围。5.2 实测记录下面是我用可调电源模拟电池电压得到的一组数据VCC5.01V可调电源电压Vsense测量值低压报警LED充满指示LED4.30V2.559V灭亮4.20V2.500V灭亮4.10V2.442V灭灭滞回保持中3.50V2.083V灭灭3.10V1.841V灭灭2.98V1.774V亮灭2.80V1.666V亮灭注意4.10V时充满LED还是亮的这就是滞回的作用4.2V触发充满指示后要降到比触发点低大约50mV才会熄灭。低压报警侧同理2.98V开始亮要回升到3.04V左右才灭。如果你实测发现阈值和计算的差异超过100mV不要急着怀疑比较器先看两个地方一是TL431的负载电流是否足够R3取太大时TL431工作电流不到1mA基准会飘二是分压电阻精度5%电阻温漂一上来阈值跑偏很正常。把这两处查完90%的问题都能解决。6. 常见问题排查与扩展玩法从两路阈值到四路电量指示6.1 典型故障现象与解决办法我把实际调试中遇到的几个问题整理成表格方便遇到时快速对照。现象可能原因检查与解决LED完全不亮开漏输出没加上拉LED极性接反比较器输出始终为高先确认输出端有10k上拉再测LED两端电压最后用导线直接把LED对地短接确认LED本身没问题输出一直为高IN和IN-接反未使用比较器输入悬空导致共用干扰采样网络断线对照引脚表逐脚量电压把不用的比较器输入全部接地输出一直为低上拉电阻没接开漏输出无法拉高比较器供电没接检查上拉检查VCC引脚电压阈值比计算值偏大分压电阻精度不足TL431基准电流不够换1%电阻减小R3确保TL431工作电流大于1mA阈值来回抖动滞回电阻太大采样线过长拾取噪声示波器探头地线太长减小Rf缩短走线加0.1uF电容在Vsense对地触发了但LED很暗限流电阻太大VCC电压偏低输出饱和压降过大470Ω换成330Ω提高供电电压检查灌电流是否超过LM339最大允许值6.2 从两路阈值到四路电量指示和MCU联动LM339有四路比较器两路用来做低压报警和充满指示剩下两路还能扩展不同阈值做成四段电量条。例如再设3.3V、3.6V两个采样参考配合原来的3.0V和4.2V就可以驱动四个LED显示大致电量电路思路完全一样多加两组分压电阻的事。如果想把告警信号送给单片机注意LM339输出高电平等于上拉电阻接的那个电压。上拉到3.3V就可以和3.3V单板机直连上拉到5V就需要加电平转换或串接电阻。输出端建议接一个10k上拉后到MCU的GPIO同时开启GPIO内部上拉也能凑合用但外部上拉更稳。和LM393的关系也说一句LM393是双通道版本8脚封装电气特性和LM339几乎一致只是通道数量减半。如果你只做一路阈值判断选LM393体积更小像我这个又低压又高压的场景LM339一片刚好还能留两路备用。6.3 最后说点实际体会这电路看起来简单真正调通还是有几个地方需要注意。TL431的地和比较器的地一定要直接汇到一个点模拟电路地线布不好再好的比较器也会被噪声干扰。还有这个滞回电阻第一次做的时候直接省了结果LED在阈值附近跟呼吸灯一样闪当时还以为是电池接触不良后来才知道是临界抖动。如果让我重新设计这个模块采样电阻附近会预留一个电位器位批量生产时阈值微调就不用改物料了。LM339虽然老但胜在灵活可靠只要把参考源和滞回算清楚它就是做电压监测顺手又省心的方案。