【Maker電子學】一次搞懂邏輯準位與電壓

作者:Bird

數位電路的狀態雖然只有零和一,但其實那是我們定義出來的狀態。至於什麼樣的物理狀態是一、什麼是零,背後仍有許多學問,這次就讓我們來探討一下數位電路的邏輯準位系統,以及它們混合使用時有什麼需要注意的事項。

古老的 5 V 邏輯

Arduino 使用的邏輯電壓準位是 5 V,這其實是一個很古老的數位電路邏輯準位電壓(大概在 1960 年代末期,市場上開始出現 54 開頭與 74 開頭的數位邏輯 IC 時,標準的供電電壓就是 5 V 了)。當年的 CMOS 電路還不夠成熟,因此邏輯電路大部分是由電晶體做成的,這種邏輯電路稱為 TTL(transitor-transtor-logic),我們就找一顆 TTL 的邏輯 IC 來看看它的邏輯電壓準位吧!

以 SN74LS00 這顆 IC 為例,我們來看看它的 datasheet。

SN74LS00 的 datasheet(圖片來源:Bird 提供)

VIH 這個符號,代表的是「輸入被當作邏輯 high 時的電壓」,也就是邏輯 1 的電壓,根據上面的 datasheet,74LS00 只要輸入在 2.0 以上,就會當作是邏輯狀態 high;至於 VIL 這個符號,代表的是「輸入被當作邏輯 low 時的電壓」,也就是邏輯 0 的電壓,以 74LS00 為例,它的 VIL 是 0.7 V,也就是說輸入只要在 0.7 V 以下,就會被當作是邏輯狀態的 low。

不過有些 IC 的邏輯準位電壓與供電電壓有關,尤其是供電電壓範圍很寬的 IC,像 Arduino 上的 MCU 就是屬於這種。

Arduino 的邏輯準位

Arduino 使用的 MCU 晶片是 Atmel(已被 Microchip 收購)的 ATmega328P,這是一顆 8-bit 的 AVR 核心微處理器。通常微處理器的 datasheet 或 reference manual 會包含核心說明與軟體相關的資料,頁數都相當豐厚,ATmega328P 的 datasheet 就厚達六百多頁,但今天我們感興趣的是它的「邏輯電壓準位」,這通常會列在 Electrical Characteristics 這個章節。

因此我們找到 ATmega328 的 datasheet,翻到 chapter 30,它的標題是「Electrical Characteristics—(TA = TA = -40°C to 105°C)」,這表示的是「它在環境溫度 TA = -40°C to 105°C 時的電氣特性」。

Table 30.1 這個表格中,列出了很多與邏輯準位有關的特性(圖片來源:Bird 提供)

VIL 這個符號,一樣是「輸入被當作邏輯 low 時的電壓」,也就是邏輯 0 的電壓。它有一個範圍,以第一項 VIL 來說,它是除了 XTAL1 與 RESET 這兩支接腳外,所有其它接腳判斷邏輯 0(或是 low)的電壓範圍,最低是 -0.5 V,最高是 0.2 VCC 或 0.3 VCC,也就是電源電壓的 0.2 倍或 0.3 倍(依電源電壓的範圍而定);如果電源電壓在 1.8 V–2.4 V 之間,上限就是電源電壓的 0.2 倍;如果電源電壓在 2.4 V–5.5 V 之間,上限就是電源電壓的 0.3 倍。

以 Arduino 來說,它供給 ATmega328p 的電源電壓是 5 V,因此在 Arduino 上 VIL 的上限就是 5 * 0.3 = 1.5 V;換句話說,在這些 I/O 接腳上,只要電壓的範圍在 0.5 V 到 1.5 V 之間,軟體讀到的狀態就會是 low 或是 0。

如果電壓超過 1.5 V,就不能保證軟體讀到的一定會是 0(但也不保證一定是 1)。如果電壓低於 -0.5 V,軟體讀到的應該還是 0,但也有可能軟體無法讀取 I/O 腳,因為 -0.5 V 是這顆 IC 所能耐受的最低輸入電壓,如果電壓再低,可能會造成 ATmega328P 的永久損壞(這部分的特性會記載在 datasheet 中的「Absolute Maximum Ratings」,也就是它最大可以耐受的一些電壓、溫度、電流等特性)。

