Ffb руль своими руками

DIY FFB steering wheel

Рекомендованные сообщения

Похожие публикации

Всем привет, больше года назад посетила меня мысль сконструировать свой руль с обратной отдачей, так как денег на хороший руль не было, а руки горели. По итогу конечно все это вышло в немаленькую сумму, за которую можно было купить подержанную базу именитых брендов, но сам интерес к самоделке только возрастал со временем. Изначально хотел собирать на базе Arduino leonardo, так как наткнулся на видео в ютубе от ebolzmagy, скачал его бесплатную обрезанную версию прошивки EMC для ардуино и заказал комплектующие со всеми вами известного китайского сайта. По приходу всех товаров сразу начал собирать электронную начинку и когда все заработало, списался с ним ( ebolzmagy), чтобы купить полную версию прошивки, но к тому времени он уже отказался от идеи собирать руль на базе ардуино, что и мне посоветовал. В ходе нашего общения выяснилось, что ардуино тупит из-за недостатка памяти в микропроцессоре и соответственно нужно искать другой вариант, этим вариантом была stm32f103c8t6, которая и была заказана на замену ардуино, но в последствии из-за моих кривых рук плата стала кирпичом и поэтому уже в третий раз пришлось заказывать новую плату, но почему-то наши китайские коллеги к тому моменту заломили на нее цену (stm32f103c8t6) и вообще было сложно найти именно эту плату, мой следующий выбор пал на плату, которая в итоге сейчас и стоит во главе всего механизма (stm32f407VET6). Ниже приложу 3д модель всей задумки изначально, но в дальнейшем она сильно изменилась.

Изначальная конструкция менялась путем проб и ошибок, да и как сейчас я понимаю, главная проблема, которую я не решил, это то, что я установил двигатель и источник питания на 12в, но об этом чуть позже. Первая конструкция имела на борту двигатель RS775(12в, а до него еще был какой-то двигатель, не помню уже обозначение), энкодер Omron E6B2(Копия), зубчатые шкивы GT2 с ременной передачей 1:3(для такого движка понятно, что это соотношение не подходит, но хотелось быстрее испытать всю конструкцию в деле), драйвер BTS7960, источник питания 12В(15 ампер), Ардуино леонардо, корпус был сделан из оргстекла толщиной 10мм.(Был взят аквариум, рыбки уже давно играют в карты с Посейдоном, а аквариум пошел на «доброе» дело за ненадобностью) По итогу скажу так, когда этот суповой набор запустился, счастью не было придела, но все работало так, будто у меня в доме умирал тюлень, двигатель плакал и просил, чтобы его вернули обратно в шуруповерт, а источник питания хрюкал и плевался уходя в защиту от перегрузки при прохождении отметки стопора в прошивке, поэтому решено было что-то менять.

Следующим этапом на замену ардуинки пришла stm32f103c8t6 и руль перестал тупить, но опять же из-за моих кривых рук, когда я проверял работоспособность сей конструкции, весело сгорел драйвер двигателя, да так, что батя хотел отказаться от сына (помню этот момент, когда матушка заходит в комнату, а я спиной стою к рулю и пытаюсь закрыть устроенный дома пожар и на вопрос, у тебя что-то горит? Делаю вопросительное лицо с идущим дымом из-за спины). В последствии был заказан новый драйвер, который стоит и по сей день. Также в процессе доработки моего Франкенштейна была угроблена плата stm32f103c8t6 и плачущий, но все еще находящийся в хорошем настроении (пришла зарплата), я понес китайским коллегам шекели в обмен на stm32f407VET6. Также были заказаны зубчатые шкивы с соотношение 1:6 и ремнем HTD3M, блок питания 12в (50ампер), двигатель RS895 12в (Моя главная ошибка, потому что мне кажется, что вместе с двигателем, они туда засунули смурфика с паяльником, иначе как объяснить, что эта падла греется так, что можно в холодную зиму за отопление не платить).

Также были докуплены разные электронные компоненты, чтобы спаять и соорудить подобие приборной панели и обеспечить всему этому работу с помощью программы Simhub, а также были доработки с внешним видом и удобностью использования самой «конструкции», было сделано охлаждение на двигатель с использованием принудительного охлаждения (вентилятор сзади) и радитор с термопастой и хомутом для обвязки, но ощутимый эффект оказался лишь обманом(смурфик снова включет паяльник) и на нем можно сварить кофе любимой девушке. По итогу, граждане форумчане, прошу вашей помощи и сильно не судить человека начинающего свой путь в электронике.

