ORbit16™ USB Servo Controller
Ho realizzato con ORbit16™ (con PIC24FJ64GB002) un firmware per il controllo dei servocomandi. I servocomandi vengono gestiti interamente tramite interrupt, per cui il main è completamente vuoto. Una libreria di esempio, ridotta, è presente qui. Questa libreria consente il controllo di 6 servocomandi, i più bravi capiranno facilmente come espanderla.
L’utilizzo di tale programma di esempio è estremamente semplice: nel main basta richiamare una sola volta la funzione ServoOpen per impostare tutti i registri (un Timer e un modulo Output Compare, oltre all’impostazione delle porte che forniscono il segnale ai servo). Dopodichè basta sfruttare la funzione ServoSet(X,Y) per impostare il servo X al valore di Y millisecondi. E’ possibile muovere i servocomandi in un range da 500 a 2500mS. La risoluzione ottenuta con queste funzioni è di 1µS ma in realtà il sistema adottato consente una risoluzione fino a 0.5µS. Sfruttando questi princìpi ho realizzato un servo controller USB, per il quale è presente l’HEX e il manuale di utilizzo in questa pagina.
Il Firmware del servo controller USB consente il controllo di 10 Servocomandi (in realtà ne sono previsti 12 ma ho preferito non utilizzare, in questa release, le due porte sfruttate dall’oscillatore secondario) tramite semplici comandi impartiti su USB in emulazione seriale. Una GUI scritta in VB.NET consente di testare il firmware impartendo la posizione dei servi tramite 10 controlli slider. Questo video illustra il funzionamento meglio di qualsiasi altra parola:
Il circuito, dato che è molto semplice, l’ho realizzato su una breadboard (potete seguire qui le istruzioni su come realizzare queste semplici espansioni). I servocomandi vanno obbligatoriamente alimentati a parte (non usate la 5V proveniente dalla scheda!) sia per una questione di sicurezza, che di corrente assorbita, che di disturbi. Generalmente i servocomandi presentano il massimo valore di coppia con una tensione di alimentazione di 6V, ma fate riferimento ai dati di funzionamento dei servocomandi in vostro possesso (inutile specificare che la massa dell’alimentazione dei servocomandi e la massa di ORbit16™ vanno messe in comune).
I comandi da impartire tramite USB/Seriale sono molto semplici. Ho previsto comandi per il posizionamento, la centratura e la lettura del valore di ogni servo. I comandi sono impartibili sia in formato ASCII che in binario, consentendo così un’ampia scelta al programmatore che vuole creare da sè il proprio software di controllo. Il manuale è completo e abbastanza esplicativo.
Ho inoltre in progetto una scheda di espansione per ORbit16™ che prevede il collegamento di massimo 12 servocomandi, con un trimmer su un ingresso analogico, un’eeprom I2C, pulsante utente e pulsante reset, e dei connettori per portare all’esterno la linea I2C o la linea UART. La scheda in questione (solo PCB) costerà intorno ai 13/15 euro (spedizione esclusa), ma non credo che la realizzerò a meno di non trovare almeno una decina di interessati al progetto, in questo caso renderò disponibile anche i sorgenti del servo controller USB (che include la libreria completa per i servocomandi) e della GUI più altri esempi (tra l’altro sto anche realizzando un controllo per servocomandi tramite Gamepad USB). Ricordo che ORbit16™ è un progetto a supporto di Settorezero e che chi contribuisce acquistandone una ottiene anche un codice di invito valido per la registrazione su www.orbit16.com per poter accedere ad esempi, progetti e manuali.