11 марта 2017

HUBOSD8-SE - новая PDB от Matek с поддержкой 6S

Вот уже недели две лежит у меня новая PDB Matek HUBOSD8-SE с поддержкой аккумуляторов на 6S, все руки не доходили ей заняться. Плата пойдет на новый мощный современный квадрик.


Заявленные характеристики платы Matek HUBOSD8-SE:
  • Входное напряжение 9-27 вольт (3-6S)
  • Максимальный ток 4x30А (в пике 4x46А)
  • BEC 5В мощностью 1.5А (максимум 2А)
  • BEC 10В мощностью 1.5А (максимум 2А)
  • Датчик тока до 184А
  • Встроенное OSD
  • Вход RSSI
  • Выход датчика тока
Упаковка была как и у всех PDB от Matek - обычный пакетик на защелке с фирменной наклейкой.


Комплект с одной стороны порадовал, а с другой - расстроил. Порадовал тем, что наконец-то догадались комплектовать длинными пластиковыми винтами. А расстроил отсутствием XT60-разъема. Придется отдельно докупать.


В комплекте теперь есть вполне пригодный конденсатор на 470мкФ/35В. Впаивать его надо плюсом в Vcc, а минусом в Gnd, если планируется располагать силовой разъем сбоку. Иначе - просто параллельно силовому разъему соблюдая полярность.


С обратной стороны платы нет никаких элементов, только краткие характеристики написаны. А лицевую сторону разберу подробнее.


С левой стороны расположен выход Curr - датчик тока, Rssi - вход RSSI с приемника. Выводы TX-RX - для обновления прошивки. Снизу все доступно без перевода: Cam - вход от видеокамеры, VTX - выход на видео-передатчик, 5V - выход с BEC 5В, 10V - выход с BEC 10В. Справа, кроме уже перечисленных, есть вывод Vcc - это выход напряжения с силового разъема.

Силовой разъем предполагается ставить только горизонтально. Причем так, что разъем и плата оказываются в одной плоскости. То есть, платой прямо на карбоновую раму:)


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


Попробовал прикинуть как оно будет стоять. Видно, что между разъемом и рамой есть зазор. То есть, надо либо PDB ставить ниже, но тогда есть шанс, что ремешок для крепления аккумулятора не пролезет между рамой и PDB, либо подпиливать контакты XT60-разъема, чтобы он лег на раму. Потому что кабинка должна прижимать силовой разъем к раме.


А кабинка даже не до конца прилегает к раме как раз из-за перекошенного силового разъема. В общем, буду пробовать различные варианты.

Немного расскажу об особенностях схемы платы Matek HUBOSD8-SE. Почему стоит импульсный BEC на 10В, а не как раньше  - линейный на 12В? Линейный BEC лучше, от него нет помех на видео. В данном случае установка линейного BEC здесь невозможна. Не выдержит он входное напряжение от шести-баночного аккумулятора. От четырех-баночного и так сильно греется, а тут совсем сгорит. Поэтому не было других вариантов, кроме как установить импульсный BEC. А раз уж так получилось, то имеет смысл снизить его выходное напряжение до 10В, чтобы он мог работать от трех-баночного аккумулятора. Производитель уверяет, что выходное напряжение хорошо фильтруется и прилагает даже снимки с экрана осциллографа. Что-то я ему не верю:) На выходе BEC 10В висит обычный небольшой конденсатор.


Напряжение не линейное, но поступает с очень высокой частотой. Если будут какие-либо помехи на видео, то придется вешать на выход BEC 10В дополнительный конденсатор для фильтрации напряжения.


Стабилизаторы напряжения на 5 и 10 вольт практически идентичны, отличаются только парой резисторов. Блоки построены на микросхеме MP2315. Производитель скромно занизил данные по току для стабилизаторов. На самом деле, они могу выдерживать ток до 3A.

