ステッピングモーターを指定速度/回転数で回転させる (Raspberry Pi + RPZ-Stepper)

RPZ-Stepperは、速度指定モードに設定することで、指定した速度でステッピングモーターを回転させ続けることができます。途中で速度を変更も可能で、指定したパラメーターに応じて自動で加減速します。速度を細かく制御しながら回転し続けるようなアプリケーションに最適です。

更新日 : 2024年1月3日

セットアップ

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

RPZ-Stepper

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

J3 MOTOR1端子にモーターを接続します。

Pythonでの準備

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

Pythonの場合、モーター制御クラスのインスタンスを作成します。rpmで速度を指定する場合はsteps_per_revに使用モーターの1回転あたりのステップ数を指定します。省略すると200になります。

Python:

from cgstep import TMC5240
m1 = TMC5240(steps_per_rev=200)

速度指定モードに設定

初期状態では位置指定モードになっています。rampmodeを変更して速度指定モードに設定します。回転方向に応じて1か2を指定します。rampmodeに0を指定すると位置指定モードに戻すことができます。

Pythonでは「RAMPMODE_」で始まる定数を用意しているので、そちらでも指定可能です。

モード数値で指定定数で指定(Python)
位置指定0RAMPMODE_POSITIONING
速度指定 正方向1RAMPMODE_VELOCITY_POSITIVE
速度指定 逆方向2RAMPMODE_VELOCITY_NEGATIVE

Python:

m1.rampmode = TMC5240.RAMPMODE_VELOCITY_POSITIVE

コマンド:

cgstep rampmode -w 1

必須の設定をしていきます。速度指定モードではvmaxで速度を指定します。最初は停止しておきたいので0にしています。加速、減速の速さはamaxで指定します。電流値ifsを0.5Aとしていますが、お使いのモーターに合わせてください。

Python:

m1.ifs = 0.5
m1.vmax = 0
m1.amax = 500
m1.enable()

コマンド:

cgstep ifs -w 0.5
cgstep vmax -w 0
cgstep amax -w 500
cgstep enable



指定速度で回転させる

vmax_rpmを設定すると指定の速度で回転しつづけます。コマンドの場合は-sオプションに使用モーターの1回転あたりのステップ数を指定します。省略すると200になります。

Python:

m1.vmax_rpm = 20

コマンド:

cgstep vmax_rpm -w 20 -s 200

velocity_reachedパラメーターを読み出すと、指定速度に到達したか確認できます。到達した場合は1、そうでない場合は0を返します。

Python:

print(m1.velocity_reached)

コマンド:

cgstep velocity_reached

vmax_rpmを変えると速度が変わります。

Python:

m1.vmax_rpm = 60

コマンド:

cgstep vmax_rpm -w 60 -s 200

vmaxを0にすると停止します。(vmax_rpmを0にしても同じ動作です)

Python:

m1.vmax = 0

コマンド:

cgstep vmax -w 0

rampmodeに2かRAMPMODE_VELOCTY_NEGATIVEを設定すると回転方向が逆になります。

Python:

m1.rampmode = TMC5240.RAMPMODE_VELOCITY_NEGATIVE
m1.vmax_rpm = 30

コマンド:

cgstep rampmode -w 2
cgstep vmax_rpm -w 30 -s 200

位置指定モードに戻したい場合はrampmodeに0かTMC5240.RAMPMODE_POSITIONINGを設定します。

また、速度指定モードで回転した場合でも、現在位置xactualが変動する点に注意してください。このままvmaxを指定すると、目標xtargetへ回転します。この動作をさせたくない場合はxactualに0を設定しておきます。

Python:

m1.vmax = 0
m1.rampmode = TMC5240.RAMPMODE_POSITIONING
m1.xactual = 0

コマンド:

cgstep vmax -w 0
cgstep rampmode -w 0
cgstep xactual -w 0

位置指定モードでは減速にdmaxも指定する必要があります。(速度指定モードではamaxが加減速に適用されdmaxは未使用)

まとめ

制御ソフトウェアcgstepで、指定した速度でステッピングモーターを回転させ続ける方法の解説は以上です。RPZ-Stepperには他にも多くの機能があり、それらの解説記事も参考にしてください。

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

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

スイッチでラズパイ/Jetsonの電源をON/OFF (RPZ-PowerMGR)

RPZ-PowerMGRを使って、スイッチでRaspberry Pi(ラズパイ)/Jetson Nanoの電源ON/OFFする方法の解説です。ケーブルの抜き挿しやログインして操作しなくても電源ON/OFFできるほか、リモートやプログラムからシャットダウンした際に自動で電源OFFすることもできます。不要な時は電源を切ることで省電力化が可能です。

RPZ-PowerMGR (Raspberry Pi/Jetson Nano用 電源管理/制御/RTC拡張基板)

スイッチで電源ON/OFF、指定時刻に電源ON/OFF、シャットダウン後自動電源OFFを可能にする拡張基板です。Raspberry Pi(ラズパイ)やJetson Nanoの電源の課題を解決し、省電力運用を可能にします。RTCで電源OFF時も時刻を保持します。USB Type-C端子を搭載し、モバイルバッテリーでも利用できます。