Tester per servo RC con
uscita RS232
|
Abbiamo visto un semplicissimo, ma efficiente tester
per servocomandi.
Con due pusanti possiamo variare la durata dell'impulso di comando tra 0.75
e 2.25ms. Per questa operazione è sufficiente un PIC10F a sei pin.
Sarebbe utile, però, sapere quale è l'ampiezza dell' impulso in modo da
poterlo correlare all' angolo di rotazione dell'attuatore. Non volendo
utilizzare un diverso chip, abbiamo ancora a disposizione un pin del package a
6.
Escludiamo di aggiungere un certo numero di componenti esterni per comandare
un display: volendo 7 segmenti o LCD, la soluzione più sensate non è quella di
aggiungere "pezzi", ma quella di cambiare chip con uno che abbia pin
sufficienti a comandare il display voluto; il costo è minore è minore.
Però, abbiamo una possibilità pratica: inviare il dato dell' ampiezza dell'impulso su una linea seriale e visualizzarlo sul PC, con uno dei tanti
programmi di emulazione terminale.
L'hardware.
Sulla base precedente aggiungiamo l'interfaccia con la linea seriale. Questo è lo schema elettrico.
GP0 e GP3 sono collegati ai due pulsanti Up e Down, mentre GP2 è l'uscita
del segnale di controllo del servo e GP1 e l'uscita seriale.
Non occorre alcun buffer, dato che l' ingresso del servo richiede un segnale a
livello logico e lo alimentiamo alla stessa Vdd del microcontroller.
Allo scopo di minimizzare i componenti, utilizziamo i weak pull-up abilitabili
su GP0 e 3, evitando così la necessità di resistenze esterne sui pulsanti.
Il clock è interno, a 4MHz, che determina un ciclo istruzione di 1us.
E' comodo
utilizzare la LPCuB
per sviluppare il programma:
Il jumper volante "marrone" collega il pulsante PB4 al GP0,
mentre quello "viola" collega il PB2 al GP3.
Il jumper volante "azzurro" collega il GP1 al connettore JSC
da cui derivare l'interfaccia per la linea RS232.
A questo riguardo rimandiamo ad alcune
pagine relative.
AVVERTENZA: dato che i pulsanti sono collegati a GP1 e GP3 che
sono utilizzati durante la programmazione del chip, occorre assicurarsi che
essi non siano premuti durante questa operazione che, altrimenti,
sarebbe impossibile.
|
Il programma
Il sorgente è del tutto analogo a quello visto: è stata semplicemente
aggiunta la sezione relativa alla trasmissione seriale, a cui si aggiunge la
necessità di trasformare il dato relativo all' ampiezza dell' impulso da
esadecimale ad ASCII per l'invio sulla seriale.
La routine di trasmissione seriale, descritta qui,
e la conversione esadecimale-ASCII sono aggiunte al sorgente al termine
dell'analisi dei tasti, in modo che una nuova trasmissione di dati possa
avvenire solamente a seguito del cambiamento dell' ampiezza dell' impulso
dovuto alla pressione dei tasti, che sono verificati ogni 200ms.
Nel frame da 20ms determinato da Timer0, la gestione del servo richiede 2.25ms
massimo, più 10ms per la gestione dei tasti, il che lascia liberi qualcosa
meno di 18ms, tempo in cui la trasmissione del dato (3 caratteri) + CR-LF è
ampiamente possibile (5ms circa a 9600).
Per quanto riguarda il dato da trasmettere, si tratta del buffer t0
che contiene il numero di step da 10us da aggiungere al tempo base di 750us.
Questo numero è in esadecimale e varia tra 0 e 150. Occorre una conversione
in caratteri ASCII per la trasmissione sulla linea RS232. Per questo è stata
usata una subroutine molto compatta che trasforma il dato esadecimale in tre
digit BCD a cui aggiunge 30h per ottenere il carattere ASCII corrispondente.
Appena convertito, il digit viene inviato, sostituendo eventuali 0 nelle prime
due posizioni con uno spazio (leading zero suppression).
Al termine di ogni trasmissione, viene emesso il classico CR-LF per il salto
linea sul terminale di ricezione.
Come per l'esempio precedente, il sorgente è compilabile per PIC10F200/202/204/206/220/222: una selezione
automatica consente di adeguare l'inizializzazione del chip a seconda del
modello (204/206 hanno un comparatore integrato, mentre 220/22 hanno il modulo
ADC, che vanno esclusi per utilizzare le pure funzioni di I/O digitale dei
pin).
Il programma utilizza il set base di istruzioni ed è quindi portabile
su qualsiasi altro PIC semplicemente adeguando la parte iniziale.
Funzionamento.
Una volta programmato il microcontroller e collegato il servo, all'arrivo
dell' alimentazione, il sistema funziona esattamente come il precedente. Il
collegamento con la linea seriale , anche se è omesso, non influenza le
funzioni basilari. Ovvero, le funzioni dei tasti sono indipendenti dalla
presenza della connessione seriale.
- All'arrivo
dell' alimentazione sarà prodotto un impulso da 1.5ms. L'attuatore si dovrà
portare a centro corsa.
- Premendo il tasto down la durata dell' impulso scenderà a passi di 10us
una volta ogni 240ms verso il limite minimo di 0.75ms. L'attuatore ruoterà
verso sinistra.
- Premendo il tasto up, la durata dell' impulso salirà a passi di 10us una
volta ogni 200ms verso il limite massimo di 2.25ms. L'attuatore ruoterà verso
destra.
- Premendo contemporaneamente i tasti, si otterrà un impulso da 1.5ms che
riporterà al cento l'attuatore.
Dato che l'escursione supera il tratto 1-2ms nominali, sarà possibile
verificare anche se il servo sotto test agisce in questo range o richiede
tempi maggiori o minori.
|
Collegando l'interfaccia seriale al cavo proveniente dal
PC ed attivando un emulatore di terminale (Hyperterminal, Realterm,
Terminal.exe,
ecc.) vedremo apparire i valori di ampiezza dell' impulso, variabili a
seconda della pressione dei pulsanti.
Ecco come appare la ricezione sul pannello di Terminal.exe. La
trasmisione è su COM1 in formato 9600/n/8/1.
Ad ogni pressione dei pulsanti, viene trasmesso il dato
dell'ampiezza dell'impulso.
I numeri indicano le decine di us, per cui, ad esempio 150 indica
1500us (1.5ms).
Mantenendo premuto un pulsante, il valore varierà ogni 200ms.
In questo modo sarà possibile comparare con precisione la
posizione meccanica dell'attuatore con la durata dell'impulso
necessario a raggiungerla. |
Non è stato previsto un circuito stampato, ma, vista l'estrema semplicità
del circuito, la sua realizzazione non è certo un problema. Si potrà usare
anche un cablaggio su una millefori, dato che non ci sono elementi critici.Qui potete scaricare il programma Assembly come sorgente
ed eseguibile compilato per 10F204/206.
|