Самодельная система телеметрии FrSky. Часть вторая — подключаем MultiWii 328

Подключение MultiWii 328P к FrSky приемникуДля того, чтобы добавить к телеметрии FrSky измерение текущей высоты самолета, я воспользовался тем, что у меня было под рукой — MultiWii 328P. Его штатное предназначение — служить контроллером стабилизации для мультироторных летательных аппаратов (из которых самый распространенный — квадрокоптер). Для стабилизации самолетов его также можно использовать, но пойдем еще дальше — модифицируем его прошивку так, чтобы каждые… скажем, полсекунды, этот контроллер стабилизации посылал по UART каналу значение текущей высоты. В результате получим к штатной телеметрии FrSky измерение высоты и дополнительный бонус — возможность стабилизации самолета.

Самодельная система телеметрии FrSky.
Подключаем MultiWii 328 к приемнику

Нужно соединить канал AUX3 Multiwii 328 с входом RX на приемнике FrSky. Схематично это выглядит так (вот люблю я рисовать подобные схемы :) ):Подключение MultiWii 328P к FrSky приемникуЕще нужно подать питание на MultiWii 328P. Его можно взять с приемника FrSky. Лучше изготовить кабель с тремя стандартными трехпиновыми штекерами. Главное, при подключении не перепутать полярность %). Эти три детальки (два резистора и транзистор) можно прямо навесным монтажом на кабеле расположить. И прикрыть сверху термоусадкой. Транзистор — практически любой структуры npn (я использовал BC33740)Кабель для соединения FrSky и MultiWii 328P

Самодельная система телеметрии FrSky.
Модификация прошивки MultiWii 328

Прошивку MultiWii 328P нужно модифицировать, добавив туда два фрагмента кода. Кстати, сразу говорю о том, что мой код очень далек от идеала программирования (хотя все работает вполне неплохо). Если кто-то сможет помочь, показав/написав другой, более правильный код — то буду очень благодарен.

Пока не буду описывать все нюансы программирования MultiWii 328P (отдельной статьей опишу), а сейчас кратко напишу что и куда нужно добавлять.

Итак, в файл Multiwii.cpp нужно добавить два фрагмента кода:

Первая вставка: В главный цикл (Main loop). Чтобы было ясно, куда вставлять оставил по три строчки до и после (серым выделены)

static uint32_t timestamp_fixated = 0;
int16_t rc;
int32_t prop = 0;
//***********************************************************
//***блок передачи байта высоты для телеметрии
//***********************************************************
currentTime = micros();
if ((currentTime-time_frsky) > 500000)
{
SerialOpen(0,9600);
alt_frsky=BaroAlt*0.0025; //высота дискретностью 4 метра.
SerialWrite(0,alt_frsky);
time_frsky=currentTime;
}
else SerialOpen(0,SERIAL0_COM_SPEED);
//***********************************************************
#if defined(SPEKTRUM)
if (spekFrameFlags == 0×01) readSpektrum();
#endif

 Вторая вставка. Объявление переменных. Вставлять сразу же после обьявления всех переменных, например перед функцией void annexCode().

//***********************************************************
//для FrSky телеметрии
uint8_t alt_frsky = 0;
uint32_t time_frsky = 0; // Задержка между пакетами с данными высоты
//***********************************************************

На всякий случай — прикладываю файл с этими правками. Но советую все же отредактировать тот, что есть у вас (версии прошивки могут не совпадать).

В результате — каждые 0.5 с MultiWii 328P будет посылать по FrSky каналу один байт, в котором будет зашифрована текущая высота самолета. Нулевая отметка высоты запоминается при включении MultiWii.

Пока что на этом все.


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>