Телеметрия (часть 1)

Vad64
smalltim:

Есть мысль в прерывании строки видеосигнала каждый раз опрашивать ту ногу Атмеги, к которой подключен канал с приемника. Ну и, соответственно, вести подсчет строк, в течение которых на ноге получилась единица. В кадре 625 строк, 50 кадров в секунду - разрешения по времени хватит.

Плохо. Длительность канального импульса от 1000 до 2000 мкс. Если опрашивать ногу во время гасящего строчного импульса, то максимальная ошибка измерения длительности будет около 100 мкс, а это 10% от (2000-1000). Полагаю, гораздо лучше использовать для измерения таймер в режиме Input Capture. Но не использовать его прерывание, а опрашивать ICF флаг во время гасяшего и, в случае наличия события, вычислять длительность РРМ как разность текущего и прошлого значения ICR.

Подавать канальный импульс на ногу ICP можно (лучше через резистор). Если его амплитуда будет больше питания Атмеги, защитные диоды ее ограничат.

ReGet

Подскажите кто собирал телеметрию по схеме smalltim’а, как она влияет на радиоуправление 35 мгц?
Уже второй месяц мучаюсь со своей, собраной по той же схеме, только на меге16 и со своей прошивкой. При включении телеметрии управление просто забивает помехами в 15 метрах от передатчика, все методы душения помех перепробовал, пересобирал 3 раза - бесполезно. Может это у меня из-за особого взаимного расположения камеры, антенны РУ и их проводов, не знаю уже что и думать.
Хочу попробовать собрать 1 в 1 телеметрию по инструкции smalltim’а

smalltim
ReGet:

Подскажите кто собирал телеметрию по схеме smalltim’а, как она влияет на радиоуправление 35 мгц?
Уже второй месяц мучаюсь со своей, собраной по той же схеме, только на меге16 и со своей прошивкой. При включении телеметрии управление просто забивает помехами в 15 метрах от передатчика, все методы душения помех перепробовал, пересобирал 3 раза - бесполезно. Может это у меня из-за особого взаимного расположения камеры, антенны РУ и их проводов, не знаю уже что и думать.
Хочу попробовать собрать 1 в 1 телеметрию по инструкции smalltim’а

Значит, всё-таки, всё плохо 😦
Я со своей телеметрией пока далеко не летал, метров, может быть, на 400-600, это максимум, и проблем не было. У меня Hitec Prism 7 на 35 МГц, в самиках стоят Hitec Electron 6.

ReGet

Странно, у меня тот же hitec electron 6 и передатчик hitec на 35 мегагерц.
Может быть мой метод вывода текста на экран создает такие помехи, хотя с чего бы вдруг… Вывожу все 8 бит в порт, потом сдвигаю 8 раз. При этом из 8ми выводов порта подключен только один крайний. Могут висящие в воздухе порты помехи наводить?

smalltim

>Могут висящие в воздухе порты помехи наводить?
По-моему, даже теоретически не могут.
Я теряюсь в догадках, что именно у Вас не так пошло. Схема давным давно проверена, у всех и на мегах8, и на мегах88, и на мегах16 работает…

ReGet
mask2002:

А что если к бортовой телеметрии прикрутить такой девайс? www.terraelectronica.ru/news_postup.php?ID=1318
К тому же он и под прямое подключение к контроллерам заточен.

Для чего? 😃

mask2002

Мне кажется по изображению с камеры не чуствуется в какую сторону ускорение, а тут ясно будет.

Brandvik

И в какую сторону вам ускорение надо чувствовать? И как вы его хотите чувствовать(в како форме выводить данные с аксеелрометра)?

ReGet
mask2002:

Мне кажется по изображению с камеры не чуствуется в какую сторону ускорение, а тут ясно будет.

Почему не чувствуется? Влево-вправо - отлично видно, куда нос задирается - тоже. На счет изменения высоты - сложнее, но тут не акселерометр нужен, нужно просто дописать индикатор изменения высоты к уже существующей телеметрии

РД00
Brandvik:

И в какую сторону вам ускорение надо чувствовать? И как вы его хотите чувствовать(в како форме выводить данные с аксеелрометра)?

