Page 1 of 1

Come misurare impulsi da ricevitore RC - PPM

PostPosted: 08 Jan 2015, 20:04
by ulisse21
ciao a tutti e buon anno anche se con assoluto ritardo :?
sono qui per chiedervi una cosa :roll:
ho per le mani un radio comando RC come quelli per gli aeromodelli.
Le uscite del ricevitore pilotano dei servo rc.
Ora al posto dei servi voglio mettere altri attuatori e motori + potenti per comandare un robot che sto costruendo.
Ho la necessità di decodificare gli impulsi PPM in uscita dal ricevitore e generare segnali PWM per comandare i motori.
Utilizzando un atmega328 e bascom come faccio a misurare la loro durata?
Esiste una istruzione diretta o devo strumentarmi qualcosa di complicato?

grazie per l'aiuto e ancora buone feste a tutti :)

Re: Come misurare impulsi da ricevitore RC - PPM

PostPosted: 09 Jan 2015, 10:56
by pier
Credo ti basti usare l'interrupt (INT0 o INT1) configurato come change (CONFIG INTx = CHANGE) che manda ad una routine di gestione ad ogni transizione (UP o DOWN) del pin associato e nella routine di gestione usare un timer (eventualmente gestito mediante prescaler) o anche un counter per misurare il tempo trascorso tra 2 transizioni del pin associato. Questo ti consente di misurare sia la durata dei tempi bassi che quella dei tempi alti degli impulsi di ingresso. Se invece usi gli stessi INT configurati come 1 o 0 misuri un periodo completo (1 alto + 1 basso o viceversa).
Se invece ti basta misurare solo la larghezza di un impulso alto o basso puoi usare PULSEIN (vedi file di help) il quale non utilizza timer hardware ma, nella configurazione standard della libreria, ha una risoluzione di 10 usec che non so se sufficiente. Modificare la libreria è possibile ma dovresti chiedere al nostro guru Deluca :D

Ciao

Re: Come misurare impulsi da ricevitore RC - PPM

PostPosted: 09 Jan 2015, 16:01
by ulisse21
pier
intanto grazie per la disponibilità nel darmi qualche suggerimento. gestire con gli int mi sembra un pò difficoltoso, così
provo a vedere con pulsein se riesco a misurare la durata dell'impulso alto.
vorrei avere una risoluzione migliore dei 10usec anche se alla fine avrei circa 8bit di risoluzione visto che
2500/10=250. devo vedere. boh! :shock: :)

Re: Come misurare impulsi da ricevitore RC - PPM

PostPosted: 09 Jan 2015, 21:13
by deluca
@ulisse,
per questo scopo PULSEIN potrebbe essere utilizzato.
Se hai necesità di migliorarne la risoluzione, come ti ha accennato già pier, bisogna modificare la libreria mcs.lib
che trovi sotto LIB, cercare la stringa "[_PULSE_IN]" e nella routine, un pò di righe più in basso, troverai "@genus(9)".
Con un valore di 9 la risoluzione sarà di circa 10uSec, anche se questo valore dipende dal quarzo usato.
Abbassa questo valore portandolo a zero o a valori inferiori a nove, ricompila il codice e ne vedrai subito l'effetto.

Se invece non vuoi modificare la libreria mcs.lib inserisci queste righe nel tuo codice:

Code: Select all
$lib "pulsein.lib"
const cpulsein_timeout = 50000
dim bpulsein_delay as byte : bpulsein_delay = 10


il compilatore userà la libreria pulsein.lib a cui verrà passata la variabile bpulsein_delay che determinerà il tempo di delay e quindi la risoluzione.

Re: Come misurare impulsi da ricevitore RC - PPM

PostPosted: 10 Jan 2015, 14:39
by ulisse21
grazie deluca e pier per l'aiuto,
@deluca, ho adottato la tua seconda soluzione e sembra andar bene.
regolando opportunamente il delay adesso riesco a leggere il valore da 500 a 2500
praticamente voglio comandare il dutycycle del pwm con il valore letto dal ppm.

ancora grazie e alla prossima.