KKM: DC motor driver dual H-bridge

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

Uvod

U prošlom tutorijalu susreli smo se sa stepper motorima te smo objasnili princip njihovog rada. Zasigurno ste primijetili da motor nismo direktno spojili s Croduinom nego je spojen preko drivera. Vjerojatno se pitate zašto uopće moramo koristiti driver za motor? Zašto se ne mogu spojiti sami izlazi motora na Croduino pinove i u programskom kodu mijenjati smjer i brzinu okretaja motora? Odgovor je zbog ograničene izlazne snage Croduina. Većina motora zahtjeva veću snagu od snage koju Croduino izlazi mogu osigurati. Kako bi se zaštitio Croduino i osigurao pouzdan rad motora, koristi se vanjsko napajanje za motor. Driveri su elektronički sklopovi koji objedinjuju sve potrebne komponente za ispravan rad motora u jedan sklop. Pomoću drivera moguće je kontrolirati brzinu i smjer okretaja motora. Jedan od njih je i L298N driver kojeg ćemo detaljnije objasniti u nastavku tutorijala.

 
Karakteristike:
• Dual Motor Controller
• Max. snaga: 25W
• Napon: 5 - 35V (za motor), 5V za logiku
• Struja: 2A
• Dimenzije: 43 x 43 x 23 mm

Kako radi?

L298N driver za motor koristi takozvani H-most (engl. H-bridge) integrirani čip. H-most je strujni krug koji se sastoji od 4 prekidača spojenih s motorom na način prikazan na slici ispod. Ako S2 i S3 prekidače zatvorimo, a S1 i S4 prekidače otvorimo, struja će teći u određenom smjeru. Ako zamijenimo stanja prekidača tako da su S2 i S3 otvoreni a S1 i S4 zatvoreni, struja će kroz motor proteći u suprotnom smjeru. Uz to, ne smijemo zatvoriti sva četiri prekidača odjednom ili oba prekidača na jednoj strani H-mosta (npr. S1 i S2) jer time izazivamo kratki spoj.

Tablica ispod prikazuje sve moguće kombinacije stanja prekidača i njihov ishod.
 

Pomoću H-most-a vrlo je jednostavno zamijeniti polaritet na trošilu. Najčešće se koristi za zamjenu smjera vrtnje DC motora. H-most se koristi i u raznim drugim aplikacijama poput DC/AC, AC/AC ili DC/DC konvertera.
L298N driver je namijenjen za motore no može se koristiti i za druge uređaje koji za određenu potrebu zahtijevaju zamjenu polariteta na svojim ulaznim krajevima. Uz mogućnost zamjene polariteta, L298N driver ima još mogućnost kontrole brzine okretaja motora koristeći PWM (eng. Puls-Width Modulation) signal. Treba još napomenuti da L298N driver u sebi sadrži čak dva izlaza kojim se može kontrolirati rad dva motora.

Kako povezati s Croduinom?

L298N driver sadrži nekoliko priključnica koje su navedene i objašnjene ispod.
 
OUT1 – +/- Izlaz za motor A.
OUT2 - +/- Izlaz za motor A.
OUT3 - +/- Izlaz za motor B.
OUT4 – +/- Izlaz za motor B.
CON5 – Služi za uključivanje 5V regulatora napona. Uključuje se postavljanjem jumpera (ako je ulazni napon manji od 12V).
EnA – Služi za kontrolu PWM-a za motor A (potrebno staviti jumper ako se želi kontrolirati brzina okretaja motora).
EnB - Služi za kontrolu PWM-a za motor B (potrebno staviti jumper ako se želi kontrolirati brzina okretaja motora).
In1 - Služi za kontrolu smjera okretaja motora A.
In2 - Služi za kontrolu smjera okretaja motora A.
In3 - Služi za kontrolu smjera okretaja motora B.
In4v - Služi za kontrolu smjera okretaja motora B.
+5V –Ulaz u koji ide vanjski izvor napajanja od 5V (ako jumper nije postavljen na CON5). Izlaz koji daje 5V (ako je stavljen jumper na CON5).
GND – Ground. Potrebno spojiti sve minuse strujnog kruga s ovim GND.
+12V – Ulaz vanjskog izvora napajanja za motore. Potrebno ukloniti jumper na CON5 ako je napon veći od 12V. Max 35V DC.

Arduino kod

Za upravljanje motorima pomoću L298N drivera nije potrebno koristiti nikakvu biblioteku. Samim uključivanjem/isključivanjem izlaza pomoću digitalWrite() funkcije pokrećemo motore. Za brzinu okretaja motora koristi se analogWrite() funkcija.

// ovaj program okrece motore 2 sec u jednom smjeru nakon toga 2 sec u drugom smjeru
// definiranje pinova za prvi motor
int enA = 10;
int in1 = 9;
int in2 = 8;
// definiranje pinova za drugi motor
int enB = 5;
int in3 = 7;
int in4 = 6;
void setup()
{
// Postavi sve spojene pinove kao izlaze
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop()
{
// ukljuci prvi motor
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// postavi brzinu okretaja prvog motora 200 (max 255)
analogWrite(enA, 200);
// ukljuci drugi motor
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// postavi brzinu okretaja drugog motora 200 (max 255)
analogWrite(enB, 200);
delay(2000);
// Zamjeni smjerove okretaja motora
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// iskljuci oba motora
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(2000);
}
Leave a Reply