概述
在本課程中,您將學習如何使用Arduino和L293D電機驅動器芯片來控制小型DCmotor的方向和速度。
電位器控制電動機的速度,并通過按鈕控制方向。
零件
要構建本課中描述的項目,您將需要以下零件。
零件 數量
小型6V直流電動機
1
L293D IC
1
10kΩ可變電阻器(pot)
1
觸摸開關
1
半面包板
1
Arduino Uno R3
1
跳線包
1
實驗
在獲得用于控制電機的Arduino板之前,我們應該先對L293D電機控制芯片進行實驗,以了解其工作原理。
我們可以僅使用Arduino向電動機提供5V電壓。
請注意電動機的旋轉方式。您可以通過將電動機軸夾在手指之間來做到這一點。交換電動機導線,使原先要達到+ 5V的電動機導線到達GND,反之亦然。電動機將沿相反方向旋轉。
這為我們提供了有關L293D芯片工作原理的線索。它的控制銷使我們能夠執行等效的交換電動機端子以反轉電動機方向的操作。
按如下所示構建面包板。 Arduino仍然只是供電,但是我們可以在讓Arduino接管之前手動對控制引腳進行實驗。
我們感興趣的L293D的三個引腳是引腳1(啟用),引腳2(In1)和引腳7(In2)。 )。使用紫色,黃色和橙色的跳線將它們連接到5V或GND。
如上所示,電動機應該在一個方向上旋轉,我們將其稱為A方向。
如果將引腳1(使能)移至GND時,無論使用控制引腳In1和In2做什么,電動機都將停止。啟用可打開和關閉所有功能。這對于使用PWM輸出控制電動機速度非常有用。將引腳1重新連接至5V,以便電動機再次啟動。
現在嘗試將In1(引腳2,黃色)從5V移至GND。In1和In2現在都已連接至GND,因此電動機將再次停止。/p》
將In2從GND移至5V將導致電動機沿相反方向(B方向)旋轉。
最后,將In1移回5V,以使In1和In2都處于5V導致電動機停止。
引腳In1和In2對電動機的影響總結在下表中:
In1In2電動機
GNDGND已停止
5VGND向A方向轉動
GND5V向B方向轉動
5V5V已停止
面包板布局
現在我們已經掌握了直接控制電機的功能,我們可以讓Arduino管理 Enable , In1 和 In2 引腳。
構建面包板時,需要確保IC正確定位。凹口應位于面包板的頂部。
Arduino代碼
將以下草圖加載到您的Arduino上。
下載:文件
復制代碼
/*
Adafruit Arduino - Lesson 15. Bi-directional Motor
*/
int enablePin = 11;
int in1Pin = 10;
int in2Pin = 9;
int switchPin = 7;
int potPin = 0;
void setup()
{
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode(switchPin, INPUT_PULLUP);
}
void loop()
{
int speed = analogRead(potPin) / 4;
boolean reverse = digitalRead(switchPin);
setMotor(speed, reverse);
}
void setMotor(int speed, boolean reverse)
{
analogWrite(enablePin, speed);
digitalWrite(in1Pin, ! reverse);
digitalWrite(in2Pin, reverse);
} /*
Adafruit Arduino - Lesson 15. Bi-directional Motor
*/
int enablePin = 11;
int in1Pin = 10;
int in2Pin = 9;
int switchPin = 7;
int potPin = 0;
void setup()
{
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode(switchPin, INPUT_PULLUP);
}
void loop()
{
int speed = analogRead(potPin) / 4;
boolean reverse = digitalRead(switchPin);
setMotor(speed, reverse);
}
void setMotor(int speed, boolean reverse)
{
analogWrite(enablePin, speed);
digitalWrite(in1Pin, ! reverse);
digitalWrite(in2Pin, reverse);
}
定義了引腳,并在“設置”功能中正常設置了它們的模式。
在循環功能中,電機速度的值為通過將鍋中的模擬讀數除以4可以找到。
因數為4,因為模擬讀數將在0到1023之間,并且模擬輸出需要在0到255之間。
如果按下按鈕,電機將正向運行,否則將反向運行。 “ reverse”變量的值僅設置為從開關引腳讀取的值。因此,如果按下按鈕,它將為False,否則將為True。
速度和反向值將傳遞給名為“ setMotor”的函數,該函數將設置驅動器芯片上的適當引腳以控制
下載:文件
復制代碼
void setMotor(int speed, boolean reverse)
{
analogWrite(enablePin, speed);
digitalWrite(in1Pin, ! reverse);
digitalWrite(in2Pin, reverse);
} void setMotor(int speed, boolean reverse)
{
analogWrite(enablePin, speed);
digitalWrite(in1Pin, ! reverse);
digitalWrite(in2Pin, reverse);
}
首先,通過對enable引腳使用AnalogWrite來設置速度。無論L293的in1和in2引腳設置為什么,L293的使能引腳都可以打開或關閉電動機。
要控制電動機的方向,in1和in2引腳必須為
如果in1為HIGH而in2為LOW,則電動機將以一種方式旋轉;如果in1為LOW而in2為HIGH,則電動機將以相反的方向旋轉。/p》
‘!’命令的意思是“不是”。因此,in1的第一個digitalWrite命令將其設置為與“ reverse”的值相反的值,因此,如果reverse為HIGH則將其設置為LOW,反之亦然。
in2的第二個digitalWrite將引腳設置為“ reverse”的值。這意味著它將永遠與in1是相反的。
L293D
這是一個非常有用的芯片。它實際上可以獨立控制兩個電動機。在本課程中,我們僅使用一半的芯片,芯片右側的大多數引腳用于控制第二個電機。
第二個電動機將連接在OUT3和OUT4之間。您還需要另外三個控制引腳。
EN2已連接到Arduino上的PWM使能輸出引腳
IN3和IN4已連接到Arduino上的數字輸出。
L293D具有兩個+ Vpin(8和16)。 ‘+ Vmotor(8)引腳為電機供電,而+ V(16)則為芯片邏輯供電。我們已經將它們都連接到Arduino 5V引腳。但是,如果您使用的是功率更高的電機或更高電壓的電機,則可以使用連接到正電源的引腳8為電機提供單獨的電源,而第二個電源的接地端則連接到Arduino的接地端。/p》
其他要做的事情
您可以嘗試更改草圖以控制電動機,而無需使用電位器或開關。它可能會在向前方向上開始緩慢,然后逐漸變快,然后變慢,然后反轉,重復此模式。
責任編輯:wv
-
Arduino
+關注
關注
188文章
6483瀏覽量
189462 -
L293D
+關注
關注
4文章
50瀏覽量
20268
發布評論請先 登錄
相關推薦
評論