至於 VIH ,它一樣有一個範圍。以 Arduino 來說,在 5 V 供電時,它的 VIH 是 0.6 VCC-VCC+0.5 V,也就是 3 V-5.5 V。只要輸入電壓在這個範圍內,軟體讀取到的邏輯就是 high 或是 1。(最高不能超過VCC+0.5 V 的原因和前面說得一樣,這是 IC 的 Absolute Maximum Ratings,超過這個範圍只會弄壞 IC)。

既然 1.5 V 以下是邏輯 0,3 V 以上是邏輯 1,那麼 1.5 V 到 3 V 這個區間是什麼呢?

這個區間的電壓叫做「你不要玩弄我」電壓。當輸入電壓在這個區間內,ATmega328P 就無法保證它偵測道德邏輯是 0 或是 1,有可能是 0 也有可能是 1,有可能同一個電壓這一次是 0,下一次是 1。總之,這是一個「不確定」的地帶,因此請你設計電路時不要用這個區間的電壓去驅動數位輸入腳!否則你就是在玩弄它。

前面介紹的 74LS00 這類以 0.7 V 和 2.0 V 為分界的邏輯電壓系統,通常叫做「TTL 邏輯」。而像 Arduino 這種以 0.3 VCC、0.7 VCC為分界的邏輯電壓系統,稱為「CMOS 邏輯」,因為用 CMOS 製程設計出來的邏輯電路都有類似這樣的特性。

手牽手接起來

如果我們把一個 5 V 供電的 TTL 邏輯系統與 5 V 供電的 CMOS 系統接在一起,它們可以工作嗎?

這時會牽涉到另一個邏輯電路的特性:輸出的邏輯準位電壓。我們先來看 TTL:

(圖片來源:Bird 提供)

VOH 這個符號,代表的是「輸出邏輯 high 時的電壓」,以上面的 74LS00 來說,它的 VOH 是 typical 3.5 V,也就是說,當它的輸出是邏輯 high 的時候,「通常」可以有 3.5 V,但至少也會有 2.7 V;至於 VOL 這個符號,代表的是「輸出邏輯 low 時的電壓」,以上面的 74LS00 來說,它的 VOL 是 typical 0.35 V,也就是說當它的輸出是邏輯 low 的時候,「通常」是 0.35 V,最高不超過 0.5 V。

有沒有發現 TTL IC 的 VOH 高於 VIH 、VOL 低於 VIL?這就是為了確保 TTL IC 之間在互相連接時,有足夠的設計餘裕。就算輸出方的訊號因為衰減、雜訊之類的因素在傳到輸入方時已經沒有原來那麼高的電壓,但由於 VOH 原來就高於 VIH 還蠻多的,因此有 1.5 V 的空間可以容許衰減,同時讓接收方收到正確的邏輯 1(邏輯 0 時也是一樣的道理,不過設計餘裕沒有那麼大)。

至於 CMOS 系統的輸出電壓,我們一樣以 Arduino 的 ATmega328P 為例:

(圖片來源:Bird 提供)

它的 VOH 與輸出電流有關,輸出電流越大,VOH 能推到的電壓就越低,這和 CMOS 邏輯電路內部的設計結構有關。以上表為例,當供電電壓為 5 V、接腳輸出電流是 20 mA 且環境溫度是 85 °C 時,它保證 ATmega328p 在輸出邏輯 high 時,腳上的電壓至少可以有 4.2 V。

事實上 20 mA 的輸出電流對一般數位邏輯 IC 而言是非常大的電流,如果只是把邏輯 IC 彼此相互連接,是不需用到這麼大的電流,而 CMOS IC 在輸出電流很小時,它的邏輯 high 輸出電壓會非常接近電源電壓。

(圖片來源:Bird 提供)

邏輯準位 0 時的輸出電壓也是類似的狀況。以上表為例,當供電電壓為 5 V、接腳流入電流是 20 mA 且環境溫度是 85 °C 時,它保證 ATmega328p 在輸出邏輯 low 時,腳上的電壓不會超過 1.0 V。為什麼電流是流入呢?因為通常「輸出 low」的意思,其實是要把外面的輸入電路拉到比較低的電壓準位,因此電流的方向通常會從 IC 的外部流入輸出腳。

和邏輯 high 時一樣,CMOS IC 在流入電流很小時,它的邏輯 low 輸出電壓會非常接近 0 V。

接下來要來對接了。我們先用 TTL 系統當輸出,CMOS 系統當輸入,把兩個系統的邏輯電壓準位用圖表示出來:

TTL 系統與 CMOS 系統(圖片來源:Bird 提供)

