DC motor vezérlés Arduinoval - L298N-PWM- H-híd

17 . Projekt  -- DC motor vezérlés Arduinoval - L298N-PWM- H-híd -- V1.0

 by Roboworld Hobbielektronika


Rövid leírás:
Ebben a rövid projektben bemutatjuk neked hogyan tudsz vezérelni, irányítani a DC motorokat Arduino segítségével. Mindezek előtt egy kis elmélettel fogjuk kezdeni, hogy elsajátítsátok és megértsétek, hogyan is működik a DC motor. A projekt során készítünk két példát is egy L298N típusú motorvezérlővel.

Áttekintés
Egy DC motor sebességét/fordulatszámát egyszerűen szabályozhatjuk úgy, hogy a bemenetén változtatjuk a bemeneti feszültséget, valamint PWM jel segítségével. De mi is az a PWM jel?

PWM DC motor vezérlés
A PWM (Pulse Width Modulation ) vagy másképp nevezve impulzus szélesség moduláció olyan technika, amely lehetővé teszi számunkra, hogy az elektromos eszközhöz tartozó feszültség átlagértékét gyors sebességgel bekapcsolva és kikapcsolva állítsuk be. Az átlagos feszültség függ a működési ciklustól (Duty Cycle), vagy attól az időtartamtól, ameddig a jel be van kapcsolva, szemben a jel kikapcsolásával egy periódus alatt.


Tehát a motor méretétől függően egyszerűen csatlakoztathatjuk az Arduino PWM kimenetét egy tranzisztor bázisára vagy egy MOSFET gate lábára ezzel elérve azt, hogy a kapcsolás gyorsan tudjon lefutni, valamint, hogy az alacsony teljesítményű Arduino PWM jel a tranzisztor vagy MOSFET kapuján keresztül be és ki kapcsolja a nagy teljesítményű motor hajtását.

H-hidas DC motor vezérlés

Másrészről a forgásirány szabályozásához csak a motoron át vezetett áram irányát kell megváltoztatnunk, és ennek leggyakoribb módja a H-híd használata. A H-Bridge-áramkör négy kapcsolóelemet, tranzisztort vagy MOSFET-et tartalmaz. Ha két külön kapcsolót aktiválunk egyszerre, megváltoztathatjuk az áram irányát, ezáltal megváltoztathatjuk a motor forgási irányát is.


Tehát ha ezt a két metódust (PWM, H-híd) kombinálni tudjuk, akkor teljes uralmunk lesz a DC motor felett. Számos DC motor vezérlő van, amelyek rendelkeznek ezen képességekkel mint például az L298N típusú motorvezérlő.

L298N motorvezérlő
Az L298N egy dual H-hidas motorvezérlő, amely lehetővé tesz 2 db DC motor vezérlését( sebesség, forgásirány) egy időben. A vezérlő képes a DC motorokat 5V -35V feszültségig kezelni 2A-es csúcsáram mellett.
http://hobbielektronikabolt.hu/spd/MOD003/H-hidas-leptetomotor-vezerlo-board-Arduino-hoz

Nézzük is meg közelebbről a pin kivezetéseket az L298N típusú motorvezérlőnek. A modul két csavaros sorkapoccsal rendelkezik, amelyek a két motor (Motor A, Motor B) vezérléséhez szolgál. A további 3-as sorkapocs pedig a GND a VCC és egy 5v-os pin amely lehet be és kimenet is.


Ez a motor VCC feszültségétől függ. A modul rendelkezik egy 5V-os szabályozóval, amelyet egy jumperrel tudunk be illetve kikapcsolni. Ha a motor megtáplálása 12V-ig terjed, akkor az 5V-os szabályozót a jumperrel engedélyezve az 5V-os kimenet használható például az Arduino megtáplálására. Azonban ha a motor meghaladja a 12V-ot, akkor a jumpert el kell távolítani, mert ezek a nagyobb feszültségek károsíthatják az 5V-os szabályozót. Ebben az esetben az 5V-os pint bemenetként kell használni és megtáplálni egy5V-os tápegységgel, hogy az IC megfelelően tudjon működni.


Itt meg kell, hogy említsem, hogy ez az IC 2V-os feszültség csökkenést okoz. Például, ha 12V-os tápegységet használunk, a motor csatlakozóinak feszültsége kb 10V-lesz, ami annyit jelenet, hogy a 12V-os egyenáramú motor nem tud maximális sebességet elérni.

Logikai vezérlő bemenetek
Az „Enable A” és Enable B” pinek teszik lehetővé, hogy használjuk a megfelelő oldali motort és annak sebességét változtatni tudjuk. Ha a jumper az ENA vagy ENB-n használva van akkor a motor a maximális sebességgel működik. Ha eltávolítjuk a jumpert akkor PWM jelet csatlakoztatva ehhez a pinhez szabályozhatjuk a motort. Ha leföldeljük ezt a pint akkor a motor le van tiltva.

Az IN1 és IN2 bemenetek az „A” motor forgásirányáért felelős pinek, míg az IN3 és IN4 a „B” motoré. Ezek a pinek valójában a L298N IC belsejében lévő H-híd kapcsolóinak az irányítására használjuk. Ha az IN1 LOW és az IN2 HIGH értéket kap, akkor a motor előre halad és fordítva. Ha az IN1 HIGH és az IN2 LOW akkor pedig visszafelé forog. Ha mindkét pin értéke azonos, tehát IN1-2= LOW vagy IN1-2 = HIGH akkor a motor megáll. Ugyanez vonatkozik az IN3 és IN4 bemenetekre a „B” motor esetében.

Arduino és az L298N motorvezérlő
Most pedig készítsük el az első gyakorlati példát. Ebben a gyakorlatban egy potenciométerrel vezéreljük a motor sebességét és egy nyomógomb segítségével tudjuk változtatni a forgás irányát.

Kapcsolási rajz:

Hardware:
1db Arduino UNO mikrovezérlő
1 db L298N motorvezérlő
1 db DC motor
1db potméter + 1db nyomógomb

Mintakód:

#define enA 9 //Pinek definiálása 
#define in1 6 
#define in2 7 
#define button 4 
int rotDirection = 0; //Alaphelyzet beállítása 
int pressed = false; //Nyomógomb alaphelyzete 


void setup() { 
pinMode(enA, OUTPUT); 
pinMode(in1, OUTPUT); 
pinMode(in2, OUTPUT); 
pinMode(button, INPUT); 

digitalWrite(in1, LOW); // Kezdeti forgásirány meghatározása 
digitalWrite(in2, HIGH); 
} 

void loop() { 

int potValue = analogRead(A0); // potmeter értékének olvasása 
int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Felosztja a 0-1023 tartományt 0-255 tartományra. 
analogWrite(enA, pwmOutput); // PWM jelet küld az L298N EN pinjére. 
if (digitalRead(button) == true) { //Olvassa nyomógombot – Pergés(Debounce) 
pressed = !pressed; 
} 
while (digitalRead(button) == true); 
delay(20); 

// Ha megvolt nyomva akkor változtass forgás irányt 
if (pressed == true & rotDirection == 0) { 
digitalWrite(in1, HIGH); 
digitalWrite(in2, LOW); 
rotDirection = 1; 
delay(20); 
} 
// Ha megvolt nyomva akkor változtass forgás irányt 
if (pressed == false & rotDirection == 1) { 
digitalWrite(in1, LOW); 
digitalWrite(in2, HIGH); 
rotDirection = 0; 
delay(20); 
} 
} 

Letöltés
A leírás PDF-ben itt letölthető
A mintakód innen letölthető

Megjegyzések

Megjegyzés küldése