Moto shield
Presentazione
ultimo aggiornamento 14 gennaio 2012


 

La scheda motor shield permette collegata alla scheda Arduino duemilanove o Arduino UNO di pilotare due motori DC, questa è ora fuori produzione ma non dovrebbe essere difficile trovarne ancora, cercando in rete.
I motori possono essere tutti quelli del tipo DC che possono funzionare alla tensione di Vin che è la tensione di alimentazione elettrica della scheda .
Il driver del motore l'integrato SN754410 (L293D-compatible) può sopportare tensioni comprese tra 3.6V a 36V motori (1A).
Ma la scheda è progettata per prendere Vin dall'alimentazione elettrica dalla scheda Arduino / Freeduino, che è alimentato con una tensione di 5V, non è possibile alimentare il regolatore senza bruciarlo.
Se si vuole utilizzare un motore con una tensione di alimentazione con una tensione < 7V o > 14V, accorerà modificare la scheda, oppure prelevare la tensione non utilizzando il connettore della scheda.
Per altre informazioni vedere il link http://arduino.cc/playground/MotorControlShieldV3/0

arduino_motor-shield_vista_1.jpg arduino_motor-shield_vista_3.jpg

Il progetto della scheda si deve a David Cuartielles uno dei creatori della scheda Arduino.
La scheda il cui schema generale è riportato sotto permette il pilotaggio di due motori o di un motore passo-passo, è inoltre presente un circuito per il controllo di un encoder per rilevare la rotazione del motore, se questa parte del circuito non è utilizzata  i componenti che la formano potranno non essere montati (vedere Tabella)

homotix

PCBA

OurPCB

Schema generale della Shield Motor Control

arduino_motor-shield_disposizione_kit.jpg

motor shield stampato.JPG

Sigla

Valore

Circuito stampato

Arduino Motor shield PCB V3.0

C1,C2,C3,C4

100nF condensatore poliestere

C5,C6

100uF condensatore elettrolitico 25VDC

*IC1

74HC32N DIL14 Quad 2-input OR gate

IC3

SN754410 oppure L293D motor driver IC (DIP-16 package)

IC2

74HC00N DIL14 Quad 2-input NAND gate

* Led 1, Led 2

3mm LED rosso

Led PWR

3mm LED verde

* R1,R2

100KΏ 1/4W

R3,R4,R5,R6

100KΏ 1/4W

R7

1KΏ 1/4W

*R8,R9

2.2 KΏ 1/4W

R10,R11

470Ώ 1/4W

1

1x40 Pin strip passo 2,5mm

S1-S2

Pulsante da CS 6x6

Nota: i componenti segnati con * possono non essere montati poiché fanno parte del circuito encoder.

Schema pilotaggio motore

Nella figura sotto è visibile lo schema della sezione principale del circuito per il pilotaggio dei motori che utilizza come circuito principale un integrato tipo L293D, o in alternativa, un SN754410 pin to pin compatibile

Schema elettrico relativo alla sezione MOTORE

 SN754410 Driver per ponte H
Piedinatura Datasheet Foto dell'integrato

L293D Driver per ponte H
Piedinatura Datasheet Foto dell'integrato

Questo integrato è un driver a 4 canali di tipo push-pull nato appositamente per il controllo di motori elettrici funzionanti in continua, il suo compito è di tradurre il livello dei segnali di pilotaggio provenienti dal microcontrollore in segnali con livelli adatti al pilotaggio del motore.
Tramite questo driver otterremo la corrente necessaria al motore per lo start lo stop e, tramite il push-pull, la rotazione oraria ed antioraria.
Il modello scelto può fornire in uscita una corrente massima per ogni canale di 600mA con una corrente di picco (non ripetitiva) di 1,2 A, con una massima tensione di alimentazione limitata al valore di Vin della scheda Arduino.
Il circuito integrato in contenitore DIP16, contiene all’interno 4 amplificatori di potenza per il comando di motori in corrente continua o passo-passo (stepper motor).
Sono, inoltre, già presenti i diodi di protezione interni per il ricircolo della corrente.
Gli amplificatori di potenza possono essere usati indipendentemente l'uno dall'altro oppure in coppia per realizzare pilotaggi con configurazione a ponte;
Il controllo del funzionamento degli amplificatori è fatto mediante livelli di tensione compatibili TTL (HIGH:+5V, LOW:0V), dunque perfettamente interfacciabili con Arduino.
Per ogni coppia di amplificatori è presente un ingresso di abilitazione (ENABLE) che, se posto a livello logico ALTO ne abilita il funzionamento, se posto a livello BASSO pone gli stessi in stato di alta impedenza.
L'integrato è provvisto inoltre internamente sia di una protezione termica sia di una protezione contro i cortocircuiti delle uscite verso massa;
Per l'alimentazione della parte logica è utilizzata la tensione +5V sempre fornita dal regolatore presente sull’Arduino.

