準位轉換(level shifting)
準位轉換是把數位訊號從一個電壓域翻譯到另一個,好讓跑在不同電源上的兩顆晶片能對話。它就像一位站在「用 3.3 伏特句子說話的人」與「只聽得懂 5 伏特的人」之間的口譯:意思(高或低)被保留,但音量被換算。現代電路板上充滿這類邊界:1.8 V 的處理器對 3.3 V 的感測器、再對 5 V 的致動器。
從較低電壓往較高電壓轉是困難的方向,因為 3.3 V 的高可能搆不過 5 V 晶片的輸入臨界值。方法有好幾種。簡單的一種是用開汲極輸出,搭配一顆拉到較高電源軌的上拉電阻:晶片只負責把線拉低,電阻則把它拉到你選的電源軌。一顆 N 通道 MOSFET 兩側各加上拉電阻,就成了俐落的雙向轉換器(I2C 匯流排上經典的「兩電阻一顆 FET」電路)。要從高往低轉,一個簡單的電阻分壓器、或串一顆電阻進箝位電路即可,而專用的轉換 IC 能一次處理多條線並控制速度。
為何在意?在不安全的方向弄錯會造成真正的損害:把 5 V 灌進 1.8 V 的輸入,會把電流注入它的保護二極體、慢慢毀掉晶片。即使沒燒掉,勉強的轉換也會侵蝕雜訊容限、製造時好時壞、令人抓狂的怪錯。誠實的取捨在速度與方向:上拉電阻轉換器便宜,但上拉電阻加上導線電容會拖慢上升邊緣(一個 RC 延遲)並限制匯流排速度;而單純的分壓器只能往下轉、不能往上。要依方向、速度、以及線路是否雙向,來選擇方法。
在一條 100 kHz 的 I2C 匯流排上,3.3 V 主控與 5 V 感測器透過單顆 N 通道 MOSFET 轉換器共用線路,兩側各以 4.7 kΩ 上拉到自己的電源軌。每一側把線拉低;電阻則為該側還原正確的高。兩端都讀到有效邏輯,且都不會被過壓。
相同的位元、不同的電壓——要翻譯,別只是直接接上。
絕不要把高電壓輸出直接接進低電壓輸入然後祈禱。即使今天讀得正確,流過輸入箝位二極體的電流也會在數週內悄悄劣化那顆晶片。