步驟1:了解L298模塊連接
首先,我們將遍歷所有連接,然后說(shuō)明如何控制直流電動(dòng)機(jī),然后是步進(jìn)電動(dòng)機(jī)。此時(shí),請(qǐng)檢查L(zhǎng)298N H橋模塊上的連接。
考慮圖像–將數(shù)字與圖像下方的列表匹配:
DC電動(dòng)機(jī)1“ +”或步進(jìn)電動(dòng)機(jī)A +
DC電動(dòng)機(jī)1“-”或步進(jìn)電動(dòng)機(jī)A-
12V跳線–如果使用的電源電壓大于12V DC,則將其移除。這樣可以為板載5V穩(wěn)壓器供電。
在此處連接電動(dòng)機(jī)電源電壓,最大35V DC。如果》 12V DC
GND
如果有12V跳線,則移除5V輸出,非常適合為Arduino(
直流電動(dòng)機(jī)1啟用跳線。使用步進(jìn)電機(jī)時(shí),將其保留在原位。連接到用于直流電動(dòng)機(jī)速度控制的PWM輸出。
IN1
IN2
IN3
IN4
直流電動(dòng)機(jī)2啟用跳線。使用步進(jìn)電機(jī)時(shí),將其保留在原位。連接到用于直流電動(dòng)機(jī)速度控制的PWM輸出
直流電動(dòng)機(jī)2“ +”或步進(jìn)電動(dòng)機(jī)B +
直流電動(dòng)機(jī)2 “-”或步進(jìn)電動(dòng)機(jī)B-
步驟2:控制直流電動(dòng)機(jī)
到使用L298N H橋模塊控制一兩個(gè)直流電動(dòng)機(jī)非常容易。首先將每個(gè)電動(dòng)機(jī)連接到L298N模塊上的A和B連接。
如果您為機(jī)器人(例如)使用兩個(gè)電機(jī),請(qǐng)確保兩個(gè)輸入的電機(jī)極性相同。否則,當(dāng)您同時(shí)將兩個(gè)電動(dòng)機(jī)都設(shè)置為正轉(zhuǎn)而將其設(shè)置為倒退時(shí),可能需要交換它們!
下一步,連接電源-將正極連接至模塊上的引腳4,將負(fù)極/GND連接至引腳5。如果您提供的電壓最高為12V,則可以保留12V跳線(上圖中的點(diǎn)3),并且模塊上的引腳6可以提供5V電壓。
可以將其饋送到Arduino的5V引腳,以從電動(dòng)機(jī)的電源為其供電。別忘了將Arduino GND連接到模塊上的引腳5,以完成電路?,F(xiàn)在,您將在Arduino上需要六個(gè)數(shù)字輸出引腳,其中兩個(gè)需要是PWM(脈沖寬度調(diào)制)引腳。
PWM引腳在引腳編號(hào)旁邊由波浪號(hào)(?)表示,例如在Arduino Uno的數(shù)字引腳圖像中。
最后,將Arduino數(shù)字輸出引腳連接到驅(qū)動(dòng)程序模塊。在我們的示例中,我們有兩個(gè)直流電動(dòng)機(jī),因此數(shù)字引腳D9,D8,D7和D6將分別連接到引腳IN1,IN2,IN3和IN4。然后將D10連接到模塊插針7(先卸下跳線),然后將D5連接到模塊插針12(同樣要卸下跳線)。
通過(guò)向驅(qū)動(dòng)器發(fā)送HIGH或LOW信號(hào)來(lái)控制電動(dòng)機(jī)的方向每個(gè)馬達(dá)(或通道)。例如,對(duì)于電動(dòng)機(jī)一,從IN1到HIGH的高電平和向IN2發(fā)出LOW的低電平將使它在一個(gè)方向上旋轉(zhuǎn),而到HIGH和LOW的低電平將使它在另一個(gè)方向上旋轉(zhuǎn)。
但是,直到將HIGH設(shè)置為啟用引腳(電機(jī)1為7,電機(jī)2為12)后,電機(jī)才會(huì)轉(zhuǎn)動(dòng)。并且它們可以通過(guò)低電平連接到同一引腳來(lái)關(guān)閉。但是,如果需要控制電動(dòng)機(jī)的速度,則可以通過(guò)來(lái)自連接到使能引腳的數(shù)字引腳的PWM信號(hào)來(lái)解決這一問(wèn)題。
這就是我們對(duì)直流電動(dòng)機(jī)演示草圖所做的工作。如上所述,連接了兩個(gè)直流電動(dòng)機(jī)和一個(gè)Arduino Uno,以及一個(gè)外部電源。然后輸入并上傳以下草圖:
// connect motor controller pins to Arduino digital pins
// motor one
int enA = 10;
int in1 = 9;
int in2 = 8;
// motor two
int enB = 5;
int in3 = 7;
int in4 = 6;
void setup()
{
// set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void demoOne()
{
// this function will run the motors in both directions at a fixed speed
// turn on motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enA, 200);
// turn on motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enB, 200);
delay(2000);
// now change motor directions
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void demoTwo()
{
// this function will run the motors across the range of possible speeds
// note that maximum speed is determined by the motor itself and the operating voltage
// the PWM values sent by analogWrite() are fractions of the maximum speed possible
// by your hardware
// turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// accelerate from zero to maximum speed
for (int i = 0; i 《 256; i++)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// decelerate from maximum speed to zero
for (int i = 255; i 》= 0; --i)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop()
{
demoOne();
delay(1000);
demoTwo();
delay(1000);
}
那么該草圖中發(fā)生了什么?在函數(shù)demoOne()中,我們打開(kāi)電動(dòng)機(jī)并以200的PWM值運(yùn)行它們。這不是速度值,而是一次施加200/255的時(shí)間量的功率。
然后片刻之后,電動(dòng)機(jī)反向運(yùn)行(請(qǐng)參閱如何更改digitalWrite()函數(shù)中的HIGH和LOW?)。為了了解您的硬件可能的速度范圍,我們?cè)诤瘮?shù)demoTwo()中遍歷了整個(gè)PWM范圍,這將打開(kāi)電動(dòng)機(jī),并且它們通過(guò)零至255的PWM值運(yùn)行,并通過(guò)兩個(gè)for循環(huán)返回零。 。
最后,這是在此頁(yè)面的視頻中進(jìn)行的演示–使用我們的破舊的坦克底盤和兩個(gè)直流電動(dòng)機(jī)。
第3步:使用Arduino控制步進(jìn)電動(dòng)機(jī)和L298N
步進(jìn)電機(jī)可能看起來(lái)很復(fù)雜,但事實(shí)并非如此。在此示例中,我們控制一個(gè)典型的NEMA-17步進(jìn)電機(jī),該電機(jī)具有四根電線,如該步驟中的圖像所示。
每轉(zhuǎn)200步,并且可以60 RPM的速度運(yùn)行。如果您還沒(méi)有電動(dòng)機(jī)的步進(jìn)和速度值,請(qǐng)立即查找,并在草圖中使用它。
成功進(jìn)行步進(jìn)電動(dòng)機(jī)控制的關(guān)鍵是識(shí)別電線-即一個(gè)是哪個(gè)。您將需要確定A +,A-,B +和B-線。在我們的示例電動(dòng)機(jī)中,它們是紅色,綠色,黃色和藍(lán)色。現(xiàn)在,讓我們完成接線。
將來(lái)自步進(jìn)電機(jī)的A +,A-,B +和B-線分別連接到模塊連接1、2、13和14。將L298N模塊隨附的跳線放置在模塊點(diǎn)7和12上的線對(duì)上。然后根據(jù)需要將電源連接到點(diǎn)4(正)和點(diǎn)5(負(fù)/GND)。
再次,如果您的步進(jìn)電機(jī)的電源低于12V,則將跳線安裝到模塊的第3點(diǎn),為您的Arduino提供整潔的5V電源。接下來(lái),將L298N模塊引腳IN1,IN2,IN3和IN4分別連接到Arduino數(shù)字引腳D8,D9,D10和D11。
最后,如果從模塊中獲取5V電壓,則將Arduino GND連接至模塊上的點(diǎn)5,將Arduino 5V連接至點(diǎn)6。借助Arduino IDE隨附的Stepper Arduino庫(kù)作為標(biāo)準(zhǔn),從草圖控制步進(jìn)電機(jī)非常簡(jiǎn)單。
要演示您的電動(dòng)機(jī),只需加載Stepper庫(kù)中隨附的stepper_oneRevolution草圖。要找到它,請(qǐng)?jiān)贏rduino IDE中單擊“文件”》“示例”》“步進(jìn)器”菜單。
最后,檢查草圖中
const int stepsPerRevolution = 200;的值并將200更改為步進(jìn)電機(jī)的每轉(zhuǎn)步數(shù),以及在以下行中預(yù)設(shè)為60 RPM的速度:myStepper.setSpeed(60);
現(xiàn)在,您可以保存和上傳草圖,這會(huì)將步進(jìn)電機(jī)發(fā)送大約一轉(zhuǎn),然后再回來(lái)。這可以通過(guò)功能
myStepper.step(stepsPerRevolution); // for clockwise
myStepper.step(-stepsPerRevolution); // for anti-clockwise
實(shí)現(xiàn)。最后,在此步驟的視頻中快速展示了我們的測(cè)試硬件。
責(zé)任編輯:wv
-
步進(jìn)電機(jī)
+關(guān)注
關(guān)注
151文章
3115瀏覽量
147645 -
L298N
+關(guān)注
關(guān)注
21文章
224瀏覽量
78727 -
Arduino
+關(guān)注
關(guān)注
188文章
6473瀏覽量
187423
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論