Component · Driver
L298N-motordriver
De L298N is de dubbele H-brug waarmee een microcontroller twee gelijkstroommotoren vooruit en achteruit aanstuurt. Werking, bedrading en de echte grenzen.
Wat het is
De L298N is een dubbele H-brugmotordriver—de schakelkracht tussen de kwetsbare logica-pins van een microcontroller en een motor die veel meer stroom nodig heeft dan die pins kunnen leveren. Een microcontroller-pin kan slechts enkele tienten milliampères leveren; zelfs een kleine tandwielmotor vraagt honderden. De L298N neemt laagvermogen-signalen voor richting en snelheid van het bord over en schakelt een aparte motorvoeding die meer stroom kan leveren. Hij bestuurt twee motoren onafhankelijk, precies wat een robot met twee wielen nodig heeft.
Hij is van een oud ontwerp—een efficiënte MOSFET-motordriver zoals de TB6612FNG of DRV8833 blijft koeler en heeft een kleinere spanningsval—maar de L298N is overal, goedkoop, robuust en zit in de meeste robotkits. Daarom is het de moeite waard om hem goed te begrijpen.
Hoe een H-brug werkt
Een H-brug bestaat uit vier schakelaars die rond de motor in een “H” staan. Sluit de linkerbovenste en rechteronderste schakelaars, dan loopt de stroom de ene kant op en draait de motor vooruit. Sluit het andere paar, dan keert de stroom om en draait de motor achteruit. Dat is de hele truc: met een H-brug kun je een motor omkeren zonder de bedrading te wijzigen.
Je bestuurt elke motor met drie signalen:
- Twee richtingspinnen (IN1/IN2) kiezen voor vooruit, achteruit of remmen.
- Eén inschakelpin (ENA), waarop je een PWM-signaal aansluit, bepaalt de snelheid door de brug snel aan en uit te schakelen. Een volledig ingeschakeld PWM-signaal geeft volle snelheid; 50% werkverhouding is ongeveer de helft.
Sluit de uitvoer van een regellus aan op de inschakelpin en je kunt een streefsnelheid vasthouden of een robot soepel besturen in plaats van hem tussen stilstand en volle snelheid te laten schokken.
Wanneer je hem gebruikt
Kies een L298N—of een willekeurige H-brug—telkens wanneer een microcontroller een borstel-gelijkstroommotor moet aansturen, en dat is vrijwel elke wielerobot. De 2 A per kanaal zijn ruim voldoende voor de kleine gele tandwielmotoren die in lijnvolgers en rovers worden gebruikt.
Kies in plaats daarvan een MOSFET-motordriver wanneer efficiëntie en batterijduur belangrijk zijn, wanneer je motoren klein zijn — bij een 6 V-motor gaat door de spanningsval van de L298N veel spanning verloren — of wanneer je de motordriver zonder koellichaam koel wilt laten draaien.
Aansluiting en aandachtspunten
- Twee voedingen, één ground. Sluit de motoraccu aan op de motorvoedingspin en sluit 5 V-logica aan op de logische kant. De grounds moeten aan elkaar gekoppeld zijn, anders hebben de besturingssignalen geen referentie—een klassieke stille fout.
- Spanningsval van ~2 V. De oudere BJT-uitgangstrap heeft een spanningsval van ongeveer 2 V voordat de motor iets ziet. Geef een 6 V-motor ongeveer 8 V spanning om op volle snelheid te draaien.
- Hij wordt warm. Bij langdurige stroom heeft de chip zijn koellichaam nodig. Als motoren tijdens een rit zwakker worden, controleer dan de temperatuur.
- Let op de 5 V-regulatorjumper op de module. Veel modules kunnen de logische kant voeden vanaf de motorvoeding—handig, maar alleen tot ongeveer 12 V ingang. Daarboven moet je de jumper verwijderen en 5 V afzonderlijk toevoeren, anders verbrand je de regulator.
Pinindeling
De rode L298N-module die iedereen bedoelt, heeft drie klemmenblokken en twee pinnenheaders.
| Groep | Aanduiding | Functie |
|---|---|---|
| Voeding | +12V |
Motorvoeding, 5–35 V. De naam is misleidend — dit is de spanning die je motoren nodig hebben |
| Voeding | GND |
Ground. Moet gedeeld zijn met de microcontroller |
| Voeding | +5V |
Uitgang als de regulatorjumper aanstaat; ingang als die uitstaat |
| Motor A | OUT1, OUT2 |
De twee motoraansluitingen voor kanaal A |
| Motor B | OUT3, OUT4 |
De twee motoraansluitingen voor kanaal B |
| Besturing | ENA |
Inschakelen van kanaal A. Standaard via een jumper op HIGH — verwijder de jumper om PWM aan te sluiten |
| Besturing | IN1, IN2 |
Richting van kanaal A |
| Besturing | IN3, IN4 |
Richting van kanaal B |
| Besturing | ENB |
Inschakelen van kanaal B. Dezelfde jumper |
De twee kleine jumpers op ENA en ENB zijn de reden dat zoveel eerste pogingen wel richtingsbesturing maar geen snelheidsregeling hebben: zolang ze geplaatst zijn, blijft het kanaal permanent ingeschakeld en doet PWM niets. Haal ze weg en sluit die pinnen aan op PWM-uitgangen.
De derde jumper, naast het voedingsblok, schakelt de ingebouwde 5 V-regulator in.
De waarheidstabel
Drie signalen per motor en zes betekenisvolle combinaties. Deze tabel vormt de volledige besturingsinterface.
| ENA | IN1 | IN2 | Wat motor A doet | Opmerkingen |
|---|---|---|---|---|
| LOW | × | × | Loopt door | Uitgangen hebben hoge impedantie; de motor loopt vrij |
| PWM | HIGH | LOW | Vooruit met de opgegeven inschakeling | De normale besturingsstand |
| PWM | LOW | HIGH | Achteruit met de opgegeven inschakeling | |
| HIGH | HIGH | HIGH | Remt | Beide motoruiteinden zijn op HIGH aangesloten en dus met elkaar verbonden — de bedoelde remkortsluiting |
| HIGH | LOW | LOW | Remt | Beide aan LOW — hetzelfde effect |
| HIGH | HIGH | LOW | Volle snelheid vooruit | Dit krijg je met de geplaatste ENA-jumper |
Remmen en doorlopen zijn echt verschillend, en dat verschil is belangrijker dan mensen verwachten. Doorlopen laat de robot verder rollen; bij remmen wordt de terug-elektrische spanning van de motor via de brug afgevoerd als warmte, waardoor de rotatie-energie verdwijnt en de motor veel scherper stopt. Een lijnvolger die bij elke kruising doorschiet, laat vaak de motor doorlopen terwijl die zou moeten remmen.
Aansluiten op een Arduino
| L298N | Arduino Uno | Opmerking |
|---|---|---|
ENA |
Pin 9 | Moet geschikt zijn voor PWM (3, 5, 6, 9, 10, 11 op een Uno) |
IN1 |
Pin 8 | Elke digitale pin |
IN2 |
Pin 7 | Elke digitale pin |
IN3 |
Pin 5 | Elke digitale pin |
IN4 |
Pin 4 | Elke digitale pin |
ENB |
Pin 3 | Moet geschikt zijn voor PWM |
GND |
GND | De verbinding waar alles van afhangt |
+12V |
+ van de motoraccu | Niet de Vin van de Arduino |
+5V |
— | Alleen als je de Arduino vanuit de L298N voedt |
De 5 V-regulatorjumper, goed gekozen
| Jumper | De pin +5V is |
Gebruik wanneer |
|---|---|---|
| Geplaatst | Een uitgang — de ingebouwde regulator maakt 5 V uit de motorvoeding | De motorvoeding is 7–12 V en je één accu voor alles wilt gebruiken |
| Verwijderd | Een ingang — je moet er 5 V op aansluiten | De motorvoeding hoger is dan 12 V, of lager dan ongeveer 7 V |
Boven ongeveer 12 V voert de lineaire regulator het spanningsverschil als warmte af, waardoor hij doorbrandt. Onder ongeveer 7 V kan hij geen 5 V vasthouden, en de logica valt uit doordat de motoren de accu belasten. Beide storingen zien eruit als willekeurige herstarts.
Minimaal werkende code
const int ENA = 9, IN1 = 8, IN2 = 7;
const int ENB = 3, IN3 = 5, IN4 = 4;
void setup() {
for (int p : {ENA, IN1, IN2, ENB, IN3, IN4}) pinMode(p, OUTPUT);
}
// speed: -255..255. Negative is reverse, 0 coasts.
void driveA(int speed) {
digitalWrite(IN1, speed > 0);
digitalWrite(IN2, speed < 0);
analogWrite(ENA, abs(constrain(speed, -255, 255)));
}
void brakeA() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
}
void loop() {
driveA(180); delay(1500); // forward
brakeA(); delay(500); // stop hard
driveA(-180); delay(1500); // reverse
driveA(0); delay(500); // coast
}
driveA(0) laat de motor doorlopen in plaats van remmen: een werkverhouding van nul schakelt de brug uit. Wil je een harde stop, dan moet je die expliciet aanvragen.
Het 2 V-probleem, gekwantificeerd
De uitgangstrap van de L298N bestaat uit bipolaire transistoren, en elk geleidend paar laat spanning vallen. De datasheet vermeldt een totale saturatiespanning van ongeveer 1,8 V bij 1 A en tot ongeveer 2,7 V bij 2 A. Die spanning bereikt de motor nooit; ze wordt warmte in de chip.
De gevolgen zijn nuttig als getallen:
| Motorvoeding | Wat de motor werkelijk ziet | Verloren deel |
|---|---|---|
| 6 V | ~4 V | 33% |
| 7,4 V (2S Li-ion) | ~5,4 V | 27% |
| 9 V | ~7 V | 22% |
| 12 V | ~10 V | 17% |
Op een 6 V-motor die met 6 V draait, verwarmt een derde van je accu de chip. Dat is de hele reden waarom de L298N zwak aanvoelt op kleine robots — en waarom een 6 V-motor achter deze motordriver ongeveer 8 V spanning nodig heeft.
Het is ook een thermisch probleem. Bij 1 A per kanaal met beide motoren draaiend, zet de chip ongeveer 4 W om in warmte. Het kleine koellichaam kan dat alleen met luchtstroom aan, en een stroombegrensde vastloop kan de chip in thermische uitschakeling brengen — motors die tijdens een rit vervagen en na een pauze weer op gang komen.
Problemen oplossen
| Klacht | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
| Er beweegt niets, bedrading lijkt goed | Geen gezamenlijke ground | Verbind L298N GND met Arduino GND — dit is de klassieke stille fout |
| Richting werkt, snelheid niet | Jumpers ENA/ENB zitten nog |
Verwijder ze en sluit de pinnen aan op PWM-uitgangen |
| Snelheidsregeling werkt alleen aan/uit | Inschakelpin zit niet op een PWM-pen | Gebruik op een Uno 3, 5, 6, 9, 10 of 11 |
| Motoren zwak, motordriver warm | De spanningsval van ~2 V plus thermische belasting | Verhoog de spanning, of stap over op een MOSFET-motordriver |
| Motoren vervagen tijdens een rit | Thermische uitschakeling | Koellichaam en luchtstroom; verminder de aanhoudende stroom |
| Arduino herstart wanneer motoren starten | Gedeelde voeding zakt in | Gebruik een aparte motoraccu; alleen de ground is gemeenschappelijk |
| Regulator wordt erg warm | Motorvoeding boven ~12 V met jumper aan | Verwijder de jumper en voer 5 V afzonderlijk toe |
| Eén motor draait achteruit | Motoraansluitingen omgekeerd | Verwissel OUT1/OUT2 — of corrigeer dit in software, wat netter is |
| Beide motoren stotteren tegelijk | Motorvoeding kan geen vastloopstroom leveren | Grotere accu; controleer de interne weerstand |
L298N of TB6612FNG?
| L298N | TB6612FNG | |
|---|---|---|
| Uitgangstrap | Bipolair | MOSFET |
| Spanningsval | ~1,8–2,7 V | ~0,5 V totaal |
| Aanhoudende stroom | 2 A per kanaal (met koeling) | 1,2 A per kanaal |
| Piekstroom | 3 A | 3,2 A |
| Motorvoeding | 5–35 V | 2,5–13,5 V |
| Warmte | Heeft koellichaam nodig | Loopt koel |
| Afmetingen en gewicht | Grote module | Postzegelformaat |
| Besturingspinnen | 2 richtingen + 1 PWM per motor | Hetzelfde, plus één gedeelde standby-pin |
Kies de TB6612FNG voor vrijwel elke kleine robot: twee gele tandwielmotoren, een lijnvolger, een doolhofoplosser. Het efficiëntieverschil is niet marginaal — op een 6 V-systeem gaat het om een derde van je accu.
Kies de L298N wanneer de motorvoeding hoger is dan 13,5 V, wanneer je meer dan ongeveer 1,2 A aanhoudende stroom per kanaal nodig hebt, of wanneer het simpelweg in je kit zat. Hij is robuust en verdraagt zwaar gebruik; hem begrijpen leert je bovendien hoe een H-brug werkt.
Voor nieuwere ontwerpen zijn ook de DRV8833 (vergelijkbaar met de TB6612FNG, met stroombegrenzing) en de BTS7960 (43 A, voor werkelijk grote motoren) de moeite waard om te kennen.
Verken de graaf
Gebruikt in deze bouwprojecten
Projecten, leerroutes en simulators waarin de L298N-motordriver voorkomt.
- ProjectBouw een lijnvolgerrobot met een 8051-microcontroller
- ProjectBouw een lijnvolgerrobot: van simulator tot echte baan
- ProjectBouw een obstakelvermijdende robot: meten, scannen en sturen
- ProjectBouw een robotwagen die je via Bluetooth of wifi bestuurt
- LeerrouteMotorregeling voor robots: een leertraject
Vergelijken
Alternatieven
Vragen
FAQ over de L298N-motordriver
Wat is de L298N-motordriver?
De L298N is een module met een dubbele H-brug. Hij staat tussen een microcontroller en je motoren, neemt laagvermogen-signalen voor richting en snelheid over en schakelt een afzonderlijke voeding met een hogere stroomcapaciteit om twee gelijkstroommotoren (of één stappenmotor) onafhankelijk aan te drijven.
Waar wordt de L298N voor gebruikt?
Hij laat een microcontroller zoals een Arduino motoren aansturen die hij nooit rechtstreeks kan voeden. Een microcontroller-pin levert slechts tienten milliampères, terwijl zelfs een kleine tandwielmotor er honderden nodig heeft. De L298N levert dus het vermogen om vooruit, achteruit en met verschillende snelheden te rijden bij wielerobots.
Hoe sluit je een L298N aan op een Arduino?
Verbind de motoraccu met de motorvoeding van de L298N, verbind de L298N-ground met de Arduino-ground (deze gedeelde ground is essentieel), sluit elke motor aan op de OUT-aansluitingen en verbind de richtingspinnen IN1/IN2 plus de inschakelpinnen ENA/ENB met digitale en PWM-pins van de Arduino.
Hoe regel je de motorsnelheid met de L298N?
Sluit een PWM-signaal aan op de inschakelpin (ENA of ENB) in plaats van deze permanent op HIGH te houden. De verhouding aan/uit van het PWM-signaal schakelt de H-brug snel aan en uit, en de motor reageert op het gemiddelde—50% werkverhouding betekent ongeveer halve snelheid. De richtingspinnen bepalen vooruit of achteruit.
Waarom draait mijn motor langzaam op de L298N?
De oudere transistoruitgangstrap van de L298N heeft een spanningsval van ongeveer 2 V voordat de motor die spanning ziet. Een 6 V-motor op een 6 V-voeding voelt zwak; geef hem ongeveer 8 V spanning, of stap over op een efficiënte MOSFET-motordriver zoals de TB6612FNG voor kleine motoren.
Verder lezen