Для начала расскажу о том, что получилось. Новые возможности простой хобикинговской шестиканальной аппаратуры:
- добавлен простой светодиодный (семисегментный) дисплей, на который выводится телеметрия FrSky.
- добавлен блок речевого информатора – для озвучивания некоторых событий и некоторых данных телеметрии
- добавлена возможность подключать MultiWii 328 к системе телеметрии FrSky (используется для передачи на землю – текущей высоты самолета).
- добавлена система "тренер-ученик" и еще пара приятных мелочей
"А ведь есть же замечательная аппаратура FrSky Taranis?! – там все это есть, и даже больше и на более качественном уровне!"
Вот-вот. Моя модернизация, мягко говоря, очень похожа на изобретение своего велосипеда. Но, попытаюсь все же оправдать свои действия. Но это уже после кнопки "Далее..."
- Цена. К сожалению, сейчас тратить много денег на авиамоделизм – я не могу. Трое детей уже почти школьного возраста – это, наверное, все же, более важный пункт семейного бюджета, чем авиамоделизм. И хотя 170 доларов за Таранис – это, считаю, копейки – но даже этого мне пока не видать. С другой стороны: моя аппаратура куплена давно, FrSky радиомодули и Multiwii 328 – тоже. Даже микроконтроллеры с деталями у меня уже были. Мне оставалось только потратить время на изготовление и написание прошивки.
- Я электронщик, помимо авиамоделизма. Кто-то покупает готовые модели самолетов, а кому-то нравится их строить самому. Так же и из электроникой. Мне вот как электронщику – нравилось возиться с расшифровкой протокола телеметрии FrSky, проектированием схемы и написанием прошивки (с последним, все же – не так сильно нравилось :) ). Кроме того, если все будут покупать готовое... то кто будет разрабатывать новое? (хотя в моем случае – вряд ли я разработал что-то новое). Если честно – то если бы я знал про FrSky TARANIS до того, как сделал то, что у меня сейчас уже работает – наверное я бы не смог бы этого сделать. Просто руки опустились бы.
- У меня нет авиамоделей, для которых нужно покупать хорошую професиональную аппаратуру. Покупать Таранис для моего 1.5 самолета из потолочки (ну или потолочкового Миг-31) - это как устанавливать водяное охлаждение на Pentium I. Я это к тому – что возможностей той аппаратуры, которая у меня получилась – мне хватает для моих самолетов. Почти хватает, хотелось бы, конечно иметь в пульте несколько моделей. (Данный пункт весьма смахивает на байку о лисице и винограде :) :) ).
Для чего вообще я все это затеял. Забавно, но мне просто захотелось полетать на большой высоте без FPV. Слетав два раза (так, что уже практически не различал самолета) – понял, что мне мало просто полетать на высоте. Я хотел еще знать НА КАКОЙ именно высоте я летал. В первом полете как-то вычислил по кадрам из бортовой видеозаписи, но мне этого мало, хотелось знать высоту в реальном времени! В наличии был Multiwii 328, купленный когда-то для экспериментов. И раз уж там есть барометрический датчик – то почему бы его и не использовать. Тем более, что прошивка в свободном доступе...
Итак, по порядку.
Описание комплекта FrSky и подготовительные операции
В наличии был приемник FrSky D8RSP 2.4ГГц с телеметрией и FrSky DHT DIY передатчик с возможностью приема телеметрии. Куплены уже были давно, на замену умершему "родному" радиомодулю FlySky. Возможности телеметрии использовались штатным образом: настраивались звуковые предупреждения о разряженном аккумуляторе (если кому интересно или еще не знает - http://luckytech.ru/frsky2.html ). Теперь же, пришло время использовать еще одну возможность этого радиокомплекта – UART канал передачи данных с приемника на землю. И хоть это не очень удобный канал (на земле его нужно декодировать) – но все же это лучше, чем ничего. Особенностью системы FrSky есть то, что она использует инвертированный сигнал UART. Т.е. для того, чтобы передать или принять данные привычными методами (на микроконтроллер, например) – нужны инверторы. В документации даже рекомендуют схему
Таких инверторов нужно три: один на приемника (связь с MultiWii 328), два на передатчик, чтобы иметь возможность настраивать FrSky при помощи ПК и шнура, который используется для настройки самого передатчика через t6config. Можно, конечно, купить готовый шнур, специально предназначенный для FrSky, но инвертор все равно нужен – ведь я собираюсь данные с ВЧ модуля передатчика передавать на микроконтроллер, а ему нужен нормальный, неинвертированный UART сигнал. На передатчике эти инверторы аккуратно распаяны на микроплатку, а для приемника – объемным монтажом прямо на кабеле (см. ниже)
Слева направо: шнур делителя для измерения напряжения на трехбаночном аккумуляторе, кабель питания MultiWii 328 (+5В берутся с приемника) и кабель передачи данных с MultiWii 328 на приемник FrSky (с инвертором).
Теперь о протоколе передачи данных телеметрии (и команд настройки) FrSky. Нас интересуют только две таблички
Пакет данных 3.1.3. содержит в себе стандартные данные о двух напряжениях и качестве сигнала. Напомню, приемник FrSky, который у меня, имеет возможность контролировать напряжения по двум каналам. Один канал (AV1) сразу же используется для измерения бортового напряжения, ко второму (AV2) – подключается шнур с делителем для измерения напряжения силового аккумулятора.
Этот пакет данных передается постоянно, когда передатчик и приемник включены. Т.е. имеем вот такую структуру:
0x7E 0xFE AV1 AV2 RSSI 0x00 0x00 0x00 0x00 0x00 0x7E
При появлении на пине RX приемника какой-то информации (хотя бы одного байта, а мы как раз один байт посылать туда и будем) - приемник вместе с пакетом 3.1.3 передаст и пакет данных 3.1.4.
0x7E 0xFD Len NC byte1 byte2 byte3 byte4 byte5 byte6 0x7E
Len - количество байт, в правильности передачи которых "уверена" система FrSky. NC - этот байт не используется. На самом деле - там считаются переданные на землю пакеты. Т.е. идет постоянный счет от 0 до 31 (потом опять с нуля). А дальше идут пользовательских шесть байт.
Простой дисплей телеметрии FRSky. Схема и печатная плата
Для приема и декодирования данных будем использовать ATMega48PA (весьма дешевый, а возможностей хватит за глаза).
На схеме не показаны ограничительные резисторы 220 Ом. В схеме присутствует пищалка с ключевым транзистором: ведь я не собирался делать речевой блок, думал обойтись только звуковыми сигналами (хоть и более продвинутыми, по сравнению со штатными FrSky).
Но когда я пошел испытывать систему в поле, то понял, что времени смотреть на дисплей у меня попросту нет. Когда самолет на большой высоте – глаза должны быть неотрывно направлены на него, иначе попросту можно "потерять" ощущение ориентации самолета. Поэтому, чтобы знать на какой высоте сейчас находится самолет, возле себя поставил жену, которая и озвучивала мне текущую высоту :). Этакой речевой информатор "Галя" (так ее зовут :) ). После полета понял – нужно сделать речевой информатор, встроенный в пульт. Потому что жена рядом – это очень даже хорошо, но пусть все же будет как резервный вариант.
Так что – теперь ни транзистор, ни пищалка больше не нужны. О блоке речевого информатора – чуточку ниже.
Печатная плата делалась по принципу: чем меньше - тем лучше. Ведь в пульте места не слишком много. Плата не без недостатков, да оно и понятно – с разрабатываемым устройством – всегда так. Невозможно предвидеть все нюансы, возникающие при эксплуатации.
Если вдруг у кого появится желание повторять это – печатную плату я переделаю :)
Фотографии готового дисплея
Функционал дисплея:
- Принимать и расшифровывать данные телеметрии с ВЧ передатчика FrSky.
- Измерять напряжение на аккумуляторе передатчика.
- Выводить (в зависимости от включенного режима отображения) одно из этих значений на дисплей.
- Передавать команды на блок речевого информатора.
Три светодиода, расположенные рядом с дисплеем показывают какое значение сейчас выводится.
- Верхний – бортовое напряжение
- Средний – аккумулятор
- Нижний – напряжение на батарее передатчика
- Все три – текущая высота самолета
Кроме того – речевой информатор озвучивает какой именно режим включен.
Блок речевого информатора
Для экономии времени использовал готовую разработку http://www.getchip.net/posts/087-attiny2313-sd-card-talking-device/
Весьма простая, но эффективная. Позволяет проигрывать WAV файлы с SD карточки по команде с UART канала. Теперь UART канал у меня использовался в обе стороны: прием данных FrSky и передача команд на речевой информатор.
Вот плата готового устройства. Тоже не свободна от недостатков, самый главный из которых – чтобы поменять данные на SD карточке – нужно разбирать пульт. Вот это очень неудобно, ведь можно было сделать как у Тараниса – вставлять карточку из батарейного отсека. Но, как-то не подумалось тогда об этом.
Не буду рассказывать много об этом блоке, ведь все очень доступно описано по ссылке. Могу только сказать, что нужен обязательно усилитель, иначе ничего не слышно :). Усилитель использовал из своих запасов, спаянный когда-то на микросхеме УНЧ из плеера.
Что именно озвучивается:
- Высота от 0 до 990 метров с кратностью 10 метров.
- Напряжение на аккумуляторе в процентах (кратность – 10%). Кривую разряда взял на форуме http://www.helifreak.com/showthread.php?t=333661 .
- Предупреждение о разряженной батарее передатчика
- Какой режим сейчас на дисплее (Бортовое напряжение, аккумулятор, батарея передатчика, высота)
В принципе, когда пройдет шок, в который меня ввело прочтение о возможностях Тараниса, - наверное все же таки доделаю еще для себя парочку "штучек". Я об угле атаки, перегрузке и температуре в приборном отсеке). Это если не вздумаю таки купить готовое решение от FrSky.
Прошивка
Прошивка дисплея телеметрии с исходником – вот здесь. С Multiwii – там все печально. Если тут есть специалисты по прошивке Multiwii (по ее модификации) – то был бы очень благодарен за помощь в этом деле. Я это к чему... все, что я смог сделать – это вставить в главный цикл программы кусок кода, который постоянно шлет байт высоты при нужном битрейте UART канала (9600 bod). Это делается постоянно, каждые 0.5с и наверное, даже во время соединения с ПК. Я проверял – Multiwii нормально соединяется с компьютером, настраивается, т.е. все работает. Но то, что я сделал с прошивкой Multiwii – называется очень емким словом "костыль".
В файле Multiwii.cpp нужно добавить два фрагмента кода:
1. В главный цикл программы (Main loop) Я специально дал по три строчки до и перед вставки из основной прошивки, чтобы было понятно куда вставлять.
static uint32_t timestamp_fixated = 0;
int16_t rc;
int32_t prop = 0;
//***********************************************************
//***блок передачи ОДНОГО байта высоты по FrSky Uart каналу**
//***********************************************************
currentTime = micros();
if ((currentTime-time_frsky) > 500000)
{
SerialOpen(0,9600);
alt_frsky=BaroAlt*0.0025; //высота с точностью 4 метра. Один отсчет - 4 метра.
SerialWrite(0,alt_frsky);
time_frsky=currentTime;
}
else SerialOpen(0,SERIAL0_COM_SPEED);
//***********************************************************
#if defined(SPEKTRUM)
if (spekFrameFlags == 0x01) readSpektrum();
#endif
2. в блок объявления переменных
//***********************************************************
//добавлено для телеметрии FrSky
uint8_t alt_frsky = 0; // точность на порядки ниже! но зато надежность выше.
uint32_t time_frsky = 0; // Счетчик времени между передачами высоты
//***********************************************************
например перед функцией void annexCode().
Подключение к MultiWii. Сигнал UART нужно снимать с пина АUX3 и через инвертор подавать на пин RX приемника FrSky.
Фотографии того, что получилось

