過去做了幾個跟馬達有關的實作,例如: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 接腳說明如下:
接腳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)。
• Arduino UNO R3 x 1
• 直流 5V 馬達 x 1
• L293D IC x 1
• 線型可變電阻 x 1
• 連接線 x N條
● Lastminuteengineers:Control DC Motors with L293D Motor Driver IC & Arduino
下圖是我目前有的馬達驅動板或驅動IC,L298N 曾出現在樹莓派的小車上,其他就沒特別用在實作上,接下來幾篇實作,就針對手邊有的這幾個驅動板或 IC ,來了解其功能及使用方法。本篇就先從 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電壓。
|
[材料]
• 麵包板 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
張貼留言