mBlock & Arduino(15)認識電晶體與繼電器


Arduino 的 I/O 腳位可供給的電壓、電流有限,只能用於 LED 這類小元件,對於需要更高電壓或電流的設備,像是直流馬達、大型電器等就沒辦法負擔,對於小型直流馬達等元件,可以使用電晶體(Transistor)來供給較大量的電流,對於大型電器,可以透過繼電器(Relay)來控制。

認識電晶體

實際上,提到電晶體時,多半是指雙接面電晶體(Bipolar junction transistor, BJT),依組合的半導體材料,可以分為 NPN 與 PNP 兩大類,以 NPN 電晶體為例,是由 N 型半導體與 P 型半導體組合而成:

雙極性電晶體

電晶體有兩接面、三個端點,端點分別為集極(Collector)、基極(Base)與射極(Emitter),NPN 電晶體的基本特性是,射極電流 Ie 為基極電流 Ib 與集極電流 Ic 之和,而增益 α = Ic / Ie,β = Ic / Ib,Ib 通常遠小於 Ic。

當三個端點施加之偏壓不同時,電晶體會處於不同狀態:

  • B-E 為順向偏壓,且 B-C 為順向偏壓時,此時電晶體狀態處於飽和區(Saturation region),此時 C 與 E 可視為短路,依電路實際連接情況,Ic 會處於一個飽和電流值。
  • B-E 為逆向偏壓,且 B-C 為逆向偏壓時,此時電晶體狀態處於截止區(Cutoff region),此時 C 與 E 可視為開路,不過,實際上還是會有少量電流通過,這個現象稱為「漏電」(Leakage)。
  • B-E 為順向偏壓,且 B-C 為逆向偏壓時,此時電晶體狀態處於動作區(Active region),此時可用於信號放大。

各區實際的偏壓,以及 α、β 等值,需要查詢電晶體的規格書而定,如果想將電晶體作為開關使用,基本電路之一如下:

雙極性電晶體

如果 Vi 處於高電位狀態,那麼流經基極的電流 Ib 就是 (Vi - Vbe) / Rb,而流經集極的電流就是 Ic = β * Ib,因此,可以用 Rb 來控制流經 Rl 的電流。

舉個例子來說,以下的電路連接,可以讓我手邊的 2N3904 電晶體驅動一個直流小馬達(不過會很燙,不要通電太久…XD):

雙極性電晶體

你可以透過一個小程式來測試一下:

雙極性電晶體

執行程式的話,你就會看到直流馬達每轉動一秒就停一秒,如果你直接將直流馬達一端接到腳位 D8,一端接 GND,在腳位為高電位時,會因為電流不足,無法驅動直流小馬達。

如果想驅動 9V 或 12V 以上的馬達,可以如下:

雙極性電晶體

由於馬達是電力產生磁力,而磁力與馬達內部磁鐵作用而產生轉動,為了避免馬達停止供電瞬間而產生的反動電壓,會加上一個二極體加以保護。

(如果想運用電晶體提供更大的電流來驅動馬達,可以使用兩個或多個電晶體的組合,像是 達靈頓電晶體;有些 Arduino 相容板,像是 Motoduino,本身就內建了可驅動馬達的電路,想做馬達驅動相關產品時很方便。)

認識繼電器

如果要控制電力需求更大的電器,那麼可以使用繼電器,若是常見的電磁式繼電器,其運作原理可使用下圖來表示:

繼電器

當腳位 D8 送出高電位時,電晶體會導通而使得線圈通過電流,因而產生磁力將開關吸合,因而導通電路,腳位 D8 送出低電位時,電流停止通過線圈,磁力消失而開關回到原位,為了避免反動電壓,會加上一個二極體保護。

市面上有一些繼電器模組,本身已經將相關電阻、二極體與電晶體兜好,例如我手邊這顆 Keyes_SRly,還有 LED 顯示繼電器是否作動:

繼電器

如果你買的繼電器,只是上頭藍色的元件,那麼就必須如先前介紹,自行將相關電阻、二極體與電晶體兜好,如果是繼電器模組,就只可以直接使用。

首先要注意的是繼電器本身的規格,例如上頭 SRD-05VDC-SL-C 這個繼電器,適用於 10A 的 250V 與 125V 交流電源,以及 10A 的 30V 與 28V 直流電源。

繼電器模組上有三個接點,中間那個是共用接點(COMMON),相當於先前概要圖中的第 2 個接點,NO 表示常開(Normal Open),也就是平時與共用接點保持開路,相當於先前概要圖中第 3 個接點,NC 表示常關(Normal Close),表示平時與共用接點處於接通狀態。

繼電器的接腳有三個,也就是會有 Vcc、GND 以及開關三個接腳,為了安全起見,這邊還是使用繼電器控制直流小馬達來試試看:

繼電器

同樣只要使用上頭撰寫的小程式,測試看看直流小馬達是否如預期般運作(你還可以聽見繼電器吸合時滴答滴答的聲音)。