静音モードでステッピングモーターの動作音を抑える (Raspberry Pi + RPZ-Stepper)

ステップ角単位で回転するという仕組み上、ステッピングモーターは振動や音が大きくなりやすい特徴があります。RPZ-Stepperは静音モードを搭載しており、振動と音を低減できます。モーターや回転数にもよりますが、動いているのかほとんどわからないレベルまで振動や音を減らすことも可能です。静かな環境で動作させるアプリケーションを実現できます。

静音モードあり、なしの動作音の比較
更新日 : 2024年10月5日

セットアップ

本記事では高機能モータードライバー基板「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)

静音モードを有効にする

静音モードはen_pwm_modeに1を設定することで有効になります。TMC5240でStealthChop2と呼ばれている機能になります。

Python:

m1.en_pwm_mode = 1

コマンド:

cgstep en_pwm_mode -w 1

pwm_freqでPWM周波数を変更できます。通常は初期値の0から変更不要です。何らかの理由で変更したい場合は以下の表を参考に設定します。

pwm_freqPWM周波数[kHz]
0 (初期値)24.4
136.6
248.8

Python:

m1.pwm_freq = 0

コマンド:

cgstep pwm_freq -w 0

必須の設定をしておきます。電流値ifsを0.5Aとしていますが、お使いのモーターに合わせてください。コマンドで速度を指定する場合は、-sオプションに使用モーターの1回転あたりのステップ数を指定します。省略すると200になります。

Python:

m1.ifs = 0.5
m1.vmax_rpm = 90
m1.amax = 500
m1.dmax = 500
m1.enable()

コマンド:

cgstep ifs -w 0.5
cgstep vmax_rpm -w 90 -s 200
cgstep amax -w 500
cgstep dmax -w 500
cgstep enable



回転させる

xtargetを設定して回転させてみます。静音モードを有効にしたことで、動作音や振動が抑えられているのが分かると思います。

Python:

m1.xtarget = 153600

コマンド:

cgstep xtarget -w 153600

モータードライバーは回転時の負荷や電流に応じて自動的にPWMの設定を最適化するため、ユーザー側で細かい調整は不要です。手動で調整したい場合はTMC5240データシートを参照してください。

一定速度以上で静音モードを解除する

静音モードは低速域では動作音を大きく減らす一方、回転速度が上がると動作音軽減が少なくなるほか、トルクが落ちる特徴があります。そこで、一定速度以上で自動的に静音モードを解除する機能があります。(オプション機能)

この機能を有効にするには, tpwmthrs_rpmを設定します。コマンドで指定する場合は、速度vmaxなどと同様、-sオプションに使用モーターの1回転あたりのステップ数を指定します。省略すると200になります。以下は60rpmを超えると静音モードを無効にする例です。

Python:

m1.tpwmthrs_rpm = 60
m1.xtarget = 0

コマンド:

cgstep tpwmthrs_rpm -w 60 -s 200
cgstep xtarget -w 0

どの程度の回転速度で無効にしたほうが良いかは使用機器によって変わります。200ステップ/回転のモーターの場合、100rpm程度を目安にすると良いと思います。

tpwmthrs_rpmを設定すると、ソフトが指定されたrpmから計算してtpwmthrsパラメーターを設定しています。vmax_rpmを指定すると実際にはvmaxが設定されるのと同様です。tpwmthrsは速度のvmaxと異なり、以下の計算式で求めます。

tpwmthrs = 16777216 ÷ 速度v

200ステップ/回転のモーターの場合、60rpmのとき速度v=68720、tpwmthrs=244となります。rpmで指定する場合はソフトが自動で計算するため気にする必要はありませんが、このような仕組みになっています。

tpwmthrsに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には他にも多くの機能があり、それらの解説記事も参考にしてください。

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

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

指定時刻にラズパイ/Jetsonの電源をON/OFF (RPZ-PowerMGR)

RPZ-PowerMGRを使って、指定時刻にRaspberry Pi(ラズパイ)やJetson Nanoの電源ON/OFFする方法の解説です。決まった時間だけ起動して消費電力を抑えることが可能で、モバイルバッテリーやソーラーシステムでの運用に最適です。

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

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