Autor Wątek: Enkoder magnetyczny firmy AMS zamiast potencjometru  (Przeczytany 10867 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #15 dnia: Lutego 18, 2014, 14:57:38 »
Dzięki za wyjaśnienia. Jeśli os X reprezentuje kolejne pomiary to pośrednio jest związana z ruchem korbką czyli kątem obrotu a raczej z położeniem magnesu względem sensora magnetycznego.
Dokładnie tak. Ja też już rozumiem co miałeś na myśli pisząc o ,,obrocie w stopniach'' :-)

W Twoim przypadku jeden problem masz już rozwiązany ale pozostaje problem mechaniki. Jak rozwiązać mechanikę do tak dokładnych przetworników (14 bit).
Tak jest to wyzwanie. Ja myślałem o kołysce wykonanej z metalu na obrabiarce numerycznej z łożyskami kulkowymi. Dokładności jakie można uzykać dzięki zastosowaniu np. frezarki numerycznej zależą od konstrukcji samej obrabiarki, ale myślę, że są wystarczające. Elementem, który głównie by się zużywał w takiej konstrukcji są łożyska. A te jeżeli się odpowiednio zaprojektuje kołyskę, to mogą być one elementami wymiennymi. Zresztą nic nowego nie wymyśliłem, bo już takie projekty na tym forum przedstawiał między innymi moders czy Sundowner. Pytanie jest tylko jaki będzie koszt budowy takiego joysticka?

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #16 dnia: Marca 14, 2014, 14:08:02 »
Postanowiłem dodać post prezentujący postępy prac (coby niektórzy nie pomyśleli że nic się nie dzieje :-)).

Co zostało zrobione:
  • Zaimplementowałem komunikację I2C zarówno po stronie mastera jak i slave na Arduino (przy pomocy tego protokołu będzie odbywać się komunikacja pomiędzy główną płytką joya, a enkoderami).
  • Zbudowałem płytkę developerską z procesorem Atmega8 (docelowo każdy enkoder będzie posiadał na płytce taki procesor, który będzie się kounikował z główną płytką joya przy pomocy I2C).
  • Uruchomiłem prototypową wersję joysticka na Arduino Leonardo (w wersji developerskiej będzie ona główną płytką elektroniki joya).

  • Ad 1.
    Okazazało się, że Intel Galileo ma jakieś problemy z działaniem jako slave w komunikacji I2C :-( (tak podawano w internecie i faktycznie nie udało mi się zmusić twóch Galileo do komunikacji - a mam dostęp do większej ich liczby :-(). Ponieważ jestem początkujący jeśli chodzi o programowanie uP i chciałem małymi kroczkami zbliżać się do celu, to postanowiłem zakupić do developmentu Arduino Leonardo (z myślą również o kroku 3 :-)). Komunikacja została zaimplementowana z wykorzystaniem biblioteki Wire (oczywiście na razie na Arduino). Poniżej zdjęcie z testów:


    Na pierwszym planie Intel Galileo, który jest masterem. Z tyłu widać Leonardo, który działa jako slave. Na płytce stykowej (znajdującej się po lewej stronie zdjęcia) są rezystory podciągające do poszczególnych linii I2C (kabelek żółty - SDA, kabelek biały SCL). Ponadto do Leonardo jest podłączony potencjometr (również znajdujący się na płytce stykowej). Komunikacja wygląda w ten sposób, że Leonardo odczytuje wartość napięcia z potencjometu i wysyła tą informację do Galileo przy pomocy protokołu I2C, który ją prezentuje.
  • Ad 2.
    Na płytce stykowej widocznej na zdjęciu umieściłem uP Atmega8 zasilany przez standardowy zasilacz Arduino prądem 5V. Programowanie układu odbywa się po ICSP przy użyciu programatora USBasp. Nie wygląda to zbyt pięknie i można byłoby to zrobić lepiej (np. przewody do kondensatorów powinny być krótsze), ale działa (na razie miga dioda :-)) i do developmentu więcej mi nie potrzeba, a jak pojawią się problemy to będę poprawiał. Byłem bardzo miło zaskoczony, gdy układ zaczął działać po pierwszym podłączeniu :-).
  • Ad 3.
    Leonardo posiada mikroprocesor Atmega32U4 wyposażony w sprzętową obsługę USB. Niestety w chwili obecnej Arduino natywnie nie obsługuje joysticka - można go zaprogramować, ale ja jak na razie znalazłem tylko rozwiązanie, które polega na podmianie plików w bibliotekach Arduino (HID.cpp, USBAPI.h). Nie jest to zbyt wygodne i generalnie deskryptor HID jest po poprawy. Plusem jest to że jakoś działa - przynajmniej Linux widzi joystick (pod Windowsem jeszcze nie sprawdzałem). Ale myślę, że do developmentu się nada i będzie można rozwiązanie z enkoderami w miarę porządnie przetestować.