PIN

Sigla

Funzione

1

1,2EN

Comando abilitazione coppia amplificatori 1 e 2

2

1A

Ingresso comando amplificatore 1

3

1Y

Uscita amplificatore 1

4

GND

GND

5

GND

GND

6

2Y

Uscita amplificatore 2

7

2A

Ingresso comando amplificatore 2

8

VCC2

Ingresso tensione di alimentazione motori

9

3,4EN

Comando abilitazione coppia amplificatori 3 e 4

10

3A

Ingresso comando amplificatore 3

11

3Y

Uscita amplificatore 3

12

GND

GND

13

GND

GND

14

4Y

Uscita amplificatore 4

15

4A

Ingresso comando amplificatore 4

16

VCC1

Ingresso tensione di alimentazione logica di controllo

Per il suo funzionamento come visibile dallo schema di principio sarebbe necessario collegarlo ad un processore utilizzando 4 porte, 2 per motore, più due porte per il controllo dei pin di abilitazione

Schema di principio del circuito motore

La soluzione circuitale adottata invece prevede l’utilizzo di porte logiche di tipo NAND contenute all’interno dell’integrato 74HC00N i cui ingressi sono cortocircuitati comportandosi in pratica come porte NOT.  In questo modo fornendo un segnale logico HIGH ad uno degli ingressi automaticamente avremo un valore LOW sull’altro ingresso, riducendo così il numero di pin necessari al pilotaggio, avendo per ogni motore un pin per la direzione e uno per l’abilitazione.

SN74HC00 Quad 2-input NAND gate
Piedinatura Datasheet Foto dell'integrato

La scheda ha due linee di alimentazione diverse, +5V per la logica TTL e "Vin" per alimentare le uscite per i motori.  Entrambe le tensioni derivano da quelle presenti sulla scheda Arduino.

Circuito ENCODER

Come già detto in precedenza, sulla scheda è presente una parte di circuito utilizzata per collegare un encoder, e per la gestione di due pulsanti e due led

Schema elettrico alla sezione ENCODER

Quando si utilizza un motore passo-passo con encoder, un approccio tradizionale consiste nell'utilizzare un pin d’interrupt per l'encoder.
Il circuito L293 utilizzato può essere usato per pilotare un motore passo-passo, o due motori a corrente continua con controllo della velocità e direzione, o il controllo di quattro motori DC con direzione fissa.  Questo significa un massimo di 4 segnali generati da encoder, ma sulla scheda sono presenti solo due pin per interrupt esterni, questi fanno capo ai Pin 2 e 3 e gestite con il comando attachInterrupt().   La soluzione circuitale prevede un circuito multiplex del pin d’interrupt tramite delle porte OR contenute all’interno dell’integrato 74HC32.

74HC32 Quad 2-input OR gate
    
Piedinatura Datasheet Foto dell'integrato

Ogni volta che uno dei pin degli encoder genera un evento, questo tramite la porta OR richiamerà la funzione d’interrupt.   Tramite la routine di gestione degli interrupt, è possibile leggere i differenti pin e determinare qual è stato quella che ha generato l'evento.   Ecco perché sia i pin encoder sia la porta OR e alcuni pin di I/O sono mappati.
Oltre ai pin ENCODER etichettati come EC1 ed EC2, esiste in pin E3 che dà l’accesso al pin interrupt 1, che può essere utilizzato per altri controlli. Fanno parte del circuito due pulsanti e due led connessi ai pin digitali 6 e 7.

Connessioni pin controllo motore

Il connettore J3 è connesso al driver del motore ed è connesso a sua volta al relativo connettore J3 della scheda Arduino le cui funzioni sono riportate nella Tabella

 

