Componente · Driver

Driver del motore L298N

L298N è il doppio ponte H che pilota due motori CC avanti e indietro da un microcontrollore. Scopri il funzionamento, il cablaggio e i limiti reali.

Che cos’è

L298N è un driver del motore a doppio ponte H: la forza fra i delicati pin logici di un microcontrollore e un motore che vuole molta più corrente di quanta possano fornire. Un pin del microcontrollore può erogare solo poche decine di milliampere, mentre anche un piccolo motore CC con ingranaggi ne richiede centinaia. L298N riceve dalla scheda di sviluppo segnali di direzione e velocità a bassa potenza e commuta un’alimentazione separata per i motori, a corrente maggiore, di conseguenza. Pilota due motori in modo indipendente, proprio ciò che serve a un robot con due ruote.

È un componente datato: un driver MOSFET efficiente come TB6612FNG o DRV8833 scalda meno e dissipa meno tensione, ma L298N è ovunque, economico, robusto e incluso in molti kit di robotica, quindi vale la pena capirlo bene.

Schema di un ponte H: quattro interruttori attorno a un motore CC, tra una linea di alimentazione positiva e terra. Chiudendo gli interruttori in alto a sinistra e in basso a destra la corrente attraversa il motore in una direzione e lo fa girare in avanti; la coppia opposta lo inverte.
Un ponte H è costituito da quattro interruttori attorno al motore. Chiudi S1 e S4 per la marcia avanti, S2 e S3 per la retromarcia: L298N lo fa per due motori contemporaneamente. Scarica SVG

Come funziona un ponte H

Un ponte H è costituito da quattro interruttori disposti a «H» attorno al motore. Chiudendo gli interruttori in alto a sinistra e in basso a destra, la corrente scorre in una direzione e il motore gira in avanti. Chiudendo la coppia opposta, la corrente si inverte e il motore gira indietro. Questo è tutto il trucco: un ponte H ti permette di invertire un motore senza rimontare i collegamenti.

Controlli ogni motore con tre segnali:

  • Due pin di direzione (IN1/IN2) selezionano marcia avanti, retromarcia o frenata.
  • Un pin di enable (ENA), alimentato con un segnale PWM, imposta la velocità commutando rapidamente il ponte. Un PWM al massimo dà velocità massima; un ciclo al 50% dà all’incirca metà velocità.

Se colleghi l’uscita di un ciclo di controllo al pin di enable, puoi mantenere una velocità di riferimento o sterzare il robot in modo fluido, invece di oscillare tra fermo e massima potenza.

Quando usarlo

Scegli un L298N, o qualsiasi ponte H, ogni volta che un microcontrollore deve pilotare un motore CC a spazzole, cioè quasi ogni robot su ruote. I suoi 2 A per canale gestiscono senza problemi i piccoli motori gialli con ingranaggi usati nei robot seguitori di linea e nei rover.

Scegli invece un driver basato su MOSFET quando contano l’efficienza e la durata della batteria, quando i motori sono piccoli, perché la caduta di tensione di L298N spreca molta energia su un motore da 6 V, oppure quando vuoi che il driver resti freddo senza alettatore.

Cablaggio e problemi comuni

  • Due alimentazioni, una terra. La batteria dei motori alimenta il pin di alimentazione dei motori; 5 V alimentano il lato logico. Le due terre devono essere collegate, altrimenti i segnali di controllo non hanno riferimento: un classico guasto silenzioso.
  • Perde ~2 V. Il vecchio stadio di uscita BJT perde circa 2 V prima che il motore veda qualsiasi segnale. Fornisci circa 8 V a un motore da 6 V per farlo girare alla velocità massima.
  • Scalda. A corrente costante il chip richiede l’alettatore. Se i motori perdono forza durante una sessione, controlla la temperatura.
  • Fai attenzione al jumper del regolatore a 5 V integrato. Molti moduli possono alimentare il lato logico dall’alimentazione dei motori, comodo, ma solo fino a circa 12 V in ingresso. Sopra questo valore rimuovi il jumper e fornisci 5 V separatamente, altrimenti danneggi il regolatore.

Piedinatura

Il modulo L298N rosso a cui tutti fanno riferimento ha tre morsetti e due connettori di pin.

Gruppo Marcatura Funzione
Alimentazione +12V Alimentazione dei motori, 5–35 V. Il nome è fuorviante: è qualsiasi tensione richiesta dai motori
Alimentazione GND Terra. Deve essere condivisa con il microcontrollore
Alimentazione +5V Uscita quando il jumper del regolatore è inserito; ingresso quando è rimosso
Motore A OUT1, OUT2 I due terminali del motore del canale A
Motore B OUT3, OUT4 I due terminali del motore del canale B
Controllo ENA Enable del canale A. Collegato in alto per impostazione predefinita: rimuovi il jumper per pilotarlo con PWM
Controllo IN1, IN2 Direzione del canale A
Controllo IN3, IN4 Direzione del canale B
Controllo ENB Enable del canale B. Stesso jumper

