こんにちは! けい(Twitter)です。
今回は、Raspberry Pi Pico(ラズピコ)でDCモーターをモータードライバを使って制御する方法を紹介していきたいと思います。
目次
必要な物
Raspberry Pi Pico
モータードライバ
2つのDCモーターを制御できるモータードライバを使います。
モーター
モータードライバの電源が3V~10Vなので、その間の電圧で動くものであれば何でも大丈夫です。
今回私は3V程度で動作するモーターでテストを行いました。
その他
回路図
モータードライバの仕様
使用するピン
- GND:グラウンド
- VCC:モーターの電源ピン
- IN1、IN2:モーターの制御信号ピン
- OUT1、OUT2:モーターに接続
モータードライバに送る信号(IN1、IN2)によって、モーターの回転する方向を変化させることができます。
IN1 | IN2 | モーターにかかる力 |
---|---|---|
LOW | LOW | 無 |
HIGH | LOW | 正転 |
LOW | HIGH | 逆転 |
HIGH | HIGH | ブレーキ |
配線
サンプル①:電源電圧をそのままモーターにかける
それでは、電源電圧をそのままモーターにかけるプログラムを見ていきましょう。
プログラム
import machine
import utime
IN1 = machine.Pin(1, machine.Pin.OUT)
IN2 = machine.Pin(2, machine.Pin.OUT)
while True:
# 正転
IN1.value(1)
IN2.value(0)
utime.sleep(2)
# ブレーキ
IN1.value(1)
IN2.value(1)
utime.sleep(2)
# 逆転
IN1.value(0)
IN2.value(1)
utime.sleep(2)
# 停止
IN1.value(0)
IN2.value(0)
utime.sleep(2)
解説
Pin1とPin2を出力用のピンとして設定し、HIGHかLOWの値を出力する、デジタル出力ピンとしています。
正転→ブレーキ→逆転→停止をwhileループの中で繰り返しています。
サンプル②:PWM信号でモーターの速度を調整する
一個目のプログラムでは電源電圧をそのままモーターにかけていましたが、PWM信号を与えることで、電圧レベルを下げてモーターに供給させることができます。
プログラム
from machine import PWM, Pin
import utime
IN1 = PWM(Pin(1))
IN2 = PWM(Pin(2))
IN1.freq(100)
IN2.freq(100)
max_duty = 65025
while True:
# 正転
IN2.duty_u16(0)
for i in range(50, 100):
IN1.duty_u16(int(max_duty*i*0.01))
utime.sleep(0.1)
# ブレーキ
IN1.duty_u16(max_duty)
IN2.duty_u16(max_duty)
utime.sleep(2)
# 逆転
IN1.duty_u16(0)
for i in range(50, 100):
IN2.duty_u16(int(max_duty*i*0.01))
utime.sleep(0.1)
# 停止
IN1.duty_u16(0)
IN2.duty_u16(0)
utime.sleep(2)
解説
IN1、IN2に与える信号をPWM信号にしています。
プログラムでは50%から100%へと段々と出力を上げていくプログラムです。
モーターに何も接続していない状態だと速度の違いが分かりにくいですが、実際にロボットカーなどをモーターで制御したときに、はっきりと速度の違いを感じることができます。
PWM信号のプログラムについては、以前の記事でも書いているのでぜひ参考にしてみて下さい。