Читайте также:  Люфт руля мерседес w212

У меня к вам несколько вопросов:
1. Возможно ли переделать источник питания 12в на 24в и нужно ли это, может есть решение?
2. На какой двигатель лучше всю эту связку поставить?(Но так, как на 12в при этой той же силе фидбэка двигатель потребляет в 2 раза больше тока, я думаю, что скорее всего варианты с двигателем на 12в отпадут, хотя жду ваших предложений)
3. Купить логитек и идти играть в свой ETS2?( P.s. Никого не хотел оскорбить)
Спасибо вам всем, кто дочитал до конца, прошу помощи и понимания)

Сейчас на странице 0 пользователей

Нет пользователей, просматривающих эту страницу.

Источник

Руль, джойстик и геймпад с обратной связью (Force Feedback)

Поводом для этой статьи явился, принесенный мне на ремонт, руль GW21-FB китайского производства. Обычно в устройствах такого происхождения ужасная механика, дешевые электролитические конденсаторы, не качественная пайка и ремонт не вызывает проблем. Иногда выходит из строя контроллер (как правило бескорпусный, залитый компаундом), в этом случае приходится менять всю плату, т.е. создавать ее заново, т.к. купить ее негде. Если руль (джойстик, геймпад) без обратной связи, то схема получается небольшая и что-либо изобретать нет необходимости — примеров реализации таких устройств в сети предостаточно. Например: Mjoy16 , Analog Joystick

В данном случае обратная связь должна быть, и я, походив по Интернету, с удивлением обнаружил, что ни одной реализации с открытым кодом нет! Многие самодельщики (в основном англо- и немецкоязычные) брались за это, но безрезультатно. Ну, что же, попробуем восполнить этот пробел. И попытаемся сделать это дешево, иначе ремонт может стать просто нерентабельным.

Далее последуют нудные разъяснения, кому это скучно, могут сразу перейти в конец статьи и скачать архив с готовыми схемами, платой, исходниками и прошивками.

Итак, для начала, как же работает «обратная связь»или точнее FFB (Force feedback)? Есть два ее вида — Вибрационная и Активная. В первом случае в устройство просто встроен вибромотор, такой же как в сотовом телефоне, только немного помощнее. В определенные моменты игры, например при столкновении, наезде на препятствие, этот мотор включается и руль (джойстик, геймпад) начинает вибрировать.

На этом фото показан вибромотор в ручке джойстика. На ось мотора напрессован груз со смещенным центром тяжести. При вращении груза мотор вместе с ручкой начинает вибрировать. Достоверность тактильных ощущений при этом, естественно, не велика, поэтому чаще ставят два мотора. Они одинаковые, но грузы на них разные, поэтому у одного частота вибрации выше, но амплитуда ниже, у другого наоборот — частота ниже, а амплитуда выше. Кроме того, моторы расположены под углом друг к другу, поэтому и направление вибрации различно. Комбинируя одновременное и раздельное включение моторов можно несколько разнообразить тактильные ощущения.

Однако, частоту, амплитуду и, главное, направление вибраций, при таком подходе, варьировать крайне сложно, поэтому в устройствах более высокого класса применяется Активная система FFB. В рулях это мотор, соединенный с колесом руля зубчатой или ременной передачей:

В джойстиках применяют два мотора — по осям X и Y:

Я не для красоты привожу эти картинки. Возможно кто-то захочет доработать свой «безответный» аппарат системой FFB и они могут послужить наглядным пособием для этого. Как видите, ничего заумно-хитрого здесь нет.

Итак, с механикой все понятно, управление моторами не представляет особой сложности, но нужно знать как и когда их включать/выключать. Требуется получить по шине USB информацию от компьютера. Обычный руль, джойстик, геймпад это HID-устройство, даже не требующее драйвера, они есть в системе, но для FFB все сложнее. Нужно либо представиться системе устройством, способным самостоятельно формировать сигнал управления мотором, получая от компьютера все данные (длина волны, амплитуда, фаза и т.д.), либо использовать драйвер-преобразователь.

В первом случае потребуется постоянно принимать большие объемы информации и иметь контроллер с функциями DSP. Кроме того, нужно глубоко изучить систему формирования сигнала для написания управляющей прошивки при том, что для выставления правильных коэффициентов для DSP потребуется оригинал для сравнения.

