😸
ステッピングモーターNema17とモータードライバーA4988の接続方法
久しぶりに使うと、色々忘れているのでメモ
Nema17
3Dプリンタとかで使われているステッピングモーターです。
AliExpressでも買えますが、保証面を考えるとAmazonのほうが確実
(しかし高くなったよな・・・)
A4988
こちらもAmazonで購入可能
配線図
回路では以下のようになっています
A4988をひっくり返すと、以下のような配置になっているはずです。
私は実験の時(ブレッドボードで繋ぐ時)は、わかりやすいようにA4988をひっくり返して使っています。
Nema17に付属しているジャンパー線は[赤・青・緑・黒]の並び順になっています。
以下のようにXHコネクタの爪を外側にすると並び順そのままにA4988と繋ぐことができます。
もちろん実基板にA4988を取り付ける際は正面を上にするでしょうから、XHコネクタの爪は内側に配置すると良いでしょう
サンプルコード
以下のコードでは1分間の回転数を60回転(1秒で1回転)になるようにしています。
Nema17ではデフォルトのステップ数が200ですから、1秒で200ステップ、つまりステップの間隔時間は0.5秒になります。
経験上、ステップの間隔時間をこれより短くするとモーターが脱調します。
それよりもゆっくり回転させたい場合は、ステップ角を小さく刻むか、ギア比で調整しましょう。
from machine import Pin
from utime import sleep
led = Pin(25,Pin.OUT)
dirPin = Pin(0,Pin.OUT)
stepPin = Pin(1,Pin.OUT)
power = True
rotateForMin = 60 # 1分あたりの回転数。60を下回ると脱調する可能性大
sleepPin = Pin(2,Pin.IN,Pin.PULL_UP)
incPin = Pin(3,Pin.IN,Pin.PULL_UP)
decPin = Pin(5,Pin.IN,Pin.PULL_UP)
def increment(pin):
global speedState
speedState = speedState +1
def decrement(pin):
global speedState
speedState = speedState -1
Pin.irq(incPin, trigger=Pin.IRQ_FALLING, handler=increment)
Pin.irq(decPin, trigger=Pin.IRQ_FALLING, handler= decrement)
# ステッピングモータの設定
stepsPerRevolution = 200 # 1回転に必要なステップ数
stepDelay = 60 / (rotateForMin * stepsPerRevolution) / 2 # ステップの間隔時間を計算 (秒)
dirPin.on()
while True:
stepPin.on()
sleep(stepDelay)
stepPin.off()
sleep(stepDelay)
もちろんsleepではなくマイコンのPWMを使うこともできます。
(というか、PWMを使ったほうが良い)
PWMの設定ではデューティ比は50%に設定します。
ラズパイpicoの場合、デューティ比50%はduty_u16を使って2**16/2で設定します。
(割り算でfloat型になるので、int型に変換しましょう)
# stepPinはGP1を設定
pwm = PWM(Pin(1),freq=400,duty_u16=int(2**16/2))
sleep(2)
# ストップさせる
pwm.deinit()
sleep(2)
# 再び動かす
pwm.init(freq=400,duty_u16=int(2**16/2))
Discussion