Najbliższe zadania:
  • obsłużyć I2C na uP Atmega8
  • obsłużyć enkoder AS5040 na Atmega8
  • ...

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #17 dnia: Marca 14, 2014, 18:33:44 »
Moje gratulacje.

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #18 dnia: Marca 25, 2014, 19:02:14 »
Dzięki.

Czas na kolejny raport z postępów prac:
  • Zaimplementowałem komunikację I2C oraz obsługę enkodera AS5040 po stronie uP Atmega8.
  • Poprawiłem deskryptor HID joysticka w Arduino i wykorzystałem go do obsługi joysticka Saitek X45.

  • Ad 1.

    Implementacja komunikacji I2C w uP Atmega8 została zrealizowana z wykorzystaniem standardowej biblioteki twi z avr-lib. Niestety nie obeszło się bez problemów które wynikają z różnic pomiędzy biblioteką Wire w Arduino a TWI w avr-lib (http://playground.arduino.cc/Main/WireLibraryDetailedReference#.UzG7CfimIWN - na nieszczęście ten opis znalazłem dopiero dzisiaj - jak już część problemów rozwiązałem :-(). Z enkoderem AS5040 nie było specjalnych problemów (aczkolwiek jedna rzecz mnie nurtuje - ale to sobie sprawdzę). Na zdjęciu poniżej Atmega8 z podłączonym enkoderem komunikująca się z Leonardo przy wykorzystaniu I2C:


    Czyli tak jak ma to wyglądać docelowo - uP Atmega8 odczytuje wartość obrotu magnesu z enkodera i wysyła ją do Leonardo, który zastępuje w tym przypadku DMJoy'a.

  • Ad 2.

    Zrozumienie sposobu tworzenia deskryptorów HID nie było zadaniem ani łatwym, ani szybkim, ani tym bardziej przyjemnym. Ekspertem w tej dziedzinie nie jestem, ale ostatecznie moje zmagania zakończyły się sukcesem i mam oprogramowany joystick w Leonardo, który jest gotowy do podłączenia enkoderów i zbudowania rozwiązania testowego.

    Na początek postanowiłem obsłużyć standardowe potencjometry joysticka X45:


    Poniżej wynik testów tak zbudowanego ustrojstwa z wykorzystaniem programu JoyTester2 (będzie można porównać jak potencjometry zamienię na ekodery):

    Generalnie jak zobaczyłem te wyniki to postanowiłem, że przed zbudowaniem docelowej metalowej kołyski po prostu podmienie potencjometry w X45 na enkodery i takim joyem będę grał (jak zobaczyłem jak w JoyTester2 wypada Saitek Aviator, którego obecnie używam, to jestem pełen podziwu dla siebie, że potrafię cokolwiek zestrzelić :-)). Już wcześniej kasowałem luzy w kołysce X45, ale nie byłem do końca usatysfakcjonowany. I tak największym problemem tego joya jest sprężyna centrująca. Mam kilka pomysłów co z tym zrobić i będę musiał do tego wrócić.

TO DO:
  • Zrobienie porządku w kodzie Atmega i dodanie obsługi błędów
  • Zaprojektowanie zintegrowanej płytki do X45 (zawierającej uP Atmega8 i ekoder AS5045)

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #19 dnia: Czerwca 27, 2014, 00:13:22 »
Dzisiaj przyszły do mnie płytki PCB, które zaprojektowałem (na zdjęciu są dwie płytki ułożone tak, aby można było zobaczyć obie strony):


Pierwszy raz projektowałem płytki PCB, ale dzięki kursowi Eagle Mirosława Kardasia (https://www.youtube.com/watch?v=5CF0Q81nGzY) okazuje się, że nie taki diabeł straszny jak go malują. Płytka została zaprojektowana jako dwustronna. Na jednej stronie będzie znajdował się enkoder, natomiast na drugiej mikrokontroler Atmega8. Płytki są dostosowane rozmiarami i ułożeniem otworów montażowych do joysticka Saitek X45.

Tak wygląda potencjometr zamontowany w elemencie joysticka:


A tak płytka z enkoderem zamontowana w tym elemencie joysticka:

Płytka będzie mocowana za pomocą śrubek M2 (muszę jeszcze wykombinować dystanse i dorobić mocowanie magnesu).

Wszystkie elementy (poza enkoderami AS5045) już mam i w przyszłym tygodniu będę z pomocą kolegi montował elementy na płytce. Na początek zrobię płytkę testową z enkoderem AS5040, którego do tej pory używałem do testów (zostanie wylutowany ze starej płytki). Mam nadzieję, że czegoś nie pokopałem i płytki są dobrze zaprojektowane :-).

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #20 dnia: Czerwca 27, 2014, 07:53:40 »
Gratulacje, pięknie to zrobiłeś.

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #21 dnia: Czerwca 27, 2014, 12:11:08 »
Także gratuluję. Piękna inżynierska robota z odpowiednim podejściem.  :564:

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #22 dnia: Czerwca 29, 2014, 10:47:13 »
Szacunek,
Świetna robota.

