Motor shield per robot

Tra gli ultimi acquisti fatti mi ha incuriosito una Motor shield prodotta in Italia non da Arduino ma con alcune caratteristiche davvero interessanti per essere utilizzata su un robot:

Motor shield

La Motor shield della microbot distribuita da robot-domestici.it ha:

  • integrato L298 prodotto dalla STMicroelectronics;
  • due pin digitali ( D7 e D8 ) disponibili per comandi esterni;
  • due pin analogici ( A2 e A3 ) disponibili per input esterni;
  • controllo della corrente assorbita da ogni singolo motore;
  • freno motore;
  • integrato TCN75A che comunica con Arduino mediante I2C la temperatura della shield;

Effettivamente non sono poche le cose che la Motor shield può fare per il tuo robot, in questo primo test ti concentrerai sulla parte di controllo dei due canali, il freno motore e il controllo della corrente assorbita, in un prossimo test proverai il sensore di temperatura e gli input / output su pin esterni.

specifiche tecniche della Motor shield

La Motor shield presenta le seguenti specifiche tecniche:

Motor shield specifiche

sono prese direttamente dalla documentazione fornita dal Produttore.

La documentazione tecnica della Motor shield contiene anche altre informazioni molto interessanti, i pin di controlla tra Arduino e la shield per controllare i motori:

Motor shield pin controllo

ed anche uno schema dei segnali che devi inviare alla motor shield per controllare i due canali ( A e B ):

Motor shield segnali

tutte queste informazioni sono molto utili quando dovrai realizzare il tuo sketch per un robot.

Come riporta anche la documentazione ufficiale lo schema in Tab.2 della motor shield riporta solo i segnali da inviare ai pin del canale A, tali segnali sono identici anche per il canale B, ti basta sostituire i pin a cui invii tali segnali.

Controllo assorbimento dei motori

Il controllo di quanto assorbe un motore in un robot o in un progetto complesso può indicarti un’informazione fondamentale sia per evitare di:

  • bruciare il motore;
  • fondere il chip L298 di controllo della motor shield;
  • capire se un motore sta andando in stallo, ossia è bloccato meccanicamente;
queste informazioni puoi ricavarle attraverso i pin analogici della motor shield connessa ad arduino A0 ed A1 rispettivamente per il canale A e B.
Come sai i pin analogici di arduino sono collegati ad un ADC ( convertitore analogico digitale a 10bit ) per cui una tensione di 5v sul pin A0 produce un segnale digitale di 1023 ed è il valore massimo di tensione che puoi inviare ad un pin di questo tipo.
La motor shield è dotata di un convertitore I2V in cui la corrente misurata su un canale viene trasformata in una tensione con rapporto 2.4 ossia con 1A di assorbimento del motore il valore di tensione sul pin A0 o A1 è 2,4v.
Avrai calcolato da solo che essendo il drver L298 in grado di erogare 2A di corrente massima potrai avere sul pin A0 o A1 un valore massimo di 4,6v.
Se vuoi calcolare che valore leggi sul pin A0 puoi usare la proporzione:
    1023 : 5v = X : 2,4v => X= (2,4 x 1023) / 5 => X = 491
Calcolare la corrente assorbita è quindi un gioco di formule in cui se leggi 12 come valore sul convertitore analogico digitale puoi stabilire che l’assorbimento del motore è:
    491 : 1000mA = 12 : I   =>    I = ( 12 x 1000 ) / 491  => 24,43 mA
ho eseguito i calcoli in milliampere ( 1A = 1000mA ) in quanto le correnti di esempio sono molto contenute.

Configurare la Motor shield

La motor shield ha alcuni jumper che puoi utilizzare per configurarla al meglio, puoi ad esempio escludere il controllo della corrente assorbita dai motori se non reputi utile al progetto tale controllo, spostando i jumper:

Motor shield jumper

oppure puoi configurare da dove prendere alimentazione per i motori, se usare l’alimentazione proveniente dal Vin di Arduino o alimentare i motori con l’alimentazione esterna prevista sulla motor shield:

Motor shield jumper

ti consiglio di usare sempre questa per non compromettere Arduino, inoltre la tensione supportata dalla motor shield per alimentare i motori è di 46v di picco e Arduino non potrebbe mai permetterti di utilizzare tali tensioni senza danneggiarsi.

Lo sketch di test della Motor shield

lo sketch di esempio che ho utilizzato è molto semplice, conta che per scriverlo ho impiegato 6min circa 🙂 non perché sia veloce a scriverlo ma perché dopo la lettura della documentazione tecnica è stato davvero semplice:

/**********************************************************
 * Motor Shield Robot
 *
 * Data creazione  15 marzo 2013
 * Ultima modifica 15 marzo 2013
 *
 * autore: Mauro Alfieri
 * web:    mauroalfieri.it
 * tw:     @mauroalfieri
 *
/**********************************************************/

#define inputA1  9
#define inputA2 10
#define enableA  3

#define inputB1  2
#define inputB2  6
#define enableB  5

#define ampereA A0
#define ampereB A1

#define buttonA  4
#define buttonB  7
#define buttonC  8
#define buttonD 11

int velocitaA  = 0;
int velocitaB  = 0;

void setup() {
  Serial.begin( 9600 );

  pinMode( inputA1,OUTPUT );
  pinMode( inputA2,OUTPUT );
  pinMode( enableA,OUTPUT );

  pinMode( inputB1,OUTPUT );
  pinMode( inputB2,OUTPUT );
  pinMode( enableB,OUTPUT );  

  pinMode( ampereA,INPUT );
  pinMode( ampereB,INPUT );

  Serial.println( "----- Avvio -----");
}

void loop() {
  int pressedA = digitalRead( buttonA );
  int pressedB = digitalRead( buttonB );
  int pressedC = digitalRead( buttonC );
  int pressedD = digitalRead( buttonD );

  digitalWrite( inputA1,pressedA );
  digitalWrite( inputA2,pressedB );
  digitalWrite( inputB1,pressedC );
  digitalWrite( inputB2,pressedD );

  analogWrite( enableA,255 );
  analogWrite( enableB,255 );

  Serial.print( "C Motor A: " );
  Serial.print( analogRead( ampereA ) );
  Serial.print( "C Motor B: " );
  Serial.print( analogRead( ampereB ) );
  Serial.print( "\n" );

  delay( 500 );
}

per eseguire i test ho utilizzato 4 pulsanti rispettivamente collegati ai pin di arduino 4,7,8,11 ognuno dei pulsanti mi serve a comandare uno dei canali di input della motor shield, come vedi nello sketch.

Alle linee 50-53: leggi il valore proveniente dai 4 pin digitali;

linee 55-58: imposti il valore digitale di OUTPUT della motor shield con il valore appena letto dagli INPUT digitali;

linee 60-61: imposta a 255 il valore analogico di OUTPUT per i due canali, in pratica mandi al massimo entrambi i motori;

linee 63-67: leggi i valori di A0 ed A1, su cui ricevi l’informazione di corrente assorbita e scrivili sul monitor seriale.

Si tratta di uno sketch di esempio di cui ho realizzato anche un video:

in cui vedi anche i valori di corrente letti sul monitor seriale durante il test.

Buon divertimento.

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

Permanent link to this article: https://www.mauroalfieri.it/elettronica/motor-shield-per-robot.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.