ラズパイでステッピングモータの制御

ラズパイではじめてのステッピングモータ制御【TB6674PG】

この記事では、ラズパイでステッピングモータを制御するやり方を解説していく。ステッピングモータはバイポーラ駆動のSM-42BYG011を使用した。また、ステッピングモータ用のドライバとしてTB6674PGを使った。制御信号の流れが少しややこしいが、初心者でも分かりやすいようにゆっくり手順を追って説明してく。

ステッピングモータSM-42BYG011の外観
ステッピングモータSM-42BYG011の外観

ステッピングモータの内部構造
ステッピングモータの内部構造

ステッピングモータで3Dプリンタ・CNC

ところで、ステッピングモータの実用例としては3DプリンタやCNC工作機械が有名。自分もいつかは一台作ってみたい。今では、キットやレール部品が充実しているので、敷居は結構低い。自信のある方、作ってみてはどうだろう?

Quimat 3Dプリンター CNCキット R3ボード+CNCシールドV3+A4988ドライバ+ヒートシンク+Nema 17ステッピングモータ GRBL 0.9交換 実験用 電作キット QD06C
Quimat 3Dプリンター CNCキット R3ボード+CNCシールドV3+A4988ドライバ+ヒートシンク+Nema 17ステッピングモータ GRBL 0.9交換 実験用 電作キット QD06C

GRBL 0.9に交換性があります、動作するオープンソースのファームウェアはG-codeコマンドをステッパー信号に変わります。 12-36V dc上で実行されます。現在ドライバーは、drv8825だけハンドル36Vまでだから、ボードを動かすとき動作電圧を考慮してください。

Amazon
Kuman 3Dプリンター セット Arduinoに交換 CNCキット R3ボード+CNCシールドV3+A4988ドライバ+ヒートシンク+Nema17ステッピングモータ+機械的スイッチEndstop GRBL 0.9交換 実験用 電作キット KB02
Kuman 3Dプリンター セット Arduinoに交換 CNCキット R3ボード+CNCシールドV3+A4988ドライバ+ヒートシンク+Nema17ステッピングモータ+機械的スイッチEndstop GRBL 0.9交換 実験用 電作キット KB02

Arduino用最新CH340G CNCシールドバージョン3.0拡張ボード。 Kuman Arduino R3ボード、MCU: ATmega328;USBインターフェース:1.5m usbケーブル付きATmega16U2。 ヒートシンク付き4個DRV8825ステッピングモータドライバ。

Amazon
ボールネジリニアスライド、1204ボールネジリニアスライドロングステージアクチュエータストローク500 mm + 42ステッピングモーターミニモーターボールネジリニアスライド
ボールネジリニアスライド、1204ボールネジリニアスライドロングステージアクチュエータストローク500 mm + 42ステッピングモーターミニモーターボールネジリニアスライド

Amazon

ステッピングモータとモータドライバ

ステッピングモータ

ステッピングモータの種類には、バイポーラユニポーラ が存在する。その違いは次の通り。

  • ユニポーラは、1つの巻線に対し、一定方向の電流しか流さない
  • バイポーラは、1つの巻線に対し、双方向へ電流を流す

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

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

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

今回の用途では高速回転の必要はないので、バイポーラのステッピングモータを選んだ。バイポーラを選ぶと選択肢はある程度しぼられ、比較的安く買えるSM-42BYG011を使用した。もちろん他のバイポーラ型のステッピングモータでも、本記事と同様のやり方で動くはず。

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

ホットセール!高トルク 26Ncm(36.8oz.in) 保持トルク NEMA 17双極性4.19*4.19*3.4cm 4線 1.8°ステップ角度(20ステップ/rev) 定格電流0.4Aと抵抗30オム

AmazonRakuten

モータドライバ

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

5袋 TB6674PG ディップ-16 TB6674 ディップ 6674PG DIP16
5袋 TB6674PG ディップ-16 TB6674 ディップ 6674PG DIP16

TB6674は出力トランジスタにMOS構造を採用したステッピングモータ用ドライバICです。バイポーラ駆動方式で2相ステッピングモータを正逆転することができます。パワーセーブ機能、スタンバイ機能があります。

Amazon

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

配線

ラズパイとモータドライバ TB6674PG の配線は次のように行った。

ラズパイ、TB6674PG、ステッピングモータの配線図fritzing
ラズパイ、TB6674PG、ステッピングモータの配線図fritzing

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

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

ステッピングモータのコードの色と役割
ステッピングモータのコードの色と役割

TB6674PGの解説

