Controllo e Pilotaggio di un Servo Comando

Valutazione attuale: 4 / 5

Introduzione


Quando si realizzano i primi sistemi in grado di effettuare movimenti autonomi, ci si trova subito difronte alle numerosi possibilità ed applicazioni offerte dai Servo Motori. Sebbene un Servo Motore sia famoso grazie alla sua facilità di utilizzo, la prima volta che li si utilizza si possono incontrare molte difficoltà. Grazie al seguente progetto è possibile non solo imparare ad utilizzare un Servo Motore ma anche a comandarlo direttamente dal Computer.

Autore: Marcello Pinna

Strumenti Utilizzati

Per realizzare il progetto si  è fatto uso del seguente materiale:

Hardware


•    Alimentatore variabile 1.25V-15V 1A
•    Scheda Freedom I – tale scheda è predisposta per il pilotaggio di otto servi tramite  una serie di connettori a tre poli dedicati ed è dotata dell’hardware necessario per la comunicazione seriale RS232 (per ulteriori informazioni consultare il relativo manuale).
•    PIC18F4550
•    Programmatore Potyo2 (clone ICD 2)
•    Cavo seriale RS232
•    Servocomando Futaba mod. S3003

Nota:
Qualora il proprio PC non abbia una porta seriale  è necessario utilizzare un adattatore USB-Seriale.


Software

•    MPLAB IDE v8.36
•    Interfaccia grafica e relativo software,  sviluppato in ambiente VB6

Nota:
Qualora l'interfaccia grafica non fosse compatibile con il proprio sistema operativo è possibile utilizzare “RS232 Terminal”, ovvero il Tool “Sliders”.
 

Applicazioni

Il progetto presentato permette di controllare un servo collegato ad un PIC18F4550 per mezzo di un computer. L'applicazione può essere utilizzata come base per controllare più servi e realizzare applicazioni più complesse.
 

Il Servo Motore

Prima di iniziare vediamo cosa è un Servo Motore. Un Servo Motore di tipo amatoriale altro non  è che un motore DC  a spazzole racchiuso all'interno di un contenitore con relativi ingranaggi necessari per ottenere un buon compromesso di coppia e velocità di rotazione. Oltre alla meccanica è anche presente l'elettronica di controllo per spostare e mantenere una determinata posizione. In Figura 1 è riportato un modello economico di Servo Motore per applicazioni amatoriali.

Figura 1: Esempio di un Servo Motore

Figura 1: Esempio di un Servo Motore.

Si noti  la presenza dei tre fili collegati ad un piccolo connettore, questi rappresentano rispettivamente il -, + e linea di controllo dove inviare l'impulso per la posizione (si veda di seguito). Il codice dei colori cambia da costruttore a costruttore, ma normalmente il -  è di colore nero o marrone, il +  è di colore rosso mentre la linea di controllo è bianca o arancio. Molti Servo Motori richiedono una tensione di alimentazione compresa tra 4.8V e 6V. La corrente richiesta dal Servo viene a dipendere dal modello, per cui bisogna far sempre riferimento al datasheet ufficiale.

In Figura 2 è riportato un dettaglio di un Servo Motore aperto, in cui è visibile l'elettronica di controllo. In particolare è visibile il controllore e i quattro transistor che compongono il ponte H al quale è collegato il motore DC a spazzole (si ricorda che un ponte H permette di far ruotare un motore in entrambe le direzioni).
 

Figura 2: Esempio dell'elettronica di un Servo Motore

Figura 2: Esempio dell'elettronica di un Servo Motore.