Читайте также:  Вибрация на руле freelander 2

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

Собственно изначально задача была недорого и без головной боли отремонтировать (переделать) сабж, поэтому выбираем второй вариант. И без стеснений берем драйвер от фирмы Logitech. К концу повествования мы создадим несколько рулей, но начнем с самой сложной модели — G25:

Модель топовая, имеет три педали и 22 кнопки управления. Точнее говоря, из-за рычага переключения передач их кажется меньше, но информация о его положении передается как отдельные кнопки, а нам для выбора схемы важно знать их максимальное число, поэтому запомним — 22 кнопки + 3 педали.

Вот мы и подошли к схемной реализации. Сначала определимся с контроллером:

В современных рулях, джойстиках применяют высокоскоростной протокол USB 2.0, но мы попробуем обойтись низкоскоростным 1.1. Во первых принимаемый/передаваемый объем информации не столь уж велик, а во вторых микроконтроллеры с аппаратным USB довольно дороги, да и конвертеры USB/RS232 тоже. Попробуем применить «ширпотреб» — ATmega8 с программным вариантом реализации USB.

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

11 08 ХХ 80 00 00 00

означает включение мотора FFB, при этом ХХ определяет силу и направление вращения. ХХ принимает значение от 0 до 255, при этом 128 — «начало координат», все, что меньше — вращение влево, больше- вращение вправо. Т.е. данные можно сразу подавать на 8-битный ШИМ с мостовой схемой включения мотора. Комбинация

13 00 00 00 00 00 00

означает выключение мотора. Это тоже важно, т.к. при ШИМ=128 мотор, конечно, не крутится, но ток через него идет и, если уж компьютер разрешает, то лучше ток отключать.

Итак со схемой теперь все понятно:

Чтобы меньше сверлить отверстий в плате, применим SMD резисторы и конденсаторы:

Прошивку контроллера напишем в среде Bascom-AVR . Для программной реализации USB воспользуемся библиотекой SWUSB.LBX . Для удобства работы оформим дескрипторы и константы USB отдельными файлами, соответственно Descriptors.inc и USB_config.inc .

Сразу зададим начальное состояние портов ввода/вывода:

Назначим выводы D+ и D- для USB (D+ должна быть на INT0):

Зададим PID и VID, соответствующие Logitech G25:

В нашем распоряжении всего 8 байт для передачи хосту, а устройство имеет , как мы помним, 22 кнопки, руль и три педали. Плюс к этому нужно еще передать байт «Combined Pedals» — как выяснилось, при активации/деактивации этой опции драйвер не передает никаких управляющих сигналов устройству и даже не пытается скомбинировать этот режим из имеющейся информации о педалях. Оригинального дескриптора достать не удалось, да он нам и не помог бы, ведь настоящий G25 работает в USB 2.0 и не ограничен пространством — может передавать до 64 байт за раз. Поэтому пришлось ограничить разрядность данных для педалей до 7 бит, а для руля до 12 бит, и репорт-дескриптор в финале получился таким:

Т.е. получилась дискретность педалей 0,78% , а руля 0,024% . Не так уж и плохо.

Для составления репорт-дескриптора можно воспользоваться справочником HID Usage Tables или специальной программой HID Descriptor tool.

Дескриптор продукта и изготовителя не важны, можно поставить любые — драйвер все равно вместо них подставит в систему название «Logitech G25».

В основной программе принимаем данные от хоста и по первому байту сортируем: если $11 (dec 17), то включаем мотор и выставляем ШИМ, если $13 (dec 19) — выключаем мотор:

Частоту ШИМ задаем 375кГц (12МГц/32), т.о. частота на выходе будет около1,5кГц (375/256):

Выше частоту выставлять не рекомендую — транзисторы моста начнут греться, т.к. для их раскачки применен самый примитивный вариант (для удешевления конструкции). При этом в близи среднего положения руля мотор воспроизводит частоту 1,5кГц и для борьбы с этим эффектом последовательно с мотором включен дроссель, а параллельно конденсатор. Если имеются в наличии, то лучше для раскачки применить стандартные драйверы верхнего и нижнего плеч CMOS, тогда частоту ШИМ можно повысить до максимума (47кГц), не опасаясь перегрева и исключить дроссель.

Читайте также:  Что за датчик на насосе гидроусилителя руля

