做硬件这些年,我经常被身边同事问一个问题:“我手上正好有一颗运放,能直接当比较器用吗?”答案是能,但直接用会踩不少坑。运放和比较器虽然长得像,内核都是高增益差分放大器,但设计目标完全不同。运放追求线性放大、低失真,比较器追求高速翻转、电平兼容,很多人把运放改成比较器后发现输出振荡、翻转点偏、响应迟钝,其实就是没搞明白这两者的差异。
这篇文章我把运放改比较器的3种经典电路从头到尾拆一遍,包含开环直改、迟滞设计、输出电平处理,以及我用示波器实测的波形结果。不管你是刚接触模拟电路的新手,还是想快速搭一个阈值检测电路的老手,这篇文章都能让你少走弯路。
1. 运放与比较器:看起来像,用起来完全两码事
1.1 为什么有人把运放当比较器用
先说说为什么会有人动这个念头。运放和比较器的电路符号几乎一样,都是两个输入端一个输出端,都是靠差分输入驱动输出。从原理框图上看,两者确实都是“高增益放大器”,运放的典型开环增益在100dB以上,也就是10万倍左右,比较器内部的增益也高达几十万倍。所以从原理上讲,把一个输入信号加到运放的同相端,另一个信号加到反相端,输出就会往电源轨方向跑——信号大的一边赢,这就是比较器的基本行为。
实际项目中,很多人手头常备LM358、TL072、NE5532这类通用运放,而专用的比较器芯片如LM393、LM311反而不一定常备。为了省一颗料、省一次采购,直接拿现成的运放顶上去,这是最常见的出发点。还有一个场景是学生做实验、创客做小项目,面包板上插了一堆运放,临时需要一个电压比较功能,就直接拿运放搭了。
这个思路本身没毛病,但要清楚代价在哪里。运放不是不能当比较器,而是它的输出级、压摆率、失调电压、响应时间都是按线性放大优化的,当比较器用会出现一系列性能折扣。下面我把这些硬伤一个个讲清楚。
1.2 运放改比较器的几个硬伤
第一个硬伤是响应速度。通用运放为了稳定性,内部做了频率补偿,典型增益带宽积(GBW)只有1MHz到10MHz,压摆率(SR)只有0.5V/us到20V/us。比如LM358的压摆率典型值只有0.6V/us,输入信号越过阈值后,输出电压要爬到高电平,需要的时间大概是输出摆幅除以压摆率。假设供电5V,输出摆幅约4V,翻转时间就是4 / 0.6 ≈ 6.7us。对于几十赫兹的慢信号这无所谓,但如果是几十千赫兹的PWM或传感器脉冲,这个速度就不够看了。
第二个硬伤是输出摆幅。运放的输出级通常设计成轨到轨输出,或者接近电源轨输出,但很多运放在接近电源轨时会进入饱和区,输出无法真正拉到电源电压。LM358的输出高电平在轻负载下比电源低1.5V左右,这就意味着逻辑电平可能不够高。如果后面接单片机IO,可能读不到稳定高电平。
第三个硬伤是相位反转(Phase Reversal)。部分运放在输入共模电压超过允许范围时,输出会意外反相。比如输入信号低于负电源轨或者接近负轨时,输出可能突然从低翻到高,这在比较器应用里是非常危险的误导信号。虽然现代运放很多已经做了防反相设计,但老型号比如LM358的早期版本就有这个毛病,要注意数据手册里的输入共模电压范围。
第四个硬伤是缺少迟滞。比较器芯片内部通常有迟滞设计,比如LM393内部就有几毫伏的迟滞,而运放为了线性放大恰恰把正反馈去掉,直接开环使用时,当输入信号在阈值附近慢慢变化,输出会进入线性区,在阈值附近抖动,产生振铃和反复翻转。这是运放改比较器最典型的问题,也是本文要重点解决的。
1.3 先搞清楚你要解决什么问题
所以在动手之前,先问自己三个问题:信号频率是多少?输出要接什么负载?阈值翻转精度要求多高?
信号频率决定你能不能忍受运放的慢响应,输出负载决定你需不需要加输出级或电平转换,阈值精度决定你需不需要额外校准。把这三个问题想清楚,再决定用哪种电路。如果信号变化很慢,比如温度传感器、电池电压监测,那开环直接用运放问题不大。如果信号是PWM、编码器输出、过零检测,那迟滞设计和输出处理就必不可少。
2. 第一种电路:开环直接改比较器
2.1 最原始也最简单的电路结构
先看最简单的方案,把运放开环使用,同相端接参考电压,反相端接输入信号,或者说反过来。以LM358为例,电路是这样的:
- 反相输入端接输入信号Vin
- 同相输入端接参考电压Vref(由电阻分压得到)
- 输出端直接接负载
当Vin小于Vref时,同相端电位高于反相端,输出接近正电源电压;当Vin大于Vref时,反相端电位高于同相端,输出接近负电源电压(单电源时接近GND)。
这里有个关键点:运放开环增益极高,只需要几毫伏的差分输入变化,输出就能从一端摆到另一端。所以这个电路本质上就是一个1bit量化器,利用的是运放的高增益,而不是线性放大能力。
2.2 实际波形测试结果
我实测过一组数据,供电电压用5V单电源,LM358输出空载,Vref设为2.5V,输入信号用信号发生器输出1kHz正弦波,幅值2V偏置2.5V。示波器CH1接输入,CH2接输出。
实测波形特征如下:
- 当输入正弦波在2.5V附近穿越时,输出从约3.8V跳到约0.2V,跳变沿存在约6us的过渡时间
- 在输入信号缓慢穿过阈值的瞬间(比如用0.1Hz三角波测试),输出在阈值附近出现明显抖动,波形上能看到多次快速翻转
- 输出低电平约为0.2V,高电平约为3.8V,离电源轨各差1V以上
6us的边沿对于低频应用问题不大,但0.1Hz三角波测试暴露的问题很致命:输出在阈值附近来回抖动,这不是信号本身造成的,而是运放噪声和输入信号叠加后,在阈值点附近反复跨越导致的。这种抖动在后级电路里可能被当成了有效脉冲,产生误动作。
2.3 这种接法的适用场景和限制
开环直改最大的优势是简单,两个电阻分压给参考电压,运放接上就完事。适合用在信号变化速度慢、阈值翻转不频繁、翻转精度要求不高的场景,比如电池低压报警、光敏电阻阈值检测。
限制也很明显:没有迟滞导致噪声敏感,输出摆幅不够导致后级逻辑不可靠,响应慢导致高频信号失真。所以只要条件允许,我非常建议在第二种电路上加迟滞,代价只是多两个电阻,效果完全是天壤之别。
3. 第二种电路:带回差的迟滞比较器
3.1 为什么必须加迟滞
迟滞这个词听起来高大上,其实原理就是正反馈。把输出电压反馈一部分到同相输入端,让参考电压跟着输出状态变:输出为高时,参考电压抬高一点;输出为低时,参考电压降低一点。表现出来就是“翻转阈值”不再是一个固定值,而是两个阈值,一个是上升沿触发阈值,一个是下降沿触发阈值,两个阈值之间的差值就是回差电压,也叫迟滞宽度。
这个设计解决什么问题?举个例子,输入信号在2.5V阈值附近来回波动,幅度0.1V,如果没有迟滞,输出会跟着来回翻转。有了迟滞,只要信号波动范围小于回差,输出状态就保持稳定,不会乱跳。这就像空调温控的设定温度一样,制冷到25度停机,回温到27度再启动,中间2度的差值就是为了防止压缩机频繁启停。迟滞比较器就是电子版的空调温控。
3.2 经典反相输入迟滞比较器电路推导
最常用的迟滞比较器结构是:输入信号从反相端进入,同相端接电阻分压网络,分压网络同时连接参考电压和输出端。这个电路我实际用得很频繁,参数计算也不复杂。
电路连接如下:
- 反相输入端接输入信号Vin
- 同相输入端通过R1接地,通过R2接输出端Vout,同时通过R3接参考电压Vref
- 输出端直接接负载
同相端的电压由三个源共同决定:R1到地、R2到输出、R3到参考电压。用叠加定理可以算出来:
当输出为高电平VOH时,同相端电压:
Vth+ = (Vref / R3 + VOH / R2) / (1/R1 + 1/R2 + 1/R3)
当输出为低电平VOL时,同相端电压:
Vth- = (Vref / R3 + VOL / R2) / (1/R1 + 1/R2 + 1/R3)
回差电压:
Vhyst = Vth+ - Vth- = (VOH - VOL) * R2R3 / (R1R2 + R2R3 + R1R3) 中的对应项化简
简化计算的方法是忽略R3的影响,把R1和R2构成的分压网络单独看:回差约等于 (VOH - VOL) * R1 / (R1 + R2)?这里要注意方向。
我实测常用的方法是先固定R1和R3,然后调R2控制回差。为了方便理解,我给出一个更常用的简化结构:同相端接R1到地、R2到输出,参考电压直接通过电阻R3接到同相端,公式就是上面的三电阻叠加形式。
我每次设计时都这样操作:先根据需要的翻转阈值选择R3和R1的比例,再根据需要的回差计算R2。一个实际例子:5V供电,LM358输出高电平3.8V,低电平0.2V,希望回差0.5V,R1取10k,R2取多少?用公式 Vhyst = (VOH - VOL) * R2 / (R1 + R2) 算,0.5 = 3.6 * R2 / (10k + R2),解得R2约1.6k。然后把参考电压电阻R3选一个合适的值(比如20k),再微调。
3.3 迟滞宽度到底留多少合适
回差太小,抗噪声效果不明显;回差太大,阈值精度变差,信号翻转点会偏移很多。我个人的经验法则是:回差至少大于输入信号噪声峰峰值的2倍,同时小于信号有效幅度的10%。比如信号噪声是20mV,那回差至少要40mV。如果信号幅度5V,回差最大留500mV,否则阈值偏移会影响检测精度。
这里还要注意一个很多人忽略的问题:参考电压不是固定不变的,它跟着输出状态变。所以如果后级需要精确知道翻转阈值,就要把两个阈值都算清楚,而不是只算一个。比如你希望输入上升到2.6V时输出翻低,下降到2.4V时输出翻高,那就要分别设计Vth+和Vth-,然后根据这两个值反推电阻网络。用上面的三电阻叠加公式,可以联立两个方程求解R1、R2、R3的值。
实际项目中我不太手工解方程,直接写个小脚本算,或者用仿真软件调。但公式一定要理解,否则电阻稍微换一下,信号翻转点会跑得你怀疑人生。
3.4 迟滞比较器的实测波形
还是5V供电,LM358,输入1kHz正弦波,Vref设计为2.5V,回差设计0.5V。实测结果如下:
- 输入信号上升穿过Vth+(约2.72V)时,输出从高翻到低
- 输入信号下降穿过Vth-(约2.22V)时,输出从低翻到高
- 输出边沿的抖动现象完全消失,即使在阈值点附近有噪声叠加,输出也稳定单一
- 翻转边沿时间仍然在6us左右,这是因为运放压摆率没变,迟滞只解决稳定性,不解决速度
对比开环直改的波形,迟滞带来的改善非常直观。原本在阈值点附近会出现一连串毛刺,现在变成了干净的方波。就为这个改善,多花两个电阻完全值得。
4. 第三种电路:反相输入同相输出的滞回比较器与输出钳位处理
4.1 同相迟滞结构和翻转方向怎么选
前面讲的是输入信号从反相端进、参考电压在同相端的结构,这种结构输出和输入是反相关系:输入升高,输出翻低。但有些场景需要同相关系:输入升高,输出也翻高。这时候可以改用同相输入迟滞比较器,也就是输入信号从同相端进入,反相端接参考电压,反馈电阻从输出接到同相端。
这个电路的阈值计算和第二种类似,但方向相反。设计时要特别注意:同相输入结构的迟滞方向会让输入信号上升时阈值和下降时阈值的位置不同,实际波形往往是输入升高时输出翻高,然后在更低的输入电压处才翻低,形成一种“先高后低”的检测窗口。这种特性很适合做窗口比较器或者接近开关检测。
4.2 输出电平转换:运放输出不能直连后级怎么办
第三种经典电路的重点其实是输出处理。很多运放直接改比较器后,输出高电平达不到逻辑高电平要求。比如LM358用5V供电,输出高电平实测3.8V,如果后级单片机是3.3V供电,3.8V直接进IO虽然大多数情况不会烧,但已经到了绝对最大额定值边缘,长期使用有风险。反过来,如果运放用12V供电,输出高电平11V左右,直接接3.3V单片机IO,那就等着冒烟吧。
解决办法有几种:
- 电阻分压:输出串一个10k电阻,再并一个6.8k电阻到地,把11V分压成4.4V左右,但这个方案带载能力差,后级输入阻抗不够高时阈值会漂
- 稳压管钳位:输出经过一个5.1V稳压管到地,高电平时被钳在5.1V,适合给5V系统用
- 二极管钳位:输出通过一个肖特基二极管接到3.3V电源,输出高电平时被钳在3.3V+0.3V左右,适合给3.3V系统用
- 最靠谱的方案:输出接一个NMOS或者逻辑电平三极管做电平转换,彻底隔离电源域
我实际项目里最常用的是稳压管钳位,因为元件少、速度够快、静态功耗可控。但要注意稳压管有结电容,高速信号下会影响边沿,信号频率超过100kHz时要仔细验证。
4.3 完整电路的实测波形结果
我搭过一个完整的例子:12V供电的TL072,输入0到10V的锯齿波,参考阈值设在5V,迟滞1V,输出经过5.1V稳压管钳位后接单片机IO。
实测结果:
- 锯齿波上升穿过Vth+约5.4V时,输出翻转高电平
- 锯齿波下降穿过Vth-约4.4V时,输出翻转低电平
- 稳压管钳位后,高电平稳定在5.0V,低电平0.3V,后级IO读到的逻辑电平完全正常
- 输出边沿时间约3us,TL072的压摆率比LM358高一些(13V/us典型值),所以更快
这个电路把运放改比较器的三个核心问题都覆盖了:迟滞抗干扰、钳位电平匹配、速度选择。如果你在实际项目里要做一个完整的运放比较器方案,照着这个思路设计基本不会翻车。
5. 核心参数、仿真工具与波形测试方法
5.1 GBW、SR、输出摆幅对比较器工作影响
既然是用运放当比较器,选型的时候就要专门看几个参数,不能随便抓一个运放就用。
增益带宽积GBW决定了运放在闭环线性应用中的带宽,但开环当比较器使用时,GBW的影响主要体现在小信号响应速度上。简单理解,GBW越高,运放内部放大器对小信号的响应越快,从阈值附近开始翻转的时间越短。LM358的GBW只有1.2MHz,翻转慢;NE5532是10MHz,快很多;TL072是4MHz,居中。如果你只需要几十kHz以下的翻转频率,1MHz的运放也能用,再高就建议选GBW高一点的型号或者直接用比较器芯片。
压摆率SR决定大信号跳变时输出能达到多快。运放输出从低到高摆动3.8V,如果SR是0.6V/us,就需要6.3us,这是大信号翻转的真实时间。SR越大,边沿越陡。对于高频PWM检波、过零检测这类场景,我会选SR不低于5V/us的运放。
输出摆幅这个词要重点看数据手册里的VOH和VOL。很多通用运放不是轨到轨输出,高电平离正电源轨有压差,低电平离负轨也有压差。如果是单电源供电,低电平往往离地还有0.1V到0.5V,这在后级逻辑里一般能接受,但高电平要特别留意。
5.2 用circuitjs先把电路跑一遍
动手焊板之前,我强烈建议先用仿真软件把电路跑一遍。我常用的工具是circuitjs,网页版、免安装、打开就能用,对学生和工程师都很友好。
在circuitjs里搭运放比较器有个关键点:运放默认模型的增益可能不够大,导致输出翻转不干脆。你需要把运放模型的增益参数改成很大,比如1000000,也就是10的6次方级别,这样开环使用时输出才会迅速摆到电源轨。具体操作是:放置运放元件后,双击打开参数设置,找到增益(Gain)选项,默认值可能是1000或100000,改成1e6,再跑瞬态仿真就能看到接近理想比较器的翻转曲线。
仿真时我会做这么几件事:
- 输入信号用正弦波或者三角波,频率设成实际工作频率
- 在阈值附近故意叠加一个噪声源,验证迟滞是否有效
- 用示波器探针直接看输出波形,测量翻转时间和回差大小
仿真最大的价值是可以快速验证电阻参数算没算对。我之前遇到过回差算错的情况,仿真跑出来发现翻转点差了几百毫伏,一检查是公式里把R1和R2的位置搞反了,改过来就正常了。这种错误在实物上排查可费劲多了。
5.3 示波器实测的接线方法和注意事项
仿真没问题之后,实际测试要注意几个细节。
第一,探头地线要尽量短。比较器电路的输出边沿虽然不快,但地线环路太大容易引入噪声,示波器探头用接地弹簧比接鳄鱼夹好得多。
第二,测量翻转阈值时用直流耦合。如果是交流耦合,示波器会隔直,你看到的波形是去掉直流分量后的形状,阈值参考点就看不准了。
第三,要同时测量输入和输出两个通道,这样翻转点和输入波形的关系才能看清楚。建议触发设置在输出通道上,用上升沿或下降沿触发,再看输入通道在翻转时刻的电压值,那个电压就是实际的阈值。
第四,如果发现边沿有明显的振铃,先检查探头补偿是否正确。很多时候输出波形上的毛刺并不是电路产生的,而是探头没校准。10倍衰减探头要在示波器里设置成对应的衰减比,并调整补偿电容,让方波边沿没有过冲。
6. 常见问题与排查技巧实录
6.1 翻转阈值和计算值对不上
这是我最常遇到的问题。明明算好了2.5V翻转,实测却是2.8V才翻。排查方向按优先级排序:
先查参考电压是否准确。电阻分压的参考电压会受到运放输入偏置电流影响,尤其是用大阻值电阻时。LM358的输入偏置电流典型值50nA,如果分压电阻用到1M,偏置电流产生的压降就有50mV,够把阈值推偏。解决办法是用小一点的电阻,比如10k级别,或者用电压基准源代替分压。
再查运放的输入失调电压VOS。通用运放的失调电压在1mV到5mV之间,对于阈值精度要求高的应用,这个偏差很致命。解决方法是选低失调运放,或者在软件里做校准。
最后查回差的方向。很多人算迟滞只算了一个阈值,忽略了输出高低两个状态下同相端电压不一样。如果实际接线和计算用的拓扑不一致,翻转点可能整个偏移。
6.2 输出在阈值附近疯狂振荡
这个问题的原因和解决办法在前面已经讲过了,本质是没有迟滞。但还有一种情况是已经有了迟滞,回差也很小,比如只有10mV,输入噪声有30mV,那照样会振荡。解决办法就是把回差调大,至少覆盖噪声峰峰值。
还有一种隐蔽的振荡原因是电源去耦不良。运放从低电平翻到高电平时,瞬间电流变化很大,如果电源引脚旁边的去耦电容离得太远,电源电压会被拉低,然后运放又因为电源跌落产生误翻转。每个运放的电源引脚旁边都就近放一个0.1uF陶瓷电容,这是模拟电路的铁律。
6.3 运放输出翻转慢,边沿不够陡
如果信号频率不高,边沿慢一点无所谓。但如果你要让后级电路在边沿触发时可靠工作,比如计数器、边沿中断,那慢边沿会导致触发时间点不确定,甚至误触发。
提高翻转速度的办法有四条:换更高压摆率的运放,比如把LM358换成TL072、NE5532;降低电路中的负载电容,输出线尽量短,不要驱动长线;检查反馈电阻是否过大,因为反馈网络和运放输入电容会形成低通滤波;直接把运放换成专用的比较器芯片,比如LM393、LM311,这是最彻底的办法。
我个人的态度是:如果信号频率超过100kHz,或者边沿要求低于1us,那就干脆别用运放了,直接用比较器芯片。比较器芯片是专门为这种情况优化的,价格也不贵,没必要在运放上死磕。
6.4 我踩过的坑和经验总结
最后分享几个我自己的实践教训。
第一个坑是选型只看增益带宽积,忽略了压摆率。有一次我要做一个1kHz方波的边沿检测,想着LM358的GBW有1.2MHz,应该够用,结果实测输出边沿有6us,导致后级MCU的中断响应时间点抖动。后来换成TL072,边沿降到2us以内,问题解决。
第二个坑是参考电压分压电阻取值太大。我习惯用100k电位器调阈值,结果发现电位器转一点,阈值跳一大截,而且温漂明显。后来用10k电位器加固定电阻串联,精度和稳定性都好了很多。
第三个坑是忽略了迟滞对阈值精度的影响。有次做电池电压监测,回差设置太大,导致放电报警阈值为3.0V,充电恢复阈值却是3.3V,用户体验很差。后来把回差改小到0.1V,同时在后级软件里做消抖,效果反而更好。这个经验是想说:迟滞不是越大越好,能用软件消抖就别一味加大回差。
第四个坑是输出接容性负载。运放输出直接接一个0.1uF滤波电容,结果边沿变得很慢,方波变成了圆弧。后来在输出和电容之间串了一个100欧电阻,边沿恢复也保留了滤波作用。
这些经验如果用一句话总结就是:运放改比较器是一个可行的“权宜之计”,但你要清楚它和专用比较器的性能边界在哪里。做原型验证、低频检测、低成本项目,运放改比较器完全够用;做高速、高可靠、高精度的系统,该上专用比较器就上,别省那颗料钱。