L298N Dual H-Bridge
Motor Controller

ultimo aggiornamento 28 maggio 2017


JLCPCB - 2$ per prototipi di PCB, di qualsiasi colore. Produzione in 24 ore!
L'Azienda di prototipi PCB più popolare, con oltre 700.000 clienti in tutto il mondo!
Recati presso la JLCPCB, riceverai regali e coupon gratuiti
presso Maker Faire Rome il 18-20 ottobre


Indice

Descrizione del modulo

Tra i tanti moduli ora in commercio per pilotare dei motori elettrici in corrente continua se ne può trovare una denominata L298N Dual H-Bridge Motor Controller di piccole dimensioni ed estremamente compatta misura solo 4.3 cm x 4.3 cm x 2.7 cm e dal peso di soli 28 gr.
Si tratta di una scheda driver con finale L298 della STMicroelectronics, al suo interno troviamo due ponti H integrati,che supportano un elevato voltaggio (teoricamente sino a 46V) ed elevate correnti (2A per ponte) e che possono essere pilotati con livelli in logica TTL. Ciascun ponte può essere disabilitato o abilitato tramite il relativo piedino di enable per comandare un motore passo passo o due motori DC direttamente da Arduino o altri microcontrollori .

 

OurPCB, your most reliable PCB and PCBA supplier.

Focusing on PCB Prototype and PCB Assembly Turnkey Services.

One-Stop Wire Harness & Cable Assemblies Solution

Sulla scheda, oltre all' integrato L298, troviamo i diodi di ricircolo, per la sua alimentazione è richiesta una doppia alimentazione: 5Vdc per la logica e una tensione compresa tra 5 e 35Vdc per l'alimentazione del motore, la corrente in uscita è di ben 2A su ogni canale.

Altri progetti con moduli per il comando di motori

Motor shield

Infineon motor Shield

modkit MotoProto L298 L293 shield
 Scheda con L297 - L298N Modulo con L293 Modulo con doppio L293 Modulo con ULN2003A
   
Modulo con TB6612FNG Modulo con LB1836M    

Schema elettrico del modulo
L298N Dual H-Bridge Motor Controller

Principali componenti del modulo

 L298 -  Driver per ponte H

Piedinatura Datasheet Foto dell'integrato

M7 - SMD diodo rettificatore 1A

Piedinatura Datasheet Foto

LM78MXX Series 3-Terminal Positive Voltage Regulators -  500 mA

Piedinatura Datasheet Foto dell'integrato

Descrizione pin

 

Descrizione
1 ENA -  ponticello di abilitazione motore a corrente continua A  Non rimuovere nel caso si  utilizzi un motore passo-passo. Connettersi a un'uscita PWM per il controllo della velocità del motore DC.
2 IN 1
3 IN 2
4 IN 3
5 IN 4
6 ENB -  ponticello di abilitazione motore a corrente continua B  Non rimuovere nel caso si  utilizzi un motore passo-passo. Connettersi a un'uscita PWM per il controllo della velocità del motore DC.
7 Collegare la tensione di alimentazione del motore, massima di 35V DC. Rimuovere il ponticello [10] se la tensione è > 12V DC
8 GND
9 uscita 5V se 12V ponticello in luogo, ideale per alimentare il vostro Arduino (etc)
10 jumper 12V  - rimuovere questo se si utilizza una tensione di alimentazione superiore a 12V DC. Ciò consente l'alimentazione tramite il regolatore 5V di bordo
11 DC motor 1 "+" o motore passo-passo A +
12 motore DC 1 "-" o motore passo-passo A-
13 motore a corrente continua 2 "+" o motore passo-passo B +
14 motore DC 2 "-" o motore passo-passo B-

 

Gestione di due motori DC

Per controllare uno o due motori a corrente continua è abbastanza facile con il L298N Dual H-Bridge Motor Controller. Sotto vediamo i principali componenti necessari

Schema di collegamento

 

Programma per il test

Il programma di test proposto, permette di comandare la rotazione, cambio di direzione, STOP dei due motori, inviando da tastiera l'opportuno comando.
Modificando il valore della variabile speed , di default impostata a 200, si varierà la velocità di rotazione di entrambi i motori.

Tasti di controllo:
  1 -Motor 1 Avanti
  2 -Motor 1 FERMO
  3 -Motor 1 Indietro
  4 -Motor 2 Avanti
  5 -Motor 2 FERMO
  6 -Motor 2 Indietro

 

Programma


Test_2_motori-L298.ino

Schema collegamento


Modulo L298 DC motor.fzz

 

