L293D 驅動 IC 具備兩組橋式電路,可以用來提供兩組可反向電源,因此適合用來驅動雙極性步進馬達。在這篇文章中,我們將同樣透過 Raspberry Pi 與 Python 程式範例,並利用 L293D 來驅動原本屬於單極性步進馬達的 28BYJ-48。

所需元件

在這個範例中,我將使用到一個 28BYJ-48 步進馬達以及一個 L293D 驅動 IC。

28BYJ-48 步進馬達

前一篇文章中,我們介紹了 28BYJ-48 的一些基本特性。其中提到 28BYJ-48 為單極性的步進馬達,所以可以使用 ULN2003A 這類不具橋式電路的驅動 IC 加以驅動。而 L293D 具備橋式電路的功能,所以適合用來驅動雙極性步進馬達。那麼為什麼在這篇文章中,我們會使用 L293D 來驅動 28BYJ-48 步進馬達呢?

下圖是雙極性步進馬達與5支接腳形式單極性步進馬達的內部線路圖。紅色那條線,就是單性極步進馬達用來接地的接腳。比較左右兩邊的線路圖,可以發現如果紅色那條線不作用的話,兩者其實就是一樣的。換句話說,如果我們不使用接地那支接腳的話,就可以使用雙極性步進馬達的方式來驅動 28BYJ-48 之類的單極性步進馬達。

雙極性與單極性步進馬達

雙極性與單極性步進馬達

L293D 驅動 IC

有關 L293D 驅動 IC 的說明請參考此篇文章。因為步進馬達有四個電源輸入的接腳,而 L293D 剛好有四個電源輸出,所以每個 L293D 僅可以用來驅動一個雙極性步進馬達。

Python 虛擬環境安裝

因為這個範例僅使用 RPi.GPIO 套件,所以準備工作與 在 Raspberry Pi 3 Model B 建立 Python 3.6 環境 一致。如果你還沒有完成相關的準備,請務必先行完成再繼續進行後面的工作。

線路圖

 

Raspberry Pi 利用 L293D 驅動 IC 控制步進馬達

Raspberry Pi 利用 L293D 驅動 IC 控制步進馬達

Raspberry Pi 利用 L293D 驅動 IC 控制步進馬達接腳圖

Raspberry Pi 利用 L293D 驅動 IC 控制步進馬達接腳圖

說明如下:

  1. 此線路圖需要連結的接線相當多,連結時務必小心並再三確認。
  2. 線路圖中以相同色碼代表同一組控制訊號/電源接腳,以方便辨識。舉例來說,兩條藍色接線中,其中一條表示 Raspberry Pi 控制接腳 (實體編號 11) 至 L293D IN1 的接線,另外一條則為 L293D OUT1 至 28BYJ-48 藍色接腳的接線。
  3. 這個範例使用外部電源,而 Raspberry Pi 與外部電源之間需共接地線。
  4. 在此線路圖中 L293D 半圓形凹洞朝向左方。
  5. L293D 共有四個接地用接腳,如果沒有電流過大的問題,僅需使用其中一個接地即可。
  6. L293D  驅動 IC 各接腳對應關係如下:
    L293D 接腳編號L293D 接腳名稱對應關係
    編號 1Enable 1連結至 Raspberry Pi GPIO 實體編號 4 的腳位 (+5V)
    編號 2In 1連結至 Raspberry Pi GPIO 實體編號 11 的腳位 (BCM 編號 17, 藍色接線)
    編號 3Out 1連結至 28BYJ-48 步進馬達藍色接線
    編號 6Out 2連結至 28BYJ-48 步進馬達黃色接線
    編號 7In 2連結至 Raspberry Pi GPIO 實體編號 12 的腳位 (BCM 編號 18, 黃色接線)
    編號 8+Vmotor連結至電池盒的正極
    編號 9Enable 2連結至 Raspberry Pi GPIO 實體編號 4 的腳位 (+5V)
    編號 10In 3連結至 Raspberry Pi GPIO 實體編號 13 的腳位 (BCM 編號 27, 粉紅色接線)
    編號 11Out 3連結至 28BYJ-48 步進馬達粉紅色接線
    編號 120V連結至 Raspberry Pi GPIO 實體編號 6 的腳位 (接地)
    編號 14Out 4連結至 28BYJ-48 步進馬達橙色接線
    編號 15In 4連結至 Raspberry Pi GPIO 實體編號 15 的腳位 (BCM 編號 22, 橙色接線)
    編號 16+V連結至 Raspberry Pi GPIO 實體編號 4 的腳位 (+5V)

程式代碼

利用文字編輯器 (如 nano) 新增 Python 程式 28byj48-8steps-bipolar.py

內容如下