Postęp w pracach nad kokpitem: Galeria zdjęć Google+

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #23 dnia: Czerwca 29, 2014, 23:17:13 »
Świetna robota! Śrubki i dystanse w małych rozmiarach można znaleźć w sklepach modelarskich RC. Powodzenia!

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #24 dnia: Lipca 04, 2014, 23:49:49 »
Dziękuję bardzo  :D.

Elementy na pierwszej płytce (z enkoderem AS5040) już polutowane:



Pochwały chyba były trochę przesadzone, bo wyszedł mój brak doświadczenia - po podłączeniu programatora nie dało się zaprogramować mikroprocesora. Zaczeło się sprawdzanie połączeń, przelutowywanie elementów, co do których były wątpliwości czy aby na pewno są w porządku. Rozwiązanie okazało się trywialne i jednocześnie trochę zabawne. Otórz postanowiłem, że pójdę po najmniejszej linii oporu i na płytce umieszczę 10 pinowe złącze do programowania zgodne ze standardem KANDA, zamiast złącza wyposażonego w 6 pinów (pomimo, że było tam mało miejsca). Po prostu w przypadku tego drugiego złącza musiałbym dorobić (lub ewentualnie dokupić) przejściówkę - mój programator jest wyposażony tylko w taśmę dla złącza 10 pinów. Niestety złącze umieściłem na nieodpowiedniej warstwie, w związku z tym piny zostały przestawione (lub musiałbym złącze przylutować na płytce po stronie enkodera bo byłoby bez sensu). Ostatecznie więc okazało się, że i tak będę musiał dorobić przejściówkę  :x (na szybko do przetestowania skleciłem coś takiego :D):


Na szczęście działa. Układ daje się zaprogramować co radośnie sygnalizuje migającą diodą - na początek wrzuciłem testowy program :D.

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #25 dnia: Lipca 05, 2014, 09:03:35 »
Cytuj
Pochwały chyba były trochę przesadzone, bo wyszedł mój brak doświadczenia - po podłączeniu programatora nie dało się zaprogramować mikroprocesora
Przeciwnie, jestem pełen uznania dla Twojej pracy tym bardziej, że jak napisałeś nie jesteś zawodowo związany z elektroniką. Ten projekt świadczy, że jesteś bardzo dobry w tym co robisz, gratulacje.

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #26 dnia: Marca 05, 2016, 13:05:55 »

  • Ad 2.

    Zrozumienie sposobu tworzenia deskryptorów HID nie było zadaniem ani łatwym, ani szybkim, ani tym bardziej przyjemnym. Ekspertem w tej dziedzinie nie jestem, ale ostatecznie moje zmagania zakończyły się sukcesem i mam oprogramowany joystick w Leonardo, który jest gotowy do podłączenia enkoderów i zbudowania rozwiązania testowego.

    Na początek postanowiłem obsłużyć standardowe potencjometry joysticka X45:
Gratulacje, super!!! 

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #27 dnia: Marca 06, 2016, 14:50:16 »
Świetna robota! Jestem pod ogromnym wrażeniem! Gratulacje ! :)

Odp: Enkoder magnetyczny firmy AMS zamiast potencjometru
« Odpowiedź #28 dnia: Marca 07, 2016, 14:10:22 »
Dziękuję bardzo. W kwestii wyjaśnienia, to sam projekt wykorzystania tych enkoderów został tymczasowo zawieszony. Złożyło się na to wiele spraw, między innymi mechanika Saiteka X45 mnie strasznie wkurzyła. Na dodatek udało mi się okazyjnie kupić joystick Cobra za mniej niż połowę jego ceny i jestem z niego bardzo zadowolony. Okazało się, że do wirtualnego latania bardziej mi jest potrzebny panel z dodatkowymi dźwigniami i przełącznikami, dlatego teraz się nad tym skupiam. Nie oznacza to jednak, że do tematu nie wrócę przy okazji budowy orczyka, czy metalowej kołyski joya.

Uzupełniając opis:
Zakończyłem na udanym podłączeniu pod oś X joya układu AS5040 (przy wykorzystaniu płytki pokazanej powyżej). Oś była poprawnie widziana w systemie, ale z powodu braku drugiego układu dla osi y (którego nie miałem zlutowanego) nie testowałem jego zachowania w jakiejkolwiek grze czy symulatorze.