Seconda versione

ultimo aggiornamento 14 gennaio 2008


 

 

In commercio esistono varie schede come la Micro Serial Servo Controller o la Micro Maestro 6-Channel USB Servo Controller che eseguono il controllo simultaneo di più servomotori. Le varie tipologie dispongono si solito di un processore di controllo, di connettori di uscita per i servomotori, per l’alimentazione e di quelli per il controllo tramite un PC.

Micro Serial Servo Controller Micro Maestro 6-Channel USB Servo Controller

Se vogliamo però avventurarci nell’auto-costruzione possiamo provare a realizzare la scheda qui presentata, il progetto è stato trovato in rete ed è stato leggermente rielaborato.     Il materiale originale del progetto potrà essere consultato al seguente link.

interface de commande pour 8 servomoteurs, contrôlé par une liaison série

La scheda rappresenta un’interfaccia per il controllo di otto servomotori controllati da una linea seriale, il tutto è basato sul microcontrollore PIC16F84A-04/P un processore a 8 bit ormai datato ma ancora in produzione.    La scheda ha la possibilità di settare il proprio indirizzo, in questo modo si possono collegare sino a otto schede contemporaneamente il che porta a poter controllare fino a 64 singoli servomotori.
Di questa scheda esiste un primo prototipo, e una prima versione realizzata con l'aiuto di Lorenzo Petenatti, quella presente in questa pagina rappresenta una sua evoluzione.

 

homotix

Cos’è un servomotore

Nella robotica per gli azionamenti sono molto utilizzati i servomotori.
Di solito questi si presentano come piccoli contenitori di materiale plastico da cui fuoriesce un perno in grado di ruotare in un angolo compreso tra 0 e 180° mantenendo stabilmente la posizione raggiunta.
Per ottenere la rotazione del perno è utilizzato un motore in corrente continua e un meccanismo di demoltiplica che consente di aumentare la coppia in fase di rotazione.
La rotazione del motore è effettuata tramite un circuito di controllo interno in grado di rilevare l'angolo di rotazione raggiunto dal perno tramite un potenziometro resistivo e bloccare il motore sul punto desiderato.
I Servomotori sono concepiti per essere pilotati nel modo più semplice possibile, eseguendo la movimentazione senza l'ausilio di circuiterie troppo complesse o l'uso di sistemi a microprocessore.

Come si usa un Servomotore

Un servomotore dispone solitamente di soli tre fili attestati ad un connettore femmina per pin strip a passo 2.54mm

Tabella codice colori del connettore nei più diffusi modelli di servomotore.

Tipo servo

Segnale (S)

Alimentazione (+)

Alimentazione (-)

Futaba

Bianco

Rosso

Nero

JR

Arancio

Rosso

Marrone

Hitec

Giallo

Rosso

Nero

Airtronics

Arancio

Rosso

Nero

Airtronics

Bianco

Rosso

Nero

Airtronics

Nero

Rosso

Nero

Airtronics - Z

Blu

Rosso

Nero

KO

Bianco

Rosso

Nero

DAGU

Arancio

Rosso

Marrone

Due di questi fili sono riservati all'alimentazione in corrente continua. Il positivo è di colore rosso, il negativo di colore nero, il terzo filo, normalmente di colore bianco, è riservato per il controllo del posizionamento. Il colore di questi fili può però variare a seconda della casa costruttrice come riportato nella Tabella codici colore.

Tramite il filo del controllo è necessario applicare un segnale impulsivo o PWM (Pulse Wave Modulation) le cui caratteristiche sono "quasi" univoche per qualsiasi servomotore disponibile in commercio. Per essere sicuri di riuscire a pilotare qualsiasi servomotore il nostro circuito di pilotaggio dovrà essere in grado di trasmettere al servomotore circa 50 impulsi positivi al secondo (uno ogni 20 ms) di durata variabile in un intervallo massimo compreso tra 0.25ms e 2.75ms.
Generalmente con un impulso di durata pari a 1.5ms il perno del servomotore si pone esattamente al centro del suo intervallo di rotazione. Da questo punto il perno può ruotare in senso antiorario se l'impulso fornito ha una durata inferiore a 1.5ms e in senso orario se l'impulso fornito ha durata superiore a 1.5ms. Il rapporto esatto tra la rotazione del perno e la larghezza dell'impulso fornito può variare tra i vari modelli di servomotore


Diagramma temporizzazione per rotazione antioraria.

