cgstepの使い方&レジスターアクセス方法 (Raspberry Pi + RPZ-Stepper)

制御ソフトウェアcgstepには、モータードライバーTMC5240のパラメーターを読み書きする機能、独自の複合機能オペレーション、レジスターを直接書き換える機能があります。本記事では、それぞれの機能の使い方について解説します。使い方の記事で紹介しきれなかったパラメーターやレジスターを書き換えることで、より高度な調整が可能になります。

更新日 : 2024年1月3日

Pythonとコマンドライン

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

TMC5240クラスのインスタンス

Pythonの場合、モーター制御クラスのインスタンスを作成する必要があります。これ以降、その変数名をm1としてコード例を表示しています。rpmで速度を指定する場合はsteps_per_revに使用モーターの1回転あたりのステップ数を指定します。省略すると200になります。

Python:

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

パラメーター

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

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

Python:

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

コマンド:

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

パラメーターを読み出す際の書式は以下のとおりです。

Python:

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

コマンド:

cgstep パラメーター名

パラメーター名はモータードライバーIC TMC5240のデータシートに準拠しています。また、一部のパラメーターは読み出し専用となっています。データシートでRead onlyとなっている場合は読み出し専用です。

また、TMC5240には非常に多くのパラメーターがあり、cgstepですべて実装しているわけではありません。指定可能なパラメーターはsupported_paramオペレーションで確認できます。

Python:

TMC5240.supported_param()

コマンド:

cgstep supported_param



追加パラメーター

直感的な使い方を実現するため、TMC5240データーシートに存在しないパラメーターを追加しています。

rpm指定パラメーター

回転速度に関するパラメーターについては、rpm単位で指定可能なxxx_rpmパラメーターを追加しています。一例として、vmax_rpmに60を設定すると、cgstepが60rpmに近くなる値を計算し、vmaxパラメーターに設定します。

この際、モーター1回転あたりのステップ数の情報が必要になります。pythonではTMC5240クラスのインスタンス作成時にsteps_per_revで指定した値を使用します。コマンドの場合は-sオプションで指定します。省略するといずれも200が使われます。

Python:

m1.vmax_rpm = 回転数

コマンド:

cgstep vmax_rpm -w 回転数 -s 200
モーター電流値パラメーター

モーターの最大電流値はcurrent_rangeとglobal_scalerで調整する必要がありますが直感的に操作しにくい問題がありました。そこで、パラメーターifsにモーター電流値[A]設定すると、cgstepが自動的にcurrent_rangeとglobal_scalerを設定します。電流値は0.125 – 3.0の範囲で指定可能です。0.5Aに設定するには以下のようにします。

Python:

m1.ifs = 0.5

コマンド:

cgstep ifs -w 0.5

回転中や停止中の電流を動的に調整するパラメーターirun, iholdもあります。こちらの記事を参考にしてください。

レジスター

直接レジスターを読み書きすることも可能です。パラメーターが実装されていないレジスターを読み書きしたい場合などにご利用ください。レジスターのアドレスと各ビットの機能はTMC5240のデータシートを参照してください。

レジスター書き込みは以下のようにします。アドレスは10進数で指定するか、0x21のように0xをつけると16進数で指定できます。

Python:

m1.write_register(アドレス,データ)

コマンド:

cgstep アドレス -w データ

レジスター読み出しは以下のようにします。-xオプションをつけるとレジスターの値を16進数で表示します。

Python:

変数 = m1.read_register(アドレス)

コマンド:

cgstep アドレス [-x]

オペレーション

パラメーター読み書きだけで実現できない機能や、RPZ-Stepper独自の機能をオペレーションとして実装しています。使用方法は以下のようにオペレーション名指定までは共通ですが、それ以降は各オペレーションの書式を参照してください。

Python:

変数 = m1.オペレーション名...

コマンド:

cgstep オペレーション名...
enable

インバーターをONしてモーターに電圧印加します。実際にはtoffパラメーターに3を書き込みます。

Python:

m1.enable()

コマンド:

cgstep enable
disable

インバーターをOFFしてモーターの電圧印加を停止します。実際にはtoffパラメーターに0を書き込みます。

Python:

m1.disable()

コマンド:

cgstep disable
moveto

xtargetを書き換えてモーターを指定位置まで回転させます。回転が完了するまで待機してから制御を返します。

Python:

m1.moveto(位置)

コマンド:

cgstep moveto -w 位置
board_current

基板全体の消費電流[A]を返します。

Python:

print(m1.board_current)

コマンド:

cgstep board_current

まとめ

制御ソフトウェアcgstepのパラメーター、レジスター、オペレーション機能の使い方は以上です。パラメーターやレジスターを書き換えることで、より高度な調整が可能になります。

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

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

定期撮影ラズパイカメラをモバイルバッテリーで長期運用 (RPZ-PowerMGR)

Raspberry Pi(ラズパイ)と純正カメラを使用して、定期的に撮影するタイムラプス機能を実装する方法を解説します。RPZ-PowerMGR拡張基板を使うことで、指定時刻に起動し、撮影後は自動的にシャットダウン&電源OFFします。待機時の消費電力をカットすることで、モバイルバッテリーで長期運用が可能になります。

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

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