Raspberry Pi Picoでステッピングモーターを制御する方法 基礎から実践まで

はじめに

Raspberry Pi Pico でステッピングモーターを動かしてみます。回転角度を精密に制御することができて、いろいろなプロジェクトに活用することができます。

ステッピングモーターとは

ステッピングモーター(Stepper Motor)は、回転角度を精密に制御できるモーターの一種です。
一般的なDCモーターとは異なり、パルス信号を与えることで一定角度ずつ回転し、位置制御が可能です。

ステッピングモーターの仕組み

ステッピングモーターは、内部に複数のコイル(ステータ)を持ち、電流を順番に流すことで回転します。主に以下の2種類に分類されます

ユニポーラ(Unipolar)モーター
センタータップ付きのコイルを持ち、電流が一方向に流れます。

バイポーラ(Bipolar)モーター
センタータップがなく、電流が双方向に流れるため、Hブリッジ回路が必要です。

センタータップとは?

センタータップとは、コイルの中央部分に接続された端子のことです。ユニポーラモーターでは、このセンタータップを電源に接続し、残りの両端を順番にGNDに接続することで電流の向きを切り替えずに駆動できます。これにより、駆動回路が比較的シンプルになります。

ステッピングモーターを動かすには?

ステッピングモーターは直接マイコン(ラズベリーパイPicoなど)に接続して動かすことはできません。
ドライバが必要になります。

なぜドライバが必要なのか?

ステッピングモーターは高い電流を必要とし、ラズベリーパイPicoのGPIOピンでは十分な電流を供給できません
また、GPIOは直接モーターを駆動するための保護機能がないため、過電流によって損傷する可能性があります。そのため、ドライバを使用してマイコンとモーターの間に適切な電流制御を行う必要があります。

ステッピングモーター駆動のためのドライバ

ULN2003(ユニポーラ向け)
 5V駆動のユニポーラステッピングモーター(28BYJ-48 など)を制御
 ラズベリーパイPicoのGPIOピンから制御可能

A4988, DRV8825(バイポーラ向け)
 高トルクのバイポーラステッピングモーターを駆動
 マイクロステップ制御が可能
 追加の電源供給(12Vや24V)が必要

28BYJ-48ステッピングモーターの特徴

28BYJ-48は、内部にギヤを持つユニポーラステッピングモーターです。内部のギヤで減速することで、高いトルクと精密な制御が可能になります。通常、1回転するのに2048ステップ(64:1のギヤ比)が必要になります。そのため、高精度な位置制御を実現できます。

配線

ここでは、28BYJ-48(ユニポーラ)とULN2003ドライバを使った例を紹介します。

RaspberryPi PicoULN2003→28BYJ-48
VSYS(39番)VCC
GND(38番)GND
GP16(21番)IN1
GP17(22番)IN2
GP18(24番)IN3
GP19(25番)IN4
()内はピン番号

ステッピングモーターを動かす

ステッピングモーターを加速・減速させながら回転させます

from machine import Pin
import time

# ピンの設定
pins = [Pin(16, Pin.OUT), Pin(17, Pin.OUT), Pin(18, Pin.OUT), Pin(19, Pin.OUT)]

# ステッピングシーケンス(4相励磁)
step_sequence = [
    [1, 0, 0, 0],
    [1, 1, 0, 0],
    [0, 1, 0, 0],
    [0, 1, 1, 0],
    [0, 0, 1, 0],
    [0, 0, 1, 1],
    [0, 0, 0, 1],
    [1, 0, 0, 1]
]

def step_motor():
    steps = 512  # 1回転分のステップ
    min_delay = 0.001  # 最小遅延(最速)
    max_delay = 0.01  # 最大遅延(最遅)
    half_steps = steps // 2

    for i in range(steps):
        delay = max_delay - (max_delay - min_delay) * abs(i - half_steps) / half_steps
        for step in step_sequence:
            for j in range(4):
                pins[j].value(step[j])
            time.sleep(delay)

# モーターを加速・減速しながら回転させる
step_motor()

まとめ

ステッピングモーターは高精度に制御ができるため、ロボットのアームなどいろいろなところで使われています。
アイデアがあれば使い方は無限大だと思いますので、まずは一度触ってみることをおすすめします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする