Raspberry Piでステッピングモータの制御

こんなこと、やります。 - Raspberry Piを使って、モータドライバTB6674PGの使い方を学ぶ - バイポーラ型ステッピングモータSM-42BYG011の使い方を学ぶ - Raspberry Piでステッピングモータを1ステップづつ動かしてみる
ステッピングモータ
ステッピングモータについて説明します。
ステッピングモータとは
ステッピングモータとは、時計の針のように細かな刻みで1ステップづつ動かすことができるモータです。 こちらの写真のように、ステッピングモータの内部には、たくさんのコイルと回転軸部のギアの形をした磁石でできてます。コイルへ電流を交互に流すことで、1ステップずつ動き、また回転方向も変えることができます。

ステッピングモータの種類
ステッピングモータの種類には、バイポーラとユニポーラがありますが、バイポーラのほうがトルクを高くでき高性能です。その代わり、値段もユニポーラより高くなります。バイポーラ駆動のステッピングモータは、3DプリンタやCNC工作機械などに使われます。 ユニポーラ型のステッピングモータを使いたい場合は、 をご覧ください。
- ユニポーラは、1つの巻線に対し、一定方向の電流しか流さない
- バイポーラは、1つの巻線に対し、双方向へ電流を流す
SM-42BYG011の特性
こちらのグラフは、 秋月電子通商のバイポーラステッピングモーターの特性図
より参考させて頂きました。
実は、バイポーラ駆動型のステッピングモータは、回転速度が高いとトルクが下がっていきます。バイポーラでは電流を双方向に流すため、周波数が高くなるにつれコイルのインダクタンスが大きくなってしまうのが原因のようです。
モータドライバ
モータドライバについて説明します。
モータドライバの選定
2相のバイポーラ駆動方式のステッピングモータに対応している、TB6674PG
をモータドライバとして選びました。ステッピングモータを正逆転させらます。また、ステッピングモータへの供給電圧は22Vまで対応してます。
http://akizukidenshi.com/download/ds/toshiba/TB6674_ja.pdf
TB6674PGの端子の役割

TB6674PG
の端子の役割と意味は次のとおりです。
端子番号 | 記号 | 動作 |
---|---|---|
1 | VS2A | 低電圧電源端子 |
2 | Vcc | 制御電源端子 |
3 | IN A | A-ch正転/逆転信号入力 |
4 | GND | グランド |
5 | GND | グランド |
6 | IN B | B-ch正転/逆転信号入力 |
7 | PS | パワーセーブ信号入力 |
8 | VS2B | スタンバイ信号入力 |
9 | VS1B | 高電圧電源端子 |
10 | φB | B出力 |
11 | Φ bar B | B bar出力 |
12 | GND | グランド |
13 | GND | グランド |
14 | Φ bar A | A bar出力 |
15 | φA | A出力 |
16 | VS1A | 高電圧電源端子 |
真理値表
VS2Bの真理値表は次のとおりです。VS2A は、低電圧電源端子として5Vを接続しないと動作しないので注意が必要です。
VS2B | 動作 |
---|---|
L | POWER OFF |
H | OPERATION |
PSとINの入力信号により出力が制御されます。基本的に
PS
はLowにセットし、IN A
と
IN B
の入力信号でステッピングモータを制御します。

モータドライバの入力と出力
モータドライバのIN A
とIN B
の入力に、次の順序で信号を送ることでステッピングモータを1ステップずつ動かすことができます。
IN A | IN B |
---|---|
H | H |
L | H |
L | L |
H | L |
入力信号と出力信号の関係は次のとおりです。
IN A | IN B | A | A bar | B | B bar |
---|---|---|---|---|---|
H | H | H | L | H | L |
L | H | L | H | H | L |
L | L | L | H | L | H |
H | L | H | L | L | H |
モータドライバの出力を観察してみた
実際に、モータドライバにの出力に4つのLEDをつないで、入力信号を上の表の通り順番に変化させ、点灯を確認してみました。映像のように、LEDが順番に点灯を繰り返されてます。

さらに、モータドライバーの出力をオシロスコープで観察してみました。
準備
Raspberry Piでステッピングモータを制御するための準備を説明します。
Raspberry Piとモータドライバ、ステッピングモータの配線
Raspberry
Piとモータドライバ、ステッピングモータをそれぞれ図のように配線します。
GNDはすべてRaspberry Piと共通の状態にします。
モータドライバTB6674PG
の5V電源はラズベリーパイの電源を利用しました。一方で、ステッピングモータの電源は別途に用意した9V電源で供給します。
モータドライバのIN A、IN B、PS (Power
Save)は、ラズベリーパイのデジタルGPIOピンに接続します。
ステッピングモータの配線コードの色
ステッピングモータSM-42BYG011
では、図のように赤緑、黄青のペアになってます。それぞれのペアを、モータドライバーのA-ch、B-chに接続します。

