работа драйвера l298

froggi3
Offline
Зарегистрирован: 23.08.2016

Помогите разобраться с шилдом. Подключем джойстик. Мотор должен увеличивать скорость при отклоненни джойстика, и менять направление в зависимости от отклонения центрального положения. Но направление вращения не меняется, а скорость нарастает только правильно только в одном отклонении джойстика, в другом скорость наоборот уменьшается. 

 
int IN1 = 7; 
int IN2 = 6;
int IN3 = 5;
int IN4 = 4;
int EN1 = 9;
int EN2 = 3;
int potPin1 = 0;
void setup()
{
  pinMode (EN1, OUTPUT);
  pinMode (IN1, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (EN2, OUTPUT);
  pinMode (IN4, OUTPUT);
  pinMode (IN3, OUTPUT);
}
void loop()
 { if (potPin1 < 480){
   int sp = map(analogRead(potPin1), 479, 0, 50, 254);
   digitalWrite (IN2, HIGH);
  digitalWrite (IN1, LOW); 
  digitalWrite (IN4, HIGH);
  digitalWrite (IN3, LOW);  
   analogWrite(EN2,sp);
   analogWrite(EN1,sp);
   }
    else if(potPin1 > 550){
    int sp = map(analogRead(potPin1), 551, 1023, 50, 254);
   digitalWrite (IN1, HIGH);
  digitalWrite (IN2, LOW); 
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);  
   analogWrite(EN2,sp);
   analogWrite(EN1,sp);
   }
    else if (potPin1 > 485 && potPin1 < 545){
    digitalWrite (IN1, LOW);
 digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
    }
   }
 
Подскажите где копать?
Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

1. В условии if вы сравниваете не само значение sp, а номер входа potPin1. Он всегда у вас остается ноль.

2. Переменная sp объявлена дважды.

froggi3
Offline
Зарегистрирован: 23.08.2016

Спасибо большое за подсказку! Теперь все работает как надо.

void loop()
{
  int sp = analogRead(potPin1);
 { if (sp < 480){
   int sp = map(analogRead(potPin1), 479, 0, 50, 254);
   digitalWrite (IN2, HIGH);
  digitalWrite (IN1, LOW); 
  digitalWrite (IN4, HIGH);
  digitalWrite (IN3, LOW);  
   analogWrite(EN2,sp);
   analogWrite(EN1,sp);
   }
    else if(sp > 550){
    int sp = map(analogRead(potPin1), 551, 1023, 50, 254);
   digitalWrite (IN1, HIGH);
  digitalWrite (IN2, LOW); 
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);  
   analogWrite(EN2,sp);
   analogWrite(EN1,sp);
   }
    else if (sp > 485 && sp < 545){
    digitalWrite (IN1, LOW);
 digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
    }
   }
}
 
Есть еще вопрос, уже технического плана, на двайвер подается питание 7,8в. а на выходе , на моторы, выходит только 5в.
Arhat109-2
Offline
Зарегистрирован: 24.09.2015

"Есть еще вопрос, уже технического плана, на двайвер подается питание 7,8в. а на выходе , на моторы, выходит только 5в."

Это - нормально.

-"Вовочка, кем работает твой папа?"

-"трансформатором"

-"?!? Как это?"

-"Я не знаю, МарьВанна, но мама так говорит, что наш папа работает транформатором: 220 получает, 127 отдает а на остальные гудит".

:)

 

froggi3
Offline
Зарегистрирован: 23.08.2016

Так ведь к описанию к драйверу говорится что он может питаться напряжением до 20в. И его же ( 20в.) выдавать на нагрузку. Или я что то путаю?!
http://www.ebay.com/itm/191674305541
Вот такой драйвер.

froggi3
Offline
Зарегистрирован: 23.08.2016

Arhat109-2 пишет:

"Есть еще вопрос, уже технического плана, на двайвер подается питание 7,8в. а на выходе , на моторы, выходит только 5в."

Это - нормально.

-"Вовочка, кем работает твой папа?"

-"трансформатором"

-"?!? Как это?"

-"Я не знаю, МарьВанна, но мама так говорит, что наш папа работает транформатором: 220 получает, 127 отдает а на остальные гудит".

:)

 

Т. е.. Это потери в самой схеме такие.. И надо просто больше подавать на вход драйвера