加速、減速を細かく指定してステッピングモーターを回転させる (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パッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。

スイッチでラズパイ/Jetsonの電源をON/OFF (RPZ-PowerMGR)

RPZ-PowerMGRを使って、スイッチでRaspberry Pi(ラズパイ)/Jetson Nanoの電源ON/OFFする方法の解説です。ケーブルの抜き挿しやログインして操作しなくても電源ON/OFFできるほか、リモートやプログラムからシャットダウンした際に自動で電源OFFすることもできます。不要な時は電源を切ることで省電力化が可能です。

RPZ-IR-Sensor (Raspberry Pi用 温度/湿度/気圧/明るさ/赤外線 ホームIoT拡張ボード)

動作をプログラミング可能な、Raspberry Pi/Zero(ラズパイ)用ホームIoT拡張ボードです。温度、湿度、気圧、明るさセンサー、赤外線送受信機能を搭載。温度が上がったらエアコンをオンにする、暗くなったら照明を点灯する、外出先から家電の操作をする、気温や日照時間を記録する、といった使い方が可能です。LEDにステータスを表示したり、スイッチを押したら特定の処理をすることもできます。