Search

2011年5月15日 星期日

Arduino - 使用H Bridge控制直流馬達(L293D)

前言:

關於使用MCU去控制大電流之電動機都會用到放大電路,原因是一般MCU比如Arduino大約只有輸出20mA的電流,甚至現在講求低功耗的MCU只有8mA或更少,因此我們需要由兩個電晶體組成的電路「達靈頓電路」來做電流放大,一般可以買到封裝過的比如「TIP12X」系列,但這類電晶體並不能控制電流方向,換句話說使用這類電路電動機就只能往單一方向運動,如果要改變方向就必須要能改變電流流向,這時就要用到所謂「H Bridge」也就是俗稱的「H橋」電路。




可以發現其實H橋就是由四個電晶體組成,然後由MCU輸入到基極(Base)的電位決定電晶體集極(Collector)與射極(Emmiter)是否導通,可以把它想成一個電子式的開關。



市面上有已經將H橋電路封裝成IC的產品,比如本次實驗用的L293D就是將兩個H橋電路封裝成一個IC的產品,要注意的是MCU的供電與馬達的供電建議要分開,才不會發生電流不穩定造成MCU當機的情況,另外就是要記得將MCU的電源接地腳與馬達電源的接地腳共接!


實驗:


先看看 L293D 的Datasheet:http://www.datasheetcatalog.org/datasheet/texasinstruments/l293.pdf

可以發現腳8是給馬達用的電源輸入,腳16是IC用的給+5V即可,腳4、5、13、12接地即可,腳2、7電流方向(HIGH -> LOW)會反應在腳3、6,腳15、10電流方向(HIGH -> LOW)會反應在腳11、14,腳1、9是Enable用來決定兩組H Bridge的開關(HIGH and LOW)。

接著就可以拿出你的Arduino開始接線了!





程式:


const int motor1a = 4;
const int motor2a = 3;
const int e12 = 5;

const int motor3a = 8;
const int motor4a = 9;
const int e34 = 10;

void setup()
{
  pinMode(motor1a,OUTPUT);
  pinMode(motor2a,OUTPUT);
  pinMode(e12,OUTPUT);

  pinMode(motor3a,OUTPUT);
  pinMode(motor4a,OUTPUT);
  pinMode(e34,OUTPUT);

  digitalWrite(e12,HIGH);
  digitalWrite(e34,HIGH);
}

void loop()
{
  run();
}

void run()
{
  digitalWrite(motor1a,HIGH);
  digitalWrite(motor2a,LOW);
  digitalWrite(motor3a,HIGH);
  digitalWrite(motor4a,LOW);
  delay(3000);
  digitalWrite(motor1a,LOW);
  digitalWrite(motor2a,HIGH);
  digitalWrite(motor3a,LOW);
  digitalWrite(motor4a,HIGH);
  delay(3000);
}



DEMO:


最後你可以參考這裡:http://itp.nyu.edu/physcomp/Labs/DCMotorControl 在腳8增加一個10uF~100uF的有極性電解電容防止電流不足導致Arduino當機!如果你發現L293D太熱就幫它裝上一個散熱片吧!電料行一個十元左右!

9 則留言:

  1. 請問
    L293d只能供給小電流驅動130級以下的小馬達,若想驅動大一點的馬達要用哪一種晶片
    另外請問你DEMO的零件是在哪買的
    謝謝

    回覆刪除
    回覆
    1. 再大一點的可以使用L298,可以買到ic,也有做好的pbc板

      刪除
  2. 大一點的就要看是多大了可能要自己用晶體做吧,DEMO那個變速齒輪組是TAMIYA的玩具喔!

    回覆刪除
  3. 請教一下
    使用L293D可以控制馬達的轉速嗎
    理論上是輸入電壓打開電晶體的開關
    那如果說輸入的電壓用PWM訊號
    是否就能夠做到控制速度?

    謝謝!

    回覆刪除
  4. 請問L293D 是類似8051ㄉ燒錄版?

    就是圖片上綠色那塊版子

    還有這張圖片就是可以直接做好放要被遙控的車子上的電路圖嗎?

    回覆刪除
  5. 聯絡我及時 每個帳號都是jaho5566

    或是FB Cheng Hsu

    回覆刪除
  6. 我想請問該IC Driver最高可受電壓是多少?
    P.S外置了16V電源
    還有,若供應16V外置電給馬達,會否影響Arduino? 若會,可以怎樣解決??

    回覆刪除
  7. 你好想請問為何,MCU的電源接地腳與馬達電源的接地腳要共接!
    分開與共接差別是?

    回覆刪除