Progetti - PIC

 

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.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 25/09/15.