I Servo Motori di tipo amatoriale si dividono in analogici e digitali, i primi sono più economici mentre i secondi sono caratterizzati da maggiori performance e accompagnati anche da un costo maggiore. Maggiori performance si traducono in maggiore coppia, precisione nel posizionamento e possibilità di leggere alcuni parametri dal servo stesso, cosa non possibile nei Servo motori analogici.
I servo analogici per mantenere la posizione, ovvero determinare la posizione del proprio asse, fanno uso di un potenziometro che ruota assieme all'asse stesso. Il potenziometro si comporta come un partitore di tensione, per cui al variare della sua posizione varierà in maniera proporzionale anche la tensione ai suoi capi. La logica di controllo del Servo Motore fa uso di questa tensione per determinare una nuova posizione e mantenerla. In Figura 3 è riportato un dettaglio di un Servo Motore aperto, nel quale  è visibile sia il motore DC a spazzole che il potenziometro.

Figura 3: Dettaglio del motore e del potenziometro interno ad un Servo Motore

Figura 3: Dettaglio del motore e del potenziometro interno ad un Servo Motore.

Per poter impostare una nuova posizione in un servo analogico si fa uso di impulsi con larghezza variabile da inviare alla linea di controllo. Normalmente molti servo richiedono un impulso compreso tra 1ms e 2ms. Quando l'impulso è pari a 1.5ms il Servo motore si posiziona al centro. I valori dell'impulso appena citati possono variare leggermente da modello a modello a seconda dell'ampiezza della rotazione permessa dallo stesso. Molti servo hanno una specifica di 120º, ma molti permettono anche movimenti con rotazione fino a 180º (larghezza impulso 0.5ms-2.5ms).
Il limite sulla rotazione è imposto da un blocco meccanico all'interno del Servo Motore stesso e serve per impedire di forzare il potenziometro interno, che per sua natura non può ruotare a 360º.  Rimuovendo il blocco ed il potenziometro  è possibile modificare un Servo Motore per una rotazione continua. Questa operazione è spesso fatta per realizzare dei piccoli robot e sfruttare il motore DC e relativi ingranaggi presenti all'interno del Servo Motore  Un dettaglio della meccanica interna al Servo Motore  è riportato in Figura 4 (il blocco è posto sotto l'ingranaggio nero sulla destra della Figura).

Figura 4: Dettaglio della meccanica di un Servo Motore

Figura 4: Dettaglio della meccanica di un Servo Motore.

Per permettere ad un Servo Motore il mantenimento della posizione, oltre a dover inviare un impulso relativo alla posizione voluta, è necessario ripetere l'invio dell'impulso in maniera continuativa. Normalmente si consiglia di ripeterlo ad una frequenza di 50Hz ovvero con periodo di 20ms. Inviare il rinfresco della posizione a frequenze troppo elevate può causare il malfunzionamento del Servo Motore, normalmente il limite si aggira intorno a 10ms ovvero con frequenze di rinfresco di circa 100Hz. Un dettaglio di quanto appena detto  è riportato in Figura 5.

Figura 5: Dettaglio degli impulsi per comandare un Servo Motore.

Figura 5: Dettaglio degli impulsi per comandare un Servo Motore.

Analisi del progetto

E’ doveroso precisare che il sorgente allegato al progetto è un adattamento del codice originale di Samuel Oliver Wane [3] ed  è servito, soprattutto, come primo approccio  al funzionamento ed utilizzo del Timer1 interno al PIC18F4550. Il codice originale, scritto per un PIC18F2520 con  quarzo esterno da 40 MHz, presenta però il grande svantaggio di utilizzare al suo interno solo una variabile di tipo float, a cui assegnare il valore dei mSec necessari al pilotaggio del servo. Ne deriva, quindi, che per spostare il servo da una posizione ad un’altra, bisogna ogni volta correggere il valore di questa variabile e ricompilare il progetto. Rispetto al codice originale, il sorgente allegato presenta sostanziali differenze che possono essere brevemente riassunte in tre punti:

-    comunica con l’hardware necessario per via seriale tramite interfaccia grafica
-    utilizza  variabili di tipo char ed int
-    assegna automaticamente il valore dei mSec

Entrando maggiormente nei dettagli, la comunicazione seriale con l’hardware avviene tramite un cavo seriale, che collega la porta COM del computer al sistema Freedom, ed una interfaccia grafica (GUI), con la quale si abilita la connessione ed il pilotaggio. La connessione viene stabilita una volta che il sistema Freedom è alimentato  (resettato) e si è premuto il tasto Connect della GUI. A connessione avvenuta, viene visualizzato un messaggio di conferma. E’ possibile anche la disconnessione momentanea e la successiva riconnessione, un’opzione che può rivelarsi utile magari per la sostituzione di un servo. Il pilotaggio di quest’ultimo, avviene grazie allo spostamento del cursore di un controllo chiamato “Slider”. La scala di questo controllo è suddivisa in decimi di mSec ed il suo range si estende da 0,5 mSec (servo tutto a destra) a 2,5 mSec.(servo tutto a sinistra). All’apertura dell’interfaccia, il cursore viene automaticamente settato ad un valore di 1,5 mSec, che corrisponde alla posizione centrale.  I piccoli spostamenti, dell’ordine di 0,1 mSec, si possono effettuare per trascinamento del cursore con il mouse oppure utilizzando i tasti freccia della tastiera del computer. Spostamenti più grandi (0,5 mSec) possono essere effettuati quando si fa un click con il mouse a fianco del cursore stesso. E’ anche presente, in basso a destra della GUI, una piccola utilità sotto forma di casella, nella quale i mSec (quindi gli spostamenti) vengono convertiti in gradi: 0,5 – 1,5 – 2,5 mSec corrispondono rispettivamente a 90 – 0 –  -90  gradi. Ogni mSec corrisponde ad uno spostamento di 90 gradi, positivi o negativi.  Si è detto, poco fa, che sono state eliminate le variabili float e che si lavora con char ed interi: poiché questo risulta essere un modo più semplice per gestire i dati, si è fatto in modo che i mSec selezionati ed inviati al microcontrollore con il cursore siano, in realtà,  già moltiplicati per un fattore di 10 prima della loro elaborazione. La risultante di tutto questo sarà che prima verranno reindirizzati al terminale della GUI come interi e successivamente elaborati. Per concludere, sono state fatte delle misure dei mSec a confronto con uno strumento di precisione: esse si dimostrano perfettamente compatibili
 

Istruzioni per il montaggio

Come accennato il servo comando è collegato alla scheda Freedom I sul connettore SV1. Facendo uso di un PIC18F4550 montato su scheda millefori o altre schede di sviluppo quali Freedom II,  è necessario collegare il Servo Comando al pin RD0 come riportato in Figura 6.

Figura 6: Connessione del Servo al PIC18F4550

Figura 6: Connessione del Servo al PIC18F4550.

La presenza del resistore R3 permette di proteggere l'uscita del PIC da eventuali inversioni del connettore del Servo Motore.
L'alimentazione del Servo Motore  è bene che non sia prelevata direttamente dai 5V che alimentano il microcontrollore. Questo infatti potrebbe causare dei Reset della CPU a causa dei picchi di corrente richiesti dal Servo quando cambia posizione o si trova sotto carico. I picchi di corrente sono infatti causa di abbassamenti di tensione che possono causare il malfunzionamento del microcontrollore.
La scheda Freedom I, sebbene possa prelevare l'alimentazione da un unico alimentatore, possiede un secondo regolatore lineare che filtra eventuali disturbi. Nello schema di Figura 6 l'alimentazione  è prelevata da un Battery Pack.
 

Collaudo e messa in funzione

Il progetto è composto da due applicazioni:

•    Interfaccia grafica sviluppata con VB6
•    Firmware per PIC18F4550

Il Firmware per PIC18F4550 non è qui descritto ma può essere scaricato a fine documento. Il sorgente è commentato in maniera accurata per cui non dovrebbero essere richiesti altri dettagli. Si fa solo notare che i valori ricevuti dal PC sono in formato ASCII, ovvero il numero 20 non viene inviato come carattere ASCII 20 ma come carattere ASCII '2' e '0'. La lunghezza del dato è sempre pari a due, dunque quando la GUI invia valori inferiori a 10, come per esempio 8, invia in automatico uno 0, ovvero invia 08.   

L'interfaccia grafica  è stata testata su PC dotato di  sistema operativo  Windows XP SP3 e porta COM nativa. Per testare il sistema si  è proceduto nel seguente modo:

•    Collegare il servocomando come precedentemente illustrato.
•    Collegare il cavo seriale alla porta COM1 del computer e alla Freedom. Nel caso la porta non fosse presente, o fosse occupata, è possibile sceglierne un’altra dall’elenco presente nella combo box relativa. La selezione della porta va fatta prima della connessione.
•    Impostare la porta seriale a 19200 bit/s, 1 bit di stop, Format 8 bit e Handshaking None.
•    Importare il file hex del progetto (o ricompilarlo) e programmare il PIC18F4550. Staccare il cavo del programmatore dalla scheda e premere il relativo tasto reset

Connessione

All’apertura, la GUI si presenta con le impostazioni iniziali di default: il tasto Disconnect ed il controllo Slider entrambi disabilitati come riportato in Figura 7.
 

Figura 7: Schermata principale del Servo Controller

Figura 7: Schermata principale del Servo Controller.

Premendo il tasto Connect, questo si disabilita, si disabilitano anche le caselle dei Combo Box, si abilita il tasto Disconnect ed il controllo Slider, si stabilisce la comunicazione con la scheda Freedom ed appare il messaggio di conferma nel terminale, come riportato in Figura 8.

Figura 8: Riconoscimento della scheda Freedom I

Figura 8: Riconoscimento della scheda Freedom I.

Volendo, ci si può disconnettere momentaneamente, senza chiudere l’interfaccia grafica: basta premere il tasto Disconnect, che si disabiliterà, causando l’abilitazione del tasto Connect e la pulizia del terminale.
Per spostare il servo, come detto, basta muovere il cursore del controllo Slider. Ciò comporterà la visualizzazione, nel terminale, del dato (reale) elaborato dal microcontrollore con conseguente spostamento del servo nella posizione desiderata. (Notare in Figura 9 la casella in basso a destra che riporta uno spostamento a sinistra di 18 gradi (-18°).
 

Figura 9: Esempio di attività della GUI Servo Controller.

Qualora si volesse far uso di “RS232 Terminal”  è necessario impostare il formato di scrittura come ASCII ed avviare il Tool Sliders. Abilitare un solo Slider e selezionare l'opzione “Append 0 to get fixed data length”, come riportato in Figura 10.

Figura 10: Schermata Sliders Tool di RS232 Terminal

Figura 10: Schermata Sliders Tool di RS232 Terminal.

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

Formato File zip

Download 1.0 Firmware

Formato File zip

Download 1.0 GUI

 

 

 

 

 

 

 

 

Bibliografia


[1] www.LaurTec.it : Sito dove scaricare il testo “C18 step by step” e la scheda tecnica Freedom I.  
[2] www.microchip.com : sito dove scaricare i datasheet del PIC18F4550.
[3] Sito di Samuel Oliver Wane.
[4] Informazioni sul servo Comando Futaba.
[5] RS232 Terminal: Applicazione per il Debug della Porta Seriale.
 

 

 

 

Gravatar
Mauro Laurenti
RE: Controllo e Pilotaggio di un Servo Comando
ogni tanto ci penso di aggiungere dei video.Tempo fa ho testato dei plugin per il sito al fine di effettuare lo straming video direttamente dal server in cui risiede LaurTec, oltre a YouTube.Saluti,Mauro
0
Gravatar
Marcello
video progetti
Ciao bassfender, l'idea dei video la reputo ottima e, con l'apporto di Mauro, si realizzerà sicuramente in un prossimo futuro.p.s. off topic: possiedo una fender acustica con cui mi diverto a suonare per gli amici. Se risiedi a Roma, fatti vedere...
0
Gravatar
giacomo rinaldi
video progetti
Ciao, bel progetto ma perchè non mettiamo dei video dei vari progetti per entusiasmare di più i nostri amici lettori ?
0

You don`t have permission to comment here!

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login