中文 | English

越過藩籬、跨過電壓準位的交流 —— 電位轉換器

 

你想做 ________(請自行帶入某個的作品)已久,今天你終於存夠了錢,興高采烈的買了個三軸加速度感應器 ADXL345 回家;但接上 Arduino 後,從感測器上讀取出來的數字卻怎麼樣都不對。(以上為真人真事)

請問下列何者最有可能是正確的?

    A. 你不小心把一個 3.3V 的裝置接上了 5V 的裝置
    B. 它需要你給一個大平台
    C. 往地上摔一下就會好了

講古時間

曾經,電壓 5 伏特(伏特以下 V 代替)一度一統天下,不論你買的是什麼裝置,它們的運作電壓都是 5V 。不過由於大家對低耗電量的要求,運作電壓越降越低,原本統一的世界現在已經四分五裂。光是 Maker 界的兩位台柱 —— Arduino Uno 跟 Raspberry Pi 的運作電壓就不一樣;Arduino Uno 的 I/O pin 是 5V ,而 Raspberry Pi 的 GPIO 則是 3.3V ;甚至還有像是 Odroid-XU4 這種 GPIO 在 1.8V 運作的開發板。

如果沒學過電路學也沒關係 ,你可以把電壓想成是音量,當一個戴著耳機聽著重金屬搖滾樂的人(叫它 A 好了),對著一個旁邊的人(接下來稱呼它為 B)講話,那麼 B 大概會被 A 的講話音量嚇到,甚至覺得耳膜有點刺痛;反過來當 B 試著跟戴著耳機的 A 講話時,也可能因為音量太小,導致 A 完全沒有發覺到有人在說話。同理套在電子零件上,如果你把 Arduino Uno 跟 Raspberry Pi 用跳線直接連起來,那麼(較)低運作電壓的 Rasbperry Pi 就很有可能被 Arduino Uno 的(較)高運作電壓損傷;而反過來,當低運作電壓的零件試圖傳輸訊號至高運作電壓零件時,也被可能完全被高運作電壓零件給忽略。

那到底該怎麼辦呢,這時就該輪到我們的主角登場、教你如何讓 3.3V 零件跟 5V 零件溝通了。電位轉換器,上場吧~

電位轉換器的原理

就跟斯斯一樣,電位轉換器也有 3 種,分別是降壓轉換器、高昇轉換器以及雙向轉換器。接下來我們的解釋會用到電路圖,但是看不懂也沒關係,只要記住粗體字的部分,你就可以應付大部分的情況了。

電阻型降壓轉換器。 Credit: Hackaday

首先是降壓轉換器(Step-down level shifters)適用於 5V 零件是輸出端、3.3V 零件是輸入端的時候使用。通常會有兩個電阻註1,輸入端會在兩個電阻之間,輸出端跟接地則各直接接一個電阻,例如左圖中那種配置就可以把 5V 降到 3V。

高昇轉換器。 Credit: Hackaday

再來的高昇轉換器(Step-up level shifters)跟上一位降壓轉換器相反,適用於 3.3V 零件是輸出端、5V 零件是輸入端的時候使用;它的構造比降壓轉換器更複雜一點,會用到二極體使兩個迴路即使不接通,也能把訊息傳遞到另一邊。

雙向轉換器。 Credit: Hackaday

最後是雙向轉換器(Bi-directional level shifters),從它名字就很明顯,不論輸出端跟輸入端個別是 3.3V 還是 5V 都適用;你什麼都不需要管,就接上去就對了;這在兩個零件必須雙向溝通時尤其好用。要說缺點的話就是比上面兩者構造更複雜,價格也較為昂貴。

不過,並不是 3.3V 零件接 5V 的情況都需要電位轉換器,有些情況下其實你可以把錢省起來,直接接起兩個零件就好(但因為會講到比較複雜的概念,所以特別留到比較最後面才講)。

其實你可能不需要電位轉換器

要知道為什麼不同電壓的裝置之間不見得需要電位轉換器,那你就要先搞懂 TTL 和 CMOS 邏輯各自對閥值的定義。在 TTL 邏輯中,大於 2V 就會被解讀成 1 ,低於 0.8V 則會被解讀成 0 ,不論運作電壓是 3.3V 還是 5V 這兩點都不變。

TTL 和 CMOS 閥值比較圖。 Credit: Hackaday

在都是 5V 零件是 TTL 閥值的情況下,如果你很幸運, 3.3V 的零件是輸出端,然後 5V 的零件是輸入端,那你就不需要電位轉換器;因為 3.3V 的輸出不會損壞 5V 的零件,而且兩者對邏輯 01 的邏輯電位定義是一樣的,所以這種情況下溝通完全沒問題。

如果跟剛才的方向相反,你想要讓 5V 的零件作為輸出端, 3.3V 作為輸入端,那情況又是怎麼樣呢?總該用到邏輯轉換器了吧。其實,這也不一定,有些 3.3V 零件有經過特別設計,讓它們可以承受 5V 的電壓,所以,這種情況下 5V 輸出端跟 3.3V 輸入端也直接連起來就可以正常運作了;而想知道你買的 3.3V 零件能不能承受 5V 的輸入,最好的方法就是去看它的規格資料。

現在,讓我們來總結一下,如果你只知道兩個零件的運作電壓不一樣,可是不太清楚到底哪邊是輸出端、哪邊是輸入端,那就選雙向轉換器,雖然要多花一點錢,但它用途廣泛,不會只是白白花錢而已;如果對於輸入端跟輸出端有很清楚的瞭解,那你或許可以用降壓轉換器高昇轉換器就達到目的。如果看到有廠商標榜他們的 3.3V 零件與 5V 零件相容,也不用太驚訝;但也不要傻傻的以為所有零件都可以這樣。最後,希望大家都可以多多鼓勵身邊的零件,幫助它們脫離它們的電位舒適圈~

 

 

註1:除了電阻之外,也有用二極體取代電阻的降壓轉換器。

參考資料

分享到社群

SHY

半途出家踏入資工與資安的領域,發現軟體硬體本一家,又玩起 Arduino 與 Raspberry Pi ,基本上什麼都碰一點,夢想是成為一隻駭客犬。