I due piccoli jumper su ENA e ENB spiegano perché così tanti primi tentativi abbiano il controllo della direzione ma non quello della velocità: finché sono inseriti, il canale resta sempre abilitato e il PWM non produce alcun effetto. Rimuovili e collega questi pin a uscite compatibili con PWM.

Il terzo jumper, accanto al morsetto di alimentazione, abilita il regolatore a 5 V integrato.

Tabella di verità

Tre segnali per motore e sei combinazioni significative. Questa tabella costituisce tutta l’interfaccia di controllo.

ENA IN1 IN2 Cosa fa il motore A Note
LOW × × Si muove per inerzia Le uscite sono ad alta impedenza; il motore gira liberamente
PWM HIGH LOW Marcia avanti al ciclo impostato Lo stato di pilotaggio normale
PWM LOW HIGH Retromarcia al ciclo impostato
HIGH HIGH HIGH Frena Entrambi i terminali sono collegati in alto: il motore va in cortocircuito tramite sé stesso
HIGH LOW LOW Frena Entrambi sono collegati a terra: stesso effetto
HIGH HIGH LOW Velocità massima in avanti Ciò che ottieni con il jumper ENA inserito

Frenare e muoversi per inerzia sono davvero diverse, e la differenza conta più di quanto le persone immaginino. Muovendosi per inerzia il robot continua a rotolare; frenando il ponte cortocircuita la forza controelettromotrice del motore, che dissipa l’energia rotazionale in calore e lo ferma molto più bruscamente. Un robot seguitore di linea che sorpassa ogni giunzione spesso frena mentre dovrebbe decelerare per inerzia.

Collegamento a un Arduino

L298N Arduino Uno Nota
ENA Pin 9 Deve supportare PWM (3, 5, 6, 9, 10, 11 su un Uno)
IN1 Pin 8 Qualsiasi pin digitale
IN2 Pin 7 Qualsiasi pin digitale
IN3 Pin 5 Qualsiasi pin digitale
IN4 Pin 4 Qualsiasi pin digitale
ENB Pin 3 Deve supportare PWM
GND GND Il collegamento da cui dipende tutto
+12V Batteria dei motori + Non il Vin di Arduino
+5V — Solo se alimenti Arduino dal L298N

Il jumper del regolatore a 5 V, deciso correttamente

Jumper Il pin +5V è Quando usarlo
Inserito Un’uscita: il regolatore integrato produce 5 V dall’alimentazione dei motori L’alimentazione dei motori è di 7–12 V e vuoi usare una sola batteria per tutto
Rimosso Un ingresso: devi fornirgli 5 V L’alimentazione dei motori è sopra 12 V oppure sotto circa 7 V

Sopra circa 12 V il regolatore lineare deve dissipare la differenza in calore e si danneggia. Sotto circa 7 V non riesce a mantenere 5 V e la logica va in brownout quando i motori caricano il pacco batteria. Entrambi i guasti appaiono come riavvii casuali.

Codice minimo funzionante

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
}

Nota che driveA(0) lascia il motore libero invece di frenarlo: impostare il ciclo a zero disabilita il ponte. Se vuoi un arresto brusco devi richiederlo esplicitamente.

Il problema dei 2 V, quantificato

Lo stadio di uscita del L298N è costruito con transistor bipolari e ogni coppia in conduzione perde tensione. Il datasheet indica una caduta di saturazione totale di circa 1.8 V a 1 A e fino a circa 2.7 V a 2 A. Questa tensione non raggiunge mai il motore: diventa calore nel chip.

Le conseguenze vale la pena vederle in numeri:

Alimentazione dei motori Tensione effettiva al motore Frazione persa
6 V ~4 V 33%
7.4 V (Li-ion 2S) ~5.4 V 27%
9 V ~7 V 22%
12 V ~10 V 17%

Su un motore da 6 V alimentato a 6 V, un terzo della batteria scalda il chip. Ecco il motivo principale per cui L298N sembra debole sui piccoli robot e perché un motore da 6 V vuole circa 8 V di alimentazione dietro questo driver.

È anche un problema termico. A 1 A per canale con entrambi i motori in funzione, il chip dissipa circa 4 W. Il piccolo alettatore gestisce questa potenza solo con un flusso d’aria e una corrente di stallo limitata lo porta all’arresto termico, che si manifesta come motori che si indeboliscono a metà sessione e si riprendono dopo una pausa.

