Оглавление:
Видео: Обновление датчика поворота Thrustmaster Warthog до I2C: 5 шагов
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Это приблизительное руководство по взаимодействию с протоколом I2C, используемым в датчике поворота дроссельной заслонки ThrustmasterWarthog. Это может быть использовано для обновления довольно бесполезного стандартного мини-джойстика до чего-то лучшего, но все же с использованием стандартного USB-контроллера в блоке дроссельной заслонки. Это основано на оригинальном сообщении:
forums.eagle.ru/showthread.php?t=200198
Общее представление о том, предполагается ли использование протокола I2C для большинства следующих шагов, для получения отличного объяснения перейдите по ссылке:
learn.sparkfun.com/tutorials/i2c
Любые конкретные вопросы, не стесняйтесь задавать мне, и я постараюсь добавить к этому трудноразрешимому в будущем более актуальную информацию. Это ни в коем случае не завершено, но должно стать хорошей отправной точкой.
Предоставляется некоторый демонстрационный код Arduino, но, пожалуйста, используйте его только в качестве справки, поскольку обычный 5V Arduino не может использоваться без изменений.
Шаг 1. Сведения о существующем датчике
Датчик поворота Ministick, который поставляется с дроссельной заслонкой Thrustmaster Wathog, хорошо известен как один из самых больших недостатков этого превосходного продукта. На протяжении многих лет люди предпринимали ряд попыток заменить его чем-то лучшим, но большинство из них сталкивались с трудностями взаимодействия с используемым им цифровым протоколом I2C.
Точный датчик, используемый в дроссельной заслонке Warthog, - это N35P112 - EasyPoint, в котором используется микросхема датчика Холла AS5013 производства AMS.
Техническая спецификация:
ams.com/eng/Products/Mintage-Position-Sens…
Интересно, что когда-то этот модуль был доступен в Sparkfun как прорывной модуль:
www.sparkfun.com/products/retired/10835
Датчик предназначен для навигационных приложений в таких вещах, как мобильные телефоны, и стоит очень дешево. На мой взгляд неприемлемо в том, что стоит почти 500 долларов.
Шаг 2: распиновка
Датчик подключается к печатной плате в правом блоке дроссельной заслонки через 5-контактный микроразъем.
Распиновка следующая:
-
Vcc + 3,3 В постоянного тока (
Локально регулируется от 5 В линейным регулятором на другой стороне платы, сразу за разъемом, должно быть около 20 мА, но я никоим образом не проверял это)
- I2C SDA
- I2C SCL
- GND
- Кнопка 1 (нормально высокий, внутреннее подтягивание 5 В)
Шаг 3: Описание протокола
Датчик работал с адресом I2C 0x41 - все команды записи или чтения начинаются с этого адреса.
Когда дроссельная заслонка подключена к компьютеру, на шине I2C есть преамбула около 250 мс для адреса 0x40, я предполагаю, что это для другой версии датчика или чего-то подобного, но для нас это не имеет отношения.
Данные, отправляемые по шине I2C при нормальном использовании, приведены ниже, это должно быть смоделировано нашим микроконтроллером, чтобы взаимодействовать с дроссельной заслонкой.
Настройка - эти данные отправляются один раз, примерно через 500 мс после подключения USB, чтобы настроить исходный датчик для использования.
Основная запись: 0x0F (управляющий регистр 1)
Данные: 0x02 0b0000 0010 (запускает мягкий сброс)
Основная запись: 0x0F (контрольный регистр 1)
Master Read: 0xF1 0b1111 0001 (сбрасывается на 11110000, lsb 1 означает, что действительные данные готовы к чтению. Мы должны правильно ответить на эту команду, чтобы быть распознанным как действительное ведомое устройство)
Основная запись: 0x2E (контрольный регистр 2)
Данные: 0x 86 (это просто устанавливает ориентацию магнита в исходном датчике)
Основная запись: 0x0F (контрольный регистр 1)
Данные: 0x 80 0b1000 0000 (Устанавливает устройство в режим ожидания (автоматическое измерение, а не в режиме низкого энергопотребления))
Цикл: это повторяется с частотой около 100 Гц для получения данных датчика.
Мастер записи: 0x10 (регистр X)
Master Read: (подчиненное устройство отправляет данные X, дополнительное 8-битное значение)
Мастер записи: 0x11 (регистр Y)
Master Read: (подчиненное устройство отправляет данные Y, дополнительное 8-битное значение)
Соответствующая часть дампа протокола из логического анализатора:
Настройка записи в [0x82] + ACK
0x0F + ACK
0x02 + ACK
Настройка записи в [0x82] + ACK
0x0F + ACK
Установка чтения на [0x83] + ACK
0xF1 + NAK
Настройка записи в [0x82] + ACK
0x2E + ACK
0x86 + ACK
Настройка записи в [0x82] + ACK
0x0F + ACK
0x80 + ACK
Настройка записи в [0x82] + ACK
0x10 + ACK
Настройка чтения на [0x83] + ACK 0xFC + NAK
Настройка Запись в [0x82] + ACK 0x11 + ACK
Установка чтения на [0x83] + ACK 0xFF + NAK
Шаг 4: Код Arduino
Прилагаемый код Arduino можно использовать для имитации датчика.
Обратите внимание: большинство плат Arduino работают от 5 В, для этого требуется совместимая с 3,3 В или модифицированная плата, чтобы избежать повреждения джойстика.
Шаг 5: Калибровка
После того, как ваш новый датчик будет установлен, потребуется калибровка дроссельной заслонки.
Чтобы откалибровать дроссельную заслонку, воспользуйтесь инструментом калибровки дроссельной заслонки. Его можно загрузить из ряда источников, таких как:
forums.eagle.ru/showthread.php?t=65901
Не используйте калибровку окон.
Чтобы получить максимальную отдачу от мода, вам нужно изменить несколько значений в файле конфигурации калибровки.
Изменить:
Standard_DZ_SX = 0x10;
Standard_DZ_SY = 0x10;
Строки в A10_calibration.txt к:
Standard_DZ_SX = 0x01;
Standard_DZ_SY = 0x01;
Это изменит мертвую зону на элементе управления поворотом с 10 на 1 и даст гораздо лучший контроль. Вы можете поиграть с этой настройкой, а затем выполнить повторную калибровку и посмотреть, что вам больше всего нравится.