【Raspberry Pi】モータドライバTA8428Kでモータ制御
この記事では、ラズパイ(Raspberry Pi)でDCモータを制御する方法を解説します。モータドライバは TOSHIBAのTA8428K を使用します。
Raspberry Piでモータを制御するまでの流れ
こちらの図のは、Raspberry Piと、モータドライバ、DCモータの配線のイメージ図です。Raspberry PiとDCモータの電源を別々に用意することに注意しましょう。
つかうもの
最初に、この記事でつかうものをご紹介いたします。
ラズパイ
この記事では、 Raspberry Pi zero WH を使用しました。みなさんはお好きなRaspberry Piをお使いください。
なお、Raspberry PiはSSHのターミナルから操作してます。セットアップの仕方は Raspberry Pi zero WHをモニター・キーボードなしでSSH接続するまで をご覧ください。
DCモータ
モータは 倒立振子ロボットの製作 で使った、 ロボサイトのギヤードモータ を使用します。ギヤ比30:1のギアが内蔵されてますので、ギアボックスを付ける必要がありません。コンパクトにまとめられますので、ロボットの見た目がスッキリします。また、モータを固定する器具も付いてますのでおすすめです。
モータドライバ
モータドライバは、TOSHIBAのTA8428Kを使用しましたが、他のモータドライバでも基本は同じことが多いので、この記事の内容が参考になります。
モータのノイズ対策
さっそくモータを動かしていきたいところですが、その前に、Raspberry PiなどのマイコンでDCモータを使う場合に注意しなければならないことがあります。それはモータのノイズです。 モータは逆回転やストップなどの急激な動きの変化時に、逆起電圧が発生します。この逆起電圧はかなり大きな電圧でして、そのノイズが通信エラーなどのご動作を引き起こします。そのため、モータにパスコンと呼ばれるコンデンサをはんだ付けして、ノイズ対策を行います。 具体的には次の図のようにモータの端子間と、端子とシャーシの間に合計3つのコンデンサをはんだ付けします。
このコンデンサは瞬間的に発生したモータのノイズを、アースへ落としてくれます。バイパスコンデンサを略してパスコンなどと呼ばれてます。コンデンサの容量は0.1uF程度で、 セラミックコンデンサ を使えば大丈夫です。
モータ本体ににコンデンサをはんだ付けするときは、はんだ付けする部分をあらかじめやすりで削っておくとはんだ付けしやすいです。
また、ある程度 ワット数の高いはんだごて でないと、はんだ付けできませんのでご注意ください。こちらのような温度調整がはんだごてに備わっていると、色々な用途に使えて便利です。
モータドライバTA8428Kの使い方
ここでは、モータドライバTA8428Kの使い方を説明します。
TA8428Kの特徴
TA8428Kは、DCモータ用のブリッジドライバです。次に、モータドライバTA8428Kの特徴を挙げておきます。
- モータの正転、逆転、ストップ、ブレーキが制御できる
- 電源は7.0~27.0Vの間で動作する
- 最大3.0A、平均で1.5Aの電流を流せる
TA8428Kの各ピンの役割
TA8428Kの各ピンの役割はこちらの表の通りです。IN1とIN2に入力される信号によって、DCモータの動きを制御する仕組みになってます。
端子番号 | 端子記号 | 説明 |
---|---|---|
1 | IN1 | 出力の状態を制御する |
2 | IN2 | 出力の状態を制御する |
3 | OUTA | DCモータへつなげる |
4 | GND | GND |
5 | OUTAbar | DCモータへつなげる |
6 | N.C | 使わない |
7 | Vcc | 電源電圧 |
ちなみに、モータドライバを正面から見た時、一番左側から1番端子となります。
TA8428Kの真理値表
モータドライバのINとOUTの関係をもうすこし詳しく見ていきます。次の表は入力端子IN1、IN2にHighとLowの信号を入力したときの、出力の変化をあらわす表になります。
IN1 | IN2 | OUTA | OUTAbar | 出力モード |
---|---|---|---|---|
H | H | L | L | ブレーキ |
L | H | L | H | 逆転 |
H | L | H | L | 正転 |
L | L | OFF | OFF | ストップ |
たとえば、モータを正転させたい場合は、IN1にHighを入力しIN2をLowにします。入力電圧は、モータドライバの電源電圧Vccの範囲までとなります。Raspberry Piのデジタルピンの出力は3.3Vなので、GPIO端子をそのまま入力へ接続できます。
モータドライバだけでモータを動かしてみよう
ここで、Raspberry Piでモータを制御する前に、モータドライバだけでモータを動かしてみましょう。次のとおりに配線すれば、モータが正転するはずです。
端子番号 | 端子記号 | 説明 |
---|---|---|
1 | IN1 | 9V |
2 | IN2 | GND |
3 | OUTA | DCモータへ |
4 | GND | GND |
5 | OUTAbar | DCモータへ |
6 | N.C | 未接続 |
7 | Vcc | 9V |
その他にも、IN1とIN2の状態を入れ替えたりして、逆転やブレーキができるか確かめてみてください。
モータの回転速度
ここまでで、モータドライバの基本的な使い方がご理解いただけたでしょういか?ところで、モータの制御には「正転」「逆転」「ブレーキ」の他に 「回転速度」 があります。DCモータの回転速度は、PWM信号でコントロールできます。PWM信号について詳しくは、 オペアンプ1個でつくる!PWMジェネレータ をご覧ください。
Raspberry Piとモータドライバを使ってDCモータの制御
それでは、Raspberry Piとモータドライバを使ってDCモータの制御を行なっていきます。Raspberry Piでモータ制御するには、gpiozeroライブラリを使うと簡単です。次のようにしてインストールしておきましょう。
$ sudo apt install python-gpiozero
Raspberry PiとTA8428Kの配線
Raspberry PiとモータドライバTA8428Kを次のように配線します。Raspberry PiとTA8428KのGNDを必ず共通につないでください。
Raspberry Pi | TA8428K |
---|---|
GPIO14 | IN1 |
GPIO15 | IN2 |
GND | GND |
Pythonプログラム
次のような動作をする制御を、Pythonでプログラミングしてみました。
- 正転しながら徐々にスピードが上がる
- 急転回して徐々にスピードが遅くなる
- そして停止する
# -*- coding: utf-8 -*-
from gpiozero import Motor
from time import sleep
### TA8428K モータドライバテスト ###
motor = Motor(14, 15) # GPIO14をIN1へ、GPIO15をIN2へ繋ぐ
motor.forward(0.3) # 0.3はモータの速度
sleep(2) # 2秒間正転し続ける
motor.forward(0.6)
sleep(2)
motor.forward(1.0)
sleep(2)
motor.backward(1.0) # ここで反転する
sleep(2)
motor.backward(0.6)
sleep(2)
motor.backward(0.3)
sleep(2)
motor.stop()
ご覧の通り、gpiozeroのMotorモジュールを使うと、とても簡単にモータ制御を行うことができます。 以上でRaspberry PiでTA8428Kモータドライバを使ってDCモータを制御する方法の説明をおわります。他にも、 10日で作る!ラズパイ倒立振子ロボット や Raspberry Piでステッピングモータの制御 、 リレーモジュールの使い方|Raspberry Pi・Arduino(ESP32) を書いてます。