Le immagini dei prodotti sono solo a scopo informativo e potrebbero presentare piccole differenze, a seconda del lotto e del fornitore. Le specifiche e i prezzi dei prodotti potrebbero essere soggetti a modifiche senza preavviso. Facciamo del nostro meglio per aggiungere specifiche quanto più precise e corrette possibili alla pagina del prodotto, ma è possibile che non siano del tutto corrette. Se identifichi un caso del genere, ti preghiamo di segnalarcelo.
Il prodotto è destinato agli specialisti e richiede personale qualificato e autorizzato. Il prodotto non include istruzioni di montaggio/uso . La messa in funzione del prodotto da parte di persone non qualificate comporta la perdita della garanzia secondo i Termini e Condizioni presenti sul sito.
Le specifiche tecniche indicate (corrente, potenza, ecc.) rappresentano valori massimi consentiti in condizioni ideali di funzionamento. Per un utilizzo sicuro e una durata ottimale, si raccomanda di utilizzare il prodotto in regime continuo a non più del 50% dei valori massimi specificati.
Ponte H doppia L298N, 2 motori DC, 5-35V, 2A per canale
Modulo ponte H doppia con circuito L298N per il controllo di direzione e velocità di due motori DC o di un motore passo-passo bipolare. Alimentazione motori 5 - 35 VDC, fino a 2 A per canale, ingressi PWM fino a 40 kHz, regolatore integrato da 5 V e dissipatore sul circuito. Compatibile con Arduino e altre schede di sviluppo.
Spedito entro mercoledì 11 novembre
Acquistando questo prodotto guadagni 0,71 RON in punti fedeltà.
Spedizione veloce gratuita per ordini superiori a 100EUR nella maggior parte de paesi UE.
Spediamo dal nostro magazzino entro 24 ore
Ricevi punti a ogni ordine, per un valore del 5%.
La ponte H doppia L298N è un modulo driver per motori che permette il controllo della direzione e della velocità di due motori a corrente continua oppure di un motore passo-passo bipolare. Il modulo riceve segnali logici da un microcontrollore e li trasforma in corrente per i motori, il che lo rende adatto a robot mobili, modellini radiocomandati, meccanismi di attuazione, stampanti 3D semplici e altri progetti di meccatronica.
Il circuito principale è L298N, una ponte H doppia con due canali indipendenti, ciascuno in grado di fornire fino a 2 A al motore. I motori si alimentano a 5 - 35 VDC, mentre la parte logica funziona a 5 V. La direzione di ciascun motore si imposta tramite due ingressi (IN1 e IN2 per il motore A, IN3 e IN4 per il motore B), mentre la velocità si regola con un segnale PWM sugli ingressi di abilitazione ENA ed ENB, con frequenza fino a 40 kHz.
Tra le caratteristiche principali figurano il dissipatore montato sul circuito L298N, il regolatore da 5 V 78M05 con jumper di attivazione 5V-EN, i jumper ENA ed ENB per l'attivazione permanente dei canali, i morsetti a vite per motori e alimentazione, otto diodi di protezione per carichi induttivi, due condensatori elettrolitici di filtraggio, LED indicatore e quattro fori di montaggio. L'alimentazione dei motori avviene sui morsetti +12V e GND, e il regolatore da 5 V può alimentare anche la logica della scheda o del microcontrollore quando la tensione di alimentazione è inferiore a 12 V.
Grazie agli ingressi di controllo logici, il modulo è compatibile con Arduino, ESP32, STM32, Raspberry Pi e altre schede di sviluppo che dispongono di uscite digitali e uscite PWM.
Specifiche:
Tensione di alimentazione motori: 5 - 35 VDC
Corrente motori: max. 2 A per canale
Circuito driver: L298N, ponte H doppia
Numero di canali: 2
Motori comandati: 2 motori DC oppure 1 motore passo-passo bipolare
Tensione logica: 5 V
Regolatore 5 V: 78M05, attivato tramite il jumper 5V-EN, per alimentazione motori sotto 12 V
Livello logico ingressi: LOW massimo 1.5 V, HIGH da 2.3 V
Frequenza massima PWM: 40 kHz
Protezione: 8 diodi per carichi induttivi
Collegamento: morsetti a vite per motori e alimentazione, pin per segnali di controllo
Dimensioni: 43 x 43 x 27 mm
Layout:
| Elemento | Funzione |
|---|---|
| Circuito L298N con dissipatore | Ponte H doppia che commuta la corrente verso i due motori. Il dissipatore smaltisce il calore prodotto alle correnti elevate. |
| Morsetto OUT1 / OUT2 | Uscita per il motore A o per la bobina A di un motore passo-passo bipolare. |
| Morsetto OUT3 / OUT4 | Uscita per il motore B o per la bobina B di un motore passo-passo bipolare. |
| Morsettiera di alimentazione a 3 posizioni (+12V, GND, +5V) | L'ingresso +12V riceve l'alimentazione dei motori da 5 - 35 VDC, GND è la massa comune, mentre +5V è un'uscita a 5 V quando il jumper 5V-EN è inserito e un ingresso a 5 V per la logica quando il jumper è rimosso. |
| Jumper 5V-EN | Inserito, attiva il regolatore 78M05 che produce 5 V per la logica dalla tensione di alimentazione dei motori, utilizzato quando questa è inferiore a 12 V. Rimosso, il regolatore è disattivato e la logica deve essere alimentata dall'esterno a 5 V sul morsetto +5V. |
| Regolatore 78M05 | Produce la tensione di 5 V per la parte logica del modulo. |
| Pin ENA, IN1, IN2, IN3, IN4, ENB | Ingressi di controllo. IN1 e IN2 stabiliscono la direzione del motore A, IN3 e IN4 la direzione del motore B, mentre ENA ed ENB attivano il rispettivo canale e ricevono il segnale PWM per la velocità. |
| Jumper ENA | Inserito, mantiene il canale A attivo in permanenza, e il motore A va alla velocità massima quando gli ingressi IN1 e IN2 hanno livelli diversi. Rimosso, l'attivazione e la velocità del motore A sono comandate tramite il pin ENA. |
| Jumper ENB | Inserito, mantiene il canale B attivo in permanenza, e il motore B va alla velocità massima quando gli ingressi IN3 e IN4 hanno livelli diversi. Rimosso, l'attivazione e la velocità del motore B sono comandate tramite il pin ENB. |
| Diodi di protezione (8 pz.) | Assorbono la tensione inversa generata dalle bobine dei motori allo spegnimento o al cambio di senso, proteggendo il circuito L298N. |
| Condensatori elettrolitici 220 uF / 35 V | Filtrano la tensione di alimentazione dei motori e la tensione di 5 V. |
| LED indicatore | Si accende quando la linea a 5 V del modulo è alimentata. |
| Fori di montaggio | Fissaggio del modulo sul telaio. |
Pinout:

