Автор Тема: L293D + Arduino контролират мотор  (Прочетена 15468 пъти)

Simeon

  • Вече знае какво е робот!
  • *****
  • Публикации: 73
    • Профил
    • http://www.robotev.com
L293D + Arduino контролират мотор
« -: Април 20, 2009, 12:22:34 pm »
Това е примерна схема за връзване на L293D към Arduino и код за контролиране посоката и скоростта на въртене на електромотори. Благодарности на Том Игое (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.

Симеон Янчев, София
www.robotev.com

Simeon

  • Вече знае какво е робот!
  • *****
  • Публикации: 73
    • Профил
    • http://www.robotev.com
L293 + Arduino контролират мотори - кода
« Отговор #1 -: Април 20, 2009, 12:24:53 pm »
ето го и примерния код за Ардуино


/*
     
        ***  Arduino i L293D kontrolirat 2 motora   ***
   
   Nikvi prava zapazeni - Simeon Yanchev / 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
 
 }


Видео на кода в действие може да видите на http://www.youtube.com/watch?v=6A7wpHQgXE8
Симеон Янчев, София
www.robotev.com