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.

Schakelschema van een H-brug: vier schakelaars rond een gelijkstroommotor tussen een positieve voedingsrail en ground. Sluit de linkerbovenste en rechteronderste schakelaars om stroom in de ene richting door de motor te laten lopen voor vooruit; het andere paar keert de richting om.
Een H-brug bestaat uit vier schakelaars rond de motor. Sluit S1 en S4 voor vooruit, S2 en S3 voor achteruit—de L298N doet dit gelijktijdig voor twee motoren. SVG downloaden

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.

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

Bronnen