ステッピングモーターを指定位置まで回転させる基本手順 (Raspberry Pi + RPZ-Stepper)

RPZ-StepperとRaspberry Pi(ラズパイ)を使ってステッピングモーターを指定位置まで回転させる基本手順を解説しています。制御ソフトウェアcgstepの使い方と、必須のパラメーターについても解説しています。

更新日 : 2023年11月13日

セットアップ

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

RPZ-Stepper

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

Pythonとコマンドライン

RPZ-Stepper制御ツール「cgstep」は、Pythonもしくはコマンドで操作することができます。そこで、これ以降は画面を左右に分けてそれぞれの方法を解説していきます。まずはターミナルを開きましょう。

Pythonは対話モードで解説していきます。python3コマンドで対話モードに入り、「>>>」が表示される状態としてください。Pythonコードも用意しているので、対話モードでなく直接実行したい方はそちらも参考にしていただけます。

Python:

$ python3
>>> 

Pythonでの準備

最初のステップとして、必要最低限の設定でモーターを指定位置まで回転させる方法を解説します。Pythonコードはこちらです。

Pythonの場合は、モーター制御の準備をします。m1がモーター制御クラスのインスタンスで、J2 MOTOR1端子のモーターを操作できます。コマンドラインの場合は次に進んでください。

Python:

from cgstep import TMC5240
m1 = TMC5240()



パラメーターの設定方法

モーターを操作する際に最もよく使用するのがパラメーターの設定(書き込み)です。例えば、モーターの回転速度や加減速、目標位置などのパラメーターに値を設定することで、意図した通りにモーターを動かせるのです。

パラメーターを設定(書き込み)する際の書式は以下のとおりです。

Python:

m1.パラメーター名 = 設定値

コマンド:

cgstep パラメーター名 -w 設定値

設定したパラメーターはモータードライバーICに保存され、電源を落とすまで保持されます。また、パラメーター名はモータードライバーIC TMC5240のデータシートに準拠しています。

また、パラメーターを読み出すこともできます。これはモーターの状態、現在の位置などを確認することに使います。パラメーター読み出しの書式は以下のとおりです。

Python:

変数 = m1.パラメーター名

コマンド:

cgstep パラメーター名

必須パラメーターの設定

ここからは実際に、モーターを動かす際に必須のパラメーターを以下を順に設定していきます。

パラメーターcurrent_rangeで電流レンジを決めます。以下の表の通り0-2で指定します。使用するモーターの定格に近く、それより大きい値にしておきます。

current_range電流レンジ(ピーク/相)電流レンジ(実効値/相)
0 (初期値)1A0.7A
12A1.4A
23A2.1A

Python:

m1.current_range = 2

コマンド:

cgstep current_range -w 2

vmaxで回転速度を設定します。今回の例では68720とします。200ステップ/回転のモーターの場合、約60rpmとなります。

Python:

m1.vmax = 68720

コマンド:

cgstep vmax -w 68720

amaxで加速の速さを、dmaxで減速の速さを設定します。今回の例では500とします。停止状態から、上記の設定速度68720まで約1.4秒で加速します。減速も同様です。

Python:

m1.amax = 500
m1.dmax = 500

コマンド:

cgstep amax -w 500
cgstep dmax -w 500

次に以下を実行してモータードライバーの出力を有効にし、モーターに電圧を印加します。なお、enableはパラメーターではなくcgstepのオペレーション名です。そのため、パラメーターと若干書式が異なり、Pythonでは関数なので「()」が付きます。コマンドでは「-w」は不要です。

Python:

m1.enable()

コマンド:

cgstep enable

以上で必須パラメーターの設定は完了で、モーターを動かす準備が整いました。これらの必須パラメーターはどのような設定でモーターを動かす場合も必要になります。

モーターを指定位置まで回転させる

モーターを指定位置まで回転させるには、xtargetパラメーターに目標位置を設定します。

位置の初期値は0で、マイクロステップ数で指定します。モーターの1ステップ(フルステップ)は256のマイクロステップに分割されます。つまり、200ステップ/回転(フルステップ角1.8°)のモーターの場合、

200 × 256 = 51200

となり、xtargetに51200を設定するとちょうど1回転することになります。今回の例では3回転する153600にします。

位置は+/-2147483647の範囲で指定することができ、マイナスだと反対方向に回転します。

Python:

m1.xtarget = 153600

コマンド:

cgstep xtarget -w 153600

5秒程度かけてモーターが3回転して停止すれば成功です!

モーターの位置、速度を取得

xactual、vactualを読み出すことでモーターの現在位置、現在の速度を取得できます。すでにモーターが回転し終わって停止していれば、位置が153600、速度が0となるはずです。

Python:

print('現在の位置:', m1.xactual)
print('現在の速度:', m1.vactual)

コマンド:

cgstep xactual
cgstep vactual

また、position_reachedを読み出すことでモーターがxtargetで指定した位置に到達したか分かります。到達している場合は1、そうでない場合は0を返します。

Python:

print(m1.position_reached)

コマンド:

cgstep position_reached



モーターを元の位置に戻す

xtargetに0を設定すると、逆回転して最初の位置に戻ります。

Python:

m1.xtarget = 0

コマンド:

cgstep xtarget -w 0

目標に到達するまで待つ

xtargetを設定する場合、モーターが動き始めた時点で制御が戻るため、モーターが目標に到達するまでの間に他の処理が可能です。一方、movetoオペレーションを使うと、目標に到達するまで待機し、到達すると制御を戻します。なお、movetoはcgstepのオペレーションの1つで、パラメーターではありません。

Python:

m1.moveto(153600)
m1.moveto(0)

コマンド:

cgstep moveto -w 153600
cgstep moveto -w 0

Python対話モード終了

以上で本記事のサンプルコードは終了です。Pythonの対話モードを使用していた場合はexit()で終了します。

Python:

exit()

リセット(パラメーター初期化)

設定した位置、速度やその他パラメーターの情報は、モータードライバーICに保持され続けます(Pythonを終了しても保持されます)が、以下のいずれかを満たすと初期値に戻ります。

  • Raspberry Piの電源が切れる (電圧が印加されない状態)
  • RPZ-Stepperの電源(J2コネクタ)が切れるか、電圧が4.5Vを下回る
  • リセットスイッチSW1を押して離す

リセットスイッチSW1を押すことで、意図的に初期値に戻すことができます。サンプルコードがうまく動作しない場合は、以前設定したパラメーターが原因の可能性がありますので、リセットをお試しください。

リセットはモーターが停止している状態で行ってください。




まとめ

RPZ-StepperとRaspberry Pi(ラズパイ)を使ってステッピングモーターを指定位置まで回転させる基本手順を解説しました。制御ソフトウェアcgstepの使い方と、必須のパラメーターについても理解していただけたと思います。RPZ-Stepperには他にも多くの機能があり、それらの解説記事も参考にしてください。

TSL2572センサーとラズパイで明るさ(照度)を測定する

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

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

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

RPZ-CO2-Sensor (Raspberry Pi用 二酸化炭素センサー/リレー 拡張基板)

Raspberry Pi(ラズパイ)用CO2センサーとリレー拡張基板です。CO2濃度を測定することで換気の目安としたり、オフィス環境の改善やスマート農業のCO2モニタリングに利用できます。CO2濃度が一定以上になった際、リレーで換気ファンなどの外部機器をON/OFFできます。7色表示可能なRGB LEDを搭載し、CO2濃度に合わせて色を変えることも可能です。