Introduzione
Si precisa che questo progetto nasce più come scopo didattico, che applicazione pratica, ed è da ritenersi un aggiornamento dell’articolo precedente “Controllo e Pilotaggio di un Servo Comando”, presente nella sezione progetti degli utenti del sito www.LaurTec.it
Tramite questa nuova interfaccia è possibile pilotare da uno fino ad otto servi collegati alla porta D del PIC18F4550, presente a bordo della scheda Freedom I, Freedom II. Essa è stata sviluppata in ambiente Visual Basic 2010 Express e compilata con il Framework .NET 3.5, (quest’ultimo installato di default su XP Service Pack 2, Windows Vista e Windows 7) per cui non è necessaria alcuna installazione dell'applicazione. Dal punto di vista estetico, questa interfaccia rappresenta un salto di qualità rispetto alla GUI precedente che, ricordo agli utenti, fu sviluppata in ambiente Visual Basic 6. Per una migliore comprensione di questo progetto, si rimanda alla lettura del suddetto articolo.
GUI – Graphical User Interface
All’avvio della GUI, l’interfaccia si presenta come in Figura 1 ed è strutturata in modo abbastanza semplice ed intuitivo. Le uniche opzioni abilitate sono:
RS232 Setting: dove vanno impostati i parametri per la comunicazione seriale con la scheda Freedom, che di default sono quelli caricati in Figura 1.
Delay ms: dove vanno impostati i ritardi espressi in ms, sia in trasmissione che in ricezione, che di default sono quelli caricati in Figura 1.
TX buffer: che rappresenta il buffer di trasmissione ed è disabilitato in scrittura.
RX buffer: che rappresenta il terminale di ricezione e nel quale verranno scritti i dati ricevuti relativi all’indice (numero) del Servo azionato ed il suo valore (ms), valore rappresentato questa volta come variabile int, ma espresso sempre come ms * 10. Anche questo buffer è disabilitato in scrittura.
Nel menù “File” sono abilitati i seguenti pulsanti:
Load Setting: mediante il quale è possibile caricare le impostazioni iniziali, relative alla porta COM ed i ritardi scelti, definiti dall’utente (tali impostazioni vengono caricate dal file “settings.txt”, presente nella cartella del progetto)
Save Setting: mediante questa opzione è possibile salvare le impostazioni iniziali, relative alla porta COM ed i ritardi scelti, definiti dall’utente (tali impostazioni vengono salvate nel file “settings.txt”, presente nella cartella del progetto)
Exit: chiude il programma.
Nel menù “RS232” è abilitato solo il pulsante Connect, tramite il quale si avvia la comunicazione con la scheda Freedom I, Freedom II. Nel menù “Help” è abilitato solo il pulsante “About”, che riporta note sull’autore del programma.
Figura 1: Schermata di avvio del programma Eight Servos Controller.
Premendo il pulsante Connect vengono disabilitate tutte le impostazioni della porta seriale RS232, i pulsanti Load Settings, Save Settings e lo stesso pulsante Connect, mentre viene abilitato il pulsante Disconnect. Il pulsante Clear Buffers verrà abilitato ogni qualvolta il terminale RX buffer conterrà qualcosa e sarà possibile cancellarne il contenuto.
Verranno inoltre abilitati: tutti Checkbox di Enable associati agli Slider di controllo, in modo tale che, spuntando ognuno di esso venga abilitato lo Slider corrispondente, per mezzo del quale è possibile controllare un servo alla volta (Figura 2).
Figura 2: Esempio di controllo di 4 Servi.
Il pulsante All Enabled, permette di abilitare contemporaneamente tutti i servi. In Figura 3 è possibile vedere un’immagine dei servi tutti abilitati e posizionati a discrezione dell’utente.
Figura 3: Esempio di controllo di 8 Servi.
Il pulsante All Disabled, permette di disabilitare contemporaneamente tutti i Servi.
Il pulsante All Centered, permette di portare tutti i Servi in posizione neutrale (1,5 ms), a prescindere che tutti i Servi siano abilitati o meno dai relativi Checkbox di attivazione (Figura 4).
Figura 4: Esempio di Servi posizionati al centro.
Il pulsante Load Configuration, permette di caricare una configurazione dei Servi precedentemente salvata dall’utente (tale configurazione viene caricata dal file “values.txt”, presente nella cartella del progetto).
Il pulsante Save Configuration, permette di salvare una configurazione dei servi definita dall’utente (tale configurazione viene salvata nel file “values.txt”, presente nella cartella del progetto)
Il pulsante On, permette un loop infinito degli otto servi, ovvero permette che ad ogni servo sia assegnato il suo segnale pilota corrispondente (ms) e quindi mantenuto ciclicamente in posizione. Molti progetti, presenti in rete, pilotano otto servi facendo uso di potenziometri collegati ai vari ingressi ADC del microcontrollore scelto. La lettura del voltaggio in uscita ai potenziometri, facendo uso della tecnica dello shifting continuo (una sorta di multiplexing) determina la posizione finale per ognuno dei servi pilotati. Poiché in questo progetto non è presente alcun potenziometro, è stato necessario pensare a qualcosa che gli assomigliasse, ovvero che avesse gli stessi effetti finali. Per ottenere questo, è stato necessario effettuare la scansione di ogni singolo servo, iniziando dall’ottavo e per finire con il primo, inviando al microcontrollore, per ciascuno di essi, i valori di indice e di ms, lasciando tra un servo e l’altro un periodo di intervallo uguale al ritardo impostato nella casella Tx (Delay ms). Si consiglia di non modificare i tempi di trasmissione e di ricezione impostati all’apertura della GUI. Una cosa molto importante è che, a prescindere che tutti i servi siano abilitati o meno, o che la configurazione sia stata salvata o meno, la scansione procederà comunque, coinvolgendo tutti i servi collegati fisicamente alla scheda Freedom I o Freedom II. Premendo il pulsante ON verranno disabilitati: il pulsante Disconnect, tutti i Checkbox, i pulsanti All Enabled, All Disabled, All Centered, Load Configuration, Save Configuration e lo stesso pulsante On (Figura 5).
Figura 5: Esempio di invio posizione in Loop.
Premendo il pulsante OFF verrà interrotto il loop e verranno nuovamente abilitati tutti i controlli disabilitati in precedenza dal tasto ON.
Nota sulle Routine Presenti nel Software GUI
Ad eccezione della routine del loop, tutte le altre routine mantengono attivato solo l’ultimo servo pilotato dall’utente. Nel caso specifico della centratura di tutti i servi (All Centered) o del caricamento di una configurazione precedentemente salvata (Load Configuration), il servo attivo risultante sarà sempre il servo 1 in quanto, in entrambi i casi, la scansione procede dall’ottavo servo fino al primo, assegnando a questo il segnale pilota costante.
Firmware
Il progetto è stato sviluppato per mezzo dell'IDE MPLABX v1.80 e compilato con il compilatore C18 v3.43.
Il firmware è una estensione del progetto precedente Controllo e pilotaggio di un servo comando e permette il pilotaggio di otto servi collegati alla porta D del microcontrollore 18F4550, presente a bordo della scheda Freedom I o Freedom II. Nel caso specifico, al fine di inizializzare il sistema e di poterlo controllare successivamente, si è fatto uso di due variabili del tipo intero, index e value, e di un array monodimensionale di lunghezza pari ad otto celle, che inizia con pos[0] e termina con pos[7] e che contiene il valore iniziale (ms) di ogni singolo servo. Si ricorda che il valore reale dei ms, al fine di semplificare i calcoli e quindi evitare variabili del tipo float, è moltiplicato per 10, il che equivale a dire che un impulso di 15 ms, inviato dal PC alla scheda Freedom, corrisponde in realtà ad 1,5 ms. Tale vettore viene aggiornato, ogni qualvolta si invii una richiesta di spostamento, in base all’indice del servo, che altro non è che il suo numero progressivo. A titolo di esempio, inviando per il servo 3 un impulso di 1,8 ms, i dati inviati saranno rispettivamente 3 e 18. Quest’ultimo dato verrà riscritto nella cella corrispondente dell’array (in questo caso pos[2]) ed assegnata alla variabile intera ms, che servirà per determinare il tempo totale in base al quale il servo resterà attivo. L’algoritmo “index -1 “ determina la posizione dell’array nella quale verrà riscritto il dato, per un indice uguale a 7 la cella dell’array corrispondente sarà pos[6]. Il costrutto Switch – Case è preferibile ad una serie di If – Else If che, per quanto al pari funzionante, non è certamente da ritenersi una soluzione “elegante”. L’attivazione del servo avviene tramite impostazione dell’intera PORTD, inizialmente posta a 0, che assume valori che mettono ad 1 un singolo bit della stessa, bit corrispondente al numero del servo da pilotare. Anche in questo caso, la scelta è preferibile ad una serie di istruzioni di controllo.
Per ulteriori chiarimenti l’autore resta a disposizione.
Riassumendo...
Il progetto sebbene sia nato per scopi didattici si presta per applicazioni più complesse e come base con cui realizzare un controllo di un numero maggiore di Servo Motori. Essendo questo uno studio iniziale, sono gradite eventuali segnalazioni di bug o di malfunzionamenti: l’autore del progetto, cercherà di porvi rimedio.
File Type | Download File | Versione | Descrizione |
|
|||
|
Download | 1.0 | Firmware - Compilatore C18 |
|
Download | 1.0.0 | GUI VB .NET Framework 3.5 |
|
Download | 1.1 | Firmware - Compilatore XC8 |
|
Download | 1.0.1 | GUI VB .NET Framework 3.5 |
Bibliografia
[1] www.LaurTec.it : Sito dove scaricare il testo “C18 step by step” e la scheda tecnica Freedom I e Freedom II.
[2] Progetto Utenti - Controllo e pilotaggio di un servo Comando.
[3] www.microchip.com : sito dove scaricare i datasheet del PIC18F4550.
[4] Sito di Samuel Oliver Wane.
[5] Informazioni sul servo Comando Futaba.
[6] RS232 Terminal: Applicazione per il Debug della Porta Seriale.
RE: Controllo e Pilotaggio di 8 Servo Motori
Lascio la palla a Pinna....sembra nuovamente connesso nel World Wide Web! :)Saluti,MauroRE: Controllo e Pilotaggio di 8 Servo Motori
ops.. ho dimenticato di mettere il punto interrogativo.scusatemi piacerebbe vedere un filmato del progetto.RE: Controllo e Pilotaggio di 8 Servo Motori
Ciao mpeino, anch'io non ho capito se vorresti vedere un filmato dei servi oppure se questo filmato esiste già. Nel secondo caso, sappi che non sono stato io a farlo. Quindi i casi sarebbero due: si tratta di un altro progetto oppure qualcuno l'ha presentato per suo da qualche altra parteMarcelloRE: Controllo e Pilotaggio di 8 Servo Motori
Ciao mpeino,l'utore Pinna, e' momentaneamente fuori gioco con internet e non potra' rispondere.Non ho capito bene se la tua e' una domanda o un'affermazione. Vorresti vedere un video?Saluti,MauroRE: Controllo e Pilotaggio di 8 Servo Motori
Bel lavoro.C'è in rete un filmato del progetto.Ciao.RE: Controllo e Pilotaggio di 8 Servo Motori
Grazie di cuore per questo spirito di condivisioneControllo e Pilotaggio di 8 Servo Motori
Vi ringrazio tutti per i complimenti, anche se ritengo che il progetto si possa rivedere ulteriormente, (come è mia intenzione fare, dato che lo considero una versione beta). Però, se qualcuno molto più esperto di me volesse metterci le mani sopra e migliorarlo, la cosa mi farebbe enormemente piacere. Mi piace il lavoro di gruppo...MarcelloRE: Controllo e Pilotaggio di 8 Servo Motori
Ottimo e interessante lavoro, molto didattico il sorgente del pic...Per quanto riguarda la gui io utilizzo con soddisfazione Processing, sta crescendo molto, basato su java, e con una curva di apprendimento molto veloce... in rete si trovano molti esempi di guiSalutiPiergrazie
grazie veramente per il lavoro svoltoGrazie!
Riguardo i servo già mi è stato utile il primo progetto, riguardo la GUI..si bisogna che iniziamo a imparare a farle!Complimen ti!SteYou don`t have permission to comment here!