/*
 Test_2_motori-L298.ino
 Programma per testare il comando di due motori DC tramite un
 L298N Dual H-Bridge Motor Controller

 Vengono utilizzati i seguenti pin
 Pin Vin           -> Alimentazione motori
 Pin GND           -> Pin GND
 Pin Digital 2     -> Collegato al pin IN1
 Pin Digital 3     -> Collegato al pin IN2
 Pin Digital 4     -> Collegato al pin IN3
 Pin Digital 5     -> Collegato al pin IN4
 Pin Digital 9     -> Collegato al pin ENA
 Pin Digital 10    -> Collegato al pin ENB

 Tasti di controllo:
  1 -Motor 1 Avanti
  2 -Motor 1 FERMO
  3 -Motor 1 Indietro
  4 -Motor 2 Avanti
  5 -Motor 2 FERMO
  6 -Motor 2 Indietro

 Creato il 30//04/2016 da Adriano Gandolfo
 Sito web        https://www.adrirobot.it 
 Canale Youtube  https://www.youtube.com/user/adrirobot 
 Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955/ 
 Blog            http://it.emcelettronica.com/author/adrirobot 
 This example code is in the public domain.
 */

// Imposta i pin di controllo del L298N Dual H-Bridge Motor Controller

// Motore 1
int dir1PinA = 2;
int dir2PinA = 3;
int speedPinA = 9; // Deve essere un pino PWM per essere 
                   //in grado di controllare la velocità del motore

// Motore 2
int dir1PinB = 4;
int dir2PinB = 5;
int speedPinB = 10; // Deve essere un pino PWM per essere in grado
                    // di controllare la velocità del motore

void setup() {  // Installazione eseguita una volta al ripristino
  // initialize serial communication @ 9600 baud:
  Serial.begin(9600);

  //Definisce il pins del L298N Dual H-Bridge Motor Controller

  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  pinMode(speedPinA, OUTPUT);
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);
  pinMode(speedPinB, OUTPUT);

  Serial.println("Test modulo L298");
  Serial.println("1 - Motore 1 Avanti");
  Serial.println("2 - Motore 1 STOP");
  Serial.println("3 - Motore 1 Indietro");
  Serial.println("4 - Motore 2 Avanti");
  Serial.println("5 - Motore 2 STOP");
  Serial.println("6 - Motore 2 Indietro");
  Serial.println("   ");
}

void loop() {

  // Inizializza l'interfaccia seriale:

  if (Serial.available() > 0) {
    int inByte = Serial.read();
    //int speed; // Local variable
    int speed = 200;
    switch (inByte) {

      //______________Motore 1______________

      case '1': // Motor 1 Avanti
        analogWrite(speedPinA, speed);//Imposta la velocità via PWM
        digitalWrite(dir1PinA, LOW);
        digitalWrite(dir2PinA, HIGH);
        Serial.println("Motore 1 Avanti"); // Scrive sul monitor seriale
        Serial.println("   "); // Crea una linea bianca sul monitor seriale
        break;

      case '2': // Motor 1 Fermo
        analogWrite(speedPinA, 0);
        digitalWrite(dir1PinA, LOW);
        digitalWrite(dir2PinA, LOW);
        Serial.println("Motore 1 Fermo");
        Serial.println("   ");
        break;

      case '3': // Motor 1 Indietro
        analogWrite(speedPinA, speed);
        digitalWrite(dir1PinA, HIGH);
        digitalWrite(dir2PinA, LOW);
        Serial.println("Motore 1 Indietro");
        Serial.println("   ");
        break;

      //______________Motore 2______________

      case '4': // Motore 2 Avanti
        analogWrite(speedPinB, speed);
        digitalWrite(dir1PinB, LOW);
        digitalWrite(dir2PinB, HIGH);
        Serial.println("Motore 2 Avanti");
        Serial.println("   ");
        break;

      case '5': // Motore 1 FERMO
        analogWrite(speedPinB, 0);
        digitalWrite(dir1PinB, LOW);
        digitalWrite(dir2PinB, LOW);
        Serial.println("Motore 2 Fermo");
        Serial.println("   ");
        break;

      case '6': // Motore 2 Indietro
        analogWrite(speedPinB, speed);
        digitalWrite(dir1PinB, HIGH);
        digitalWrite(dir2PinB, LOW);
        Serial.println("Motore 2 Indietro");
        Serial.println("   ");
        break;

      default:
        // Imposta tutti i pin a OFF se si preme un tasto non mappato:
        for (int thisPin = 2; thisPin < 11; thisPin++) {
          digitalWrite(thisPin, LOW);
        }
    }
  }
}

 

Libreria di gestione per Arduino

