加速、減速を細かく指定してステッピングモーターを回転させる (Raspberry Pi + RPZ-Stepper)

RPZ-Stepperでは、速度域を3つに分けて、それぞれについてモーターの加速、減速の速さを指定することが可能です。例えば、負荷が重いので動き出しをゆっくり加速したい場合が考えられます。また、ステッピングモーターは回転数が上がるほどトルクが下がる特徴があります。そのため、早い速度域では加速を遅くして脱調を回避できます。

更新日 : 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)

加速、減速を細かく指定する

これまでの解説では速度vmaxに対してamaxで加速、dmaxで減速を設定していました。

RPZ-Stepperでは、以下の図のように速度域を3つに分けて、それぞれについて加速、減速の速さを指定することが可能です。例えば、負荷が重いので動き出しをゆっくり加速したい場合が考えられます。また、ステッピングモーターは回転数が上がるほどトルクが下がる特徴があります。そのため、早い速度域では加速を遅くして脱調を回避できます。

TMC5240データシートより引用

具体的な指定方法について説明します。vmaxに加えてv1、v2を指定することで速度域を0〜v1、v1〜v2、v2〜vmaxに分けます。それぞれについての加速を以下の表のようにしていします。なお、v2やv1に0を設定する(初期値も0となっています)とその速度域は無視されます。

速度域加速減速
0〜v1a1d1
v1〜v2a2d2
v2〜vmaxamaxdmax

実際の設定例です。速度に関するv1, v2, vmaxはいずれも末尾に”_rpm”を付けることでrpm単位での指定が可能です。コマンドでrpm単位で速度を指定する場合は-sオプションに使用モーターの1回転あたりのステップ数を指定します。省略すると200になります。

Python:

1つめの速度域

m1.v1_rpm = 30
m1.a1 = 200
m1.d1 = 200

2つめの速度域

m1.v2_rpm = 60
m1.a2 = 1000
m1.d2 = 1000

3つめの速度域

m1.vmax_rpm = 80
m1.amax = 200
m1.dmax = 200

コマンド:

1つめの速度域

cgstep v1_rpm -w 30 -s 200
cgstep a1 -w 200
cgstep d1 -w 200

2つめの速度域

cgstep v2_rpm -w 60 -s 200
cgstep a2 -w 1000
cgstep d2 -w 1000

3つめの速度域

cgstep vmax_rpm -w 80 -s 200
cgstep amax -w 200
cgstep dmax -w 200

必須の設定をしておきます。電流値ifsを0.5Aとしていますが、お使いのモーターに合わせてください。

Python:

m1.ifs = 0.5
m1.enable()

コマンド:

cgstep ifs -w 0.5
cgstep enable



回転させる

xtargetを設定して回転させてみます。最初の加速がゆっくりなのがわかると思います。vmax付近も加速が遅くなっていますが、そちらは見た目ではわかりにくいかもしれません。

Python:

m1.moveto(256000)

コマンド:

cgstep moveto -w 256000

まとめ

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

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

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

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

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

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

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