DIY Контроллер для педалей и кнопок

Контроллер предназначен для использования в баттон-боксах, платах на рулях, педалях, для подключения шифтеров, ручников,  т.е. для подключения различных кнопок, энкодеров и аналоговых осей.

Возможности устройства:

  • поддержка до 6х аналоговых осей (12 бит — 4096 дискретных значений)
  • калибровка осей
  • поддержка кнопок в матрице
  • поддержка одиночных кнопок
  • поддержка энкодеров
  • поддержка галетников
  • поддержка POV Hat Switch
  • поддержка аналоговых входов как кнопок
  • 1KHz частота обмена с ПК

Со стороны ПК контроллер выглядит как обычный джойстик, установки драйверов не требует.

Для этого проекта я решил использовать не Ардуино, а плату для разработчиков на основе STM32F103C8T6. Вот для сравнения их характеристики:

Arduino Leonardo STM32F103C8T6
Flash 32KB 64KB
SRAM 2.5KB 20KB
EEPROM 1KB Absent
Architecture 8-bit ATMEL AVR 32-bit ARM CORTEX-M3
Frequency 16MHz up to 72MHz
GPIO pins 20 26
PWM 7 12
Timers 1x 16-bit, 2x 8-bit 3x 16-bit, 1x pwm
Peripheral 10-bit ADC (6 channels)
1x I2C
1x SPI
1x UART
USB
2 x 12-bit, 1 μs A/D converters (7 channels)
7-channel DMA controller
3x USART
2x I2C
2x SPI
CAN
USB

Как видите, STM32F103C8T6 на фоне Ардуино выглядит вполне неплохо, а стоит дешевле. Один из основных минусов состоит в том, что для заливки прошивки в него нужен отдельный программатор, но он тоже недорог.

 

Я покупал все на алиэкспрессе, например вот и вот. Также можно встретить BlackPill плату — линк. У нее чуть меньше выводов, но есть монтажные отверстия.

Схема борды:

STM32Mini

В pdf формате

Black_Pill_Schematic

Распиновка — The-Generic-STM32F103-Pinout-Diagram

Распиновка после первоначальной заливки прошивки:

             STM32F103C8T6
	   -------------------
	- |3VB		 +3.3V| -
  	- |C13		   GND| -
  COL1	- |C14		   +5V| - 
  COL2	- |C15		    B9| - ROW6
  ADC0 	- |A0		    B8| - ROW5
  ADC1 	- |A1		    B7| - ROW4
  ADC2	- |A2		    B6| - ROW3
  ADC3	- |A3		    B5| - ROW2
  ADC4	- |A4		    B4| - ROW1
  ADC5	- |A5		    B3| - COL4
  ADC6	- |A6		   A15| - ROT11
  COL5	- |A7		   A12| - 
  ROT1	- |B0		   A11| - 
  ROT2	- |B1		   A10| - ROT8
  ROTA	- |B10		    A9| - ROT7
  ROTB	- |B11		    A8| - ROT6
	- |R		   B15| - ROT5
	- |+3.3V	   B14| - ROT4
	- |GND		   B13| - ROT3
	- |GND		   B12| - COL3
	   -------------------

Кроме этого, я написал небольшую программу OSHStudio, которая позволяет переконфигурить пины под конкретно ваши нужды. Выбор функции для пинов осуществляется на вкладке Pins Configuration, здесь же можно выбрать ваш тип платы (это влияет только на графическое отображение расположения пинов)

pins_tab

Кнопки

Если кнопки подключаете в матрице, то столбцы подключайте к пинам «Button Matrix COLUMNS», а строчки — к «Button Matrix ROWS». Отдельные кнопки можно подключать к пинам «Single Button +3.3V» и «Single Button GND». Если кнопка подключается  к «Single Button +3.3V», то вторую ногу кнопки подсоединяйте к +3.3V, если к «Single Button GND», то вторую ногу соответственно на землю. Пример матрицы:

