Arduino

モータードライバー(DRV8835)を使ってモーターを動かす

以前に東芝製のモータードライバー(TB6643KQ)を使ってDCモーターを動かす回路を作成しました。モータードライバーは他にもあり、今回はDRV8835というモータードライバーを使ってみます。

DRV8835

DRV8835はHブリッジ回路が搭載されたモータードライバーICで、DCモーターを2つ接続して動作することができます。入力A、Bと出力A、Bを含めて12ピンあります。※写真は予めDRV8835を基盤に取り付けた部品です。

1つのモータードライバーで2つのDCモーターを制御できるため、必要な部品数を抑えることができますし、 TB6643KQ と比べて必要な電圧は小さくて済みます。以下の二つの違いについてまとめました。

DRV8835 TB6643KQ
接続可能DCモーター数2個1個
必要電圧2~7V10~45V
値段450円230円
実装形態表面実装部品挿入実装部品

TB6643KQについては「モータードライバ(TB6643KQ)を使ってモータを動かす」を見てください。

モーターを動かす回路

今回はスイッチを二つ用意して、左側のスイッチを長押しすると徐々に正転し、右側を長押しすると徐々に逆転するPWM制御を使った回路を作成しました。

スイッチ1(入力1)スイッチ(入力2)出力
LOWLOW停止
HIGHLOW正転
LOWHIGH逆転
HIGHHIGHブレーキ

作成した回路

作成した回路を以下の通りです。DRV8835は表面実装部品であるため、秋月電子で売っている「DRV8835使用ステッピング&DCモーターモジュール」を使っています。

用意した装置及び部品は下表をご覧ください。

Arduinoマイコン搭載の小型コンピュータ
ブレッドボード抵抗・ジャンパー線などを使って回路を作る基板
モータードライバモーターを制御するIC(DRV8835)
DCモータ直流電流で動作するモーター
抵抗10kΩ×2電圧を下げる端子
コンデンサ0.1μF電荷を充放電して電圧を一定にしたり、直流分をカットして交流分のみを取り出す素子
タクトスイッチ ×2 ボタン押下で電通を制御するスイッチ
ジャンパー線電気を中継する線
ワニ口クリップ先端がワニ口をしているジャンパー線
電池ケース(単三2本)3v用電源

プログラムコード

プログラムコードは以下の通りです。

const int MT1_PIN = 9;//出力1
const int MT2_PIN = 10;//出力2
const int SW1_PIN = 12;//入力1
const int SW2_PIN = 13;//入力2
const int MAX = 255;//モータのPWM制御の最大値
const int INC = 4;//PMW制御の増加分

int sw1 = 0;
int sw2 = 0;
int ord_cnt = 0;
int rev_cnt = 0;
int bef_states = 0;
int states = 0;

void setup() {
  // put your setup code here, to run once:

 pinMode(MT1_PIN,OUTPUT);
 pinMode(MT2_PIN,OUTPUT);
 pinMode(SW1_PIN,INPUT);
 pinMode(SW2_PIN,INPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  sw1 = digitalRead(SW1_PIN);
  sw2 = digitalRead(SW2_PIN);
  //ブレーキ
  if(sw1 == HIGH && sw2 == HIGH)
  {
    analogWrite(MT1_PIN,MAX);
    analogWrite(MT2_PIN,MAX);
    states = 0;
  }
  //正転
  else if(sw1 == HIGH && sw2 == LOW)
  {
    if( ord_cnt > MAX)
    {
      ord_cnt = INC;
    }
    else
    {
      //処理なし
    }
    analogWrite(MT1_PIN,ord_cnt);
    analogWrite(MT2_PIN,0); 

    ord_cnt = ord_cnt + INC;
    states = 1;
  }
  //逆転
  else if(sw1 == LOW && sw2 == HIGH)
  {
    if( rev_cnt > MAX)
    {
      rev_cnt = INC;
    }
    else
    {
      //処理なし
    }
    analogWrite(MT1_PIN,0);
    analogWrite(MT2_PIN,rev_cnt);

    rev_cnt = rev_cnt + INC;
    states = 2;
  }
  //停止
  else
  {
    analogWrite(MT1_PIN,0);
    analogWrite(MT2_PIN,0);
    states = 0;
  }

  if( bef_states != states)
  {
    delay(200);
  }
  else
  {
    //処理なし
  }
 bef_states = states;
  
}

実行結果

まとめ

今回はモータードライバ(DRV8835)を使ってDCモーターを動かす回路を作成しました。このドライバーはDCモーターを2つ制御できてHブリッジ回路を搭載しているので、幅広い用途で使われていそうです。

今後も使うことが多くあると思いますので、使い方をマスターしておきたいものです。

参考書籍

Arduino電子工作