スポンサーリンク
以前に東芝製のモータードライバー(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~7V | 10~45V |
値段 | 450円 | 230円 |
実装形態 | 表面実装部品 | 挿入実装部品 |
TB6643KQについては「モータードライバ(TB6643KQ)を使ってモータを動かす」を見てください。
モーターを動かす回路
今回はスイッチを二つ用意して、左側のスイッチを長押しすると徐々に正転し、右側を長押しすると徐々に逆転するPWM制御を使った回路を作成しました。
スイッチ1(入力1) | スイッチ(入力2) | 出力 |
LOW | LOW | 停止 |
HIGH | LOW | 正転 |
LOW | HIGH | 逆転 |
HIGH | HIGH | ブレーキ |
作成した回路
作成した回路を以下の通りです。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ブリッジ回路を搭載しているので、幅広い用途で使われていそうです。
今後も使うことが多くあると思いますので、使い方をマスターしておきたいものです。
参考書籍
スポンサーリンク
機械学習の基礎が学べる「Pythonコース」