Расскажу о "проблеме века" - будет пропадать видео на этой плате или нет? Чтобы понять корень проблемы, сначала нужно посмотреть, как оно решилось на предыдущей плате HUBOSD. В этот раз производитель серьезно подошел к вопросу. Микросхема MAX7456 была заменена на AT7456E. По спецификации, микросхема может работать в диапазоне напряжений 3.15-5.25В. Схема питания микросхемы сделана через отдельный линейный стабилизатор XC6206P332MR на 3.3В. Мощности стабилизатора в 200мА вполне хватит для питания "прожорливой" микросхемы AT7456E, которая в пике потребляет 60мА. На стабилизатор XC6206P332MR напряжение поступает с BEC 5В. В общем, какие бы нагрузки не были по питанию, как бы не проседало напряжение на BEC 5В, стабилизатор XC6206P332MR будет всегда стабильно выдавать 3.3В и микросхема AT7456E не будет перезагружаться. То есть, видео не должно пропадать. Испытания покажут, но и так понятно, что проблема решена.

Я не зря отметил вывод SPI-шины. По идее, через эту шину можно подключить Matek HUBOSD8-SE к любому полетному контроллеру и использовать не встроенное STOSD, а Betaflight OSD.


Для этого достаточно всего лишь подключиться к SPI-шине полетного контроллера, один провод бросить к свободному выводу процессора, немного изменить конфигурационные файлы прошивки BetaFlight и скомпилировать ее. Займусь этим позже. Интересно, что получится:)

Прошивки для Matek HUBOSD8-SE и плат предыдущих серий разные. Свежую прошивку версии 1.4 брал здесь. В плате была прошивка версии 1.3. Прошивал с помощью FTDI-адаптера по инструкции с сайта stosd.com.


Как обычно, удалось прошить только после перезагрузки Windows в режим без проверки подписей драйверов. После прошивки откалибровал показания напряжения. Когда соберу квадрик, то сделаю возможность прошивки через свободный UART-порт, как сделал это же на предыдущем квадрике.

Плата Matek HUBOSD8-SE сама определяет формат входного видеосигнала. Но при отсутствии такового отдает видео в NTSC-формате. На этапе загрузки видно модель платы и версию прошивки.


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


Подведу итог. Плата Matek HUBOSD8-SE вполне пригодна для использования. Явных минусов пока не вижу. Плата пойдет на довольно мощный квадрик, рассчитанный под аккумуляторы на 5S или даже 6S - время покажет.

07 марта 2017

iSDT Q6 Plus - универсальное зарядное устройство

Полеты по FPV на гоночном квадрике заставили пересмотреть политику в отношении силовых аккумуляторов. Получается так, что силовые аккумуляторы долго не живут:) Мало кто из них доживает до естественной смерти от износа. Гораздо чаще аккумуляторы умирают во время аварий. Вроде как получается, что надо держать большой запас силовых аккумуляторов. Но с другой стороны, чуть ли не каждый день появляются новые модели аккумуляторов, емкость растет, токи растут. Да и гоночные квадрики требуют все больше и больше энергии. Получается, что большой запас силовых аккумуляторов может просто морально устареть за несколько месяцев. А с другой стороны, в поле же не пойдешь с парочкой аккумуляторов:) Прямо замкнутый круг какой-то.

Для себя решил, что достаточно иметь 3-4 силовых аккумулятора и докупать их по мере выхода из строя. А в поле пользоваться отдельным аккумулятором большой емкости и быстро заряжать от него силовые аккумуляторы. Для этих целей начал собирать шести-баночный аккумулятор из 12 элементов 26560 на 5200мА/ч. Их емкости должно хватить для зарядки 8-10 силовых четырех-баночных аккумуляторов на 1300мА/ч. И хранить такой аккумулятор можно в заряженном состоянии в промежутке между полетами. То есть, вырваться на полеты можно в любой момент, а не сидеть и ждать, пока все аккумуляторы зарядятся. Можно и на месте по быстрому все зарядить. Хорошо, допустим, что вопрос с энергией решен. Необходимо компактное зарядное устройство. Сначала хотел взять iSDT SC-608, так как оно уже побывало у меня в руках и очень понравилось. Но хотелось немного мощнее, поэтому выбор пал на iSDT Q6 Plus.


