spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Forum di robotica di base > Meccanica

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 26-07-2010, 19.30.23
nak nak non è collegato
Nuovo robottaro
 
Data registrazione: 17-06-2010
Residenza: Firenze
Messaggi: 5
Potenza reputazione: 0
nak E' per ora ancora un mistero
Predefinito lettura encoder, frequenze corrette

Salve a tutti,

domanda: sto programmando con l'avr butterfly atmega 169 e mi trovo a dover fare una lettura di un encoder incrementale. La frequenza di funzionamento dell'encoder è 100 Khz mentre il clock dell'avr è di 8 Mhz ( al max) . Per leggere correttamente l'encoder dovrò utilizzare un prescaler per il clock ( giusto? )... quello ke mi chiedo io... durante la lettura dell'encoder dovrò abbassare la frequenza del clock avr ma mentre non leggo l'encoder la posso rialzare a 8 Mhz ?

Attendo risposta
Rispondi citando
  #2  
Vecchio 26-07-2010, 21.16.56
L'avatar di calo
calo calo non è collegato
Moderator
 
Data registrazione: 14-06-2006
Residenza: EmiliaSiciliaRomagna
Messaggi: 798
Potenza reputazione: 46
calo E' un faro della comunità
Predefinito

Citazione:
Orginalmente inviato da nak Visualizza messaggio
... quello ke mi chiedo io... durante la lettura dell'encoder dovrò abbassare la frequenza del clock avr ma mentre non leggo l'encoder la posso rialzare a 8 Mhz ?
Questo ragionamento non ha proprio senso!!

Devi usare una periferica (nei pic si chiama Input Capture) capace di captare i fronti di salita (o discesa) dell'encoder e di dirti quanto tempo intercorre fra due fronti consecutivi (si basa su un timer).

Puoi anche usare una periferica che ti scatena un interrupt per ogni fronte di salita/discesa dell'encoder e mediante un timer calcolare il tempo fra i due fronti.

Come puoi ben capire, più alta è la frequenza a cui lavora il tuo micro, maggiore sarà la risoluzione del timer che ti calcola il tempo....ecco perchè la storia di abbassare la frequenza è sbagliata.
Rispondi citando
  #3  
Vecchio 26-07-2010, 22.18.01
nak nak non è collegato
Nuovo robottaro
 
Data registrazione: 17-06-2010
Residenza: Firenze
Messaggi: 5
Potenza reputazione: 0
nak E' per ora ancora un mistero
Predefinito

Quindi mi suggerisci di utilizzare una interruzione di tipo Output Compare ...
ma non riesco a capire a cosa mi serve calcolare il tempo fra due fronti in salita che nel mio caso possono non essere periodici....
Rispondi citando
  #4  
Vecchio 27-07-2010, 06.57.08
L'avatar di calo
calo calo non è collegato
Moderator
 
Data registrazione: 14-06-2006
Residenza: EmiliaSiciliaRomagna
Messaggi: 798
Potenza reputazione: 46
calo E' un faro della comunità
Predefinito

Citazione:
Orginalmente inviato da nak Visualizza messaggio
Quindi mi suggerisci di utilizzare una interruzione di tipo Output Compare ...
io ho detto Input Capture, non Output Compare. Nei Pic sono due funzionalità diverse.

Citazione:
Orginalmente inviato da nak Visualizza messaggio
ma non riesco a capire a cosa mi serve calcolare il tempo fra due fronti in salita che nel mio caso possono non essere periodici....
misurare il tempo fra due fronti di salita è come fare velocità=spazio/tempo
Cosa c'entra che non sono periodici? Chi ha detto che l'albero a cui è collegato l'encoder debba girare sempre alla stessa velocità?


Secondo me ti manca un pò di teoria di base. Leggiti questo tutorial dall'inizio http://www.microst.it/tutorial/tiptricks_ccp.html poi a pagina 7 c'è il caso dell'encoder
Rispondi citando
  #5  
Vecchio 27-07-2010, 19.24.36
nak nak non è collegato
Nuovo robottaro
 
Data registrazione: 17-06-2010
Residenza: Firenze
Messaggi: 5
Potenza reputazione: 0
nak E' per ora ancora un mistero
Predefinito

Intanto grazie per rispondere alle mie domande, come vedi sono un po' acerbo...

Forse ho spiegato male quello che intendo fare. Ho un atmega 169 e voglio leggere un encoder.

La mia idea di implementazione del codice è la seguente,

- utilizzare le interruzioni, tipo la OUTCOMPARE A e OUTCOMPARE B le quali vanno in esecuzione ad ogni fronte di salita del canale A e B (il mio encoder ha 2 canali e volevo utilizzarlo in modalità 4X ).

while (nessuna_interruzione) ; //attendi interruzione

SIGNAL (OUT_COMPARE_A) {
//user code
}
SIGNAL(OUT_COMPARE_B){
//user code
}

Se fin qui va bene, io mi chiedo: è necessario che queste interrupt vengono lanciate tramite il Timer (e devo capire ogni quanto..) oppure non devo utilizzare nessun timer e aspettare solo che si verifichino le interruzioni esterne ?

GRAZIE
Rispondi citando
  #6  
Vecchio 28-07-2010, 06.52.45
L'avatar di calo
calo calo non è collegato
Moderator
 
Data registrazione: 14-06-2006
Residenza: EmiliaSiciliaRomagna
Messaggi: 798
Potenza reputazione: 46
calo E' un faro della comunità
Predefinito

Citazione:
Orginalmente inviato da nak Visualizza messaggio
Se fin qui va bene, io mi chiedo: è necessario che queste interrupt vengono lanciate tramite il Timer (e devo capire ogni quanto..) oppure non devo utilizzare nessun timer e aspettare solo che si verifichino le interruzioni esterne ?

GRAZIE
Ti ripeto, se le cose funzionano come nei PIC (certamente si) devi attendere le interruzioni della tua periferica sensibile ai fronti e calcolare il tempo che intercorre fra fronti consecutivi di cui sia noto l'angolo.
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
memorizzazione array e lettura array mikrobasic sorecaro Programmazione Generale 0 16-04-2009 20.47.31
encoder sin cos steza66 Elettronica Generale 8 19-10-2008 12.51.03
Lettura frequenza con 18Fxx31 Myzhar Elettronica Digitale 4 07-04-2008 20.52.44
Encoder chiccow Costruisci il tuo personal robot I-DROID 01 25 27-12-2007 18.22.07
encoder Kain Elettronica Generale 8 27-04-2004 18.53.58


Tutti gli orari sono GMT. Adesso sono le: 22.26.06.


Basato su: vBulletin Versione 3.8.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB