Skocz do zawartości

Pomiar prędkości enkoderem absolutnym


Pomocna odpowiedź

Napisano

Mam problem jak w temacie. Chciałbym za pomocą enkodera absolutnego odczytywać prędkość w dwóch kierunkach.

Niby prosta sprawa. Pomiar w odstępie czasu:

t1 - 20

t2 - 30

różnica pomiędzy nimi (10) podzielona przez odstęp czasu i mam prędkość kątową.

W przypadku obrotów w przeciwnym kierunku różnica wyjdzie ujemna i o to chodzi.

Co zrobić jednak w przypadku przejścia przez zero (zakłam zakres 0-359)?

t1 - 355

t2 - 5

Różnica wynosi -350, czyli informacja nieprawdziwa. Powinno być 10.

Wstępnie rozwiązałem to tak, że przy maksymalnej prędkości obrotowej różnica pomiędzy odczytami wyniesie ok. 250. Daję więc warunek, że przy obliczonej różnicy mniejszej od -300 dodaję do wyniku 360 lub dla różnicy większej od 300 (obroty w przeciwnym kierunku) odejmuję 360.

Nie bardzo mi się jednak podoba to rozwiązanie. Czy macie jakiś lepszy pomysł?

Teoretycznie ten sam problem występuje też podczas pomiaru czasu timerem. Gdy w czasie okresu pomiarowego timer przekręci się przez FFFF→0000, wydaje się, że wynik powinien być błędny. Tam jednak cechy (natywnej dla procesora) arytmetyki U2 modulo 2^N zapewniają, że wynik jest zawsze dobry (0x0200-0xFFF0=0x0210).

W przypadku enkodera i liczb 0..360 taka "automatyka" nie zadziała i żeby wrócić wynikiem odejmowania do poprawnego zakresu musisz korekcję wykonać ręcznie, czyli po prostu dodać 360 dla każdego wyniku < 0. Wynik odejmowania odczytów z enkodera musi być oczywiście zmienną int ze znakiem.

Możesz też pracować tylko liczbach bez znaku: wtedy sprawdzasz warunek na wynik > 360 (10-350=0xFEAC), ale korekcja jest identyczna, dodajesz 360 (0xFEAC+0x0168=0x0014=20) 🙂

Możesz to w pewnym sensie zautomatyzować - wybierz z obu kierunków ten o mniejszej wartości bezwzględnej. Czyli jak masz 359 i 1 to możliwe wyniki to +2 lub -358... mniejsze jest +2 i ten bierzesz jako poprawny.

Oczywiście to tylko działa sensownie jak nie możesz prędkością przekroczyć zmiany na pomiar o 180... w innym wypadku musiałbyś patrzeć na poprzednie wyniki i brać ten bliższy poprzedniemu, ale potrzeba takiego rozwiązania potencjalnie ukazuje nam błąd w założeniach konstrukcyjnych (źle dobrane czasy pomiędzy pomiarami / przekładnia enkodera itp.)

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...