2012年4月26日木曜日

Arduino でDCモータを制御

今回は、ArduinoでDCモータの制御を試してみます。

今回のDCモータは、電気を流すと回り、電気を止めると回転も止まり、逆方向に電気を流すと逆回転するDC(直流式)モータです。模型に使われることが多いモーターです。マブチモータが有名ですよね。


DCモータ以外に、サーボと呼ばれるモータもありますが、これは、また今度です。

子供のころから慣れ親しんだ、たくさんの電気を流すと高速に回転し、電池が無くなってきて流れる電流も少なくなるとゆっくり回転、電気を流さないと止まり、+と-を逆にすると逆回転する動きは、良くわかっていますが、これをArduinoから直接制御するとなるとちょっと大変なんですって。

たとえば、ArduinoはDCモータほど、電気的におおざっぱではなく、モータが動き出す時に流れる大きな電流でArduino本体が壊れたりする恐れがあるそうです。

なので、モータを制御する専用のICを使うことがおすすめです。
今回使用するのは、東芝 TA7291P です。

早い回転、遅い回転、止める、逆回転なんかを指定する信号を、Arduinoからこの モータ制御ICへ伝えれば、その指示通りに動かしてくれる優れものです。

さっそく、回路図からです。


TA7291P回りの配線が多い気がしますね。
ゆっく落ち着いて、電池をつなぐのは最後の最後、何度も確認しないと、誤配線で、焦げちゃいそうです。

ちなみに私は、電池の+と-を逆につないで、ものすごくTA7291Pが熱くなってしまいました。
もう少しで、焦げていました。好奇心で放熱板を触ったら、指先が火傷並に痛かったです。
ご注意を。

スケッチは、 こんな感じです。応用すれば、いろいろできますが、今回は、まず、きちんと動作できることを確認する意味で、こういうスケッチにしました。

void setup(){
  pinMode(1,OUTPUT); //信号用ピン
  pinMode(2,OUTPUT); //信号用ピン
  pinMode(11,INPUT); //スイッチ
}

void loop(){
  int val;
if(digitalRead(11)==HIGH){
  val=300; // ゆっくりめで回転
}else{
  val=254; //止める
}
 
  //静止/正転/逆転の状態に分けてプログラムする
  if(val>=255 && val<=256){ //静止:255~256
    //LOW,LOWでデジタル出力
    digitalWrite(1,LOW);
    digitalWrite(2,LOW);
  }else if(val>256){        //正転:257~511
    //HIGH,LOWでデジタル出力
    digitalWrite(1,HIGH);
    digitalWrite(2,LOW);
    //valが大きいほど出力値も大きくなる
    analogWrite(3,val-256); //出力値:1~255
  }else{                    //逆転:0~254
    //LOW,HIGHでデジタル出力
    digitalWrite(1,LOW);
    digitalWrite(2,HIGH);
    //valが小さいほど出力値は大きくなる
    analogWrite(3,255-val); //出力値:1~255
  }   
}

後半部分の analogWritでは、スピードの調整、digitalWrite 1番ピンと2番ピンでは回転方向を指示しています。

タクトスイッチを押すと回転し、手を離すと回転が止まる動作を確認し、大成功です。




・電子工作の基本100
・図解でわかるはじめての電子回路
・Android×Arduinoでつくるクラウド連携デバイス―Android ADKで電子工作








0 件のコメント:

コメントを投稿