| Connettore | Pin | Funzione |
|---|---|---|
| Morsettiera di alimentazione | +12V | Alimentazione motori 5 - 35 VDC |
| Morsettiera di alimentazione | GND | Massa comune per motori e logica |
| Morsettiera di alimentazione | +5V | Uscita 5 V con jumper 5V-EN inserito, ingresso 5 V per la logica senza jumper |
| Morsetto motore A | OUT1 | Uscita motore A |
| Morsetto motore A | OUT2 | Uscita motore A |
| Morsetto motore B | OUT3 | Uscita motore B |
| Morsetto motore B | OUT4 | Uscita motore B |
| Pin di controllo | ENA | Attivazione motore A e ingresso PWM per la velocità |
| Pin di controllo | IN1 | Ingresso direzione motore A |
| Pin di controllo | IN2 | Ingresso direzione motore A |
| Pin di controllo | IN3 | Ingresso direzione motore B |
| Pin di controllo | IN4 | Ingresso direzione motore B |
| Pin di controllo | ENB | Attivazione motore B e ingresso PWM per la velocità |
| ENA | IN1 | IN2 | Stato motore A |
|---|---|---|---|
| 0 | X | X | Spento, rotazione libera |
| 1 | 1 | 0 | Rotazione in un senso |
| 1 | 0 | 1 | Rotazione in senso opposto |
Il motore B funziona in modo identico, con i pin ENB, IN3 e IN4.
Utilizzo:
Collegate il motore A ai morsetti OUT1 e OUT2 e il motore B ai morsetti OUT3 e OUT4. Per un motore passo-passo bipolare, collegate una bobina a OUT1 e OUT2 e l'altra bobina a OUT3 e OUT4.
Alimentate i motori a 5 - 35 VDC tramite i morsetti +12V e GND, rispettando la polarità. La tensione che arriva al motore è di circa 2 V inferiore a quella di alimentazione, perché una parte cade sulla ponte H.
Per alimentare la logica del modulo, lasciate il jumper 5V-EN inserito quando la tensione di alimentazione dei motori è inferiore a 12 V. In questo caso il morsetto +5V diventa un'uscita a 5 V e può alimentare la scheda di controllo, mentre il LED indicatore si accende.
Per tensioni di alimentazione di 12 V o superiori, rimuovete il jumper 5V-EN e alimentate la logica con 5 V sul morsetto +5V.
Non applicate tensione al morsetto +5V mentre il jumper 5V-EN è inserito e il regolatore alimenta già la logica.
Collegate la massa della scheda di controllo (GND) al morsetto GND del modulo, in modo che i segnali di controllo abbiano un riferimento comune.
Collegate gli ingressi IN1, IN2, IN3 e IN4 a quattro uscite digitali della scheda di controllo e ENA ed ENB a due uscite PWM. Ad esempio, con Arduino Uno usate ENA su D9, IN1 su D8, IN2 su D7, IN3 su D5, IN4 su D4 ed ENB su D3.
Per una velocità regolabile, rimuovete i jumper ENA ed ENB e inviate un segnale PWM su questi ingressi. Con i jumper inseriti, i motori funzionano solo alla velocità massima e il controllo si limita a direzione e arresto.
Impostate la direzione di un motore portando un livello HIGH su uno dei suoi ingressi e LOW sull'altro. Invertendo i livelli si cambia il senso di rotazione.
Non portate contemporaneamente a HIGH entrambi gli ingressi dello stesso motore, ad esempio IN1 e IN2 oppure IN3 e IN4, perché il modulo può danneggiarsi. Nei programmi, portate prima a LOW l'ingresso che si disattiva e solo dopo a HIGH l'altro ingresso.
Alla prima accensione usate un valore PWM basso e aumentatelo gradualmente. Se il motore non gira, verificate l'alimentazione, la massa comune e il montaggio dei jumper ENA ed ENB, mentre se il senso è opposto a quello desiderato, invertite i fili del motore oppure i livelli di IN1 e IN2.
Per correnti vicine a 2 A per canale, assicurate la ventilazione attorno al dissipatore ed evitate il blocco del motore, perché il circuito si riscalda.
Per le schede con logica a 3.3 V, i segnali di controllo sono riconosciuti come livello HIGH da 2.3 V, mentre l'alimentazione della logica resta a 5 V.
- Tensione di alimentazione
- 5-35 V DC
- Dimensioni
- 43 x 43 x 27 mm
- Tipo
- Doppio ponte H
- Corrente di uscita
- max. 2 A per canale
- Tensione logica
- 5 V
- Protezioni
- 8 diodi per carichi induttivi
- Numero di canali
- 2
- Circuito integrato
- L298N
Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.
Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.
Avertismente generale de siguranta:
Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.
Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.
Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.
Nu lasati produsul alimentat nesupravegheat in timpul testelor.
Produsul nu este jucarie si nu este destinat copiilor.
Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.
Identificare produs:
Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.
Producator / Importator / Distribuitor:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Website: www.sigmanortec.ro
Persoana responsabila in UE:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Documentatie si siguranta:
Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].
/*
L298N dual H-bridge motor driver test
Board: Arduino Uno (Tools > Board > Arduino AVR Boards > Arduino Uno)
Libraries: none needed
Wiring:
L298N ENA -> D9 (PWM) L298N IN1 -> D8 L298N IN2 -> D7
L298N ENB -> D3 (PWM) L298N IN3 -> D5 L298N IN4 -> D4
L298N GND -> Arduino GND and the power supply minus
L298N +12V -> motor power supply plus (5 - 35 VDC)
Motor A on OUT1 / OUT2, motor B on OUT3 / OUT4
Remove the ENA and ENB jumpers so PWM can control the speed
*/
const int ENA = 9;
const int IN1 = 8;
const int IN2 = 7;
const int ENB = 3;
const int IN3 = 5;
const int IN4 = 4;
// Run both motors in the same direction at a given PWM value
void driveBoth(int speed, bool forward) {
// Set the inactive input LOW first, so both inputs are never HIGH together
digitalWrite(forward ? IN2 : IN1, LOW);
digitalWrite(forward ? IN1 : IN2, HIGH);
digitalWrite(forward ? IN4 : IN3, LOW);
digitalWrite(forward ? IN3 : IN4, HIGH);
analogWrite(ENA, speed);
analogWrite(ENB, speed);
}
// Stop both motors
void stopBoth() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600);
Serial.println("L298N test started");
stopBoth();
}
void loop() {
Serial.println("Both motors forward, PWM 180");
driveBoth(180, true);
delay(2000);
Serial.println("Both motors stopped");
stopBoth();
delay(1000);
Serial.println("Both motors backward, PWM 180");
driveBoth(180, false);
delay(2000);
Serial.println("Both motors stopped");
stopBoth();
delay(2000);
}
Il modulo Doppio ponte H L298N è un driver per motori a corrente continua, costruito attorno al circuito L298N. Può comandare due motori DC in modo indipendente, per senso e velocità, oppure un motore passo-passo bipolare. Lo incontriamo nei robot su ruote, nelle macchinine radiocomandate, nei piccoli nastri trasportatori e in ogni progetto in cui un microcontrollore deve muovere un motore che consuma più di quanto possa erogare un pin della scheda.
In questo tutorial usiamo Arduino Uno R3, perché il modulo ha bisogno di un microcontrollore che gli fornisca i segnali di comando, e la logica a 5 V della scheda Uno si adatta direttamente agli ingressi del modulo. Controlleremo due motori TT con riduttore, alimentati da un alimentatore di rete da 9 VDC.

