[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