ARTICLE DETAIL

资讯详情

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

LM339电压比较器原理与Multisim仿真实战解析

LM339电压比较器原理与Multisim仿真实战解析 做硬件这些年我最常对新人说的一句话就是别小看一颗四块钱的芯片。LM339就是这样一颗芯片它不像单片机那样需要烧程序也不像运放那样讲究环路补偿但你在电池电量检测、过压欠压保护、信号整形、窗口报警电路里几乎都能看到它的影子。可以说凡是需要判断电压高低的地方LM339就是最省事、最皮实的选择之一。这篇文章我不打算只是把数据手册翻译一遍。我要做的是把LM339从原理到典型电路再到Multisim里从零搭建仿真、跑出波形、排查报错的完整过程走一遍。内容适合刚接触电压比较器的学生、做电源和电池保护项目的工程师以及准备电子竞赛需要快速搭电路验证逻辑的选手。1. LM339芯片本身四路比较器、开漏输出和那些容易被忽略的细节1.1 芯片内部到底装了什么LM339的内部集成了四个独立的电压比较器所以它也被称为四路差动比较器。每一路比较器都有两个输入端同相输入端和反相输入端-以及一个输出端。它的工作原理用一句话概括就是当同相输入端电压高于反相输入端时输出呈现高阻态由外部上拉电阻拉高当同相输入端电压低于反相输入端时输出被拉低到接近地电位饱和导通。这里有个关键点LM339的输出端是三极管集电极开路结构也就是常说的开漏输出Open Collector。这意味着芯片本身不能主动输出高电平它只能把输出端拉低或者释放输出端让它悬空。要让输出真正变成高电平必须在输出端和电源之间接一个上拉电阻。这是决定整个电路能否正常工作的核心细节。很多人第一次用LM339把输出直接接LED到电源正极发现LED永远不亮或者反过来永远亮其实就是没搞懂开漏输出的特性。打个比方开漏输出就像一个开关一端接地另一端是你的输出引脚。开关闭合引脚被拉到地开关断开引脚什么都不接。你想让引脚变成3.3V或者5V必须自己在外面接一个电阻到对应的电源上。这个在外面接电阻的动作就是上拉。还有一个值得注意的结构细节LM339的供电范围非常宽支持单电源2V到36V也支持双电源供电比如±1V到±18V。这个特性让它在工业控制、汽车电子这些供电环境不稳定的场合特别吃香。而且它的静态功耗很低典型工作电流在0.8mA左右对电池供电的设备很友好。1.2 开漏输出的三个好处以及上拉电阻怎么选既然开漏输出像开关那它有什么好处我总结三点。第一不同电平系统之间的转换非常方便。比如你的比较器用12V供电但后面的单片机是3.3V逻辑你只需要把上拉电阻接到3.3V输出高电平就是3.3V完全兼容单片机的GPIO。这在混合电压系统里是个巨大的便利省去了额外的电平转换芯片。第二多个输出端可以直接并联实现线与逻辑。因为每个输出都只能拉低或释放所以只要任何一个比较器输出低电平公共节点就是低电平。这个特性在窗口比较器、多路保护信号汇聚的场景里特别好用不需要额外的逻辑门电路。第三输出灌电流能力相对明确。LM339的输出级在低电平时可以灌入约16mA的电流具体看数据手册典型值在6mA到16mA之间足够驱动LED指示灯或者光耦。但要注意它拉电流的能力是零高电平全靠上拉电阻所以上拉电阻太小会让高电平输出驱动能力变弱。那么上拉电阻到底选多大这是新人最爱问的问题。我的经验是分两种情况驱动LED指示灯上拉电阻取值1kΩ到4.7kΩ之间。同时LED串接限流电阻通常330Ω到1kΩ接在输出和地之间。此时比较器输出低电平时LED点亮电流由灌入路径提供。驱动逻辑电平输入上拉电阻取4.7kΩ到10kΩ即可。这个范围兼顾了功耗和速度。电阻太大输出上升沿会变慢因为寄生电容充电时间变长电阻太小静态功耗变大而且低电平灌电流可能超出上限。我个人的惯例5V逻辑场景直接用4.7kΩ12V场景用10kΩ基本不会出问题。如果是高速信号整形应用比如把正弦波变成方波给单片机计数上拉电阻建议取1kΩ到2.2kΩ同时输出端加一个小电容比如10pF到47pF滤除毛刺。1.3 几个必须背下来的关键参数做设计不能只看原理参数也得心里有数。LM339的关键参数我整理了一个速查表参数典型值说明供电电压2V~36V单电源双电源时最低±1V输入偏置电流25nA用于计算分压电阻精度输入失调电压2mV典型高精度应用需注意共模输入电压范围0V ~ Vcc-1.5V输入端不能超过这个范围响应时间约1.3μs从输入变化到输出翻转的延迟低电平输出饱和压降约0.1V~0.4V灌电流越大压降越大静态工作电流0.8mA典型四路全部工作时这里最容易被忽略的是共模输入电压范围。LM339的输入端允许低到地电位0V这是它的一个优点但高电平只能到Vcc-1.5V左右。如果你给5V供电输入电压超过3.5V比较器可能工作异常。这个特性决定了你在设计分压采样电路时分压后的电压不能太接近电源电压否则结果不可靠。另外输入偏置电流25nA这个数看着很小但如果你用几兆欧的大电阻做分压器25nA在1MΩ上产生的压降就有25mV可能会超过失调电压导致比较阈值不准。所以分压网络的总阻抗不要超过几百千欧这是一个实用经验。2. 从原理图到实物三种最常用的LM339电路设计与计算全过程2.1 基础电平比较器做一个电池欠压报警最基础的用法就是把一个输入信号和参考电压比较。我在项目里最常做的例子是电池欠压报警。假设我们有一节12V铅酸电池希望当电压降到10.5V以下时点亮报警LED。第一步是设计参考电压。LM339供电直接用12V电池串一个7809稳压到9V然后用电阻分压产生参考电压。我取R110kΩ接到9VR210kΩ接地中间节点作为参考电压那是4.5V。这个4.5V连接到比较器的反相输入端-。第二步是采样电压。电池电压12V经过R320kΩ和R410kΩ分压分压后是4V。这个4V连接到同相输入端。此时同相端4V小于反相端4.5V比较器输出低电平——注意这个逻辑反了我们应该让欠压时报警所以正确的接法是采样电压接到反相端参考电压接到同相端。调整一下参考电压4.5V接同相端采样电压接反相端。当电池电压正常12V时采样电压4V低于参考4.5V输出高电平当电池电压降到10.5V时采样分压后的电压为10.5 * (10/(2010)) 3.5V还是低于4.5V输出仍是高电平报警没触发。问题出在哪分压系数选的不对。我们需要让10.5V对应分压后接近4.5V这样才能形成比较翻转。重新算一下设电池电压为Vbat分压系数为k则采样电压 Vbat * k。我们希望Vbat10.5V时采样电压约等于4.5V得到k 4.5/10.5 ≈ 0.4286。取R312kΩ、R49kΩ分压系数k 9/(129) 0.4286刚好满足。此时正常12V电压采样为12*0.42865.14V高于参考4.5V比较器输出低电平LED灭电压掉到10.5V时采样为4.5V比较器翻转输出高电平LED亮。这里有个细节输出高电平时LED怎么接因为开漏输出高电平靠上拉我直接采用输出低电平点亮LED的思路LED正极接12V负极串限流电阻到比较器输出端。正常时输出低电平LED点亮但我需要的逻辑是欠压报警所以正常时应让LED灭。调整一下逻辑我可以在后面加一个PNP三极管反转或者直接用两只LED做正常/报警指示。实际项目中我一般用互补输出方式这里先不展开后面仿真部分我会用更直观的方式演示。2.2 迟滞比较器解决临界点抖动问题的关键电路直接使用基础比较器会有一个很头疼的问题当输入信号在参考电压附近缓慢变化时输出会在高低电平之间来回跳动产生振铃。比如热敏电阻温度报警温度在阈值附近波动蜂鸣器就会反复通断很烦人。解决办法是引入正反馈也就是让输出状态影响阈值形成迟滞施密特触发器特性。这样输入必须超过一个高阈值才能翻转成一种状态再低于一个低阈值才能翻回另一种状态中间的差值就是迟滞电压。迟滞电压的宽度要大于信号噪声的幅度这样信号在阈值附近抖动时输出不会频繁翻转。具体电路怎么搭以同相端输入为例信号V_in接同相端参考电压V_ref接反相端输出端接上拉电阻到Vcc然后从输出端接一个反馈电阻R_f到同相端。这样同相端的电压就不再只是V_in而是V_in和输出电压通过R_f叠加的结果。高阈值V_th_high V_ref (Vcc - V_ref) * R_in / (R_in R_f)低阈值V_th_low V_ref - V_ref * R_in / (R_in R_f)。这里的R_in是同相端对地的输入电阻可能在信号源和同相端之间串了一个电阻然后同相端再接一个电阻到地。实际计算中比较常用的做法是信号源通过R1接到同相端同相端到地接R2反馈电阻Rf从输出接到同相端。设V_ref接反相端。同相端电压由V_in、Vcc输出高、GND输出低三分支叠加。高阈值公式V_th_high V_ref * (Rf/R1) (V_in处为Vcc) 等等其实可以化简为V_th_high V_ref (Vcc - V_ref) / ((Rf/R1) 1) 之类。但为了实操方便我建议直接用Multisim里的参数扫描功能来验证阈值或者先按经验取Rf为R1的十分之一到五分之一让迟滞窗口在0.1V到0.3V之间。我常用的参数是Vcc5VV_ref2.5VR110kΩRf100kΩ计算出迟滞电压约为0.23V。这样就保证了比较器在2.5V附近有0.23V的死区不会在噪声中乱抖。迟滞是电压比较器设计里最重要的技巧之一一定要熟练掌握。2.3 窗口比较器一上一下两个阈值搞定过压欠压检测窗口比较器解决的是一个更复杂的场景判断电压是否在某个区间内而不是只和单一阈值比较。比如锂电池充电保护电压高于4.2V要停止充电低于3.0V要停止放电中间范围是正常区间。窗口比较器用两个LM339比较器实现。一路负责检测上限另一路负责检测下限。上限比较器的参考电压设为4.2V对应的采样值下限比较器的参考设为3.0V对应的采样值。两个比较器的输出端都是开漏直接并联在一起再通过一个上拉电阻接到Vcc。这样只有两个比较器都输出高电平即电压在窗口内时公共输出才是高电平只要任何一个输出低电平电压越界公共输出就是低电平。这就是前文提到的线与逻辑。在设计时要注意两个参考电压的分配。通常用三个串联电阻从参考电压源分压从上到下依次得到上限阈值、中间接地、下限阈值。中间节点接地上端接高阈值点下端接低阈值点。这样只需要一组电阻分压网络就能同时得到两个参考电压免去了两套分压的麻烦。比如Vcc5VR5上端接5VR5下端接上限参考点再串R6到地之间的节点作为下限参考点R6下端接地。取R53kΩ、R63kΩ、R74kΩ总10kΩ则上限参考电压5 * (34)/10 3.5V下限参考电压5 * 4/10 2V。这样窗口就是2V到3.5V相当直觉。2.4 和单片机配合时的电平转换与保护用LM339检测电压信号输出直接进单片机的GPIO这个场景在实际项目里极其常见。前面说过开漏输出的天然优势是可以把上拉电阻接到单片机的IO电压上实现电平转换。比如LM339用12V供电上拉电阻接3.3V那么输出高电平就是3.3V单片机可以直接识别。但有几个细节要注意。第一单片机的GPIO要配置为输入模式不要开内部上拉。因为外部已经有上拉电阻了内部上拉并联会改变上拉效果而且可能引入不明电流路径。第二如果LM339的输出变化速度很快比如用于测频线长超过10cm建议在单片机引脚附近加一个RC滤波R取100ΩC取100pF到1nF既抑制振铃又不至于影响信号沿。第三输出端不要直接驱动继电器或电磁阀。LM339的灌电流能力有限驱动继电器请加三极管或达林顿管以及续流二极管。另外还有一个比较隐蔽的问题如果单片机上电时序早于LM339供电那么LM339输出端可能处于不确定电位这时候需要确保上拉电阻接到了单片机的IO电压轨上而不是比较器的Vcc这样在比较器没上电时输出仍被上拉到高电平单片机能读到确定的逻辑1避免误触发。3. Multisim仿真完整实操从元件摆放出来到波形分析3.1 环境准备与元件查找用Multisim仿真LM339电路第一步当然是在库里面找到这个芯片。打开Multisim我这边用的是14.2版本18版界面也差不多点击工具栏上的Place Component按钮或者快捷键CtrlW。在搜索框输入LM339你会发现搜索结果里有好几个型号比如LM339N、LM339AD、LM339M等。LM339N是最常见的DIP-14封装Multisim里一般选这个。注意有时候搜索出来是LM339J或者LM339DR2G之类没关系它们电气模型基本一致只是封装不同。双击选中的型号在图纸上放置即可。如果你在库里面找不到LM339大概率是Multisim的主数据库没加载完整。这时候可以点菜单栏的Tools - Database - Database Manager查看Master Database是否被禁用。如果遇到Multisim主数据库无法访问或者访问数据库发生错误的报错一般是安装路径有中文或者安装时没有以管理员权限运行。解决方法是关掉Multisim右键快捷方式以管理员身份运行或者把用户文件夹里的NI相关缓存删除后重启软件。这个报错在很多人电脑上出现过我自己就被坑过一次后来发现是360把某个dll文件隔离了恢复信任后一切正常。除了LM339我们还需要这些元件电源VCC、VEE、GND、电阻若干、LED、信号源函数信号发生器、虚拟示波器Virtual Oscilloscope或者四通道示波器。建议先新建一个空白的Design文件把图纸存到一个好找的位置避免软件崩溃后丢失工作。3.2 搭建基本比较器电路并设置信号源我以最简单的基本比较器电路为例演示整个仿真流程。第一步放置LM339N芯片。第二步给芯片接电源。VCC接12VVEE接地GND。在Multisim里电源符号直接从右侧工具栏拖出来VCC和GND分别放置一个接14脚一个接12脚。注意LM339的引脚定义14脚是VCC12脚是GND1脚是输出12脚是输出23脚是电源地不用的比较器引脚也要接好通常把不用的输入端接地。第三步搭参考电压分压器。我用R110kΩ接VCCR210kΩ接地中间点作为参考电压接到比较器1的反相输入端4脚这里以第一组比较器为例LM339N的1脚是输出14脚是反相输入15脚是同相输入1。第四步信号源接同相输入端5脚。用Function Generator函数信号发生器产生一个幅度3V、偏置2.5V、频率1kHz的正弦波。注意函数信号发生器的设置Amplitude设置为3V峰值Offset设置为2.5V这样波形实际在-0.5V到5.5V之间变化一定能跨越参考电压2.5V。这样我可以在示波器上同时看到同相端输入和反相端参考电压的值方便对照。第五步输出端接上拉电阻。从1脚拉一根线出来接一个4.7kΩ电阻到VCC同时从1脚接线到示波器通道B。3.3 用示波器抓波形让逻辑看见双击示波器图标打开面板。设置通道A接到信号源的输入波形通道B接到LM339的输出。运行仿真后你会看到一个关键现象当输入正弦波高于2.5V时输出为高电平接近12V因为上拉到VCC当输入低于2.5V时输出为低电平接近0V。这个波形就是一个标准的方波频率和输入正弦波一致占空比取决于输入高于阈值的时间比例。把通道A设为黄色、通道B设为蓝色在示波器面板上可以直接看到两条波形曲线。但如果你设置的Offset不够大导致整个输入波形都高于参考电压那输出就会一直为高看不到翻转。这时候需要动态调整信号源的Offset或者参考电压。我在实操中比较常做的是把参考电压设为可调用一个电位器或者双联开关切换不同电阻然后在仿真时一边调整一边看波形变化。另一个重要操作是测量输出波形的高低电平值。示波器面板上有光标测量功能Cursor拖动光标到波形的高电平段和低电平段分别读取电压数值。高电平应该接近VCC12V低电平应该接近0V具体可能有0.1V左右饱和压降这能验证电路逻辑是否正确。3.4 仿真速度与参数调整的小技巧Multisim仿真LM339这种模拟电路有时候会遇到仿真速度过慢的问题。原因通常是步长设得太小或者波形时间跨度太大。解决办法在Simulate - Interactive Simulation Settings里把End Time设短一些比如5ms到20ms不要动辄几十秒否则仿真计算量巨大。把Maximum time step最大时间步长适当调大比如1e-5让仿真器能快速跳过平稳段。对于1kHz的输入时间步长1e-5秒足够捕捉波形细节。如果你的电路里同时用了PWM或者高频信号源那个时间步长需要相应缩小否则波形会失真。另外如果仿真中输出波形出现很多毛刺可以考虑在比较器的电源引脚旁边加一个仿真用的去耦电容比如0.1uF——在Multisim里虽然没有实体PCB走线问题但这个电容对电源突变的抑制作用依然存在经常能让波形更干净。当我把同一个电路从基本比较器改成迟滞比较器时仿真波形会有一个显著变化输出方波的翻转点不再固定在2.5V而是出现一个小的跳变区间。具体观察方法是将输入改成三角波把函数信号发生器换成三角波模式此时输出波形的上升沿和下降沿在时间轴上的位置会错开这个错开的时间差对应的输入电压范围就是迟滞电压的大小。用示波器光标测量这一个时间差再对比信号的斜率就能算出迟滞窗口宽度从而验证电阻取值是否正确。4. 仿真与实物调试中的常见问题报错、波形异常和设计缺陷4.1 仿真报错与芯片不出波形的排查思路用Multisim仿真LM339电路最常碰到的几个问题我按出现频率整理一下。第一找不着LM339或者放置后报未知引脚错误。这多半是数据库损坏。除了重启软件和管理员权限还可以试试直接搜LM2901或者LP339这两个型号在Multisim里偶尔模型更完整逻辑和LM339基本兼容可以临时替代仿真但最终设计还是回到LM339。如果是访问数据库发生错误这种弹窗试试在软件启动界面按住Shift键恢复一下工作区。第二仿真一运行就报Simulation failed。最常见原因是电路没有接地参考点。Multisim要求电路里至少有一个GND节点如果VEE直接用了负电源符号而没有实际放Ground仿真器会认为回路不完整。解决方法在电源负极旁边接一个GND符号。第三输出一直为高或者一直为低怎么调都不翻转。先看输入信号是否真的跨越了参考电压用示波器同时观察两个输入端的波形别只盯着输出。很多时候是信号源的幅度设置不对比如设成RMS值而不是峰值导致实际幅度只有预期的一半根本没越过阈值。4.2 输出波形有毛刺或者高电平不够高毛刺问题的根源通常是参考电压不稳定或者输入信号叠加了高频噪声。仿真中的毛刺一般是电源设置引起可以试试把电源内阻调小Multisim默认理想电源内阻为0如果设了非零内阻会产生意外的压降和噪声。更常见的高电平不够高现象则完全是因为上拉电阻接到了错误的电压或者上拉电阻取值太大。如果把上拉电阻接到12V但LM339的VCC只接了5V那输出高电平实际上会冲到接近12V——这有时候是好事但如果你后面接了单片机可能直接烧坏引脚。所以务必检查上拉电阻的连接点必须是你想要的逻辑高电平电压轨。我在仿真时习惯把上拉接到和VCC同一个网络逻辑简单不会串电压。如果输出高电平总是差一点比如12V供电输出只有10.8V那是因为示波器探头或者仿真测试点的负载效应。把示波器通道的输入阻抗改成1MΩMultisim默认是1MΩ如果误设成50Ω会拉低电压问题就解决了。4.3 实物调试时的独有坑点供电退耦、输入保护和PCB布局从仿真跳到实物坑点更多我把值得重点说的几个展开一下。第一必须加电源去耦电容。LM339虽然静态电流小但在翻转瞬间会因为输出级导通而产生电流尖峰如果电源走线阻抗大这个尖峰就会引起电源电压跌落反馈到输入端导致误翻转。我的习惯是每个LM339芯片的电源引脚和地之间放一个0.1uF陶瓷电容宜近不宜远最好贴着引脚放。如果系统里还有继电器、电机这类大功率负载电源入口再放一个10uF~100uF的电解电容。第二输入信号超过共模范围会出怪问题。前面提过LM339共模输入范围从0V到Vcc-1.5V。如果你检测的电压超过了这个范围比如输入直接接了24V而芯片只有5V供电比较器内部会发生电流倒灌甚至闩锁。在输入端串联一个10kΩ电阻并在比较器输入端对地反并联两个二极管BAT54系列是一种常见的输入保护方案可以有效地把输入电压钳位在安全范围内。第三不用的比较器不能悬空。LM339四路比较器如果你只用了两路剩下两路的输入端不能空着。悬空输入会让内部晶体管处于不确定状态可能产生振荡并且消耗额外电流还会干扰同一芯片内其他通道的工作。正确做法是把不用的比较器接成跟随器结构同相端接输入反相端接输出或者直接把同相端接地、反相端接VCC让输出保持确定低电平。第四PCB布局时参考电压分压电阻要靠近芯片输入引脚。参考电压是标尺如果标尺本身被噪声污染整个比较器就失去意义。分压电阻靠近引脚走线短拾取噪声少同时让所有输入走线远离继电器、电机这类干扰源。如果布两层板参考电压网络下方尽量铺地铜皮形成屏蔽。4.4 从Multisim到实物逻辑通了但现象不对怎么办还有一种情况仿真完全正常逻辑也正确但实物一上电就乱跳。我遇到过很多次最后排查出来的原因往往是参考电压的纹波太大。LM339的电源如果是直接从开关电源取电输出纹波可能有几十毫伏而这些纹波会通过分压电阻直接叠加到参考电压上当输入信号缓慢变化时比较器就会把纹波当信号翻转。解决方案是在参考电压端对地加一个1uF到10uF的电容形成低通滤波让参考电压变干净。同时把迟滞电路加上哪怕不需要太宽的迟滞窗口0.05V的迟滞也能有效滤掉大部分电源纹波的影响。我自己的惯例是只要是连接到比较器输入端的直流参考电压一律并一个1uF电容成本几分钱收益极大。另一个仿真正常、实物不对的常见原因是输入信号源的内阻太大。Multisim里函数信号发生器是理想源输出阻抗为0但实际的传感器比如光敏电阻、热敏电阻分压电路输出阻抗可能有几十千欧。这个阻抗和你的滤波电容、寄生电容组成一个低通滤波器会延迟信号变化的速度甚至在快速变化时直接削掉信号。解决办法是在信号源和比较器输入之间加一个电压跟随器用LM358或者LM324让传感器和比较器之间隔离一下。虽然这增加了一颗芯片但换来的是一致性和可靠性。5. 最后分享几个我实际用过的小技巧这篇文章写到这里核心内容基本都覆盖了。最后再补充几个我在实际项目中反复验证过的细节体会不算什么高深理论但关键时刻能省不少时间。第一个是关于LM339和LM393的选择。很多新人分不清这两个芯片其实LM393是双比较器LM339是四比较器内部结构、引脚逻辑、电气特性几乎一样。如果只需要一到两路比较用LM393更省空间封装也更小如果需要三路以上就直接上LM339别再堆多颗芯片。原理图和仿真文件之间切换的时候这两个芯片的模型也基本可以互用。第二个是关于Multisim仿真速度修改的经验。很多人喜欢把End Time设成10秒然后看着波形慢慢爬其实没必要。对于比较器这种低频逻辑观察用瞬态仿真时把时间轴设在5ms到20ms就能看到清晰完整的翻转过程如果你需要分析输出方波的频谱或者验证延时参数那才需要拉长时间并配合FFT。先把仿真目标想清楚再决定时间长度效率会高很多。第三个是关于Multisim主数据库无法访问这种环境问题我建议直接把安装路径里的非英文字符全部去掉重新安装时选择C:\Program Files (x86)\National Instruments这种默认目录别为了省事装到D盘中文文件夹里。很多看似玄学的软件报错根源就是路径编码问题重装一次能省一周的折腾时间。第四个技巧用Multisim做仿真时给每个元器件命名加一个语义化前缀比如R_REF_TOP、R_FEEDBACK、LED_LOWBAT虽然不影响仿真本身但截图发给别人讨论时一眼就能看懂。我在给团队做培训时看原理图最快的都是这种带语义标注的图而不是A1、R2、R3这种满图乱飞的名字。LM339这颗芯片看起来简单用好了真的能解决一大片问题。从最基础的电平判断到迟滞比较器过滤噪声再到窗口比较器做越限报警再到和单片机做电平接口它的应用边界比你想象的要宽得多。希望这篇文章能帮你把原理、计算、仿真、调板串成一条完整的链路下次再遇到判断电压的需求能第一时间想到LM339。
返回列表