Jump to content
PLC Forum


Sign in to follow this  
peppe855

Posizione con dspic30f QEI Encoder 64 cpr

Recommended Posts

peppe855

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.

Share this post


Link to post
Share on other sites

Livio Orsini

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.

Share this post


Link to post
Share on other sites
peppe855

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'

Share this post


Link to post
Share on other sites
Livio Orsini

Ma li hai abilitati i 2 canali?

Share this post


Link to post
Share on other sites
peppe855

  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;

Share this post


Link to post
Share on other sites
peppe855

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? :)

Share this post


Link to post
Share on other sites
Livio Orsini
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...