ARTICLE DETAIL

资讯详情

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

运放当比较器踩坑实录:LM358的5个致命问题与替代方案

运放当比较器踩坑实录:LM358的5个致命问题与替代方案 1. 为什么总有人想把运放当比较器用先说一个我在实际项目中反复见到的现象很多刚入行的硬件工程师甚至一些做了几年嵌入式软件的开发者在画原理图时看到比较两个电压大小这个需求第一反应不是去翻比较器选型手册而是顺手把手里多余的运放通道接成开环状态心想运放增益那么高两个输入一有压差输出不就饱和了吗这不就是比较器这个思路从理论上看没毛病。运放的开环增益通常在10万倍以上哪怕两个输入端只差1mV输出也会被推到电源轨附近。但问题在于理论成立和工程可用之间隔着一堆你意想不到的坑。我自己早期做电池低压检测电路时就干过用LM358的一个通道当比较器的事结果在实验室里跑得好好的板子到了现场批量出货后陆续出现误触发返修率一度超过8%。后来花了整整两周做失效分析才把问题定位清楚。这篇文章就是把我这些年用运放当比较器踩过的坑结合LM358这颗最经典的国民运放的实测数据一条一条摊开来讲。LM358之所以成为重灾区是因为它便宜、好买、双通道、单电源供电方便几乎每个电子爱好者的元件盒里都有一把。但恰恰是它的几个特性让它当比较器用时问题特别集中。适合谁看如果你正在做电池检测、过零检测、光耦信号整形、传感器阈值判断这类比较两个电压的活并且手头正好有运放想省一颗比较器的钱那这篇内容能帮你少走至少半年的弯路。如果你只是想搞清楚运放和比较器的本质区别这里也有从datasheet到实测波形的完整推导。提示本文所有实测数据基于LM358DIP-8封装某国产替代型号室温25℃和LM393同封装对比测试供电5V单电源负载为空载及10kΩ对地两种情况。不同厂家批次的LM358参数有差异数据仅供趋势参考。2. 运放和比较器到底差在哪从输出级结构说起2.1 输出级拓扑决定了响应速度的天花板要理解为什么运放当比较器会出问题得先看两者的输出级。运放为了兼顾放大和驱动能力输出级通常采用推挽式甲乙类Class AB结构内部有频率补偿电容LM358典型值约5pF的米勒补偿电容这个电容是为了保证闭环负反馈时的相位裕度防止自激振荡。但它的副作用是压摆率Slew Rate被限制得很低。LM358的压摆率典型值是0.3V/μs什么意思输出从0V跳到5V理论上需要约16.7μs。而LM393这类专用比较器的压摆率通常在几十V/μs量级响应时间Response Time标称1.3μs。这两个数字差了十几倍。我实测过一组数据输入一个从0V跳到3V的阶跃信号上升时间100nsLM358开环输出从低到高的翻转延迟约12μs而LM393只有约1.5μs。如果你做的是过零检测或者PWM信号整形这个延迟直接决定了你的占空比测量误差。2.2 输入级偏置电流和失调电压的隐藏影响LM358的输入偏置电流典型值-20nA注意是负的说明是PNP输入级输入失调电压典型值2mV最大7mV。这两个参数在放大电路里可以通过调零或者软件校准解决但在比较器应用里它们直接决定了你的比较阈值精度。举个例子你想做一个3.3V锂电池的低压检测阈值设在3.0V。用电阻分压得到3.0V参考接到运放反相端电池分压接到同相端。理想情况下电池降到3.0V时输出翻转。但实际上由于2mV的失调电压翻转点可能在2.998V到3.002V之间飘。这还只是室温下的静态误差加上温漂LM358失调电压温漂典型值7μV/℃在-20℃到60℃范围内阈值可能再飘几个mV。对于电池检测这种应用几mV的误差可能还能接受。但如果你做的是精密电流检测或者小信号阈值判断这个误差就是致命的。2.3 输出电平兼容性你以为的低不一定是低LM358的输出级有个特点输出低电平不能真正到0V。因为输出级下管是达林顿结构或者有饱和压降在灌电流sink current较大时输出低电平可能高达0.5V甚至更高。我实测LM358在灌10mA电流时输出低电平约0.7V空载时约0.1V。这意味着什么如果你用LM358的输出去驱动一个3.3V MCU的GPIO做中断触发MCU可能把0.7V识别为低电平通常VIL是0.3×VDD0.99V勉强能用。但如果你驱动的是1.8V的低功耗MCUVIL可能只有0.54V0.7V就可能被识别为高电平或者不确定态导致中断误触发或者不触发。而LM393的输出是**集电极开路Open Collector**结构需要外接上拉电阻但低电平可以拉到接近0V饱和压降约0.2V4mA高电平由上拉电阻决定可以灵活适配不同逻辑电平。2.4 相位反转最容易被忽略的坑这是我最想强调的一点。很多运放在输入共模电压超出规定范围时会出现**输出相位反转Phase Reversal**现象。正常情况是同相端电压高于反相端时输出高但相位反转时输出会突然翻转到相反状态。LM358的输入共模范围是0V到VCC-1.5V单电源5V时是0到3.5V。如果你把输入信号拉到接近VCC或者低于0V比如传感器信号有负压输出可能突然反转造成误触发。我在做光耦信号整形时就遇到过光耦输出在关断时有个小的负尖峰直接把LM358的输出打反了MCU读到一堆错误脉冲。专用比较器如LM393虽然也有共模范围限制但通常不会出现相位反转或者反转阈值更明确。3. LM358当比较器的5个实测坑位记录3.1 坑一上升沿延迟导致的脉冲丢失这个坑我在做红外对管计数时踩得最惨。红外接收管输出的是窄脉冲宽度约50μs。我用LM358开环接成比较器参考电压设在1V。理论上脉冲来时输出应该翻高。但实测发现当脉冲宽度小于30μs时LM358的输出根本来不及翻到高电平MCU完全检测不到。用示波器抓波形看得很清楚输入脉冲上升沿到来后LM358输出开始缓慢爬升但脉冲已经结束了输出还没到逻辑高电平阈值然后输入回落输出又开始下降。整个过程输出就像个被拉长的三角波完全失去了比较器的意义。根因压摆率0.3V/μs输出从0V到3V需要10μs加上内部补偿电容的充放电时间实际小信号响应更慢。对于窄脉冲输出根本来不及建立。实测数据对比脉冲宽度LM358输出峰值LM393输出峰值是否可被3.3V MCU识别5μs0.8V3.3VLM358否LM393是10μs1.5V3.3VLM358否LM393是20μs2.4V3.3VLM358临界LM393是50μs3.2V3.3V两者均可100μs3.4V3.3V两者均可注意如果你非要用LM358处理窄脉冲唯一的办法是加正反馈加速翻转即做成滞回比较器但效果有限且会引入新的阈值偏移问题。3.2 坑二滞回设计不当引发的振荡说到滞回这是运放当比较器的另一个大坑。开环比较器在输入信号接近阈值时如果信号上有噪声输出会在高低之间反复翻转这叫振荡Chattering。解决办法是加正反馈形成滞回施密特触发器结构。但滞回窗口的设计很讲究。我见过有人直接拿两个电阻随便一分压结果滞回窗口设了500mV对于需要检测10mV变化的信号直接把有效信号淹没了。也有人滞回窗口设得太小比如5mV结果噪声幅度有20mV照样振荡。LM358做滞回比较器的计算公式上门限VTH Vref × (1 R1/R2) Vout_low × (R1/R2)近似下门限VTL Vref × (1 R1/R2) Vout_high × (R1/R2)近似更准确的计算需要考虑输出高低电平的实际值。我实测LM358在5V供电、10kΩ上拉时输出高约3.8V输出低约0.1V。假设Vref2.5VR1100kΩR210kΩVTH ≈ 2.5 × (110) 0.1 × 10 27.5 1 28.5V这明显不对因为公式用反了正确的滞回计算应该用叠加定理。设同相端电压为V根据节点电流(Vout - V) / R1 (V - Vref) / R2整理得V (Vout × R2 Vref × R1) / (R1 R2)当Vout为高3.8V时V (3.8×10 2.5×100) / 110 (38 250) / 110 2.62V 当Vout为低0.1V时V (0.1×10 2.5×100) / 110 (1 250) / 110 2.28V所以滞回窗口是2.62V - 2.28V 340mV。这个窗口对于大多数传感器信号来说太大了。要减小滞回窗口需要减小R1/R2的比值或者增大R1。但R1太大会导致输入偏置电流的影响变大。LM358的输入偏置电流-20nA如果R11MΩ产生的误差电压就是20mV已经和失调电压一个量级了。我的经验值对于LM358做滞回比较器R1建议在100kΩ到470kΩ之间R2在10kΩ到47kΩ之间滞回窗口控制在50mV到200mV比较合适。具体要根据你的信号噪声幅度来定一般滞回窗口取噪声峰峰值的2到3倍。3.3 坑三输出上拉电阻与功耗的权衡LM358的输出是推挽结构理论上不需要上拉电阻。但实际使用中为了确保输出高电平能到VCC附近尤其是驱动CMOS输入时很多人会加一个上拉电阻。这个电阻的选择有讲究。如果上拉电阻太小比如1kΩ当输出为低时LM358内部下管要灌入5mA电流输出低电平会升高到约0.3V同时芯片功耗增加。如果上拉电阻太大比如1MΩ输出高电平的上升沿会变慢因为输出电容和上拉电阻形成RC延迟对于需要快速上升沿的应用不利。我实测了一组数据5V供电输出接10kΩ对地模拟负载上拉电阻输出高电平输出低电平上升时间10%-90%静态功耗增加无上拉3.6V0.1V8μs010kΩ4.2V0.15V6μs0.5mW4.7kΩ4.6V0.25V4μs1.1mW1kΩ4.8V0.5V2μs5mW可以看到上拉电阻减小确实能加快上升沿但低电平会变差功耗也上去了。对于LM358我一般建议用4.7kΩ到10kΩ的上拉兼顾速度和电平兼容性。但这里有个更隐蔽的坑如果你用LM358的输出直接驱动LED或者光耦灌电流可能达到十几mA输出低电平会高到1V以上可能导致后级电路误判。这种情况下要么加三极管驱动要么换用LM393集电极开路输出灌电流能力更强低电平更稳定。3.4 坑四电源电压变化对阈值的影响LM358的失调电压和输入偏置电流会随电源电压变化。我实测在5V供电时某批次LM358的失调电压约1.8mV当电源降到3.3V时失调电压变成约2.5mV升到12V时约1.2mV。虽然变化不大但对于精密阈值应用这个漂移需要考虑。更严重的是**共模抑制比CMRR**的影响。LM358的CMRR典型值70dB意味着共模电压变化1V等效输入失调变化约0.3mV。如果你的参考电压和输入信号都随电源波动而电源又不稳定阈值就会跟着飘。我在做车载设备时遇到过这个问题汽车电瓶电压在11V到14V之间波动我用LM358做低压检测阈值设的12V。结果电瓶电压正常波动时检测输出也跟着抖。后来改用TL431做基准再用LM393比较问题才解决。建议如果非要用LM358做比较器参考电压一定要用独立基准如TL431、LM4040不要直接从电源分压。同时电源要加足够的滤波和去耦。3.5 坑五多通道串扰与自激LM358是双运放两个通道共享电源和地。当一个通道在大信号翻转时会在电源线上产生尖峰通过电源耦合到另一个通道造成误触发。我实测过通道A做比较器输出从低到高翻转时通道B的输入等效噪声增加了约5mV。如果两个通道都做比较器且阈值设得比较接近这种串扰可能导致两个通道同时误翻转。解决办法是在每个通道的电源脚附近加0.1μF陶瓷去耦电容并且两个通道的输入走线尽量远离。另外LM358开环使用时如果输入信号源阻抗较高比如100kΩ且走线较长容易引入干扰导致自激。我见过最夸张的案例是输入线没屏蔽50Hz工频干扰直接让输出以50Hz频率翻转。这种情况下要么加输入滤波电容但会影响响应速度要么用屏蔽线要么换比较器比较器通常输入级设计更抗干扰。4. 什么情况下可以凑合用什么情况下必须换比较器4.1 可以用运放凑合的场景不是所有应用都需要专用比较器。根据我的经验以下场景用LM358当比较器问题不大信号变化缓慢比如温度检测、电池电压监测信号变化时间常数在秒级以上LM358的延迟完全不是问题。对阈值精度要求不高比如判断有信号/无信号阈值误差几十mV无所谓。输出直接进MCU的ADC或者比较器外设有些MCU内部有模拟比较器你可以把LM358当预放大真正比较交给MCU内部做。成本极度敏感且手头只有运放比如学生实验、一次性玩具电路。我自己的原则是如果信号频率低于100Hz且阈值精度要求低于50mV可以用LM358凑合否则老老实实换比较器。4.2 必须换比较器的场景以下场景我强烈建议不要用运放当比较器窄脉冲信号脉冲宽度小于50μsLM358根本来不及响应。高频信号频率高于10kHzLM358的压摆率和带宽都不够。精密阈值阈值精度要求高于10mVLM358的失调和温漂会超标。输入信号可能超出共模范围比如有负压或者接近VCCLM358可能相位反转。需要驱动大电流负载比如直接驱动继电器、LEDLM358输出能力不够。多通道密集使用串扰风险高。替代方案LM393是最直接的替代引脚兼容LM358和LM393都是DIP-8但引脚定义不同不能直接插换价格差不多性能专门为比较器优化。如果需要推挽输出可以用LM311、TLV3501等。如果要求高速可以用TLV3201、ADCMP600等。4.3 一个折中方案运放做预放大比较器做判决有时候信号太弱比较器本身的失调电压LM393典型2mV最大5mV也会影响精度。这时候可以用运放先放大信号再用比较器判决。比如信号幅度10mV用LM358放大100倍到1V再用LM393比较。这样运放的失调被放大100倍后是200mV反而更差了——所以这个方案只适合信号幅度远大于运放失调的情况。更好的折中是用仪表放大器或者零漂移运放如OPA333、MCP6V01做预放大再用比较器。但成本就上去了。5. 如果非要用LM358这样设计能少踩坑5.1 电路参数计算与元件选型假设你要做一个12V电池的低压检测阈值设在10.5V回差0.5V输出接3.3V MCU。用LM358单电源5V供电12V通过分压得到检测电压。第一步确定分压比。12V电池电压通过两个电阻分压到5V以内。选R_top100kΩR_bottom47kΩ分压比47/(10047)0.32。12V时分压输出3.84V10.5V时输出3.36V。这个电压在LM358的共模范围0到3.5V内勉强可以但接近上限。建议把分压比再降低一点比如R_top100kΩR_bottom33kΩ分压比0.248。12V时输出2.98V10.5V时输出2.60V。这样更安全。第二步确定参考电压。用TL431产生2.5V基准需要两个电阻设定TL431的REF脚接分压点。或者用LM4040-2.5。参考电压接到LM358的反相端。第三步计算滞回电阻。同相端接电池分压信号同时通过反馈电阻Rf接到输出。反相端接2.5V基准。滞回窗口由Rf和输入电阻Ri决定。设输入电阻Ri100kΩ从分压点到同相端反馈电阻Rf1MΩ。当输出高3.8V时同相端电压被拉高V (V_signal × Rf Vout × Ri) / (Ri Rf) (V_signal × 1M 3.8 × 100k) / 1.1M当V 2.5V时翻转解得V_signal (2.5 × 1.1M - 3.8 × 100k) / 1M (2.75M - 0.38M) / 1M 2.37V当输出低0.1V时V (V_signal × 1M 0.1 × 100k) / 1.1M当V 2.5V时翻转解得V_signal (2.5 × 1.1M - 0.1 × 100k) / 1M (2.75M - 0.01M) / 1M 2.74V所以滞回窗口是2.74V - 2.37V 370mV。对应到电池电压分压比0.248电池电压回差 370mV / 0.248 1.49V。这太大了需要减小Rf。改Rf470kΩ重新计算输出高时V_signal (2.5 × 570k - 3.8 × 100k) / 470k (1.425M - 0.38M) / 470k 2.22V 输出低时V_signal (2.5 × 570k - 0.1 × 100k) / 470k (1.425M - 0.01M) / 470k 3.01V滞回窗口 3.01 - 2.22 790mV对应电池电压回差 790mV / 0.248 3.19V。更大了等等我算反了。实际上Rf越小正反馈越强滞回窗口越大。要减小滞回窗口应该增大Rf或者减小Ri。但Rf太大会受输入偏置电流影响。让我重新推导。滞回窗口ΔV (Vout_high - Vout_low) × Ri / (Ri Rf)。要减小ΔV需要减小Ri/(RiRf)即增大Rf或减小Ri。设Ri10kΩRf1MΩΔV (3.8-0.1) × 10k / 1.01M 3.7 × 0.0099 36.6mV。对应电池电压回差 36.6mV / 0.248 148mV。这个比较合理。但Ri10kΩ会加重输入信号源的负载。如果分压电阻是100kΩ和33kΩ并联10kΩ后分压比会变化。所以Ri不能太小或者需要在分压点和Ri之间加缓冲。实际设计建议对于LM358做滞回比较器我通常用Ri47kΩRf1MΩ这样ΔV ≈ 3.7 × 47k / 1.047M ≈ 166mV。如果信号源阻抗高可以在分压点后加一个电压跟随器用另一个运放通道但这样又增加了成本和复杂度。5.2 PCB布局与去耦要点LM358做比较器时PCB布局比做放大器时更关键因为开环增益高容易受干扰。电源去耦每个LM358的电源脚8脚到地4脚之间必须加0.1μF陶瓷电容尽量靠近芯片。如果板上有多颗运放每颗都要加。我还会在电源入口加一个10μF钽电容或者电解电容。输入走线比较器输入是高阻抗节点走线要尽量短远离时钟线、开关电源走线。如果输入信号来自板外建议加RC低通滤波比如1kΩ100nF截止频率约1.6kHz能滤掉大部分高频干扰。输出走线输出如果驱动长线要加串联电阻比如100Ω抑制反射。如果驱动MCU走线尽量短。地平面尽量用完整地平面不要分割。模拟地和数字地如果必须分开在比较器下方单点连接。我踩过的一个坑把LM358放在开关电源芯片旁边结果电源纹波直接耦合到比较器输出MCU读到一堆错误中断。后来把LM358挪远加了两级LC滤波问题才解决。5.3 实测验证方法与常见波形分析设计完成后一定要用示波器验证。我通常做以下几个测试静态阈值测试用可调电源缓慢改变输入电压记录输出翻转时的输入电压。正反方向各测一次差值就是实际滞回窗口。对比设计值偏差应在20%以内。动态响应测试输入方波信号频率从1Hz逐步升到10kHz观察输出波形。记录输出开始明显变形上升沿变缓、幅度下降的频率。对于LM358这个频率通常在1kHz左右。噪声测试输入接一个接近阈值的直流电压用示波器观察输出。如果输出有毛刺或者振荡说明滞回不够或者干扰太大。温度测试用热风枪或者恒温箱改变温度观察阈值漂移。LM358在-20℃到60℃范围内阈值漂移通常在10mV以内不含基准漂移。我实测的一组LM358波形数据5V供电输入1kHz方波幅度0到3V阈值1.5V输出上升时间10%-90%约8μs输出下降时间90%-10%约6μs传输延迟输入过阈值到输出过50%约15μs输出高电平3.7V空载3.5V10kΩ负载输出低电平0.08V空载0.15V10kΩ负载对比LM393同样条件输出上升时间约0.5μs受上拉电阻和负载电容影响输出下降时间约0.3μs传输延迟约2μs输出低电平0.15V灌4mA差距一目了然。6. 几个替代LM358的务实选择6.1 LM393最直接的替代LM393和LM358引脚不兼容但电路结构类似都是双通道、单电源、DIP-8。LM393是集电极开路输出需要上拉电阻但低电平更干净响应更快。价格和LM358差不多甚至更便宜。如果你现在用LM358做比较器第一建议就是换LM393。需要注意的是LM393的输入共模范围也是0到VCC-1.5V同样有相位反转的风险但比LM358好一些。另外LM393的输出是开集可以线与适合做窗口比较器。6.2 TLV1701/TLV1702低压高精度选择如果你的系统是3.3V或者更低LM393的最低工作电压是2V但参数会变差。TLV1701系列工作电压1.8V到5.5V输入失调电压典型0.5mV响应时间约1μs推挽输出。价格比LM393贵一些但性能好很多。适合电池供电的低功耗设备。6.3 内置比较器的MCU省元件的好办法很多MCU内置模拟比较器比如STM32的COMP、AVR的AC、MSP430的COMP。这些内置比较器通常有可编程阈值、迟滞、输出滤波用起来比外置方便。如果你的MCU正好有优先用内置的。我做过一个项目用STM32F0的内部比较器做电池检测省了LM393和外围电阻成本降了0.3元板子也小了。6.4 什么时候继续用LM358如果你手头有大量LM358库存且应用场景是信号变化慢100Hz、阈值精度要求低50mV、输出直接进MCU的ADC或者内部比较器、成本极度敏感——那继续用LM358也不是不行。但一定要做充分的实测验证尤其是温度测试和批量一致性测试。我自己的底线是产品要过认证或者批量出货的不用运放当比较器个人DIY或者实验板随便用。7. 从踩坑到形成设计检查清单经过这些年的反复踩坑我总结了一个LM358当比较器时的设计检查清单每次画完图都过一遍[ ] 输入信号频率是否低于100Hz脉冲宽度是否大于50μs[ ] 输入信号幅度是否在0到VCC-1.5V范围内有没有负压或者超上限的可能[ ] 阈值精度要求是否低于50mV如果高于是否用了独立基准[ ] 是否加了滞回滞回窗口是否大于噪声峰峰值的2倍[ ] 输出高电平是否满足后级VIL/VIH要求低电平是否满足[ ] 输出灌电流是否超过10mA如果超过是否加了驱动[ ] 电源去耦电容是否每个芯片都有是否靠近电源脚[ ] 输入走线是否短且远离干扰源是否加了RC滤波[ ] 是否做了温度测试和批量一致性测试[ ] 是否考虑过换LM393或者内置比较器这个清单帮我避免了很多低级错误。尤其是第4条和第9条是我踩坑最多的地方。最后分享一个我个人的小经验如果你实在要用LM358做比较器又担心响应速度可以在输出端加一个施密特触发器比如74HC14做整形。LM358输出缓慢变化的波形经过74HC14后变成干净的方波。这样既利用了LM358的便宜又解决了边沿问题。但74HC14的阈值是固定的约0.5VCC和0.3VCC且有一定迟滞需要根据你的输出电平选择合适型号。我用过74HC14配合LM358做红外计数效果比直接用LM358好很多成本只增加了两毛钱。另外一个技巧如果输入信号源阻抗高可以在LM358输入前加一个JFET输入运放做缓冲比如TL072或者LF353。这些运放输入偏置电流是pA级对高阻抗信号源影响小。但TL072是双电源运放单电源使用时需要注意共模范围。LF353可以单电源用但输出摆幅比LM358差。这些替代和组合方案本质上都是在省钱和性能之间找平衡。我的建议是先算清楚你的性能需求再决定用不用运放当比较器。如果性能需求不明确就先用LM393做一版测出实际性能再决定能不能降级到LM358。这样最稳妥也最省时间。
返回列表