複数のステッピングモーターを制御する (Raspberry Pi + RPZ-Stepper)

複数台のステッピングモーターモーターを使うと、X/Y/Z軸移動など複雑な動きを実現できます。一般的なドライバーで複数のモーターを制御するとプログラムが複雑になりがちです。RPZ-Stepperと制御ソフトウェアを利用すると、各モーターの位置や速度を指定するだけで複数モーターを制御できます。RPZ-Stepper基板1枚に2台のステッピングモーターを接続でき、最大で基板2枚、モーター4台を制御できます。

更新日 : 2024年11月20日

セットアップ

本記事では高機能モータードライバー基板「RPZ-Stepper」を使用してステッピングモーターを制御します。RPZ-Stepperの特徴、セットアップ、制御ソフトウェアのインストールは製品ページのセットアップを参照してください。

RPZ-Stepper

制御ソフトウェアcgstepの基本的な使い方は以下の記事で解説しています。まだの方は先に確認してください。

基板1枚の場合と基板2枚の場合に分けて解説します。

基板1枚の場合は、両方のコネクターにモーターを接続します。

基板2枚の場合、今回の例ではBD_IDがOFFの基板のJ3 MOTOR1端子、およびBD_IDがOFFの基板のJ4 MOTOR2端子にモーターを接続します。基板2枚の場合、ボード選択とBD_IDスイッチを設定しておく必要があります。セットアップ(ハードウェア)の手順をご確認ください。

基板1枚の場合

Pythonは対話モードで解説していきます。Pythonサンプルコードも用意しています。

Pythonの場合、TMC5240クラスのインスタンス作成時にdevice引数に0か1を指定します。(何も指定しないと0になります)

コマンドの場合、「-d」オプションに0か1を指定します。(何も指定しないと0になります)

0を指定するとJ3 MOTOR1端子のモーター1、1を指定するとJ4 MOTOR2端子のモーター2に対する操作となります。

Python:

from cgstep import TMC5240
m1 = TMC5240(device=0)
m2 = TMC5240(device=1)

コマンド:

cgstep -d 0 ...
cgstep -d 1 ...

各モーターごとにモータードライバーICは独立しています。そのため、両方のモーターについてパラメーターを設定する必要があります。以下はモーター1とモーター2にそれぞれパラメーターを設定する例です。電流値ifsを0.5Aとしていますが、お使いのモーターに合わせてください。

Python:

モーター1

m1.ifs = 0.5
m1.vmax_rpm = 60
m1.amax = 500
m1.dmax = 500
m1.enable()

モーター2

m2.ifs = 0.5
m2.vmax_rpm = 30
m2.amax = 300
m2.dmax = 300
m2.enable()

コマンド:

モーター1

cgstep -d 0 ifs -w 0.5
cgstep -d 0 vmax_rpm -w 60
cgstep -d 0 amax -w 500
cgstep -d 0 dmax -w 500
cgstep -d 0 enable

モーター2

cgstep -d 1 ifs -w 0.5
cgstep -d 1 vmax_rpm -w 30
cgstep -d 1 amax -w 300
cgstep -d 1 dmax -w 300
cgstep -d 1 enable

モーター1を3回転、モーター2を1回転させてみます。

Python:

m1.xtarget = 153600
m2.xtarget = 51200

コマンド:

cgstep -d 0 xtarget -w 153600
cgstep -d 1 xtarget -w 51200

元の位置に戻します。

Python:

m1.xtarget = 0
m2.xtarget = 0

コマンド:

cgstep -d 0 xtarget -w 0
cgstep -d 1 xtarget -w 0

基板2枚の場合

Pythonは対話モードで解説していきます。Pythonサンプルコードも用意しています。

Pythonの場合、TMC5240クラスのインスタンス作成時に、board_idとdevice引数にそれぞれ0か1を指定します。board_idで基板を選択、deviceで基板上コネクターを選択します。

