DCモータをドライバIC使ってArduinoで制御します。
目次:
今回の目的
ELEGOOのチュートリアル「直流モータ」をチュートリアル通りに動かします。
※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。
L293Dと直流モータと電源モジュール
1.ドライバIC L293D
IC表面左下にSTマイクロのロゴ、右上に「L293D」の文字が見えます。
なお、Texas Instrument(TI)にも同型式のICがあり、そちらでもこのチュートリアルは実施できるようです。実際、ELEGOOのチュートリアルにはこのL293DをTI製であると書いておりました(スタータキットの製造ロットによってICの仕入れ先が変わるのでしょうか)。
詳細情報はメーカサイトに譲りますが、大まかな特徴を書きます。
・クランプダイオード内蔵
・最大600mA/チャネルの出力電流
・ENABLE機能
・最大1.2A/チャネルのピーク出力電流(非繰り返し)
・"L"入力電圧最大1.5V(高ノイズ耐性)
・過熱保護
DIPパッケージ16ピンの内、中央4つのピンはヒートシンクとして機能を持たせたGNDです。
プッシュプルのドライバ×4個を内蔵しており、組み合わせるドライバ出力の正負を切り替えることで電流方向・モータ回転方向を反転できます。また、ENABLEにPWM入力することによりモータ回転速度の調整もできる様子。
2.直流モータ
付属のプロペラはモータの軸に取り付けるもので、回転の視認性を高める役目と思われます。羽根は柔らかい造りになっており、回転中に手を触れてもケガをすることはまず無いでしょう。
モータ自体に特筆するところはありません。いわゆる"模型用"として販売されている直流整流子モータでしょう。2本の線に直流電流(含PWM)を流すことで軸を回転させます。電流の向きを反転させれば回転方向も反転します。
3.電源モジュール
直接Arduinoで駆動するにはモータは消費電力が大きいので、この電源モジュールからドライバICに給電します。
ブレッドボードに挿す構造になっており、ACアダプタでDC9Vを入力、ブレッドボードのラインにDC5.0VもしくはDC3.3Vを出力します(表面のジャンパスイッチで切り替え)。
電源モジュールの裏面には「ELEGOO」とシルクで記されておりますが、通販サイトを探せば色々なブランド名で似た商品が出てきました。
機材接続
ブレッドボード上に組みました。
家庭用電源100VからACアダプタを電源モジュールへ繋ぎます。
PCのUSBポートに繋いだArduinoをドライバICの入力に、ドライバICの出力をプロペラ付けたモータに繋ぎます。
スケッチ
オリジナルのものは3動作を1スケッチに収めておりますが、以下に2分割しました。
1.最大速度で急反転
最大速度で回転させます。0.5秒おきにドライバ正負切り替えにより、回転方向を急反転。
#define ENABLE 5; // D5を変数「ENABLE」に定義
#define IN1 3; // D3を変数「IN1」に定義
#define IN2 4; // D4を変数「IN2」に定義
void setup() {
pinMode(ENABLE,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
digitalWrite(ENABLE,HIGH); // ENABLE ON
}
void loop() {
digitalWrite(IN1,HIGH); // 回転方向指定(逆)
digitalWrite(IN2,LOW);
delay(500); // 0.5秒間継続
digitalWrite(IN1,LOW); // 回転方向指定(順)
digitalWrite(IN2,HIGH);
delay(500); // 0.5秒間継続
}
}
2.加速⇔減速
ENABLEへのPWMを調整して停止~最大速度まで加減速してます。
#define ENABLE 5; // D5を変数「ENABLE」に定義
#define IN1 3; // D3を変数「IN1」に定義
#define IN2 4; // D4を変数「IN2」に定義
int i; // 変数「i」を定義
void setup() {
pinMode(ENABLE,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
digitalWrite(IN1,HIGH); // 回転方向指定(順)
digitalWrite(IN2,LOW);
}
void loop() {
for(i=0;i<256;i++); // 加速
analogWrite(ENABLE,i);
delay(50);
}
delay(2000); // 2秒間待つ(最高速度)
for(i=255;i>-1;i--); // 減速
analogWrite(ENABLE,i);
delay(50);
}
delay(2000); // 2秒間待つ(停止)
}
動作
写真では動きを示せませんが、挙動はスケッチの項に記した通りです。
ENABLEにanalogWrite文で0~255のPWM信号を入れておりますが、あまりに低い数値では羽根は動かないようです(響くような音は聞こえるのですが)。
結構勢い良く羽根が回転するので、モータを固定した方が良さそうです。ケガをすることは無いにせよ、転がって変なところに触れて短絡してしまうと壊れかねませんので。
あと、電源モジュールの押しボタンスイッチの押し忘れに注意です。押すと、図6のようにモジュールのLEDが点灯して電源として機能します(押さないと機能しません)。最初それに気づかず、配線の接触不良を探ってしまいました。
所感
動作はほとんどチュートリアルを分割しただけですが、それだけでもスケッチを弄ると試行錯誤と達成感があります。どう動かそう、という目標さえあれば創意工夫を凝らして面白く取り組めそうです(わたしにとってはその"目標"の設定こそが、電子工作全般における課題なのですが)。
0 件のコメント:
コメントを投稿