Serial controller motor driver

Il Serial controller motor driver è il driver per il controllo dei motori DC della sparkfun che ti permette di controllare due motori in corrente continua ( DC o CC ) con un solo pin Arduino.

serial controller motor driver

Il Serial controller motor driver usa l’integrato L298 come ponte H in grado di erogare 2A max per ciascun motore con una potenza totale erogabile di 4A.

La particolarità di questa shield è la presenza di un Atmega328 integrato nella shield con un proprio firmware in grado di acquisire le informazioni seriali con un protocollo definito dal produttore di cui rilascia il manuale utente.

Il protocollo di comunicazione seriale per il controllo motori

Quando usi una comunicazione seriale riduci notevolmente il numero di cavi e di conseguenza di pin necessari per impartire comandi, in questo caso ai motori, ma hai bisogno di un protocollo di comunicazione seriale, in questo caso è una sequenza di caratteri comprensibile sia a chi invia il comando sia a chi riceve il comando e lo converte in azione.

Il Serial controller motor driver ha un suo protocollo che il costruttore della shield ha realizzato e riporta nel manuale:

Serial controller motor driver protocol

Da cui deduci che supponendo di voler attivare il primo motore in avanti alla massima potenze dovrai inviare una stringa simile a:

Serial.print("1f9\r");

dove:

  • 1 è il motore che vuoi attivare
  • f è la direzione
  • 9 è la velocità a cui ruotare
  • \r ( nel manuale c’è un errore il carattere corretto è \r e non /r ) è il valore di chiusura del comando

Le velocità che puoi impostare vanno da 0 a 9 e il loro significato è il seguente:

Serial controller motor driver velocità

I collegamenti del Serial controller motor driver

Collegare il Serial controller motor driver è alquanto semplice, ti basta un solo pin, io ho scelto il pin 2, e il pin di massa ( Gnd ):

Serial controller motor driver arduino

nelle foto avrai notato anche il collegamneto del pin 5v ( rosso ) tra il driver e arduino, il costruttore del driver riporta:

5V is only to be used as an output as it is from the output of a regulator on the board

questo significa che puoi alimentare arduino attraverso la connessione ai 5v del driver ma non il contrario, siccome nel progetto il pin +5v di arduino era già occupato dal potenziometro ho deciso di utilizzare il connettore ICSP:

arduino ICSp

che riporta tra gli altri collegamenti i pin +5v e Gnd di tutta la scheda arduino.

Seguendo l’indicazione del manuale e la serigrafia presente sul serial controller motor driver puoi collegare dall’alto:

serial controller motor driver connessioni

  • l’alimentazione da 5v a 16v per i motori e il driver seriale
  • il pin Rx da collegare al pin 2 arduino
  • i pin Gnd e +5v da collegare al connettore ICSP arduino
  • M2- M2+ M1+ M1- a cui sono collegati i due motori ( M1 ed M2 )

i collegamenti verso arduino sono tre per consentire l’alimentazione di arduino attraverso i 5v provenienti dal serial controller motor driver.

Lo sketch del Serial controller motor driver

Passiamo a scrivere lo sketch di test:

/*
 * Serial Motor control by Mauro Alfieri
 * With SoftwareSerial.l libraries
 *
 * Web: www.mauroalfieri.it
 * Tw:  @mauroalfieri
 *
 */

#include <SoftwareSerial.h>

SoftwareSerial driverMotorA(0, 2); // RX, TX

int pinPot = A0;

int valPot = 0;
int vel = 0;

void setup()  
{
  pinMode( pinPot,INPUT);
  driverMotorA.begin(115200);
}

void loop() {

  valPot = analogRead( pinPot );
  vel = (valPot/113);

  driverMotorA.print("1f");
  driverMotorA.print(vel);
  driverMotorA.print("\r");

  delay( 1 );

  driverMotorA.print("2f");
  driverMotorA.print(vel);
  driverMotorA.print("\r");

  delay( 1 );
}

come hai visto uso la libreria SoftwareSerial.h il cui scopo è definire due pin dell’arduino uno non dedicati alla comunicazione seriale ( come ad esempio il pin 0 ed 1 ) e consentirti di utilizzarli come pin seriali, simula attraverso il software presente nella libreria il funzionamento di una porta seriale Tx ed Rx.

Alla linea 10: includi la libreria SoftwareSerial.h;

linea 12: definisci un istanza della libreria denominata driverMotorA( Rx,Tx ) nell’esempio il pin Rx lato arduino non mi serve e posso impostarlo a 0 l’unico che utilizzerò è il pin Tx per trasmettere i comandi al driver;

linea 14: definisci il pin a cui colleghi il potenziometro;

linee 16-17: definisci due variabili di tipo integer in cui memorizzeremo valore letto sul potenziometro e velocità;

linea 21: imposta il pin a cui è collegato il potenziometro come pin di INPUT;

linea 22: imposta la velocità di comunicazione seriale tra arduino ed il driver seriale per il controllo dei motori, secondo il costruttore la velocità deve essere impostata a 115200 baud;

linea 27: leggi il valore del potenziometro;

linea 28: calcola il valore di velocità da imporre ai motori, ricorda che il driver accetta da 0 a 9 e il potenziometro legge da 0 a 1023 per cui una semplice divisione per 113 risolve il problema della conversione da 1023 a 9;

linee 30-32: invia al driver la sequenza di caratteri seriali attesi: “1f9\r” dove 9 è in realtà il valore in velocità calcolato alla linea 28;

linea 34: imposta un delay di 1 millisecondo per consentire alla seriale di inviare il messaggio;

linee 36-40: esegui le stesse operazioni viste alle linee 30-34 per il secondo motore.

Il video

Ho realizzato un video in cui puoi seguire i collegamenti del serial controller motor driver e vedere come funziona il controllo dei motori:

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/serial-controller-motor-driver.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.