Характеристики зарядного устройства iSDT Q6 Plus:
  • Входное напряжение: 7-32В
  • Выходное напряжение: 0-30В
  • Ток зарядки: 0.1-14.0А
  • Ток разрядки: 0.1-3.0А
  • Максимальная мощность при зарядке: 300Вт
  • Максимальная мощность при разрядке: 8Вт
  • Ток балансировки: 1А
  • Балансировка: 2-6S
  • Поддерживаемые аккумуляторы: LiFe, LiIon, LiPo, LiHV, NiMH, Cd, Pb
  • Экран: IPS 2.4 дюйма 320x240 точек
  • Рабочая температура: 0...+40 градусов
  • Температура хранения: -20...+60 градусов
  • Размеры: 80x80x33мм
  • Вес: 119 грамм
Полную документацию можно скачать на официальном сайте. Характеристики чуть лучше, чем у предыдущей модели, а вес практически такой же. Зарядное устройство приехало в уже привычной белой коробочке, как от телефона.


Комплект чуть более "богат", в сравнении прошлым устройством. В коробке проводов по прежнему не было, зато были два разъема XT-60. Нужны провода - паяй сам:)


На лицевой стороне расположен экран с разрешением 320x240 точек. Экран очень яркий, матрица сделана по IPS-технологии. Колесико управления сделано по принципу, как у компьютерной мышки. Слева видно отверстие датчика освещенности.


Лицевая сторона прикрыта прозрачным пластиком, который очень не стойкий к царапинам. Защитная пленка просто необходима!


Слева стоит разъем для подключения внешнего питания и разъем, как для наушников - для обновления прошивки.


Справа все просто. Разъем для подключения заряжаемого аккумулятора и балансировочный разъем.


Сзади стоит вентилятор. Очень шумный вентилятор, когда включается!


Несмотря на миниатюрный размер, iSDT Q6 Plus может отдавать довольно большой ток. Так что блок iSDT PC-4860 будет очень кстати. Если иметь мощный блок питания и подать на выход ток 12А, то для четырех аккумуляторов 1300/4S будет в самый раз.

Как только первый раз включил зарядное устройство iSDT Q6 Plus, то первым же делом посмотрел версию прошивки.


На официальном сайте обнаружилась прошивка поновее, версии 2.1.0.13. Надо бы обновить, но для этого нужен отдельный программатор iSDT SCLinker. На самом деле, это обычный FTDI-адаптер, а значит можно попробовать сделать программатор самому. Для этого, кроме FTDI-адаптера, который наверняка есть у каждого FPV-шника, потребуется обычный мини-джек на 3.5мм от старых наушников на 4 контакта.


Схема соединения предельно проста. Пять минут пайки, немного термоклея и программатор готов!


Распаковал файл прошивки и запустил SCU.exe. Затем открыл диспетчер устройств, чтобы проверить наличие виртуального COM-порта, который должен создаваться при подключении FTDI-адаптера. Порта не было.


В программе нажал кнопку "Install Driver" и выполнил установку драйвера для FTDI-адаптера. После этого, чтобы FTDI-адаптер нормально заработал, пришлось перезагрузить систему в режим без проверки подписей драйверов. Только тогда в диспетчере устройств появился и нормально заработал виртуальный COM-порт.

Дальше важно соблюдать порядок включения. Сначала подключается FTDI-адаптер к компьютеру, втыкается миниджек в гнездо для программатора, потом подается питание на зарядное устройство. Я просто подключил трех-баночный аккумулятор.


Чтобы проверить, работает ли программатор, можно переименовать зарядное устройство кнопкой "Rename". У меня получилось, вверху экрана изменилась надпись!

