Для начала расскажу о том, что получилось. Новые возможности простой хобикинговской шестиканальной аппаратуры:

  • добавлен простой светодиодный (семисегментный) дисплей, на который выводится телеметрия 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% всех глюков пропадут (и появятся новые :) :) ). 
  • Получилась система отображения телеметрии и речевой информатор по технологии "дешево и сердито". Нужна ли кому-то еще эта система - этого я незнаю. Если кого-то заинтересует - помогу сделать (советом, или даже делом).

Спасибо за внимание и терпение (статья длинновата получилась)

 

Архив с файлами проекта (звуки, прошивка, схема, плата)