1. 从一个翻车案例聊起:为什么比较器总在阈值附近抽风
刚入行那会儿,我用LM393搭了一个最简单的过压检测电路,反相输入端接基准电压,同相输入端接分压后的被测信号,输出直接拉到单片机IO口。理论上被测电压超过阈值时输出翻转,干净利落。结果实测波形让我怀疑人生——输入信号在阈值附近稍微有一点毛刺,输出就疯狂抖动,单片机中断被触发得停不下来,整个系统像得了帕金森。
后来把示波器探头挂到输出端才看明白:比较器不是运放,它没有负反馈,开环增益又极大,输入只要在阈值附近有哪怕几毫伏的噪声,输出就会在高低电平之间反复横跳。这个问题在单限比较器上几乎是必然的,解决它的核心手段就是引入正反馈构成滞回比较器,或者干脆用窗口比较器把判断区间拉开。
这篇文章就把单限、滞回、窗口这三种比较器从原理到波形一次讲透。不管你是刚学模电的学生,还是需要做电池过放保护、信号整形、电平检测的硬件工程师,这三类电路都是绕不开的基本功。我会用LM393和LM358这两个最常见的器件做例子,把参数计算过程、实测波形特征、踩过的坑都摊开来讲,争取让你看完就能直接抄作业。
2. 先搞清楚比较器和运放到底差在哪
2.1 开环与闭环:一个被忽略的本质区别
很多人第一次接触比较器时会想:运放也能当比较器用啊,为什么还要专门买LM393?这个问题问到点子上了,但答案不只是"专用芯片便宜"这么简单。
运放设计时追求的是闭环线性放大,它的内部电路为了保证闭环稳定性做了频率补偿,压摆率通常被压得很低。你拿LM358当比较器用,输入突变时输出从低到高爬升需要好几微秒甚至十几微秒,波形边沿是斜的。而LM393这类专用比较器没有内部补偿,压摆率快得多,输出边沿陡峭,传播延迟典型值只有1.3微秒。做高速信号整形时,这个差别是致命的。
另一个关键点是输出结构。LM358是推挽输出,高电平接近电源正轨,低电平接近地。LM393是集电极开路输出,必须外接上拉电阻才能输出高电平。这个"缺点"其实是优点——上拉电阻可以接到比比较器供电更高的电压上,比如比较器用5V供电,上拉接到12V,输出就能直接驱动12V逻辑的电路,电平转换都省了。
注意:集电极开路输出意味着多个LM393的输出可以直接并联在一起实现"线与"逻辑,只要共用一个上拉电阻。这个特性在做过流保护的多路汇总时特别好用。
2.2 比较器的三种工作模式概览
从阈值特性来分,比较器就三类:
- 单限比较器:只有一个阈值电压,输入高于它输出一种状态,低于它输出另一种状态。电路最简单,但抗噪能力最差。
- 滞回比较器:有两个阈值,上限VTH+和下限VTH-,输入从低往高走时在VTH+翻转,从高往低走时在VTH-翻转。两个阈值之间的差值叫回差电压,专门用来吃掉噪声。
- 窗口比较器:判断输入是否落在某个区间内,需要两个单限比较器配合,输出只在输入处于窗口内(或窗口外)时有效。
下面这张表先把三者的核心差异摆出来,后面再逐个展开。
| 类型 | 阈值数量 | 抗噪能力 | 电路复杂度 | 典型应用 |
|---|---|---|---|---|
| 单限比较器 | 1个 | 弱 | 最低 | 简单电平检测、过零检测 |
| 滞回比较器 | 2个 | 强 | 中等 | 信号整形、按键消抖、过压保护 |
| 窗口比较器 | 2个 | 中等 | 较高 | 电池电量区间判断、电压合格检测 |
3. 单限比较器:最简单的起点,也是坑最多的起点
3.1 电路结构与阈值计算
单限比较器的基本结构就两种:反相输入和同相输入。
反相输入单限比较器:基准电压VREF接同相输入端,被测信号Vin接反相输入端,输出通过上拉电阻接VCC。当Vin < VREF时,同相端电位高于反相端,输出高电平;当Vin > VREF时,输出低电平。阈值就是VREF本身。
同相输入则反过来:Vin接同相端,VREF接反相端。Vin > VREF时输出高,Vin < VREF时输出低。
基准电压的生成通常用电阻分压。假设VCC=5V,要得到2.5V阈值,用两个10k电阻分压即可。但这里有个细节:分压电阻的阻值不能太大,否则比较器输入偏置电流会在电阻上产生附加压降,导致实际阈值偏离设计值。LM393的输入偏置电流典型值25nA,如果分压电阻用1MΩ,附加压降就是25mV,对于精度要求高的场合已经不能忽略了。一般建议分压电阻在10kΩ量级,同时兼顾功耗。
3.2 实测波形与抖动问题
我用信号发生器给反相输入端送一个1kHz、幅度3V、偏置2.5V的正弦波,阈值设在2.5V。理论上输出应该是占空比50%的方波。实测波形确实翻转了,但翻转点附近有密集的毛刺,输出在高低之间跳了好几次才稳定下来。
原因前面说了:输入信号在穿越阈值时变化率有限,叠加电源噪声和空间干扰后,实际输入在阈值附近来回穿越。比较器增益极高,每一次微小穿越都被放大成完整的逻辑翻转。
用示波器看输入信号,在阈值附近的噪声峰峰值大约20mV。这意味着输入在阈值±10mV范围内时,输出状态是不确定的。如果后级是单片机中断,这10mV的窗口就足以产生几十次误触发。
提示:单限比较器不是不能用,而是要用在输入信号边沿足够陡、噪声足够小的场合。比如把正弦波整形成方波,如果信号幅度远大于噪声,单限比较器完全够用。但如果是缓慢变化的直流信号做阈值判断,单限比较器就是灾难。
3.3 单限比较器的适用边界
那单限比较器到底什么时候能用?我的经验是看两个条件:输入信号穿越阈值时的斜率,以及噪声幅度。
如果输入是方波、脉冲这类边沿陡峭的信号,穿越阈值的时间极短,噪声来不及影响,单限比较器没问题。过零检测电路就是典型例子,输入是交流信号,过零点斜率大,用单限比较器做出来的方波很干净。
如果输入是缓慢变化的信号,比如电池电压慢慢下降、温度传感器输出慢慢漂移,那单限比较器必然抖动。这时候要么加滞回,要么在软件里做多次采样确认。
还有一个容易被忽略的点:单限比较器的输出上拉电阻取值。上拉电阻太小,输出低电平时比较器内部输出管的灌电流大,功耗高;上拉电阻太大,输出高电平的上升沿变缓,因为输出电容和上拉电阻构成RC充电。LM393输出电容约几个pF,加上PCB走线电容,如果上拉电阻用100kΩ,上升时间可能达到微秒级。一般上拉电阻取4.7kΩ到10kΩ比较均衡。
4. 滞回比较器:用正反馈把噪声吃掉
4.1 正反馈是怎么产生两个阈值的
滞回比较器的核心就一句话:把输出的一部分反馈到同相输入端,形成正反馈。
以反相滞回比较器为例:Vin接反相端,同相端通过一个电阻网络同时接基准电压VREF和输出Vo。当输出是高电平时,同相端电位被输出拉高,此时阈值是VTH+;当输出是低电平时,同相端电位被输出拉低,阈值变成VTH-。输入从低往高走时,要超过VTH+才能让输出翻低;输出翻低后阈值自动降到VTH-,输入要降到VTH-以下才能让输出翻回高。
两个阈值之间的差值就是回差电压,也叫迟滞宽度。噪声幅度只要小于回差电压,就不会引起误翻转。
4.2 回差电压的计算与电阻选型
反相滞回比较器的阈值公式推导如下。设同相端接两个电阻:R1从VREF到同相端,R2从输出到同相端。根据叠加定理,同相端电位:
V+ = VREF × R2/(R1+R2) + Vo × R1/(R1+R2)
当Vo为高电平VOH时:
VTH+ = VREF × R2/(R1+R2) + VOH × R1/(R1+R2)
当Vo为低电平VOL时:
VTH- = VREF × R2/(R1+R2) + VOL × R1/(R1+R2)
回差电压:
ΔV = VTH+ - VTH- = (VOH - VOL) × R1/(R1+R2)
如果比较器是集电极开路输出,上拉到VCC,则VOH≈VCC,VOL≈0,回差简化为:
ΔV = VCC × R1/(R1+R2)
这个公式很直观:回差电压由电源电压和两个反馈电阻的比值决定。要增大回差,就增大R1或减小R2。
举个实际设计的例子。VCC=5V,我希望回差电压是100mV,用来覆盖实测的20mV噪声并留足余量。代入公式:
0.1 = 5 × R1/(R1+R2)
R1/(R1+R2) = 0.02
如果取R2=100kΩ,则R1=2.04kΩ,取标准值2kΩ。验证一下:R1=2kΩ,R2=100kΩ,ΔV = 5 × 2/102 ≈ 98mV,接近100mV,可以接受。
中心阈值由VREF和电阻分压决定。如果VREF=2.5V,同相端在输出高低电平之间的中心电位约为:
Vcenter = VREF × R2/(R1+R2) + (VOH+VOL)/2 × R1/(R1+R2)
代入数值:Vcenter ≈ 2.5 × 0.98 + 2.5 × 0.02 = 2.5V。也就是说中心阈值就是VREF,回差对称分布在2.5V两侧,VTH+≈2.55V,VTH-≈2.45V。
注意:上面的计算假设VOH等于VCC。实际上LM393输出高电平时,上拉电阻上的压降取决于负载电流,如果后级输入阻抗不高,VOH会低于VCC,回差会略小于计算值。精密场合要把这个因素算进去。
4.3 实测波形:从抖动到干净翻转
同样的1kHz正弦波输入,换成滞回比较器后,输出波形立刻干净了。输入在2.45V到2.55V之间时,输出保持之前的状态不变,只有输入真正越过2.55V或跌破2.45V时才翻转。示波器上看到的输出方波边沿锐利,没有毛刺。
这里有个观察值得说:滞回比较器的输出方波占空比不再严格对应输入过阈值的时间比例,因为上下阈值不对称于信号中心时,高电平和低电平的持续时间会不同。如果输入是三角波,输出方波的占空比会偏离50%,偏离程度取决于回差电压和信号幅度的比值。做精密脉宽调制时要留意这一点。
另外,滞回比较器的翻转点有传播延迟。LM393的延迟约1.3微秒,输入频率很高时,输出波形会相对输入有明显的相位滞后。100kHz以下的应用基本可以忽略,再高就要选高速比较器了。
4.4 滞回比较器的典型应用场景
滞回比较器最经典的应用是按键消抖。机械按键按下和释放时,触点会在几毫秒内多次通断,产生一串脉冲。用滞回比较器配合RC积分,可以把这串脉冲整形成一个干净的边沿。回差电压设得比触点抖动幅度大即可。
另一个场景是电池过放保护。锂电池电压降到3.0V时应该切断负载,但如果负载切断后电压回弹到3.2V,单限比较器会重新接通负载,然后电压又降到3.0V,如此反复振荡。滞回比较器设定3.0V为下限、3.3V为上限,切断后要等电压回到3.3V以上才重新接通,彻底消除振荡。
还有信号整形。从传感器来的信号往往带有噪声,用滞回比较器可以提取出干净的方波,送给单片机计数或做频率测量。
5. 窗口比较器:判断电压是否落在合格区间
5.1 两个单限比较器如何组合出窗口
窗口比较器要回答的问题是:输入电压是否在VTL和VTH之间?这需要两个比较器分别判断上下限。
典型电路用两个LM393。第一个比较器判断Vin是否高于下限VTL,第二个判断Vin是否低于上限VTH。两个比较器的输出通过二极管或直接线与后接一个上拉电阻。只有当Vin同时高于VTL且低于VTH时,两个比较器输出都是高电平(集电极开路输出线与后仍为高),最终输出高电平表示"在窗口内"。否则任何一个比较器输出低,线与结果就是低。
也可以反过来接,让输出低电平表示"在窗口内",取决于后级电路的逻辑需求。
5.2 窗口边界的独立设定技巧
窗口比较器的两个阈值可以独立设定,这是它比滞回比较器灵活的地方。滞回比较器的两个阈值由同一组电阻决定,中心点和回差耦合在一起;窗口比较器的上下限各用一套分压网络,互不影响。
设定下限VTL时,用电阻分压从VREF得到VTL,接到第一个比较器的一个输入端。设定上限VTH时,另用一套分压得到VTH,接到第二个比较器。两套分压网络独立,可以任意设定窗口宽度和中心位置。
但这里有个实际问题:两套分压网络会消耗额外的静态电流,而且分压电阻的误差会直接影响阈值精度。如果对精度要求高,可以用一个基准电压芯片(比如TL431)产生精确的VREF,再用精密电阻分压。TL431的成本很低,但基准精度比电阻直接分VCC高一个数量级。
5.3 窗口比较器的波形特征与输出逻辑
输入一个缓慢上升再缓慢下降的三角波,窗口比较器的输出是一个脉冲:当输入进入窗口时输出有效,离开窗口时输出无效。如果输入在窗口内时输出高,那么输出脉冲的宽度对应输入在窗口内的时间。
实测时要注意,两个比较器的传播延迟可能略有差异,导致输出脉冲的边沿和输入穿越窗口边界的时间有微小偏差。对于低速信号无所谓,高速时要在软件里做补偿。
输出逻辑的选择也很关键。有些应用需要"窗口内报警",有些需要"窗口外报警"。前者用线与后输出高表示窗口内,后者加一个反相器或者交换比较器的输入极性即可。
提示:窗口比较器判断的是瞬时值。如果输入信号有噪声,在窗口边界附近输出仍然会抖动。要彻底解决,可以在窗口比较器的基础上再加滞回,或者对输入信号先做RC低通滤波。这是很多初学者容易忽略的叠加问题。
6. 器件选型与实操细节:LM393和LM358到底怎么选
6.1 LM393与LM358的关键参数对比
| 参数 | LM393 | LM358 |
|---|---|---|
| 类型 | 双电压比较器 | 双运算放大器 |
| 输出结构 | 集电极开路 | 推挽 |
| 传播延迟 | 1.3μs(典型) | 不适合做比较器 |
| 输入偏置电流 | 25nA | 45nA |
| 输入失调电压 | ±2mV | ±3mV |
| 供电范围 | 2V~36V | 3V~32V |
| 输出上拉 | 必须外接 | 不需要 |
LM393的输入失调电压直接影响阈值精度。±2mV的失调意味着实际阈值可能偏离设计值2mV。对于回差100mV的滞回比较器,2mV的偏移可以忽略;但对于精密窗口比较器,2mV可能就是不能接受的误差。这种情况下要选失调更小的比较器,比如LM311(失调±7.5mV,但速度更快)或者更精密的型号。
6.2 上拉电阻的计算与选择
LM393必须外接上拉电阻。上拉电阻的取值要平衡三个因素:上升沿速度、功耗、输出低电平时的灌电流。
上升时间估算:t_rise ≈ 2.2 × R_pull × C_load。假设C_load=10pF(包括比较器输出电容和PCB走线),要求上升时间小于1μs,则R_pull < 1μs/(2.2×10pF) ≈ 45kΩ。
灌电流限制:LM393输出低电平时,内部输出管能灌入的电流有限,典型值16mA。如果上拉电阻太小,比如1kΩ接5V,灌电流5mA,在安全范围内。但如果上拉接12V、电阻1kΩ,灌电流12mA,接近极限,长期工作可能影响可靠性。
功耗考虑:上拉电阻在输出低电平时持续消耗电流。电池供电的设备要选大一点的上拉电阻,比如100kΩ,代价是上升沿变缓。
综合下来,5V系统里上拉电阻取4.7kΩ到10kΩ是最常见的折中。12V系统取10kΩ到22kΩ。
6.3 电源去耦与布局要点
比较器对电源噪声很敏感,尤其是单限比较器。每个比较器的电源引脚旁边必须放一个0.1μF的陶瓷电容,位置尽量靠近引脚。如果板上还有数字电路,再并一个10μF的钽电容做低频去耦。
布局上,基准电压的分压电阻要远离发热元件和开关节点。输入走线尽量短,避免和输出走线平行,防止输出跳变通过寄生电容耦合回输入。滞回比较器的正反馈电阻要靠近同相输入端,减少走线电感的影响。
注意:面包板搭比较器电路时,抖动会比PCB上严重得多。面包板的接触电阻和分布电容都很大,电源和地的阻抗也高。如果面包板上调试成功,PCB上通常更稳定;反过来,面包板上抖动不代表电路设计有问题,先检查面包板的电源和地。
7. 常见问题速查与排查思路
7.1 输出不翻转或翻转点严重偏离
先量基准电压。用万用表直接测同相端(或反相端)的电压,看是否等于设计值。如果偏离,检查分压电阻是否焊错、虚焊,或者比较器输入引脚是否被拉低/拉高。
再量输入信号。确认信号确实到达了比较器输入端,幅度和偏置都在预期范围内。有时候信号发生器输出阻抗高,接到比较器输入端后被输入偏置电流拉偏了。
最后检查输出上拉。集电极开路输出没有上拉电阻永远不会变高。量一下输出端在应该为高的时候是否有电压,如果没有,上拉电阻可能没接或虚焊。
7.2 输出在阈值附近抖动
这是单限比较器的通病。解决方案按优先级排序:
- 在输入信号上并联一个小电容(比如100nF)做低通滤波,把高频噪声滤掉。
- 改成滞回比较器,加正反馈电阻。
- 如果后级是单片机,在软件里做多次采样确认,连续N次读到相同状态才认为有效。
7.3 滞回比较器回差不对
先确认输出高低电平的实际值。如果上拉电阻太大或负载太重,VOH可能明显低于VCC,导致实际回差小于计算值。用示波器量输出波形的高低电平,代入公式重新算。
再检查反馈电阻。R1和R2的比值决定回差,如果焊错了电阻值,回差会差很多。用万用表量一下两个电阻的实际阻值。
还有一种情况:比较器的输入偏置电流在反馈电阻上产生附加压降,改变了阈值。如果反馈电阻很大(比如1MΩ),这个影响就明显了。减小反馈电阻到100kΩ量级可以缓解。
7.4 窗口比较器输出逻辑反了
检查两个比较器的输入极性。窗口比较器需要两个比较器分别判断上下限,如果其中一个的输入接反了,输出逻辑就会错。用万用表逐点测量,确认每个比较器在输入高于/低于其阈值时的输出状态。
线与逻辑也要检查。两个集电极开路输出直接连在一起时,只要有一个输出低,线与结果就是低。如果希望"窗口内输出高",两个比较器在窗口内都应该输出高(即输出管截止)。如果其中一个在窗口内输出低,逻辑就反了。
7.5 高频时输出波形失真
传播延迟导致的。LM393的1.3μs延迟在100kHz时对应13%的周期,输出方波的边沿会明显滞后于输入过阈点。如果输入频率超过50kHz,建议换高速比较器,比如LM311(延迟约200ns)或TLV3501(延迟约4.5ns)。
另外,上拉电阻太大也会限制高频性能。高频时上拉电阻取小一点,比如1kΩ到2.2kΩ,牺牲功耗换速度。
8. 从波形反推电路状态:我的调试习惯
调比较器电路时,我习惯同时看三路波形:输入信号、基准电压、输出信号。示波器用三通道,输入和基准用直流耦合,输出用直流耦合加上拉。这样一眼就能看出翻转点是否和基准对齐、回差是否对称、输出边沿是否干净。
如果只有双通道示波器,就先看输入和输出,把输出翻转点和输入波形对照,大致判断阈值位置。然后再看基准和输出,确认基准是否稳定。
还有一个技巧:用示波器的余辉模式或者无限余辉,观察输出翻转点的分布。如果翻转点在水平方向上有明显的展宽,说明抖动严重;如果翻转点集中在一个很窄的范围内,说明电路稳定。这个技巧在调滞回比较器时特别好用,可以直观地看到回差是否足够覆盖噪声。
最后说一个我踩过的坑:有一次用LM393做电池低压检测,电路在实验室里工作正常,装到设备上后偶尔误触发。查了很久才发现,设备里的电机启动时电源瞬间跌落,导致基准电压也跟着跌,比较器误判。后来在基准分压电阻上并了一个大电容,让基准电压在电源瞬变时保持稳定,问题才解决。比较器的基准电压源必须比被测信号更稳定,这是铁律。