
1. 比較器為什么值得單獨拿出來講你手里有一顆模擬信號想判斷它是否超過某個閾值或者想把不規整的波形整形成單片機認識的方波甚至想用純硬件做一個越限報警器。這些需求背后都有一個共同的元器件電壓比較器。我這些年做過不少信號調理和嵌入式底層的項目最開始總習慣用運放湊合著做比較后來踩了幾次坑才明白比較器Comparator不是一個“開環用法下的運放”這么簡單它是一類專門為“快速判斷大小”而優化過的器件在閾值檢測、電平轉換、波形整形、窗口報警、振蕩電路這些場景里幾乎是不可替代的。這篇文章面向的是電子工程師、嵌入式開發者以及正在做硬件課設的同學們。如果你遇到過“運放做比較器反應太慢”“比較器輸出一直抖”“開漏輸出怎么接上拉”這類問題那這篇文章就是為你準備的。文章會從原理開始講給出一套選型思路、經典電路的計算方法和調試中的排坑實錄全部都是可以直接抄作業的內容。看完之后你應該能獨立設計一個穩定的閾值檢測電路并且知道用什么參數去挑選合適的比較器芯片。2. 核心原理與設計思路對比2.1 比較器和運放到底差在哪模擬電路教科書里有一句話運放工作在開環狀態時就是比較器。這句話理論上成立因為運放的開環增益極高正負輸入端只要有微小壓差輸出就會往電源軌方向跑。但工程上直接這么用往往不理想原因在于運放的設計目標不是“開環快速翻轉”而是“閉環穩定放大”。為了讓運放在負反饋下穩定工作內部做了頻率補償把帶寬壓得很低。常見的通用運放LM358單位增益帶寬只有1MHz左右壓擺率只有0.5V/us左右意味著輸入信號快速穿過閾值時輸出要花很長時間才能從低電平翻到高電平這在信號頻率稍高的場合直接導致波形畸變。比較器則反過來了它從設計第一天起就為開環工作優化。比較器內部沒有頻率補償電容各級放大器的工作點專門為“快速進入飽和區”設計所以傳輸延遲可以做到幾十納秒甚至幾個納秒級別。現代比較器如TLV3501傳輸延遲只有4.5ns而普通運放做開環比較輸出翻轉可能要花幾微秒。兩者的差距在高速信號檢測、過零檢測這類場景里是天壤之別。另一個關鍵差異在輸出級。通用運放輸出級是推挽結構滿擺幅輸出可以直接驅動后級。而大量比較器芯片尤其是老字號的LM393/LM311輸出級是集電極開路或者漏極開路結構必須外部接上拉電阻才能輸出高電平。這種設計的好處是輸出電平可以靈活匹配后級電路你可以用3.3V上拉讓比較器輸出3.3V方波給MCU也可以把多個比較器輸出并在一起構成線與邏輯。缺點就是新手容易忽略上拉電阻導致輸出始終被拉低或者高電平電壓不對。還有一個經常被忽略的點運放的輸入級通常做了相位補償輸入電壓超過共模范圍時輸出狀態不確定比較器則明確給出了“共模輸入范圍”以及“輸入超過電源軌時的行為描述”工程師用起來更有章可循。更專業的比較器還內置了遲滯或者可編程遲滯功能這就引出了下一個話題。2.2 遲滯為什么是剛需而不是可選項所謂遲滯Hysteresis是指比較器的翻轉閾值在輸出狀態變化時發生偏移。簡單說輸入電壓從低往高走時翻轉閾值為VTH從高往低走時翻轉閾值為VTH-兩個閾值之間的差叫遲滯寬度。為什么要故意做這種“不合理”的偏移因為真實世界的信號不可能是干凈的直流電平必然疊加噪聲。如果閾值是單一值當輸入信號在閾值附近抖動時比較器輸出會跟著反復翻轉產生一串高頻脈沖這叫做“振蕩”或“顫動”。我實測過一個沒有遲滯的比較器電路正弦波經過衰減后疊加了大約50mV的工頻紋波閾值恰好設置在波形的中點附近結果示波器上看到的輸出不是干凈的方波而是一簇密集的毛刺。加了遲滯之后只要遲滯寬度大于噪聲峰峰值輸出就是一次干凈的翻轉。設計中的核心原則是遲滯寬度至少要大于噪聲幅度的兩倍但又不能太大否則閾值誤差會超過系統允許范圍。很多現代比較器如TLV7022、MAX964內部集成了幾毫伏到十幾毫伏的固定遲滯對大多數應用已經夠用。老型號比如LM393沒有內置遲滯需要通過外部正反饋電阻網絡實現。外部加遲滯的方法也不復雜從輸出端接一個正反饋電阻到同相輸入端輸出為高時同相端電壓被抬高反之被壓低形成兩個閾值。計算方法在下文電路設計部分詳細展開。3. 核心參數拆解與選型方法3.1 必須看懂的關鍵性能參數選比較器不能只看“響應快不快”數據手冊里有幾個參數直接影響電路能否可靠工作逐個講清楚。第一個是傳輸延遲Propagation Delay定義為輸入信號跨過閾值開始到輸出翻轉至50%電平為止的時間。這個參數決定了你能處理多快的信號。如果做個簡單的經驗換算要可靠檢測一個方波信號比較器傳輸延遲最好小于信號周期的十分之一。比如檢測100kHz方波周期10us延遲最好小于1us普通的LM393延遲約1.3us就有點勉強檢測1MHz信號就得選延遲在100ns級別的芯片比如TLV3201延遲約40ns。第二個是輸入失調電壓Input Offset Voltage。它表示比較器實際翻轉電壓與理想閾值的偏差。LM393的失調電壓典型值在2mV左右高性能型可以做到0.5mV以下。這個參數直接決定了閾值檢測的絕對精度。如果你要做高精度窗口比較器閾值誤差預算要同時考慮失調電壓和遲滯寬度不能只盯著電阻精度。低失調比較器比如LMV331失調只有1mV價格也不貴適合對精度敏感的應用。第三個是輸入偏置電流Input Bias Current。比較器輸入端需要吸收或流出微小電流形成偏置雙極性輸入的LM393典型偏置電流約250nACMOS輸入的TS881只有1pA左右。對于高阻抗源比如pH傳感器、光電二極管跨阻輸出偏置電流在外部電阻上產生的壓降會造成很大的閾值誤差。舉個例子源阻抗100kΩ配LM393250nA偏置電流產生25mV誤差這對5mV的閾值來說完全是災難。這時候要么選CMOS輸入比較器要么在輸入端加緩沖放大器。第四個是輸出結構。開漏/開集輸出靈活但要外接上拉推挽輸出可以直接驅動后級但高電平被電源電壓鉗位。還有三態輸出比較器適合總線應用。選型時先確認后級需要什么電平再定輸出類型。比如接MCU用開漏加3.3V上拉能實現電平匹配驅動繼電器或LED不妨直接用推挽輸出的比較器加限流電阻省掉一級驅動電路。第五個是靜態電流Supply Current。電池供電的便攜設備里這個參數比響應速度更關鍵。比較器靜態電流從微安到毫安不等。當系統長期監聽傳感器信號、只在超限時喚醒MCU的場景下選靜態電流低于1uA的納米功耗比較器如TLV7011系列非常合適。相比之下LM393的靜態電流約0.4mA在電池應用里就偏大了。3.2 按場景選型而不是按芯片選型我接觸過的項目里比較器選型錯誤大多不是性能不夠而是沒有按場景需求抓主要矛盾。下面把典型場景和對應的選型思路整理一下供參考。閾值檢測、按鍵消抖這類低速場景不需要追求極致延遲重點看閾值精度和功耗。LM393、LMV331這類經典單/雙比較器價格低、貨源足、噪聲免疫好適合大部分緩慢信號判斷。輸入信號源阻抗高時換CMOS輸入的比較器比如TLV3691偏置電流以pA計。高速波形整形、時鐘恢復、過零檢測場景重點看傳輸延遲和壓擺率。TLV3501延遲4.5ns適合幾十MHz信號整形ADC驅動或者高頻PWM檢測可以用LT1719這類高速比較器但要注意電源去耦和PCB布線高速電路對布局要求很高。電池供電的閾值監控、喚醒電路重點是靜態電流和供電電壓范圍。比如體溫貼里的熱敏電阻閾值檢測選納米功耗比較器加上皮安級輸入偏置整機待機電流能做到微安級別。LTC1540這類納米功耗比較器自己帶基準源一個芯片解決閾值比較和參考電壓兩個問題。如果是工業現場信號調理共模電壓范圍和輸入保護更重要。比較器的兩個輸入端如果可能接觸到高壓干擾必須選帶輸入保護或者外界鉗位電路。LM393雖然有輸入保護二極管但也不能直接扛高壓常用做法是輸入端串電阻限流。工業場景下器件還要看工作溫度范圍-40℃到125℃的型號比商業級貴不了多少但可靠性高很多。4. 經典應用電路設計與實操計算4.1 過零檢測電路從正弦波到方波的最小系統過零檢測大概是比較器最經典的應用了。電網電壓過零信號、電機位置檢測、音頻信號整形都會用到。最簡單的過零檢測電路同相輸入接地反相輸入接正弦信號輸出推挽型的比較器直接輸出方波。不過這個電路有個問題如果信號上升沿非常緩慢或者噪聲幅度較大輸出會振蕩。所以實際工程里我一般會加上微小的正反饋電阻形成很小的遲滯。以給STM32提供電網過零信號為例電網信號經過電壓互感器和運放調理后得到一幅值約±3V的正弦波。選推挽輸出比較器TLV3201供電5V輸出3.3V邏輯電平需要通過電阻分壓或者選用供電3.3V的比較器。電路參數同相輸入端通過100kΩ電阻接地作為基準同時接一個1MΩ反饋電阻到輸出端形成約60mV的遲滯寬度計算見下節。反相輸入端接正弦信號輸入端串1kΩ電阻限流。實測在50Hz信號下輸出波形干凈利落上升沿無任何毛刺。這里有個容易被忽略的小細節過零檢測電路里的“地”不是絕對的0V而是比較器負電源軌。如果系統是單電源供電比較器負電源接系統地那么輸入信號必須偏置到正電壓范圍否則負半周信號無法被檢測。此時可以用分壓電阻生成一個VCC/2的虛擬地作為比較基準輸入信號經過交流耦合后加載到比較器輸入端實現“相對于VCC/2的過零檢測”。4.2 施密特觸發器電路用正反饋算出精確遲滯如果要做一個可調閾值的施密特觸發器外置正反饋電阻網絡的電路結構和計算方式是硬件工程師必會的基本功。典型電路反相輸入接輸入信號Vin同相輸入接基準電壓VREF反饋電阻RF從輸出接到同相輸入端同相輸入端到地接電阻R1或者同相輸入端到VREF接電阻R1結構略有不同。我習慣用“同相端到VREF接R1、同相端到地接R2”的分壓結構計算起來比較清晰。當輸出為高電平VOH時同相端電壓等于VREF和VOH在R1、R2上的分壓結果當輸出為低電平時同相端電壓等于VREF和VOL在R1、R2上的分壓結果。兩個不同的同相端電壓對應兩個不同的翻轉閾值。以3.3V供電、開漏輸出配上拉到3.3V為例VOH3.3VVOL0V遲滯寬度ΔV由反饋系數βR2/(R1R2)決定。閾值電壓近似為VREF當分壓電阻大時加上β乘以輸出擺幅的一半。更嚴謹的做法是先確定閾值上限和下限再反推電阻。假設設計目標輸入電壓超過2.5V時輸出翻轉為高低于2.2V時輸出翻轉為低VREF2.35V。則上限閾值VTH應該滿足VTH VREF β×(VOH - VREF)下限閾值VTH-滿足VTH- VREF - β×(VREF - VOL)。VOH- VREF 3.3-2.350.95VVREF-VOL 2.35V兩者不對稱所以直接用線性疊加來算。聯立得到β約0.158。取R1100kΩR218kΩβ≈0.152接近目標。實測閾值上限約2.49V下限約2.24V跟設計值吻合。注意反饋電阻不能太小否則靜態功耗高也不能太大否則比較器輸出驅動能力不夠。經驗上反饋支路電流控制在幾十微安級別即可。如果后級MCU輸入引腳帶弱上拉也會影響閾值計算需要仔細核對。4.3 窗口比較器一對閾值檢測一個區間窗口比較器用來判斷輸入電壓是否在一個區間內典型應用包括電池電量指示、溫度越限報警、水位檢測。做法是兩個比較器并聯一個比較器檢測上限VTH輸入接到反相端輸出翻轉條件為輸入超過VTH另一個檢測下限VTH-輸入接到同相端輸出翻轉條件為輸入低于VTH-。兩個輸出經過邏輯組合得到“在區間內”的邏輯電平。如果直接用兩個獨立比較器加邏輯門電路會比較大。更優雅的做法是用LM393這類開集輸出比較器做線與兩個比較器輸出接到同一個節點通過一個上拉電阻接VCC。假設兩個比較器都為低電平時線與節點為低如果其中一個不滿足翻轉條件則對應的輸出管截止節點由上拉電阻拉高。但這里需要仔細設計邏輯極性不然會得到相反的結果。我做過一個電池電壓監控電路單節鋰電池工作電壓范圍3.0V到4.2V低于3.0V報警高于4.2V也要報警。用兩個LM393第一個檢測上限VREF12.1V通過分壓電阻把4.2V映射到2.1V第二個檢測下限VREF21.5V對應3.0V。輸入電壓先經過電阻分壓分壓系數0.5使得電池電壓在窗口范圍內時比較器輸入端電壓處于1.5V到2.1V之間。兩個輸出通過二極管或門組合再用一個三極管驅動LED報警。這個電路靜態功耗很低實測工作穩定沒有出現兩個比較器翻轉不同步導致的報警抖動。窗口比較器的精度瓶頸往往不在比較器本身而在分壓電阻網絡和基準源。普通電阻溫漂50ppm/℃環境溫度變化50℃時誤差約0.25%對很多應用可以接受。如果要求更高用0.1%精度的電阻加TL431基準源閾值漂移能控制得很好。4.4 弛張振蕩器與電壓控制振蕩器比較器的另一個好玩應用是RC弛張振蕩器。用比較器加正反饋配合電容充放電就能產生方波信號不需要專門的555定時器。原理是比較器輸出高電平時通過電阻向電容充電當電容電壓超過同相端閾值由反饋網絡設定時輸出翻轉為低電容開始放電當電容電壓低于低閾值時輸出再次翻轉如此循環。這個電路的優勢在于振蕩頻率和占空比可以獨立調節而且可以通過改變比較器供電電壓或參考電壓實現電壓控制振蕩VCO。我常用它來做簡易的音頻提示音發生器LM393輸出接一個小壓電蜂鳴器RC參數設定約1kHz振蕩頻率正反饋電阻設定遲滯寬度實測波形是標準的方波聲音響亮無雜音。頻率計算公式f 1 / (2 × R × C × ln(1 2×RF/R1))具體推導過程略實際調試時用示波器測量波形微調一下RC值即可。有一點需要提醒RC弛張振蕩器啟動時如果電容初始電壓恰好落在兩個閾值之間比較器可能保持一個狀態不啟動。解決方法是上電瞬間給電容一個小的初始偏置或者用一個大的啟動電阻把同相端拉到確定狀態。更簡單粗暴的辦法是選擇帶內置遲滯的比較器起振可靠性更高。5. 常見問題與調試排查實錄5.1 輸出振蕩問題遲滯不夠和地回路干擾比較器電路里最常見的問題就是輸出振蕩。現象是輸出不是干凈的高低電平而是高頻抖動后級MCU讀取到的是亂碼或者不斷觸發中斷。原因通常有兩類第一類是輸入信號在閾值附近有噪聲疊加后多次穿越閾值第二類是比較器自身的電源耦合和地回路噪聲引起誤翻轉。針對第一類最直接的解決方法是增加遲滯寬度確保遲滯寬度大于噪聲峰峰值。如果電路里沒法加正反饋比如比較器被用在反饋環路里可以試試在輸入端加RC低通濾波把高頻噪聲先濾掉。RC時間常數要選好太小抑制不了噪聲太大會讓信號延遲變大。經驗值截止頻率設為信號頻率的3到5倍比如檢測10kHz信號低通截止頻率設為30kHz到50kHz。針對第二類本質是PCB布局問題。比較器的翻轉沿非常陡峭翻轉瞬間電源電流會突變在電源走線上產生壓降如果電源去耦不良這個壓降會通過參考分壓網絡耦合到輸入端。我排查過不少“閾值漂移”的問題最后都是去耦電容位置不對導致的。比較器的電源引腳旁邊必須放0.1uF陶瓷電容而且要盡可能靠近引腳走線先經過電容再到芯片。如果系統里有繼電器、電機等大電流負載比較器電源要單獨用磁珠或者LC濾波器隔離開。5.2 浮空輸入和未用引腳的正確處理比較器輸入端懸空時輸入阻抗極高電場感應、漏電流都可以改變輸入端電位導致輸出狀態隨機跳動。這在量產時是隱蔽的可靠性問題初學者經常遇到。處理原則任何輸入引腳不能懸空。如果某一路比較器沒用最穩妥的做法是把同相端和反相端都接到地或者電源軌輸出狀態固定不參與邏輯。如果輸入端需要接高阻抗傳感器PCB走線要短并且用地線包圍保護減少耦合噪聲。另外同相端和反相端之間的走線間距盡量拉開防止輸出翻轉時的電荷注入通過寄生電容耦合到輸入端。我還遇到過一種奇怪現象比較器輸出能正常翻轉但翻轉電平存在不對稱誤差。排查發現是同相輸入端的參考電阻用了高阻值1MΩ而比較器輸入偏置電流在這個電阻上產生了明顯的壓降等效于改變了參考電壓。解決辦法是減小參考分壓電阻網絡整體阻值或者選用低偏置電流的CMOS比較器。5.3 上拉電阻取值快了費電慢了誤事開漏/開集輸出的比較器必須接上拉電阻才能輸出高電平而上拉電阻的取值需要平衡速度與功耗。上拉電阻越小輸出高電平時灌入上拉電阻的電流越大輸出上升沿越快但靜態功耗也越高。上拉電阻越大靜態功耗越低但輸出上升沿變慢且容易受寄生電容影響。以LM393配3.3V上拉為例輸出端到地的寄生電容約5pF到10pF如果上拉電阻100kΩ上升時間常數約0.5ms到1ms后級MCU如果讀取速度很快可能在跳變沿中間采到不確定電平。建議在低速應用幾百Hz以下用100kΩ到470kΩ中速應用幾kHz到幾十kHz用10kΩ到47kΩ高速應用幾百kHz以上用1kΩ到4.7kΩ。我習慣先從4.7kΩ起步功耗約0.7mA絕大多數場合夠用再根據實際波形微調。上拉電阻連接到哪個電源也是門學問。如果比較器供電5VMCU供電3.3V直接把上拉電阻接到5V會燒壞MCU引腳。正確做法是上拉電阻接到3.3V電源這樣高電平輸出為3.3V低電平0V完美匹配MCU邏輯。這正是開漏輸出的優勢之一——輸出電平可以和后級獨立匹配不依賴比較器自身的電源電壓。5.4 電源電壓和共模輸入范圍的雙重約束比較器輸入信號的允許范圍是有限的超出共模輸入范圍會導致輸出狀態不可預期嚴重時甚至損壞芯片。LM393的共模輸入范圍是0到(VCC-1.5V)就是說5V供電時輸入端最高只能到3.5V。如果你拿它檢測12V系統的信號直接接入必然出問題。解決思路先用電阻分壓把信號降到比較器可接受的范圍或者選用高壓比較器芯片。單電源供電時還有個常見坑輸入信號相對系統地是負電壓時比較器無法處理。此時需要在輸入端加偏置把信號抬高到正電壓范圍。我經常用兩只等值電阻從VCC到地分壓產生VCC/2的偏置電壓輸入信號通過電容交流耦合疊加到這個偏置上。偏置電阻取值不能太大否則比較器輸入偏置電流會在其上產生誤差也不能太小否則白白增加功耗。10kΩ到100kΩ之間通常是合理區間具體要和信號源阻抗匹配。供電電壓的紋波也會影響比較器閾值。比較器的分壓網絡參考電源比如VCC/2如果VCC上疊加了100mV紋波意味著閾值也有100mV抖動。對高精度應用最好用基準源或穩壓二極管產生參考電壓而不是從電源分壓。TL431就能很好地勝任這個角色溫度穩定性好價格便宜。5.5 從波形上快速定位問題的三個技巧最后分享幾個用示波器定位比較器問題的方法。第一個技巧同時觀察輸入信號和輸出信號垂直方向對齊重點看輸出跳變點落在輸入波形的什么位置。如果跳變點明顯偏離理論閾值優先懷疑失調電壓、參考分壓誤差或者偏置電流影響源阻抗。第二個技巧檢查輸出波形的上升沿和下降沿。如果上升沿比較緩、下降沿很陡說明上拉電阻太大或者輸出電容太大。如果兩個沿都緩而且波形圓頭圓腦基本是示波器探頭補償不對或者測試點選擇了高阻抗節點探頭負載拖慢了信號。第三個技巧用直流掃描代替動態信號測試。把輸入接到可調直流源緩慢調節電壓同時用萬用表監視輸出狀態。這種方法可以精確測量比較器翻轉閾值比盯著示波器猜要靠譜得多。測量時要記錄上升翻轉點和下降翻轉點兩個值之差就是實際遲滯寬度。測出來的值和理論計算的偏差如果超過20%回頭檢查電阻的溫漂、VREF的精度以及比較器輸入偏置電流的貢獻。6. 實操心得與擴展思路做硬件這幾年我對比較器最深的感受是這器件看似簡單“判斷大小”四個字背后牽扯出的信號完整性、閾值精度、功耗權衡問題一點不少。每次項目里用到比較器我都會留出專門的時間做閾值計算和波形驗證尤其是遲滯設計寧愿多加一個電阻也不要省事不加正反饋——省事一時爽調試點燈到天亮。如果讀者想繼續深入我建議動手搭一個多功能測試板一片LM393加一片TLV3501配合可調電阻網絡分別測過零檢測、遲滯閾值、窗口報警和弛張振蕩四種電路。用信號發生器輸入正弦波、方波和帶噪聲信號用示波器記錄各種參數下的輸出波形。這么一輪下來對比較器的參數會建立起非常直觀的認知遠比背數據手冊有效。后續可以往兩個方向擴展一是把比較器與MCU結合的智能閾值系統比如用DAC輸出可調參考電壓配合比較器實現軟件可調的閾值判斷二是用高速比較器做簡單的數據通信波形整形比如紅外遙控信號的載波解調。跟著這些方向做幾個小項目你會真正體會到比較器在整個信號鏈里承上啟下的價值。