ラズパイとTB6674PGとの配線図
ラズパイとTB6674PGとの配線図

TB6674PGの端子の役割

端子番号記号動作
1VS2A低電圧電源端子
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高電圧電源端子

入力と出力

VS2Bの真理値表は次のとおり。VS2A は、低電圧電源端子として5Vを接続しないと動作しないので注意が必要。

VS2B 動作
L POWER OFF
H OPERATION

また、PSとINの入力信号により出力が制御される。基本的に PS はLowにセットして、IN AIN B の入力信号でステッピングモータを制御していく。

TB6674PGの真理値表
TB6674PGの真理値表

TB6674PGの詳細はこちら

5袋 TB6674PG ディップ-16 TB6674 ディップ 6674PG DIP16
5袋 TB6674PG ディップ-16 TB6674 ディップ 6674PG DIP16

TB6674は出力トランジスタにMOS構造を採用したステッピングモータ用ドライバICです。バイポーラ駆動方式で2相ステッピングモータを正逆転することができます。パワーセーブ機能、スタンバイ機能があります。

Amazon

モータドライバの入力信号と出力の関係

ステッピングモータを制御するには、モータドライバTB6674PGIN AIN Bの入力に次の順序で信号を送れば良い。

IN A IN B
HH
LH
LL
HL

また、モータドライバの入力信号と出力の関係は次のとおり。表の上下方向のどちらかの順序で、ステッピングモータが1ステップづつ動かされる事になる。

IN A IN BAA barBB bar
HHHLHL
LHLHHL
LLLHLH
HLHLLH

実際に、モータドライバにの出力に4つのLEDを繋ぎ、入力信号を上の表の通り順番に変化させてLEDの点灯を確認してみた。このように2つづつ順番に点灯を繰り返す。

モータドライバの出力をLEDで確認
モータドライバの出力をLEDで確認

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

オシロスコープでTB6674PGの出力を確認
オシロスコープでTB6674PGの出力を確認

ラズパイでステッピングモータを動かしてみよう

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

# -*- coding: utf-8 -*-
# Created by Toshihiko Arai.
# https://101010.fun/iot/step-motor.html

import RPi.GPIO as GPIO
from time import sleep

PS_PIN = 19  # -> 7
IN_A_PIN = 20  # -> 3
IN_B_PIN = 21  # -> 6
STEP_ANGLE = 1.8

# Clockwise Rotation
# speed > 0.003


def rotateCw(speed, degree):
    d = int(degree / STEP_ANGLE / 4)
    for i in range(d):
        GPIO.output(IN_A_PIN, True)
        GPIO.output(IN_B_PIN, True)
        sleep(speed)

        GPIO.output(IN_A_PIN, False)
        GPIO.output(IN_B_PIN, True)
        sleep(speed)

        GPIO.output(IN_A_PIN, False)
        GPIO.output(IN_B_PIN, False)
        sleep(speed)

        GPIO.output(IN_A_PIN, True)
        GPIO.output(IN_B_PIN, False)
        sleep(speed)


def rotateCcw(speed, degree):  # Counter Clockwise Rotation
    d = int(degree / STEP_ANGLE / 4)
    for i in range(d):
        GPIO.output(IN_A_PIN, True)
        GPIO.output(IN_B_PIN, True)
        sleep(speed)

        GPIO.output(IN_A_PIN, True)
        GPIO.output(IN_B_PIN, False)
        sleep(speed)

        GPIO.output(IN_A_PIN, False)
        GPIO.output(IN_B_PIN, False)
        sleep(speed)

        GPIO.output(IN_A_PIN, False)
        GPIO.output(IN_B_PIN, True)
        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
    GPIO.output(PS_PIN, False)
    GPIO.output(IN_A_PIN, False)
    GPIO.output(IN_B_PIN, False)
    sleep(0.5)


def main():

    while True:
        rotateCw(0.1, 90)
        sleep(0.5)
        rotateCcw(0.003, 90)
        sleep(0.5)
        rotateCw(0.01, 180)
        sleep(0.5)
        rotateCcw(0.003, 180)
        sleep(0.5)
        rotateCw(0.003, 720)
        sleep(0.5)
        rotateCcw(0.003, 720)
        sleep(0.5)


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単位になっているので、精度の高い角度で動かしたい場合は改良が必要だ。

最後に一点、注意しておきたい。TB6674PGでは、プログラムを走らせていないときでも常にステッピングモータに電流が流れてしまう。よって、ステッピングモータが発熱してしまいバッテリーの消耗も早くなる。長時間動かさない場合は、電子スイッチなどでモータドライバーの電源を制御する必要があるかもしれない。

