Некоторое время назад я имел неосторожность сделать достаточно простой декодер для шины s.Bus. Достаточно неожиданно для меня, этот декодер вызвал интерес тут и на rcdesign.

После создания первой версии 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

 

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