我們可以發現,在邏輯 low 時,由於 5 V TTL 的輸出電壓最高不會超過 0.35 V,而 5 V CMOS 只要 1.5 V 以下的輸入都會認定為 low,因此對於 5V CMOS 的輸入來說是綽綽有餘的。

但邏輯 high 的情況就有點不妙了,根據上面的資料,5V TTL 的 typical 輸出電壓只有 3.5 V,剛剛好符合 5 V CMOS 的輸入邏輯 high 的電壓下限;也就是說,這樣接起來應該可以動,但經不起任何風吹草動,只要訊號有任何衰減或是雜訊,就有可能讓 5 V CMOS 這邊收到的狀態掉入中間的不確定區。但事實上 5 V TTL 的 VOH = 3.5 V 是在 IOH=max 最大的極端狀況,如果它不需要輸出這麼大的電流,VOH 一樣可以接近 VCC

那麼用 5 V CMOS 推 5 V TTL 的場合呢?我們可以用一樣的方法來分析一下:

(圖片來源:Bird 提供)

在邏輯 high 的部分完全沒有任何問題,因為 5 V TTL 只需要 2.0 V 就認定為 high,而 5 V CMOS 在最壞的狀況下 VOH 都有 4.2 V,但在邏輯 low 的這一端,5 V TTL 要求輸入 0.7 V 以下,而 5 V CMOS 的 VOL 最差可能會到 0.9 V,就會產生一些風險。事實上,由於我們不會把輸出電流用到這麼極限,因此在大部分的狀況下,5 V CMOS 只需要很少的電流就能推動 5 V TTL 的輸入,VOH 便會接近 0 V,這樣的接法應該可以啟動。

3.3 V CMOS 邏輯

撇開古老的 TTL 邏輯不談,3.3 V CMOS 邏輯大概是現在用得最多的邏輯準位,市面上有一些小型化的 Arduino 變形版本如 Pro Micro 等,就可以買到 3.3 V 的版本。

當 Arduino 的 MCU 工作在 3.3 V 時,它能不能和 5 V 的 Arduino 系統對接呢?用 5 V 的系統當輸出、3.3 V 的系統當輸入是沒辦法的,因為 5 V CMOS 的輸出電壓可能會接近 5 V,這遠超過 3.3 V 系統的 Absolute Maxium Rating,也就是輸入電壓不能大於 VDD+0.5 V,但如果用 3.3 V 系統當輸出,5 V 系統當輸入呢?我們來分析看看。

(圖片來源:Bird 提供)

看圖就知道沒希望了,因為 3.3 V CMOS 最高也只能輸出 3.3 V 的電壓,但 5 V 的 CMOS 需要至少 3.5 V 才會確定是邏輯 high,因此 3.3 V 的 CMOS 不能直接去推動 5 V 的 CMOS 輸入。

小結

那如果用 3.3 V CMOS 輸出去推動 5 V 的 TTL 邏輯呢?答案是可以的哦,至於這部分的分析和驗證,就留給讀者們了。

這次我們談了不同邏輯系統之間的電壓位準差異、如何從 datasheet 上了解 IC 的輸出入電壓基準,以及它們之間要對接時可能會遇到的一些問題。事實上由於現在的晶片製程越來越進步,電壓越來越低,因此各種不同電壓的邏輯在同一個系統中混用越來越常見,下一次我們再來聊一聊真的要對接不同電壓的邏輯系統時,電路上該如何處理。

(責任編輯:賴佩萱)

Bird

在外商圈電子業中闖蕩多年,經歷過 NXP、Sony、Crossmatch 等企業,從事無線通訊、影像系統、手機、液晶面板、半導體、生物辨識等不同領域產品開發。熱愛學習新事物,協助新創團隊解決技術問題。台大農機系、台科大電子所畢業,熱愛賞鳥、演奏管風琴、大提琴、法國號,亦是不折不扣的熱血 maker。
Bird

Author: Bird

在外商圈電子業中闖蕩多年,經歷過 NXP、Sony、Crossmatch 等企業,從事無線通訊、影像系統、手機、液晶面板、半導體、生物辨識等不同領域產品開發。熱愛學習新事物,協助新創團隊解決技術問題。台大農機系、台科大電子所畢業,熱愛賞鳥、演奏管風琴、大提琴、法國號,亦是不折不扣的熱血 maker。

Share This Post On

1 Comment

  1. 感謝您
    您這篇文章寫得很棒

    Post a Reply

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *