文章程式碼顯示

2017年11月1日 星期三

《進階※電子電路篇》寫程式Arduino教學 - 03:MCU I/O Sink current & Source current 是什麼? Arduino 總電流最大?


首先我們先談談 Sink current 與 Source current 代表的是什麼意思

Sink current 與 Source current 一個很簡單的判斷方式為 "依電流方向判斷" 。若電流方向為流入 MCU 則稱為 sink current 灌電流(如灌水一般;中國大陸用語) ;若電流方向為從 MCU 流出則為 source current 拉電流(中國大陸用語)。

Source Current(上圖左)
假設 MCU(或邏輯電路) 的端口(I/O)連接一個電阻性負載至GND,則當該端口作動時,電流從端口流經電阻至 GND,則稱此為 Source Current。

Sink Current(上圖右)
假設 MCU(或邏輯電路) 的端口(I/O)連接一個電阻性負載至VCC,則當該端口作動時,電流從VCC流經電阻再流入端口,則稱此為 Sink Current。

註 : 早期 MCU 單一 I/O 口的 Sink current 會大於 Source current ,其原因在於 I/O 口 CMOS 電路中, Source current 靠的是上面的 PMOS;Sink current 靠的是下面的 NMOS,而同尺寸下 NMOS 可以比 PMOS 有流過更大電流的能力(本身元件特性)。

實際上這樣的 CMOS 架構也是一個示意圖而已,實際的電路還會更複雜些,這就牽扯到 MCU製造商關於電路設計的機密。近代的 MCU 已經很少有哪個比較大的情形,多半兩個都是一樣大的。



左圖就是以 Source current 的方式進行驅動;右圖則是以 Sink current 的方式進行。

然而知道這兩種 current 能做甚麼呢? 其主要原因在於兩種不同的驅動方式,對於 MCU 而言代表著單一 I/O 口能夠吐出的電流(Source current) 或能吞下的電流(Sink current) 大小。


目前的 Arduino UNO 在市面上常見的有兩種形式,這想種乍看下長得很像,但仔細觀察板子中央的核心晶片(ATMEGA328P) 就會發現其長的有些許不一樣。左邊的稱為 TQFP 封裝,為正方形的;右邊的稱為 PDIP 封裝(早期拿到的一般是這種形式),為長方形的。


接著我們找到 ATMEGA328P datasheet 中的這個表格,此表格說明這個晶片所能承受的最大極限值。 我們聚焦於兩個參數分別是

DC Current per I/O Pin = 40mA :代表著 " 單一 I/O口(pin腳) 最大能夠供給(承受)的電流量為 40mA "
DC Current VCC and GND Pins : 代表著 " 一組VCC&GND 可以供給(承受)的總電流為 200mA "

註:單一 I/O 口 40mA 指的是極限,意思就是最好別用到這麼多。建議值為 20mA


以 TQFP 封裝的 ATMEGA328P 舉例,其具有兩組 VCC&GND 在 3,4,5,6 接腳,還有一組 AVCC&AGND 在 20,21 接腳。

實際上在晶片的內部集成電路中會類似下面這樣子的配置


也就是說對於某些 I/O 口而言,在內部可能會被連接到數位電源 1 的區塊;某些會被連接到數位電源 2 的區塊;某些被連接到類比電源的供電區塊。

所以在網上有些人說 " Arduino Uno 所有 I/O 口加總不能超過 200mA " 是不正確的,因為在 Datasheet 中標示的 200mA 指的是 "某一組 VCC&GND " 。

具體更細部是哪些 I/O 口被歸類為同一組 VCC&GND ,在 Datasheet 中也有交待,如下圖


配合下圖


如此一來我們就可以對照出哪些 I/O 口共用同一組電源。對於總共可以 Sink or Source 電流也在上圖中有說明。



題外話,除了我們關心的可供給最大電流極限外,在 datasheet 中還有指出不同的 sink(source) current 所對應的 Output voltage。

以 Sink current 舉例
實際上 MCU 的 I/O 口在內部就像是一個 BJT 一樣(近代都是 CMOS 結構,早期才是用 BJT 。但前面章節有講到 BJT,因 BJT 跟 MOS 在數位電路中的特性是很相近的,所以拿來進行說明並沒有大礙。此部分牽扯到 MCU I/O口組成,詳細說明在後續章節中會提到),當我們對 I/O 口進行 HIGH/LOW 切換時會讓這個 BJT 在飽合區與截止區進行開關應用的切換,前面章節我們都假設 BJT 在飽合區時 Vce = Vce(sat) = 0.2 V 為定值,事實上這個值會因為流過的電流越大而造成些微的增加。下圖就是說明了當 IoL(流過內部 BJT 的電流)越大的情形下,Vce(sat) (對應到 VOL) 也會越大。

右圖就是一個典型的 Sink current 示意圖(若要解釋 Output voltage 隨 IOL 上升而上升,對實際應用所造成的影響應該用 TTL 準位的應用來舉例會較好一些)




此外還有其它比較冷門的電流會在 datasheet 中看到,如

Ground current是指晶片工作在正常特定的負載情況下,本身所需消耗的電流。

Quiescent current 靜態電流是指輸出電流為0時的輸入電流(由漏電流產生),也就是晶片本身在不受外部因素影響下,本身所需消耗的電流。


延伸參考
以上部分圖片擷取自 Current Sourcing and Sinking 以及 ATMEGA328P_datasheet 中

↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引