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.
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.
- ProgettoCostruisci un robot seguilinea con un microcontrollore 8051
- ProgettoCostruisci un robot seguilinea: dal simulatore alla pista reale
- ProgettoCostruisci un'auto robot col telefono via Bluetooth o Wi-Fi
- ProgettoRobot con evitamento degli ostacoli: rileva, scansiona e sterza
- PercorsoControllo dei motori per robot: un percorso di apprendimento
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