はじめてのステッピングモータ制御【Raspberry Pi/TB6674PG/SM-42BYG011】



以前に作った倒立振子ロボットではDCモータで動かしていたが、それをステッピングモータに変えたらもっとキビキビと動くのではと思ったので、今回ラズパイでステッピングモータを制御するやり方を調べてみた。

倒立振子の製作記事はこちら

10日で作る!倒立振子ロボット【Raspberry Pi/Python】

実際にステッピングモータを使ってみて、制御信号の部分が少しややこしかったがゆっくり手順を追っていけば誰でも理解できるはず。
この記事では初心者でもできるだけ分かりやすいように、ラズパイでステッピングモータの制御方法を説明してく。






まずはステッピングモータを選ぼう!


ステッピングモータは、秋月電子で手に入るものを選ぶことにした。

まずステッピングモータの種類には、バイポーラユニポーラ が存在する。
1つの巻線に対して一定方向の電流しか流さないのがユニポーラで、1つの巻線に双方向へ電流を流すのがバイポーラである。

ユニポーラよりバイポーラの方が低回転時のトルクは高くなる。しかし回転速度を上げていくとユニポーラの方がバイポーラよりもトルクを高く維持できる。
これはバイポーラでは電流を双方向に流すため、周波数が高くなるにつれコイルのインダクタンスが大きくなってしまうことが原因のようだ。


バイポーラステッピングモータSM-42BYG011の特性図より


使用用途では高速回転するつもりはないので、バイポーラのステッピングモータを選ぶことにする。
バイポーラを選ぶと選択肢はしぼられ、比較的安いSM-42BYG011を購入することにした。





ステッピングモータ用のドライバーICは、TB6674PGを選ぶことにした。
2相のバイポーラ駆動方式のステッピングモータを正逆転させられるドライバーだ。
モータ電源は22Vまで対応しており使い勝手が良さそうだ。

Quimat Nema 17ステッピングモータ 3Dプリンター用 バイポーラ 0.4A 26Ncm(36.8oz.in) 3Dプリンター 線式 CNCパーツ QD06

Amazon




ラズパイとモータドライバーとの配線


TB6674PG の配線は次のようになる。


GNDはすべてラズパイと共通につなぐ。
TB6674PG の5V電源はラズベリーパイの電源を利用し、9V電源は別途に用意した電池で供給する。
IN A、IN B、PS (Power Save)はラズベリーパイの適当なGPIOピンに接続する。


TB6674PGの端子説明

端子番号記号動作
2Vcc制御電源端子
3IN AA-ch正転/逆転信号入力
4GNDグランド
5GNDグランド
6IN BB-ch正転/逆転信号入力
7PSパワーセーブ信号入力
8VS2Bスタンバイ信号入力
9VS1B高電圧電源端子
10φBB出力
11Φ bar BB bar出力
12GNDグランド
13GNDグランド
14Φ bar AA bar出力
15φAA出力
16VS1A高電圧電源端子

TB6674PGデータシートより

ステッピングモータ(SM-42BYG011)の配線は下図のように、赤緑、黄青のペアになっているので、それぞれをドライバーICのA-ch、B-chに接続する。



ところで、VS2Bの真理値表は次のようになっている。
VS2B 動作
L POWER OFF
H OPERATION

一方でVS2A は、低電圧電源端子として5Vを接続しないと動作しないので注意が必要だ。


また次のように、PSとINの入力信号により出力が制御される。

TB6674PGデータシートより

基本的に PS はLowにセットして、IN AIN B の入力信号でステッピングモータを制御していく。





Lチカでステッピングモータの制御信号の確認


ステッピングモータを制御するには、IN AIN B を次のように変化させれば良い。

IN A IN B
HH
LH
LL
HL

このとき、ドライバーIC TB6674PG の出力は次のようになっている。

IN A IN BAA barBB bar
HHHLHL
LHLHHL
LLLHLH
HLHLLH

この一連でステッピングモータを4ステップ動かすことになる。


TB6674PG の出力 AA barBB bar に赤緑青黄色のLEDを接続して、LEDの点灯による出力信号を確認してみた。



少しはステッピングモータの制御信号をイメージしやすくなっただろうか?

また、モータドライバーの出力をオシロスコープで観察してみると、キレイな矩形波を確認できる。






実際にステッピングモータを動かしてみた




ステッピングモータをドライバーICに接続して、動作確認をしてみた。使用したPythonプログラムは次の通り。



ステッピングモータ(SM-42BYG011)は、ステップ角が1.8度となっている。よって、動かしたい角度を1.8で割って、その回数分だけ制御信号を送ることになる。
しかし上記のプログラムは、4ステップが1単位になっているので、より正確な角度で動かしたい場合は改良が必要である。
今回はあくまで動作確認なのでこれで良しとしよう。

詳解 確率ロボティクス Pythonによる基礎アルゴリズムの実装

Sebastian Thrunらの名著『確率ロボティクス』の翻訳者であり、同分野の第一人者でもある、上田隆一氏が書き下ろす至極の入門書!理論→実装という一貫した流れで、丁寧に解説。まさにバイブル!

KindleAmazon




最後に


今回はじめてステッピングモータを使って驚いたことは、トルクがとても大きかったことだ。
これなら色々なロボットや機械が作れそうだ。
また、プログラミンで簡単に正確な角度に回転できることがわかった。

ところで最後に一点、注意しておきたいことがある。
それは、今回使ったモータドライバーでは、プログラムを走らせていないときでも常にステッピングモータに電流が流れてしまうことだ。
よって、ステッピングモータが発熱してしまい、バッテリーの消耗も早くなってしまう。
本番環境では、電子スイッチなどでモータドライバーICの電源を制御する必要が出てくるだろうことを付け加えておく。


Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス

Amazon


あなたにおすすめ