Per semplificare la gestione del modulo, è possibile utilizzare una libreria realizzata da yohendry, con questa libreria il codice è molto semplificato.
Nella prima parte sono assegnati i vari pin, viene poi creato l'oggetto controllare un motore passo-passo o stepper bipolare con l'utilizzo del L298N Dual H-Bridge Motor Controller. sono necessari i principali componenti sotto riportati

Prima di utilizzare la libreria, la si dovrà scaricare accedendo a questo link
Una volta scaricata la libreria in formato zip si dovrà andare al menu Sketch -> #Include Libreria -> Aggiungi libreria da file .ZIP e aggiungere la libreria appena scaricata

Nella sezione esempi della libreria potrete caricare questo esempio che gestisce direttamente due motori DC
 

#include <L298N.h>
const int ENA = 6;
const int IN1 = 8;
const int IN2 = 7;
const int IN3 = 2;
const int IN4 = 4;
const int ENB = 3;
L298N driver(ENA,IN1,IN2,IN3,IN4,ENB); 
int time_delay = 500;
int speed = 150;
void setup()
{
}

void loop()
{
  driver.forward(speed,time_delay);
  driver.full_stop(time_delay);
  driver.turn_right(speed,time_delay);
  driver.full_stop(time_delay);
  driver.turn_left(speed,time_delay);
  driver.full_stop(time_delay);
  driver.backward(speed,time_delay);
}

Schema di collegamento

Gestione di un motore stepper

Per controllare un motore passo-passo o stepper bipolare con l'utilizzo del L298N Dual H-Bridge Motor Controller. sono necessari i principali componenti sotto riportati

 

 

Foto del motore utilizzato per i test

 

Schema di collegamento
 
Programma per il test

Il programma di test proposto, permette di controllare la velocità di rotazione del motore passo-passo agendo sul potenziometro. Il programma fa uso della libreria Stepper.h che permette di gestire sia stepper unipolari che bipolari. Sono disponibili i seguenti comandi/istanze.

Stepper (steps, pin1, pin2, pin3, pin4) crea l'istanza per comandare il motore, steps è il numero di passi che deve fare un motore per compiere un giro del motore.
Se è disponibile il numero di gradi per passo, dividere il numero per 360 per ottenere il numero di steps (ad esempio 360 / 1,8 dà 200 steps).    pin1, pin2, pin3, pin4
sono il numero dei pin di Arduino per pilotare il motore
setSpeed (rpm) Imposta la velocità del motore in giri al minuto ( RPM ).
step( steps) 
Attiva il motore per un numero specifico di steps, ad una velocità determinata dalla chiamata più recente per SetSpeed ().

 

 

/*
 Test_stepper-L298.ino
 Programma per testare il comando di un motore stepper tramite
 un L298N Dual H-Bridge Motor Controller

 Vengono utilizzati i seguenti pin
 Pin +5V           -> Pin laterale del potenziometro
 Pin GND           -> Pin GND modulo e pin laterale potenz.
 Pin Digital 2     -> Collegato al pin IN1
 Pin Digital 3     -> Collegato al pin IN2
 Pin Digital 4     -> Collegato al pin IN3
 Pin Digital 5     -> Collegato al pin IN4
 Pin Analog A0     -> Collagato al centrale del potenziometro

 Modificato il 2//05/2016 da Adriano Gandolfo
 Basato su quello modificato 28 Oct 2010
 da Tom Igoe 
 Sito web        https://www.adrirobot.it 


 Canale Youtube  https://www.youtube.com/user/adrirobot 


 Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955/ 


 Blog            http://it.emcelettronica.com/author/adrirobot 


 This example code is in the public domain.
 */
 
#include <Stepper.h>

const int stepsPerRevolution = 200;
//cambiare questo per adattare il numero di passi per giro
//per il vostro motore da calcolare dividendo 360° con il
//numero di gradi per passo

// Inizializzare la libreria passo-passo su pin da 2 a 5:
Stepper myStepper(stepsPerRevolution, 2,3,4,5);           

int stepCount = 0;       // numero di passi del motore

void setup() {
  // niente da fare all'interno della configurazione
}

void loop() {
  // Legge il valore della tensione fornito dal potenziometro:
  int sensorReading = analogRead(A0);
  // mappa il valore nel range da 0 a 100:
  int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
  // Imposta la velocità del motore:
  if (motorSpeed > 0) {
    myStepper.setSpeed(motorSpeed);
    // step 1/100 of a revolution:
    myStepper.step(stepsPerRevolution/100);
  } 
}
 

 

Elenco revisioni

28/05/2017

Aggiornato pagina, inserito riferimento libreria per gestione motori DC

06/05/2016

Emissione preliminare