Raspberry PiのGPIOを使ってstepping motorを動かしてみました。以下は、それについての備忘のためのメモです。
ーーーーーーーーーーーーー
使用したステッピングモータはバイポーラ駆動用の17PM-K044 、ドライバはDRV8835 で、秋月電子のWebサイトから通信販売で購入した。
ステッピングモータの主な仕様は200ステップ(1.8°)、定格電流0.9A、巻き線抵抗5.6Ωである。
DRV8835はこれに合わせて入手したドライバで、主な電気的特性は、Vm~11V、Iout~1.5Aである。
モータ軸を1回転/secの速度で回すとすると、200ステップ/secであり、5msec/ステップとなる。モータとドライバのデータシートから判断すると、A、Bの各相に下図のような電流を流せばCWに回転し、これと逆相の電流をながせばCCWに回転させることができるようである。
Raspberry Pi、ドライバ、ステッピングモータを下図のように配線する。ドライバ8835をmode1で使うのでmodeをHighにしておく。
モータの定格電流は0.9Aなので、それだけの電流を流すためにモータの電源はRaspberry Piとは別に用意する。
GPIOを制御するためのライブラリはいくつかあるが、デフォルトでインストールされているRPi.GPIOを使うことにする。
以下は、テストのために作成したプログラムで、ステッピングモータを「約1秒でCW方向に1回転→2秒静止→約1秒でCCW方向に1回転→2秒間静止」させ、それを繰り返させるものである。
import RPi.GPIO as GPIO # RPi.GPIOパッケージを読み込む import time # timeパッケージを読み込む APHASE = 5; AENABLE = 6; BPHASE = 19; BENABLE = 26 msec = 0.005 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # GPIO番号指定モードの設定 GPIO.setup(APHASE, GPIO.OUT) # GPIOの入出力の設定 GPIO.setup(AENABLE, GPIO.OUT) GPIO.setup(BPHASE, GPIO.OUT) GPIO.setup(BENABLE, GPIO.OUT) GPIO.output(AENABLE,GPIO.HIGH) # ピンの出力をHighにする GPIO.output(BENABLE,GPIO.HIGH) def CW(): GPIO.output(APHASE, GPIO.HIGH); time.sleep(msec) GPIO.output(BPHASE, GPIO.HIGH); time.sleep(msec) GPIO.output(APHASE, GPIO.LOW); time.sleep(msec) GPIO.output(BPHASE, GPIO.LOW); time.sleep(msec) def CCW(): GPIO.output(BPHASE, GPIO.HIGH); time.sleep(msec) GPIO.output(APHASE, GPIO.HIGH); time.sleep(msec) GPIO.output(BPHASE, GPIO.LOW); time.sleep(msec) GPIO.output(APHASE, GPIO.LOW); time.sleep(msec) try: while True: for i in range(50): # 50回くり返す。 5(sec) x 4 x 50=1000(sec) CW() time.sleep(2) for i in range(50): # 50回くり返す。 5(sec) x 4 x 50=1000(sec) CCW() time.sleep(2) except KeyboardInterrupt: pass
下のビデオは上記プログラムを実行した時の様子を撮影したものである。
プログラムに従って動いていることが確認できる。