パソコン並の性能を持つと言われるRaspberry Pi 5ですが、RP1と呼ばれるI/Oコントローラーが追加されました。これに伴いGPIOの番号に互換性がなかったりして、良く使われてきたドライバーが動かなかったりします。ここでは、秋月電子のL6470使用 ステッピングモータードライブキットを使ってモーターを動かしながらSPI通信の方法をみていきます。
必要なもの
- Raspberry Pi 5
- L6470 ステッピングモーター・ドライバー
- バイポーラ・ステッピングモータ
- 12V ACアダプター
- DCジャック
準備
下図のようにステッピングモーター等を接続します。
実行
Pythonで制御するために、公式サイトで紹介されているspidevを使用します。インストールされていない場合は以下のコマンドを実行してインストールします。
pip install spidev
次に、以下のプログラムを作成し実行します。
L6470_motor_drive.py
import spidev
import time
# SPIの初期化
spi = spidev.SpiDev()
spi.open(0, 0)
spi.bits_per_word = 8
spi.cshigh = False
spi.loop = True
spi.no_cs = False
spi.lsbfirst = False
spi.max_speed_hz = 4000000
spi.mode = 3
spi.threewire = False
# しばらく何もしない(NOP)
spi.xfer([0x00])
spi.xfer([0x00])
spi.xfer([0x00])
spi.xfer([0x00])
# HOMEポジションへ
spi.xfer([0x70])
# 最大回転速度設定
spi.xfer([0x07])
spi.xfer([0x20])
# モータ停止中の電圧
spi.xfer([0x09])
spi.xfer([0xFF])
# モータ定速回転中の電圧
spi.xfer([0x0A])
spi.xfer([0xFF])
# モータ加速中の電圧
spi.xfer([0x0B])
spi.xfer([0xFF])
# モータ減速中の電圧
spi.xfer([0x0C])
spi.xfer([0xFF])
# ステップモード
spi.xfer([0x16])
spi.xfer([0x00])
time.sleep(3)
while True:
# 目標速度で正転させる
spi.xfer([0x50])
# NOP
spi.xfer([0x00])
# 回転速度を設定
spi.xfer([0x20])
# NOP
spi.xfer([0x00])
# 1秒回転
time.sleep(1)
# 停止
spi.xfer([0xB8])
# 1秒停止
time.sleep(1)