在前一篇文章中,我們利用 BJT 來驅動直流馬達。而在這篇文章中,我將介紹如何利用 MOSFET 驅動直流馬達以及示範實際的接線。此外,也將示範如何利用 PWM 機制來控制直流馬達的轉速。

所需元件

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

有關 1N400x 二極體以及 TT 減速馬達的介紹,請參考前一篇文章

MOSFET

MOSFET 中文翻譯是場效電晶體,與 BJT 一樣有三支接腳,不過名稱上有所不同,分別是閘極 (Gate 或簡稱 G)、源極 (Source 或簡稱 S)、與汲極 (Drain 或簡稱 D)。以我們這次使用的 FQP30N06L 為例,如果以下圖方式擺放,三隻接腳由左至右分別是 G、D、S。FQP30N06L 最多可提供 16A 的電流,遠超過 TT 減速馬達的需求。

MOSFET (場效電晶體) - FQP30N06L

MOSFET (場效電晶體) – FQP30N06L

FQP30N06L 屬於 N 通道的 MOSFET,電路符號如下圖所示,三支接腳由上而下分別為  D (編號 2)、G (編號 1)、與 S (編號 3)。

N 通道 MOSFET 電路符號

N 通道 MOSFET 電路符號

Python 虛擬環境安裝

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

線路圖

Rapsberry Pi 利用 MOSFET 驅動直流馬達Rapsberry Pi 利用 MOSFET 驅動直流馬達

Rapsberry Pi 利用 MOSFET 驅動直流馬達

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

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

說明如下:

  1. 在這個範例的第二部分中我們將使用硬體式的 PWM 功能,所以控制接腳必須連結至支援硬體 PWM 功能的腳位,這個範例中我們使用實體編號 12 的腳位 (其 BCM 編號為 18)。
  2. 使用外接的四節 AAA 電池盒提供直流馬達所需電壓與電流,可提供約 6V 的電壓。
  3. 圖中 FQP30N06L 的方向為有文字那面面向我們自己,從左到右的接腳與連結關係為:
    G (閘極)同時連結至 Raspberry Pi GPIO 實體編號 12 的腳位以及 1K 歐姆電阻的一端
    D (汲極)同時連結馬達的一支接腳以及二極體 1N4004 的陽極
    S (源極)接地
  4. BJT 的基極與 Raspberry Pi 的 GPIO 控制接腳之間必須串聯一個電阻,而 MOSFET 的閘極則可直接連結 Raspberry Pi 的 GPIO 控制接腳。不過此控制接腳必須使用一個下拉電阻以避免電位浮動而影響 MOSFET 開關的狀態,也就是圖中的 1K 歐姆電阻。
  5. 馬達的一支接腳連結 FQP30N06L 的汲極,另外一支接腳連結至電池盒的正極。
  6. 二極體 1N4004 的陰極 (有一圈銀色標示的那端) 接到電池盒的正極,而陽極則接到 MOSFET 的汲極。這裡並沒有寫錯,因為這是保護用的電路,而不是在一般情況下提供電流流經,所以並非陽極接到高電位、陰極接到低電位。
  7. Raspberry Pi 的實體編號 6 的腳位 (GND) 拉出與電池盒的負極接在一起,形成共地。
  8. 此線路圖與使用 BJT 2N2222 驅動直流馬達時很類似,BJT 與 MOSFET 的類比關係如下:
    BJT 2N2222 接腳名稱MOSFET FQP30N06L 接腳名稱
    B (基極)、線路圖左二接腳G (閘極)、線路圖左一接腳
    C (集極)、線路圖左三接腳D (汲極)、線路圖左二接腳
    E (射極)、線路圖左一接腳S (源極)、線路圖左三接腳
  9. 除了線路圖很類似之外,其實後面的程式代碼也都與 BJT 的範例完全一樣。

程式代碼

利用文字編輯器 (如 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 行),MOSFET 開關呈現關閉而通電,馬達開始運轉。而當控制腳位設定為低電位時 (第 17 行),MOSFET 開關呈現開啟的狀態,馬達因為沒有任何電流流經而停止。
  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) 時就無法順利驅動馬達。

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

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

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