Адаптер педалей и-или шифтера 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

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

github.com/robotsrulz/SP_Adapter

К вопросу «Куда девать собранные платы» — ну, одну я себе оставлю, для экспериментов. Например, давно хотел попробовать совместить несколько устройств в одной железке (composite device), можно сделать программно нажимаемые кнопки в зависимости от телеметрии, например…

PS: кстати, я еще скопировал схемотехнику шифтера чтобы организовать больше кнопок на руле G27 / G25 без дополнительных контроллеров, получилась вот такая маленькая плата:

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

Теперь можно сделать формульный руль с 14 кнопками на G25 и c 18 кнопками на G27…

Автор: rstepanov

Источник

Поделиться новостью

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