加速、減速を細かく指定してステッピングモーターを回転させる (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には他にも多くの機能があり、それらの解説記事も参考にしてください。

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

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

ラズパイ/Jetsonの消費電力測定&モバイルバッテリー稼働時間の計算 (RPZ-PowerMGR)

RPZ-PowerMGRを使って、Raspberry Pi(ラズパイ)/Jetson Nanoの消費電力を測定する方法の解説です。モバイルバッテリーでの運用可能な時間を計算し、実際の運用時間と比較しました。

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

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