Arduino筆記(54):L293D驅動馬達

過去做了幾個跟馬達有關的實作,例如:Arduino筆記(8):控制步進馬達  就是用 ULN2003 這個 IC來驅動步進馬達,Arduino筆記(15):控制伺服馬達 Servo 沒有用驅動 IC,Arduino筆記(25):Mini DVD 繪圖機 就是用Arduino  L293D Motor Shield 驅動光碟機馬達。
下圖是我目前有的馬達驅動板或驅動IC,L298N 曾出現在樹莓派的小車上,其他就沒特別用在實作上,接下來幾篇實作,就針對手邊有的這幾個驅動板或 IC ,來了解其功能及使用方法。本篇就先從 L293D開始。


一般控制DC 馬達驅動時,如果只是單一方向轉動,只要控制其電壓正負極的接腳,就可以控制轉向。如果要有正反轉能力的話,就必須在電路運作中將馬達電壓反向,一般常用的是L293D 這顆 IC,其他還有L298N、TA7257P、SN754410等。一般馬達電流比 Arduino 控制板大很多,如果直接使用,可能會因為控制板電流輸出過小推不動馬達,或是馬達的電流太大把控制板燒壞。所以建議使用獨立的電源供應馬達,並搭配馬達驅動器L293D。

[L293D]

根據L293D的規格書,主要規格如下:
  • 馬達類型 - 有刷 DC
  • 電流 - 輸出 600mA
  • 電壓 - 電源 4.5V ~ 36V
  • 16隻針腳

圖片來源:components101

L293D 接腳說明如下:
接腳
名稱
說明
1
Enable 1-2
作為左半邊IC控制用。當這個Pin為高電壓時,左半邊IC可作用,反之,低電壓時,左半邊IC無作用。分別用於打開,關閉和控制電機A和電機B的速度。接腳高電位會使電機旋轉,將其低電位會使它們停止。
2
Input 1
當這個Pin為高電壓時,電流會流出至Output 1使用方向控制引腳,我們可以控制電機是向前還是向後旋轉。這些引腳實際上控制L293D IC內部的H橋電路的開關。
3
Output 1
這個Pin要接到終端馬達的一個接腳。
4,5
GND
接地。
6
Output 2
這個Pin要接到終端馬達的一個接腳。
7
Input 2
當這個Pin為高電壓時,電流會流出至Output 2使用方向控制引腳,我們可以控制電機是向前還是向後旋轉。這些引腳實際上控制L293D IC內部的H橋電路的開關。
8
Vcc2 (Vs)
供給給馬達使用的電壓,如果要驅動的馬達是12V,那就要供給這個Pin 12V直流電。最大到36V
9
Enable 3-4
作為右半邊IC控制用。當這個Pin為高電壓時,右半邊IC可作用,反之,低電壓時,右半邊IC無作用。使用方向控制引腳,我們可以控制電機是向前還是向後旋轉。這些引腳實際上控制L293D IC內部的H橋電路的開關。
10
Input 3
這個Pin為高電壓時,電流會流出至Output 3
11
Output 3
這個Pin要接到終端馬達的一個接腳。
12,13
GND
接地。
14
Output  4
這個Pin要接到終端馬達的一個接腳。
15
Input 4
當這個Pin為高電壓時,電流會流出至Output 4
16
Vcc1 (Vss)
提供給IC的電源,這個Pin要供給5V電壓。
接腳8是給馬達用的電源輸入,接腳16是給IC用的,只要+5V即可。接腳1、9是Enable用來決定兩組H Bridge的開關。接腳 2、7的電流方向(HIGH → LOW)會影響接腳3、6的輸出,接腳4、5、13、12接地,接腳15、10電流方向(HIGH → LOW)會影響接腳11、14的輸出上,接腳1、9是Enable用來決定兩組H Bridge的開關(HIGH and LOW)。

[材料]

• 麵包板 x 1
• Arduino UNO R3  x 1
• 直流 5V 馬達 x 1
• L293D IC x 1
• 線型可變電阻 x 1
• 連接線 x N條

[線路連接與電路圖]

Arduino
L293D
馬達
可變電阻
5V
8
-
Vcc
Pin 11
9
-
-
Pin 10
10
-
-
-
11
一端
-
GND
12
-
GND
-
14
另一端
-
Pin 9
15
-
-
5V
16
-
-
A0
-
-
Data



[程式碼]

#define MotorPin1 10
#define MotorPin2 9
#define EnablePin 11
#define rPin A0

void setup() {
pinMode(MotorPin1,OUTPUT);
pinMode(MotorPin2,OUTPUT);
pinMode(EnablePin,OUTPUT);
pinMode(rPin,INPUT);
}

void loop() {
int rValue=0,pwmValue=0;
while(1)  {
  rValue=analogRead(rPin);      //讀取可變電阻值
  pwmValue=map(rValue,0,1023,0,254);  // 將值對應為 0~254 
  digitalWrite(MotorPin1,LOW);    
  digitalWrite(MotorPin2,HIGH);
  analogWrite(EnablePin,pwmValue); // 改變馬達的轉數
  delay(100);
 }
}

[實作結果]


[參考資料]

● WikiPedia:H Bridge
● Lastminuteengineers:Control DC Motors with L293D Motor Driver IC & Arduino

Post a Comment

較新的 較舊