Форум по Роботика
Полезно => Практика => Темата е започната от: Simeon в Април 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.
(http://www.robotev.com/images/l293d_shema.jpg)
снимка как изглежда чипа със свързано захранване (кондензаторите не са задължителни):
(http://www.robotev.com/images/l293d_zahranvane.jpg)
Снимка с всички кабели свързани към чипа (бележките показват към какво се свързва всяка от жичките; тези без бележка са преходници свързани към бредборда (вж горната снимка); моторите М1 и М2 са свързани с по две жички – на тази снимка червена и черна):
(http://www.robotev.com/images/l293d_svyrzvane.jpg)
Снимка със свързани мотори и Arduino.
(http://www.robotev.com/images/l293d_vsichko.jpg)
-
ето го и примерния код за Ардуино
/*
*** 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