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.
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ő
Precíz és kiváló írás!
VálaszTörlés