ARDUINO New Shield motore con L293D ultimo aggiornamento 1 novembre 2016 |
|
Dopo la costruzione del
precedente prototipo shield per
Arduino
contenente un L293D
Ecco presentato una nuova versione, anche
in questa è presente un L293D che permette di pilotare
due motoriduttori,
ma in questa versione è presente un integrato
74LS06 in cui sono presenti all'interno sei porte logiche NOT
(inverter).
Oltre ai due pin di pilotaggio della direzione due porte con uscita PWM sono utilizzate per pilotare i pin ENABLE dell'integrato permettendo di regolare la velocità di rotazione dei motori stessi Sulla scheda è resente un connettore per l'installazione di un modulo XBee montato a sua volta su una scheda XBee-Simple Board, il segnale verso il pin TX è dotato di un partitore per adattare il livello del segnale da 5Va quello di 3V3 del modulo XBee. |
|
|
|
|||
Circuito stampato realizzato con EasyEDA |
Alcuni dettagli dello shield
Motoriduttore tipo GM2 | Motoriduttore tipo GM3 |
Questo integrato è un driver a 4
canali di tipo push-pull con 4 diodi di protezione interni per il ricircolo
della corrente.
Può fornire in uscita una corrente massima per ogni canale di 600 mA con una
corrente i picco ( non ripetitiva) di 1,2 A, con una massima tensione di
alimentazione è di 36V.
Per l'alimentazione della parte logica è sufficiente una tensione minima di
4.5V.
Per il suo funzionamento è necessario collegarlo ad un processore
utilizzando 4 porte, 2 per motore.
|
|
E' un circuito integrato a 16 terminali (in contenitore DIP8) che contiene 4 amplificatori di potenza per il comando di motori in corrente continua o passo-passo (stepper motor);
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 viene fatto mediante livelli di tensione compatibili TTL (H:+5V, L:0V), dunque perfettamente interfacciabili con il PIC;
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 internamente sia di una protezione termica che di una protezione contro i cortocircuiti delle uscite verso massa;
I quattro terminali centrali di massa possono essere saldati ad una apposita piazzola dimensionata per ottenere una valida dissipazione del calore.
Circuito di controllo
Il circuito prevede essenzialmente il collegamento dei pin digitali di Arduino con quelli dell'integrato L293D
|
|
Sulla scheda Arduino sono presenti 14 pin digitali che possono essere utilizzati indifferentemente come un ingresso o come uscita. Le uscite operano a 5 volt e ogni pin può fornire o ricevere un massimo di 40 mA ed è dotato di una resistenza pull-up (sconnessa di default) del valore di 20-50 kΏ. Inoltre, alcuni pin hanno funzioni specializzate:
Connettore Pin Digitali
< Pin: 0 (RX) e 1 (TX): possono essere utilizzati per ricezione (RX) e trasmissione (TX) dei dati seriali TTL. Questi sono collegati ai pin corrispondenti della porta USB-TTL del processore ATmega8U2. |
< Pin 2 e 3: possono essere configurati come trigger per eventi esterni, come ad esempio il rilevamento di un fronte di salita o di discesa di un segnale in ingresso. |
< Pin 3, 5, 6, 9, 10 e 11: possono essere configurati via software con la funzione analogWrite() per generare segnali PWM con risoluzione di 8 bit. Tramite un semplice filtro RC è possibile ottenere tensioni continue di valore variabile. |
< Pin 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK): possono essere programmati per realizzare una comunicazione SPI, utilizza un’apposita libreria SPI. |
< Pin 13 è connesso a un LED interno alla scheda, utile per segnalazioni di diagnostica. Quando il livello del pin è HIGH, il LED è acceso, quando il livello del pin è LOW, è spento. |
Alimentazione
L'alimentazione della scheda è prelevata dal connettore POWER della scheda Arduino, sono utilizzati il pin 5V per l'alimentazione della logica e Vin per l'alimentazione dei motori.
Connettore POWER |
<Vin; restituisce la tensione applicata dall'alimentatore al plug e può essere usato per alimentare altri circuiti che dispongano già di un regolatore di tensione (ad esempio gli shield applicati al modulo); |
<GND; è il contatto di massa (GND). |
<5 V; fornisce i 5 volt prelevati dall'uscita del regolatore interno ed è utile per alimentare altri circuiti compatibili con i 5 volt; |
<3.3V; questo pin fornisce i 3,3 volt ricavati dal regolatore corrispondente e consente di alimentare circuiti compatibili con tensioni di 3,3 volt (la massima corrente prelevabile e di 150 mA); |
Connettore modulo XBee
Per il collegamento del modulo XBee (non utilizzano in questo caso) si utilizzano i Pin AN0 e AN1 corrispondenti ai pin Digitale 14 e Digitale 15
|
I moduli si possono trovare attualmente tre versioni
dei moduli: la Serie 1, la
Serie 2 e la Serie Pro con caratteristiche
crescenti.
Questi moduli lavorano con una frequenza operativa di 2.4GHz
e permettono di raggiungere, a seconda del modello, coperture che vanno
da 30mt (all’interno di locali) oltre a 1500mt all’esterno per la
versione XbeePRO; per un confronto delle varie versioni dei moduli fare
riferimento alla Tabella sotto riportata.
Con i moduli XBee è possibile compiere trasmissioni di tipo: Point-to-Point, Point-to-Multipoint, Peer-to-Peer sia in modo Unicast
che Broadcast; con velocità che arrivano fino a 250Kbps. Le ridotte
dimensioni permettono altresì un notevole risparmio di spazio e cosa più
importante implementano una comunicazione seriale come quella presente
sulla porta RS232.
Fisicamente tutte e tre le tipologie presentano una doppia fila di 10
pin con passo 2 mm, la cui funzione è riportata in
Tabella
|
|
|
|
Indoor/Urban range |
Up to 30m |
Up to 40m |
Up to 90 m, |
Outdoor RF line-of-sight range |
Up to 100m |
Up to 120m |
Up to 1600 m |
Transmit Power Output |
1 mW (0dbm) |
2 mW (+3dbm) |
63mW (18dBm) |
RF Data Rate |
250 Kbps |
||
Receiver Sensitivity |
-92dbm (1% PER) |
-98dbm (1% PER) |
-100 dBm (1% PER) |
Supply Voltage |
2.8 - 3.4 V |
2.8 - 3.6 V |
|
Transmit Current (typical) |
45 mA (@ 3.3 V) |
40 mA (@ 3.3 V) |
250mA (@3.3 V) |
Idle/Receive Current (typical @3.3V) |
50 mA |
40 mA |
55mA |
Power-down Current |
10 uA |
1 uA |
< 10 μA |
Frequency |
ISM 2.4 GHz |
||
Dimensions |
2.4cm x 2.8cm |
2.4cm x 3.3 cm |
|
Operating temperature |
-40 to 85 C |
||
Antenna Options |
Chip, Integrated Whip, U.FL |
||
Number of Channels |
16 Direct Sequence Channels |
12 Direct Sequence Channels |
|
Filtration Options |
PAN ID, Channel & Source/Destination |
PAN ID, Channel and Addresses |
Piedinatura del modulo XBee |
Tabella con indicazione dei pin
Pin # |
Nome |
Input/output |
Descrizione |
1 |
VCC |
- |
Alimentazione +3.3V |
2 |
DOUT |
O |
UART Data Out |
3 |
DIN / CONFIG |
I |
UART Data In |
4 |
DIO12 |
I/O |
Digitale I/O 12 |
5 |
RESET |
Input |
Pin di Reset del modulo (impulso di reset deve essere di almeno 200 ns |
6 |
PWM0 / RSSI / DIO10 |
I/O |
PWM Output 0 / Indicatore intensità del segnale RX / Digitale I/O 10 |
7 |
PWM / DIO11 |
I/O |
Digitale I/O 11 |
8 |
[riservato] |
- |
Non connesso |
9 |
DTR / SLEEP_RQ/ DIO8 |
I/O |
Pin Sleep Control Line or Digitale I/O 8 |
10 |
GND |
- |
Terminale di massa |
11 |
DIO4 |
I/O |
Digitale I/O 4 |
12 |
CTS / DIO7 |
I/O |
Clear-to-Send Flow Control or Digitale I/O 7 |
13 |
ON / SLEEP / DIO9 |
Output |
Module Status Indicator or Digitale I/O 9 |
14 |
[riservato] |
- |
Non connesso |
15 |
Associate / DIO5 |
I/O |
Associated Indicator, Digitale I/O 5 |
16 |
RTS / DIO6 |
I/O |
Request-to-Send Flow Control, Digitale I/O 6 |
17 |
AD3 / DIO3 |
I/O |
Input analogico 3 o Digitale I/O 3 |
18 |
AD2 / DIO2 |
I/O |
Input analogico 2 o Digitale I/O 2 |
19 |
AD1 / DIO1 |
I/O |
Input analogico 1 o Digitale I/O 1 |
20 |
AD0/DIO0/ Commissioning Button |
I/O |
Input analogico 0 o Digitale I/O 0 oppure Commissioning Button |
La
XBee-Simple Board
prodotta dalla DROIDS SAS
(può essere reperita sul sito
Robot Italy) è stata progettata per permettere un
collegamento facile ed affidabile tra i moduli Xbee e altre
applicazioni sia il modulo XBee sia XBeePRO sono supportati .
La solida costruzione, il circuito di alimentazione con regolatore di
tensione e soft start permettono la massima affidabilità con i moduli
XBee.
Due LED permettono monitoraggio continuo dell'attività della scheda e la
ricerca dei guasti.
Per ulteriori informazioni vedere
l'apposita pagina.
Realizzazione della scheda
|
L293D Driver per ponte H | ||
Piedinatura | Datasheet | Foto dell'integrato |
SN74LS06 Sei inverter buffers/driver con uscita open-collector | ||
|
||
Piedinatura | Datasheet | Foto dell'integrato |
Esempio utilizzo: New Arduino shield L293 |
Realizzazione pratica.
Per la costruzione della
scheda si procederà iniziando dalla realizzazione del circuito stampato il cui
lato rame in scala 1:1 è riportato sotto
Per la sua realizzazione si utilizzerà una basetta in
vetronite (monofaccia) di dimensioni 55x36 mm, il metodo potrà essere quello
della fotoincisione o del trasferimento termico utilizzando i cosiddetti fogli
blu (PRESS-N-PELL), in questo caso ricordo che l’immagine delle tracce del
circuito dovrà essere speculare.
|
|
|||
Circuito stampato.
Una volta inciso il rame, si verificherà in controluce o mediante l’utilizzo di
un multimetro che non vi siano cortocircuiti soprattutto tra le piste più
vicine.
Si passerà quindi alla foratura della stessa, utilizzando principalmente una
punta da 0,8 mm, mentre si utilizzeranno una da 1mm per le pin strip.
In seguito si potrà passare al posizionamento e alla saldatura dei componenti
seguendo lo schema visibile sotto.
Disposizione dei componenti.
Per la saldatura si utilizzerà un piccolo
saldatore a punta fine, della potenza di circa 25 – 30 W.
S’inizierà dai vari ponticelli continuando con le resistenze, si potrà quindi, procedere con
gli zoccoli degli
integrati, il condensatore. Si concluderà con le pin strip e i
connettori per il motore.
Terminato la saldatura si potranno inserire l'integrato L293D
e il
SN740LS6N
negli appositi zoccolo facendo attenzione alla tacca di riferimento.
Fasi di montaggio dello shield
|
|
|
|
|
|
Programma di prova
Il programma di prova
utilizza permette di comandare i due motori connessi allo shiel tramite i
comandi impartiti tramite la tastiera del PC (tasti 2,4,5,6,7) e trasmessi
tramite un modulo XBee installato su una
XBee-USB Board
prodotta dalla DROIDS SAS,
questa è stata progettata per permettere un collegamento facile ed affidabile
tra i moduli di Xbee e il PC. Sulla scheda è già presente il
circuito di alimentazione con regolatore di tensione e soft start, quattro LED permettono monitoraggio continuo dell'attività della scheda
e la ricerca dei guasti.
Il connettore permette il collegamento tra il modulo XBee e
l'interfaccia USB.
Il connettore USB di tipo "Mini B" assicura una scheda compatta (3x51mm)
e di facile uso.
Per l'invio dei dati
ho utilizzato il programma X-CTU fornito per la gestione dei moduli XBee
e che può essere
scaricato gratuitamente dal sito del produttore.
Per cui una volta impostata la porta a cui è connesso il modulo, utilizzando
la scheda Terminal, si potranno inviare i comandi che saranno
interpretati dal programma caricato nella memoria della scheda Arduino.
/* Test_motore_XBee.ino Il programma ha il compito di verificare il funzionamento della scheda motore con XBee Vengono utilizzati i seguenti pin Pin +5V -> +5V Pin GND -> GND Pin Vin -> Batteria Pin Digital 4 -> Direzione Motore DX Pin Digital 7 -> Direzione Motore SX Pin Digital 3 -> Velocità Motore DX Pin Digital 6 -> Velocità Motore SX Pin digitale 15 -> RX XBee Pin digitale 14 -> TX Xbee Creato il 01/04/2013 da Adriano Gandolfo <https://www.adrirobot.it> This example code is in the public domain. */ #include <SoftwareSerial.h> SoftwareSerial xbee(15, 14); // RX, TX int EN1 = 3; //M1 Controllo velocità M1 int EN2 = 6; //M2 Controllo velocità M2 int IN1 = 4; //M1 Controllo direzione M1 int IN2 = 7; //M2 Controllo direzione M12 void Motor1(int pwm, boolean reverse) { analogWrite(EN1,pwm); //set pwm control, 0 for stop, e 255 per massima velocità if(reverse) { digitalWrite(IN1,HIGH); } else { digitalWrite(IN1,LOW); } } void Motor2(int pwm, boolean reverse) { analogWrite(EN2,pwm); if(reverse) { digitalWrite(IN2,HIGH); } else { digitalWrite(IN2,LOW); } } void setup(void) { int i; for(i=3;i<=7;i++) pinMode(i, OUTPUT); xbee.begin(9600); Serial.begin(9600); } void loop(void) { while (xbee.available() < 1) { } // Wait until a character is received char val = xbee.read(); Serial.print (val); //per controllo switch(val) // Perform an action depending on the command { case '8'://Robot avanti forward (); break; case '2'://Robot indietro reverse (); break; case '4'://Robot a destra left (); break; case '6'://Robot a sinistra right (); break; case '5'://Robot fermo stop (); break; default: stop(); break; } } void stop() //Stop { Motor1(0,false); Motor2(0,false); } void forward(void) { Motor1(255,true); Motor2(255,true); } void reverse () { Motor1(255,false); Motor2(255,false); } void left () { Motor1(255,false); Motor2(255,true); } void right () { Motor1(255,true); Motor2(255,false); } |
Elenco revisioni | |
01/11/2016 | Inserito PCB realizzato con EasyEDA |
06/04/2013 |
Aggiornato pagina |
29/03/2013 |
Emissione preliminare |