Теперь можно смело нажимать кнопку "Update Now", чтобы начать процесс прошивки. При этом окно программы будет выглядеть так:


А экран зарядного устройства iSDT Q6 Plus будет таким:


Через несколько минут, когда прошивка зальется, зарядное устройство перезапустится, а экран программы на некоторое время станет таким:


Внизу экрана будет надпись "Update success". После прошивки версия в зарядном устройстве изменилась:


Все, теперь буду смотреть что с функционалом. В системные настройки можно попасть, если нажать и подержать колесико.


Первый параметр - максимальная входная мощность. Имеет диапазон 50-330Вт. Следующий - минимальное входное напряжение от 7В до 24В. Мега-полезная опция, если заряжать силовые аккумуляторы от внешнего аккумулятора. Backlight - уровень подсветки: автоматический, низкий, средний, высокий. Зарядное устройство имеет датчик освещенности и может самостоятельно регулировать яркость экрана. Volume - громкость звуковых сигналов: отключено, низкий, средний, высокий. Completion Tone - тип сигнала: одиночный или непрерывный. Language - выбор языка, русского нет.


Firmware sharing - непонятный пункт. Если судить по названию, то это возможность обновлять прошивку между двумя однотипными устройствами без компьютера. System information - данные о системе: ревизия сборки, версия прошивки и идентификатор устройства. System self-checking - самопроверка всех компонентов зарядного устройства.

При подключении аккумулятора сразу же выводится информация по напряжению на банках и общее напряжение.



Если нажать на колесико, то появится меню действий.


В первом пункте идет выбор действия: зарядка, разрядка и хранение. Во втором пункте - выбор типа аккумулятора: LiHV, LiPo, LiIon, LiFe, Pb, NiMH/Cd. Затем - выбор максимального напряжения, до какого заряжать аккумулятор. Для каждого типа аккумулятора есть свой диапазон. Следующий пункт - количество банок аккумулятора. Затем идет выбор тока зарядки. Диапазон очень большой: 0.1-14А.

Процесс зарядки идет довольно быстро. Наверное, это самое быстрое зарядное устройство из всех, что я видел. На первом экране отображается текущее напряжение по банкам.


На втором экране видно сопротивление каждой банки. Заметно, что аккумулятор уже не новый:)


На третьем экране отображается подаваемое напряжение, общее напряжение аккумулятора, мощность и температура компонентов зарядного устройства.


Что самое интересное, за время зарядки вентилятор ни разу не включился, не было необходимости. Значит вентилятор включается только во время разрядки или подготовки аккумулятора к хранению.

Зарядное устройство iSDT Q6 Plus коротко пикнет один раз, когда зарядка почти закончена.


И пикнет два раза, когда зарядка полностью завершена.


На удивление, зарядное устройство iSDT Q6 Plus очень быстро балансирует банки и довольно точно. Проверил после этого тестером, который показывает напряжение до третьего знака. Разброс по банкам был минимален, а напряжение было в диапазоне 4.197-4.202.

Процесс разрядки довольно шумный и ток разрядки не поднимается выше 0.4А. Да и не надо этим зарядным устройством аккумуляторы разряжать, есть и другие способы:)


Процесс перевода в режим хранения не отличается от зарядки или разрядки. Если необходима зарядка - заряжает молча, если разрядка - шумит вентилятором.


В целом, зарядным устройством iSDT Q6 Plus я очень доволен. По настоящему революционный продукт! Из минусов могу отметить только не стойкую к царапинам лицевую панель, но производитель в течении месяца обещал выпустить защитную пленку.

Кстати, у меня была возможность разобрать iSDT SC-608, который пострадал от переполюсовки входного напряжения. Коллега "удачно" подключился к автомобильному аккумулятору:) На плате, рядом с разъемом питания, стоял SMD-предохранитель, который просто расплавился. Позеленевшая такая деталь, ее сразу видно. Когда я поставил вместо него перемычку, то зарядное устройство ожило, как ни в чем не бывало. Думаю, что в iSDT Q6 Plus реализована такая же схема защиты.

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

