Osnovni priključci integriranog kruga L298 slični onima na L293:
- INPUT 1, INPUT2, INPUT3, INPUT4 - TTL ulazi H mosta
- OUT1, OUT2, OUT3 i OUT4 - priključci za motore
- ENABLE A, ENABLE B - pinovi za pulsno širinsku modulaciju
- GND - negativni priključak (masa)
- Vss - Napajanje logike (5V)
- Vs - Napajanje motora (7-35V)
Jedinu razliku u odnosu na L293 imamo u dodatna dva priključka:
- SENSE A,SENSE B - priključci senzorskog otpornika na kojem se mjeri struja
Shema tipičnog upravljačkog modula baziranog na čipu L298:
Tablica stanja:
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) |
Gotovi moduli - povezivanje i programiranje
Izgled tipičnog modula i njegovo povezivanje možete vidjeti na slijedećoj slici:
Kod za upravljanje sklopom:
int EN1 = 10; int IN1 = 9; int IN2 = 8; int IN3 = 7; int IN4 = 6; int EN2 = 5; boolean smjer1, smjer2, smjer3, smjer4; void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(EN1, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(EN2, OUTPUT); } void loop() { motori (200,200, 3000); // vrti motore u jednom smjeru 3 sekunde motori (0, 0, 2000); // stajanje 2 sekunde motori (-100,-100, 3000); // vrti motore u drugom smjeru 3 sekunde motori (0, 0, 2000); // stajanje 2 sekunde motori (150,-150, 3000); // vrti svaki motor u različitom smjeru 3 sekunde motori (0, 0, 2000); // stajanje 2 sekunde motori (-150,150, 3000); // vrti svaki motor u različitom smjeru 3 sekunde motori (0, 0, 2000); // stajanje 2 sekunde } void motori (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(EN1, abs(motor1)); analogWrite(EN2, abs(motor2)); delay(pauza); }
ARDUMOTO shield - povezivanje i programiranje
Mada na tržištu ima dosta kopija, Ardumoto je izvorno proizvod Sparkfun Electronics Inc. <Ardumoto na Sparkfun-u>
Ovaj modul je baziran na čipu L298P (SMD inačica) i pločica je dimenzijama i rasporedom elemenata kompatibilna s Arduino UNO mikrokontrolerom.
Ono što dodatno razlikuje ovaj modul je građa gdje je na drugi INPUT ulaz u paru dodan logički inverter tako da je samo jedan pin dovoljan za selekciju smjera vrtnje motora, što po motoru smanjuje broj potrebnih pinova na 2 (1 digitalni za smjer + 1 PWM pin) umjesto 3 kod prethodno obrađenih modula.
Izgled i spajanje Ardumoto shielda
Na slici vidimo da su digitalni pinovi broj 3, 11, 12 i 13 rezervirani za upravljanje što znači da te pinove u našem sklopu ne možemo koristiti za druge namjene.
Kod za upraljanje Ardumoto shieldom:
int PWMA = 3; int DIRA = 12; int PWMB = 11; int DIRB = 13; boolean smjer1, smjer2; void setup() { pinMode(PWMA, OUTPUT); pinMode(DIRA, OUTPUT); pinMode(PWMB, OUTPUT); pinMode(DIRB, OUTPUT); } void loop() { motori (200,200, 3000); // vrti motore u jednom smjeru 3 sekunde motori (0, 0, 2000); // stajanje 2 sekunde motori (-100,-100, 3000); // vrti motore u drugom smjeru 3 sekunde motori (0, 0, 2000); // stajanje 2 sekunde motori (150,-150, 3000); // vrti svaki motor u različitom smjeru 3 sekunde motori (0, 0, 2000); // stajanje 2 sekunde motori (-150,150, 3000); // vrti svaki motor u različitom smjeru 3 sekunde motori (0, 0, 2000); // stajanje 2 sekunde } void motori (int motor1, int motor2, int pauza) { if (motor1 > 0) { smjer1 = true; } if (motor1 < 0) { smjer1 = false; } if (motor2 > 0) { smjer2 = true; } if (motor2 < 0) { smjer2 = false; } digitalWrite(DIRA, smjer1); digitalWrite(DIRB, smjer2); analogWrite(PWMA, abs(motor1)); analogWrite(PWMB, abs(motor2)); delay(pauza); }