ステップ角単位で回転するという仕組み上、ステッピングモーターは振動や音が大きくなりやすい特徴があります。RPZ-Stepperは静音モードを搭載しており、特に低速回転時において振動と音を低減できます。静かな環境で動作させるアプリケーションに最適です。

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

制御ソフトウェアcgstepの基本的な使い方は以下の記事で解説しています。まだの方は先に確認してください。
J3 MOTOR1端子にモーターを接続します。
Pythonでの準備
Pythonは対話モードで解説していきます。Pythonサンプルコードも用意しています。
Pythonの場合、モーター制御クラスのインスタンスを作成します。
Python:
from cgstep import TMC5240
m1 = TMC5240()
静音モードを有効にする
静音モードはen_pwm_modeに1を設定することで有効になります。TMC5240でStealthChop2と呼ばれている機能になります。
Python:
m1.en_pwm_mode = 1
コマンド:
cgstep en_pwm_mode -w 1
pwm_freqでPWM周波数を変更できます。通常は初期値の0から変更不要です。何らかの理由で変更したい場合は以下の表を参考に設定します。
pwm_freq | PWM周波数[kHz] |
---|---|
0 (初期値) | 24.4 |
1 | 36.6 |
2 | 48.8 |
Python:
m1.pwm_freq = 0
コマンド:
cgstep pwm_freq -w 0
必須の設定をしておきます。
Python:
m1.current_range = 2
m1.vmax = 80000
m1.amax = 500
m1.dmax = 500
m1.enable()
コマンド:
cgstep current_range -w 2
cgstep vmax -w 80000
cgstep amax -w 500
cgstep dmax -w 500
cgstep enable
回転させる
xtargetを設定して回転させてみます。静音モードを有効にしたことで、動作音や振動が抑えられているのが分かると思います。
Python:
m1.xtarget = 153600
コマンド:
cgstep xtarget -w 153600
モータードライバーは回転時の負荷や電流に応じて自動的にPWMの設定を最適化するため、ユーザー側で細かい調整は不要です。手動で調整したい場合はTMC5240データシートを参照してください。
速度域に応じて静音モードを解除する
静音モードは動作音を大幅に減らしますが、若干トルクが落ちる特徴があります。そこで、高速で回転させる場合にトルクを確保するため、一定速度以上で自動的に静音モードを解除する機能があります。(オプション機能)
この機能を有効にするには, tpwmthrsを設定します。
tpwmthrsは速度のvmaxなどと異なり、tstep単位で指定します。
tstep = 16777216 ÷ 速度v
の関係があります。また、モーターの現在のtstepはtstepパラメーターを読み出して確認可能です。
200ステップ/回転のモーターの場合、60rpmのとき速度v=68720、tstep=244となります。今回の例では244にして回転させてみます。vmaxが80000なので、最高速度付近では静音モードが無効に切り替わります。実際には運用に応じた値を設定してください。
Python:
m1.tpwmthrs = 244
m1.xtarget = 0
コマンド:
cgstep tpwmthrs -w 244
cgstep xtarget -w 0
tpwmthrsに0を設定すると静音モードが常に有効な状態に戻ります。
Python:
m1.tpwmthrs = 0
コマンド:
cgstep tpwmthrs -w 0
停止時にモーターを固定しない
静音モードで利用可能なもう一つのオプション機能を紹介します。
指定位置で停止している場合、通常ステッピングモーターはその位置で固定される力が働きます。freewheelオプションを使うと、停止時に位置を固定せず外力で回転可能な状態にすることができます。消費電力もカットできます。特に固定する必要がないアプリケーションでご利用ください。
以下の表の通り、freewheelの設定値によって動作が変わります。また、この機能は停止時の電流iholdを最低の0に設定することで有効になります。
freewheel | 動作 |
---|---|
0 (初期値) | 通常の動作。モーター位置を保持する |
1 | フリーホイール。電流を流さず、モーターが外力で回転する |
2 | パッシブブレーキ。電流を流さず、モーターが外力で回転するがブレーキがかかる |
フリーホイールに設定する例です。モーターの位置が固定されなくなるのが分かると思います。
Python:
m1.freewheel = 1
m1.ihold = 0
コマンド:
cgstep freewheel -w 1
cgstep ihold -w 0
なお、外力で回転した場合でもモータードライバー側の現在位置xactualは変わらない(回転したかどうかプログラムからは分からない)点に注意してください。
まとめ
制御ソフトウェアcgstepで、ステッピングモーター振動と音を低減させる方法の解説は以上です。RPZ-Stepperには他にも多くの機能があり、それらの解説記事も参考にしてください。

CO2濃度に応じてLEDの色を変化させ、リレーで外部機器をON/OFFする
Raspberry PiとRPZ-CO2-Sensorを使ってCO2(二酸化炭素)濃度を測定し、LEDの色を変化させる応用例です。LEDを見ることで、換気の必要性がひと目でわかります。濃度が一定以上になったらリレーで換気ファンなどの外部機器をONすることも可能です。

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

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