02 марта 2017

Новинки FPV

Появились в  продаже "знаменитые" мягкие прокладки под моторы. Говорят, что с ними гораздо меньше вибраций и тряски на гоночном квадрике.


А я делаю проще. Взял старую шапочку для плавания, которая стала маловата ребенку, сделал вырубку и нарубил отличных тонких силиконовых прокладок! Попробовал с ними летать. Да, реально помогают!

Появился передатчик, который устанавливается на стандартные крепления в одну стопку с полетным контроллером и PDB. Новый Rush VTX имеет переключаемую мощность 25/200/500мВт, низкий уровень помех по соседним каналам, встроенный микрофон и гнездо для подключения антенного кабеля.


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

Новые трехлопастные пропеллеры 5053 от T-Motor подойдут для мощных моторов. Как раз для T-Motor F-40 2305 или Emax RS2306.


Красивые пропеллеры! Будут мощные моторы - возьму на испытание.

01 марта 2017

BetaFlight 3.1.6

Обновилась прошивка BetaFlight 3.1.6. Изменений не очень много, в основном исправления.


Новое:
  • Динамический двунаправленный softserial. Доступно через команду resource.(Пользователям NAZE больше не нужно замыкать TX и RX, чтобы заработал Smartport)
  • Обновлен SDK до версии 6.2.1 2016q4
Список изменений:
  • Исправлено ограничение в шесть штук на количество AUX-каналов для F1 и F3
  • Добавлена поддержка шести моторов с DSHOT для XRACER
  • Добавлена поддержка цветных светодиодов для KISSFC
  • Добавлена поддержка датчика тока для KISSFC
  • Включен softserial для всех полетных контроллеров
  • Исправлена активация для HEADFREE режима
  • Исправлено направление индикации для цветных светодиодов для режима indicators
  • Исправлен искусственный горизонт для поворота в неправильную сторону
  • Исправлена поддержка DShot для 3D-режима в конфигураторе
  • Исправлена поддержка цветных светодиодов в KAKUTEF4
  • Исправления looptime для всех полетных контроллеров
  • Исправлена обратная полярность таймеров DShot для F4
  • Отключено DMA для SD-карт в SPRACINF3EVO
  • Более мягкие настройки dterm setpoint по умолчанию
  • Устранена ошибка фильтра при попытке фильтровать через частоту Найквиста (не работало в режиме 500Гц )
  • Меньше ограничений по частоте looptime для F1
  • Исправлена привязка сателлитов Spektrum для  OmnibusF4
Известные проблемы/ошибки:
  • Если к вашему полетному контроллеру подключен внешний BlackBox и имеется внутренний, и вам надо использовать  внутренний, то надо выключить опцию SDCARD, которая доступна в конфигураторе версии 1.9.3. Только для BluejayF4 доступны обе опции, насколько это известно. (Это было и в предыдущих версиях, до релиза 3.1.6)

26 февраля 2017

Самодельный беспроводной USB-адаптер для симулятора повышенной точности

Расскажу о том, как я сделал свой беспроводной USB-адаптер повышенной точности для симулятора. USB-адаптер был опробован в Heli-X, FPVFreeRider и LiftOff и показал прекрасный результат, оправдал все мои ожидания!


Перепробовав несколько вариантов USB-адаптеров для симулятора, стал искать возможность сделать такой самостоятельно. Ни один из продаваемых USB-адаптеров меня не устраивал по причине малой точности. То есть, на полный ход стика приходилось очень малое количество шагов. Например в последнем от OrangeRX было всего 168 шагов. Это самое большое, что я видел, и этого ужасно мало для нормального управления моделью в симуляторе.

