Cuprins:
Video: Thrustmaster Warthog Slew Sensor I2C Upgrade: 5 pași
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Acesta este un ghid aproximativ cu privire la modul de interfață cu protocolul I2C utilizat pe senzorul ThrustmasterWarthog de accelerație. Acest lucru poate fi folosit pentru a trece de la ministrul standard destul de inutil la ceva mai bun, dar totuși folosind controlerul USB standard în unitatea de accelerație. Aceasta se bazează pe o postare originală pe:
forums.eagle.ru/showthread.php?t=200198
O înțelegere de bază dacă protocolul I2C este presupus pentru majoritatea pașilor următori, pentru o explicație excelentă accesați:
learn.sparkfun.com/tutorials/i2c
Orice întrebare specifică, nu ezitați să mă întrebați și voi încerca să adaug la acest lucru insolubil în viitor cu informații mai relevante. Acest lucru nu este deloc complet, dar ar trebui să fie un bun punct de plecare.
Unele coduri Arduino demo sunt furnizate, dar vă rugăm să luați acest lucru doar ca referință, deoarece un Arduino normal de 5V nu poate fi utilizat fără modificări.
Pasul 1: Detalii senzor existente
Senzorul de strângere ministick care vine împreună cu clapeta Thrustmaster Wathog este bine cunoscut ca fiind unul dintre cele mai mari puncte slabe ale unui produs de altfel excelent. Au fost o serie de încercări ale oamenilor de a-l înlocui cu ceva mai bun de-a lungul anilor, dar majoritatea s-au confruntat cu dificultățile de interfață cu protocolul digital I2C folosit de acesta.
Senzorul exact utilizat în accelerația Warthog este N35P112 - EasyPoint, care folosește senzorul de efect hall AS5013 realizat de AMS.
Fișa cu date:
ams.com/eng/Products/Magnetic-Position-Sens…
Interesant este că odată unitatea a fost disponibilă ca modul breakout de către Sparkfun:
www.sparkfun.com/products/retired/10835
Senzorul este destinat aplicațiilor de navigație în lucruri precum telefoanele mobile și este extrem de ieftin. În opinia mea, inacceptabil în ceva care costă aproape 500 de dolari.
Pasul 2: Pinout
Senzorul se conectează la PCB în unitatea de accelerație din dreapta prin conector micro 5 pini.
Pinout este după cum urmează:
-
Vcc + 3.3VDC (
Reglat local de la 5V de un regulator liniar pe cealaltă parte a plăcii, chiar în spatele conectorului, ar trebui să fie bine să se apropie de 20mA, dar nu am testat în niciun caz acest lucru)
- I2C SDA
- I2C SCL
- GND
- Butonul 1 (în mod normal ridicat, intern 5V pullup)
Pasul 3: Descrierea protocolului
Senzorul funcționează pe adresa I2C 0x41 - toate comenzile de scriere sau citire încep cu această adresă.
Când accelerația este conectată la computer, există un preambul de aproximativ 250 ms pe magistrala I2C pentru a adresa 0x40, presupun că aceasta este pentru o versiune diferită a senzorului sau ceva similar, dar nu este relevant pentru noi.
Datele trimise pe magistrala I2C în utilizare normală sunt mai jos, acestea trebuie simulate de microcontrolerul nostru pentru a vorbi cu clapeta de accelerație.
Configurare - Aceste date sunt trimise o dată, la aproximativ 500 ms după conectarea USB-ului, pentru a seta senzorul original pentru utilizare.
Scriere master: 0x0F (Registrul de control 1)
Date: 0x02 0b0000 0010 (inițiază o resetare soft)
Scriere master: 0x0F (Registrul de control 1)
Master Read: 0xF1 0b1111 0001 (se resetează la 11110000, lsb 1 înseamnă că datele valide sunt gata de citire. Trebuie să răspundem corect la această comandă pentru a fi recunoscuți ca un dispozitiv slave valid)
Scriere principală: 0x2E (Registrul de control 2)
Date: 0x 86 (aceasta setează doar orientarea magnetului în senzorul original)
Scriere master: 0x0F (Registrul de control 1)
Date: 0x 80 0b1000 0000 (Setează dispozitivul în modul inactiv (măsurare automată, nu în modul de consum redus))
Buclă: Aceasta se repetă la aproximativ 100Hz pentru a obține date despre senzori.
Scriere master: 0x10 (înregistrare X)
Master Read: (sclavul trimite X date, valoarea de 8 biți a complementului 2)
Master Write: 0x11 (înregistrare Y)
Master Read: (sclavul trimite date Y, valoarea de 8 biți a complementului 2)
Partea relevantă a dump-ului protocolului din analizorul logic:
Configurare Scrieți la [0x82] + ACK
0x0F + ACK
0x02 + ACK
Configurare Scrieți la [0x82] + ACK
0x0F + ACK
Configurare Citiți la [0x83] + ACK
0xF1 + NAK
Configurare Scrieți la [0x82] + ACK
0x2E + ACK
0x86 + ACK
Configurare Scrieți la [0x82] + ACK
0x0F + ACK
0x80 + ACK
Configurare Scrieți la [0x82] + ACK
0x10 + ACK
Configurare Citiți la [0x83] + ACK 0xFC + NAK
Configurare Scrieți la [0x82] + ACK 0x11 + ACK
Configurare Citiți la [0x83] + ACK 0xFF + NAK
Pasul 4: Cod Arduino
Codul Arduino atașat poate fi utilizat pentru a simula senzorul.
Vă rugăm să rețineți: majoritatea plăcilor Arduino rulează de 5 V, aceasta necesită o placă compatibilă sau modificată de 3,3 V pentru a evita deteriorarea joystick-ului.
Pasul 5: Calibrare
Odată ce noul senzor a fost montat, clapeta va trebui calibrată.
Pentru a vă calibra clapeta de accelerație, veți utiliza instrumentul de calibrare a clapetei de accelerație. Aceasta poate fi descărcată dintr-o serie de surse, cum ar fi:
forums.eagle.ru/showthread.php?t=65901
Nu utilizați calibrarea ferestrelor.
Pentru a beneficia la maximum de un mod, trebuie să modificați câteva valori în fișierul de configurare a calibrării.
Schimba:
Standard_DZ_SX = 0x10;
Standard_DZ_SY = 0x10;
Linii din A10_calibration.txt pentru:
Standard_DZ_SX = 0x01;
Standard_DZ_SY = 0x01;
Acest lucru se va schimba în zona moartă de pe controlul rotativ de la 10 la 1 și va oferi un control mult mai bun. Puteți juca cu această setare și apoi recalibrați și vedeți ce vă place cel mai mult.