Spisu treści:
Wideo: Aktualizacja Thrustmaster Warthog Slew Sensor I2C: 5 kroków
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
To jest przybliżony przewodnik dotyczący interfejsu z protokołem I2C używanym w czujniku obrotu przepustnicy ThrustmasterWarthog. Można to wykorzystać do uaktualnienia z dość bezużytecznego standardowego minidrążka do czegoś lepszego, ale nadal przy użyciu standardowego kontrolera USB w jednostce przepustnicy. Jest to oparte na oryginalnym poście na:
forums.eagle.ru/showthread.php?t=200198
Podstawowe zrozumienie, czy protokół I2C jest zakładany dla większości poniższych kroków, aby uzyskać doskonałe wyjaśnienie, przejdź do:
learn.sparkfun.com/tutorials/i2c
Jeśli masz jakieś konkretne pytania, nie wahaj się zadać mi, a postaram się dodać do tych trudnych w przyszłości bardziej istotnych informacji. To wcale nie jest kompletne, ale powinno być dobrym punktem wyjścia.
Dostarczono trochę kodu demonstracyjnego Arduino, ale należy to traktować tylko jako odniesienie, ponieważ normalne Arduino 5 V nie może być używane bez modyfikacji.
Krok 1: Szczegóły istniejącego czujnika
Czujnik obrotu ministick, który jest dostarczany z przepustnicą Thrustmaster Wathog, jest dobrze znany jako jedna z największych słabości tego doskonałego produktu. Przez lata ludzie podejmowali wiele prób zastąpienia go czymś lepszym, ale większość napotkała trudności w połączeniu z używanym przez niego protokołem cyfrowym I2C.
Dokładny czujnik zastosowany w przepustnicy Warthog to N35P112 - EasyPoint, który wykorzystuje układ scalony czujnika Halla AS5013 firmy AMS.
Arkusz danych:
ams.com/eng/Products/Magnetic-Position-Sens…
Co ciekawe, urządzenie było kiedyś dostępne jako moduł breakout przez Sparkfun:
www.sparkfun.com/products/retired/10835
Czujnik jest przeznaczony do zastosowań nawigacyjnych w takich urządzeniach, jak telefony komórkowe i jest niezwykle tani. Moim zdaniem nie do zaakceptowania w czymś, co kosztuje blisko 500 dolarów.
Krok 2: Pinout
Czujnik łączy się z płytką drukowaną w prawej jednostce przepustnicy za pomocą złącza micro 5 pin.
Pinout wygląda następująco:
-
Vcc +3,3 V DC (
Lokalnie regulowany z 5V za pomocą regulatora liniowego po drugiej stronie płytki, tuż za złączem, powinno być dobre około 20mA, ale w żaden sposób tego nie testowałem)
- I2C SDA
- I2C SCL
- GND
- Przycisk 1 (normalnie wysoki, wewnętrzne podciąganie 5 V)
Krok 3: Opis protokołu
Czujnik działał na adresie I2C 0x41 - wszystkie polecenia zapisu lub odczytu zaczynają się od tego adresu.
Gdy przepustnica jest podłączona do komputera, na magistrali I2C jest preambuła około 250ms do adresu 0x40, zakładam, że jest to dla innej wersji czujnika lub czegoś podobnego, ale to nie dotyczy nas.
Dane wysyłane przez magistralę I2C w normalnym użytkowaniu są poniżej, musi to być symulowane przez nasz mikrokontroler, aby rozmawiać z przepustnicą.
Konfiguracja - te dane są wysyłane raz, około 500 ms po podłączeniu USB, w celu skonfigurowania oryginalnego czujnika do użytku.
Zapis główny: 0x0F (rejestr kontrolny 1)
Dane: 0x02 0b0000 0010 (inicjuje miękki reset)
Zapis główny: 0x0F (rejestr kontrolny 1)
Odczyt główny: 0xF1 0b1111 0001 (resetuje się do 11110000, lsb 1 oznacza, że prawidłowe dane są gotowe do odczytu. Musimy poprawnie odpowiedzieć na to polecenie, aby zostać rozpoznanym jako prawidłowe urządzenie podrzędne)
Zapis główny: 0x2E (rejestr kontrolny 2)
Dane: 0x 86 (to ustawia tylko orientację magnesu w oryginalnym czujniku)
Zapis główny: 0x0F (rejestr kontrolny 1)
Dane: 0x 80 0b1000 0000 (Ustawia urządzenie w trybie bezczynności (pomiar automatyczny, nie w trybie niskiego poboru energii))
Pętla: To jest powtarzane przy około 100 Hz, aby uzyskać dane z czujnika.
Zapis główny: 0x10 (rejestr X)
Master Read: (slave wysyła dane X, 8-bitowa wartość uzupełnienia dwójki)
Zapis główny: 0x11 (rejestr Y)
Master Read: (slave wysyła dane Y, 8-bitowa wartość uzupełnienia dwójki)
Odpowiednia część zrzutu protokołu z analizatora logicznego:
Konfiguracja Zapisz do [0x82] + ACK
0x0F + ACK
0x02 + POTW.
Konfiguracja Zapisz do [0x82] + ACK
0x0F + ACK
Konfiguracja Czytaj do [0x83] + ACK
0xF1 + NAK
Konfiguracja Zapisz do [0x82] + ACK
0x2E + ACK
0x86 + POTWIERDZENIE
Konfiguracja Zapisz do [0x82] + ACK
0x0F + ACK
0x80 + POTWIERDZENIE
Konfiguracja Zapisz do [0x82] + ACK
0x10 + POTWIERDZENIE
Konfiguracja Czytaj do [0x83] + ACK 0xFC + NAK
Konfiguracja Zapisz do [0x82] + ACK 0x11 + ACK
Konfiguracja Czytaj do [0x83] + ACK 0xFF + NAK
Krok 4: Kod Arduino
Dołączony kod Arduino można wykorzystać do symulacji czujnika.
Uwaga: większość płyt Arduino działa z napięciem 5 V, wymaga to kompatybilnej lub zmodyfikowanej płyty 3.3 V, aby uniknąć uszkodzenia joysticka.
Krok 5: Kalibracja
Po zamontowaniu nowego czujnika przepustnica będzie wymagała kalibracji.
Aby skalibrować przepustnicę, użyjesz narzędzia do kalibracji przepustnicy. Można to pobrać z wielu źródeł, takich jak:
forums.eagle.ru/showthread.php?t=65901
Nie używaj kalibracji systemu Windows.
Aby jak najlepiej wykorzystać mod, musisz zmienić kilka wartości w pliku konfiguracyjnym kalibracji.
Zmienić:
Standardowy_DZ_SX = 0x10;
Standardowy_DZ_SY = 0x10;
Wiersze w A10_calibration.txt do:
Standardowy_DZ_SX = 0x01;
Standardowy_DZ_SY = 0x01;
Zmieni się to na martwą strefę kontroli slew z 10 na 1 i da znacznie lepszą kontrolę. Możesz bawić się tym ustawieniem, a następnie ponownie skalibrować i zobaczyć, co lubisz najbardziej.