Наткнулся в интернете на интересный проект самодельного USB-адаптера на базе маленькой платки Arduino Leonardo. Взял его за основу и немного переделал под себя. Во первых, отказался от прямой модификации файлов дистрибутива Arduino, использовав внешнюю библиотеку для работы с джойстиком. Во вторых, исключил деление исходных данных пополам. Это позволило более точно учитывать длину PPM-импульса. В третьих, сделал возможность задавать мертвую зону, чтобы исключить дребезг значений в около-нулевой зоне стика. Ну и конечно же, припаял к USB-адаптеру маленький приемник FrSky на 8 каналов с CPPM-выходом для беспроводного управления.


USB-адаптер может подключаться к тренерскому разъему вашего передатчика. Сигнальный провод надо подключить к четвертому выводу USB-адаптера.


Чтобы сделать USB-адаптер беспроводным, потребуется приемник с CPPM-выходом, подходящий для вашего передатчика. Вот небольшой список для примера: FrSky 8СH, DEVO 8CH, FlySky 8CH, RadioLink 10CH, DSMX 6CH, Futaba S-FHSS 7CH. Есть и другие варианты, можно выбрать любой с CPPM-выходом. Схема соединения предельно проста. На приемник нужно подать питание 5 вольт и подсоединить выход приемника к четвертому выводу USB-адаптера.


После монтажа можно подключить USB-адаптер к компьютеру и выполнить привязку приемника к передатчику. Не буду подробно останавливаться на этом моменте, у каждого данная процедура проходит по своему, в зависимости от модели передатчика и приемника. Я подключил USB-адаптер к передатчику DEVO10 с прошивкой Deviation и установленным модулем 4-в-1. Конфигурация модели очень простая.

Подключаем USB-адаптер к компьютеру и приступаем к программированию. Я подробно расскажу, как сделать USB-адаптер максимально настроенным для каждого индивидуального случая. Сложного тут ничего нет, разберется даже школьник:)

Перед началом работы нужно скачать и установить среду разработки Arduino IDE. Лучше скачать архив и распаковать его в отдельный каталог. Там есть выбор под все современные системы. Распаковать можно в любое удобное место. Затем запускаем исполняемый файл и попадаем в среду Arduino. Выбираем в меню "Инструменты" плату "Arduino Leonardo" и чуть ниже выбираем виртуальный COM-порт, к которому подключена плата.


Закрываем среду разработки. Надо установить дополнительную библиотеку для работы с джойстиком. Идем по ссылке, скачиваем, распаковываем и выполняем файл deploy.sh или deploy.bat в зависимости от операционной системы. По итогу, библиотека должна оказаться внутри каталога Arduino, который будет расположен в вашем домашнем каталоге, а не в том, куда распаковали среду разработки.


Если у вас Windows и самодельный USB-адаптер планируется использовать в симуляторе FPVFreeRider или любом другом, основанном на библиотеке Unity3D (а их большинство), то надо изменить одну строчку в файле установленной библиотеки для работы с джойстиком.


Открываем файл Joystick.cpp внутри каталога ...\Arduino\libraries\Joystick\src, находим строчку:

#define JOYSTICK_AXIS_MINIMUM -32767

и заменяем ее на:

#define JOYSTICK_AXIS_MINIMUM 0

Дело в том, что FPVFreeRider в Windows получает данные с джойстика в обход системы и никакая системная калибровка джойстика не нужна. Но тут есть маленький подвох. Симулятор FPVFreeRider понимает значения с осей джойстика в диапазоне от 0 до 32767, а системный джойстик может работать в диапазоне -32767 до 32767. Поэтому, если ваш джойстик может выдавать отрицательные значения, то у вас будут проблемы с его калибровкой в FPVFreeRider. Это касается только Windows, в других системах такой проблемы нет и ничего менять не надо.

Скачиваем код скетча, открываем его в среде Arduino и сразу же загружаем в USB-адаптер кнопкой "Загрузка". Все должно пройти без проблем и ошибок.


