mercoledì 28 febbraio 2018

L298N Driver Motori con Arduino








Oggi mi e' capitato sotto mano una scheda driver motore basata sull'integrato L298N.

In questo post faccio la prova della scheda e la interfaccio ad Arduino.


Scheda Motori L298N


La schedina e' un controller/driver per 2 motori DC che si può' interfacciare ad Arduino e ESP8266 e ovviamente a moltissimi altri micro o schede di sviluppo.

Questa scheda può' essere usata anche per controllare dei motori passo passo ma non e' oggetto di questo post.











La scheda si basa sull'integrato L298N che e' un doppio H-Bridge e può' controllare 2 motori DC per un totale di 4A.



Scheda L298N Piedinatura


In foto vediamo i pin ed i connettori disponibili sulla scheda




I due connettori laterali sono dedicati alla connessione dei due motori DC. L'ordine di connessione dei fili non e' importante.

Il connettore frontale serve per l'alimentazione:

  • +12V: alimentazione fino a 12V
  • GND
  • +5V: questo pin e' un uscita e fornisce 5 Volt. L'uscita e' attiva solo se il relativo ponticello (+5V Enable) e' presente

Il successivo connettore e' formato da 2 ponticelli e 4 pin:

  • Enable Output A: abilita il motore A
  • IN1 - IN2: controllo rotazione motore A
  • IN3 - IN4: controllo rotazione motore B
  • Enable Output B: abilita motore B


E' importante notare come i pin di Enable Output A/B permettano di controllare la velocità' di rotazione dei due motore.










Rotazione senza controllo di velocità


Vediamo ora l'utilizzo di questa scheda driver con Arduino.

Nell'esempio sotto riportato vediamo come effettuare il circuito su breadboard per controllare la rotazione in senso orario e antiorario di un motore DC.






Qui la realizzazione su breadboard






Come si può' osservare in questo case ho lasciato il ponticello su Enable Output A.

Vediamo ora un semplice codice di controllo




Come si vede ci sono tre stati per i GPIO 7 e 8:


  1. GPIO 7 = HIGH - GPIO 8 = LOW --> il motore ruota in senso orario
  2. GPIO 7 = LOW - GPIO 8 = HIGH --> il motore ruota in senso antiorario
  3. GPIO 7 = LOW - GPIO 8 = LOW --> il motore e' fermo

Quindi questa scheda ci permette di controllare la rotazione di uno o due motori DC in maniera semplicissima utilizzando solamente 2 GPIO per motore.

I motori ovviamente sono controllabili indipendentemente l'uno dall'altro. 

Questo per esempio e' molto utile nei classici progetti di RobotCar o simili














Rotazione con controllo di velocità'


Nell'esempio sotto riportato vediamo come effettuare il circuito su breadboard per controllare la rotazione in senso orario e antiorario di un motore DC con controllo di velocità'.

Nello sketch vedremo come e' possibile anche variare la velocità' di rotazione del motore permettendo di accelerare e decelerare (io lo faccio vedere con accelerazione costante per semplicità').





Come si vede l'unica differenza con lo schema precedente e' che ho rimosso il ponticello Enable Output A ed ho collegato il pin and un GPIO PWM (#9) di Arduino.

E' importante che sia connesso ad un GPIO con uscita PWM, solo cosi' potremo controllare la velocità' proporzionalmente al valore in uscita sul pin PWM.


Qui la realizzazione su breadboard






Vediamo ora un semplice codice di controllo




Come si vede la gestione dei GPIO 7 e 8 e' uguale al caso precedente.

Nella funzione motor_accel ho aggiunto il controllo della velocità' accelerando in modo uniforme da zero alla massima velocità' e analogamente decelerando fino a zero prima di cambiare senso di rotazione.

Nella funzione si vede chiaramente che il controllo della velocità' di rotazione e' determinato dalla scrittura sul GPIO 9 di un valore tra 0 (fermo) e 255 (massima velocità').