PDA

Просмотр полной версии : Простой игровой контроллер



servio
19.09.2012, 12:03
Это не коммерческий проект. В первую очередь я разрабатывал этот контроллер для себя, чтобы заменить MJoy в моем РУСе. Душа требовала что-то несложное, дешевое и с более быстрым откликом в игре чем у MJoy. В итоге я собрал то, что хотел. Возможно результаты моих трудов пригодятся еще кому-то.

Ничего революционного в схеме нет. Контроллер построен на базе дешевого восьмиразрядного микроконтроллера от Atmel с аппаратным USB - AT90USB162. Стек USB и HID-интерфейс выполнены на базе открытой библиотеки LUFA. Оцифровкой аналоговых осей занимается внешний четырехканальный АЦП от Microchip - MCP3204. Повышать качество оцифровки АЦП помогают LowDrop стабилизатор питания LP2950CZ-5.0 и источник опорного напряжения TL431. Итоговые характеристики контроллера получились следующими:

1) Полноскоростной аппаратный USB 2.0
2) Частота опроса 500 Гц.
3) Четыре 12-разрядные аналоговые оси (4096 отсчетов): X, Y, Z, Rudder.
4) 28 кнопок (плюс еще 4 в режиме хатки).
5) Режим автокалибровки.
6) Режим опциональной хатки.
7) Индикаторы активности USB подключения и режима автокалибровки.

Дефицитных или редких деталей в нем нет. Я прикинул общую стоимость по киевским ценам:

AT90USB162 - 29,50 грн.,
MCP3204 - 24,20 грн.,
МС33064 - 3,25 грн.,
TL431 - 1,10 грн.,
LP2950CZ-5.0 - 4,54 грн.
и остальное - 20 грн.

Итого - 82,59грн или $10.

Архив со схемой, описание и прошивками.
https://dl.dropbox.com/u/23496322/Sevio%20SideStick.rar

Исходные файлы прошивки контроллера я буду (на шару, т.е. бесплатно) высылать на мыло по требованию желающих.Исходники представляют собой проект Atmel Studio 6.0. Чтобы пересобрать проект надо поставить Студию и все необходимое для ее работы. Благо Студия бесплатна. Ее можно скачать с сайта Atmel или найти в Сети на торрентах. В качестве компилятора Студия использует бесплатный WinAvr:AVR-GCC for Windows, его надо тоже поставить и в настройках Студии указать, что это предпочитаемый компилятор для платформы AVR8.

Плату я разводил стараясь придерживаться рекомендаций Microchip AN688. Эти рекомендации видимо помогли, дрожание аналоговых осей в готовом контроллере я пока не заметил. Размер платы 84х39 мм. Плата не содержит в себе матрицу кнопок, только разъемы подключения к ней. Матрица кнопок моего контроллера аналогична той, что используется в MJoy. Схема матрицы кнопок тривиальна и ее можно выполнить на простой макетнице.

Архив с разводкой платы в формате sPrintLayout 5 и PDF-файл с фотовыводом и монтажной схемой.
https://dl.dropbox.com/u/23496322/PCB.rar

В игре (ИЛ-2) разница заметна, особенно после MJoy. Частота опроса и разрядность осей увеличилась и это сказалось на управлении. Непривычно быстрая реакция крафта на движения ручки.

159242

159243

urich
21.09.2012, 22:18
Весьма интересно! А MCP3208 можно использовать?

Перевод на Российские цены:
в chipnn.ru:

AT90USB162 - 152р.,
MCP3208 - 85р .,
МС33064 - 14р.,
TL431 - 7р.,
LP2950ACZ-5.0 - 17р.

servio
21.09.2012, 22:18
А можно использовать MCP3208? (4 канала).

MCP3208 использовать можно. И уж если использовать, то зачем только 4 канала? Использовать все 8. В симах всегда найдется что на оси повесить. Правда для MCP3208 придется изменить прошивку контроллера и разводку платы (распиновка MCP3208 отличается от MCP3204).

urich
21.09.2012, 22:24
Я и имел в виду - не меняя прошивки.
А разводку поправить не проблема.

servio
21.09.2012, 23:49
Я и имел в виду - не меняя прошивки.
А разводку поправить не проблема.

Можно не меняя прошивки. Надо только неиспользуемые входы MCP3208 обязательно на землю повесить, иначе из-за них могут быть помехи на используемых каналах.

