關於使用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太熱就幫它裝上一個散熱片吧!電料行一個十元左右!
請問
回覆刪除L293d只能供給小電流驅動130級以下的小馬達,若想驅動大一點的馬達要用哪一種晶片
另外請問你DEMO的零件是在哪買的
謝謝
再大一點的可以使用L298,可以買到ic,也有做好的pbc板
刪除大一點的就要看是多大了可能要自己用晶體做吧,DEMO那個變速齒輪組是TAMIYA的玩具喔!
回覆刪除請教一下
回覆刪除使用L293D可以控制馬達的轉速嗎
理論上是輸入電壓打開電晶體的開關
那如果說輸入的電壓用PWM訊號
是否就能夠做到控制速度?
謝謝!
可以
回覆刪除請問L293D 是類似8051ㄉ燒錄版?
回覆刪除就是圖片上綠色那塊版子
還有這張圖片就是可以直接做好放要被遙控的車子上的電路圖嗎?
聯絡我及時 每個帳號都是jaho5566
回覆刪除或是FB Cheng Hsu
我想請問該IC Driver最高可受電壓是多少?
回覆刪除P.S外置了16V電源
還有,若供應16V外置電給馬達,會否影響Arduino? 若會,可以怎樣解決??
你好想請問為何,MCU的電源接地腳與馬達電源的接地腳要共接!
回覆刪除分開與共接差別是?