В общем, USB-адаптер уже может работать, но пока что не настроен. Надо определить максимальное, минимальное и центральное значения PPM-импульса, поступающего на вход адаптера с приемника или тренерского разъема. В передатчике все каналы должны быть выставлены +/-100% и убраны все триммеры в ноль. В Ubuntu значения можно получить, выполнив в консоли простую команду:

# cat /dev/ttyACM0

Для Windows придется установить бесплатную программу TeraTerm. Распаковываем и запускаем ttermpro.exe. Создаем новое соединение, выбираем виртуальный COM-порт, подтверждаем и видим на экране шесть колонок цифр. Это данные шести каналов, которые получает USB-адаптер со своего входа.


Шевелим стиками и смотрим на цифры. Надо определить и записать минимальное, максимальное и значение в центральном положении стика. Значения могут немного плыть на 1-4 единицы. Для минимального надо выбрать максимально минимальное. Для максимального минимально максимальное, для среднего - среднее. Например, у меня минимальное значение гуляет в диапазоне 2210-2214, значит беру 2214. Максимальное гуляет 3810-3812, беру 3810. Среднее гуляет 3011-3013, беру 3012.

Если все получилось, то в программе можно отключить вывод данных, поставив комментарий на следующую строку. Было:

#define SERIALOUT

Стало:

// #define SERIALOUT

Подставляем полученные значения в переменные ниже.

#define MIN_PULSE_WIDTH 2214 // Minimal pulse
#define CENTER_PULSE_WIDTH 3012 // Middle pulse
#define MAX_PULSE_WIDTH 3810 // Maximal pulse

Если у вас Windows, то меняем значение переменной USB_STICK_MIN на ноль. Для других операционных систем оставляем как есть.

#define USB_STICK_MIN 0

Заливаем скетч в USB-адаптер и проверяем его работу. В Ubuntu это можно сделать в программе jstest-gtk. Если она не установлена, то ставим:

# sudo apt-get install jstest-gtk

В самой программе заходим в калибровку и сбрасываем значения кнопкой Raw Events.


Значения должны изменяться от -32767 до 32765. В около-нулевой зоне стика будет небольшой дребезг. Надо добиться того, чтобы эти значения гуляли как в положительную зону, так и в отрицательную. Придется подкорректировать переменные MIN_PULSE_WIDTH, CENTER_PULSE_WIDTH и MAX_PULSE_WIDTH несколько раз, чтобы добиться нужного результата. При этом не должно быть холостого хода стика в крайних положениях. Калибровку выполнять не надо, а еще лучше сохранить обнуленные значения командой:

# sudo jscal-store /dev/input/js0

В Windows проверку диапазона работы USB-адаптера можно выполнить с помощью программы Joystick Tester. Значения по осям должны изменяться от 32767 до 65535, а центр должен быть на значении 49150. Как я уже говорил, это сделано для того, чтобы FPVFreeRider смог нормально работать с USB-адаптером.


На этом этапе уже можно считать настройку USB-адаптера завершенной и проверять его работу в различных симуляторах. Но можно пойти дальше, если есть желание:)

Переменная CENTER_PULSE_JITTER убирает дребезг в около-нулевой зоне стика. При нулевом значении фильтр не работает. Если не нравится наличие небольшого дребезга, то можно поставить значение от 5 до 10. Большие значения лучше не ставить, иначе потеряется чувствительность в около-нулевой зоне.

Переменная RC_CHANNELS_COUNT отвечает за количество входящих каналов. У меня с приемника идет восемь каналов, поэтому весь скетч сформирован именно под это число. Это можно изменить, но придется еще глубже залезать в дебри кода.

Следующая строка формирует собственно джойстик с заданными параметрами:

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_JOYSTICK, 2, 0, true, true, true, true, true, true, false, false, false, false, false);