На такой штуке можно соорудить отдаленное подобие авиагоризонта. Будет показывать направление местной силы тяжести. Естественно, на виражах и в петлях он будет врать, но в прямолинейном полете тангаж и крен будет виден. Можно будет летать сквозь облака.

Ролик с чем-то подобным лежал на Youtube, жаль, не найду. Там в центре экрана выводился качающийся-отклоняющийся крест наподобие ILS в авиасимуляторах-игрушках.

smalltim

Замечательная вещь, аж завидно. Такая, разве что, кофе сварить не сможет 😃

Мне на качающийся крест, на 99% уверен, ресурсов процессора не хватит. А вот вариометр, индикатор качества RC приема и управление платой телеметрии с передатчика (переключение на крупные шрифты, отключение отображения второстепенных данных по выбору и полное включение-выключение наложения на видео) - скоро будет. Спасибо Vad64 за идею с таймером.

Мануалов по Атмеге накурился до предела, теперь надо найти время и сесть за написание кода… 😃

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

Кстати, коллеги, где и в каком виде на экране вы бы посоветовали поместить новые строки с данными - вариометр и качество приема RC сигнала, плюс, если надо, положение ручки управляющего канала? Управление телеметрией можно подключить на отдельный канал, а можно хоть к газу, только придется прямо в полете ставить газ, скажем, в ноль, потом сразу в 100%, потом в ноль, и т.д. для управления телеметрией - сами понимаете.

В текущем варианте отображение см здесь: rcopen.com/files/000000000000000000000000

Brandvik

Уровень сигнала вверху слева, а вариометр справа посредине. А как будут выглядить эти данные? Желательно что бы вариометр выглядел в виде полоски которая увеличивается вверх или вниз.

ReGet
РД00:

На такой штуке можно соорудить отдаленное подобие авиагоризонта. Будет показывать направление местной силы тяжести. Естественно, на виражах и в петлях он будет врать, но в прямолинейном полете тангаж и крен будет виден. Можно будет летать сквозь облака.

Ролик с чем-то подобным лежал на Youtube, жаль, не найду. Там в центре экрана выводился качающийся-отклоняющийся крест наподобие ILS в авиасимуляторах-игрушках.

Если я правильно понимаю, то акселерометр не может использоваться для создания авиагоризонта, т.к. после того как он один раз соврет (например, как вы сказали, на вираже), далее он будет врать все остальное время. Поэтому телеметрии нужны датчики, которыми она будет видеть настоящий горизонт (пирометры)

Brandvik

Пирометры не работают в облаках, пирометры должны видеть горизонт, а если виден горизонт то и искуственный он совсем не нужен. По нормальному нужна связка гироскоп+акселерометр они будут дополнять и корректировать друг друга. По идее, для не долгого полета хватит и одного хорошего гироскопа, дрейф конечно будет но он не такой уж и большой в течении 10 мин скажем. а пробить не толстую низкую облачность этого времени вполне хватит.

РД00
ReGet:

Если я правильно понимаю, то акселерометр не может использоваться для создания авиагоризонта, т.к. после того как он один раз соврет (например, как вы сказали, на вираже), далее он будет врать все остальное время.

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

Brandvik:

По идее, для не долгого полета хватит и одного хорошего гироскопа, дрейф конечно будет но он не такой уж и большой в течении 10 мин скажем.

Очень сомневаюсь. В свое время имел дело с гироскопами в профессиональной деятельности, причем не с пьезоэлектрическими (как в моделизме), а с на порядки более точными волоконно-оптическими. Так вот для нас разумный сдвиг после интегрирования за десятки минут был недостижимой целью.

Думаю, что вертолетный гироскоп за 10 мин своей “горизонталью” навертит не один десяток оборотов.

smalltim

Vad64> Подавать канальный импульс на ногу ICP можно (лучше через резистор).

А какой именно резистор? 1 кОм пойдет?

smalltim

Ух, как пришлось поизвращаться… 😃

Добавил вывод строк текста вверху экрана. Теперь работа в кадре выглядит так:
ждем - рисуем верхние строки теста - опрашиваем АЦП - делаем математику - ждем - рисуем нижние строки текста

