[elektro] rotary encoder, mit csinálok rosszul?

elight elight at gmail.hu
Mon Jan 2 12:08:02 CET 2017


Én azt nem értem
minek a delay?

Ha 90 fok eltolt fázisú a jel
akkor amikor az IT bejön 'A' lábról
a 'B' lábon elvileg már régóta stabil
szintnek kellene lejönnie..

Az meg hogy többször is lefut az IT.
akkor nem okoz gondot , ha
emlékszel az előző állapotra és
úgy értékelsz ki.

tehát kell a kettős bittároló:
char    enc_bitek;
char    enc_bitek_old;

És a bitfázisokat mindig le kell ellenőrizni minden IT-ben,
    azonnal, hogy ne fogd meg a proc futását..

( de ez egy belőtt könyvtárban már tényleg
készen is kapható. )

Üdv István



2017-01-02 12:00 keltezéssel, Bali Zoltan írta:
> B.U.É.K.  mindenkinek!
>
> SW-esen filterezni? Tán, ha elég gyors
> a uC, megoldható. Esetleg ennek a mintájára:
> <https://docs.broadcom.com/docs/AV02-0096EN>
> A Digital Noise Filter rész.
>
> FPGA-n megcsináltam, működött szépen.
> Persze uC-n erőforrás igényes, de mondjuk a
> prell is zabál az IT-n keresztül.
>
> Most látom, IT-be Delay-t rakni? :)
> Akkor már érdemesebb lenne, a SW digitális
> filterre pazarolni.
>
> Üdv.  Zoli
>
>
> 2017.01.02. 10:55 keltezéssel, Gabor Jordan írta:
>> ÜDV,
>>
>> Rotary encoder, PIC18F67K90 B3 és B4 lábain csücsül, felhúzva 47k-val 
>> kívülről.
>>
>> A lenti megszakítás (XC8) kezelné le, de nem jó. Kb. 10ből 8szor jól 
>> lép, de 2szer vagy rossz irányba, vagy többet. Az ENC1 lefutóél 
>> csinál megszakítást és nézem az ENC2 láb hogyan áll. Mindig is így 
>> csináltam és ment. Optikai enkóderrel most is megy. Így is 
>> (lassabban) meg úgy is, ha kiveszem a késleltetéseket. Hiba nélkül. 
>> Gondolom a mechanikusnál a prell-el vagy kontakt-al van gond. Szkópon 
>> nem is túl szép a kapcsolás, látszik a prell, de lemegy még a 
>> késleltetések előtt (legalábbis amit látok). Mégsem jó, hiába játszom 
>> az időzítésekkel.
>>
>> Más tipusú enkoderrel jó volt (bourns), de amit most használni 
>> akarok, nem jó. Van több darab, cseréltem is, de nem jó.
>>
>> Hogy illik megbízhatóan olvasni ezeket?
>>
>> 1 szintű megszakítást használok, a megszakítás kezelést elvileg nem 
>> szakítja meg másik megszakítás (legalábbis az XC9 azt mondja ne 
>> kapcsolgassam a kódban a GIE-t, ő megteszi).
>>
>> Köszönöm,
>>
>> ÜDV JG
>>
>> *****
>>
>>
>>     if (INTCON3bits.INT3IF==1) // interrupt from rotary encored
>>         {
>>         INTCON3bits.INT3IF=0;
>>         __delay_us(50);
>>         if (ENC1_PORT==0)
>>             {
>>             __delay_us(50);
>>             if (ENC1_PORT==0)
>>                 {
>>                 __delay_us(50);
>>                 if (ENC1_PORT==0)
>>                     {
>>                     if (ENC2_PORT)
>>                         {
>>                         //LCDPutCmd(01);
>>                         //LCDPutStr("vissza");
>>                         pwm = pwm - 16;
>>                         }
>>                     else
>>                         {
>>                         //LCDPutCmd(01);
>>                         //LCDPutStr("oda");
>>                         pwm = pwm + 16;
>>                         }
>>                         update = 0x01;
>>                     }
>>                 }
>>             }
>>         }
>>
>> *******
>>
>> -----------------------------------------
>>          elektro[-flame|-etc]
>>
>>
>
> -----------------------------------------
>          elektro[-flame|-etc]
>



More information about the Elektro mailing list