Пульт Радиоуправления
Раз уж на улице летать холодно, то будем тренировать навыки пилотирования на симуляторах. Для этого нужно подключить свою радиоаппаратуру к компьютеру через специальный адаптер, который преобразует PPM сигнал с пульта в сигналы USB-джойстика, понятные компу. Такие адаптеры, конечно не редкость и стоят копейки в китайских магазинах. Однако доставки заказа ждать долго, да и будет ли он работать так как мы ожидали? Например у меня есть вот такой:
Он по каким-то, еще не постигнутым мною причинам, наотрез отказывается адекватно калиброваться в симуляторе FPV Freerider, хотя прекрасно работает в Phoenix RC и Aerofly RC 7. А FPV Freerider вполне неплохо передает физику акро-полета на гоночном коптере, да к тому же имеет бесплатный демо-режим.
Решено — делаем адаптер сами!
Немного матчасти:
Большинство мало-мальски серьезных RC-аппаратур имеют разъем, куда выводят управляющие сигналы в PPM (Pulse Position Modulation) формате. PPM-cигнал представляет собой последовательность коротких импульсов, промежуток между которыми определяет управляющее значение каждого из каналов радиоаппаратуры.Суть PPM отлично передает картинка:
Чтобы декодировать PPM нужно точно замерять интервалы времени между последовательными импульсами (при этом не имеет значения между какими фронтами: передними или задними, ведь длительность самих импульсов всегда одинакова).
Реализация:
Почерпнув вдохновения из статьи AlexeyStn о создании PPM-to-USB адаптера на базе STM32F3Discovery, но имея в распоряжении только Arduino Pro Micro (Leonardo) с аппаратной поддержкой USB, начнем несложный путь к своему адаптеру.На гитхабе можно найти несколько похожих проектов, и некоторые даже не требуют аппаратного USB в контроллере. Однако большинство из них нужно серьезно допиливать напильником, чтобы получить нечто рабочее. Годным проектом оказался rc-leonardo-joy, который начал работать почти сразу после заливки скетча, но в нем тут же обнаружились некоторые недостатки: все показания джойстика были не очень стабильными — маркер курсора в панели управления все время плясал вокруг установленной точки. Не могу сказать, что это существенно влияло на управляемость в симуляторе, но мы ведь хотим тренироваться на хорошей аппаратуре!
Что ж, лезем в код и видим: вычисление ширины импульса PPM сделано через обработку внешнего прерывания и замер интервалов между вызовами функции micros:
Похожие страницы: