Raspberry Pi 3BにはハードウェアPWMが実装されています。
2チャンネル各2ピンが割り当てられているので合計4ピンあるわけですが、
同じチャンネルのピンは同時に駆動できません。
たとえばXY平面で斜めに動かしたいなら、XとYはCH1とCH2に分離する必要があります。
ハードウェアPWMのCH0はBCM12,18、CH1はBCM12,19に割り当てられています。
さてこのまま馬鹿正直に以下の様に割り当てると……同時には動きません。
import RPi.GPIO as GPIO # import the library from RpiMotorLib import RpiMotorLib # 分解能を設定する MS1 ~ MS3はHIGH固定 = 1/16 # 方向とステップを指定するGPIOピンをBCNで指定 GPIO_pins = (14, 15, 18) direction_A = 20 step_A = 12 #CH0 direction_B = 21 step_B = 13 #CH1 # ステッピングモーターのインスタンスを作成 mymotor_A = RpiMotorLib.A4988Nema(direction_A, step_A, GPIO_pins, "A4988") mymotor_B = RpiMotorLib.A4988Nema(direction_B, step_B, GPIO_pins, "A4988") # 駆動。FULLの場合200ステップで1周なので100ステップで半周。 mymotor_A.motor_go(False, "Full" , 100, .01, False, .05) mymotor_B.motor_go(False, "Full" , 100, .01, False, .05) #使い終わったらお片づけ GPIO.cleanup()
というわけで……美しくないですが、for文でやる方法でやってみます。
先ほどの駆動の部分を以下の様に変更。
# 駆動。FULLの場合200ステップで1周なので100ステップで半周。 for i in range(100): mymotor_A.motor_go(False, "Full" , 1, .01, False, .05) mymotor_B.motor_go(False, "Full" , 1, .01, False, .05)
無事、(見た目には)二つ同時に動いている風になりました。