
1. 运放当比较器到底行不行先把结论撂在这儿能用但别乱用。我见过太多新手图省事手头只有LM358就顺手拿它当电压比较器使结果要么输出电平不对要么波形边沿惨不忍睹要么温度一上来就误翻转。LM358这颗运放我前后搭过不下二十个电路从电压跟随器到恒流源都折腾过拿它当比较器也踩了不少坑。这篇文章就把这些坑一个个刨开附上我实测的数据让你少走弯路。运放和比较器的核心区别很多人背过运放是线性放大比较器是非线性开关。但真正上手的时候问题远比这句话复杂。运放设计时追求的是闭环线性工作内部补偿电容保证了它在负反馈下的稳定性比较器设计时追求的是快速翻转内部往往没有补偿开环增益也做得更陡。你把运放当比较器用等于让一个长跑运动员去跑百米冲刺——不是跑不了是跑不出最佳成绩还容易受伤。LM358是双运放单电源供电价格便宜到令人发指几乎每个电子爱好者的元件盒里都有几颗。它的GBW增益带宽积典型值1.1MHz压摆率0.3V/μs这些参数在线性放大场景下够用但一旦进入比较器模式就成了瓶颈。我实测过LM358在5V单电源下做比较器输出从低到高的翻转时间大约在1.5μs到3μs之间具体取决于过驱电压大小。这个速度对于检测按键、光敏电阻这种慢速信号完全够用但你要是拿来处理超声波回波或者编码器信号那就等着丢脉冲吧。那为什么还有人用运放当比较器原因很现实手头没有LM393或者PCB上刚好空着一个运放通道或者需要比较器带滞回但手头只有运放。LM393是专用比较器开环增益高响应快输出是集电极开路需要上拉电阻。LM358输出是推挽的可以直接驱动LED或者逻辑输入这是它的优势。所以选型的时候你得先问自己信号频率多高输出要驱动什么需不需要滞回供电是单电源还是双电源我个人的经验是信号频率低于10kHz、对翻转速度要求不苛刻、输出需要推挽驱动的场景LM358当比较器完全可行。但如果你要做精密窗口比较器、高速过零检测、或者输出需要直接接CMOS输入且对边沿有要求还是老老实实上LM393或者TLV3501这类专用比较器。下面我就把这五个坑逐一拆解每个坑都附上我的实测数据和解决方案。2. 坑一没有滞回输出在阈值附近疯狂抖动2.1 为什么运放当比较器更容易振荡这是我最开始踩的坑也是最经典的坑。拿LM358搭一个简单的过零比较器反相输入端接参考电压同相输入端接缓慢变化的信号。理论上输出应该在信号穿越参考电压时干净利落地翻转。但实际上如果输入信号上叠加了任何微小噪声或者信号本身变化很慢输出就会在阈值附近高频抖动。原因在于运放的高开环增益。LM358的开环增益典型值100dB也就是10万倍。假设输出在0V和5V之间摆动那么输入端的等效阈值窗口只有5V除以10万等于50μV。只要输入信号在参考电压附近50μV范围内有任何噪声输出就会跟着噪声翻转。而现实中电源纹波、热噪声、空间干扰随便一个都能轻松超过50μV。专用比较器比如LM393虽然开环增益也很高但它的内部设计对这种情况有优化而且很多比较器数据手册会明确给出滞回建议。运放就没有这个待遇你得自己加滞回。2.2 滞回比较器的电阻怎么算滞回比较器也叫施密特触发器核心思想是引入正反馈让翻转阈值随输出状态变化。这样一旦输出翻转阈值就立刻移动噪声就没办法把它拉回来了。对于LM358单电源供电的同相滞回比较器电路结构是这样的参考电压通过电阻分压得到接到反相输入端输入信号通过电阻接到同相输入端输出通过反馈电阻也接到同相输入端。正反馈电阻和输入电阻的比值决定了滞回宽度。计算公式如下。假设参考电压为Vref输出高电平为Voh输出低电平为Vol正反馈电阻为Rf输入电阻为Rin那么输出高电平时的上门限电压Vth_high Vref (Voh - Vref) * Rin / (Rin Rf)输出低电平时的下门限电压Vth_low Vref (Vol - Vref) * Rin / (Rin Rf)滞回宽度Vhys (Voh - Vol) * Rin / (Rin Rf)我实测的一组数据Vref2.5VVoh3.8VLM358在5V供电下输出高电平大约比电源低1.2VVol0.1VRin10kΩRf1MΩ。代入公式Vhys (3.8 - 0.1) * 10k / (10k 1M) 3.7 * 10 / 1010 ≈ 0.0366V也就是36.6mV。这个滞回宽度对于大多数慢速信号已经够用了。如果你需要更宽的滞回减小Rf或者增大Rin。但注意Rin太大会导致输入阻抗过高容易受干扰Rf太小会加重输出负载。一般Rf在100kΩ到10MΩ之间选Rin在1kΩ到100kΩ之间选。注意滞回比较器的正反馈电阻不能太小否则输出电流会过大。LM358输出短路电流典型值40mA但长期工作在接近短路状态会发热严重。建议反馈电阻不低于10kΩ。2.3 实测波形对比我用信号发生器产生一个1kHz、幅度从0V到5V的三角波叠加约20mV的噪声分别测试了无滞回和加滞回两种情况。无滞回时输出波形在翻转点附近出现了明显的多次翻转用示波器看就是一团毛刺持续时间大约200μs。这个毛刺如果接到单片机的外部中断引脚会触发多次中断程序直接跑飞。加滞回后输出波形干净利落上升沿和下降沿各只有一次翻转毛刺完全消失。翻转点也如预期一样上门限和下门限分开了大约37mV和计算值吻合。这个坑的教训是只要输入信号不是理想的方波只要信号边沿不是垂直的就必须加滞回。别心存侥幸我试过用理想信号源直接驱动确实不抖但一接到实际传感器上就原形毕露。3. 坑二输出电平不是你想的那样3.1 LM358的输出摆幅限制很多人以为运放输出高电平就是电源电压低电平就是0V。对于LM358来说这个想法错得离谱。LM358的输出级是推挽结构但输出高电平典型值比正电源低1.2V到1.5V输出低电平典型值比负电源高5mV到20mV。在5V单电源供电下输出高电平大约3.5V到3.8V输出低电平大约0.05V到0.1V。这个特性在运放做线性放大时问题不大因为负反馈会自动调整。但做比较器时输出直接就是逻辑电平3.5V的高电平能不能被后级识别为逻辑1取决于后级的输入阈值。如果后级是74HC系列CMOS输入高电平阈值是0.7倍电源5V供电时是3.5V刚好卡在边缘。温度一变或者负载电流一大输出高电平再降一点后级就识别不到了。我实测过LM358在不同负载下的输出高电平。空载时3.82V接10kΩ上拉时3.80V接1kΩ负载时3.65V接470Ω负载时3.42V。可以看到负载越重输出高电平越低。如果你用LM358直接驱动LEDLED串联限流电阻那么输出高电平会被拉低到LED正向电压加上限流电阻压降可能只有2V左右。3.2 和LM393的输出结构对比LM393是集电极开路输出输出级是一个NPN三极管的集电极没有内部上拉。这意味着输出低电平时三极管导通输出接近0V灌电流能力很强典型16mA。输出高电平时三极管截止输出由外部上拉电阻决定可以拉到任意不超过电源电压的电平。这个结构的好处是电平灵活你可以上拉到3.3V、5V甚至12V方便和不同逻辑电平对接。坏处是必须加上拉电阻而且上升沿的速度取决于上拉电阻和负载电容的RC时间常数。LM358的推挽输出不需要上拉电阻可以直接驱动逻辑输入但电平固定高电平不够高。所以选型的时候如果你的后级是3.3V单片机LM358在5V供电下输出高电平3.8V直接接进去可能会超过单片机的输入耐压值需要分压或者限流。反过来如果后级是5V的74LS系列TTL输入高电平阈值是2.0VLM358的3.5V完全够用。3.3 实测数据表格下面是我用LM358和LM393在相同条件下测的输出电平对比供电都是5V负载都是10kΩ到地。器件输出高电平输出低电平输出高电平接1kΩ负载输出低电平灌10mALM3583.82V0.06V3.65V0.18VLM39310k上拉4.98V0.12V4.95V0.15VLM3931k上拉4.96V0.10V4.90V0.14V从表里可以清楚看到LM358的输出高电平明显偏低而且带负载能力弱。LM393加上拉后高电平几乎等于电源电压低电平也很干净。提示如果你非要用LM358当比较器后级是3.3V系统建议在输出端加一个电阻分压或者用一颗NPN三极管做电平转换。别直接怼进去烧了单片机引脚不划算。4. 坑三响应速度慢边沿爬升像蜗牛4.1 压摆率对比较器应用的影响压摆率Slew RateSR是运放输出电压的最大变化速率单位是V/μs。LM358的压摆率典型值0.3V/μs这意味着输出从0V变到5V理论上需要5/0.3≈16.7μs。实际测量中由于输出摆幅只有3.8V左右时间大约是12μs到15μs。这个速度是什么概念如果你用LM358做比较器来检测一个1kHz的方波周期是1000μs上升沿占15μs占比1.5%看起来还能接受。但如果你检测的是100kHz的信号周期只有10μs上升沿比整个周期还长输出根本来不及翻转波形就变成三角波了。我实测过LM358在不同过驱电压下的翻转时间。过驱电压是指输入信号超过阈值的幅度。过驱越大内部差分对越能快速把输出拉向饱和翻转越快。过驱电压输出上升时间10%到90%输出下降时间90%到10%5mV8.2μs6.5μs20mV3.5μs2.8μs100mV1.8μs1.5μs500mV1.2μs1.0μs可以看到即使过驱达到500mV上升时间也有1.2μs。这个速度对于低速信号够用但和专用比较器比就差远了。LM393的响应时间典型值1.3μs看起来差不多但LM393在过驱5mV时响应时间也只有几微秒而且它的压摆率不受内部补偿电容限制大信号翻转更干脆。4.2 和专用比较器的速度对比我手头正好有LM393和TLV3501做了一个对比测试。输入信号是100kHz方波幅度0V到5V参考电压2.5V。用示波器测量输出从10%到90%的上升时间。器件上升时间下降时间备注LM35812.5μs10.8μs输出波形严重变形LM3930.8μs0.5μs输出干净TLV35014.5ns4.2ns高速比较器这个差距是数量级的。LM358在100kHz下已经力不从心输出波形上升沿和下降沿连在一起根本看不出方波。LM393还能勉强保持方波形状TLV3501则是完美还原。所以如果你要用LM358当比较器信号频率最好控制在10kHz以下。超过这个频率输出边沿会明显变缓占空比失真后级电路可能误判。4.3 如何改善响应速度如果你非要用LM358又希望速度快一点可以试试这几个方法第一增大过驱电压。让输入信号在穿越阈值时幅度大一些这样内部差分对能更快进入饱和。比如参考电压设2.5V输入信号幅度0V到5V过驱就是2.5V翻转时间能降到1μs左右。第二减小输出摆幅。输出不需要拉到5V只需要拉到后级的逻辑阈值就行。可以在输出端加一个钳位电路比如用一颗肖特基二极管钳位到3.3V这样输出摆幅从3.8V降到3.3V时间按比例缩短。第三给运放加一点正反馈。正反馈不仅提供滞回还能加速翻转。因为正反馈会在输出开始变化时把输入端的差值进一步放大形成雪崩效应。我实测加正反馈后翻转时间能缩短20%到30%。注意加正反馈会改变阈值计算滞回宽度时要一并考虑。别加了正反馈忘了重新算阈值否则比较点就偏了。5. 坑四输入共模范围不是轨到轨5.1 LM358的输入共模范围限制LM358的输入共模范围是0V到Vcc-1.5V。也就是说在5V供电下输入信号只能在0V到3.5V之间正常比较。如果输入信号超过3.5V比如到了4V输入级差分对的一个管子会截止输出状态就不受控了。这个坑特别隐蔽。因为你在测试的时候可能只测了输入在0V到3V之间变化的情况一切正常。但实际信号可能偶尔冲到4V这时候输出就乱了。我踩这个坑的时候用LM358检测一个光敏电阻分压的信号光照强的时候分压接近4V输出就莫名其妙地保持低电平怎么都不翻转。专用比较器比如LM393输入共模范围也是0V到Vcc-1.5V同样有这个限制。但LM393的数据手册会明确标注而且很多比较器有轨到轨输入版本比如TLV1701。运放里也有轨到轨输入的比如MCP6001但价格比LM358贵。5.2 输入超过共模范围会怎样我实测了LM358在输入超过共模范围时的表现。供电5V反相输入端固定2.5V同相输入端从0V缓慢升到5V。输入0V到3.5V输出正常翻转输入超过2.5V时输出高电平。输入3.5V到4.2V输出开始变得不确定有时候保持高电平有时候突然掉到低电平。输入4.2V以上输出稳定在低电平即使同相输入端远高于反相输入端。这个行为的原因是输入级PNP差分对在共模电压过高时尾电流源进入饱和差分对失去放大能力。输出级因此被拉到一个固定状态。5.3 解决方案和替代选型如果你非要用LM358又需要输入接近电源电压有两个办法第一在输入端加分压电阻。把输入信号衰减到共模范围内再送进运放。比如输入最大5V用两个等值电阻分压到2.5V参考电压也相应减半。这样代价是信号幅度减半信噪比变差。第二换用轨到轨输入运放。比如MCP6001、TLV6001、OPA340这些运放的输入共模范围可以覆盖整个电源范围甚至超出电源轨0.3V。价格比LM358贵一些但省去了分压电路精度也更好。我个人的建议是如果输入信号会接近电源电压直接换运放或者换比较器别硬撑。分压电阻的温漂和精度问题会引入新的误差得不偿失。6. 坑五输出接容性负载容易自激6.1 运放驱动容性负载的稳定性问题运放输出接容性负载比如长电缆、MOS管栅极、或者去耦电容会导致输出级相位裕度下降严重时自激振荡。LM358虽然内部有补偿但它的相位裕度本身就不高接上几百皮法的容性负载就可能开始振铃接上几纳法就可能持续振荡。我实测过LM358输出接不同容性负载的情况。输入是直流2.5V输出空载时稳定在3.8V。接100pF电容输出出现轻微振铃幅度约200mV。接1nF电容输出持续振荡频率约50kHz幅度约1V。接10nF电容振荡频率降到15kHz幅度约2V。这个振荡如果发生在比较器应用里后果就是输出在应该稳定的时候不停翻转后级电路完全没法工作。6.2 隔离电阻的作用和选型解决方法是输出串联一个隔离电阻把容性负载和运放输出级隔开。隔离电阻和容性负载构成一个低通滤波器同时引入一个零点补偿相位裕度。隔离电阻的选值有讲究。太小了起不到隔离作用太大了会降低输出驱动能力而且影响输出高电平。一般选10Ω到100Ω之间。我实测LM358接1nF负载串联33Ω隔离电阻后振荡完全消失输出干净。串联10Ω时还有轻微振铃串联100Ω时输出高电平从3.8V降到3.6V但也在可接受范围。提示隔离电阻要放在运放输出和容性负载之间不能放在反馈环路内部。如果你用了正反馈做滞回隔离电阻放在输出和反馈电阻之间反馈电阻从隔离电阻后面取这样隔离电阻也在反馈环路内会影响滞回计算。6.3 实测振荡波形和解决方案我用示波器抓了LM358接1nF负载时的振荡波形。振荡频率约50kHz峰峰值约1V波形接近正弦叠加在直流3.8V上。这个振荡在比较器应用中会导致输出在阈值附近多次翻转即使加了滞回也压不住因为振荡是输出级自身的不是输入噪声引起的。串联33Ω隔离电阻后振荡消失输出稳定。再测翻转时间上升时间从1.8μs增加到2.1μs增加了约17%这个代价可以接受。如果你需要驱动更大的容性负载比如MOS管栅极栅极电容可能达到几纳法隔离电阻要选大一些比如100Ω。但注意隔离电阻和栅极电容构成RC充电电路会影响MOS管的开关速度。如果开关速度要求高还是加一级推挽驱动或者专用栅极驱动芯片。7. 常见问题速查表下面这张表是我在实际调试中整理出来的涵盖了LM358当比较器时最常遇到的问题、可能原因和解决方法。你可以直接对照排查。现象可能原因排查方法解决方法输出在阈值附近抖动没有滞回噪声引起多次翻转示波器看输出波形放大阈值附近加正反馈电阻设置滞回宽度输出高电平不够高LM358输出摆幅限制万用表测输出高电平换LM393加10k上拉或加分压/电平转换输出边沿太慢压摆率限制过驱不足示波器测上升时间增大过驱电压减小输出摆幅加正反馈输入超过3.5V时输出异常输入共模范围超限逐步升高输入观察输出输入端分压或换轨到轨运放输出接电容后振荡容性负载导致相位裕度不足示波器看输出是否有高频振荡输出串联33Ω到100Ω隔离电阻输出低电平不够低灌电流能力不足测输出低电平加大负载减小负载电流或换LM393温度升高后阈值漂移运放失调电压温漂加热/冷却测阈值变化换低失调运放或加温度补偿双电源供电时输出不对称负电源轨输出摆幅限制测正负输出摆幅改用单电源或选轨到轨输出运放这张表里的每一条都是我实际遇到过的不是从数据手册上抄的。特别是输入共模范围那条我当初调了整整一个下午才找到原因一开始还以为是光敏电阻坏了。8. 我的实操心得和选型建议折腾了这么多我现在的做法是手头常备LM393和LM358各一管。慢速、需要推挽输出、对成本敏感的场合用LM358当比较器但一定加滞回、加隔离电阻、控制输入共模范围。快速、需要灵活电平、对精度有要求的场合直接用LM393加上拉电阻省心省力。如果你刚开始学电路我建议你先用LM358搭一个简单的过零比较器不加滞回用示波器看输出抖动。然后加上正反馈再看输出变干净。这个过程能让你直观理解滞回的作用比看书强十倍。然后你再换LM393做同样的电路对比输出电平和边沿速度你就能深刻体会运放和比较器的区别。最后分享一个我常用的小技巧用LM358做比较器时在输出端和正电源之间接一个1kΩ到10kΩ的上拉电阻。虽然LM358是推挽输出不需要上拉但这个上拉电阻能在输出高电平时提供额外的拉电流让输出高电平更接近电源电压。我实测加上10kΩ上拉后输出高电平从3.82V提升到4.15V效果明显。这个技巧在输出需要驱动CMOS输入时特别有用。另外如果你要用LM358做窗口比较器需要两个比较器正好LM358是双运放一颗芯片搞定。但注意两个运放的输出不能直接并联否则一个输出高一个输出低时会短路。正确的做法是每个输出各接一个二极管构成线与逻辑然后共用一个上拉电阻。这个电路我搭过配合滞回电阻工作很稳定。LM358升压电路图、LM358电压跟随器这些经典应用网上资料很多但拿它当比较器的详细实测数据却很少。希望这篇踩坑记录能帮你省下几个晚上的调试时间。电路这东西理论看再多不如亲手搭一次示波器一照什么妖魔鬼怪都现形了。