|
|
Rivista
n° 297 in edicola nel
mese di Marzo 2010 nella sezione Progettare e costruire, titolo
dell'articolo
Controller
per servo e sensore PIR
, inerente il
Serial Servo Controller della Pololu
e un sensore di
tipo PIR. Vengono illustrati il loro funzionamento in rapporto alla scheda con processore Basic Stamp 2 SX e Cubloc CB220. |
Utilizzo del Servo Controller.
Il processore del Servo controller ha il compito di generare simultaneamente 8
segnali indipendenti per controllare il servo.
Possono essere generati impulsi compresi tra 0.25 ms e 2.75 ms che copre la
richiesta della maggioranza dei tipi di servo per rotazioni di più di 180 gradi.
Generalmente con un impulso di durata pari a 1.5ms, il perno del servomotore si
posiziona esattamente al centro del suo intervallo di rotazione. Da questo punto
il perno può ruotare fino a -90 gradi (senso antiorario) se l'impulso fornito ha
una durata inferiore a 1.5 ms e fino +90 gradi (senso orario) se l'impulso
fornito ha durata superiore a 1.5 ms. Il rapporto esatto tra la rotazione del
perno e la larghezza dell'impulso fornito può variare tra i vari modelli di
servo.
Se questi valori sono ripetuti con un intervallo non superiore a 20 ms la
posizione raggiunta sarà mantenuta.
Diagramma temporizzazione per rotazione antioraria.
Diagramma temporizzazione per rotazione oraria.
Diagramma temporizzazione per posizionamento al centro
Internamente, il Servo Controller memorizza il valore di posizione del servo che
è due volte la larghezza dell’impulso misurato in microsecondi.
Così, con un impulso di 1.5 ms (posizione detta neutra) pari a 1500 microsecondi
è rappresentato internamente come 3000, mentre i 2 estremi variano da 500 a
5500.
Input seriale
I comandi seriali inviati al servo controller devono essere inviati in blocchi
di 8 bit, senza parità e con un bit di stop.
Il livello logico deve essere
non-invertito, considerando che “0” è inviato come 0V, mentre “1” è inviato come
5V, come riportato nella figura sopra.
Quando si fornisce tensione con la linea serale connessa, si dovrebbero vedere
tutti i LED accesi oppure solo il LED giallo. Successivamente il servo
controller si mette in attesa di un segnale sulla linea seriale per determinarne
la velocità.
Se la velocità di trasmissione trovata è troppo alta (maggiore di 38400 baud),
il LED rosso si accenderà ed il LED verde lampeggerà rapidamente.
Se la velocità è troppo bassa (minore di 1200 baud), il LED rosso si accenderà
ed il LED giallo lampeggerà. Da questo punto, il comportamento del servo
Controller dipende dal modo di comunicazione, e tutte le trasmissioni seguenti
devono essere a quella stessa velocità di trasmissione.
Led indicatori
Il LED verde indica l'attività seriale: e dovrebbe lampeggiare ogni qualvolta il
servo controller riceve dei dati.
Il LED giallo indica un avvertimento riguardo
la posizione: il valore richiesto è fuori range, il valore sarà limitato al
massimo o al il minimo, ed il LED giallo si spegnerà quando tutti i valori
saranno all’interno del range. Il LED rosso indica un errore come un dato non
valido sulla linea seriale.
Opzioni di interfaccia
Si può comunicare con il Servo controller con due diversi protocolli di
comunicazione.
La scelta avviene utilizzando un cavallotto che è letto all’atto dell’accensione
della scheda. Per cambiare il protocollo occorre resettare la scheda.
Modo Pololu: questo è la modalità di funzionamento predefinita con cavallotto
non inserito. In questa maniera, il Servo Controller può essere connesso con
altre apparecchiature seriali.
Questo modo permette anche l’accesso a tutte le caratteristiche speciali come
settaggio velocità, range e settaggio posizione neutra.
Modo Mini SSC II: Questo modalità operativa è scelta inserendo il cavallotto
sull’apposito spinotto. In questo modo il Servo Controller risponde al
protocollo usato dal controllore del servo del Mini SSC II Servo controller
realizzato dalla Scott Edwards Elettronics.
Questo protocollo è più semplice, e permette solamente di specificare il numero
del servo e la sua posizione.
Mini SSC II Mode
Baud Rate: La serie di velocità di trasmissione disponibile è compresa tra 2400
o 9600 baud.
Protocollo: Per stabilire la posizione di servo, occorre inviare una sequenza di
tre byte.
Il primo byte è un valore di sincronizzazione che deve essere sempre 255.
Il secondo byte 2 è il numero di servo, e può essere tra 0 e 254.
Il terzo byte è la posizione alla quale si vuole che si sposti il servo e può
essere tra 0 e 254.
Start byte = 0xFF | Numero servo, 0x00-0xFE | Posizione del servo, 0x00-0xFE |
Modo Pololu
In questa modalità sono possibili molte possibilità di comando del movimento del
servomotore.
Baud Rate. La serie di velocità di trasmissione disponibili in questa maniera è
approssimativamente tra 2000 e 40000 baud.
Protocollo: per comunicare con il Servo Controller occorre inviare una sequenza
di 5 o 6 byte.
Il primo byte è di sincronizzazione e deve essere sempre 0x80.
Il secondo byte 2 identifica l’apparecchiatura Pololu nel nostro caso 0x01.
Il terzo byte è uno di sei valori per i diversi comandi (vedere sotto)
Il quarto byte è il numero del servo che si vuole comandare.
Il 5 o 6 byte sono i parametri per il comando impartito
I valori dei byte da 2 a 6 sono compresi tra 0-0x7F (0-127)
Start byte = 0x80 | Numero ID = 0x01 | Comando | Dato 1 | Dato 2 |
Comando 0: Impostazione parametri (1 byte di dati)
• Il byte 7 è sempre 0
• Il byte 6 specifica se un servo è attivo oppure no; 1 attiva il servo, 0
(default) lo disattiva.
• Il byte 5 stabilisce la direzione di rotazione; 0 (default) avanti, 1 indietro
• I byte 0-4 stabiliscono il range del movimento
Comando 1: Impostazione velocità (1 byte di dati)
Questo comando permette di variare la velocità con cui si muove il servomotore.
Di default la velocità è posta a 0, in questo modo il servo si sposterà
immediatamente alla posizione fissata.
Se il valore di velocità è diverso da 0 il servo si sposterà progressivamente
dalla vecchi alla nuova posizione. Con una velocità di 1, gli impulsi cambiano
di 50 µs per secondo; la massima velocità è di 6.35 ms quando la velocità è
posta a 127.
Comando 2: Impostazione posizione, 7-bit (1 byte di dati)
Quando questo comando è inviato, il valore del dato è moltiplicato per il range
impostato per il servomotore corrispondente e corretto per il settaggio
neutrale.
Questo comando può essere utile nell'andare velocemente ad una posizione in
quanto si utilizzano solamente 5 byte per impostare la posizione. Assegnando una
posizione automaticamente il servo sarà attivato.
Comando 3: Impostazione posizione, 8-bit (2 byte di dati)
Questo comando è simile a quello a 7-bit eccetto per il fatto che devono essere
inviati due byte.
Comando 4:Impostazione Posizione, Assoluto (2 byte di dati)
Questo comando permette il controllo diretto della posizione del servo. Range
Neutrale e impostazione direzione non hanno effetto in questo comando. La serie
di valori validi è compresa tra 500 e 5500. Assegnando una posizione
automaticamente il servo sarà attivato.
Comando 5: Impostazione Neutrale (2 byte di dati)
L’impostazione neutrale è applicabile solamente a comandi a 7 e 8 bit. Il valore
neutrale imposta il valore medio del range e corrisponde per il bit 7 a 63.5 e
per il bit 8 a 127.5. La posizione neutrale è una posizione assoluta simile a
comando 4, e impostando la posizione neutrale i servo si sposterà a quella
posizione. Il valore predefinito è 3000. Può essere utile cambiare la posizione
neutrale per calibrare un sistema in modo da correggere tolleranze dei
meccanismi meccanici connessi ai servomotori.
Impostazione e controllo numero del servo
Come già citato sopra, Il Servo Controller ha la caratteristica di poter
modificare il numero con cui il Controller risponde sulla linea seriale. Di
default, il Servo Controller risponde con i servo numerati da 0-7 (in modo
Pololu), ma è possibile impostare che risponda con numeri da 8-15, 16-23, sino a
120-127.
Quando il Servo Controller è impostato in modo Mini SSC II il Servo Controller
risponde con i numeri 0-15, 16-31, sino a 240-254.
In questa maniera è possibile con più Servo Controller, comandare in maniera
indipendente sino a 128.
Per eseguire quest’operazione occorre portarsi il modo Pololu (rimuovere
eventualmente il jumper J1) e d inviare sulla linea seriale
[128, 2 < numero servo Controller >]
dove < numero servo Controller > è un numero compreso tra 0 e 15.
Impostando 0 il Servo Controller controllerà i servo da 0-7 (in modo Pololu),
impostando 1 si controlleranno i servo 8-15, e così via.
Start byte = 0x80 | Cambio numero servo = 0x02 | Nuova impostazione 0x00-0x10 |
Alla ricezione del comando il Servo Controller accenderà il led rosso e giallo e
farà lampeggiare il led verde < numero servo Controller > + 1 volta.
Il led verde
lampeggerà così da 1 a 16 volte. Il led verde farà poi una pausa di circa un
secondo prima di lampeggiare nuovamente. Occorrerà resettare (spegnere e
riaccendere il Servo Controller) per rendere operativa la modifica.
Se si vuole verificare a che numero è settato il Servo Controller senza
modificarlo, si utilizzerà lo stesso comando visto sopra utilizzando il valore
16 per < numero servo Controller>. Il numero rimarrà immutato, ma il LED verde
lampeggerà per indicare il numero impostato.
Elenco revisioni | |
27/01/2011 | Inserito riferimento articolo rivista Fare Elettronica n° 297 |
09/03/2010 | Emissione preliminare |