АЦП в ATmega8 10-разрядный, поэтому для получения 12-разрядного значения сложим 4 последовательных значения с потенциометра колеса руля, заодно таким образом уменьшив флуктуации сигнала:

Состояние кнопок определим, выставляя поочередно на линиях Row0. Row3 низкий уровень. Резисторы, включенные в линии кнопок, защищают порты контроллера от короткого замыкания при одновременном нажатии двух и более кнопок. Программно для этого так же предусмотрены защитные временные интервалы.

Разъем GEAR дублирует кнопки S1 и S2 — его наличие необязательно.

На вторую ножку разъема кнопок выведен порт С3 — сюда можно будет подключить светодиод (пока не задействовано).

Данные переключателя видов «HAT» перед передачей хосту нужно перевести в градусы. Дискретность — 45°, при этом отжатое состояние соответствует 360°. Кроме того, эти данные нужно вписать в свободный верхний нибл старшего байта колеса руля, т.к. мы так задали в дескрипторе:

Потенциометры педалей опрашиваем аналогично колесу руля, так же 4 раза для снижения флуктуаций, затем делим на 32 (сдвигом на 5 разрядов вправо). В результате получаем данные в масштабе 7 бит. Далее создаем «Combined Pedals» — если не нажата педаль «тормоза», то она равна данным педали «газа». Если нажат «тормоз», то равна его инверсии — так требует драйвер.

Далее следует пересортировать биты данных в соответствии с заданной очередностью в репорт-дескрипторе. Обычно такого делать не требуется, но в данном случае мы вынужденно пошли на такие сложности из-за стесненных условий. Зато мы уместили в пакете большой объем информации. После пересортировки передаем данные хосту:

Программа закончена, можно ее скомпилировать и зашить в контроллер.

Скачиваем драйвер с сайта Logitech, устанавливаем его и подключаем наше устройство. Драйвер определит его как G25, заходим в свойства, здесь можно протестировать поворот руля, нажатие педалей — все сразу отразится на экране. Кроме того, нажимая на кнопки, можно протестировать FFB — «езда по деревянному мосту», «лопнувшая покрышка», «взрыв».

Второй руль, который мы будем создавать — Logitech Driving Force™ Pro:

Это престижная модель с двумя педалями и переключателем передач на встроенной консоли. Передачи переключаются только «вперед/назад». На консоли руля больше кнопок, чем на G25, но их суммарное число меньше — 18. Такая конфигурация очень распространена среди рулей с FFB, поэтому прошивка под нее будет наиболее востребована для ремонта или апгрейда.

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

У нас освободились 11 бит, поэтому мы можем установить на педали разрядность в 8 бит, а на колесо руля — 14. Это повысило точность и плавность управления. Изменения в дескрипторе и программе здесь приводить не буду — их можно посмотреть в прилагаемых исходниках.

Теперь попробуем сделать геймпад. За основу возьмем Logitech Rumblepad 2 :

Здесь FFB вибрационного типа, т.е. установлены два вибромотора, направление вращения которых не регулируется, только скорость. Поэтому вместо мостовой схемы применяются просто ключевые транзисторы и два выхода ШИМ. В ATmega8 два выхода имеет Таймер1, они уже выведены на разъем. Кроме того, для одномоторного случая можно задействовать освободившийся выход Таймера2 и подавать на него мажоритарный уровень левого и правого моторов FFB:

Теперь, не меняя схему и прошивку, можно подключить либо один, либо два мотора, в зависимости от конструкции устройства.

Съем данных с потенциометров и кнопок аналогичен предыдущим. Репорт-дескриптор имеет незначительные изменения.

Пакет для отправки хосту имеет следующий вид:

Последний байт всегда равен 64, таково требование драйвера — это своеобразный пароль.

Вот теперь, собственно, и все. По аналогии с вышеизложенным можно сделать джойстик, самолетный штурвал и проч. В приложении все схемы, пример платы в формате Cadsoft Eagle , исходники и откомпилированные коды. Библиотеку SWUSB.LBX перед компиляцией следует поместить в каталог Lib.

P.S. Использование драйвера не противозаконно, у меня были сомнения на этот счет, поэтому я испросил разрешение у фирмы Logitech и ответ был таков: мы не можем запретить Вам такое использование, однако, в этом случае мы не несем никакой ответственности за . и т.д.

Последнюю версию драйвера можно скачать здесь.

Источник

Поделиться с друзьями
Светим и рулим