控制5V電路?三極管電平轉(zhuǎn)換電路詳解)
面試現(xiàn)場(chǎng)出現(xiàn)過很多次這樣的問題”3.3V 的單片機(jī)怎么去控制 5V 的電路“讓你現(xiàn)場(chǎng)畫一個(gè)三極管電平轉(zhuǎn)換電路。很多人能畫出來但深入一問就卡住了”基極電阻為什么取 4.7k“”輸出為什么是反的“”這個(gè)電路能跑多快“”能不能直接驅(qū)動(dòng)繼電器“答不上來。這篇文章就把三極管 3.3V 轉(zhuǎn) 5V 這件事拆開揉碎。表面上看它只是一個(gè) NPN 三極管加兩個(gè)電阻實(shí)際上它背后是電平標(biāo)準(zhǔn)、三極管工作區(qū)、飽和條件、上拉電阻取舍、開關(guān)速度、適用邊界一整套硬件基本功。這也是為什么它高頻出現(xiàn)在硬件工程師筆面試題里——它不是考你背不背得下來電路而是考你有沒有完整的工程判斷。1. 先搞清楚3.3V和5V之間為什么需要電平轉(zhuǎn)換很多初學(xué)者拿到這個(gè)問題第一反應(yīng)是”3.3V 和 5V 都是數(shù)字信號(hào)直接連不就完了“這個(gè)想法不算全錯(cuò)但也不全對(duì)。電平轉(zhuǎn)換的必要性取決于兩邊的電平標(biāo)準(zhǔn)而不是單純看電壓數(shù)值。1.1 電平標(biāo)準(zhǔn)不是“電壓夠不夠”那么簡(jiǎn)單數(shù)字電路里判斷一個(gè)信號(hào)是 0 還是 1不是拿個(gè)萬用表量到 3.3V 就算高電平而是要滿足芯片輸入引腳的電平閾值。以經(jīng)典的 TTL 和 CMOS 電平為例TTL 電平輸入高電平閾值 (V_{IH}) 約為 2.0V輸入低電平閾值 (V_{IL}) 約為 0.8V。CMOS 電平輸入高電平閾值通常是 (0.7 \times V_{DD})輸入低電平閾值通常是 (0.3 \times V_{DD})。如果 (V_{DD}5V)那高電平閾值就是 3.5V。這里就出現(xiàn)了一個(gè)很常見的場(chǎng)景3.3V 的 MCU 輸出去驅(qū)動(dòng) 5V TTL 電平的器件。因?yàn)?5V TTL 的高電平閾值只有 2.0V而 3.3V 輸出能穩(wěn)定輸出 3.0V 以上所以很多時(shí)候直接連接也能工作。這時(shí)候不需要電平轉(zhuǎn)換。但如果 5V 端是 CMOS 輸入比如某個(gè) 5V 的邏輯芯片明確規(guī)定高電平必須大于 3.5V那 3.3V 輸出就不夠用了必須做電平轉(zhuǎn)換。還有一種常見情況是3.3V 的 MCU 要去控制一個(gè) 5V 供電的負(fù)載比如繼電器、MOS 管柵極、數(shù)碼管、蜂鳴器。這些負(fù)載需要的不只是“邏輯高電平”還需要足夠的驅(qū)動(dòng)電流和電壓擺幅。MCU 的 GPIO 通常只有幾 mA 的驅(qū)動(dòng)能力直接推不動(dòng)這時(shí)候也需要一級(jí)驅(qū)動(dòng)電路三極管方案就非常合適。1.2 真正需要轉(zhuǎn)換時(shí)為什么三極管方案是首選解決 3.3V 轉(zhuǎn) 5V 的方案不止一種專用電平轉(zhuǎn)換芯片比如 TXS0108E、SN74LVCH245A 等。MOS 管電平轉(zhuǎn)換電路常見于 I2C 等雙向通信。NPN 三極管開關(guān)電路也就是本文要重點(diǎn)講的方案。光耦隔離方案。這幾個(gè)方案里三極管最便宜、最常用、也最容易手畫。一個(gè) NPN 三極管加兩個(gè)電阻成本幾分錢隨便一個(gè)料板上都能找到。它適合的場(chǎng)景是單向數(shù)字信號(hào)、速率不高、成本敏感、電路空間有限。但三極管方案有個(gè)容易被忽略的代價(jià)它是反相的。很多人畫電路時(shí)沒意識(shí)到這一點(diǎn)等調(diào)板子時(shí)才發(fā)現(xiàn)輸出和輸入邏輯反了。這個(gè)問題我們下一節(jié)重點(diǎn)講。注意在動(dòng)手設(shè)計(jì)電平轉(zhuǎn)換前先確認(rèn)是不是真的需要轉(zhuǎn)換。很多時(shí)候 3.3V 輸出可以直接驅(qū)動(dòng) 5V TTL 輸入多一級(jí)轉(zhuǎn)換反而引入延遲和故障點(diǎn)。2. 拆解NPN三極管3.3V轉(zhuǎn)5V電路它本質(zhì)是一個(gè)反相開關(guān)現(xiàn)在進(jìn)入正題一個(gè)典型的 NPN 三極管 3.3V 轉(zhuǎn) 5V 電路長(zhǎng)什么樣5V ──┬──── R2 ────┬──── 輸出 │ │ │ C │ │ 輸入 ── R1 ── B Q1 NPN │ E │ GND這個(gè)電路的基本結(jié)構(gòu)是輸入信號(hào)經(jīng)過限流電阻 R1 接到 NPN 三極管基極。發(fā)射極直接接地。集電極經(jīng)上拉電阻 R2 接到 5V。輸出從集電極取出。2.1 輸入高電平和低電平時(shí)電路分別怎么工作先拆兩種情況輸入為低電平0V時(shí)基極電壓為 0V(V_{BE}0V)不滿足 NPN 三極管的導(dǎo)通條件(V_{BE} 0.7V)三極管處于截止?fàn)顟B(tài)。集電極和發(fā)射極之間相當(dāng)于開路沒有電流流過 R2。此時(shí)輸出端通過 R2 被上拉到 5V輸出為高電平。輸入為高電平3.3V時(shí)基極電壓通過 R1 得到約 3.3V(V_{BE}) 超過 0.7V基極產(chǎn)生電流三極管導(dǎo)通。如果基極電流足夠大三極管進(jìn)入飽和區(qū)集電極和發(fā)射極之間壓降 (V_{CE(sat)}) 只有 0.1V~0.3V。此時(shí)輸出端被拉到接近 GND輸出為低電平。所以這個(gè)電路的邏輯關(guān)系是輸入三極管狀態(tài)輸出低電平0V截止高電平約5V高電平3.3V飽和導(dǎo)通低電平約0.2V看到這里你就能明白這個(gè)電路是一個(gè)反相器。輸入 3.3V 高電平輸出是低電平輸入低電平輸出才是 5V 高電平。2.2 輸出反相怎么處理很多場(chǎng)景下你需要的其實(shí)是同相轉(zhuǎn)換輸入 3.3V 高電平輸出 5V 高電平。那遇到這種情況怎么辦有三種常見處理方式軟件取反。如果只是控制一個(gè) LED、繼電器或使能腳這種信號(hào)對(duì)極性不敏感可以在 MCU 固件里把邏輯反過來。硬件不變軟件適配。兩級(jí)反相。用兩個(gè) NPN 三極管級(jí)聯(lián)第一級(jí)反相一次第二級(jí)再反相一次最終得到同相輸出。代價(jià)是多了兩個(gè)元件而且信號(hào)延遲變大。改用 PNP 三極管或 MOS 管電路。PNP 管的接法和 NPN 不同可以實(shí)現(xiàn)同相轉(zhuǎn)換但基極驅(qū)動(dòng)邏輯也要重新設(shè)計(jì)。實(shí)際工程中如果只是簡(jiǎn)單的開關(guān)控制很多人直接用軟件取反省元件。但如果是通信信號(hào)、時(shí)序敏感的場(chǎng)合建議用專門的電平轉(zhuǎn)換芯片避免邏輯混亂。2.3 關(guān)鍵三極管必須工作在飽和區(qū)而不是放大區(qū)這是面試?yán)镒钊菀鬃穯柕狞c(diǎn)。三極管有三個(gè)工作區(qū)截止區(qū)、放大區(qū)、飽和區(qū)。截止區(qū)(V_{BE} 0.7V)基極無電流集電極無電流三極管相當(dāng)于斷開。放大區(qū)發(fā)射結(jié)正偏、集電結(jié)反偏(I_C \beta I_B)三極管相當(dāng)于一個(gè)電流控制的電流源。飽和區(qū)發(fā)射結(jié)正偏、集電結(jié)正偏集電極電流不再隨基極電流線性增加(V_{CE}) 很小三極管相當(dāng)于一個(gè)閉合的開關(guān)。當(dāng)三極管做開關(guān)用時(shí)必須工作在飽和區(qū)因?yàn)橹挥性陲柡蛥^(qū)(V_{CE}) 才足夠小0.1V~0.3V輸出低電平才夠低功耗也小。如果基極電流不夠大三極管會(huì)停留在放大區(qū)。這時(shí)候集電極電壓可能只有 2V~3V輸出低電平不夠低后級(jí)電路可能誤判為高電平而且三極管本身功耗很大發(fā)熱嚴(yán)重。如何判斷是否飽和一個(gè)粗略的判斷方法是實(shí)際基極電流要大于臨界飽和所需的基極電流。臨界飽和的基極電流是 (I_{B(sat)} I_C / \beta)但工程上為了讓三極管深度飽和通常取 2~5 倍甚至 10 倍余量。關(guān)鍵經(jīng)驗(yàn)算基極電阻時(shí)不要只算“剛好能導(dǎo)通”要算“保證深度飽和”。驅(qū)動(dòng)能力余量不夠是三極管開關(guān)電路最常見的隱性故障。3. 阻值計(jì)算和工程取舍不是隨便選一個(gè)電阻很多教程畫電路只給個(gè)拓?fù)潆娮柚祵憘€(gè) 4.7k 就不管了。但真正做產(chǎn)品電阻值是要算的而且每個(gè)電阻承擔(dān)的任務(wù)完全不同。3.1 基極電阻保證三極管深度飽和基極電阻的作用有兩個(gè)一是限制基極電流保護(hù) MCU 的 GPIO 口二是配合輸入電壓把三極管推到飽和區(qū)?;鶚O電流的計(jì)算公式是[ I_B \frac{V_{IN} - V_{BE}}{R_B} ]其中 (V_{IN}) 是輸入高電平電壓3.3V(V_{BE}) 通常取 0.7V(R_B) 就是基極電阻。現(xiàn)在假設(shè)上拉電阻取 1kΩ5V 電源飽和壓降 (V_{CE(sat)}) 取 0.2V那么集電極電流[ I_C \frac{5V - 0.2V}{1kΩ} 4.8mA ]假設(shè)三極管的直流放大倍數(shù) (h_{FE}) 最小為 100那么臨界飽和基極電流[ I_{B(sat)} \frac{I_C}{h_{FE}} \frac{4.8mA}{100} 0.048mA ]這個(gè)電流其實(shí)很小。但實(shí)際工程不會(huì)這么摳門一般取 5~10 倍余量。取 5 倍的話(I_B 0.24mA)那么[ R_B \frac{3.3V - 0.7V}{0.24mA} \approx 10.8kΩ ]如果取 10 倍余量(I_B 0.48mA)(R_B \approx 5.4kΩ)。所以你會(huì)看到很多電路里基極電阻取 4.7kΩ 或 5.1kΩ這不是拍腦袋而是按 10 倍飽和余量算出來的。如果輸入電壓、負(fù)載電流變了這個(gè)值也要跟著變。順便說個(gè)細(xì)節(jié)MCU 的 GPIO 驅(qū)動(dòng)能力通常在 8mA~20mA 之間。你不希望基極電流太大否則 GPIO 會(huì)過流。上面算出的 0.5mA 左右對(duì) MCU 來說非常安全這也是為什么三極管開關(guān)電路這么實(shí)用。3.2 上拉電阻決定高電平質(zhì)量、速度和功耗上拉電阻有三重作用三極管截止時(shí)把輸出端拉到 5V。三極管導(dǎo)通時(shí)限制集電極電流防止過流。與負(fù)載電容共同決定輸出上升沿的快慢。上拉電阻越小輸出高電平時(shí)驅(qū)動(dòng)能力越強(qiáng)上升沿越快但代價(jià)是導(dǎo)通時(shí)集電極電流變大功耗增加基極電流也得跟著加大才能維持飽和。上拉電阻越大靜態(tài)功耗小但輸出上升沿會(huì)變慢。因?yàn)檩敵龆舜嬖诩纳娙莺拓?fù)載電容輸出從低電平跳到高電平的過程相當(dāng)于通過上拉電阻給電容充電時(shí)間常數(shù) (\tau R_{pull-up} \times C_{load})。舉個(gè)例子上拉電阻 10kΩ負(fù)載電容 100pF時(shí)間常數(shù)就是[ \tau 10kΩ \times 100pF 1μs ]上升沿大概要按 3~5 倍 τ 估算也就是說需要 3~5μs 才能穩(wěn)定到高電平。如果信號(hào)頻率是 1MHz一個(gè)周期只有 1μs那這個(gè)電路根本沒法正常工作。所以上拉電阻的具體取值要看負(fù)載是什么負(fù)載類型上拉電阻建議說明普通邏輯輸入4.7kΩ~10kΩ電流小功耗低LED 指示燈1kΩ~2kΩ需要足夠電流點(diǎn)亮繼電器線圈經(jīng)驅(qū)動(dòng)1kΩ~4.7kΩ根據(jù)線圈電流算MOS 管柵極1kΩ~10kΩ需要兼顧開關(guān)速度3.3 容易被忽略的三極管參數(shù)飽和壓降、存儲(chǔ)時(shí)間、溫度影響面試進(jìn)階題里經(jīng)常問”三極管開關(guān)電路的極限在哪里“第一個(gè)是飽和壓降 (V_{CE(sat)})。不同三極管不一樣常見小信號(hào)管 2N3904、SS8050 等在幾 mA 電流下飽和壓降約 0.1V~0.3V。如果輸出低電平要求很嚴(yán)格比如必須小于 0.1V那需要選擇低飽和壓降的三極管或者使用 MOS 管。第二個(gè)是存儲(chǔ)時(shí)間。三極管導(dǎo)通得很快但關(guān)斷時(shí)有延遲。原因是三極管飽和時(shí)基區(qū)存儲(chǔ)了大量電荷撤掉基極電流后電荷需要時(shí)間消散期間集電極電流不會(huì)立刻降為零。這個(gè)現(xiàn)象叫“存儲(chǔ)時(shí)間”。普通三極管從飽和到截止總的關(guān)斷時(shí)間可能長(zhǎng)達(dá)幾百納秒甚至幾微秒。所以三極管開關(guān)電路不適合高頻信號(hào)。一般來說三極管電平轉(zhuǎn)換建議用在100kHz~500kHz 以下的信號(hào)上比較穩(wěn)妥。再高就要考慮 MOS 管或電平轉(zhuǎn)換芯片。第三個(gè)是溫度影響。(V_{BE}) 大約有 -2mV/°C 的溫度系數(shù)(h_{FE}) 也會(huì)隨溫度變化。在寬溫度范圍的產(chǎn)品里基極電阻的飽和余量要留得更大一些否則低溫或高溫下可能進(jìn)入放大區(qū)。4. 這個(gè)電路的適用邊界能做什么不能做什么很多剛從培訓(xùn)班或大學(xué)課程里出來的同學(xué)學(xué)會(huì)了一個(gè)電路就覺得它能通吃所有場(chǎng)景。三極管電平轉(zhuǎn)換不是萬能的它有非常明確的適用邊界。4.1 適合的場(chǎng)景普通 GPIO 信號(hào)轉(zhuǎn)換比如 MCU 3.3V 輸出控制一個(gè) 5V 器件的使能腳、復(fù)位腳、片選腳。低速 UART 單向信號(hào)如果只需要 MCU 發(fā)數(shù)據(jù)給 5V 設(shè)備波特率在 115200 以內(nèi)這個(gè)電路通常沒問題。注意它是反相的所以如果 UART 空閑電平是 5V 高你需要根據(jù)實(shí)際邏輯調(diào)整。LED、蜂鳴器、小型繼電器驅(qū)動(dòng)這類負(fù)載不要求高速邏輯反相也能通過軟件處理。電平告警、開關(guān)檢測(cè)輸入狀態(tài)變化很慢三極管驅(qū)動(dòng)完全夠用。4.2 不適合的場(chǎng)景雙向通信I2C、SMBus 這類需要雙向傳輸?shù)目偩€用普通三極管電路無法實(shí)現(xiàn)因?yàn)樾盘?hào)會(huì)相互干擾。I2C 有專門的雙向電平轉(zhuǎn)換方案通常是一個(gè) N-MOS 管加兩個(gè)上拉電阻。高速信號(hào)SPI 時(shí)鐘線、SDIO、并行總線等動(dòng)輒幾 MHz 到幾十 MHz。三極管的存儲(chǔ)時(shí)間會(huì)導(dǎo)致信號(hào)嚴(yán)重變形不建議使用。強(qiáng)驅(qū)動(dòng)負(fù)載繼電器線圈、電機(jī)等如果電流超過三極管允許范圍不能直接由邏輯電路驅(qū)動(dòng)需要考慮達(dá)林頓管或?qū)S抿?qū)動(dòng)芯片。對(duì)時(shí)序要求嚴(yán)格的場(chǎng)合三極管導(dǎo)通和關(guān)斷時(shí)間不對(duì)稱會(huì)導(dǎo)致信號(hào)的占空比失真。4.3 三極管、MOS管、專用芯片怎么選把這個(gè)對(duì)比寫清楚面試時(shí)就能展現(xiàn)出自己的工程視野方案成本方向速度壓降典型場(chǎng)景NPN三極管極低單向、反相低幾百kHz內(nèi)(V_{CE(sat)}) 約0.2VGPIO單向、低速控制N-MOS管低單向或雙向中高(R_{DS(on)}) 通常很小I2C雙向電平轉(zhuǎn)換、較高頻信號(hào)專用電平轉(zhuǎn)換芯片高單向/雙向可選高很低高速總線、多路信號(hào)、需要可靠時(shí)序MOS 管和三級(jí)管的核心區(qū)別在于三極管是電流控制器件需要持續(xù)的基極電流MOS 管是電壓控制器件柵極幾乎不取電流開關(guān)速度通常也更快。所以在頻率稍高的場(chǎng)景MOS 管往往比三極管更合適。5. 面試官真正在考什么從一道“簡(jiǎn)單”電路題看硬件基本功回到文章開頭的那個(gè)面試場(chǎng)景。面試官問“三極管 3.3V 轉(zhuǎn) 5V 電路怎么工作”他真正想聽的不是你把電路背出來而是你能不能把這個(gè)電路講成一個(gè)完整的工程方案。5.1 這道題背后的知識(shí)點(diǎn)樹我把相關(guān)考點(diǎn)拆一下電平標(biāo)準(zhǔn)了解 TTL 和 CMOS 的輸入閾值能判斷什么時(shí)候需要轉(zhuǎn)換。三極管工作狀態(tài)截止、放大、飽和三區(qū)開關(guān)電路必須工作在飽和區(qū)。飽和條件計(jì)算基極電流要足夠工程上留 5~10 倍余量。電路反相特性能意識(shí)到輸出和輸入邏輯相反并給出解決方案。上拉電阻的作用影響高電平、上升沿、功耗、灌電流。頻率邊界了解三極管的存儲(chǔ)時(shí)間知道這個(gè)電路不能用于高頻信號(hào)。替代方案在什么時(shí)候應(yīng)該放棄三極管改用 MOS 管或?qū)S眯酒?。工程判斷先問清楚?fù)載是什么、速率多高、方向單向還是雙向再?zèng)Q定方案。這八個(gè)點(diǎn)基本覆蓋了一個(gè)硬件工程師從“會(huì)畫電路”到“會(huì)做設(shè)計(jì)”的差距。5.2 一個(gè)可復(fù)用的四步判斷框架無論你是面試還是實(shí)際畫板遇到電平轉(zhuǎn)換問題都可以按這個(gè)順序思考判斷是否需要轉(zhuǎn)換查后級(jí)輸入電平閾值如果直接連接滿足要求就盡量不加電路。判斷信號(hào)方向、速率、負(fù)載單向還是雙向頻率多少負(fù)載電流多大這決定了方案選型。選擇合適的方案低速單向選三極管低速雙向選 MOS 管高速或復(fù)雜場(chǎng)景選專用芯片。計(jì)算參數(shù)并驗(yàn)證邊沿定下電阻值估算上升沿、功耗、飽和余量必要時(shí)用示波器實(shí)測(cè)。這個(gè)框架可以遷移到很多硬件設(shè)計(jì)場(chǎng)景不止是電平轉(zhuǎn)換。面試時(shí)如果能把這個(gè)思路講出來比單純背電路強(qiáng)很多。5.3 給準(zhǔn)備面試和剛?cè)胄械耐瑢W(xué)幾條實(shí)在建議不要背電路要會(huì)推導(dǎo)。給你一個(gè)三極管、兩個(gè)電阻你能從零推導(dǎo)出怎么接、電阻怎么選比背十個(gè)電路有用。畫完電路要能解釋每個(gè)元件的角色。面試官最常問的就是“這個(gè)電阻能不能去掉”“這個(gè)電阻改大改小會(huì)發(fā)生什么”。動(dòng)手實(shí)測(cè)一次。自己在面包板上搭一個(gè)三極管開關(guān)電路用萬用表量各點(diǎn)電壓用示波器看波形。這個(gè)經(jīng)歷比刷一百道題都管用。遇到“簡(jiǎn)單”問題不要急著高興。越是基礎(chǔ)的問題越能拉開差距。人家讓你畫個(gè)三極管電路你要能講到高頻失效、雙向轉(zhuǎn)換、時(shí)序延遲這就能體現(xiàn)出工程經(jīng)驗(yàn)。說到底這道題已經(jīng)流行了十幾年每個(gè)硬件工程師都在面試?yán)镆娺^它。它不是智商題也不是單純的知識(shí)點(diǎn)它是一塊試金石——用來檢驗(yàn)?zāi)愕降资窃凇氨秤布边€是在“理解硬件”。如果你現(xiàn)在能不看任何資料把上面這些內(nèi)容從頭到尾講清楚那這道題就真正過關(guān)了。