コマンドの場合、「-b」と「-d」オプションそれぞれに0か1を指定します。-bで基板を選択、-dで基板上コネクターを選択します。

組み合わせにより、以下の表の対応したモーターが操作できます。

Python:

from cgstep import TMC5240
m1 = TMC5240(board_id=0, device=0)
m2 = TMC5240(board_id=0, device=1)
m3 = TMC5240(board_id=1, device=0)
m4 = TMC5240(board_id=1, device=1)

コマンド:

cgstep -b 0 -d 0 ...
cgstep -b 0 -d 1 ...
cgstep -b 1 -d 0 ...
cgstep -b 1 -d 1 ...

今回の例では基板#1のMOTOR#1をモーター1、基板#2のMOTOR#2をモーター4として、この2つを操作する手順を示します。他のモーターの操作も同様です。

各モーターごとにモータードライバーICは独立しています。そのため、両方のモーターについてパラメーターを設定する必要があります。以下はモーター1とモーター4にそれぞれパラメーターを設定する例です。電流値ifsを0.5Aとしていますが、お使いのモーターに合わせてください。

Python:

モーター1

m1.ifs = 0.5
m1.vmax_rpm = 60
m1.amax = 500
m1.dmax = 500
m1.enable()

モーター4

m4.ifs = 0.5
m4.vmax_rpm = 30
m4.amax = 300
m4.dmax = 300
m4.enable()

コマンド:

モーター1

cgstep -b 0 -d 0 ifs -w 0.5
cgstep -b 0 -d 0 vmax_rpm -w 60
cgstep -b 0 -d 0 amax -w 500
cgstep -b 0 -d 0 dmax -w 500
cgstep -b 0 -d 0 enable

モーター4

cgstep -b 1 -d 1 ifs -w 0.5
cgstep -b 1 -d 1 vmax_rpm -w 30
cgstep -b 1 -d 1 amax -w 300
cgstep -b 1 -d 1 dmax -w 300
cgstep -b 1 -d 1 enable

モーター1を3回転、モーター4を1回転させてみます。

Python:

m1.xtarget = 153600
m4.xtarget = 51200

コマンド:

cgstep -b 0 -d 0 xtarget -w 153600
cgstep -b 1 -d 1 xtarget -w 51200

元の位置に戻します。

Python:

m1.xtarget = 0
m4.xtarget = 0

コマンド:

cgstep -b 0 -d 0 xtarget -w 0
cgstep -b 1 -d 1 xtarget -w 0



まとめ

制御ソフトウェアcgstepで複数ステッピングモーターを制御する方法の解説は以上です。複数台のモーターを使うことでX/Y/Z軸移動など複雑な動きを実現できます。RPZ-Stepperには他にも多くの機能があり、それらの解説記事も参考にしてください。

SCD41 CO2センサーとラズパイで二酸化炭素濃度を測定する

Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、SCD41 CO2センサーで二酸化炭素濃度を測定したり、センサーの校正や設定を変更する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定や記録ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。

ラズパイで赤外線(家電、エアコン、照明、テレビなどを制御)

Pythonとpigpioを使ってRaspberry Piで赤外線の送受信を行う方法について解説しています。赤外線送受信ソフト「cgir」を使うことで、簡単に受信、登録、送信動作をさせることができるほか、データ解析も可能です。赤外線を使ってエアコン、照明、テレビなどの家電を制御することが可能になります。

Raspberry Pi Zero用 三脚&カメラマウントキット「RPZ-CamMountKit」

Raspberry Pi(ラズパイ) Zeroシリーズと純正のHQ/V3/V2カメラモジュールを三脚に固定するマウントキットです。三脚を利用することで、カメラの向きの調整が容易になるほか、固定場所の幅が広がります。RPZ-PIRS拡張基板の人感センサーとカメラの方向を合わせるように設計しており、人や動物が通った際に撮影するような応用が可能です。