[操作疑難] ARDIUNO DC motor 問題

我依加做緊個arduino的project,我用H bridge L298N Motor Controller Module  去控制兩個DC MOTOR , 但我發現我設定同一個SPPED 如 morto1(130) & motor2(150), 每次RESET (RELOAD) 後的結果都不同, 有時微微向左, 有時向左好多,有時會變直線,各位師兄知唔知係咩問題,有冇解決方法?

回覆 1# panpan1997

抱歉打攪問一下, 一般的馬達真的能發到電嗎?

TOP

回覆  panpan1997

抱歉打攪問一下, 一般的馬達真的能發到電嗎?
九尾狐 發表於 2017-3-11 21:53


以前細個玩過,兩隻四驅車摩打用條軟喉連住,一邊摩打俾電轉,另一邊摩打駁隻燈仔,著左

TOP

回覆  panpan1997

抱歉打攪問一下, 一般的馬達真的能發到電嗎?
九尾狐 發表於 2017-3-11 21:53


yes

TOP

我依加做緊個arduino的project,我用H bridge L298N Motor Controller Module  去控制兩個DC MOTOR , 但我發 ...
panpan1997 發表於 2017-3-11 21:34



   list your code

TOP

回覆 5# Offer

int enA = 10;
int INA = 9;
int INB = 8;
// motor two
int enB = 5;
int INC = 7;
int IND = 6;

void setup() {
  // put your setup code here, to run once:
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(INA, OUTPUT);
pinMode(INB, OUTPUT);
pinMode(INC, OUTPUT);
pinMode(IND, OUTPUT);
}

  void motorRightforward(int rate){
  digitalWrite(INA, HIGH);
  digitalWrite(INB, LOW);
  analogWrite(enA, rate);
  }

  void motorRightbackward(int rate){
  digitalWrite(INA, LOW);
  digitalWrite(INB, HIGH);
  analogWrite(enA, rate);
  }
  
  void motorRightrelease(){
  digitalWrite(INA, LOW);
  digitalWrite(INB, LOW);
  }
  
  void motorLeftforward(int rate){
  digitalWrite(INC, HIGH);
  digitalWrite(IND, LOW);
  analogWrite(enB, rate);
  }

  void motorLeftbackward(int rate){
  digitalWrite(INC, LOW);
  digitalWrite(IND, HIGH);
  analogWrite(enB, rate);
  }

  void motorLeftrelease(){
  digitalWrite(INC, LOW);
  digitalWrite(IND, LOW);
  }

void loop() {
  // put your main code here, to run repeatedly:
  motorLeftbackward(130);
  motorRightbackward(150);

}

TOP

有無試下調轉個摩打,睇下係咪個摩打體質唔同。

TOP

You need to add encoder. Otherwise, not precise

TOP

回覆 6# panpan1997


    每個digital write後
加一句delay(5);

TOP

回覆 6# panpan1997

根據Arduino reference和 L298N既資料,你段code有幾個問題:
1) 避開用pin 5和6來做pwm outputs,因為timer 0同時用來做millis() 和delay()。會令到AnalogWrite(pin,0)既時候,唔會完全turn off。最好改用在timer2既pin3和11。

2) digitalWrite和analogWrite call一次就足夠,唔需要在loop()入面不斷call 。因此,motorLeftbackward(130)和motorRightbackward(150)放在setup()的最後就可以。

3) 在motorRightrelease()入面,要加入analogWrite(enA,0)。在motorLeftrelease()入面,要加入analogWrite(enB,0)。

Ardiuno reference - AnalogWrite

TOP