Raspberry Pi 3 Model B 與馬達一文中,我摘要性地介紹了馬達的分類以及比較常見的驅動方式。在接下來的幾篇文章中,我們將一一實作這些不同的做法。在這篇文章中,我將介紹如何利用 BJT 驅動直流馬達以及示範實際的接線。此外,也將示範如何利用 PWM 機制來控制直流馬達的轉速。

所需元件

在這個範例中,我將使用到一個 2N2222 (或 2N2222A) BJT、一個 1N400x (如 1N4001) 系列的二極體、一個 220 歐姆的電阻、以及一個減速比為 1:48 的 TT 減速馬達。

BJT

BJT 中文翻譯是雙極性接面電晶體,有三支接腳,名稱分別為基極 (Base 或簡稱 B)、集極 (Collector 或簡稱 C)、與射極 (Emitter 或簡稱 E)。以 2N2222 為例,如果將平坦的那面朝上 (如下圖所示),三隻接腳由左至右分別是 E、B、C。

BJT (雙極性接面電晶體) - 2N2222

BJT (雙極性接面電晶體) – 2N2222

2N2222 屬於 NPN 型 BJT,電路符號如下圖所示,三支接腳由上而下分別為  C (編號 3)、B (編號 1)、與 E (編號 2)。

NPN BJT 電路符號

NPN BJT 電路符號

我在這個範例中使用的是 2N2222,不過使用 2N2222A 也是可以的。事實上,2N2222A 是 2N2222 的改良版本,所以可以直接取代 2N2222 的使用。除了 2N2222/2N2222A 的型號之外,還有 PN2222/PN2222A、P2N2222/P2N2222A 也是類似的規格,在這個範例中同樣可以取代使用。不過 (又是不過) P2N 系列的接腳順序跟 2N/PN 系列不一樣,左右剛好相反,使用上要注意。

此外,上圖中的包裝方式稱為 TO-92,而除了這種包裝方式之外,xN2222 系列還有 TO-18 的包裝,如下圖所示。同樣可以取代使用,但是必須注意接腳配置與 TO-92 不同,所以務必先確認清楚再開始接線。

2N2222A TO-18 包裝

2N2222A TO-18 包裝

如果使用的是其他型號的 BJT,請注意 BJT 的接腳順序並沒有統一的規範,所以一樣務必先確認清楚再開始接線。

二極體

Raspberry Pi 3 Model B 與馬達一文中,並沒有提到驅動馬達時需要使用二極體。實際上,二極體在此電路中的用途是作為保護之用。這次我使用的是 1N400x 系列中的 1N4004 (如下圖所示),不過使用其他如 1N4001 也是可以的。

1N4004 二極體

1N4004 二極體

雖然 1N4004 看起來很陌生,但是其實二極體對我們來說可是一點也不陌生。想到了嗎?我們在 Raspberry Pi 上學習 Python 的第一個範例是控制 LED 燈泡,而 LED 的正式名稱為發光二極體,正是二極體的一種。所以 1N4004 (或其他二極體) 跟 LED 一樣是有方向性的元件,只有在陽極為高電位且陰極為低電位時才允許電流的通過。其他的電位組合 (如陰極的電位比陽極高) 都無法使得電流通過,因而形成斷路的現象。

之前在判斷 LED 燈泡陽極、陰極時,多使用接腳的長度來當作依據,長腳為陽極、短腳為陰極。不過在 1N400x 系列中判斷方式有所不同,有一圈銀色標示的那端是陰極,另外一端則是陽極。

TT 1:48 減速馬達

在這個範例中,我使用的是遙控車套件中常見的 TT 減速馬達,如下圖所式:

TT 減速馬達

TT 減速馬達

等等!減速馬達之前曾提過,那 TT 減速馬達又是甚麼東西?其實 TT 減速馬達只是 TT Motor 這家公司的某項產品,因為很適合小型的遙控車使用,所以也出現在不少產品名稱中。之前我們了解到減速箱可以提高馬達的扭力,即使是減速比只有 1:48 的 TT 減速馬達,對小型遙控車來說也是足夠了。而同系列馬達還有其他的減速比,可以提供更大的出力。而當時也說到減速箱還可以提供額外的功能,就是改變旋轉的方式 (或稱出力的方向)。TT 減速馬達的減速箱正有此功能,白色的雙軸輸出旋轉方式與馬達原本旋轉方向相差了 90 度。

上述原因都不是我在這個例子中選用 TT 減速馬達的原因,最主要的原因是 2N2222 為低功率的 BJT,只能提供 800mA 的電流,而 TT 減速馬達的電流需求較低,比較不會產生電流不足的問題。當然,電流需求的問題不能空口說白話,比較保險的做法還是應該參考官方的規格,只可惜 TT 減速馬達的官網並沒有提供詳細的規格。此外,很多的小型馬達可能連型號都沒有,那我們要怎麼確認電流的需求呢?有一個比較簡單的做法,就是用三用電表直接量測流經馬達的電流。電流的數值會根據馬達的狀態而變化,我們需要用力阻止馬達使其停止轉動,這時候量測到的數值就會是此馬達所消耗的最大電流。這個電流有個專有名詞,英文是 Stall Current,中文則稱為拘束電流或堵轉電流。需要注意的是,這個電流的數值會跟驅動的電壓有關,所以量測時必須使用跟實際應用時相同的電壓。我用這個方法對 TT 1:48 減速馬達進行測量,發現在 6V 電壓時的拘束電流大約在 500mA 左右,未超過 2N2222 的供電範圍。