Pin

Pin Arduino

Sigla

Funzione

8

Aref

NC

Non Connesso

7

GND

GND

GND

6

Digital 13

DIRB

Controllo direzione MOTORI 1-2 (LOW 1, HIGH 2)

5

Digital 12

DIRA

Controllo direzione MOTORI 3-4 (LOW 3, HIGH 4)

4

Digital 11

PWMB

Abilitazione Motori 1-2

3

Digital 10

PWMA

Abilitazione Motori 3-4

2

Digital 9

E2

Abilitazione modalità Stepper – connesso a IC3 1A

1

Digital 8

E1

Abilitazione modalità Stepper – connesso a IC3 4A)

Connessioni pin ENCODER

Il connettore ENCODER è connesso al connettore J1 della scheda Arduino

Pin

Pin Arduino

Sigla

Funzione

1

Digital 7

BB1

Pulsante 1

2

Digital 6

BB2

Pulsante 2

3

Digital 5

EC1

Encoder 1, EC1

4

Digital 4

EC2

Encoder 2, EC2

5

Digital 3

E3

Presa "E3" consente l'accesso a I / O, inclusi interrupt 1

6

Digital 2

 

Linea di interrupt per EC1, EC2, S1, S2

Jumper STEPPER

I due jumper (Figura 42) permettono di utilizzare la scheda per pilotare un motore passo-passo in alternativa del motore CC.   Quando lasciate aperte, le porte logiche gestiranno la velocità di commutazione e la direzione dei motori in corrente continua. Quando è collegato (E1 con E12, ed E2 con E22), il driver IC saranno utilizzati solo come una serie di transistor di potenza per guidare il passo-passo.    In questo modo si collega E1 ed E2 (pin Arduino 8 e 9) a IC3 input 1A e 4A e, tramite IC2, invertito a 2A e 3A.

Connessione MOTOR

Il connettore MOTORS è collegato alle uscite dell’integrato driver.

Pin

Pin Integrato
IC3

Sigla

1

14

2Y

2

11

1Y

3

3

3A

4

6

4Y

Connessione POWER

Il connettore POWER è collegato al relativo connettore presente sulla scheda Arduino e fornisce l’alimentazione alla scheda e ai motori

Pin

Descrizione

5V

Tensione +5V per l’alimentazione degli integrati

GND

GND

GND

GND

Vin

Tensione pari alla Vin cui è connessa la scheda Arduino.

 

Esempio d'uso della scheda sul mio robot ArduinoBOT

Robot_arduino_scheda-motore.JPG Robot_arduino_scheda-motore-1.JPG

ESEMPIO PROGRAMMA DI GESTIONE

int dirA = 12;
int dirB = 13;  // not used in this example
int speedA = 10;
int speedB = 11; // not used in this example

void setup()
{
  pinMode (dirA, OUTPUT);
  pinMode (dirB, OUTPUT);
  pinMode (speedA, OUTPUT);
  pinMode (speedB, OUTPUT);
}

void loop()
{
  // move the motor A to one direction increasing speed
  digitalWrite (dirA, HIGH);
  for (int j = 0; j < 255; j += 10) {
    analogWrite (speedA, j);
    delay (100);
  }

  delay(1000); // keep the motor rolling for one second

  // move the motor A to one direction decreasing speed
  digitalWrite (dirA, HIGH);
  for (int j = 255; j >= 0; j -= 10) {
    analogWrite (speedA, j);
    delay (100);
  }

  // stop the motor
  digitalWrite(speedA, LOW);

  delay(1000); // keep the motor stopped for one second

}

FOTO DEL MONTAGGIO DELLA SCHEDA

arduino_motor-shield_montaggio_1.jpg arduino_motor-shield_montaggio_2.jpg arduino_motor-shield_montaggio_3.jpg
arduino_motor-shield_montaggio_4.jpg arduino_motor-shield_montaggio_5.jpg arduino_motor-shield_montaggio_6.jpg

Elenco revisioni
14/01/2012 Aggiornato pagina
16/11/2011 Aggiornato pagina
21/06/2011 Aggiornato pagina
29/10/2009 Inserito le foto del montaggio della scheda
16/10/2009 Emissione preliminare
Private Policy Cookie Policy Termini e Condizioni