Третий параметр, там где стоит цифра 2, задает количество кнопок джойстика. Начиная с пятого параметра идет определение наличия осей. Шесть раз подряд true - это шесть осей USB-адаптера. Потом идет false - запрет оси. Всего можно задать 11 осей. Например, для USB-адаптера без кнопок и с четырьмя осями будет вот такая строка:

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_JOYSTICK, 0, 0, true, true, true, true, false, false, false, false, false, false, false);

Переменная NEWFRAME_PULSE_WIDTH отвечает за определение паузы в микросекундах между PPM-пакетами. Лучше ее не изменять.

Следующий блок задает пороговые значения по осям:

Joystick.setXAxisRange(USB_STICK_MIN, USB_STICK_MAX);
Joystick.setYAxisRange(USB_STICK_MIN, USB_STICK_MAX);
Joystick.setZAxisRange(USB_STICK_MIN, USB_STICK_MAX);
Joystick.setRxAxisRange(USB_STICK_MIN, USB_STICK_MAX);
Joystick.setRyAxisRange(USB_STICK_MIN, USB_STICK_MAX);
Joystick.setRzAxisRange(USB_STICK_MIN, USB_STICK_MAX);

Если осей меньше шести, то количество строк можно сократить. Для четырех осей будет так:

Joystick.setXAxisRange(USB_STICK_MIN, USB_STICK_MAX);
Joystick.setYAxisRange(USB_STICK_MIN, USB_STICK_MAX);
Joystick.setZAxisRange(USB_STICK_MIN, USB_STICK_MAX);
Joystick.setRxAxisRange(USB_STICK_MIN, USB_STICK_MAX);

В следующем блоке происходит преобразование полученных на входе значений в данные джойстика:

Joystick.setXAxis(stickValue(rcValue[ROLL]));
Joystick.setYAxis(stickValue(rcValue[PITCH]));
Joystick.setZAxis(stickValue(rcValue[THROTTLE]));
Joystick.setRxAxis(stickValue(rcValue[YAW]));
Joystick.setRyAxis(stickValue(rcValue[AUX1]));
Joystick.setRzAxis(stickValue(rcValue[AUX2]));
Joystick.setButton(0, rcValue[AUX3] > CENTER_PULSE_WIDTH);
Joystick.setButton(1, rcValue[AUX4] > CENTER_PULSE_WIDTH);

Последние две строки формируют значения кнопок. Первый параметр в этой строке - это номер кнопки. Нумерация идет с нуля. Если оставить четыре оси и убрать кнопки, то блок будет выглядеть так:

Joystick.setXAxis(stickValue(rcValue[ROLL]));
Joystick.setYAxis(stickValue(rcValue[PITCH]));
Joystick.setZAxis(stickValue(rcValue[THROTTLE]));
Joystick.setRxAxis(stickValue(rcValue[YAW]));

Можно еще немного подчистить код, убирая лишние данные, но пусть это будет "домашним заданием" для желающих копнуть еще глубже:)

Самый лучший способ сравнить работу обычного USB-адаптера и самодельного - это тест на точность полета. Как нельзя лучше для этого подходит трасса на детской площадке в симуляторе FPVFreeRider. Смотрите сами. С адаптером от OrangeRX я раза с десятого смог записать весь полет. Очень сложно было удержаться на трассе.


Признаюсь честно, я был в шоке от того, как работает самодельный USB-адаптер! С удивлением обнаружил, что в FPVFreeRider я могу пролетать сложную трассу на довольно большой скорости, легко и непринужденно проходить все ворота. В Heli-X точность управления достигла небывалых высот. Наконец-то стало возможным отрабатывать элементы, требующие ювелирной работы шагом. С LiftOff не очень заладилось. USB-адаптер работал прекрасно, но сам симулятор какой-то не очень качественный. Может быть это от системы зависит и в Ubuntu он у всех работает с проблемами.

На следующем этапе попробую заставить работать USB-адаптер с приемником через шину S.BUS. Это должно еще больше поднять точность управления в симуляторе. Успешных тренировок!