ultimo aggiornamento 27 gennaio 2012


 

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.

homotix

PCBA

OurPCB

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
Private Policy Cookie Policy Termini e Condizioni