馬達的種類有好多種,在我們之前的搖控車上使用的是一般簡易的直流馬達,只要送電給它,它就開始轉,電壓愈高轉速愈快,大部份都是使用來當做是前進的動力(當然也有拿來當電風扇使用的啦),而這篇文章要介紹的是步進馬達Stepper Motor,這一類的馬達是以輸入信號來控制其轉動,而且每一次轉動一點點(稱做一個step),讓我們可以透過輸入的訊號來比較精確控制其角度,可以用在簡易的機械手臂或控制小角度的轉動。先來看我們要實做的成品:

這一次使用的硬體,也是直接採購現成的套組,步進馬達加上ULN2003驅動板

2016-04-19 21.51.51

這是一個小小的步進馬達,因此不需要另外的電源供應,只要使用樹莓派上的5V電源就可以了,先把馬達的線和驅動板做好連接(有插座可用),然後透過連接線,從Raspberry Pi上接出第2PIN接到驅動板上的+極,第6PIN接到驅動板上的-極。然後找4條線,把驅動板上的PIN1~PIN4接出來,準備連到Raspberry上。

2016-04-19 22.00.48

理論上,只要是GPIO的腳位都可以拿來使用。為了避開之前我們用在遙控車上的腳位,所以這一次我們使用PIN29, 31, 35, 37,如下圖所示。使用不同的GPIO沒有關係,但是程式中要同步調整對應。

2016-04-19 23.42.18

步進馬達不同於一般的馬達只要送電給它就好了,需要透過不同的信號控制,因此除了硬體設備之外,程式的部份也很重要。程式要做的是,每一個step要送正確的PIN1~PIN4的信號給步進馬達,程式如下:

import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BOARD)
gpio.setwarnings(False)

pin = [29, 31, 33, 35]
for i in range(4):
    gpio.setup(pin[i], gpio.OUT)

forward_sq = ['0011', '1001', '1100', '0110']
reverse_sq = ['0110', '1100', '1001', '0011']

def forward(steps, delay):
    for i in range(steps):
        for step in forward_sq:
            set_motor(step)
            time.sleep(delay)

def reverse(steps, delay):
    for i in range(steps):
        for step in reverse_sq:
            set_motor(step)
            time.sleep(delay)

def set_motor(step):
    for i in range(4):
        gpio.output(pin[i], step[i] == '1')

set_motor('0000')
forward(180, 0.01)
set_motor('0000')
reverse(180,0.01)

這個程式正轉180步,之後反轉180步,每一步等待0.01秒,實測結果就如文章一開始的影片。本程式主要的重點在於設定正轉和反轉的信號(forward_sq和reverse_sq),所有的動作在板子上的LED燈皆會有指示,如果沒辦法順利轉動,請檢查腳位的對應,以及這兩個串列中的信號設定是否正確。

(3085)

%d 位部落客按了讚: