После создания первой версии s.Bus декодера я получил ряд пожеланий на тему генерации PPM сигнала с этого декодера. Как я понял, нужно это для подключения различных автопилотов и полетных контроллеров. Собственно, эти пожелания и легли в основу создания второй версии прошивки.
Схема декодера осталась без изменений. Как говорилось в комментариях к предыдущей статье, инвертор сигнала sBus вместо микросхемы можно собрать на транзисторе.
Но я пользуюсь пока ранее собраной схемой.
Что изменилось
Во-первых, декодер стал программируемым. Теперь настройки декодера заливаются с компьютера при помощи специального приложения. Логика моих рассуждений была такова: если человек, собравший этот декодер, имеет техническую возможность подключить его к компьютеру через USB-to-TTL преобразователь для заливки прошивки из среды Arduino IDE, то эту же техническую возможность он сможет использовать и для его настройки.
В декодере сохранилось изначальное разделение каналов на два банка. В новой прошивке каждый банк независимо от другого может генерировать как сигнал на сервоприводы (до восьми штук в каждом банке), так и суммарный PPM сигнал.
Выходами теперь можно управлять – можно настроить вывод любого канала на любой выход декодера. Каналы при этом можно дублировать. При желании, например, можно вывести канал газа хоть на все 16 выходов декодера.
В различных полетных контроллерах я встречал функцию «возврат домой». Интересна она с точки зрения возврата модели в точку старта при пропадании сигнала с пульта управления. Для активации этого режима удобно использовать функцию failsafe приемника. В новой версии декодер позволяет выводить сигнал failsafe в виде обычного ШИМ-сигнала (как на серву) на любой вывод.
Как и прежде, прошивка микроконтроллера заливается при помощи Arduino IDE. Приложение для настройки декодера с компьютера написано на c# в Microsoft Visual Studio 2010 и для работы требует наличие на компьютере NET Framework 2.0. Все исходные коды прилагаются.
Теперь немного подробнее.
Допустим, схема собрана, прошивка залита. Подключаем декодер к компьютеру через USB-to-TTL преобразователь. После этого запускаем приложение SBUSDecoderCFG.exe для настройки декодера. Вы увидите на экране такое окно:
Первым делом в левом верхнем углу выбираем из выпадающего списка COM-порт, соответствующий подключенному декодеру, аналогично тому, как это делается в Arduino IDE. Кнопки «Read» и «Write» позволяют соответственно считать и записать конфигурацию из/в память декодера.
Далее, собственно, о настройках… Я опишу настройки на примере банка А, подразумевая, что для банка Б они производятся аналогично. Банки работают абсолютно независимо друг от друга и взаимного влияния каких либо настроек между ними нет.
Галка PPM. Если она не установлена, то банк генерирует управляющие сигналы для сервоприводов в количестве до восьми штук. Если галка стоит, то на втором выходе каждого банка (Ch1 для А и Ch9 для Б) будет генерироваться PPM-сигнал. Остальные выходы банка при этом никакого сигнала выводить не будут.
Выпадающий список «Frame». При помощи этого выпадающего списка задается длина фрейма для PPM или частота ШИМ для сервоприводов. Значение указывается в миллисекундах. Для сервоприводов рекомендую устанавливать значение 20мс, что соответствует частоте 50Гц.
Выпадающий список «Channels». При помощи этого выпадающего списка можно указать, сколько каналов будет выводиться в данном банке. Для режима вывода PPM максимальное число каналов рассчитывается из длины фрейма автоматически. Но при этом можно указать и меньшее число.
Выпадающие списки «Ch1» - «Ch16». Здесь номер Ch указывает на позицию сигнала в банке, а выпадающий список позволяет выбрать номер канала в шине s.Bus. Таким образом можно коммутировать любые каналы, передаваемые с пульта, на любые выводы декодера.
В выпадающем списке каждого выхода помимо номера канала можно выбрать значение «FS». Выбор этого значения говорит о том, что на этом выходе будет выводиться сигнал failsafe. Сигнал будет выводиться в виде ШИМ с длинной импульса 1000мкс или 2000мкс.
Внимание! Не все приемники выдают в шину s.Bus сигнал потери связи. Особенно грешат этим «китайские поделки». Проверяйте правильность выходных сигналов для Вашего приемника.
В итоге получился декодер, который на основании данных с шины s.Bus может управлять 16-ю сервами или управлять 8-ю сервами и генерировать PPM-сигнал до 16-ти каналов или параллельно генерировать 2 PPM-сигнала до 16 каналов в каждом. При этом допускается переназначение каналов.
Для теста я установил следующие настройки:
Результат для наглядности вывел на USB-осциллограф.
Синий - третий канал банка А, красный - PPM с банка B.
Все исходники можно скачать с моего сайта: http://rc-master.ucoz.ru/publ/19-1-0-105
Если у сообщества возникнет желание, расширю статью описанием кода прошивки - пишите в комментариях.
http://www.banggood.com/DIY-SBUS-To-PWMPPM-Decoder-16CH-For-Futaba-Orange-Frsky-p-987248.html
Если прут, значит достойная вещь получилась!
Творческих вам успехов!!! С глубочайшим уваженим, Артем.
Загружаю. Ардуино сообщает "загруска завершена", но внизу красными букавками
"avrdude:stk500_getsyns(): not in syns:resp=0x00"
Пробую программировать декодер.Пробую прочитать, не читает.
Подключаю s.BUS, на выходе декодера PPM нет.Что я делаю не так.
Спасибо!!
Получилось, декодер работает.
Выход "живет своей жизнью" на прерываниях таймеров, а вход крутится в основном цикле.
Если выход уже отработал первый(любой) канал, а сразу после этого на вход пришли новые данные, то они появятся на выходе на следующем такте.
А вот длину этого такта теперь можно настраивать... :) Максимум, что можно поставить - 40мс, минимум - 16.
P.S. Это не "балалайка", это "велосипед". Балалайка раз в несколько сложнее будет.
Еще бы код для невежд подробно описать......
А потом на I2C подвешу какой-нибудь 9DOF и получится аналог мультивия. :)))
Главное - остановиться вовремя.