Arduino UNO R3 與 L298N馬達驅動板的配合是蠻多人使用的方式,一開始我也是照網路上大家的接法但是馬達就是不動作,後來又爬文爬好久才知道自己的錯誤點(就是沒把L298N與Arduino 板用GRD串接起來)因此怎麼測試馬達就是不動作。
另外要注意的一點就是你用L298N接2個DC馬達,其中ENA或ENB接在D9、D10腳位控制PWM輸出時,如果又用上Servo時會發現D9、D10失效
我之前組裝尋跡自走車時用L298N控制2顆DC馬達可以走得穩穩的,後來加上一顆SG90 Servo9G腳位接在D12時其中一顆DC馬達ENA就會發生不動作,原以為是電壓不足就外接電源但ENA依然不動作,上網查資料才知道當使用Servo.h函式庫時D9 與 D10 腳位的 PWM 功能就會被停用,所以ENA PWM失效解決辦法就是ENA PWM不要接D9或 D10
Servo伺服器雖然使用了 PWM 訊號來控制馬達轉動,不過,這不表示要使用 Arduino 的 PWM 腳位,只不過根據 Servo library 的說明,除了 Arduino Mega 之外,如果使用了 Arduino 的 Servo 程式庫,D9 與 D10 腳位的 PWM 功能就會被停用。(網路資源) (網路資源)
原文如下
The Servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins. On the Mega, up to 12 servos can be used without interfering with PWM functionality; use of 12 to 23 motors will disable PWM on pins 11 and 12.
在Arduino板子中的第3、5、6、9、10、11腳可做PWM輸出,其頻率大都為490Hz,而在Uno板子,第5、6腳的頻率約980Hz
L298N使用方式
網路上另一篇文章
這篇就是解決問題的文章
/*
首先來看電源的接法,電源的接法可分成三種,第一種是只提供一組外部電源+12V。
將+12V電源的正負分別接到+12V與GND這兩個插座,同時將+12V上方的Jumper短路,
此時+12V會連接到7805,然後降壓成5V,提供給板子上的IC使用。不需要將5V接到Arduino的板子取得5V電源。
第二種接法同第一種接法,但將5V接到Arduino板子的5V,提供5V給Arduino板,所以Arduino板不需要另外再接5V電源來供電。
第三種接法則是將+12V上方的Jumper拔起來,不透過7805來產生5V,
但必須將+5V的插座接到Arduino的5V,也就是從Arduino提供5V給L298N使用。
以上三種接法,不論哪一種接法,一定要將GND插座與Arduino的GND相連,如此`才有共同的零電壓準位。
*/
/*
int value;
int dir;
void setup() {
pinMode(3, OUTPUT); //接到ENA
pinMode(4, OUTPUT); //接到N1
pinMode(5, OUTPUT); //接到N2
digitalWrite(4, HIGH); //設定馬達正轉
digitalWrite(5, LOW);
value= 255; //PWM輸出值
dir = -1; //value值的遞增或遞減
}
void loop() {
value= value+ dir;
if (value< 80) //當value值小於80時,馬達不會轉,所以dir改成遞增(如果使用3V馬達 上下限值不能大於50~150, 5V 80~255)
dir = 1;
else if (value>= 255) //當value值為最大255時,dir改成遞減
dir = -1;
analogWrite(3, value);
delay(200);
}
*/
程式碼如下:
//也可以用 Analog A0 ~ A5
//Digital PWM 3、5、6、9、10、11
const int motorIn1=5;
const int motorIn2=6;
const int motorIn3=9;
const int motorIn4=10;
void setup() {
pinMode(motorIn1, OUTPUT); //接到N5
pinMode(motorIn2, OUTPUT); //接到N6
pinMode(motorIn3, OUTPUT); //接到N9
pinMode(motorIn4, OUTPUT); //接到N10
}
void loop() {
//正轉
for(int i=150;i<255 i="" p=""> analogWrite(motorIn1,i);
analogWrite(motorIn2,0);
analogWrite(motorIn3,i);
analogWrite(motorIn4,0);
delay(500);
}
analogWrite(motorIn1,0);
analogWrite(motorIn2,0);
analogWrite(motorIn3,0);
analogWrite(motorIn4,0);
delay(2000);
//反轉
for(int i=150;i<255 i="" p=""> analogWrite(motorIn1,0);
analogWrite(motorIn2,i);
analogWrite(motorIn3,0);
analogWrite(motorIn4,i);
delay(500);
}
analogWrite(motorIn1,0);
analogWrite(motorIn2,0);
analogWrite(motorIn3,0);
analogWrite(motorIn4,0);
delay(2000);
}
255>255>
沒有留言:
張貼留言