|
Tutorial Servomotore R/C
Il servomotore R/C (Servo R/C) è un dispositivo miniaturizzato che contiene
un circuito elettronico di controllo digitale, un motore, un blocco di riduzione
e un sensore di retroazione della posizione, il tutto in un piccolo case plastico
o di alluminio.
Originariamente costruito a componenti discreti, oggi realizzato su di in un
singolo circuito di controllo integrato, il servo converte la lunghezza dell’impulso
di controllo in un livello di tensione, confronta tale livello con il segnale
ottenuto dal sensore di posizione e pilota il motore in modo da annullare
la differenza tra i due segnali. L’effetto è quello di controllare la posizione
del motore con un unico semplice segnale. Tipicamente gli R/C Servo hanno
aperture di rotazione che vanno da 90° a 120°, con 2 msec di impulso
di controllo per portarsi a fine corsa e 1 msec per portarsi ad inizio corsa.
Alcuni motori possono raggiungere un’apertura massima di 180°, ma hanno
un impulso di comando che varia tra 0.8 msec e 2.2 msec.
Questa tipologia di motori `e oggi particolarmente usata in modellismo per
controllare gli organismi di sterzo in automodelli o le superfici di controllo
degli aeromodelli.
Il segnale di controllo per un servo R/C è assimilabile ad un PWM il cui Duty
Cycle determina la posizione dell’asse di rotazione. Il periodo del PWM può
variare tra 20 msec e 30 msec, l’impulso di comando (dt) varia tra 1 msec
(posizione iniziale) e 2 msec (posizione finale), frazioni intermedie determinano
posizioni intermedie.
Controllo del Servo Motore
Per controllare con precisione il servo motore è necessario generare un segnale
PWM in grado di variare il Tempo in cui rimane alto con una risoluzione di
11 usec.
Per ottenere una tale precisione è necessario disporre di un sistema di controllo
Real Time.
Descrizione della struttura di supporto
Il più semplice sistema Real Time, in grado di gestire un protocollo di comunicazione
tramite porta parallela è realizzabile tramite un microcontrollore,
in questo caso il Microchip PIC 16F628 descritto di seguito.
Il PIC 16F628
Il PIC 16F6284, prodotto dall’americana Microchip, è un microcontrollore
RISC di ridotte dimensioni dotato di memoria flash cancellabile e riprogrammabile
elettricamente migliaia di volte. Questa sua caratteristica lo
rende adatto per lo sviluppo di prototipi.
Quale processore di classe RISC è programmabile con soli 35 comandi assembler,
ogni istruzione impiega un unico ciclo di clock per essere eseguita
(eccetto le istruzioni di controllo di flusso che ne occupano due).
Il microcontrollore è provvisto di un clock interno a 4Mhz e può essere dotato
di un clock esterno fino a 20Mhz per applicazioni che richiedono velocità di
calcolo superiori.
L’interfacciamento esterno è garantito da 18 pin, dei quali 16
hanno funzioni di I\O e uno è in grado di gestire interruzioni hardware
esterne.
Alcuni pin sono utilizzati per gestire funzionalità avanzate particolari:
• Due convertitori Analogico-Digitale
• Modulo di Comunicazione Seriale USART
• Un comparatore di livello
• Programmazione “In Circuit”
La circuiteria interna fornisce due timer a 8bit e uno a 16bit prescalabili,
utili per la generazione di segnali PWM o per gestire dei semplici contatori,
grazie anche al modulo CCP (Capture and Compare).
Il processore `e infine dotato di tre tipi di memoria:
• 2048x14 bytes di memoria programma FLASH;
• 224x8 bytes di memoria RAM per le variabili di programma;
• 128x8 bytes di memoria EEPROM non volatile per i dati.
Descrizione del firmware di controllo del PIC 16F628
Il PIC è programmato in modo da generare il segnale PWM descritto
in figura. Il duty cycle del segnale è regolabile tramite PC attraverso la porta
parallela o tramite una pulsantiera integrata sul circuito di
controllo, utile soprattutto in fase di test.
Il firmware è costituito da un ciclo infinito in cui il PIC controlla gli ingressi
per riscontrare eventuali cambiamenti di stato dovuti alla pressione dei pulsanti
o all’invio di un comando da PC e adegua la durata dell’impulso di
controllo al segnale ricevuto.
Il segnale PWM è generato tramite l’impiego del modulo CPP e degli interrupt
interni.
Il registro TMR1 contiene il valore 49536, valore tale che incrementando il
registro ad ogni ciclo di clock, si avrà un interruzione per overflow dopo
65536-49536=16000 colpi di clock, cioè dopo 20msec, il periodo principale
del PWM. La routine di interruzione provvederà a ripristinare il valore iniziale
di TMR1 in modo da far ripartire il ciclo.
Il registro CCP contiene il valore
SetCCP = 64536 - (( unsigned long int ) Gradi * 11111111)/1000000;
che, incrementato ad ogni ciclo di clock, andrà in overflow dopo un tempo
tale da generare l’impulso di comando relativo alla posizione che il motore
deve assumere (“Gradi”) relativamente alla posizione ottenuta per un impulso
di 1msec. Il modulo CCP provvede automaticamente ad
invertire il valore dell’uscita RB3, alta all’inizio del ciclo, bassa all’arrivo
dell’interruzione.
All’avvio partono entrambi i timer. Quando il timer di impulso va in overflow
viene generata un’interruzione interna e la routine di gestione provvede ad
abbassare il livello dell’uscita di controllo del servomotore. All’overflow del
primo timer (ogni 20 msec) il ciclo riparte da capo riportando automaticamente
a livello alto il segnale di controllo.
Il codice del Firmware è stato realizzato in C e compilato tramite PICCLite7.
( Codice servo motore)
Il firmware permette al motore tre movimenti base: rotazione di 1°
in senso orario, rotazione di 1° in senso antiorario, posizionamento neutrale
a 45°.
Il tutorial ti è stato utile?
Offrimi un caffè, sarò felice di realizzarne di migliori.
|