Python 虛擬環境安裝

因為這個範例第二部分一樣需要支援硬體 PWM 功能的 pigpio 模組,所以準備工作與 在 Raspberry Pi 3 Model B 利用硬體 PWM 控制 LED 亮度 一致。如果你還沒有完成相關的準備,請務必先行完成再繼續進行後面的工作。

線路圖

Rapsberry Pi 利用 BJT 驅動直流馬達

Rapsberry Pi 利用 BJT 驅動直流馬達

Rapsberry Pi 利用 BJT 驅動直流馬達電路圖

Rapsberry Pi 利用 BJT 驅動直流馬達電路圖

說明如下:

  1. 在這個範例的第二部分中我們將使用硬體式的 PWM 功能,所以控制接腳必須連結至支援硬體 PWM 功能的腳位,這個範例中我們使用實體編號 12 的腳位 (其 BCM 編號為 18)。
  2. 使用外接的四節 AAA 電池盒提供直流馬達所需電壓與電流,可提供約 6V 的電壓。
  3. 圖中 BJT 2N2222 的方向為平坦那面面向我們自己,從左到右的接腳與連結關係為:
    E (射極)接地
    B (基極)串接 220 歐姆電阻後連結至 Raspberry Pi GPIO 實體編號 12 的腳位
    C (集極)同時連結馬達的一支接腳以及二極體 1N4004 的陽極
  4. 馬達的一支接腳連結 2N2222 的集極,另外一支接腳連結至電池盒的正極。
  5. 二極體 1N4004 的陰極 (有一圈銀色標示的那端) 接到電池盒的正極,而陽極則接到 BJT 的集極。這裡並沒有寫錯,因為這是保護用的電路,而不是在一般情況下提供電流流經,所以並非陽極接到高電位、陰極接到低電位。
  6. Raspberry Pi 的實體編號 6 的腳位 (GND) 拉出與電池盒的負極接在一起,形成共地。

程式代碼

利用文字編輯器 (如 nano) 新增 Python 程式 dc_motor_transistor.py

內容如下

程式說明如下:

  1. 第 1 行引入 GPIO 套件。
  2. 第 4 行定義控制接腳所連結之 Raspberry Pi 腳位,我們連結的是實體編號 12 的腳位,其 BCM 編號為 18。
  3. 第 6 行宣告使用 BCM 編號方式。
  4. 第 8 行宣告控制腳位為輸出模式。
  5. 第 13~18 行依序讓馬達運轉三秒後並暫停三秒。當我們將控制腳位設定為高電位時 (第 14 行),BJT 開關呈現關閉而通電,馬達開始運轉。而當控制腳位設定為低電位時 (第 17 行),BJT 開關呈現開啟的狀態,馬達因為沒有任何電流流經而停止。
  6. 第 22 行確定程式結束後程式中所使用的腳位會回到預設狀態。

程式完成後,輸入下列指令執行程式

順利的話,就可以看到馬達不斷重複運轉三秒後暫停三秒的動作,直到我們按下 Ctrl-C 中斷程式。

程式代碼2

利用文字編輯器 (如 nano) 新增 Python 程式 hardware_pwm_dc_motor_transistor.py

內容如下

程式說明如下:

  1. 第 1 行引入 pigpio 套件,在這個範例中我們將透過這個套件使用 Raspberry Pi 的硬體 PWM 功能。
  2. 第 4 行定義控制接腳所連結之 Raspberry Pi 腳位,我們連結的是實體編號 12 的腳位,其 BCM 編號為 18。
  3. 第 5 行定義 PWM 所使用的頻率。
  4. 第 6 行定義每次改變的工作週期。
  5. 第 8 行宣告 pigpio 控制物件。
  6. 第 13~20 行透過兩個 for 迴圈將馬達控制訊號的工作週期由 0 度逐次增加至 1000000,之後再逐次減少至 0。當工作週期越大時,馬達的轉速也就越高。
  7. 第 24 行確定程式結束後程式中所使用的腳位會回到預設狀態。

程式完成後,輸入下列指令執行程式

順利的話,就可以看到馬達開始開始轉動,並且不停地加速、減速。不過實際觀察時我們將發現並不是所有的工作週期都可以使得馬達運作,當工作週期低於 300000 (也就是 30%,hardware_PWM 函式的工作週期參數範圍為 0~1000000) 時就無法順利驅動馬達。

在這次的文章中,我們看到了如何利用 BJT 來驅動直流馬達以及接線方式。而除了單純的停止與轉動外,我們更利用了 PWM 的機制來控制直流馬達的轉速。這種方式不只可以用來驅動直流馬達,其他需要較大電流驅動的元件也同樣適用。在下次的文章中,我們將利用 MOSFET 來驅動直流馬達,敬請期待。

如果對文章的內容有任何疑問或建議,歡迎與我聯絡。

Facebook 留言
Print Friendly, PDF & Email
Summary
Raspberry Pi 3 Model B 利用 BJT 2N2222 驅動直流馬達
Article Name
Raspberry Pi 3 Model B 利用 BJT 2N2222 驅動直流馬達
Description
在這篇文章中,我將介紹如何利用 BJT 驅動直流馬達以及示範實際的接線。此外,也將示範如何利用 PWM 機制來控制直流馬達的轉速。
Author
Publisher Name
Everlearn Studio
Publisher Logo