Вопрос по микросхеме L293D (нубский)

Dimidrol
Offline
Зарегистрирован: 19.02.2016

Купил себе L293D драйвер моторов. Он будет питаться сам от 5 вольт. а для моторов будет 24 вольта. но вот пробьлема. у этой микросхемы 4 вывода земля. Я всегда принемал за землю минус источника питания. Но тут вопрос. имею два источника питания. и какого источника минус будет на землю микросхемы? Я подозреваю что землюй должен быть минус 5 вольтового источника, от которого питается микросхема. но решил уточнить.

Dimidrol
Offline
Зарегистрирован: 19.02.2016

Вот нашел схемку. Это что получается минус источника питания мотора можно соеденять с минусом ардуино? Ни каких проблем не будет?

bizzon
Offline
Зарегистрирован: 29.03.2016

Не надо принимать за массу (а тем более землю) минус источника питания. Есть немало устройств, у которых масса- плюс источника питания и к земле не имеет никакого отношения. Просто надо привыкнуть, что общий провод(масса) всегда внизу принципиальной однополярной схемы. А ещё бывает двуполярное питание..

В вашем случае соединяем массы и вперёд. Проблем не будет( кроме помех).

Dimidrol
Offline
Зарегистрирован: 19.02.2016

Мвссы я так понимаю это минуса обоих источников питания?

bizzon
Offline
Зарегистрирован: 29.03.2016

Да.

Dimidrol
Offline
Зарегистрирован: 19.02.2016

Написал скетч




int motor1_1 = 7;//первый мотор выход к микросхеме input 1
int motor1_2 = 4;//первый мотор выход к микросхеме input 2
int motor2_1 = 5;//первый мотор выход к микросхеме input 3
int motor2_2 = 6;//первый мотор выход к микросхеме input 4
int kontrol1 = 10;//даем 1 на управляющий контакт
int kontrol2 = 11;//даем 1 на управляющий контакт
int button_up = 8;//цепляю кнопку 1
int button_dawn  = 9;//кнопка 2
void setup()  
{ 
  pinMode(button_up, INPUT);//кнопку на вход
  pinMode(button_dawn, INPUT);//кнопку на вход
   pinMode(motor1_1, OUTPUT); //первый мотор на выход
  pinMode(motor1_2, OUTPUT);//первый мотор на выход
  pinMode(motor2_1, OUTPUT);// второй мотор
  pinMode(motor2_2, OUTPUT);// второй мотор
  
} 

void loop()  
{  
  int UP;
  int DAWN;
  
  UP = digitalRead(button_up);
  DAWN = digitalRead(button_dawn);

  digitalWrite(kontrol1,1);//подаем 1 на управление микросхемы первыф мотор 
  digitalWrite(kontrol2, 1);//подаем 1 на управление микросхемы второй мотор
 if(UP == 1) //проверяем нажатали первая кнопка кнопка если да то крутим двигатели в одну сторону.
 {digitalWrite(motor1_1, HIGH);
  digitalWrite(motor1_2, LOW);
  digitalWrite(motor2_1, HIGH);
  digitalWrite(motor2_2, LOW);
 }
 if(DAWN == 1); //если вторая то крутим в обратную сторону
 {digitalWrite(motor1_1, LOW);
  digitalWrite(motor1_2, HIGH);
  digitalWrite(motor2_1, LOW);
  digitalWrite(motor2_2, HIGH);
 }
}



Не работает и все тут. не пойму в чем проблема.

вот такой вот работает


int motor1_1 = 7;
int motor1_2 = 4;
int motor2_1 = 5;
int motor2_2 = 6;
int kontrol1 = 10;
int kontrol2 = 11;
int button_up = 8;
int button_dawn  = 9;
void setup()  
{ 
  pinMode(button_up, INPUT);
  pinMode(button_dawn, INPUT);
   pinMode(motor1_1, OUTPUT);
  pinMode(motor1_2, OUTPUT);
  pinMode(motor2_1, OUTPUT);
  pinMode(motor2_2, OUTPUT);
  
} 

void loop()  
{  
  digitalWrite(kontrol1,1);
  digitalWrite(kontrol2, 1);
 digitalWrite(motor1_1,HIGH);
  digitalWrite(motor1_2,LOW);
  digitalWrite(motor2_1,HIGH);
  digitalWrite(motor2_2,LOW);
  
  delay(1000);
   digitalWrite(motor1_1,LOW);
  digitalWrite(motor1_2,HIGH);
  digitalWrite(motor2_1,LOW);
  digitalWrite(motor2_2,HIGH);
  delay(1000);
}

Но по суте тоже самое без оператора if.

проверял if оператор. На мой взгляд все нормально. но почему он не меняет напряжение на контактах я не пойму.

При включении ардуино. Моторы начинают сразу крутится. Будто уже установлено направление. в функции  void setup()  выставлял все пины на LOW двигатели не крутились. и при нажатиях кнопок тоже. принемается первым значение первого блока if

Dimidrol
Offline
Зарегистрирован: 19.02.2016
Dimidrol
Offline
Зарегистрирован: 19.02.2016

Поставил подтягивающие резисторы на кнопки. 

Делаю замеры на микросхеме на контактах input.

Картина такая. при запуске моторы крутятся. не важно жал я кнопки или нет. на контактах input1 и input3 напряжения нет. на контактах input2 и input4 напряжение 5 вольт. 

Если нажимаю кнопку которая должна подавать сигнал крутить двигатели в том направвлении в котором они сейчас крутятся. То напряжение не меняется. как и должно быть. А вот если нажать кнопку крутить в обратном направлении то напряжение меняется. на контактах input1 и input3 1.60 вольта а на input2 и input4 падает с 5 до 3.30 вольт. странно. должно было упасть до нуля. ни чего не пойму.

Navigator
Navigator аватар
Offline
Зарегистрирован: 26.01.2016

Предлагаю выводит Ваши переменные UP и  DAWN в монитор порта. Переменные UP и DAWN объявите не в loop-е, а в начале скетча вместе с остальными переменными.

Добавьте в setup-е          Serial.begin(9600);

В loop-е после 20-й строки добавьте Serial.print("UP=");   Serial.print(UP); Serial.print(";   DAWN="); Serial.println(DAWN);

И тогда проконтролируете изменение своих переменных при нажатии кнопок. Проверьте правильность схемы, похоже, что одна из кнопок подтянута резистором не к минусу, а к плюсу.