Tabla de contenido:

Thrustmaster Warthog Slew Sensor I2C Actualización: 5 pasos
Thrustmaster Warthog Slew Sensor I2C Actualización: 5 pasos

Video: Thrustmaster Warthog Slew Sensor I2C Actualización: 5 pasos

Video: Thrustmaster Warthog Slew Sensor I2C Actualización: 5 pasos
Video: Hardware Review: Delta Sim Electronics Thumbstick Upgrade für Thrustmaster HOTAS Warthog 2024, Noviembre
Anonim
Thrustmaster Warthog Slew Sensor I2C Actualización
Thrustmaster Warthog Slew Sensor I2C Actualización

Esta es una guía aproximada sobre cómo interactuar con el protocolo I2C utilizado en el sensor de giro del acelerador ThrustmasterWarthog. Esto se puede usar para actualizar desde el ministick estándar bastante inútil a algo mejor, pero aún usando el controlador USB estándar en la unidad del acelerador. Esto se basa en una publicación original sobre:

forums.eagle.ru/showthread.php?t=200198

Una comprensión básica si se asume el protocolo I2C para la mayoría de los siguientes pasos, para una excelente explicación, vaya a:

learn.sparkfun.com/tutorials/i2c

Cualquier pregunta específica, no dude en preguntarme, y trataré de agregar a esta intratable en el futuro con información más relevante. Esto de ninguna manera es completo, pero debería ser un buen punto de partida.

Se proporciona un código de demostración de Arduino, pero tómelo solo como referencia, ya que un Arduino normal de 5 V no se puede utilizar sin modificaciones.

Paso 1: Detalles del sensor existente

Detalles del sensor existente
Detalles del sensor existente

El sensor de giro ministick que viene con el acelerador Thrustmaster Wathog es bien conocido por ser una de las mayores debilidades con un producto excelente. Ha habido una serie de intentos por parte de las personas de reemplazarlo con algo mejor a lo largo de los años, pero la mayoría se ha enfrentado a las dificultades de interactuar con el protocolo digital I2C que utiliza.

El sensor exacto utilizado en el acelerador Warthog es el N35P112 - EasyPoint, que utiliza el sensor de efecto Hall IC AS5013 fabricado por AMS.

Ficha de datos:

ams.com/eng/Products/Magnetic-Position-Sens…

Curiosamente, la unidad estuvo una vez disponible como un módulo de ruptura por Sparkfun:

www.sparkfun.com/products/retired/10835

El sensor está diseñado para aplicaciones de navegación en cosas como teléfonos móviles y es extremadamente económico. En mi opinión inaceptable en algo que cuesta casi $ 500.

Paso 2: Pinout

Pinout
Pinout

El sensor se conecta a la PCB en la unidad del acelerador del lado derecho a través de un conector micro de 5 pines.

Pinout es el siguiente:

  1. Vcc + 3,3 V CC (

    Regulado localmente desde 5 V por un regulador lineal en el otro lado de la placa, justo detrás del conector, debería ser bueno para alrededor de 20 mA, pero de ninguna manera lo he probado)

  2. I2C SDA
  3. I2C SCL
  4. GND
  5. Botón 1 (normalmente alto, pullup interno de 5 V)

Paso 3: descripción del protocolo

Descripción del protocolo
Descripción del protocolo

El sensor operó en la dirección I2C 0x41: todos los comandos de escritura o lectura comienzan con esta dirección.

Cuando el acelerador está conectado a la computadora, hay un preámbulo de alrededor de 250ms en el bus I2C para direccionar 0x40, supongo que esto es para una versión de sensor diferente o algo similar, pero no es relevante para nosotros.

Los datos enviados en el bus I2C en uso normal se encuentran a continuación, esto debe ser simulado por nuestro microcontrolador para hablar con el acelerador.

Configuración: estos datos se envían una vez, alrededor de 500 ms después de que se conecta el USB, para configurar el sensor original para su uso.

Escritura maestra: 0x0F (registro de control 1)

Datos: 0x02 0b0000 0010 (inicia un reinicio suave)

Escritura maestra: 0x0F (registro de control 1)

Lectura maestra: 0xF1 0b1111 0001 (se restablece a 11110000, lsb 1 significa que los datos válidos están listos para ser leídos. Debemos responder a este comando correctamente para ser reconocidos como un dispositivo esclavo válido)

Escritura maestra: 0x2E (registro de control 2)

Datos: 0x 86 (esto solo establece la orientación del imán en el sensor original)

Escritura maestra: 0x0F (registro de control 1)

Datos: 0x 80 0b1000 0000 (configura el dispositivo en modo inactivo (medición automática, no en modo de bajo consumo))

Bucle: esto se repite alrededor de los 100 Hz para obtener los datos del sensor.

Escritura maestra: 0x10 (registro X)

Lectura del maestro: (el esclavo envía datos X, valor de 8 bits en complemento a 2)

Escritura maestra: 0x11 (registro Y)

Lectura del maestro: (el esclavo envía datos Y, valor de 8 bits en complemento a 2)

Parte relevante del volcado de protocolo del analizador lógico:

Configurar escritura en [0x82] + ACK

0x0F + ACK

0x02 + ACK

Configurar escritura en [0x82] + ACK

0x0F + ACK

Configuración de lectura en [0x83] + ACK

0xF1 + NAK

Configurar escritura en [0x82] + ACK

0x2E + ACK

0x86 + ACK

Configurar escritura en [0x82] + ACK

0x0F + ACK

0x80 + ACK

Configurar escritura en [0x82] + ACK

0x10 + ACK

Configuración de lectura en [0x83] + ACK 0xFC + NAK

Configuración de escritura en [0x82] + ACK 0x11 + ACK

Configuración de lectura en [0x83] + ACK 0xFF + NAK

Paso 4: Código Arduino

Código Arduino
Código Arduino

El código Arduino adjunto se puede utilizar para simular el sensor.

Tenga en cuenta: la mayoría de las placas Arduino funcionan con 5V, esto necesita una placa modificada o compatible con 3.3V para que funcione para evitar daños en su joystick.

Paso 5: Calibración

Calibración
Calibración

Una vez que se haya instalado su nuevo sensor, será necesario calibrar el acelerador.

Para calibrar su acelerador, utilizará la herramienta de calibración del acelerador. Esto se puede descargar de varias fuentes, como:

forums.eagle.ru/showthread.php?t=65901

No utilice la calibración de Windows.

Para aprovechar al máximo un mod, debe cambiar algunos valores en su archivo de configuración de calibración.

Cambiar el:

Standard_DZ_SX = 0x10;

Standard_DZ_SY = 0x10;

Líneas en A10_calibration.txt para:

Standard_DZ_SX = 0x01;

Standard_DZ_SY = 0x01;

Esto cambiará a zona muerta en el control de rotación de 10 a 1, y brindará un control mucho mejor. Puede jugar con esta configuración y luego recalibrar y ver lo que más le gusta.

Recomendado: