Адаптер педалей и-или шифтера Logitech G25-G27 на STM32

в 15:42, , рубрики: DIY, diy или сделай сам, g25, g27, logitech, stm32f042, stm32f103, Железо, Производство и разработка электроники, Электроника для начинающих

Постановка задачи

В связи с потребность в самосовершенствовании и необходимостью занять чем нибудь голову между рутиной на работе решил я еще немного продвинуться в изучении электроники. Из того, что мне интересно как хобби, в этой статье упоминается про:

  • Симрейсинг
  • Программирование микроконтроллеров
  • Разводка и изготовление печатных плат
  • Сборка электроники
  • Изготовление корпусов для электроники на 3D принтере
  • Куда девать собранные платы

Все картинки и рассказ что из этого вышло — под катом. Много рассуждений и совсем мало нет кода.

Более подробно что и зачем я собирался сделать

Итак, я некоторую часть своей жизни потратил на симрейсинг. Это когда человек сидит за компьютером и воображает себя крутым гонсчегом. Симрейсинг отличается от игры в «гоночки» типа нидфорспида, грида и прочих тем, что в симуляторе куда меньше внимания уделяется бонусам и визуальным развлекаловкам в пользу более точной симуляции поведения автомобиля, дорожных условий и самого процесса вождения. Соответственно, оборудование для «игры» в симуляторы тоже требуется достаточно серьезное. Часто в постройку гоночного кокпита денег вваливается практически как в настоящий автомобиль. Если для аркадных гоночек часто хватает геймпада или простенького руля за несколько тысяч рублей, то для симуляторов что-то типа Logitech G27 — это минимальные требования, а серьезные ездуны предпочитают продукцию Fanatec или конструкции с прямым приводом на основе промышленных сервомоторов.

Но мы настолько глубоко в дебри забираться не будем и рассмотрим ситуацию, когда у человека есть Logitech G25 или G27 и ему его возможностей немножко не хватает. Например, у G25 всего две кнопки на руле и если есть желание повесить туда «формульную» баранку — дополнительные кнопки взять просто неоткуда. Еще один косяк логитековских рулей — громкий стук, который издают косозубые шестерни при смене направления вращения моторов, обеспечивающих эффекты обратной связи. До кучи еще и люфты, снижающие информативность руля. Кроме глубокого моддинга руля (например, переделки под ременной привод) есть еще и более радикальный подход к вопросу — смена руля на тот же Fanatec, топовые модели Thrustmaster или OpenSimWheel с прямым приводом. Часто при этом остаются незадействованные педали Logitech, которые с прогрессивными пружинами или установленным load cell модом далеко не так уж плохи. Можно также попробовать задействовать шифтер Logitech (который мне совсем не нравится по эргономике и тактильным ощущениям, но есть и те, кого он устраивает).

Для решения этих проблем есть адаптеры от Leo Bodnar или Derek Speare, которые эти проблемы более менее решают. Ссылки приводить не буду, сами найдете если интересно. Недостатков у них несколько. Кроме высокой цены у адаптера DSD вылез еще косяк с периодическими задержками обновления состояния осей:

Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 1

Это просто фееричный фейл, когда пилот уже бросил газ и вовсю давит тормоз, а машина продолжает уверенно разгоняться. Для Тойоты такое закончилось катастрофами с человеческими жертвами и судебными исками. В симрейсинге последствия куда менее фатальные, но закончить гонку в заборе из за глюканувшего контроллера тоже как то не очень хочется. Итак, решено, будем строить свой контроллер, со всеми свистками и перделками, но занедорого.

Начало большого пути

Из чего делать будем? Обычно джойстики делают из Teensy. Удобно, красиво, быстро, накидал скетч в стиле ардуино — готово, поехали! Но не дешево. Непонятно почему, но Teensy стоит весьма немало. К тому же я давно хотел спаять свою плату, чтобы все разъемы на ней уже стояли, никаких проводов, никакого навесного монтажа. Поэтому фтопку Teensy, берем дешевый STM32 и поехали:

Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 2
Страшный прототип на STM32F103

В качестве среды разработки — CooCox CoIDE v2 beta, рисуем скелет USB HID с помощью STM32CubeMX, добавляем опрос потенциометров в педалях, опрос потенциометров в шифтере и опрос кнопок через сдвиговые регистры, поехали. В процессе работы над прошивкой полезли совершенно адовые глюки, после нескольких дней изучения ситуации была найдена причина — связка CoIDE и GNU ARM GCC выдавала какой то совершенно адский трэш, который работал непонятно как и мог при добавлении совершенно невинной строчки в код сгенерить нечто невообразимое. Разбираться в том, почему оно так работает, мне было не интересно, поэтому пришлось переползти на бесплатную версию Atollic TrueStudio. Да, оно еще более тормозное (Eclipse на не самом мощном планшете с Атомом мягко говоря работает неспешно), но зато прошивка получается более-менее беспроблемная, если какие глюки и есть — то только мои.

После того, как все более-менее заработало, возник следующий вопрос, как все это упаковать в красивый корпус. Оставлять отладочную плату я не хотел, хотелось сделать именно плату адаптера в виде готового конечного устройства. Ну и может быть продать потом несколько штучек… Если повезет… Возникла задача сделать плату подешевле. Минимальный контроллер семейства STM32 на котором есть аппаратный USB и достаточно ног, чтобы задействовать SPI — это STM32F042. Самый дешевый и простой в пайке вариант — в корпусе TSSOP20. Выбираем версию, где побольше доступной памяти. Итого получился контроллер STM32F042F6P6. К тому же у него есть такая мега полезная фича, как заливка прошивки через USB(DFU). В STM32F103 такого нет, хотя колхозные способы обновления прошивки без ST-LINK существуют… По быстрому накидал плату в DipTrace:

Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 3

Забегая вперед, скажу что серьезных косяков с этой платой не возникло, ну кроме того, что внешний кварц совершенно избыточен, HSI48 в STM32F042 работает отлично, можно было бы обойтись только им… Хорошо, что линейный регулятор поставил такой здоровый и мощный, на отладочной плате STM32F103 проседало напряжение при нажатии кнопок на шифтере, а с такой бандурой все стабильно и паять ее легко. Вот с типоразмером кондеров и резисторов я погорячился, 0603 это для новичка жестковато, не сразу научился делать красиво. Платы заказывал в Seeed Studio, делают дешево и хорошо.

После пайки получилось что-то типа этого:
Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 4

Портировать прошивку с STM32F103 на STM32F042 оказалось несложно, за исключением нескольких интересных моментов, например, у STM32F042 более медленный ADC, нельзя задать ранги при последовательном преобразовании нескольких каналов, преобразование 12-битного значения при максимальной частоте составляет около 13 циклов. Опять же, нафиг не нужен внешний кварц…

Несколько фоток рабочего процесса

Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 5
Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 6

Результат

Испытания прототипа в Assetto Corsa (быстрее всего было запустить :-))

После этого возник вопрос, из чего сгородить корпус. Под рукой был 3д принтер, после нескольких попыток получилось что-то более-менее приемлемое:

Прототип

Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 7
Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 8

И относительно финальный результат:

Адаптер педалей и-или шифтера Logitech G25-G27 на STM32 - 9

На текущий момент планируются некоторые улучшения в прошивке, по железу больше ничего делать не предполагается. Выкладывать сюда примеры кода не буду, они побольше чем скетчи Ардуино. Все лежит на гитхабе: код, схемы, герберы, модель корпуса, некоторые спеки и еще много всего. Страничка проекта:

Автор: rstepanov

Источник


  1. Александр:

    Мне нужна такая плата на КПП в системник перехода.

  2. Александр:

    Магу снять видео что мне нужно и отправить. Ток как и куда вам это сделать.

  3. Валерий:

    Здравствуйте, скажите через данный контроллер или переходник, не знаю как его правильно назвать, я так понял в него втыкаем педали от G25, + КПП и через USB провод в компьютер, и как его комп увидит, нужен драйвер. В итоге после установки драйверов, как это всё будет работать с Фанатековской базой. Если всё будет работать корректно готов купить за адекватную цену + ещё и прорекламировать через блогеров которые ведут каналы о симрейсинге.

  4. Aleksandr:

    Готов купить такой адаптер.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js