先前寫一篇文章 Arduino筆記(八):控制步進馬達 提到如何用 Arduino 控制步進馬達,這幾天同時有兩三位網友問了相關問題,因此決定用 Raspberry Pi 來執行步進馬達控制方法,也對照一下Arduino的連接圖,轉為Raspberry Pi的線路圖。
今天晚上的實作,發生幾個問題:一開始 ULN2003APG接到 Raspberry Pi的接腳差一格,從pin2 ~ pin5,執行程式的結果就是只能正轉,怎麼樣都不能倒轉;仔細檢查後發現才改回來 pin1~ pin4。執行程式結果還是只能正轉,包括執行 backwards 那段程序也正轉,仔細檢查發現是程式中的接腳順序錯了,a1, a2, b1, b2順序對調,等修正後,終於能正確控制正反轉了。
• 永久磁鐵 PM 式 (permanent magnet type)
• 可變磁阻 VR 式 (variable reluctance type)
• 複合式 (hybrid type)
PM式步進馬達的轉子是以永久磁鐵製成,其特性為線圈無激磁時,由於轉子本身具磁性故仍能產生保持轉矩。
VR式步進馬達的轉子是以高導磁材料加工製成,由於是利用定子線圈產生吸引力使轉子轉動,因此當線圈未激磁時無法保持轉矩,此外,由於轉子可以經由設計提高效率,故VR式步進馬達可以提供較大之轉矩,通常運用於需要較大轉矩與精確定位之工具機上,VR式的步進角一般均為15°。
複合式步進馬達在結構上,是在轉子外圍設置許多齒輪狀之突出電極,同時在其軸向亦裝置永久磁鐵,可視為PM式與VR式之合體,故稱之為複合式步進馬達,複合式步進馬達具備了PM式與VR式兩者的優點,因此具備高精確度與高轉矩的特性,複合式步進馬達的步進角較小,一般介於1.8°~3.6°之間,最常運用於OA器材如影印機、印表機或攝影器材上。
步進馬達依定子線圈的數目可分成2相,3相,4相及5相式,小型步進馬達以4相式較普遍,高速型步進馬達則以5相式為主。4相步進馬達頂部和底部,兩側是一對,如下圖:
馬達正轉時,依序從(、、、 )改變線圈磁性,即可讓步進馬達正轉,如下圖:
馬達反轉時,依序從(、、、 )改變線圈磁性,即可讓步進馬達反轉,如下圖:
• Raspberry Pi Model B主板 x 1 (使用無線網卡)
• ULN2003APG x 1
• 步進馬達 x 1
• 連接線 x N條
• Pi Pin6接到 ULN2003APG(以下簡稱2003) Pin8(GND),Pi Pin8(GPIO14)接到 2003 Pin1(IN1),Pin10(GPIO15)接到 2003 Pin2(IN2),Pin11(GPIO17)接到 2003 Pin3(IN3),Pin12(GPIO18)接到 2003 Pin4(IN4)。
• 步進馬達藍色線接到 2003 Pin14(OUT3),黃色線接到 2003 Pin13(OUT4),橘色線接到 2003 Pin15(OUT2),粉紅色線接到 2003 Pin16(OUT1)。
上面這樣說明是不是看到眼都花了,整理成下表,比較容易瞭解:
• ULN2003APG與步進馬達連接線路
• The Hobby Electronic:Operation principle of stepper motor
• 黃兄知識庫
今天晚上的實作,發生幾個問題:一開始 ULN2003APG接到 Raspberry Pi的接腳差一格,從pin2 ~ pin5,執行程式的結果就是只能正轉,怎麼樣都不能倒轉;仔細檢查後發現才改回來 pin1~ pin4。執行程式結果還是只能正轉,包括執行 backwards 那段程序也正轉,仔細檢查發現是程式中的接腳順序錯了,a1, a2, b1, b2順序對調,等修正後,終於能正確控制正反轉了。
[步進馬達]
步進馬達的種類依照結構來分可以分成三種:• 永久磁鐵 PM 式 (permanent magnet type)
• 可變磁阻 VR 式 (variable reluctance type)
• 複合式 (hybrid type)
PM式步進馬達的轉子是以永久磁鐵製成,其特性為線圈無激磁時,由於轉子本身具磁性故仍能產生保持轉矩。
VR式步進馬達的轉子是以高導磁材料加工製成,由於是利用定子線圈產生吸引力使轉子轉動,因此當線圈未激磁時無法保持轉矩,此外,由於轉子可以經由設計提高效率,故VR式步進馬達可以提供較大之轉矩,通常運用於需要較大轉矩與精確定位之工具機上,VR式的步進角一般均為15°。
複合式步進馬達在結構上,是在轉子外圍設置許多齒輪狀之突出電極,同時在其軸向亦裝置永久磁鐵,可視為PM式與VR式之合體,故稱之為複合式步進馬達,複合式步進馬達具備了PM式與VR式兩者的優點,因此具備高精確度與高轉矩的特性,複合式步進馬達的步進角較小,一般介於1.8°~3.6°之間,最常運用於OA器材如影印機、印表機或攝影器材上。
步進馬達依定子線圈的數目可分成2相,3相,4相及5相式,小型步進馬達以4相式較普遍,高速型步進馬達則以5相式為主。4相步進馬達頂部和底部,兩側是一對,如下圖:
馬達正轉時,依序從(、、、 )改變線圈磁性,即可讓步進馬達正轉,如下圖:
馬達反轉時,依序從(、、、 )改變線圈磁性,即可讓步進馬達反轉,如下圖:
[材料]
• 麵包板 x 1• Raspberry Pi Model B主板 x 1 (使用無線網卡)
• ULN2003APG x 1
• 步進馬達 x 1
• 連接線 x N條
[線路連接與電路圖]
• Pi Pin2接到麵包版 + 端,再接到步進馬達紅色線。• Pi Pin6接到 ULN2003APG(以下簡稱2003) Pin8(GND),Pi Pin8(GPIO14)接到 2003 Pin1(IN1),Pin10(GPIO15)接到 2003 Pin2(IN2),Pin11(GPIO17)接到 2003 Pin3(IN3),Pin12(GPIO18)接到 2003 Pin4(IN4)。
• 步進馬達藍色線接到 2003 Pin14(OUT3),黃色線接到 2003 Pin13(OUT4),橘色線接到 2003 Pin15(OUT2),粉紅色線接到 2003 Pin16(OUT1)。
上面這樣說明是不是看到眼都花了,整理成下表,比較容易瞭解:
• ULN2003APG與步進馬達連接線路
ULN2003APG
|
Raspberry
Pi
|
步進馬達
|
Pin 8 (Ground)
|
Pin 6
(Ground)
|
|
VCC
(5V)
|
Pin 2
(3.3V)
|
紅色線
|
Pin1 (IN1)
|
Pin8 (GPIO14)
|
|
Pin2 (IN2)
|
Pin10 (GPIO15)
|
|
Pin3 (IN3)
|
Pin11 (GPIO17)
|
|
Pin4 (IN4)
|
Pin12 (GPIO18)
|
|
Pin14 (OUT3)
|
藍色
|
|
Pin13 (OUT4)
|
黃色
|
|
Pin15 (OUT2)
|
橘色
|
|
Pin16 (OUT1)
|
粉紅色
|
[程式]
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) a1_pin = 14 a2_pin = 15 b1_pin = 17 b2_pin = 18 GPIO.setup(a1_pin, GPIO.OUT) GPIO.setup(a2_pin, GPIO.OUT) GPIO.setup(b1_pin, GPIO.OUT) GPIO.setup(b2_pin, GPIO.OUT) forward_seq = ['1010', '0110', '0101', '1001'] reverse_seq = ['1001', '0101', '0110', '1010'] def forward(delay, steps): for i in range(steps): for step in forward_seq: set_step(step) time.sleep(delay) def backwards(delay, steps): for i in range(steps): for step in reverse_seq: set_step(step) time.sleep(delay) def set_step(step): GPIO.output(a1_pin, step[0] == '1') GPIO.output(a2_pin, step[1] == '1') GPIO.output(b1_pin, step[2] == '1') GPIO.output(b2_pin, step[3] == '1') while True: set_step('0000') delay = raw_input("Delay between steps (milliseconds)?") steps = raw_input("How many steps forward? ") forward(int(delay) / 1000.0, int(steps)) set_step('0000') steps = raw_input("How many steps backwards? ") backwards(int(delay) / 1000.0, int(steps))
[執行結果]
[參考資料]
• Raspberry Pi Cookbook by Simon Monk• The Hobby Electronic:Operation principle of stepper motor
• 黃兄知識庫
可以問一下 如果是兩相步進馬達 有程式碼嗎
回覆刪除作者已經移除這則留言。
回覆刪除您好~拜讀你的文章,覺得很專業,不知道可以請教一下嗎,如果要抓出現有設備內的5線4相小馬達正反轉時的狀態,例如正轉時,外接燈號顯示綠燈、反轉外接燈號紅燈,這個要怎麼從那個5線下手,謝謝
回覆刪除您好 步進馬達最大轉速可以到多少,我使用forward(90, 0.0016),調整成0.0015幾乎就動不了,請問還有什麼方式可以調快轉速 感謝
回覆刪除張貼留言