Известно, что для использования совместно с симулятором, передатчик может подключаться к РС через различные интерфейсы: COM, LPT и т.д. Применение современного интерфейса USB имеет такие преимущества, как удобство и простота подключения, надежность передачи данных с гарантированной скоростью, возможность питания устройства от шины и т.д. Кроме того, многие современные РС (особенно переносные) вообще не имеют разъемов COM и LPT. В связи с этим представляется актуальным создание простого и недорогого устройства, позволяющего использовать USB как интерфейс для подключения аппаратуры радиоуправления.
В настоящей статье не рассматриваются архитектура и принципы построения шины USB. Желающих узнать об этом больше отсылаем к отличной статье "USB in a Nutshell. Making Sense of the USB Standard" и, конечно, к стандарту. Заметим лишь, что сложность организации шины и жесткие требования к скорости и точности обмена данными существенно затрудняют построение USB-совместимого устройства на элементной базе без специальной аппаратной поддержки. Несмотря на появление микроконтроллеров со встроенной USB-периферией, они не так дешевы и доступны, как микроконтроллеры общего применения, например, серий MicroChip PIC или Atmel AVR.
Тем не менее, как показывает практика, возможно создание USB-устройства на основе контроллера Atmel AVR и с программной обработкой протокола шины USB. Так, Igor Cesko на своем сайте представил описание конвертора USB/RS232, отвечающего минимальным требованиям USB-стандарта: имеется две управляющие конечных точки (control endpoints) и реализована обработка стандартных запросов от хоста. Несмотря на ряд упрощений (например, не проверяется CRC управляющих пакетов), устройство вполне работоспособно.
На страничке Mindaugas Milasauskas описано устройство, созданное на основе вышеприведенной работы и успешно выполняющее функции игрового устройства (джойстика). Большое достоинство этого проекта в том, что его реализация отвечает требованиям стандартного класса HID. Для этого в программное обеспечение были добавлены дополнительная конечная точка (endpoint), работающая в режиме "по прерыванию" (interrupt transfer), а также набор необходимых дескрипторов и обработчик USB запросов, специфичных для класса HID. В результате устройство при подключении к РС опознается как джойстик. Этот проект был взят за основу при создании нашего интерфейсного кабеля.
Описание схемы
Основу устройства составляет микроконтроллер Atmel ATmega8-16PI.
Рабочая частота контроллера задается керамическим резонатором Z1 и составляет 12 МГц. Схема питается от шины USB, причем напряжение +5 вольт с разъема понижается до 3.3-3.6 с помощью линейного регулятора DA1. При таком напряжении питания сигналы данных USB могут подаваться на выводы микроконтроллера без дополнительного согласования. Резистор R1 необходим, чтобы при подключении к шине устройство было опознано как low-speed. Сигнал РРМ от передатчика подается на вход ICP (input capture pin) микроконтроллера через согласующий каскад на транзисторе VT1. В случае, если амплитуда сигнала РРМ с передатчика превышает 1.5В, можно не устанавливать элементы VT1 и R3, а подавать сигнал непосредственно на вход ICP микроконтроллера DD1 через резистор R2.
Как альтернативный вариант, можно отказаться от установки DA1 и подать питание на микроконтроллер непосредственно от шины USB (+5В), но в этом случае необходимо ограничить напряжение на сигнальных линиях шины, например, так,как показано на Рис.2.
В этом варианте схемы стабилитроны VS1 и VS2, вместе с резисторами R7 и R8 ограничивают верхний уровень сигналов с DD1 до 3.3 вольт. Резисторы R5 и R6 эквивалентны сопротивлению 1.5 кОм, подключенному к потенциалу 3.3 В. Практика показывает, что устройство способно работать и без стабилитронов, но такое упрощение противоречит требованиям стандарта и формально не может быть рекомендовано к использованию.
Программное обеспечение
Программное обеспечение способно работать с любым количеством канальных импульсов и не зависит от их полярности.Существует возможность назначить любой номер канала любой оси в ответе HID. Для этого необходимо с помощью программатора записать в EEPROM микроконтроллера (адреса 000..008) таблицу из 9 байт с номерами каналов. Удобно при этом использовать программатор, имеющий встроенный редактор буфера, например, PonyProg. Желаемые значения каналов следует занести в редакторе буфера в ячейки EEPROM (синие ячейки в окне данных) и выполнить команду записи данных в EEPROM. Если не записывать в EEPROM никакие данные, то будут использоваться значения по умолчанию, как показано в таблице ниже. Адрес EEPROM Название оси Канал по умолчанию
000 Ось X 2
001 Ось Y 1
002 Руль (Rudder) 3
003 Газ (Throttle) 0
004 Вращение X 4
005 Вращение Y 5
006 Вращение Z 6
007 Движок (Slider) 7
008 Диск (Dial) 8
Важно не забыть запрограммировать конфигурационные биты контроллера (fuses). Для данного устройства все биты должны быть установлены в "1" (не запрограммированы). Для этого в PonyProg необходимо снять все флажки в диалоговом окне "Configuration and Security bits".
Детали и конструкция
DA1 можно заменить на любой линейный регулятор с выходным напряжением 3.3-3.6В, например, КР1170ЕН3.3.
В качестве VS1, VS2 могут использоваться стабилитроны с напряжением стабилизации 3.3-3.6 В, например, 1N5226, 1N5527, КС133.VT1 – КТ315, КТ3102 и др.
X1 – Вилка USB тип "А".
X2 – Разъем программирования (ISP). Если планируется использовать внешний программатор, в разъеме X2 нет необходимости, а DD1 имеет смысл установить в панельку.
Z1 – любой керамический резонатор с частотой 12.0 МГц +/-1% и встроенными конденсаторами емкостью 12-30 пФ. Вместо керамического резонатора можно установить кварцевый на ту же частоту и пару внешних конденсаторов.
Здесь показан один из возможных вариантов конструкции:
Компоненты установлены на небольшом куске макетной платы. С одной стороны припаян кабель с вилкой USB, с другой – кабель с разъемом передатчика. После проверки устройство можно защитить с помощью термоусадочной трубки.