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


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

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

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

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

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

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

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



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

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


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


Страшный прототип на 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:



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

После пайки получилось что-то типа этого:



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

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




Результат


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



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



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



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

github.com/robotsrulz/SP_Adapter

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

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



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

Комментарии (29)


  1. dernuss
    05.09.2016 19:59

    хотя колхозные способы обновления прошивки без ST-LINK существуют…

    Не понимаю почему обновление без ст линк колхозный способ?
    Вообще написание своего загрузчика есть хорошо. Так как с ним можно защитить софт от копирования.


    1. rstepanov
      05.09.2016 20:09

      А как наличие своего загрузчика мешает сдуть чип и слить с него прошивку через st link?


      1. dernuss
        05.09.2016 20:28

        Для того чтобы не слить через st link надо просто залочить флеш. А загрузчик нужен чтобы файл прошивки можно было закодировать и свободно распространять обновления через интернет.


        1. rstepanov
          05.09.2016 20:33

          Надо попробовать, спасибо!


          1. dernuss
            05.09.2016 20:40

            Вот я правил пример загрузчика от ф107,
            Добавил подсчёт crc прошивки, если совпадает, передаю ей управление.
            https://github.com/denruss/stm32_MyDfu

            Программу для обновления использовал от производителя:
            http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stsw-stm32080.html

            Но кодирования не делал, мне не надо.


            1. rstepanov
              05.09.2016 20:50

              Супер, обязательно посмотрю!


  1. jaiprakash
    05.09.2016 20:49

    > CooCox CoIDE v2 beta
    > глюки

    Так в ней никто и не работает, все на 1-й версии — там всё нормально.


    1. rstepanov
      05.09.2016 21:08

      В первой версии отладчик рабочий?


      1. jaiprakash
        05.09.2016 22:42

        Я запускал только ради интереса — работал.


        1. rstepanov
          05.09.2016 23:40

          Ясно. Спасибо. Может быть попробую. Интересна наименее тяжелая среда разработки, в принципе, блокнот в качестве IDE вполне устраивает, надо только понять как собирать проект и как работать с отладчиком…


      1. nafikovr
        07.09.2016 13:04
        +1

        в первой нет поддержки последних камней. в остальном все отлично.


  1. Anderer
    05.09.2016 23:21

    А можно подробнее рассказать про плату на последней фотке?
    Работает параллельно с родным шифтером? И как она подключается, надо вести шлейф и припаиваться напрямую к плате?


    1. rstepanov
      05.09.2016 23:38

      Она подключается вместо шифтера к разъему DB9 на базе руля. Схема подключения:

      image

      Можно тонкий провод пустить через ось руля изнутри базы. Кнопки (12 шт) подключаются к 2-х штырьковым разъемам. Видео испытаний прототипа:
      https://www.youtube.com/watch?v=Nse7qTH1f48

      Электрическая схема функционально эквивалентна шифтеру G27, но без потенциометров.


      1. Anderer
        06.09.2016 02:39

        Схема подключения без схемы платы шифтера ни о чем не говорит :)


        1. rstepanov
          06.09.2016 08:28



          Подтягивающие резисторы на 10 кОм, со светодиодом — 330 Ом, сдвиговые резисторы HCF4021 (я в курсе, что можно было взять 74HC165D и тогда инвертер не нужен, так сложилось :-), EEPROM ST95010.


          1. diller61
            06.09.2016 11:11
            +1

            сдвиговые резисторы HCF4021

            регистры?


            1. rstepanov
              06.09.2016 11:14

              Да, конечно :) Вот что бывает если писать на телефоне второпях :)


  1. diller61
    06.09.2016 11:13

    очень здорово что автор такое может, но изложено не совсем полно, если честно я так и не понял для чего сей девайс служит, вероятно если зарыться в гитхаб станет понятно, но вот из статьи как-то не очень…


    1. rstepanov
      06.09.2016 11:21
      +1

      Иногда, когда погружаешься в тему достаточно глубоко, начинаешь думать, что окружающие тоже понимают с полуслова то, о чем ты пытаешься сказать…

      Вкратце, есть устройство USB HID (джойстик), состоящее из нескольких блоков, соединяемых вместе кабелями (база руля, педали, переключатель скоростей с кнопками). Берем отдельные части этого устройства (педали, переключатель скоростей) и делаем для них свой, отдельный USB HID контроллер. Как то так…

      Были идеи даже свою базу сделать с прямым приводом руля на мощном сервомоторе, но уже сейчас понятно, что это будет исключительно ради самоудовлетворения, продать такое нереально…


      1. diller61
        06.09.2016 11:24

        спасибо, так понятнее


  1. madf
    06.09.2016 13:09

    с таким подходом руль вообще не нужен, можно свои игровые устройства разрабатывать)


    1. rstepanov
      06.09.2016 13:20

      Конечно можно. Даже нерешаемых проблем особо не предвидится. Но это дорого и долго…


      1. madf
        06.09.2016 14:22

        для любимого дела — время не имеет границ)


        1. rstepanov
          06.09.2016 14:36

          Это только пока молод и время девать особенно некуда.


          1. madf
            06.09.2016 14:49

            Это пока молод, считают, что «некуда», дальше, т.к. времени мало, всё делаешь как раз по чуть-чуть и там как успеешь.)


  1. Rifal
    07.09.2016 11:33

    Извините за оффтоп. Сам увлекаюсь симрейсингом и считаю это одним из самых полезных видов досуга (после спорта), так как после сеанса «симрейсингтерапии» сразу исчезает желание погонять на реальной машине (у меня по крайней мере). Как-то спокойнее ведёшь себя на дороге, когда вдоволь накатаешься в виртуале… Вопрос к автору — нет ли желания сделать специальные рули для формульных серий (картинга) с их особенностями по оборотам и прочее?


    1. rstepanov
      07.09.2016 12:09

      У карта достаточно простая баранка без кнопок, покупаете MOMO MOD 11 260MM, сверлите дырки под имеющуюся базу, фидбек побольше и все, можно катать. Ограничение по оборотам настраивается в симуляторе.


      1. Rifal
        07.09.2016 12:21

        Это то понятно ))) У самого Momo Racing FFW старенький. При активном рулении программное ограничение не помеха выкручивать руль по-полной, вот я о чём + форма руля. Думал может заморачивались с этим. За проект респект!


        1. rstepanov
          07.09.2016 12:28

          У Момо Racing обеспечивает фидбек только один и довольно слабенький моторчик. Прокрутить его дальше настроенного диапазона может любой взрослый человек. Хотите усилия как на настоящем карте — покупайте базу Fanatec или OpenSimWheel.

          Если я сделаю свою базу — она совершенно точно не будет дешевле, чем OpenSimWheel, в силу того, что при постройке прототипа или мелкой серии финансовые затраты на каждый экземпляр существенно больше, чем при крупной серии. Готовы профинансировать разработку? Если нет — см. варианты выше.