05-10-2017, 08:48 AM
(05-07-2017, 08:29 PM)npejcic Wrote:(05-07-2017, 01:05 PM)mikikg Wrote: Castim ko zna da resi ovaj problem!
U pitanju je kvadraturni enkoder, prate sve sve 4 tranzicije A i B ulaza (interni HW brojac u STM32) a sa Z ulazom bi trebao da resetujem brojac zbog smanjenja apsolutne greske, ali to ne ide tako prosto, sta ako se nadjem u ovakovj situaciju gde u oznacenom trenutku promenim smer!??? Pobrljavi sve ... : (
Miki, ako sam dobro propratio, da se ne bi desio reset ukoliko ti je veoma kratko u smeru posle prvog rising edge a time vršiš resetovanje brojača, moraćeš ovo malo da upeglaš nekim filtrom, recimo ovako nešto: Interapt na rising edge kada se desi startuj neki timer koji će da usempluje veoma brzo nekih deset uzoraka linije Z i na taj način donesi odlugu da li da se resetuje brojač ili ne.
Druga mogućnost je da uradiš interapt na rising i falling edge, pa da restuješ tek na falling, a prethodno uradi pripremu kada se javi rising da očekuješ falling edge.
Samo da javim da sam nekako uspeo da se iskobeljam sa ovim Z indexom, vrlo je problematican iz razloga sto postoji Interupt Latency od nekih 850ns za PB port i oko 2us za PC port i ako se to ne slozi tacno sa internim HW brojacem u trenutku kada je 0 (objasnicu) pomesa se smer i napravi krug vise sto je katrastrofalna greska.
Iz toga proizilazi da je najgori moguci trenutak za sinhronizaciju HW brojaca sa Z-Index upravo bas u 0 i to treba da se izbegne po svaku cenu, nego se sinhronizujemo u drugoj tacki, recimo na 180* i onda logika za sinhronizaciju sa Z-index treba da upise npr 3998 ili 4002 za slucaj 8000 podeoka enkoder i u slucaju greske ne moze da napravi toliki problem da promasi ceo krug.