Risoluzione dei problemi

Sintomo Causa probabile Soluzione
Non si muove nulla, il cablaggio sembra corretto Nessuna terra comune Collega GND di L298N a GND di Arduino: è il classico guasto silenzioso
La direzione funziona, la velocità no Jumper ENA/ENB ancora inseriti Rimuovili e collega i pin a uscite PWM
Il controllo della velocità funziona solo acceso/spento Il pin di enable non supporta PWM Usa 3, 5, 6, 9, 10 o 11 su un Uno
Motori deboli, driver caldo Caduta di ~2 V più carico termico Aumenta l’alimentazione oppure passa a un driver MOSFET
I motori si indeboliscono durante una sessione Arresto termico Usa alettatore e flusso d’aria; riduci la corrente continua
Arduino si riavvia all’avvio dei motori L’alimentazione condivisa cala Usa una batteria separata per i motori; condividi solo la terra
Il regolatore diventa molto caldo Alimentazione dei motori sopra ~12 V con jumper inserito Rimuovi il jumper e fornisci 5 V separatamente
Un motore gira al contrario Polarità dei fili del motore invertita Scambia OUT1/OUT2, oppure correggilo nel software, che è più pulito
Entrambi i motori si muovono a scatti L’alimentazione dei motori non fornisce la corrente di stallo Usa un pacco batteria più capace; controlla la sua resistenza interna

L298N o TB6612FNG?

L298N TB6612FNG
Stadio di uscita Bipolare MOSFET
Caduta di tensione ~1.8–2.7 V ~0.5 V totali
Corrente continua 2 A per canale (con dissipatore) 1.2 A per canale
Corrente di picco 3 A 3.2 A
Alimentazione dei motori 5–35 V 2.5–13.5 V
Calore Richiede l’alettatore Resta freddo
Dimensioni e peso Modulo grande Grande come un francobollo
Pin di controllo 2 di direzione + 1 PWM per motore Gli stessi, più un pin standby condiviso

Scegli TB6612FNG per praticamente ogni piccolo robot: due motori gialli con ingranaggi, un seguitore di linea, un risolutore di labirinto. La differenza di efficienza non è marginale: su un sistema a 6 V consuma un terzo della batteria.

Scegli L298N quando l’alimentazione dei motori supera 13.5 V, quando ti servono più di circa 1.2 A in continuo per canale oppure semplicemente quando è ciò che hai ricevuto nel kit. È robusto, tollera gli abusi e capirlo ti insegna correttamente il ponte H.

Per i progetti più recenti vale anche la pena conoscere DRV8833, simile a TB6612FNG ma con limitazione di corrente, e BTS7960, da 43 A per motori davvero grandi.

Esplora il grafo

Usato in queste costruzioni

Progetti, percorsi di apprendimento e simulatori che includono Driver del motore L298N.

Confronto

Alternative

Domande

FAQ su Driver del motore L298N

Che cos'è il driver del motore L298N?

L298N è un modulo driver del motore a doppio ponte H. Si trova tra un microcontrollore e i motori, riceve segnali di direzione e velocità a bassa potenza e commuta un'alimentazione separata a corrente maggiore per pilotare in modo indipendente due motori CC, oppure un motore passo-passo.

A cosa serve L298N?

Permette a un microcontrollore come Arduino di pilotare motori che non potrebbe mai alimentare direttamente. Un pin del microcontrollore fornisce soltanto decine di milliampere, mentre anche un piccolo motore con ingranaggi ne richiede centinaia: L298N fornisce la forza necessaria per marcia avanti, retromarcia e controllo della velocità nei robot su ruote.

Come colleghi L298N a un Arduino?

Collega la batteria dei motori all'alimentazione dei motori del L298N, collega la terra del L298N alla terra di Arduino (questa terra condivisa è essenziale), unisci ogni motore ai terminali OUT e collega i pin di direzione IN1/IN2 e i pin di enable ENA/ENB ai pin digitali e PWM di Arduino.

Come controlli la velocità dei motori con L298N?

Invia un segnale PWM al pin di enable (ENA o ENB) invece di mantenerlo HIGH. Il ciclo di lavoro PWM commuta rapidamente il ponte H e il motore risponde al valore medio, quindi un ciclo al 50% corrisponde all'incirca a metà velocità. I pin di direzione impostano marcia avanti o retromarcia.

Perché il mio motore gira lentamente con L298N?

Il vecchio stadio di uscita a transistor del L298N perde circa 2 V prima che il motore la veda. Un motore da 6 V alimentato a 6 V sembrerà debole; fornisci circa 8 V oppure passa a un driver MOSFET efficiente come TB6612FNG per motori piccoli.

Per approfondire

Fonti