Diagramma temporizzazione per posizionamento al centro

Diagramma temporizzazione per rotazione oraria.

SCHEMA ELETTRICO

Elenco componenti

R1, R2, R3, R6

4,7kΏ – ¼ W

R4

1kΏ – ¼ W

R5

1,2kΏ - ¼ W

C1, C2

33pF ceramico

C3, C5

100nF poliestere o multistrato

C4

1000μF Elettrolitici 16V

C6

10μF – Elettrolitico 16 V

D1

Diodo 1N4004

IC1

PIC16F84A-04/P

IC2

Regolatore di tensione LM7805

Q1

Quarzo 4MHz
contenitore HC-49U

TR1

Transistor NPN tipo BC547

LED1

Led Ø3 mm Verde

LED2

Led Ø3 mm Rosso

JP1,2,3,4,5,6,7, 8,9,10,11

Pin head 1x3 verticali

JP12

Pin head 1x2 verticale

X1

Connettore seriale
DB9 femmina da CS

X2, X3

Connettore 1x2 tipo Molex

 

Download
formato Eagle
Download
formato PDF

Il principio di funzionamento

Esaminando lo schema elettrico e relativo elenco componenti si può vedere che è molto semplice. Tutto è assemblato intorno a un PIC16F84A-04/P, in sostituzione si potrà utilizzare anche il PIC16F844-20/P il cui clock è fornito dall’ oscillatore realizzato con un cristallo da 4 MHz e due condensatori da 33pF
Le porte del processore da RB0 a RB7 sono utilizzate per generare i segnali di uscita per gli otto servomotori.
Su queste uscite il processore genererà i vari segnali ripetuti ogni 20ms, la cui durata può variare da 0,5 a 2,5 ms, che corrisponderà alla rotazione richiesta.

scheda_multiservo-dettaglio_quarzo.jpg

Processore e quarzo per il clock

scheda_multiservo-dettaglio_connettori-servo.jpg

Dettaglio connettori per il collegamento dei servomotori

 

Processore PIC16F84A

Piedinatura Datasheet Foto dell'integrato

Il pin RA1 è utilizzato come ingresso seriale asincrono per il comando dal PC.   Il comando avviene tramite una porta seriale conforme allo standard RS232.  Dato che ultimamente questa non è più presente si potrà utilizzare un convertitore USB-RS232.

 

Sigla  

Pin  

In/Out  

Nome

TXD 

3  

O  

Dati trasmessi

RXD 

2  

I  

Dati ricevuti

RTS  

7  

O  

Request To Send

CTS  

8  

I  

Clear To Send

DTR  

4  

O  

Data Terminal Ready

DSR  

6  

I  

Data Set Ready

RI  

9  

I  

Ring Indicator

DCD  

1  

I  

Data Carrier Detect

GND  

5  

-  

Massa (ground)

I segnali utilizzati dai sistemi digitali (TTL-CMOS) variano tra 0 e 5V mentre quelli dello standard RS232 variano tra i -12 e i +12 Volt (il valore -12 Volt corrisponde al livello logico 1 TTL mentre il valore +12V corrisponde al livello logico 0 TTL). Non essendo direttamente compatibili è necessario utilizzare un circuito di traslazione di livelli che adatti i segnali.
In commercio esistono appositi traslatori di livello come il circuito integrato MAX232 che hanno il compito di fornire sia in trasmissione sia in ricezione i livelli di tensione opportuni non modificando la forma del segnale trasmesso.

MAX232  DUAL EIA-232 DRIVERS/RECEIVERS

Piedinatura Datasheet Foto dell'integrato

La soluzione cui presentata è molto più spartana poiché basata solamente sull’utilizzo di un transistor, un comune BC547 o equivalente.
Una tensione superiore 3V sul collegamento seriale porta in conduzione il transistor, portando l’uscita a 0V. Quando questa tensione è negativa il transistore è interdetto permettendo la tensione di +5V di passare attraverso la resistenza R3. Per cui il circuito si comporta come un invertitore e adattatore di segnale.  Il traffico sulla linea è monitorato dal led 2.

scheda_multiservo-dettaglio_connettore-rs232.jpg

scheda_multiservo-dettaglio_led.jpg

I pin RA2, RA3 ed RA4 possono essere collegati a 5V o a GND utilizzando i Jumper JP9, 10 e 11, dando così un indirizzo al modulo e quindi differenziare fino a 8 schede collegate sulla stessa porta seriale