urich
22.09.2012, 09:56
Вопрос по LP2950. Насколько я понял, на входе напряжение должно быть минимум на 0,35в больше чем на выходе, а USB бывает выдает меньше 5в. Будет ли стабилизация? Может здесь лучше использовать какой-нибудь step-up преобразователь, например NCP1450? Правда он сложнее.

servio
22.09.2012, 14:01
Вопрос по LP2950. Насколько я понял, на входе напряжение должно быть минимум на 0,35в больше чем на выходе, а USB бывает выдает меньше 5в. Будет ли стабилизация? Может здесь лучше использовать какой-нибудь step-up преобразователь, например NCP1450? Правда он сложнее.

LP2950 - это Low Drop Out стабилизатор, падение на нем действительно всего 0.3 вольта. Для правильной стабилизации ему входного напряжения не хватает, но стабилизатор имеет собственный гистерезис, который успокаивает помехи залетающие с шины USB. И именно с этой целью я его туда поставил. Можно найти другой LDO на 4.7 вольта, тогда заработает стабилизация и картина будет еще лучше.

Alex Oz
22.09.2012, 14:38
LP2950 - это Low Drop Out стабилизатор, падение на нем действительно всего 0.3 вольта. Для правильной стабилизации ему входного напряжения не хватает, но стабилизатор имеет собственный гистерезис, который успокаивает помехи залетающие с шины USB. И именно с этой целью я его туда поставил. Можно найти другой LDO на 4.7 вольта, тогда заработает стабилизация и картина будет еще лучше.

Не совсем понятно насчет собственного гистерезиса - по обыкновению любой стабилизатор, если он не выдаёт положенного напряжения, открывает регулирующий элемент на максимум - в данном случае он просто понизит напряжение. Это падение ко всему прочему будет зависеть от тока через стабилизатор.
Если я не прав - хотелось бы увидеть осциллограммы процесса "успокоения помех" на входе и выходе стабилизатора.

Кроме того, напряжение 5 В на шине USB - cкорее редкость, чем правило - статистически более вероятно 4,7-4,9 вольт - причем в разных портах одного материнской платы оно может быть разным, и кроме того в некоторых случаях зависеть от нагрузки процессора и видяхи - т.е нагрузки подсистемы питания.
То есть для более-менее гарантированной стабилизации напряжение на выходе должно быть не более 4.2-4.3 вольт - ну тут уже понятное дело начнуться проблемы с подключением датчиков Холла.

Соотвественно 12 бит разрешения и стабильность калибровки - весьма условны - шум и плавающий уровень напряжения на резисторах либо ДХ сведут всю затею с внешним АЦП почти до бесполезности. В данном случае повышающий стабилизатор был бы очень и очень кстати - если необходимо иметь именно 5 В.

servio
22.09.2012, 16:14
Ваши аргументы в пользу Step-Up меня убедили. Я поэкспериментирую с дешевым МС33063. Если результат будет лучше, то заменю стабилизатор платкой Step-Up.

По поводу гистерезиса. Я видел где-то в Сети осциллограммы реакции LP2950 на одиночные импульсы и не стал их перепроверять. Каюсь, не прав. Это уверенность в эффективности стабилизатора у меня сложилась после того, как я пытался уменьшить шумы АЦП в моем MJoy. Я насмотревшись этих осциллограмм добавил LP2950 и дрожь креста в аналайзере уменьшилась. Мне наверно стоило разобраться с этим, но хотелось в этом увязнуть, снижение шумов АЦП это что-то вроде магии даже для профессионалов. А я далеко не профи.

urich
22.09.2012, 21:37
Абсолютно согласен с Alex Oz. Если заморачиваться с высокой стабильностью АЦП, то простыми стабилизаторами здесь не обойтись.
Меня больше в этом проекте привлекает аппаратный USB, высокая частота опроса и дешевизна.
По опыту Mjoy16 - скорости не хватает (для РУДа отличный вариант, очень функциональный(слава MeanDog’у)).
Mjoy8 с частотой 120 не пробовал. А разрядности, на мой взгляд и 10 бит достаточно. (12 хуже не будет)
MC33063 в инете нашел за 27 руб. NCP1450 (Uвых=5в 1А, Uвх=0,6-6в) - 18 руб., обвязка 3-4 детали.