Integrirani krugovi L293 i SN754410 su puno-upravljivi dvostruki H-mostovi. Izvodi su im identični pa se stoga oba spajaju isto.
Shema spoja:
Spajanje na eksperimentalnoj pločici:
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); }