Сделал поддержку крупного и мелкого шрифта и переключения размера шрифта и отключения вывода на экран “на лету”.

Сделал программный вариометр. Не сделал красивое отображение, пока только циферки.

Сделал заглушку для индикации уровня сигнала RC (специальные символы и расположение на экране). Пока не сделал собственно анализ PPM.

Картинки:

Вопросы 😃 :

  1. Какое нужно разрешение вариометра в метрах и единицы измерения? “В лоб”, без включения мозга (как сделано сейчас) разрешение получается 0.75 метров в секунду и единицы измерения, соответственно, метры в секунду.

  2. Делать вариометр на основе показаний высоты, усредненных по 16 пачкам по 64 измерения (как сделано сейчас) некошерно, поскольку в усреднение попадают показания высоты на протяжении последних 1.92 секунд полета. И если, образно говоря, резко и коротко дунуть в датчик давления, то вариометр показывает короткий положительный скачок вертикальной скорости, а через 1.92 секунды - короткий отрицательный. На медленных самолетах 2 секунды не роляют, но всё равно некрасиво.
    По-хорошему, надо делать вариометр на основе неусредненных по 16 пачкам данных, но тогда его показания могут слегка “шуметь”.

Стоит ли овчинка выделки?
Впрочем, всё равно завтра поэкспериментирую, перепробовать надо все варианты.

РД00
smalltim:

Делать вариометр на основе показаний высоты, усредненных по 16 пачкам по 64 измерения (как сделано сейчас)… По-хорошему, надо делать вариометр на основе неусредненных по 16 пачкам данных…

Не думали вместо усреднения по отдельным пачкам применить непрерывную фильтрацию ? Это т.наз Infinite Impulse Responce Filter (IIR).

Напр., пусть у нас есть последовательность отсчетов X0, X1, … Xn, Xn+1 … Тогда результат выражения Yn = A * Yn-1 + (1-A) * Xn будет фильтром НЧ первого порядка для последовательности Xn. Усреднение идет не по конкретному размеру пачки отсчетсчетов, а по непрерывной последовательности предыдущих.

В переводе на псевдокод :

[codebox]# define A (…) // заранее посчитанный параметр А в диапазоне -1…+1

float LowPassFilter(int X) // усредняемый X в диапазоне -1…+1
{
static float Y0;
float Y;

Y = A*Y0 + (1-A)*X;
Y0 = Y;
return Y;
}

// естественно, в реальных вычислениях float’ы заменяются на знаковые int’ы соответствующей разрядности
[/codebox]

При этом коэффициент A вычисляется из требуемой частоты среза фильтра и частоты отсчетов. Грубо говоря, это программно реализованная усредняющая RC-цепочка.

То же самое можно получить для фильтра 2-го порядка, только там будет Yn = A0 * Yn-2 + A1 * Yn-1 + A0 * Xn. При этом, играя с коэффициентами, можно получить разные типы фильтров. Здесь будет полезен фильтр Баттерворта, у которого ступенька на входе не приводит к дребезгу на выходе. Комбинируя такие фильтры последовательно, можно получить фильтр любого порядка. Например, фильтр 4-го из двух таких - это подавление -24 дб/октаву, то есть напр. 2 гц по сравнению с 1 гц подавятся в 16 раз. Я упоминал здесь работу с гироскопами - там, например, удавалось вытащить из-под шума прибора скорость вращения Земли.

Самое веселое здесь - вычисление коэффициентов An. Я их выводил (страшно вспомнить) 13 лет назад для другой задачи и не помню уже решительно ни хера. Если интересно - постараюсь перетряхнуть бекапы и папки с бумажками. Но сейчас наверняка быстрее набить в Яндексе “+IIR +дискретный +фильтр +расчет” и получить чей-нибудь реферат на ту же тему.

smalltim
РД00:

Не думали вместо усреднения по отдельным пачкам применить непрерывную фильтрацию ? Это т.наз Infinite Impulse Responce Filter (IIR).

Понял. У меня сейчас что-то похожее на “непрерывную фильтрацию” с фильтром НЧ первого порядка, только в сумму входит не Хn и Хn-1, а Хn…Хn-16 и все An равны 1/16.
Почитаю, что умные люди в Сети понаписали 😃