ステッピングモータの配線色は規格統一されていません。SM-42BYG011
以外のステッピングモータを使う場合は、データシートをよく確認してから配線してください。
Raspberry Piでステッピングモータを制御
Raspberry Piでステッピングモータを制御していきましょう。
ソースコード
ステッピングモータをドライバーICに接続して、動作確認をした。使用したPythonプログラムは次の通り。
import RPi.GPIO as GPIO
from time import sleep
= 19 # -> 7
PS_PIN = 20 # -> 3
IN_A_PIN = 21 # -> 6
IN_B_PIN = 1.8
STEP_ANGLE
def rotateCw(speed, degree):
= int(degree / STEP_ANGLE / 4)
d for i in range(d):
True)
GPIO.output(IN_A_PIN, True)
GPIO.output(IN_B_PIN,
sleep(speed)
False)
GPIO.output(IN_A_PIN, True)
GPIO.output(IN_B_PIN,
sleep(speed)
False)
GPIO.output(IN_A_PIN, False)
GPIO.output(IN_B_PIN,
sleep(speed)
True)
GPIO.output(IN_A_PIN, False)
GPIO.output(IN_B_PIN,
sleep(speed)
def rotateCcw(speed, degree): # Counter Clockwise Rotation
= int(degree / STEP_ANGLE / 4)
d for i in range(d):
True)
GPIO.output(IN_A_PIN, True)
GPIO.output(IN_B_PIN,
sleep(speed)
True)
GPIO.output(IN_A_PIN, False)
GPIO.output(IN_B_PIN,
sleep(speed)
False)
GPIO.output(IN_A_PIN, False)
GPIO.output(IN_B_PIN,
sleep(speed)
False)
GPIO.output(IN_A_PIN, True)
GPIO.output(IN_B_PIN,
sleep(speed)
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(IN_A_PIN, GPIO.OUT)
GPIO.setup(IN_B_PIN, GPIO.OUT)
GPIO.setup(PS_PIN, GPIO.OUT)
# Vs2d
# L -> POWER OFF
# H -> OPERATION
False)
GPIO.output(PS_PIN, False)
GPIO.output(IN_A_PIN, False)
GPIO.output(IN_B_PIN, 0.5)
sleep(
def main():
while True:
0.1, 90)
rotateCw(0.5)
sleep(0.003, 90)
rotateCcw(0.5)
sleep(0.01, 180)
rotateCw(0.5)
sleep(0.003, 180)
rotateCcw(0.5)
sleep(0.003, 720)
rotateCw(0.5)
sleep(0.003, 720)
rotateCcw(0.5)
sleep(
if __name__ == '__main__':
try:
setup()
main()# Stop on Ctrl+C and clean up
except KeyboardInterrupt:
GPIO.cleanup()
GPIO.cleanup()
ソースコードの解説
ステッピングモータSM-42BYG011
では、1ステップで移動される角度が1.8度です。ですから、動かしたい角度を1.8で割り、その回数分だけステップさせます。ただし、上記のプログラムでは4ステップが1単位になってます。1ステップずつ動かす場合はプログラムを改良して使ってください。
こちらの映像はYouTubeでもご覧いただけます。
https://www.youtube.com/watch?v=4B31SX4euEQ&ab_channel=ToshihikoArai
動いてなくても電流が流れる
モータドライバTB6674PG
では、プログラムを走らせていないときでも常にステッピングモータに電流が流れます。そのため、ステッピングモータが発熱してしまいバッテリーの消耗もはやくなります。ステッピングモータを長時間動かさない場合は、リレーなどを使ってモータドライバーの電源をオフにするとよいかもです。
リレーの使い方は
をご覧ください。
関連記事
- 【XYペンプロッター制作③】CNCシールドの設定「マイクロステップ分解能」
- Arduinoでステッピングモータの制御|ユニポーラ型「28BYJ-48」と「ULN2003」ドライバ
- 【Raspberry Pi】ECMで音センサつくってみた
- ファンクションジェネレータの製作|矩形波・三角波・正弦波発振器
- 【Raspberry Pi】モータドライバTA8428Kでモータ制御