見出し画像

製品レビュー|電子機器2:モータードライバー (TB6643KQ)


1.概要

 購入した製品の使い方および感想用記事です。
 今回はモータードライバー:TB6643KQ(350円/個(税込))をレビューしました。

https://akizukidenshi.com/catalog/g/g107688/

1-1.製品の仕様:TB6643KQ

 出力トランジスタにMOS構造を採用したDCモータ駆動用フルブリッジドライバICです。低ON抵抗のMOSプロセス及びPWM駆動方式の採用により高熱効率駆動が可能です。

【仕様】
 仕様は下記の通りです。

  1. 4パターンの運転(制御)が可能:制御信号入力端子が2つ(IN1, IN2)あり、DI(Digital Input:電圧の有無による接点ON/OFF)で制御を$${2^2=4}$$パターン動作可能

  2. 複数の保護機構を設置(破損防止までは保証はしていない):

    1. 低下電圧検出回路(UVLO):電圧(8V)以下の場合は出力がOFF

    2. 過電圧検出回路(VSD):故障防止機能(VM=53V)

    3. 熱遮断回路(TSD):ジャンクション温度($${T_j}$$≧170℃で出力OFF

    4. 過電流検出回路(ISD):検出電流(4.5A~8A)が5.1μsを超えると出力OFF

  3. PWM制御対応:サーボモーターも制御可能

【参考:MOS(Metal Oxide Semiconductor)構造とは】
 
MOSあるいは一般的に MIS(Metal Insulator Semiconductor)構造は、現在最も大量に使われている半導体デバイス構造である。特徴は低消費電力、かつ高速に動作することができる。

https://www.ritsumei.ac.jp/se/re/fujinolab/FujinolabHP_old/semicon/semicon11.pdf

1-2.製品原理

 細かい部分は専門外のため理解できませんが、概要は下記の通り。

  1. 4つのトランジスタで4パターンの制御を可能

  2. 入力電源(Raspberry Pi等)と電源電圧VM(電池など)は別ライン

    • いわゆるリレーと同じであり小さな電流(入力電源)と大きな電流(モーター)は別回路で動作

    • 電源VMがOFFでIN1, IN2に電圧がかかってもICは動作しないようになっている。

2.部材の購入

2-1.購入品

 今回は秋月電子よりで下記購入しました。

  1. モータードライバー TB6643KQ:Raspberry PiのGPIOで直接制御するのではなく、制御装置としてTB6643KQからDCモーターを制御

  2. DCモーター FA-130RA-2270L:直流電源(DC)で動くモーター

  3. 10V以上の直流(DC)電源:TB6643KQ用の電源

    • DCモーターは1.5Vで動作するが、モータードライバーTB6643KQ経由で動かす場合は最低10Vは必要(TB6643KQの動作範囲の電源電圧$${VM_{opr}=10~45V}$$)

    • 直流(DC)電源の作り方は下記の通り:初学者は「単3×8 の電池ボックス」が一番楽だと思います。

2-2.準備必須品

 その他必需品は下記の通りです。

  • Raspberry Pi4

  • ブレッドボード

  • ジャンピングワイヤー

3.環境構築

 Raspberry Pi環境を準備します。詳細は下記記事の通りです。

 Raspberry PiのGPIOを制御するためのライブラリが無い場合はインストールしておきます。

[Terminal]
pip install rpi.gpio

4.使用前の準備

4-1.部品の組付け

 部品を下記要領で組付けました。10V以上の直流(DC)電源はUSB+昇圧モジュールを利用しました。ポイントとして(ちゃんと理解できていないのですが)、GNDは電源側とRaspberry Pi側の2か所に接続しています。

 モータードライバーのTB6643KQの端子番号はロゴがある面の窪みがある部分が1(IN1)となります。

【参考:Raspberry Pi4のGPIO配置】
 Raspberry Pi4のGPIO配置は下図の通りです。

https://www.raspberrypi.com/documentation/computers/raspberry-pi.html


【参考:ブレッドボードの使い方】
 はんだ付け不要で部品やリード線を差すだけで回路が組み立てられます。特定のラインが電気的に繋がるため、ジャンパー線接続の手間が省けます。

4-2.詳細な仕様確認

 各種仕様を確認していきます。まとめは下記の通りです。

  1. 必要な電源電圧:10~45V(出典:アプリケーションノート

  2. PWM動作も対応可能

【必要電圧:10~45V】
 下図の通りDCモーターは電池1本(1.2~1.5V)でも動作します。ただし、回路図より電流はモータードライバーを経由するため電圧の仕様はモータードライバー側に設定する必要があります。仕様書の動作範囲を確認すると「電源電圧$${VM_{opr}=10~45V}$$」であり、最低でも10Vは必要となります。

【PWM周波数】
 
IN1, IN2 端子の片方をスイッチング入力して PWM 動作することも可能

https://toshiba.semicon-storage.com/info/TB6643KQ_application_note_ja_20110901_AKX00207.pdf?did=12678&prodName=TB6643KQ

【モータードライバーの消費電力】

$$
P = V_M \times I_{CC} + I_O^2 \times R_{ON} (U + L)
$$

$$
P_{標準} = 24V\times \frac{2.5 mA}{1000}+(0.5)^2\times 0.55 \Omega=0.1975W \\
P_{Max} = 24V\times \frac{8.0 mA}{1000}+(0.5)^2\times 0.9 \Omega=0.417W
$$

$$
V_M:モーター電圧[V]\\
I_{CC}:電源電流[mA]\\
I_O :出力電流[A]\\
R_{ON} (U + L):出力ON抵抗[Ω]
$$

 なお消費電力Pに応じて周囲温度も高くなるため注意が必要です。

周囲温度Ta = 25°C、実装基板にて、出力OUT1-OUT2 間に電流を流した時、パッケージ表面温度TC [°C] と ジャンクション温度Tj [°C] の実測特性

【DCモーターの特性】
 電圧範囲は1.5~3.0Vであり、モーター特性図は下記の通り。

  1. 電流$${I  [A]}$$:トルクが増えるほど電流が必要

  2. 回転速度$${N  [rpm]}$$:トルクに反比例して回転数が下がる

    • トルク=0(負荷がかかっていない)時が最大回転速度

  3. 出力(電力)$${P  [W]}$$:出力最大値は上に凸のカーブ

  4. 負荷効率$${\eta  [%]}$$:効率も上に凸のカーブ

5.Pythonスクリプトの作成

5-1.任意:デバイス接続の確認

 TB6643KQは通信で接続されていないため、接続確認の方法は物理的な目視確認となります。

5-2.コード作成(実装)

 TB6643.pyを作成しました。設計思想は下記の通りです。

  1. モータードライバの初期設定は動作確認+安全考慮でストップに設定

    • GPIOピンを割り当て時にGPIO21(IN2)の出力がHighだった

  2. 入力(IN1, IN2)の入力(電圧の有無)の状態を確認できるように可視化関数を作成

  3. 全モード確認するループを作成

[TB6643.py]
import RPi.GPIO as GPIO
import time

#TB6643KQ(モータードライバ)によるDCモータ制御
##GPIO20をIN1, GPIO21をIN2に接続
#GPIOの初期設定
GPIO.setmode(GPIO.BCM) #GPIOのピン番号をGPIO番号で指定
GPIO.setup(20, GPIO.OUT) #GPIO20を出力に設定
GPIO.setup(21, GPIO.OUT) #GPIO21を出力に設定

# 状態表示用の関数
def print_mode(mode):
    modes_operation = {
        (0, 0): 'ストップ(TSD, ISD解除)',
        (0, 1): '正転(正転)',
        (1, 0): '逆転(逆転)',
        (1, 1): 'ブレーキ(ブレーキ)'
    }
    print(f'モード:{modes_operation[mode]}, 入力(IN1, IN2):({mode[0]}, {mode[1]}->{"H" if mode[0] else "L"}, {"H" if mode[1] else "L"})')


#初期条件を設定
GPIO.output(20, GPIO.LOW) #GPIO20をLOWに設定
GPIO.output(21, GPIO.LOW) #GPIO21をLOWに設定
print('初期条件')
print_mode((GPIO.input(20), GPIO.input(21)))
time.sleep(1) #1秒待つ
print(f'{"#"*20}\n')

# モード切替と状態出力
try:
    while True:
        # 正転モード
        GPIO.output(20, GPIO.HIGH)
        GPIO.output(21, GPIO.LOW)
        print_mode((GPIO.input(20), GPIO.input(21)))
        time.sleep(3)

        # ストップモード
        GPIO.output(20, GPIO.LOW)
        GPIO.output(21, GPIO.LOW)
        print_mode((GPIO.input(20), GPIO.input(21)))
        time.sleep(1)

        # 逆転モード
        GPIO.output(20, GPIO.LOW)
        GPIO.output(21, GPIO.HIGH)
        print_mode((GPIO.input(20), GPIO.input(21)))
        time.sleep(3)

        # ブレーキモード
        GPIO.output(20, GPIO.HIGH)
        GPIO.output(21, GPIO.HIGH)
        print_mode((GPIO.input(20), GPIO.input(21)))
        time.sleep(2)
        
except KeyboardInterrupt:
    pass

GPIO.cleanup() #GPIOの終了処理

5-3.実行

 下記の通り「逆転->ストップ->正転->ブレーキ」を繰り返す動作を確認できました。

[Terminal]
Python3 TB6643
[OUT]
初期条件
モード:ストップ(TSD, ISD解除), 入力(IN1, IN2):(0, 0->L, L)
####################

モード:逆転(逆転), 入力(IN1, IN2):(1, 0->H, L)
モード:ストップ(TSD, ISD解除), 入力(IN1, IN2):(0, 0->L, L)
モード:正転(正転), 入力(IN1, IN2):(0, 1->L, H)
モード:ブレーキ(ブレーキ), 入力(IN1, IN2):(1, 1->H, H)

モード:逆転(逆転), 入力(IN1, IN2):(1, 0->H, L)
モード:ストップ(TSD, ISD解除), 入力(IN1, IN2):(0, 0->L, L)
モード:正転(正転), 入力(IN1, IN2):(0, 1->L, H)
モード:ブレーキ(ブレーキ), 入力(IN1, IN2):(1, 1->H, H)

6.所感

 簡単な所感は下記の通り

  • DCモーターは電流の流す向きを変えることで回転方向を変えることができる。

  • Raspberry Piでは、プラントでいうDO(Digital Output)を制御しており、電圧0 or 3.3Vで出力0, 1を出している。(有電圧接点ってことかな?)

  • Raspberry Pi側からも制御信号を出しているからGNDに繋いで電流の流れを作らないといけないということだと思う・・・

  • ミニ四駆で触って以来なのでめっちゃ懐かしい。案外DCモーターの音がうるさいので防音性能がない部屋だとできないかな。

  • PWM制御で出力電圧変化による回転数制御もできそうですが、これは追って


参考資料

別添1:Rasberry Pi関係

別添2:Python関係

別添3:通信関係

別添4:電子機器

あとがき

 子供のころにミニ四駆でモーターのコイルの巻き数を変えてウェイ!ってやってた頃が懐かしい。

この記事が気に入ったらサポートをしてみませんか?