モータドライバICとは、IC内のHブリッジ回路でモータを駆動(ドライブ)するためのものです。回転方向を正転・逆転と切り替えたり、回転スピードを調整したりと自由にモータを制御することができるようになります。
大電流を流す基板には、不向きですが、5A以下程度の電流用途では、MOSFETなどでいちから回路を組む必要がなく、だれでも簡単にモータドライバー基板を作成できます。
TOSHIBA製のTB9051FTGが有名ですね。下に以前このICについて、まとめた記事を紹介しときます。
HブリッジモータドライバIC(TB9051FTG)を使ってみた
今回は、ESP32の純正ボードESP32-DebkitCとTB9051FTGを使用したモータドライバ基板の作り方をまとめてみました。
まず、TB9051FTGの特徴
TOSHIBA製のTB9051FTGは下の特徴があります。
– 用途は、スロットルバルブ制御用、エンジンの車載アプリケーション用IC。
– 1chのフルHブリッジドライバでPWM制御出力。
– 出力電流容量は5AMAX。
– 異常検出機能として、過電流検出、過熱検出、VBAT低電圧検出、VCC低電圧検出、VCC高電圧検出がある。
– 動作温度は-40℃~125℃。
– 論理レベルがVH=1.75V,VL=0.75Vのヒステリシスのため、ESP32の3.3V系でも操作が可能。
基本用途が車載用なので耐ノイズ性高く、異常検出機能が豊富です。
TB9051FTGの入出力
モータドライバIC(TB9051FTG)で入出力端子は下のようになります。
HブリッジモータドライバIC(TB9051FTG)を使ってみた
上の記事ではブレッドボード上でTB9051FTGのテストを行ってます。今回はそれをベースに回路図を作成して、基板をつくります。
作成した回路図は、以下のとおりです。
注意した点をあげときます。
1.モータノイズ対策
下図のように、モータのPWM駆動でON/OFFを高速でした時に発生したサージが電源に乗って変動したためにモータドライバICの動作電圧範囲から外れ、リセットしていた問題がありました。
この対策として、電源回路に電解コンデンサを追加しました。コンデンサの容量を調整して電源の電圧の変動は緩和され、リセットの問題は解消しました。連続運転でも不具合の発生は無くなりました。
下の赤枠が追加したコンデンサです。
下図が追加後の電圧波形です。安定化しました。
基板としては、下のような感じで、純正ボードと亀の子にするというコンセプトで設計しましたが、
追加したコンデンササイズ220uFが大きく、純正ボードと干渉してしまいます。
そのため、以下のようにコンデンサ47uFを並列化して、高さ方向のサイズを抑えました。
下が、修正したデザインです。
2.パワー系と制御系のGNDの分離
TB9051FTGのモータドライバICのモータを駆動するHブリッジのパワー系のGNDとコントロールするための制御系のGNDをなるべく分離してプリント基板のパターンを設定してノイズ対策を行いました。
赤枠部分の1点でパワー系と制御系のGNDを共通するようにしました。
3.電流モニタ端子(OCM)の設定
TB9051FTGのモータドライバICには、モータ駆動のHブリッジ回路に流れる電流値をモニタする端子(OCM)があります。これは、モータ駆動のHブリッジ回路に流れる電流値0~6Aの 0.233%(固定値)の電流値をOCM端子から出力し、OCM端子と外付け抵抗をGND間に挿入することで電流値をモニタすることが出来ます。
点線の赤枠内の外付け抵抗(R)を220Ωに設定するとOCMモニタ電圧(E)は以下の表のようになりESP32にて電圧値でモニタ出来るようになります。ESP32は3.3VのA/Dコンバータ(ADC)を持っているので最大で3.3V以下になるように設定しました。
ESP32でOCMモニタ値を電圧で測定してみました。精度はあまり高くありませんがおおよその電流値はモニタ出来ます。
計測した値が線形にならないのは、今のところ二つの理由を考えています。
ひとつは、モータドライバICの問題。TB9051FTGのモータドライバICのデータシート上にOCMの電流特性グラフがありますが、以下のように製品によるバラツキが大きくあまり精度が高くありません。
もうひとつは、ESP32のアナログ入力の精度の問題があります。これについては、以下の記事で詳しく書いてありますのでご覧ください。入力回路の改良で、アナログ入力の精度アップができるので、これに関しては、改善の余地があります。
ESP32の入出力ボードを作ってみた -アナログ入力の精度アップ-
4.DIAG端子について
TB9051FTGのモータドライバICのDIAG端子はオープンドレインタイプの出力端子のため、ESP32の電源(5V)にTB9051FTGのデータシートにて推奨のプルアップ抵抗(5.1kΩ)を接続してESP32のデジタル端子(GPIO)に入力しました。
5.電源(+12V)用コンデンサの設定
TB9051FTGのモータドライバICデータシートに載っている応用回路図を参考にTB9051FTGの電源に接続するコンデンサを設定しました。電源回路にはすでにノイズ対策用にコンデンサが接続されているため、コンデンサの容量は少し小さくして、TB9051FTGの素子の近傍になるようにプリント基板に配置しました。
6.その他端子の設定(PWM1、PWM2、EN_HB、ENB、OCC)
TB9051FTGのモータドライバICの内部でプルアップ抵抗、プルダウン抵抗が設定されているため、直接ESP32の入出力端子に接続することが可能です。
PWM1、PWM2、EN_HB、ENB、OCCは直接ESP32の入出力端子に接続しました。
実際に作成したプリント基板
実際に作成したプロント基板を主なパターン別に載せておきます。ノイズ対策でなるべくGND系は表面、パワー系は裏面になるように配置しました。
動作チェック
手持ちのモータを使って、下のようにスイッチサイエンスのESP32純正ボード用モータドライバに接続してみました。
ESP32をつけてみた状態が以下の写真です。亀の子で装着するので、分かりにくいですが、コンパクトにおさまります。
ESP32純正ボード用モータドライバはESP32の以下の端子に接続されています。
試しに以下のサンプルプログラムで動作させてみました。
//const int MotorPin = 32; // PWM1側出力、デジタルピン32に接続
const int MotorPin = 33; // PWM2側出力、デジタルピン33に接続
int ENHB = 21; // ENHBはデジタルピン21に接続
int ENB = 22; // ENBはデジタルピン22に接続
int OCC = 23; // OCCはデジタルピン23に接続
int DIAG = 19; // DIAGはデジタルピン19に接続
//#define TestPin 23
// ENHB = 21,ENB = 22,OCC = 23,DIAG = 19ピンチェック
#define TestPin 34 // OCM = 34ピンチェック
void setup() {
ledcSetup(0, 1000, 8);
ledcAttachPin(MotorPin, 0);
pinMode(ENHB, INPUT_PULLUP);
//内部プルアップに設定 DCモーター動作モード
//pinMode(ENHB, INPUT_PULLDOWN);
//内部プルダウンに設定 DCモーターSTOPモード
pinMode(ENB, INPUT_PULLDOWN); //内部プルダウンに設定
pinMode(OCC, INPUT_PULLUP); //内部プルアップに設定
Serial.begin(115200);
}
void loop() {
static uint8_t MotorDUTY = 0;
static int diff = 1;
while(1){
ledcWrite(0, MotorDUTY);
if (MotorDUTY == 0) {
diff = 1;
} else if (MotorDUTY == 128) {
diff = -1;
}
MotorDUTY += diff;
long d = 0;
for (int i = 0; i < 1; i++) { // 1回測定して
d += analogRead(TestPin);
}
Serial.println(d / 1); // 平均値をシリアルに出力
delay(5);
}
}
プログラムについて補足説明します。
モータドライバIC(TB9051FTG)を動作させるために下のように各端子を設定しています。
ドライバ制御信号は、LED PWMの機能を使って1kHzの周波数で0~50%DutyのPWM出力でモータを動作させています。モータの正転側はPWM1、逆転側はPWM2になります。
モータ正転側のPWM1の動きを説明します。モータファンクションは”a”の状態になります。
モータドライバIC(TB9051FTG)のHブリッジドライバ(OUT1、OUT2)は以下のようにスイッチングします。
モータ正転側動作時はOUT1は”H”、OUT2は”L”になるため、Hブリッジ回路のMOS FETは以下のようにスイッチングされ、電流がモータの1から2の方向に流れます。PWM出力のDuty比を変化させることでモータ速度を調整できます。
次にモータ正転側のPWM2の動きを説明します。モータファンクションは”b”の状態になります。
同じくモータドライバIC(TB9051FTG)のHブリッジドライバ(OUT1、OUT2)は以下のようにスイッチングします。
モータ正転側動作時はOUT1は”L”、OUT2は”H”になるため、Hブリッジ回路のMOS FETは以下のようにスイッチングされ、電流がモータの2から1の方向に流れます。PWM出力のDuty比を変化させることでモータ速度を調整できます。
無事にモータがまわりました。
下が、モータ動作中の駆動電流値”OCM”をモニタ結果です。
モータドライバの駆動電流値の出力は、電流センス 2.0 A/V になるため、モニタの波形から 600/4096*3.3*2.0 = 0.97 A でMAX 約1A流れていることが分かります。
以上になります。今回作成した基板で無事モータを回すことができました。発注の都合で、複数個注文したので、スイッチサイエンスさんで、余りを販売しています。
純正ボードと亀の子にできるように、コンパクトな実装になっていますので、みてみてください。