Vai al contenuto
PLC Forum


Posizione con dspic30f QEI Encoder 64 cpr


peppe855

Messaggi consigliati

Utilizzando un dspic30f6010a e la sua periferica QEI  ed un encoder incrementale  ho fatto la seguente prova (dopo aver settato la periferica QEI in modalita' di conteggio 4x e con reset quando il POSCNT incontra il MAXCNT) e cioè:

 

- ho un encoder con 64 cpr (che immagino siano il numero di tacche o anche il numero di fronti di salita e basta di un solo canale giusto?);
- lavorando in modalità 4x ho settato il registro MAXCNT=(64X4)-1=255;
-a questo punto ho impostato un semplice if:

if (POSCNT == 255) {

PORTAbits.RA9 = 1;

}
else {

PORTAbits.RA9 = 0;
}

- adesso ho posto in rotazione il motore e mi sarei aspettato che il led si accendesse dopo un giro dell'albero motore, invece il led si accende dopo ben 4 giri di albero, con il sospetto che la periferica non lavorasse in modalità x4 ho provato a settarla in modalità x2, ottenendo come risultato che il led si accende dopo 8 giri di albero!
Ma come mai? Grazie in anticipo a chiunque voglia darmi una mano saluti.

Link al commento
Condividi su altri siti


Per avere il x4 devi far entrare entrami i canali A e B, altrimenti non puoi moltiplicare per 4, perchè un singolo impulso ha solo 2 fronti.

La periferica, mancandogli uno dei 2 canali, si trova un poco "confusa" e cerca di supplire in altro modo dividendo per 2 gli impulsi che gli arrivano da un solo canale in odo da ricreare i 4 fronti.

Link al commento
Condividi su altri siti

Salve Livio, in realtà ho fatto entrare sia il canale A che il canale B rispettivamente in QEA A e QEA B, cioè a sto punto o l'encoder non è da 64 cpr (e non penso proprio) oppure non so'

Link al commento
Condividi su altri siti

  Da manuale dovrebbe essere QEIM posto ad 111 a farmi lavorare in modalita' 4x :

 

     TRISBbits.TRISB4=1;
     TRISBbits.TRISB5=1;
     ADPCFGbits.PCFG5=1;
     ADPCFGbits.PCFG4=1;
     TRISAbits.TRISA9=0;
     TRISAbits.TRISA10=0;
     TRISAbits.TRISA14=0;
     TRISAbits.TRISA15=0;
     inizqei ();
     MAXCNT=255;
     PORTAbits.RA9 = 0;   

 

    QEICONbits.QEISIDL=0;
    QEICONbits.QEIM=7;
    QEICONbits.SWPAB=0; 
    QEICONbits.PCDOUT=0;
    QEICONbits.POSRES=0;
    DFLTCONbits.CEID=0; 
    DFLTCONbits.QEOUT=1;
    DFLTCONbits.QECK=0;
    POSCNT = 0;

Link al commento
Condividi su altri siti

Livio (le do' del tu se posso), ho preso il tester e un solo canale ed ho fatto la seguente rilevazione:

-ho ruotato l'albero di mezzo giro con rotazioni il piu' possibile piccole  ed ho contato 16 livelli cioè 8 (+VDC) e 8 (0 VDC) che chiaramente moltiplicati per due mi danno 32 sali e scendi in totale, quindi dato che per definizione CPR sono solo i fronti di salita (o discesa) posso dedurre che il mio encoder ha 32/2=16 cpr e quindi la QEI fa' il suo dovere in quanto poi 16*4=64?? Cosa ne pensa/i? :)

Link al commento
Condividi su altri siti

Quote

Livio (le do' del tu se posso)

 

No, devi! :smile:

Sul forum ci consideriamo tutti amici e colleghi, quindi il tu è un obbligo.

 

Se l'encoder genera solo 16 ipr (impulsi per rivoluzione) per canale, allora tutto è corretto perchè sono 64 fronti per rivoluzione su 2 canali.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...