L293d電機驅動模塊
L293d電機驅動模塊
L293D L293d電機驅動模塊 用到的庫 AFMotor
電機和驅動器
電機是許多機械人和電子項目不可分割的一部分,根據應用的不同,它們可以使用不同的類型。以下是有關不同類型電機的一些信息:
直流電機(DC Motor):直流電機是最常見的電機,可用於許多應用。我們可以在遙控車、機械人等中看到它。這種電機結構簡單。它將通過向其端部施加適當的電壓並通過切換電壓極性來改變其方向來開始滾動。直流電機的速度由施加的電壓直接控制。當電壓電平小於最大容許電壓時,速度會降低。
步進電機(Stepper Motor):在一些項目中,如3D打印機、掃描儀和數控機床,我們需要準確了解電機旋轉步數。在這些情況下,我們使用步進電機。步進電機可將整個旋轉分成多個相等的步長。每步的旋轉量由電機結構決定。這些電機具有非常高的精度。
伺服電機(Servo Motor):伺服電機是一種簡單的直流電機,帶有位置控制服務。通過使用伺服電機,您將能夠控制軸的旋轉量並將其移動到特定位置。它們通常尺寸小,是機械人手臂的最佳選擇。
但我們無法將這些電機直接連接到微控制器或控制器開發板(如Arduino)以控制它們,因為它們可能需要比微控制器驅動更多的電流,因此我們需要驅動器。驅動器是電動機和控制單元之間的接口電路,以便於驅動。驅動器有許多不同的類型。在本文中,您將學習如何使用L293D電機擴展板。
L293D擴展板(Shield)是基於L293的驅動板,可同時驅動4個直流電機和2個步進電機/伺服電機。
該模塊的每個通道的最大電流為1.2A,電壓範圍25v-4.5V,則不起作用。因此,請根據其標稱電壓和電流選擇合適的電機。
接口
使用該模塊的6個模擬引腳(也可以用作數字引腳)時,arduino的引腳2和引腳13是空閒的。
舵機接口
在使用伺服電機時,對應arduino引腳
servo1 10、
servo2 9
2
在使用直流電機時,#1使用引腳11,#2使用引腳3,#3使用引腳5,#4使用引腳6,他們全都使用4、7、8和12引腳。
在使用伺服電機時,#1使用引腳11和3,#2使用引腳5和6,他們全都使用4、7、8和12引腳。
您可以通過有線連接使用空閒引腳。
如果您向Arduino和擴展板提供獨立的電源,請確保已斷開擴展板上的跳線。
驅動直流電機
首先你要包含這個庫
#include <AFMotor.h>
定義您正在使用的直流電機。
第一個參數代表擴展板中的電機數量,第二個參數代表電機速度控制頻率。對於1號和2號電機,第二個參數可以是MOTOR12_2KHZ、MOTOR12_8KHZ、MOTOR12_8KHZ和MOTOR12_8KHZ;對於3號和4號電機,第二個參數可以是MOTOR12_8KHZ、MOTOR12_8KHZ和MOTOR12_8KHZ。如果為空,則默認為1KHZ。
AF_DCMotor motor(1, MOTOR12_64KHZ)
定義電機速度。可以設置為0到255
motor.setSpeed(200);
motor.run()函數指定電機的運動狀態。狀態可以是FORWARD、BACKWARD和RELEASE。 RELEASE與制動器相同,但可能需要一些時間才能完全停止電機。
建議在每個電機引腳上焊接一個100nF電容,以降低噪聲。
void loop() {
motor.run(FORWARD);
delay(1000);
motor.run(BACKWARD);
delay(1000);
motor.run(RELEASE);
delay(1000);
}
驅動伺服電機
Arduino IDE庫和示例適用於驅動伺服電機。
#include <servo.h>
包含驅動伺服電機所需的庫
Servo myservo;
定義伺服電機對象。
void setup()
{
myservo.attach(9);
}
確定連接伺服的引腳(sevo#1的引腳9和伺服#2的引腳10)
void loop()
{
myservo.write(val);
delay(15);
}
確定電機旋轉量。根據電機類型,在0到360或0到180之間。
驅動步進電機
#include <AFMotor.h>
確定您需要的庫
AF_Stepper motor(48, 2);
定義步進電機對象。第一個參數是電機步進解像度。第二個參數是連接到擴展板的步進電機的編號。
void setup() {
motor.setSpeed(10);
motor.onestep(FORWARD, SINGLE);
motor.release();
delay(1000);
}
void loop() {
motor.step(100, FORWARD, SINGLE);
motor.step(100, BACKWARD, SINGLE);
motor.step(100, FORWARD, DOUBLE);
motor.step(100, BACKWARD, DOUBLE);
motor.step(100, FORWARD, INTERLEAVE);
motor.step(100, BACKWARD, INTERLEAVE);
motor.step(100, FORWARD, MICROSTEP);
motor.step(100, BACKWARD, MICROSTEP);
}
以rpm為單位確定電機速度。
第一個參數是移動所需的步數,第二個參數是確定方向(FORWARD或BACKWARD),第三個參數確定步驟類型:SINGLE(激活線圈)、DOUBLE(激活兩個線圈以獲得更大的扭矩) ,INTERLEAVED(線圈數量從一到兩連續變化,反之亦然到雙倍精度,但在這種情況下,速度減半)和MICROSTEP(為了更加精確,更改步驟緩慢完成。在這種情況下, 扭矩較低)。
默認情況下,當電機停止移動時,它會保持其狀態。
必須使用motor.release()函數釋放電機。




