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

一般的なステッピングモータードライバーでは、所望の速度に合わせたパルスをリアルタイムで出力し続けるひつようがあります。RPZ-Stepperは、速度指定モードに設定することで、自動的にステッピングモーターを回転させ続けることができ、Raspberry Piでは別の処理を行うことも容易です。途中で速度を変更も可能で、指定したパラメーターに応じて自動で加減速します。速度を細かく制御しながら回転し続けるようなアプリケーションを実現できます。

更新日 : 2024年10月5日

セットアップ

本記事では高機能モータードライバー基板「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には他にも多くの機能があり、それらの解説記事も参考にしてください。

BME280センサーとラズパイで気温、湿度、気圧を測定する

Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、BME280センサーで気温、湿度、気圧を測定する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定や記録ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。

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

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

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

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