scheda_multiservo-dettaglio_jumper_indirizzo.jpg

Dettaglio jumper per la configurazione della scheda

TABELLA CONFIGURAZIONE INDIRIZZO SCHEDA

Indirizzo scheda

RA4
(JP11)

RA3
(JP10)

RA2
(JP9)

0

0V

0V

0V

1

0V

0V

5V

2

0V

5V

0V

3

0V

5V

5V

4

5V

0V

0V

5

5V

0V

5V

6

5V

5V

0V

7

5V

5V

5V

 

Transistor  BC547 (NPN Switching and Applications)

Piedinatura Datasheet Foto del transistor (contenitore plastico)

Sezione alimentatrice

La sezione dell’alimentazione è incentrata sull’ormai famoso integrato LM7805 un regolatore di tensione a tensione fissa con uscita di +5V-1A.    La tensione in ingresso viene fornita tramite il connettore X2, dopo il quale troviamo il diodo D1 un 1N4004 che salvaguardia il circuito da un’eventuale inversione di polarità.    Sono poi presenti alcuni condensatori di filtraggio, il diodo led D1 segnala la presenza dell’alimentazione.    La sua massima corrente d’uscita dell’integrato è di 1A, dato che i servomotori assorbono fino a 600-800 mA di spunto e fortemente sconsigliato utilizzare questo per alimentarli, per questo motivo sulla scheda è presente un connettore marcato come X3 che permette di alimentarli direttamente con una fonte autonoma di energia, quando si utilizza questo sistema di alimentazione occorre rimuovere il cavallotto sul Jumper JP12.   Si ricorda che prima di alimentare i servomotori occorre verificare a quale tensione di alimentazione funzionano, questa può essere compressa tra 4,8 e 7,2V.

scheda_multiservo-dettaglio_jumper_alimentazione.jpg

Dettaglio jumper che permette di alimentare i servo tramite la stessa tensione regolata da IC

LM 7805 Regolatore di tensione
Piedinatura Datasheet Foto dell'integrato

Diodo 1N4004
Piedinatura Datasheet Foto

Il protocollo di trasmissione

Il protocollo di trasmissione che deve essere utilizzato dal programma di gestione deve essere impostato per trasmettere con i seguenti parametri: 2400 baud, 1 bit start, 1 bit di stop e nessuna parità.
Per modificare la posizione di servo devono essere semplicemente inviati 4 byte:

• 1° byte- Inizio del messaggio, valore fisso di 255.
• 2° byte - Indirizzo della scheda (0 a 7) che dipende dai livelli logici di porta RA2, RA3 e RA4. Secondo quanto riportato nella Tabella.
• 3° byte - Numero del servomotore da 0 a 7
• 4° byte - Posizione servo, un valore compreso tra 4 e 255 per uno spostamento di oltre 180°, se si invia 0 si disabilita l’uscita.
 

Costruzione della scheda

Per la realizzazione della scheda è previsto l’uso di un circuito stampato. Si dovrà scaricare il PDF che riporta la traccia in scala 1:1. Esiste anche la possibilità di scaricare i file per il programma EAGLE con cui ognuno potrà modificare il circuito per i propri utilizzi.
Per la sua realizzazione si utilizzerà una basetta in vetronite (monofaccia) di dimensioni 50x53mm circa, il metodo potrà essere quello della fotoincisione o del trasferimento termico utilizzando i cosiddetti fogli blu (PRESS-N-PELL)


Download
formato Eagle

Download
formato PDF

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-1 mm.  Quindi si posizioneranno e salderanno i componenti come riportato nello schema

Per la saldatura si utilizzerà un piccolo saldatore a punta fine, della potenza di circa 25 – 30 W.  Si inizierà montando il diodo D1, lo zoccolo per l’integrato, le resistenze che per ragioni di spazio sono montate in verticale. Si proseguirà con l’integrato IC2 quindi i vari condensatori ricordando che quelli elettrolitici sono polarizzati, occorrerà controllare la posizione della fascia sul loro corpo. Si proseguirà poi con le pin-strip i connettori di alimentazione e quello per il collegamento RS232. A questo punto si è così concluso il montaggio della scheda, prima di istallare l’integrato IC1 occorrerà programmarlo.

Alcune fasi del montaggio del prototipo

Prima fase di montaggio, zoccolo integrato e integrato

Seconda fase di montaggio jumper , resistenze, e condensatori

Terza fase, connettore seriale, led, quarzo

