Владельцы аппаратуры Turnigy 9X/9XR или FrSky Taranis так или иначе задавались вопросом получения более 8 каналов управления.
Сами эти пульты дают возможность транслировать на модель до 16 каналов. Но необходимо еще чтоб данную возможность поддерживали вч-модуль и приемник. На сегодняшний день есть как минимум 2 вч-модуля, которые дают такую возможность:
  • OrangeRx DSM2/DSMX - дает до 14 каналов. Правда стоит сказать, что на 14 каналов работает нестабильно. Приемлемый уровень стабильности обеспечивается при трансляции 12 каналов.
  • FrSky XJT - позволяет транслировать 16 каналов стабильно.

А вот с приемниками вышка проблемка. FrSky предлагает использовать 2 приемника - первый принимает первые 8 каналов, второй принимает вторые 8. OrangeRx вообще ничего не предлагает. Цена приемника FrSky 1200р, OrangeRx - 1100р за 8 каналов. Я хочу предложить бюджетное решение:

Надо сказать, выше упомянутые приемники предоставляют шину s.Bus с которой можно получить все 16 каналов при помощи специальных декодеров. Цена декодера 500р за 4 канала и 1000р в комплекте с картой программирования за те же 4 канала. Т.е. для решения задачи нам надо заплатить 1000р за декодеры и 500р за карту. Это вполне сопоставимо с ценой приемника и как-то слишком дорого.Но друзья-китайцы так же дают нам все необходимые возможности для того чтоб получить желаемое минимум в 2 раза дешевле. Я предлагаю сделать свой собственный декодер, который даст все 16 каналов с шины s.Bus без всяких карт программирования.

Тут я уже поднимал тему s.Bus. Правда тогда я особого понимания не нашел. Цель была предоставить информацию, а люди хотели готовое устройство. Но все это время такой декоде мне просто не был нужен, а s.Bus я использовал для подключения полетного контроллера к приемнику. И вот решил наверстать упущенное.

Нам понадобится:

  • микросхема 74HC14, которую можно за копейки купить в любом магазине радиодеталей.
  • Arduino Mini на atMega168 - 300р на Паркфлаере.
  • Планка контактов для подключения сервоприводов - 50р на Паркфлаере.
  • Маленькая макетная плата - 140р на Паркфлаере за 4 шт., но понадобится только одна

Итого: 400 - 450р

Так же понадобится паяльник и в меру прямые руки.

Схема будущего устройства предельно проста.

Микросхема 74HC14 представляет собой элемент булевой логики "НЕ" и содержит 6 таких элементов. Нам понадобится всего один.

Глядя на даташит подводим питание на выводы 7 и 14, 2 подключаем к выводу Rx Arduino, вывод 1 - к сигнальному контакту входной планки. Имеет смысл между выводом 1 микросхемы логики и Arduino впаять перемычку и вывести так же на контакт пин Tx. Это понадобится на случай, если Вы когда-нибудь захотите перепрошить контроллер.

Для начала собрал схему для отладки:

Вертикально стоящая плата справа - это USB-to-TTL преобразователь для подключения к ПК и заливки прошивки. На Паркфлаере есть достаточно много вариантов таких преобразователей - подойдет любой.

Далее пишем прошивку.
Для работы с s.Bus велосипед изобретать не будем - возьмем готовую библиотеку.

#include <FUTABA_SBUS.h>
FUTABA_SBUS sBus;

Для формирования выходного сигнала используем таймер 1 (длительность импульсов) и таймер 2 (контроль частоты импульсов). Импульсы на каналах будут сдвинуты относительно друг друга. Поэтому все 16 выходов разделим на два банка, чтобы за 20мкс успеть выдать сигнал на каждый канал. Для банка А будет использован первый компаратор, а для В - второй.
Настройка таймеров производится в функции Timer1_init().

Таймеру 1 выставляем делитель на 8 для получения отсчета 1/2мкс
TCCR1B = 0<<CS12 | 1<<CS11 | 0<<CS10;
и разрешаем прерывания обоих компараторов
TIMSK1 = (1<<OCIE1A) | (1<<OCIE1B);

Для таймера 2 устанавливаем делитель на 256
TCCR2B = 1<<CS22 | 1<<CS21 | 0<<CS20;
сброс по совпадению
TCCR2A = 1<<WGM21;
и разрешаем прерывание от первого компаратора
TIMSK2 = 1<<OCIE2A;
Прерывание таймер будет генерить каждый раз, как досчитает до 68(число подобрано эмпирически под выходной импульс приемника OrangeRx DSMX 8 каналов).
OCR2A = 68;

Не стоит забывать, что таймер 2 - восьмиразрядный. Именно из-за этого приходится выставлять ему такие настройки. Так же будем использовать только каждое 10-ое его прерывание.
if (cnt==10)

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

- выключим импульс на текущем канале
ServoOff(curr_chA);

- переход к следующему каналу
curr_chA++;

- установим следующее время срабатывания прерывания
OCR1A = TCNT1 + SET_TIME(curr_chA);

- включим импульс на новом канале
ServoOn(curr_chA);

Итого получим выходные импульсы для всех 16-ти каналов.

Собственно осталось спаять схему и все!

Таким образом мы получили простой декодер к приемнику с шиной s.Bus для подключения устройств на 16 независимых каналов. При этом экономия составила минимум 500р.

Я нарочно не стал травить плату, а использовал Arduino, чтоб показать доступность изготовления такого устройства. Гуру легко смогут это сделать и получат еще уменьшение веса, габаритов и стоимости. Так же есть широкое поле деятельности по оптимизации кода прошивки. Но и в таком варианте устройство работает стабильно и выполняет свои функции.

Скачать исходники прошивки (SBUS.rar) .

Постоянное размещение материала: http://rc-master.ucoz.ru/publ/19-1-0-87