Контроллер предназначен для использования в баттон-боксах, платах на рулях, педалях, для подключения шифтеров, ручников, т.е. для подключения кнопок, энкодеров и аналоговых осей.
Возможности устройства (подробнее о спеках еще раскажу ниже):
6х аналоговых осей (12 бит - 4096 дискретных значений)
до 36 кнопок
до 11 энкодеров
1KHz частота обмена с ПК
Со стороны ПК контроллер выглядит как обычный джойстик, установки драйверов не требует.
Ну, про всякие кнопки и энкодеры понятно, а к аналоговым входам можно подключать как потенциометры в качестве крутилок (в иР например можно использовать такие оси для некоторых контролов), так и уже готовые педали, т.е любой аналоговый сигнал.
Вот например я подключил педали от G27 (разворачивайте на полный экран и смотрите в ХД, иначе ничего не видно):
https://www.youtube.com/watch?v=KnnlDYHd0DE
Лоад - селлы также можно подключить, но конечно нужен отдельный усилитель. Как его собрать, показано например здесь. После него подключается как обычный аналоговый выход.
Для этого проекта я решил использовать не Ардуино, а плату для разработчиков на основе STM32F103C8T6. Вот для сравнения их характеристики:
Как видите, STM32F103C8T6 на фоне Ардуино выглядит вполне неплохо, а стоит дешевле. Один из основных минусов состоит в том, что для заливки прошивки в него нужен отдельный программатор, но он тоже недорог.
Я покупал все на алиэкспрессе, например вот и вот
Выглядят эти штуки так:
Схема самой борды
ОК, теперь к прошивке.
После заливки прошивки, значение пинов борды становится таким (пока это фиксировано):
Кнопки нужно подключать матрицей - строки к пинам ROW1 - ROW6 (B4 - B9), столбцы к пинам COL1 - COL6 (C13 - C15, B12, B3, A7). Крайние выводы энкодеров нужно соединить между собой и одну сторону подключить к ROTA (B10), другую - к ROTB (B11). Средние выводы энкодеров - к пинам ROT1 - ROT11. Аналоговые входы - ADC0 - ADC6 (A0 - A6). Последние два входа ADC5 и ADC6 работают в паре - на ось подается бОльшее из двух значений. Неиспользуемые аналоговые входы должны быть соединены с GND!
Также я нарисовал картинку, чтобы было более понятно:
Ссылка на прошивку
Естественно, возникает вопрос - как залить прошивку? Сначала нужно подключить программатор к борде. Четыре провода, все просто - землю к земле, 3V к 3V, DIO - SWDIO, DCLK - SWCLK. Картинка:
Затем:
Нужна утилита ST-Link Utility, скачать можно отсюда
Устанавливаем ее и запускаем. Открываем прошивку File -> Open file, Выбираем Target -> Connect. Внизу в окне статуса утилита должна появится всякая инфа о МК, это значит, что программатор вы подключили правильно и st-link utility определила нашу борду. Картинка:
3. Затем собвственно прошиваем Target -> Program. После прошивки борда "отвалится", это нормально, это значит прошивка залилась корректно и начала работать, т.к. в ней переопределяются пины, используемые программатором и st-link utility больше не может видеть борду. Картинка:
Теперь о характеристиках борды, как обещал в начале. Просто приведу сравнение с педалями, которые у меня есть - G27 и Fanatec Elites
разрешение осей - 4096 дискретных значений. G27 имеет 256, а Elites - 1024 значений, т.е. по этому параметру этот контроллер не хуже.
частота обмена с ПК - 1KHz. Частота обмена данными с ПК - это минимальная latency для педалей. Т.е. она может быть больше, если например АЦП медленно считывает данные или сам МК работает медленнее, но не может быть меньше, т.к. это частота, с которой ПК опрашивает USB - устройство. Если у девайса есть что ответить - он отвечает, если нет - то нет. Ради интереса я посмотрел частоты обмена и оказывается у G27 она - 2мс, а у Elites - 16мс. Фанатек меня тут в очередной раз разочаровал.
Затем я вспомнил, что у меня есть ДСД контроллер (12 bit controller with integrated load cell amplifier) и тоже посмотрел частоту обмена. Я просто даже не знаю, что сказать, просто оставлю картинку
Т.е. видимо задумывалось, что частота должна быть 20мс, но бывают просадки до 1сек! Только на этом скриншоте их сразу две. И это я собирался поставить в свои педали :facepalm:
В целом, вроде бы все. Этот проект получился для меня интересным, поэтому я планирую дальше его развивать. В частности, TODO лист такой:
сделать отдельную интегрированную плату со встроенным load-cell усилителем.
сделать возможность переопределения пинов, а соответственно и кол-ва кнопок и энкодеров. Т.е. чтобы была возможность сделать например кнопок меньше, а энкодеров больше или наоборот.
возможно буду добавлять поддержку других компонент - галетников и т.п., но пока честно говоря, не знаю насколько это нужно