Programmazione del processore

Una volta completato il montaggio, occorre programmare il processore con il firmware necessario.   Il firmware, nome che deriva dall'unione di "firm" (stabile) e "ware" (componente) è un programma, inteso come sequenza d’istruzioni, integrato direttamente nel processore: lo scopo del programma è quello di avviare il componente stesso e consentirgli di interagire con altri componenti tramite l'implementazione di protocolli di comunicazione o interfacce di programmazione.  Per fare questo si dovrà necessariamente utilizzare un programmatore, il mio consiglio è quello di utilizzare il modello PICkit 2 prodotto dalla Microchip

Legenda:
1 – Led di stato 3 – Attacco per cordoncino 5 – Riferimento Pin 1
2 – Pulsante 4 – Connettore porta USB  6 – Connettore di programmazione

 

PICkit2_blister.jpg
Il blister contenente
il programmatore e la scheda di test

Contenuto del Blister
  • Programmatore PICkit 2
  • Demo Board con PIC18F887
  • Cavo USB - Tipo A -tipo Bmini lunghezza 1,8m
  • CD Rom con Software MPLAB V8.20
  • CD Rom con PICkit Starter Kit

Per la programmazione occorrerà prima di tutto scaricare il file programma_PIC.zip, al cui interno troveremo sia la versione asm che hex
Quindi si dovrà collegare il connettore del programmatore denominato ICSP (In-Circuit Serial Programming) al processore come indicato sotto, non sarà necessario alimentare il processore poiché sarà il programmatore stesso a farlo.

 

Una volta collegato il processore al programmatore e lanciato l’apposito programma, questo riconoscerà automaticamente il processore

A questo punto si dovrà caricare il file 8SERVOS.HEX


Programma
per PIC16F84

 

Si potrà quindi programmare il PIC agendo sul tasto WRITE, e la programmazione sarà andata a buon fine, sarà segnalato dal programma.    Potremmo questo punto inserire il PIC sulla scheda rispettando la tacca d’inserimento.

Collaudo della scheda

Per verificare il montaggio, si dovrà alimentare il circuito tramite una tensione compresa tra i 7,5 e i 9 volt. Con un tester si misurerà la tensione tra i morsetti 4 e 14 del PIC dove devono essere presenti i +5V, la tensione di uscita ai servi possono variare da 0,12 V a 0,63 V secondo le istruzioni inviate al attuatore (0V se disabilitato). Se si possiede un oscilloscopio è possibile utilizzarlo per controllare questi segnali.   A questo punto si potrà completare il cablaggio della scheda seguendo lo schema

Cablaggio della scheda controllo servomotori

scheda_multiservo-dettaglio_collegamento-servo.jpg

Per azionare i vari servomotori collegati si utilizzerà il programma che troverete all’interno del file vb8servos.zip e denominato vb8servos_it.exe, insieme all’eseguibile sono anche presenti i file del progetto scritto in Visual Basic 5.    Si fa presente che il programma suppone che la scheda sia connessa alla porta COM1, se così non fosse si potrà modificare il suo valore agendo sulle Impostazioni avanzate della porta all’interno della Gestione delle periferiche

Per il resto il programma è molto semplice, una volta scelto l’indirizzo della scheda si agirà sui vari cursori per variare la posizione del servomotore. Usando le frecce a lato del cursore il movimento sarà più fluido, mentre con il cursore sarà più immediato.     Il programma di gestione è molto limitato, non permettendo tra l’atro di salvare le sequenze dei movimenti.   Vista la semplicità del protocollo esiste la possibilità utilizzando vari tipo di programmi anche di tipo free come Visual Basic 10 Express o Java di realizzare un proprio programma di gestione.


Programma
Gestione scheda

LINK UTILI

http://fribotte.free.fr/  Sito originale Francese da cui è tratto il progetto.
http://fribotte.free.fr/bdtech/8servomoteurs/8servomoteurs.html  Pagina originale del progetto.
http://www.pololu.com/catalog/product/207  Link del Micro Serial Servo Controller.
http://www.pololu.com/catalog/product/1350  Link del Micro Maestro 6-canali USB Servo Controller
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023805  Pagina di presentazione del programmatore PICkit2.
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express  Sito per scaricare il programma Visual Basic 2010 Exepress
http://www.java.com/it/download/  Sito per scaricare il programma Java.

Elenco revisioni
14/04/2012 Emissione preliminare
Private Policy Cookie Policy