Arduino web tutorijali

L293 i SN754410

Integrirani krugovi L293 i SN754410 su puno-upravljivi dvostruki H-mostovi. Izvodi su im identični pa se stoga oba spajaju isto.

 

Shema spoja:

L293 i SN754410

 

Spajanje na eksperimentalnoj pločici:

 

Spajanje

 

Ovdje dakle imamo dobru podlogu za pogon malog mobilnog robota. Napajanje motora je vanjsko, na  prethodnoj slici prikazano  DC konektorom. Obično se napajanje motora i fizički odvaja od napajanja mikrokontrolera (upravljačke elektronike) radi smetnji koje motori kao veliki potrošači mogu uzrokovati u radu sklopa. Zajednički spoj imaju jedino izvodi mase (GND).

 

Tablica logičkih stanja i učinak na motor

 

Stanje IN1 (IN3)

Stanje IN2 (IN4)

Motor

HIGH LOW Vrti se u jednom smjeru
LOW HIGH Vrti se u drugom smjeru
HIGH HIGH Kočenje (aktivno kočenje - brake
LOW LOW Zaustavljanje (pasivno kočenje - coast)

 

Pogledajmo kod za upravljnje motorima:

 

int PWM1 = 9;
int IN1 = 10;
int IN2 = 8;
int PWM2 = 3;
int IN3 = 2;
int IN4 = 4;
boolean smjer1, smjer2, smjer3, smjer4;

void setup()
{
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(PWM1, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(PWM2, OUTPUT);
}

void loop()
{
  vozi (200,200, 3000); // vrti motore u jednom smjeru 3 sekunde
  vozi (0, 0, 2000); // stajanje 2 sekunde
  vozi (-100,-100, 3000); // vrti motore u drugom smjeru 3 sekunde
  vozi (0, 0, 2000); // stajanje 2 sekunde
  vozi (150,-150, 3000); // vrti svaki motor u različitom smjeru 3 sekunde
  vozi (0, 0, 2000); // stajanje 2 sekunde
  vozi (-150,150, 3000); // vrti svaki motor u različitom smjeru 3 sekunde - suprotno od prethodnog
  vozi (0, 0, 2000); // stajanje 2 sekunde
}

void vozi (int motor1, int motor2, int pauza)
{
  if (motor1 > 0) {
    smjer1 = true;
    smjer2 = ! smjer1;
    }
  if (motor1 < 0) {
    smjer1 = false;
    smjer2 = ! smjer1;
    }
  if (motor1 == 0) {
    smjer1 = false;
    smjer2 = false;
    }
  if (motor2 > 0) {
    smjer3 = true;
    smjer4 = ! smjer3;
    }
  if (motor2 < 0) {
    smjer3 = false;
    smjer4 = ! smjer3;
    }
  if (motor2 == 0) {
    smjer3 = false;
    smjer4 = false;
    }

  digitalWrite(IN1, smjer1);
  digitalWrite(IN2, smjer2);
  digitalWrite(IN3, smjer3);
  digitalWrite(IN4, smjer4);
  analogWrite(PWM1, abs(motor1));
  analogWrite(PWM2, abs(motor2));
  delay(pauza);
}