💭

Raspberry Pi 5からst-spinライブラリを使ってステッピングモーターを駆動させる

2024/06/22に公開

前回の記事では、spidevパッケージを使用してL6470モータードライバにコマンドを送信してステッピング・モーターを回転させました。この方法ではコマンドのバイナリ・コードのフォーマットやコード体系を意識してコードを読み書きする必要があり、開発効率が良くありません。今回はst-spinというパッケージを使用して、直感的にモーターを駆動させる方法を見ていきます。

必要なもの

準備

下図のようにステッピングモーター等を接続します。

実行

まず、st-spinパッケージをインストールします。(下記の方法はシステムのPythonにパッケージを追加します、仮想環境にインストールする場合は後述の方法でインストールします。)

sudo python -m pip install -U st-spin --break-system-packages

仮想環境にインストールする場合は以下のように仮想環境を作成してインストールします。

python -m venv ~/.spin_env
. ~/.spin_env/bin/activate
pip install st-spin

以下のプログラムを作成し実行します。

st-spin_motor_drive.py
import time
from stspin import (
    SpinChain,
    Constant as StConstant,
    Register as StRegister,
)

# ディジー・チェイン(芋づる式)でモータードライバを接続できるが、1台だけ(total_devices=1)接続する
st_chain = SpinChain(total_devices=1, spi_select=(1, 0))
# 最初(と言っても1台だけだが…)のモータードライバのインスタンスを生成する
motor = st_chain.create(0)

# 200ステップ/秒で10秒間回転させる
motor.run(200)
time.sleep(10)
motor.stopSoft()
time.sleep(1)

# 逆方向に台形加速しながら500,000ステップ回転させる
motor.setRegister(StRegister.SpeedMax, 0x22)
motor.setRegister(StRegister.Acc, 0x5)
motor.setRegister(StRegister.Dec, 0x10)
motor.setDirection(StConstant.DirReverse)
motor.move(steps=500000)

# 回転しきるまで待つ
while motor.isBusy():
    print("Motor is rolling.")
    time.sleep(1)

# モーターの保持電流を止める
motor.hiZHard()
GitHubで編集を提案

Discussion