Добавление дискретных каналов в шестиканальную аппаратуру
Все, наверное, слышали про эту аппаратуру, продается под разными названиями, насколько я знаю, отличия лишь в наклеечках. Был про нее обзор на сайте, там же есть ссылка, где купить. Мне досталась под именем FlySky CT6B, в комплекте с 6-канальным приемником:
Идея доработки аппаратуры вот в чем:
Для полноценного управления среднестатистическим самолетом нужно 4 канала. На всякие штуки типа закрылков/парашютов/шасси/бортовых огней и т.д. остается 2 канала. Все-таки отдавать пропорциональные каналы под такие функции - расточительство. Поэтому появилась идея сделать схему, которая бы заменяла один из пропорциональных каналов в передатчике на 6 дискретных.
Что для этого потребуется:
1) Естественно, в пульт нужно установить дополнительные тумблеры. Я поставил 4 тумблера и 2 кнопки - в зависимости от назначения канала, может оказаться удобнее использовать тумблеры (шасси, фары, закрылки...) или кнопки (выброс парашютов, затвор фотоаппарата...). Чтобы освободить место в верхней части пульта, пришлось "крутелки" от 5-го и 6-го каналов перенести в нижнюю часть пульта (заодно заменив на линейные потенциометры). 2) Нужна схема в пульте, которая будет кодировать состояние 6 тумблеров в один пропорциональный канал. 3) Нужна схема "на другом конце провода", которая будет втыкаться в один из каналов приемника и выдавать 6 каналов на выход.
По части механической переделки пульта ничего особо сложного нет, вот что в итоге получилось после установки всех тумблеров и кнопок:
Самое интересное начинается со схемы, которая должна кодировать сигнал. Известно, что каждый пропорциональный канал представляет собой импульс на выходе приемника, длиной от 1 до 2 мс. Принцип кодирования дискретных каналов в данной схеме состоит в том, что при всех выключенных тумблерах длительность должна составлять 1 мс, а далее, первый тумблер при включении добавляет 500 мкс, второй - 250, третий - 125 и т.д. Т.е. каждый тумблер добавляет в 2 раза меньшую длину импульса, чем предыдущий. Получается как бы число в двоичной форме, которое показывает состояние тумблеров. Таким образом, по длительности импульса на выходе всегда можно будет определить состояние всех 6 каналов.
Было 2 варианта, как это сделать. Первый, который сразу пришел в голову - генерировать аналоговый сигнал и подавать в электронику пульта вместо сигнала с одной из "крутилок". Из-за ненадежности пришлось отказаться от него в пользу второго - перехватывать уже готовый PPM сигнал на пути к радиопередатчику. Этот вариант лучше еще тем, что не зависит от всяких микшеров и настроек в пульте.
PPM сигнал представляет собой последовательность из 6 импульсов, соответствующих каждому каналу, идущих один за другим с интервалом около 350 мкс. Вся последовательность повторяется с периодом около 20 мс.
(картинка из гугла, поэтому там 8 каналов, а не 6, но суть та же)
Соответственно, задача кодера - получить на вход сигнал, а на выходе повторить первые 5 импульсов из каждой пачки, а 6-й подменить на собственный, сгенерированный (и кстати, схема будет работать только на 6-канальной аппаратуре, для другого числа каналов нужно поменять пару дефайнов в прошивке). Схема собрана на МК ATtiny2313 (он же используется и в приемной части):
Есть одна загвоздка с питанием - радиомодуль работает с сигналом амплитудой 3.3 В, поэтому надо либо применить преобразователь уровней, либо (как я и сделал) запитать сам МК от 3.3 В. По-хорошему, надо бы поставить преобразователь напряжения на питание, но я ограничился стабилитроном и резистором на 220 Ом, прекрасно работает и так :)
Схема подключения всего этого в пульт представлена ниже:
К радиомодулю от цифровой части идет 4 провода: красный и черный - питание, желтый - PPM сигнал и еще один (не помню цвет) - точно не знаю для чего нужен, предположительно для настройки канала в передатчике. Плата подключается в разрыв желтого провода через переключатель, таким образом, получается возможность выбрать: либо все 6 пропорциональных каналов, либо 5 пропорциональных + 6 дискретных.
С передатчиком вроде все, теперь о приемнике:
Тут задача проще - нужно получить на вход импульс, измерить его длину, и на основании этого включить нужные выходы. Я решил добавить на плату еще 6 перемычек - для настройки выходов, т.к. для разных целей может оказаться удобнее получить на выход сигнал под серву (импульс длиной 1 или 2 мс) или просто логический уровень (1/0). Например, для закрылков или шасси нужен сигнал под серву, а для включения огней или DC мотора (через транзистор, естественно) достаточно просто логического уровня. При снятой перемычке на соответствующем выходе будет логический уровень, при одетой - сигнал для сервы.
Вот схема приемной части на все том же МК ATtiny2313:
А вот плата в сборе:
Плата подключается в шестой канал приемника, на ней выставляются нужные перемычки и подключаются выходы куда надо. Можно облегчить плату приемника, если это критично, убрав перемычки и запаяв ножки МК на землю, тогда на всех выходах получим сигнал для сервы.
Калибровка декодера:
При изготовлении данного устройства я заметил такую особенность, что приемник выдает импульс на несколько микросекунд длинее, чем то, что поступает на вход передатчика. Для исправления данной ситуации в декодере программно добавлен сдвиг длины сигнала на это значение (около 55 мкс). Однако, как оказалось, эта величина может варьироваться на разных передатчиках и при повторении устройства это вызывает проблемы, т.к. для работы декодера нужна точность порядка 6 мкс. При работе с неправильным значением смещения некоторые переключатели начинают влиять сразу на несколько каналов, некоторые не работают, а некоторые каналы могут дергаться сами по себе. Если у вас при повторении устройства наблюдаются похожие эффекты - калибровка специально для вас :) Принцип в следующем: при замыкании вывода PD6 на землю декодер записывает текущее значение входного сигнала в EEPROM и далее использует его в качесстве эталонного. Порядок калибровки следующий:
1) прошиться прошивкой decoder_calibrated.hex (лежит в архиве)
2) подключить декодер к приемнику, включить передатчик и приемник
3) (ВАЖНО!) на пульте перевести все (имеется в виду все, которые подключены к кодеру) тумблеры и кнопки в положение ВЫКЛ (разомкнутое)
4) взять кусочек провода и на плате декодера коснуться одновременно GND и ножки PD6 контроллера (она в противоположном углу от точки на микросхеме)
После этого устройство должно заработать как положено.
Ниже видео работы:
В архиве прошивки для МК с исходниками, схемы .gif и печатные платы .lay и .png
Естественно, у обоих МК фьюзы надо настроить на работу от кварца.
Если кто надумает повторить устройство и будут вопросы - обращайтесь :)