Come funziona:
Un motore DC gira in un senso o nell'altro in base alla polarità della tensione ai morsetti. Il ponte H è un circuito con quattro interruttori che permette di invertire questa polarità con un segnale logico. Il circuito L298N contiene due di questi ponti, quindi può comandare due motori. Per il motore A si usano gli ingressi IN1 e IN2, mentre per il motore B gli ingressi IN3 e IN4.
Il senso di rotazione si sceglie in base alla combinazione di livelli sui due ingressi del motore. La combinazione HIGH su entrambi gli ingressi non deve mai essere usata, perché può danneggiare il modulo.
| IN1 (IN3) | IN2 (IN4) | Risultato |
|---|---|---|
| HIGH | LOW | Il motore gira in avanti |
| LOW | HIGH | Il motore gira indietro |
| LOW | LOW | Il motore è fermo |
| HIGH | HIGH | Vietata in questo montaggio, non usate questa combinazione |
La velocità si regola con segnale PWM sui pin ENA (motore A) ed ENB (motore B). Su Arduino Uno, la funzione analogWrite accetta valori da 0 a 255. Il valore 0 significa motore fermo, mentre 255 significa alimentazione continua. La tensione media che arriva al motore è approssimativamente Vmotor = (VS - Vcaduta) x PWM / 255.
Il circuito L298N perde internamente una parte della tensione, circa 1.8 - 3.2 V con una corrente di 1 A e quasi 5 V a 2 A. Nel nostro montaggio VS è 9 V, quindi con PWM 255 un motore che assorbe circa 1 A riceve circa 7 V. I motori TT sono fatti per 3 - 6 V, perciò limitiamo il valore PWM a 200. A 200, la tensione media è circa 7 x 200 / 255 = 5.5 V, cioè nell'intervallo sicuro dei motori.
Il modulo ha anche un regolatore 78M05 che può produrre 5 V per la logica. Con il jumper 5V-EN inserito, il regolatore è attivo e il morsetto +5V diventa un'uscita a 5 V, con una corrente fino a 0.5 A. Questa soluzione si usa solo quando la tensione VS è di al massimo 12 V. Sopra 12 V si toglie il jumper e il morsetto +5V si alimenta dall'esterno.
Collegamento:
Alimentate i motori con un alimentatore di rete da 9 VDC con almeno 1 A, collegato tramite l'adattatore jack con morsetti a vite. La scheda Arduino Uno resta alimentata separatamente, tramite il cavo USB. La massa dell'alimentatore, la massa del modulo e la massa della scheda Uno devono essere unite, altrimenti i segnali di comando non hanno un riferimento comune e i motori non rispondono correttamente. Gli ingressi del modulo accettano direttamente il livello logico a 5 V della scheda Uno, quindi non serve un convertitore di livello.
| Pin del prodotto | Si collega a | Funzione |
|---|---|---|
| +12V (VS) | Il positivo dell'alimentatore da 9 VDC | Alimentazione dei motori |
| GND | Il negativo dell'alimentatore da 9 VDC e il pin GND della scheda Uno | Massa comune |
| +5V | Non collegato | Con il jumper 5V-EN inserito è un'uscita a 5 V, la scheda Uno resta alimentata tramite USB |
| ENA | D9 (PWM) | Velocità del motore A |
| IN1 | D8 | Senso del motore A |
| IN2 | D7 | Senso del motore A |
| IN3 | D5 | Senso del motore B |
| IN4 | D4 | Senso del motore B |
| ENB | D3 (PWM) | Velocità del motore B |
| OUT1 | Filo rosso del motore A | Uscita motore A |
| OUT2 | Filo nero del motore A | Uscita motore A |
| OUT3 | Filo rosso del motore B | Uscita motore B |
| OUT4 | Filo nero del motore B | Uscita motore B |
Rimuovete i jumper da ENA ed ENB prima di alimentare il modulo, così potete regolare la velocità con PWM. Il modulo ha già sulla scheda due condensatori da 220 uF e i diodi di protezione per i motori, quindi non devono essere aggiunti componenti supplementari.
Pulsanti, regolazioni e indicatori:
| Elemento | Cosa fa | Come si usa |
|---|---|---|
| Jumper 5V-EN | Attiva il regolatore a 5 V del modulo | Si lascia inserito quando VS è 12 V o meno, come in questo tutorial. Si toglie quando VS supera 12 V, e il morsetto +5V si alimenta dall'esterno |
| Jumper ENA | Fissa l'ingresso ENA a 5 V, quindi il motore A va sempre alla velocità massima | Si toglie, così il pin D9 può comandare la velocità tramite PWM |
| Jumper ENB | Fissa l'ingresso ENB a 5 V, quindi il motore B va sempre alla velocità massima | Si toglie, così il pin D3 può comandare la velocità tramite PWM |
| LED di alimentazione | Indica la presenza dell'alimentazione sul modulo | Si accende quando il modulo riceve tensione. Se resta spento, verificate l'alimentatore e il morsetto +12V |
Jumper 5V-EN: iniziate con il jumper inserito. In questo montaggio VS è 9 V, quindi il regolatore può restare attivo. Il morsetto +5V non si collega ad Arduino, perché la scheda Uno è alimentata tramite USB. Non alimentate mai il morsetto +5V dall'esterno finché il jumper è inserito.
Jumper ENA ed ENB: rimuoveteli entrambi prima del primo avvio. Con il jumper inserito, il motore corrispondente gira sempre alla velocità massima e il comando PWM non ha alcun effetto. La regolazione funziona quando la velocità del motore cambia mentre il programma varia il valore di analogWrite.
LED di alimentazione: dopo aver collegato l'alimentatore, deve accendersi subito. È la prima cosa da verificare quando qualcosa non funziona.
Scheda e librerie:
Nell'IDE di Arduino selezionate Tools > Board > Arduino AVR Boards > Arduino Uno. Il pacchetto Arduino AVR Boards è incluso nell'IDE di Arduino, quindi non deve essere installato separatamente. Il programma usa solo le funzioni di base di Arduino, perciò non è necessario installare alcuna libreria.
Il codice:
Il programma fa girare ciascun motore avanti e indietro, a due velocità, poi fa girare insieme entrambi i motori. Copiatelo nell'IDE di Arduino e caricatelo sulla scheda Uno.
/*
L298N dual H-bridge motor driver demo
Board: Arduino Uno (Tools > Board > Arduino AVR Boards > Arduino Uno)
Libraries: none, the sketch uses only the core Arduino functions
Wiring:
ENA -> D9 (PWM) IN1 -> D8 IN2 -> D7
ENB -> D3 (PWM) IN3 -> D5 IN4 -> D4
L298N GND -> Arduino GND and the adapter minus
L298N +12V -> adapter plus (9 VDC, min. 1 A)
Remove the ENA and ENB jumpers so PWM can control the speed
*/
// Motor A pins
const int ENA = 9; // Speed of motor A (PWM)
const int IN1 = 8; // Direction input 1 of motor A
const int IN2 = 7; // Direction input 2 of motor A
// Motor B pins
const int ENB = 3; // Speed of motor B (PWM)
const int IN3 = 5; // Direction input 1 of motor B
const int IN4 = 4; // Direction input 2 of motor B
// Maximum PWM value, keeps 3-6 V motors in a safe range when VS is 9 V
const int MAX_PWM = 200;
// Run motor A at a given speed, forward or backward
void setMotorA(int speed, bool forward) {
speed = constrain(speed, 0, MAX_PWM); // Limit the speed
// Write LOW first, so both inputs are never HIGH at the same time
digitalWrite(forward ? IN2 : IN1, LOW);
digitalWrite(forward ? IN1 : IN2, HIGH);
analogWrite(ENA, speed); // Apply the speed
Serial.print("Motor A: ");
Serial.print(forward ? "forward" : "backward");
Serial.print(", PWM ");
Serial.println(speed);
}
// Run motor B at a given speed, forward or backward
void setMotorB(int speed, bool forward) {
speed = constrain(speed, 0, MAX_PWM); // Limit the speed
// Write LOW first, so both inputs are never HIGH at the same time
digitalWrite(forward ? IN4 : IN3, LOW);
digitalWrite(forward ? IN3 : IN4, HIGH);
analogWrite(ENB, speed); // Apply the speed
Serial.print("Motor B: ");
Serial.print(forward ? "forward" : "backward");
Serial.print(", PWM ");
Serial.println(speed);
}
// Stop motor A
void stopMotorA() {
analogWrite(ENA, 0); // No drive
digitalWrite(IN1, LOW); // Both inputs LOW
digitalWrite(IN2, LOW);
Serial.println("Motor A: stopped");
}
// Stop motor B
void stopMotorB() {
analogWrite(ENB, 0); // No drive
digitalWrite(IN3, LOW); // Both inputs LOW
digitalWrite(IN4, LOW);
Serial.println("Motor B: stopped");
}
void setup() {
// Configure all control pins as outputs
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600); // Start the serial monitor
Serial.println("L298N motor driver test started");
// Make sure both motors are off at start
stopMotorA();
stopMotorB();
delay(1000);
}
void loop() {
// Motor A: forward at two speeds, then backward
setMotorA(120, true);
delay(2000);
setMotorA(200, true);
delay(2000);
stopMotorA();
delay(1000);
setMotorA(200, false);
delay(2000);
stopMotorA();
delay(1000);
// Motor B: forward, then backward
setMotorB(200, true);
delay(2000);
stopMotorB();
delay(1000);
setMotorB(200, false);
delay(2000);
stopMotorB();
delay(1000);
// Both motors together
setMotorA(150, true);
setMotorB(150, true);
delay(3000);
stopMotorA();
stopMotorB();
delay(3000); // Pause before the cycle repeats
}
Come funziona il codice:
All'inizio vengono definiti i pin con le costanti ENA, IN1, IN2, ENB, IN3 e IN4, esattamente come nella tabella di collegamento. La costante MAX_PWM ha valore 200 e limita la velocità, così che i motori TT non ricevano più di 6 V.
Nella funzione setup tutti i pin vengono configurati come uscite, il monitor seriale si avvia a 9600 baud e entrambi i motori vengono fermati, così che non parta nulla di indesiderato al reset.
Le funzioni setMotorA e setMotorB ricevono la velocità e il senso. Limitano la velocità con constrain, scrivono prima il livello LOW sull'ingresso che deve restare inattivo e solo dopo HIGH sull'altro. In questo modo i due ingressi dello stesso motore non sono mai HIGH contemporaneamente. Alla fine, analogWrite applica la velocità al pin di enable. Le funzioni stopMotorA e stopMotorB portano entrambi gli ingressi su LOW e la velocità a 0.
La funzione loop esegue la sequenza di test: motore A avanti a due velocità, arresto, motore A indietro, poi gli stessi passaggi per il motore B e infine entrambi i motori insieme. Le pause si fanno con delay, e i messaggi sul monitor seriale indicano ad ogni passo quale comando è stato inviato.
Risultato:
Aprite il Serial Monitor a 9600 baud. Dopo il caricamento del programma vedrete i messaggi sotto, e i motori si muovono nello stesso ordine. Se un motore gira in senso opposto rispetto al messaggio, invertite tra loro i due fili di quel motore sul morsetto OUT.
L298N motor driver test started
Motor A: stopped
Motor B: stopped
Motor A: forward, PWM 120
Motor A: forward, PWM 200
Motor A: stopped
Motor A: backward, PWM 200
Motor A: stopped
Motor B: forward, PWM 200
Motor B: stopped
Motor B: backward, PWM 200
Motor B: stopped
Problemi frequenti:
I motori non si muovono affatto. La causa più comune è l'alimentazione o la massa. Verificate che il LED di alimentazione sia acceso e che il GND della scheda Uno sia unito al GND del modulo. Senza massa comune i segnali di comando non vengono riconosciuti.
Un motore va sempre alla velocità massima, indipendentemente dal valore PWM. Il jumper ENA o ENB è ancora inserito. Toglietelo, così il pin D9 o D3 può controllare la velocità.
Il motore ronza ma non parte alle velocità basse. Sotto un certo valore PWM la tensione media è troppo bassa per vincere gli attriti del riduttore. Aumentate il valore di analogWrite o, se serve, usate una tensione VS più alta.
Il motore gira in senso opposto a quello desiderato. Invertite tra loro i due fili del motore al morsetto OUT, oppure scambiate nel codice i valori HIGH e LOW per quel motore.
La scheda Uno si riavvia quando partono i motori. I motori producono disturbi e cali di tensione sulla massa. Controllate i fili di massa, usate un alimentatore che fornisca almeno 1 A e tenete i fili dei motori lontani da quelli di segnale.
Il dissipatore del modulo si scalda. È normale con correnti elevate, perché una parte della potenza si perde nel circuito L298N. Se è troppo caldo per essere toccato a lungo, riducete il carico o assicurate una ventilazione.
Limiti e consigli:
Il modulo accetta per i motori tensioni da 5 - 35 VDC e può erogare fino a 2 A per canale. A causa della caduta di tensione interna, il motore riceve meno della tensione di alimentazione, quindi scegliete VS con 2 - 3 V in più rispetto alla tensione nominale del motore. Per motori piccoli da 3 - 6 V, un'alimentazione da 9 V con la limitazione PWM a circa 200 è una scelta sicura.
Il circuito L298N non è efficiente, quindi per motori alimentati a batteria e con consumo elevato un driver con transistor MOSFET è più adatto. In compenso il modulo è molto valido per imparare e per piccoli robot. Con lo stesso montaggio potete costruire un robot a due ruote, aggiungendo un sensore di distanza o un telecomando. Non applicate mai HIGH contemporaneamente su IN1 e IN2 oppure su IN3 e IN4.