Arduino電機驅動擴展板 L298N 最新的電機驅動擴展板:
同別的版本相比,改動主要是添加了更多的設置開關,以滿足不同場合下的應用要求,專門為Arduino配套設計!
- VLO(Voltage Logic Onboard)
電機驅動芯片L298N在工作的時候有兩個電壓:邏輯電壓和電機電壓,其中邏輯電壓是5V,一般會小於電機電壓(比如7.2V,9V或者12V)。為了能夠將接在VEX端子上的電機電壓轉換成5V邏輯電壓使用,電機驅動板上提供了相應的電壓轉換電路。電壓轉換電路的工作電壓是受限的(小於16V),所以如果電機大於16V的時候,就不能使用這個電壓轉換電路了。VLO開關的作用就是選擇是打開(開關置於ON)還是關閉(開關置於OFF)板上這一邏輯轉換電路。
- VLC(Voltage Logic Connected)
L298N電機驅動擴展板上的邏輯電壓除了可以通過上面介紹的電壓轉換電路提供之後,也可以通過與Arduino控制板上的5V邏輯電壓直接連接來提供。VLC開關的作用是決定是否將電機驅動擴展板上的5V邏輯電壓與Arduino控制板上的5V邏輯電壓連接起來:當開關置於ON的位置上時連接,當開關置於OFF的位置上時不連接。
VM的作用是對電機電壓進行選擇。當L298N電機驅動擴展板與Arduino連接起來之後,有兩種辦法為電機提供電源:通過Arduino板上的Vin引腳(開關置於VIN)和通過電機驅動擴展板上的VEX端子(開關置於VEX)。
相對於Arduino來講,L298N電機驅動擴展板所承載的電流和電壓都是比較高的,因此在使用的過程中要特別注意連線。下面提供幾種典型的電路連接方式供大家在使用中參考:
1. 電機電壓為6~12V
一般來講,Arduino可以通過外接的6V-12V變壓器進行供電(Arduino上的Vin引腳),如果你的電機電壓正好在這個範圍之內,那就正好可以利用這一外接電源來同時為Arduino和電機供電。這種情況下VLO、VLC和VM三者的設置為:
- VLO:OFF,不需要電機驅動擴展板上的電壓轉換電路
- VLC:ON,與Arduino的5V引腳進行連接,為電機驅動擴展板提供邏輯電壓
- VM:VIN,與Arduino的Vin引腳進行連接,為電機驅動擴展板提供電機電壓
2. 電機電壓小於6V
這種情況下只能通過電機驅動擴展板上的GND和VEX兩個端子來給電機供電,此時電機驅動擴展板上的5V邏輯電壓轉換電路無法正常工作(VEX電壓太低),所以我們只能同Arduino板上的5V引腳連接來為電機驅動擴展板提供5V邏輯電壓。這種情況下電機驅動擴展板的設置為:
- VLO:OFF,不需要電機驅動擴展板上的電壓轉換電路
- VLC:ON,與Arduino的5V引腳進行連接,為電機驅動擴展板提供5V邏輯電壓
- VM:VEX,通過電機驅動擴展板上的VEX/GND端子為電機提供驅動電壓
3. 電機電壓為12V-15V
這種情況下也只能是通過電機驅動擴展板上的GND和VEX兩個端子來給電機供電,此時電機驅動擴展板上的5V 邏輯電壓轉換電路可以正常工作。這種情況下電機 驅動擴展板的設置為:
- VLO:ON,需要電機驅動擴展板上的電壓轉換電路
- VLC:OFF,不與Arduino的5V引腳進行連接,安全隔離
- VM:VEX,通過電機驅動擴展板上的VEX/GND端子為電機提供驅動電壓
上述設置中因為VLC並沒有將Arduino的5V引腳與電機擴展板上的5V邏輯電壓連接起來,因此我們仍需要再額外為Arduino供電(通過USB線或者外接電源),主要是出於安全隔離的考慮,特別是在VEX上的電壓比較高的情況下。
4. 電機電壓為15V-46V
這種情況下也只能是通過電機驅動擴展板上的GND和VEX兩個端子來給電機供電,此時電機驅動擴展板上的5V 邏輯電壓轉換電路無法正常工作(VEX電壓太低)。這種情況下電機 驅動擴展板的設置為:
- VLO:OFF,不需要電機驅動擴展板上的電壓轉換電路
- VLC:ON,與Arduino的5V引腳進行連接,為電機驅動擴展板提供5V邏輯電壓
- VM:VEX,通過電機驅動擴展板上的VEX/GND端子為電機提供驅動電壓
從控制原理上講,L298N與L293D基本是一樣的,都是分別通過兩根方向引腳來控制電機的旋轉方向,再通過一根使能引腳上的PWM信號來控制電機的轉速。具體到該擴展板上,電機MA的方向引腳為Arduino的13和12號管腳,速度引腳則是Arduino的10號管腳;電機MB的方向引腳為Arduino的11和8號管腳,速度引腳則是Arduino的9號管腳。示例代碼如下所示:
// motor Aint dir1PinA = 13;int dir2PinA = 12;int speedPinA = 10;// motor B// motor Aint dir1PinB = 11;int dir2PinB = 8;int speedPinB = 9;unsigned long time;int speed;int dir;void setup() { pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT); pinMode(speedPinA, OUTPUT); pinMode(dir1PinB, OUTPUT); pinMode(dir2PinB, OUTPUT); pinMode(speedPinB, OUTPUT); time = millis(); speed = 0; dir = 1;}void loop() { analogWrite(speedPinA, speed); analogWrite(speedPinB, 255 - speed); // set direction if (1 == dir) { digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); } else { digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, HIGH); } if (millis() - time > 5000) { time = millis(); speed += 20; if (speed > 255) { speed = 0; } if (1 == dir) { dir = 0; } else { dir =1; } }}
為了對電機的工作狀態有更加直觀的理解,擴展板上還專門添加了4個LED來分別表示電機的轉動方向,其亮度也正好表明了電機轉速的高低,非常方便!