buttonMatrixDia_bbРаботу кнопок можно протестировать на вкладке «Buttons»:

button_tab

На этой же вкладке можно сконфигурировать и протестировать работу «хаток» — POV Hat Switch. При активировании 1 хатка работает от первых 4х кнопок матрицы, вторая — от следующих 4х и т.д.

И здесь же можно настроить порог, при превышении уровня которого на аналоговом входе будет регистрироваться нажатие кнопки (тип входа — Analog to Button)

Энкодеры

Поддерживаются инкрементальные энкодеры видов FULL step, HALF step и QUARTER step. Энкодеры можно подключать как отдельно (single конфигурация), так и связанными между собой (chained конфигурация). При подключении в chained конфигурации крайние выводы энкодеров нужно соединить между собой и одну сторону подключить к пину «Chd Rot Enc PINA», другую — к пину «Chd Rot Enc PINB». Средние выводы энкодеров — к пинам «»Chd Rot Enc 1/1», «Chd Rot Enc 1/2» или «Chd Rot Enc 1/4» в зависимости от типа энкодера. Можно соединять разные типы энкодеров. Пример:

RotariesChainedDia_bb

При одиночном (single) режиме, крайние выводы подключаются к «Sng Rot Enc PINA 1/1» и «»Sng Rot Enc PINB 1/1» (либо 1/2, либо 1/4), а центральный пин — к +3.3V. Пример:

RotariesSingleDia_bb

При необходимости можно переназначить какие выводы к какому конкретно энкодеру будут принадлежать на вкладке Single Encoders Config

sgl_enc_tab

Работу энкодеров можно также протестировать на вкладке «Buttons».

Галетники

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

SwitchesDia_bb

Аналоговые входы

Аналоговые входы — ADC0 — ADC7 (A0 — A7). Оси можно откалибровать на вкладке Axises Configuration, калибровочные значения хранятся в самом МК, т.е. не нужно будет калибровать заново при переустановке Windows или на другом ПК. После калибровки ось «растягивается» в МК, поэтому ПК всегда видит ось в 4096 значений. Вместо ручной калибровки можно использовать автоматическую (AutoCalibration).

Также есть возможность объединить два аналоговых входа в одну ось — combined axis. Сделано преимущественно для баранок с двумя лепестками сцепления. При этом есть два режима работы:

  • cooperative work — значения обоих входов складываются, ползунком можно увеличить или уменьшить вес одного из входов на конечный результат оси.
  • each on his own — каждый их входов работает независимо, но на одну и ту же ось. Входы при этом можно откалибровать по-разному и использовать в различных ситуациях.

axis_tab

Все неиспользуемые ноги МК рекомендуется сконфигурировать как «Not Used»

Исходники в моем проекте на github.

Готовые прошивки:

Версия 0.14 — добавлены автокалибровка осей, Analog2Button и combined axis

Версия 0.13 — добавлена вкладка Single Encoders Config

Версия 0.12 — добавлена вкладка Tuning

Версия 0.11 — добавлена поддержка одиночных энкодеров

Версия 0.10 (начальная)

Если у Вас есть вопросы о том, как залить прошивку, то можно посмотреть эту запись.

Реклама

DIY Контроллер для педалей и кнопок: 4 комментария

  1. Доброго времени суток. Два вопроса:
    1 — получится ли на базе этой платы сделать полноценный руль с педалями и прочим?
    2 — оптические энкодеры будут работать?

    Нравится

  2. Приветствую
    1. Без обратной связи (Force Feedback) — да. С ФФБ — нет.
    2. В данной прошивке энкодеры транслируются в нажатия виртуальных кнопок в Windows. Для руля нужна другая обработка их работы

    Нравится

    1. Отлично. До ффб я пока не дорос, так что будем лепить обычный.
      Спасибо огромное за проект, кнопок и крутилок хватит на все задуманное!

      Нравится

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s