DCモータの制御はこちら

DCモータで倒立振子を作ってみたので参考に

この記事で使った関連製品はこちら

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

ホットセール!高トルク 26Ncm(36.8oz.in) 保持トルク NEMA 17双極性4.19*4.19*3.4cm 4線 1.8°ステップ角度(20ステップ/rev) 定格電流0.4Aと抵抗30オム

AmazonRakuten
5袋 TB6674PG ディップ-16 TB6674 ディップ 6674PG DIP16
5袋 TB6674PG ディップ-16 TB6674 ディップ 6674PG DIP16

TB6674は出力トランジスタにMOS構造を採用したステッピングモータ用ドライバICです。バイポーラ駆動方式で2相ステッピングモータを正逆転することができます。パワーセーブ機能、スタンバイ機能があります。

Amazon
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入

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

AmazonRakuten

こんな商品も人気です!

10 インチRaspberry Pi用タッチモニター EleDuino HDMI モバイルディスプレイ 2021最新版 ゲームモニターIPS液晶パネル 1366x768薄い 軽量、自立,USB Type-C標準 HDMI/スピーカー搭載
10 インチRaspberry Pi用タッチモニター EleDuino HDMI モバイルディスプレイ 2021最新版 ゲームモニターIPS液晶パネル 1366x768薄い 軽量、自立,USB Type-C標準 HDMI/スピーカー搭載

Amazon
Raspberry Pi4 Model B DIYメタルケース/ラズベリーパイ4 モデルB ケース/アルミニウム金属ケース/ファンレス/放熱シート付き/ブラック
Raspberry Pi4 Model B DIYメタルケース/ラズベリーパイ4 モデルB ケース/アルミニウム金属ケース/ファンレス/放熱シート付き/ブラック

ラズベリーパイ4用メタルケース スタイリッシュで堅牢なメタルボディ ケーズ全体がヒートシンクの高い放熱性能 アルミ製のファンレスケーズボディー シンプルでコンパクトなモノクローム

AmazonRakuten
Miuzei 最新Raspberry Pi 4 ケース ラスベリー パイ 4 ケース+ 5V 3A 電源Micro USB-C アダプター 冷却ファン+ヒートシンク Raspberry Pi 4 Model B対応
Miuzei 最新Raspberry Pi 4 ケース ラスベリー パイ 4 ケース+ 5V 3A 電源Micro USB-C アダプター 冷却ファン+ヒートシンク Raspberry Pi 4 Model B対応

AmazonRakuten
Freenove Raspberry Pi 4 B 3 B+ 400用の究極のスターターキット、434ページの詳細なチュートリアル、Python C Javaコード、223アイテム、57プロジェクト、無はんだブレッドボード
Freenove Raspberry Pi 4 B 3 B+ 400用の究極のスターターキット、434ページの詳細なチュートリアル、Python C Javaコード、223アイテム、57プロジェクト、無はんだブレッドボード

Amazon

Raspberry Piの参考書

Raspberry Piクックブック 第3版 (Make:PROJECTS)
Raspberry Piクックブック 第3版 (Make:PROJECTS)

本書は、登場以来多くのユーザーの支持を集め続けているマイコンボード「Raspberry Pi」を使いこなすための267本のレシピ集です。 ハードウェアの基本、オペレーティングシステムの使い方、ネットワーク接続、Pythonプログラミングの基本から、高度なPythonプログラミング、GPIO(汎用入出力)、モーター、センサー、ディスプレイ、コンピュータービジョン、Arduinoとの連携まで、幅広いニーズに応えます。

AmazonRakuten
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応

本書ではRaspberry Pi Zero / Zero Wの概要から必要な周辺機器の説明、OSの導入やセットアップなどといった準備、そしてLinuxに初めて触れる人に向けてLinuxの基礎やシェルの操作などを解説しています。また、準備が整ったら実際に電子部品をRaspberry Pi Zero / Zero Wで制御する方法も解説しました。

KindleAmazonRakuten
Raspberry Pi ZeroによるIoT入門- Zero W 対応
Raspberry Pi ZeroによるIoT入門- Zero W 対応

本書は、大人から子供まで、初心者の方でも、ラズパイZeroとラズパイZero WをIoTのデバイスとして使いこなせるようになることを目的とした入門書です。また、ラズパイZeroとラズパイZero WをUSBケーブル1本でパソコンに接続できる便利な「Zero over USB」について、日本で初めて詳しく解説しました。

AmazonRakuten

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/