
调试一块电池低压报警板的时候我盯着示波器上那条来回跳动的输出波形看了快半个小时——输入电压明明稳定在 3.0V 附近没动可 LM393 的输出却像抽风一样在高、低电平之间来回翻。后来才发现问题既不在电源也不在焊接而是我压根没给比较器加迟滞。这件事之后我才认真把电压比较器从原理到电路重新捋了一遍也踩明白了不少手册上只用一行字带过、但实际调试时能让你抓狂一整天的细节。这篇文章想聊的就是电压比较器这件事重点放在最经典、用量最大的 LM393 上。从它到底在比较什么、输出为什么必须接上拉、迟滞到底怎么算到光控开关、过压检测、方波振荡这几个典型电路怎么落地再到上板之后那些仿真里永远不会出现的故障我会一条条讲清楚。不管你是刚开始玩模电的学生还是经常拿比较器做检测、做波形整形的工程师应该都能从里面找到点能直接抄走的经验。1. 开环运放为什么不能直接当比较器用1.1 比较器的本质就是让差分放大撞到轨很多人第一次接触比较器会觉得它就是运放换了个名字。这个理解不算错但漏掉了最关键的一点比较器是故意让运放工作在开环、也就是非线性的饱和状态。普通运放做线性放大时我们会引入负反馈把两个输入端的电压差压到几乎为零输出跟着输入线性变化。可比较器不要这个虚短它要的是把输入差放大到极限一直放大到输出撞上电源轨或者撞到地为止。也就是说比较器的输出只有两个状态要么是接近上拉电压的高电平要么是接近地的低电平中间那一大片线性区间它根本不在乎。用生活化的说法运放做放大像是让天平保持平衡、读出偏了多少比较器则是直接看天平往哪边倒倒了就翻牌。理解这个区别非常重要因为后面几乎所有关于比较器的坑——响应速度、输出结构、输入范围、迟滞——都源于它是个开关而不是个跟随器这个事实。LM393 内部其实就是一个高增益的差分放大级后面接一个输出级。因为增益足够大典型 200V/mV也就是 20 万倍量级输入端哪怕只有零点几毫伏的差异经过放大也足以把输出推向饱和。这也解释了一个常见现象你在阈值附近把输入电压微调一点点输出就啪地翻了——不是芯片太敏感是它本来就设计成这样。1.2 拿 LM358 硬顶比较器代价在哪实际项目里经常能见到有人图省事把双运放 LM358 直接当比较器用理由很朴素手头有而且引脚和 LM393 几乎一样。短时间凑合能用但如果认真用示波器看波形就会发现几个躲不开的问题。第一是速度慢。运放为了线性工作时的稳定性内部做了频率补偿压摆率有限。当它从饱和状态退出来的时候需要一段时间爬回线性区这段时间叫恢复时间往往比比较器慢一个数量级。做低速的电平判断还行一旦信号频率上去、或者要求边沿干净运放就力不从心了。第二是没有内部迟滞。专用比较器虽然大多数也没有内置迟滞LM393 就没有但至少它的输出级和输入级是为开关设计的噪声抑制相对好些。运放反过来在阈值附近容易被输入噪声牵着来回翻。第三是输出摆幅。LM358 的输出是推挽结构理论上能接近电源轨但实际上离轨还有一段距离。而 LM393 是集电极开路输出高电平完全由你外部上拉决定反而更灵活——这一点下一节展开。我的建议很简单阈值判断、波形整形、振荡这类开关需求老老实实用比较器做信号放大、滤波、跟随用运放。芯片便宜得很别为了省一颗料给自己埋坑。对比项LM358运放LM393比较器工作方式通常闭环线性开环饱和开关内部补偿有速度慢无速度快输出结构推挽集电极开路输出高电平由芯片决定由上拉电阻决定响应时间微秒到十几微秒约 1.3 微秒适合场景放大、滤波阈值检测、整形2. LM393 的集电极开路输出与输入共模红线2.1 那颗悬空的输出三极管LM393 最容易被新手坑的地方就是它的输出引脚内部只是一个 NPN 三极管的集电极发射极接地基极受内部差分级控制。说白了芯片只会往下拉不会往上推。这意味着什么输出低的时候三极管导通把输出脚拉到接近地电流从外部灌进输出脚这叫灌电流输出高的时候三极管截止输出脚等于悬空处于高阻态。如果你不在输出脚和电源之间接一个上拉电阻那高电平那一路就永远是浮空的万用表可能测出个莫名其妙的电压接数字芯片更是直接当成无效电平。我第一次踩这个坑就是把 LM393 输出直接接到单片机的输入脚结果读到的值忽高忽低。补上一个 10kΩ 上拉之后立刻稳定——这种问题没有任何报警纯粹靠经验识别。集电极开路也不是只有麻烦它带来两个很实用的能力。一是电平转换上拉到 3.3V输出就是 3.3V 逻辑可以安全驱动低压 MCU而不用担心 5V 系统抬高它的输出。二是线或多个开集电极输出可以直接并在一起共用一根上拉电阻只要有一个拉低整根线就是低——这种谁先报警谁拉低的逻辑在很多报警电路里特别好用。2.2 上拉电阻到底该取多大上拉电阻看着随便取一个都行但它其实卡在一个上下限之间取值要权衡速度和功耗。下限由灌电流能力决定。LM393 输出低时能灌的电流典型 16mA最大 20mA。如果上拉电阻太小输出低时三极管要吃掉大电流一是功耗大二是低电平会被抬起来可能超过下游芯片的低电平门限。假设上拉到 5V希望灌电流不超过 10mA那么 R 至少得是 (5 − 0.2)/0.01 ≈ 480Ω实际没人会取这么小。上限由上升沿时间决定。开集电极输出的高电平上升靠的是上拉电阻给寄生电容充电时间常数是 RC。如果上拉电阻很大边沿就会变得很钝。估算公式记住一个就够上升时间约等于 2.2 乘以 R 再乘以总负载电容。假设寄生电容加负载电容一共 20pF想要上升时间小于 1 微秒那 R 要小于 1e-6/(2.2×20e-12) ≈ 22.7kΩ。把两头一夹4.7kΩ 到 10kΩ 是最常见的落点兼顾速度、功耗和噪声余量。做低功耗电池设备时我会往 100kΩ 甚至更大走但要接受边沿变慢下游也要相应放宽时序要求。上拉电阻输出低时电流(5V)上升时间估算(20pF)适用场景1kΩ约 5mA约 44ns高速、短走线4.7kΩ约 1mA约 207ns通用首选10kΩ约 0.5mA约 440ns常规检测100kΩ约 50uA约 4.4us超低功耗2.3 输入共模范围最容易致命的那条线LM393 数据手册里有一行不起眼但极重要的参数共模输入电压范围是 0 到 VCC−1.5V。前半句是好事说明它的输入可以低到地电位这对单电源系统非常友好很多比较器做不到这一点。后半句是雷区输入电压不能顶到电源正轨留了 1.5V 的余量。如果你用 5V 供电却把一个 4.5V 的信号接进输入端芯片会进入异常区轻则输出逻辑乱掉重则出现所谓的相位反转——输入明明该让它输出高它偏偏给你翻成低而且手册明确说了不保证在超出共模范围时的行为。同相放大里把输入直接顶到电源的电路我见过太多。规避方法有两个一是给输入串一个分压网络把最高电压压到 VCC−1.5V 以下二是宁可提高供电电压比如用 9V 或 12V 供电给输入留足空间。还有一个容易被忽略的边界是负电压。输入如果低于地超过约 0.3V内部寄生二极管会导通可能损坏芯片。做交流信号过零检测时交流信号有负半周必须串限流电阻或者加钳位保护不能直接把信号怼进输入脚。3. 迟滞比较器让阈值附近不再来回抽风3.1 没有迟滞输出就会在阈值上跳迪斯科回到开头我遇到的那个问题。当时输入电压非常接近阈值再加上电源纹波、走线耦合进来的噪声、甚至桌上的手机震动引起的一点干扰输入电压就在阈值上下几毫伏的范围内反复穿越。比较器增益又极高于是输出就跟着输入抖动一遍一遍地翻这就是所谓的多次翻转或者说输出抖动。这种抖动在下游看起来就是一堆毛刺脉冲。如果后面接的是计数器它会多计好几百个数如果接的是继电器它会噼里啪啦响个不停如果接的是 MCU 中断脚CPU 会被无数个假中断淹没。根本原因不是噪声有多大而是单一阈值这件事本身太脆弱——只要输入在阈值附近任何风吹草动都会翻。解决办法就是引入迟滞让上升方向和下降方向走两个不同的阈值中间留出一段回差。3.2 迟滞窗口怎么推导、电阻怎么取迟滞的本质是正反馈从输出引一个电阻回到同相输入端。这样输出自己的状态会反过来影响阈值——输出高的时候把阈值抬高一点输出低的时候把阈值压低一点。以最常见的反相迟滞比较器为例。输入信号接在反相输入端同相输入端通过电阻 R1 接参考电压 Vref同时通过电阻 R2 接输出。用叠加原理能得到同相端电压V Vref × R2/(R1R2) Vout × R1/(R1R2)当输出为高电平 VOH 时阈值为高阈值 VTH_H当输出为低电平 VOL 时阈值为低阈值 VTH_L。两者相减就是迟滞宽度VHYS (VOH − VOL) × R1/(R1R2)举个具体例子。设 Vref 2.5VR1 10kΩR2 1MΩ上拉到 5V输出低电平近似 0V。那么高阈值 VTH_H 2.5 × 1000/1010 5 × 10/1010 ≈ 2.475 0.0495 ≈ 2.525V低阈值 VTH_L 2.5 × 1000/1010 0 × 10/1010 ≈ 2.475V迟滞宽度约 50mV可以看到迟滞宽度几乎完全由 R1 和 R2 的比值决定参考电压只影响中心位置。想要更大的迟滞就把 R1 调大或者 R2 调小。实际调试时我常用的做法是先按估算取一组值再用示波器缓慢扫过阈值测出实际的上下翻转点再微调 R1。还有一个设计细节正反馈电阻 R2 会同时改变输入端的阻抗如果信号源内阻较大会影响阈值精度所以信号源那边最好先经过一级缓冲或者选低内阻的分压网络。3.3 迟滞的代价精度换稳定迟滞不是免费的午餐。它把原本一条清晰的阈值线变成了一个宽度为 VHYS 的判定窗口。窗口越宽抗噪能力越强但比较精度越低——比如做精密电压监测你本来想卡在 3.00V 报警结果因为迟滞实际报警点可能在 2.95V 到 3.05V 之间漂。所以迟滞宽度的选取要匹配噪声幅度和精度要求。噪声峰峰值如果是 20mV迟滞取 50mV 到 100mV 就够稳压反过来如果精度要求是 ±10mV那你的噪声必须控制在几毫伏以内或者改用更精密的比较器和更好的 PCB 布局。另外要注意迟滞会引入一个状态依赖的阈值意味着如果你的系统需要严格对称的上下限比如既报欠压又报过压两个方向的阈值最好分别独立设计或者干脆用两路比较器分别处理避免互相干扰。4. LM393 四个能直接抄的典型电路4.1 光控开关光敏电阻分压 迟滞光控开关是最经典的应用。电路核心是一个光敏电阻和一个固定电阻组成分压网络分压点接到 LM393 的输入端参考电压由另一组分压提供输出经过上拉驱动后续负载。接法上我一般把光敏电阻放在上臂、固定电阻放下臂这样环境变暗时光敏阻值变大分压点电压升高。参考电压设在分压点的中间值附近就能实现天黑到一定程度就动作。关键在于必须加迟滞。因为傍晚时光线是缓慢连续变化的分压点电压会在阈值附近停留很长时间如果没有迟滞输出会在这个临界光线下反复开关继电器跟着咔咔作响。加迟滞之后比如让开灯阈值和关灯阈值相差 100mV 对应的照度就能形成更暗才开、明显变亮才关的自然行为。另外一个实操点是光敏电阻响应慢、易受自身发热影响如果要求精确或者响应快我会换成光电二极管加跨阻放大再送进比较器。但纯做亮暗判断光敏电阻足够便宜好用。4.2 过压欠压检测把阈值算准电池监测、电源保护里常用 LM393 做欠压和过压判断。核心是一个分压网络把被测电压按比例降到参考电压附近再和参考电压比较。这里最容易出错的不是电路而是阈值到底对应多少伏。假设被测电压 Vbat 经过 R_high 和 R_low 分压分压点电压是 Vbat × R_low/(R_highR_low)参考电压是 Vref那么翻转点满足 Vbat × R_low/(R_highR_low) Vref解得 Vbat Vref × (R_highR_low)/R_low。举个数字想监测 12V 电池低于 10.5V 报警参考电压用 2.5V。分压比需要满足 2.5 10.5 × R_low/(R_highR_low)也就是 R_low/(R_highR_low) ≈ 0.238取 R_low 24kΩR_high ≈ 76.8kΩ用 75kΩ 或 76.8kΩ 标准值即可。上拉电阻和分压电阻的精度会直接影响阈值准确度所以做精密监测时分压电阻要选 1% 精度参考电压用 TL431 之类的基准而不是电阻分压电阻分压会被电源波动带偏。欠压和过压最好用两路比较器分别做各自带迟滞避免电池电压反弹时反复触发。4.3 方波振荡器弛张振荡器怎么算频率LM393 也能当振荡器用做出成本极低的方波源。最经典的接法是弛张振荡器输出通过一个电阻 R 给电容 C 充放电电容上的电压接到一个输入端另一个输入端接由电阻分压确定的阈值。工作过程是这样的输出高时通过 R 给 C 充电电容电压逐渐升高当它超过同相端的阈值电压时输出翻低输出翻低之后电容反过来通过 R 向输出放电电压下降当它低于另一个阈值时输出又翻高循环往复。如果同相端也用正反馈做出两个阈值就能得到比较对称、接近 50% 占空比的方波。频率用时间常数算充电时间约为 RC 乘以一个由阈值比例决定的对数项放电时间同理两者相加就是周期倒数就是频率。实践中要注意两点。一是电容别用大容量的电解电容漏电流大、容差大频率会漂用薄膜或 CBB 更好。二是振荡频率不能超过比较器的响应速度LM393 大约 1.3 微秒的响应时间对应最高大概几十千赫兹的可靠振荡做得再快输出波形就开始畸变、幅度下降。4.4 过零检测与电平转换过零检测是另一个高频需求常见于交流信号同步、频率测量、相位检测。做法是把交流信号经过限流电阻和钳位之后接到比较器一个输入另一个输入接一个接近零伏的参考比如通过分压得到的小偏置输出就是在过零点翻转的方波。这里必须提共模范围和输入保护的坑。LM393 输入能到地很好但交流信号的负半周不能低于地太多否则内部二极管导通。我一般串一个几十千欧的电阻限流再并一对钳位二极管到地和电源双保险。信号幅度小时先经过一级放大再送进来别指望比较器去放大微弱信号。集电极开路的电平转换能力也值得单独用一用。比如一个 5V 供电的传感器电路要输出 3.3V 逻辑给主控只要把 LM393 的输出上拉到 3.3V输出高就是 3.3V输出低时把 3.3V 拉到地完全不用担心 5V 倒灌。这种用法在多电压系统里非常省事比专门加一颗电平转换芯片还便宜。5. 上板之后才会遇到的故障与排查5.1 输出毛刺、振铃与多次翻转示波器上看到输出有一串串毛刺几乎都是阈值附近噪声惹的祸。排查顺序我习惯这样走先确认输入确实只穿越了一次阈值——把输入信号接到示波器另一路看清楚在翻转点附近有没有尖峰或振铃如果有先做输入滤波串电阻加对地小电容构成低通把高频噪声压掉。如果输入干净但输出还在抖多半是没加迟滞或者迟滞太窄。这时候把迟滞电阻调一调让宽度明显大于噪声峰峰值。还有一个隐蔽原因上拉电阻走线太长、分布电感和电容形成振铃表现出来就是上升沿上有过冲和振荡。缩短走线、加串阻或者减小上拉电阻通常能解决。5.2 电源去耦和布局别省比较器对电源噪声很敏感尤其是它自己翻转时会在电源上引起电流跳变。我目前固定的做法是在芯片电源脚旁边放一个 100nF 陶瓷电容再并一个 1uF 到 10uF 的电容两个都要靠近引脚放置。少一个输出边沿就可能有毛刺或者误翻转。布局上还有两条经验。一是输入走线尽量短、远离大电流和开关节点减少耦合进来的噪声二是分压网络、参考电压的电阻尽量靠近芯片避免引入额外的寄生参数。如果做的是需要精度的检测电路分压网络周围尽量远离发热元件比如稳压芯片因为温漂会让阈值跟着飘。5.3 未使用通道、悬空输入和其他细节LM393 是双路很多应用只用到一路剩下的那一半不能不管。悬空的输入端会自激、会随温度乱飘正确的做法是把未用那一路的同相和反相输入都接到一个确定的电位比如都接参考电压或者都接地输出悬空或者上拉都行但输入必须确定。还有几个平时不太注意的细节。第一个是输入阻抗LM393 的输入偏置电流是纳安级对一般应用够用但如果前端用高阻分压比如兆欧级偏置电流会在电阻上产生压降引入误差这时候要么降低分压电阻值要么加一级缓冲。第二个是输出低电平其实不是绝对的零伏LM393 在灌较大电流时输出低电平可能有几百毫伏接下游门限比较紧的芯片要留意。第三个是上电顺序如果参考电压来自另一路电源最好保证它先建立稳定否则开机瞬间比较器可能输出一个错误的短暂脉冲触发下游误动作——这种情况我会在输出后面加一个简单的 RC 延时或者用 MCU 做上电屏蔽。5.4 一张排查速查表调试时遇到问题我基本按这个顺序自查命中率很高。现象可能原因处理方向输出一直是低没接上拉电阻输出对电源接 4.7k 到 10k输出一直是高同相端电位始终高于反相端核对分压和参考电压阈值附近抖动无迟滞或迟滞太窄加正反馈并加大迟滞宽度输出逻辑反常输入超出共模范围输入压到 VCC−1.5V 以下输入含负压负半周打坏输入级串限流电阻加钳位边沿有振铃走线长、上拉过大缩短走线、减小上拉频率不稳振荡电容漏电或温漂换薄膜电容、远离热源未用通道异常输入悬空自激输入端接到确定电位我个人在多次调试里最大的体会是电压比较器这类器件原理一句话就能讲完但真正决定项目能不能稳的全是那些手册角落里的小字——上拉要接、迟滞要加、共模范围要留余量、去耦电容不能省。把这四点守住LM393 这种几毛钱的芯片能扛起相当多的检测和控制任务稳定得让人放心。