Другие маленькие мелочи по модернизации
- Перевод пульта на питание от литий-полимерной батареи. Достаточно распространенная доработка, посему не буду о ней.
- Замена стандартного разъема подключения к ПК. На этот шаг меня подтолкнули постоянные глюки, связанные со стандартным разъемом. В конце концов они меня совершенно достали, и поэтому я его заменил на связку двух двух разъемов. На один выводится сигнал РРМ для симулятора, на второй выведен UART канал (для связи с t6config). В качестве разъема использован стандартный для UART в моих конструкциях. Кабель связи с ПК переделан под соответствующий штекер и очень часто используется для соединения моих микроконтроллерных разработок с компьютером.
- Система "Тренер-Ученик". Для подключения пульта ученика поставил отдельный разъем. Для чего отдельный, а не тот же самый, что и для подключения пульта к симулятору? А вот как раз для того, чтобы связку "Тренер-Ученик" к симулятору и подключать. Ведь нужно где-то отрабатывать эту технологию. Да и тренеру тоже ведь нужно отработать навыки перехвата управления. Система весьма примитивная: при нажатой кнопке сигнал РРМ на радиомодуль идет не с платы управления пульта, а с внешнего разъема, на который подключается пульт ученика. Параллельно кнопке стоит тумблер (сзади), принудительно подающий сигнал РРМ на радиомодуль (на всякий случай). В качестве второго пульта, пока не закажу нормальную аппаратуру – использую самодельную (игрался когда-то http://luckytech.ru/pult3.html ).
- Установка дополнительного тумблера. Трехпозиционный тумблер установлен параллельно контактам одной из крутилок. Использовал тот, что был в комплекте с радиомодулем FrSky (для FrSky он не нужен. Во всяком случае МНЕ не нужен). Зачем тумблер? Для быстрого и удобного переключения режимов MultiWii (об этом потом). В среднем положении тумблер никак не влияет на крутилку, в крайних – принудительно устанавливает ее в одно из крайних положений. Т.е. имеем два крайних положения и одно среднее (настраиваемое крутилкой). Для безопасности – средний вывод тумблера соединен с средним выводом крутилки через резистор 100 Ом.
- Для быстрой перепрошивки своей же системы телеметрии – в батарейном отсеке вывел разъем для ISP программатора. (Еще бы по хорошему и SD карточку туда же вывести).
- Совсем уж мелочь, но... наклейки возле разъемов с распиновкой – уже не один раз мне упрощали подключение отладочных приборов (в том числе и логического анализатора).
Полевые испытания
Самый первый полет, как я уже говорил, был без речевого информатора. Есть бортовое видео, и видео со стороны, на котором большую часть времени виден пульт с цифрами и слышен голос моей жены Гали :). Кстати, в этом полете набрал 620 метров. Хвастаюсь, да. И хоть на этой высоте - я "потерял ощущение ориентации самолета" - но все же полет в целом завершился успешно.
Вчера вышел на поле уже с блоком речевого информатора. Чтобы проверить – хватит ли громкости и вообще – удобно ли это.
В результате было выявлено несколько маленьких косяков в прошивке. (Самая злобная, о которой я должен был догадаться сразу – это "100" озвучивалось как "сто ноль"). Слово "метров" нужно таки убрать, либо сделать так, как предлагал мне Термит (товарищ по авиамоделизму) – говорить это слово один раз из пяти.
Громкости хватает (если конечно не летать возле себя, тогда возможно и не хватит), слышно очень отчетливо. Насчет удобства - мне очень понравилось. Надо бы побольше всяких сообщений наделать полезных :).
Вот еще видео, где данные высоты шлются искусственно из терминала непосредственно на приемник. Шлются так, как это делает Multiwii. Т.е. раз на полсекунды.
Итак, заключение:
- Прошивка – весьма сырая еще. К сожалению, я не являюсь очень хорошим программистом (учусь, ага) - это будет ясно из исходника. Ошибки, выявленные на поле, я исправил. По хорошему - нужно объединять обе схемы в одну - тогда 99% всех глюков пропадут (и появятся новые :) :) ).
- Получилась система отображения телеметрии и речевой информатор по технологии "дешево и сердито". Нужна ли кому-то еще эта система - этого я незнаю. Если кого-то заинтересует - помогу сделать (советом, или даже делом).
Спасибо за внимание и терпение (статья длинновата получилась)
Уже немного завидую вашим знаниям, хочется тоже в этом понимать (я имею ввиду програмную часть).
Великолепная статья. Спасибо.
Если я правильно понял, модернизирован простейший пульт, у которого даже триммеры механические. Думаю, это не очень хорошо. Возможности такого пульта сильно (и это еще мягко сказано) ограничены. Если уж модернизировать, то что-нибудь поинтереснее. А так - один пульт-одна модель. И куча головной боли с настройками/перенастройками. Аппаратура должна быть хорошей! Это, в первую очередь, безопасность людей, мат. ценностей, самой модели. Можно, конечно, говорить о том, что "не все пока ходят в трусах от Версачи". Да, это так. Сам когда-то был в такой ситуации. Но при первой же возможности купил нормальную аппаратуру. Чего и всем коллегам желаю.