Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Arduino и L293D управляват два електромотора

Описание

Примерна схема за връзване на L293D към Arduino и код за контролиране посоката и скоростта на въртене на eлектромотори. Благодарности на Том Игое (Tom Igoe), който е така добър да споделя знанията си.

Интегралната схема L293D е лесен за употреба H – мост, позволяващ да се контролира посоката на въртене на електромотори. В чипа всъщност има два Н – моста, един от лявата му страна и един от дясната. L293D има следните пинове:

  • Пин 1 (1,2EN) – контролира скоростта на въртене на мотор М1 (HIGH – пълна мощност; LOW – спрял; PWM – различна скорост в зависимост от стойността подавана чрез PWM
  • Пин 2 (1А) – логически пин който участва в контролирането на посоката на въртене на мотор М1
  • Пин 3 (1Y) – свързва се към единия от терминалите на мотор М1
  • Пин 4 и 5 – свързват се към (-) GND
  • Пин 6 (2Y) – свързва се към втория от терминалите на мотор М1
  • Пин 7 (2А) – логически пин който участва в контролирането на посоката на въртене на мотор М1
  • Пин 8 (VCC2) – захранва моторите и трябва да му се подаде напрежение подходящо за използваните мотори
  • Пин 9 (3,4EN) – контролира скоростта на въртене на мотор М2 (HIGH – пълна мощност; LOW – спрял; PWM – различна скорост в зависимост от стойността подавана чрез PWM
  • Пин 10 (3А) – логически пин който участва в контролирането на посоката на въртене на мотор М2
  • Пин 11 (3Y) – свързва се към единия от терминалите на мотор М2
  • Пин 12 и 13 – свързват се към (-) GND
  • Пин 14 (4Y) – свързва се към втория от терминалите на мотор М2
  • Пин 15 (4А) – логически пин който участва в контролирането на посоката на въртене на мотор М2
  • Пин 16 (VCC1) – свързва се към 5V

Схеми и снимки

схема на чипа с описание на това кое краче с кой Arduino пин се свързва и диаграма показваща как ще се държат моторите при различните състояния на логическите пинове контролирани от Arduino.

чипа със свързано захранване (кондензаторите не са задължителни).

всички кабели свързани към чипа (бележките показват към какво се свързва всяка от жичките; тези без бележка са преходници свързани към бредборда; моторите М1 и М2 са свързани с по две жички – на тази снимка червена и черна).

моторите свързани към Arduino.

Код

/*
*** Arduino i L293D kontrolirat 2 motora ***

Nikvi prava zapazeni - Simeon Ianchev / RobotevCom 2009

*/

int motor1APin = 4; //izbor na pin za 1A (v sluchaq Arduino pin 4)
int motor2APin = 5; //izbor na pin za 2A
int motor1ENPin = 9; //izbor na pin za 1,2EN
int motor3APin = 6; //izbor na pin za 3A
int motor4APin = 7; //izbor na pin za 4A
int motor2ENPin = 10; //izbor na pin za 3,4EN

void setup() 
{

pinMode(motor1APin, OUTPUT); //zadawa che shte izpolzvame EN i A pinovete kato izhodi
pinMode(motor2APin, OUTPUT);
pinMode(motor1ENPin, OUTPUT);
pinMode(motor3APin, OUTPUT);
pinMode(motor4APin, OUTPUT);
pinMode(motor2ENPin, OUTPUT);

}

void loop() {

/* tazi chast ot koda
vyrti motorite po-byrzo v ednata posoka
*/

analogWrite(motor1ENPin, 120); //kontrolira skorostta na vyrtene (priema stojnosti ot 0 do 255)
digitalWrite(motor1APin, HIGH); //zaedno s dolniyq red kontrolira na posokata na vyrtene
digitalWrite(motor2APin, LOW);
analogWrite(motor2ENPin, 120);
digitalWrite(motor3APin, LOW);
digitalWrite(motor4APin, HIGH);
delay(3000); //zadyrja motorite vklyucheni za 3 sekundi

/*tazi chast spira vyrteneto
na motorite
*/

analogWrite(motor1ENPin, 0);
digitalWrite(motor1APin, LOW);
digitalWrite(motor2APin, LOW);
analogWrite(motor2ENPin, 0);
digitalWrite(motor3APin, LOW);
digitalWrite(motor4APin, LOW);
delay(2000); //zadyrja motorite izklyucheni za 2 sekundi

/* tazi chast ot koda
namalya skorostta na motorite i obrushta posokata im na vyrtene
*/

analogWrite(motor1ENPin, 60);
digitalWrite(motor1APin, LOW);
digitalWrite(motor2APin, HIGH);
analogWrite(motor2ENPin, 60);
digitalWrite(motor3APin, HIGH);
digitalWrite(motor4APin, LOW);
delay(3000); //zadyrja motorite vklyucheni za 3 sekundi

/*tazi chast spira vyrteneto
na motorite
*/

analogWrite(motor1ENPin, 0);
digitalWrite(motor1APin, LOW);
digitalWrite(motor2APin, LOW);
analogWrite(motor2ENPin, 0);
digitalWrite(motor3APin, LOW);
digitalWrite(motor4APin, LOW);
delay(2000); //zadyrja motorite izklyucheni za 2 sekundi

}