程式說明如下:

  1. 此程式與利用 ULN2003A 驅動 28BYJ-48 步進馬達時的 8 步模式完全相同,僅驅動腳位順序有所調整,也就是 SEQUENCE 串列的內容做了改變。
  2. 第 3 行引入 GPIO 套件。
  3. 第 5 行宣告使用 BCM 編號方式。
  4. 第 7 行定義每一圈所需的步數。對 28BYJ-48 而言,在 8 步模式下每轉動一圈的步數為 64 x 64 步。
  5. 第 8~15 定義每一個順序的各個控制腳位電位狀態,其中 1 表示為高電位,0 則為低電位。這裡使用兩層的串列 (List),內層的每一個串列  (如 [1, 0, 0, 0]) 表示某個順序下四個控制腳位的狀態,而外層則表示共有 8 個順序的狀態,也就是 8 步模式。
  6. 第 17 行定義由四個控制腳位 BCM 編號組成的串列。使用串列除了可以減少使用的變數,也可以利用迴圈來簡化後續的指令。
  7. 第 18~20 行利用迴圈的方式將四個控制腳位宣告為輸出模式,並設定為低電位。
  8. 第 22 行定義每一個循環由多少的步驟 (順序) 組成。
  9. 第 23 行定義總共有幾個控制用的腳位。
  10. 第 25 行宣告用來記錄目前進行到哪個步驟的變數 – sequence_index。
  11. 第 26 行宣告用來記錄轉動方向的變數 – direction。當 direction 為 1 時表示正向轉動,而 direction 為 -1 時表示反向轉動。
  12. 第 27 行宣告用來記錄目前已移動步數的變數。
  13. 第 29~32 行用來判斷在呼叫程式時是否另外提供參數,可用來控制每一個步驟中間的暫停時間。程式透過這個方式來改變馬達的轉動速度。此參數預設值為 100,表示暫停 100 毫秒,也就是 0.1 秒。
  14. 第 37~38 行利用迴圈將四個控制腳位設定為合適的電位,電位的設定值可由兩層串列中直接取得,也就是 SEQUENCE[sequence_index][pin]。前面提到,SEQUENCE 是一個兩層的串列,第一層表示第幾個順序步驟,所以使用代表步驟的變數 sequnece_index。而第二層則為該步驟中各腳位的電位狀態,所以使用代表腳位的變數 pin。
  15. 第 40~44 行重新計算已經前進的步數。如果往前進而且已經達到一圈所需的步數,則開始往後走,直到回到 0 (也就是回到出發點) 後再次前進。
  16. 第 46~47 行計算下一個應該執行的順序。當正向轉動時, sequence_index 加 1,而反向轉動時則減 1。另外使用取餘數的方式 (%=),以避免 sequence_index 的數值因為不斷增加或減少而超過 0~7 的範圍 (在 8 步模式下總共只有 8 個順序步驟)。
  17. 第 54 行確定程式結束後程式中所使用的腳位會回到預設狀態。

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

順利的話,就可以看到步進馬達以固定速度進行轉動,然後每轉動一圈就變換方向。如果我們執行指令時加上控制暫停時間的參數,如

就可以看到步進馬達使用不同的速度進行轉動。此數字為程式暫停的時間,所以數字越小表示轉動的越快。以上面的例子而言,轉動速度就會比原本還快 (預設為 100)。需要注意的是,當這個數字設定為 0 時 (也就是程式完全沒有暫停) 步進馬達將不會運轉,因為控制接腳的電位變化速度已經超過步進馬達能夠反應的速度了。

程式代碼2

利用文字編輯器 (如 nano) 新增 Python 程式 28byj48-4steps-bipolar.py

內容如下

程式說明如下:

  1. 這個範例與前一個範例幾乎完全一樣,只是由 8 步模式改為 4 步模式。
  2. 旋轉一圈的所需步數由 64 x 64 變成 32 x 64 (第 7 行)。
  3. 腳位的模式由八個變成四個,每次輪流改變其中一組的電位方向性,也就是從 1, 0 改為 0, 1 (第 8~11 行)。

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

順利的話,可以看到與前一個程式同樣的執行結果,也就是步進馬達以固定速度進行轉動,然後每轉動一圈就變換方向。

在這篇文章中,我們介紹了如何利用 L293D 驅動 IC 來驅動原本屬於單極性的 28BYJ-48 步進馬達。一個 L293D 僅能用來驅動一個雙極性步進馬達, 因此對於需要使用多個步進馬達的應用情境而言,使用馬達驅動板往往會是更為方便的選擇,建議可以視實際需求加以選擇。

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

Facebook 留言
Print Friendly, PDF & Email
Summary
Raspberry Pi 3 Model B 利用 L293D 驅動 IC 控制 28BYJ-48 步進馬達
Article Name
Raspberry Pi 3 Model B 利用 L293D 驅動 IC 控制 28BYJ-48 步進馬達
Description
L293D 驅動 IC 具備兩組橋式電路,可以用來提供兩組可反向電源,因此適合用來驅動雙極性步進馬達。在這篇文章中,我們將同樣透過 Raspberry Pi 與 Python 程式範例,並利用 L293D 來驅動原本屬於單極性步進馬達的 28BYJ-48。 
Author
Publisher Name
Everlearn Studio
Publisher Logo