ステッピングモーターを指定速度/回転数で回転させる (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パッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。

ラズパイと赤外線でエアコンの自動ON、消し忘れ機能を実現

普段、エアコンを消し忘れてしまい夜間つけっぱなしにしてしまったり、冬場に朝エアコンを入れても暖かくなるのに時間がかかったことは無いでしょうか?本記事では、Raspberry Piと拡張基板を利用して、毎晩のエアコン消し忘れ機能、および朝に温度が低い場合に自動で暖房を入れる機能を実現します。

RPZ-Stepper (Raspberry Pi用 高機能ステッピングモータードライバー)

ステッピングモーターを制御できるRaspberry Pi(ラズパイ)用拡張基板です。位置や角度、回転数などを指示すれば、自動で目標までモーターを動かしてくれます。加減速、静音モード、省電力モード、電流測定などの機能を搭載しています。ものを動かしたり回転させるシステムが実現できます。