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

Pavel_E

Добавлю:
Для приемников PPM детекция пропадания сигнала - хаос в каналах с длительностью импульсов заведомо вне рамок PPM стандарта.
Для приемников JR S-PCM детекция не нужна, т.к. можно сам приемник запрограммировать на выдачу сигнала нужной длительности по любому из каналов.
Для приемников PCM других марок, которые не умеют программироваться как JR, возможны варианты:

  • по наличию нуля в канале газа,
  • по выходу RSSI,
  • по лог “1” или “0” со светодиода.

И резюме:
Чтобы иметь возможность включать/выключать автопилот по желанию и автоматически по пропаданию сигнала нужно:

  1. Предусмотреть один канал сигнала PPM на вход. Настройки: пороговой длительности импульсов, режима включения (вкл по превышению длительности, вкл по пренижению длительности).
  2. Предусмотреть включение автопилота по наличию сигнала выше/ниже определенного уровня в канале АЦП. Настройки: уровень АЦП, режим включения (вкл по высокому, вкл по низкому, не включаться по данному входу), % потерь сигнала, начиная с которого надо включаться (с усреднением, скажем, за 1с - чтобы не дергать автопилот при кратковременной разовой помехе), % потерь сигнала, начиная с которого надо выключаться ( чтобы гистерезис был).

Вроде бы в этом случае все перечисленные варианты можно реализовать.

Dikoy
blade:

…Если знать, что “Пито” должна устанавливаться вне зоны перепадов давления (недаром на нормальных самолётах- вынесена вперёд)

Еси чесна, я даже не подумал о месте установки 😃 Меня привлекла форма. Я уже видел её в своей книжке, это один из вариантов “правильного” заборника.
Эх, в тяпницу попробую отсканить её на нашем ГДРовском сканере. Хоть он и сканирует одну страницу 5 минут 😃

smalltim:

А, вообще, как ведут себя не-фейлсейфовые каналы при потере связи с передатчиком? Пропадает PPM на выходе? Мониторя состояние сразу всех каналов, можно отловить момент, когда каналы перестали изменяться или появилось что-то необычное в любом канале.

Совершенно верно. Пропадает ППМ с редкими помехами. Я сейчас завёл восьмибитный таймер и по нему мерию период между фронтами двух канальных импульсов. Если больше 2*16 мС (16 мС это период переполнения восьмибитника на 16 МГц), и таких переполнений 5 подряд, включаю автопилот. Аналогично отключаю по условию 5 принятых нормальных периодов. Работает очень чётко, ещё 9 мая с этой системой летал.

Mironov
Pavel_E:

Добавлю:Для приемников PPM детекция пропадания сигнала - хаос в каналах с длительностью импульсов заведомо вне рамок PPM стандарта.

Это верно не для всех приёмников. Современные PPM приёмники легко фильтруют “неправильные” импульсы, оставляя на выходе последнее правильное значение импульса. А при пропадании сигнала - выставляют канальные импульсы в среднее положение, газ - в ноль.

Dikoy
Pavel_E:

Для приемников PPM детекция пропадания сигнала - хаос в каналах с длительностью импульсов заведомо вне рамок PPM стандарта.

Хаос в каналах своего китайского ефлая видел только при покладывании оного на системный блок компука. Но там и сигналы передатчика ловились не чётко. В соседней комнате на выходе чистый ноль с ОЧЕНЬ редкими помехами - раз в минуту на канал.

Pavel_E
Mironov:

Это верно не для всех приёмников. Современные PPM приёмники легко фильтруют “неправильные” импульсы, оставляя на выходе последнее правильное значение импульса. А при пропадании сигнала - выставляют канальные импульсы в среднее положение, газ - в ноль

Знаю, у самого JETI REX 7 MPD. Вот это MPD почти так и делает. Но для них будет работать вариант:

Pavel_E:

Для приемников PCM других марок, которые не умеют программироваться как JR, возможны варианты: - по наличию нуля в канале газа, - по выходу RSSI, - по лог “1” или “0” со светодиода.

Dikoy
Mironov:

Современные PPM приёмники легко фильтруют “неправильные” импульсы, оставляя на выходе последнее правильное значение импульса. А при пропадании сигнала - выставляют канальные импульсы в среднее положение, газ - в ноль.

Это дополнительный функционал, о чём будет сказано в документации. Классический приёмник ничего запомнить не может в принципе - некуда ему запоминать 😃

Pavel_E
Dikoy:

комнате на выходе чистый ноль с ОЧЕНЬ редкими помехами - раз в минуту на канал.

Ну это как раз случай “с длительностью импульсов заведомо вне рамок PPM стандарта”. Т.е. просто фильтруя все, что меньше 800мкс и больше 2200 мкс мы уже получим достоверную картину наличия фигни. Хотите с запасом? Можно фильтровать меньше 500мкс и больше 2500мкс. 100%-я фигня 😃

DIM81
Панкратов_Сергей:

Да и вообще, небюджетное это дело - fpv, да еще и с автопилотом, можно и купить определенный приемник (подходящий)

Поэтому, раз ФПВ предполагает максимальную дальность управления, а ее могут предоставить только современные приемники двойного преобразования с ПСМ (либо другой цифрой в зависимости от производителя), которые имеют ФС (нужно чтобы на любой канал) то на эти приемники и нужно ориентироватся.
Если что, то к автопилоту такой приемник можно будет и докупить, главное чтобы дальность не страдала.
А в атопилоте предусмотреть корректировку длительности цифроимпульсов PPM для настройки корректного вкл автопилота при ФС, в зависимости от производителя приемника. Может даже какието шаблоны предусмотреть для ламеров (для меня например) при программировании с компука - если футаба, то циферка 1, если ЖР, то циферка 2 и т.д.?

Офф топ, приемник футаба r149 dp файл сейфит на любой канал, или только на 4 основных?

Панкратов_Сергей

А зачем мне чужие фразы приписывать?
Я этого не писал, на что вы ссылаетесь.
Кроме того Вы ошибаетесь , утверждая что PCM даст большую дальность.
Управление пропадет на том же расстоянии, возможно даже ранее.
То что трясти не будет , а пропадет почти сразу - это да.

Но то что это плюс - для кого как.
Кому то лучше что есть предупреждение (тряска пошла) , чем сразу отруб управления

Dikoy
Pavel_E:

Ну это как раз случай “с длительностью импульсов заведомо вне рамок PPM стандарта”.

ИМХО ненадёжно. Мой метод при значительно меньшем выч. ресурсе мониторит ОДНОВРЕМЕННО два канала, выявляя потрею сигнала как потерю по двум каналам одновременно. Проверка корректности измеренного периода у меня есть, индивидуально на канал, но попытки сделать монитор на них ни к чему хорошему не привели.
Измерение периода у меня инициирует прерывание. Нет импульсов на входе - нет прерываний. По любому нужен ещё один таймер, чтобы зафиксировать не только период сигнала, но и период между сигналами. + помехи могут попадать в правильный период. То есть прошёл импульс 1,5 мС и далее минуту тишина.
Я неделю размышлял над всеми вариантами и в итоге решил, что измерение периода между двумя фронтами соседних каналов по дополнительному таймеру - самый надёжный метод.

Pavel_E
Dikoy:

ИМХО ненадёжно. Мой метод при значительно меньшем выч. ресурсе мониторит ОДНОВРЕМЕННО два канала, выявляя потрею сигнала как потерю по двум каналам одновременно. Проверка корректности измеренного периода у меня есть, индивидуально на канал, но попытки сделать монитор на них ни к чему хорошему не привели.
Измерение периода у меня инициирует прерывание. Нет импульсов на входе - нет прерываний. По любому нужен ещё один таймер, чтобы зафиксировать не только период сигнала, но и период между сигналами. + помехи могут попадать в правильный период. То есть прошёл импульс 1,5 мС и далее минуту тишина.
Я неделю размышлял над всеми вариантами и в итоге решил, что измерение периода между двумя фронтами соседних каналов по дополнительному таймеру - самый надёжный метод.

Честно, не понял. Прочитал 3 раза, все равно не понял 😃 В чем заключается ваш метод детекции пропадания сигнала? Есть канал 1. Есть канал 2. Что вы измеряете и по каждому, какие сравнения делаете?

Про объем вычислений я не говорю, пока не понял сути вашего метода. Но по надежности не соглашусь, что может быть надежнее, чем 2 операции сравнения? if(ХХ<800 || XX>2200) pomeha=1; else pomeha=0; А дальше уже смотрим, как часто эта единица возникает, чтобы делать вывод об устойчивой потере связи. Или какой период между нулями этой переменной. Достаточен ли он для нормального управления или уже нет.

Dikoy
Pavel_E:

Честно, не понял. Прочитал 3 раза, все равно не понял

Я не знаю, как у тимофея, а у меня есть 2 таймера, которые считают по кругу. Они генерят ШИМ сигналы управления на аппаратном уровне, по ним же я вычисляю период канального импульса - засекаю прерывание по лапке, смотрю, фронт это или спад, и заношу в соотвествующие переменные значение таймера на фронте (начале) и спаде (конце) импульса. Причём значение таймера на спаде вовсе не обязано быть больше значения на фронте, ибо таймер может и перейти через максимум во время импульса. Это учитывается, но это детали. Не суть.
Так вот, выключили мы передатчик, прерывания застопорились в каком-то положении, а таймеры считают. Прошла помеха - прерывание дёрнулось и ба! Длина попала в допустимый предел. Но это НЕ сигнал передатчика, а помеха. Ваш метод не учитывает времени между канальным импульсом, а только его длину.
Я выбираю два любых канальных импульса (крен/тангаж) и во время фронта первого стартую восьмибитный таймер, а во время фронта второго торможу и обнуляю счётчик и флаг. Т.к. вся пачка длится 20 мС, то между импульсами не может быть больше 20 мС (я выбрал 32 мС пределом как самое близкое из ложащихся на периоды таймера). Если таймер переполнился, инкрементирую флаг. Таким образом, если флаг больше N, значит было N пропусков ПОДРЯД. Аналогично с обратным переключение в ручное.
Этот метод очень надёжен, т.к. не восприимчив к одинарным помехам, а срабатывает только на N некорректных/корректных приёмов подряд. Что и было доказано на практике.
Возможно у тима таймеры работают иначе и он может сделать по-другому. У меня только так.

ВСЕМ
Подскажите плиз кто знает, в каком году (примерно) на рынке появились футабовский PA-2 Pilot и fma co-pilot cpd-4? Шеф спрашивает, насколько стара тема 😃 .
Если на рынке ещё есть аналогичные девайсы, то тоже подскажите.

maloii

На самом деле все до нас уже придумано, испробовано и реализовано.
В итоге получается что есть несколько типов приемников:

  • с нормальным файл сейвом
  • с ненормальным файл сейвом
  • без файл сейва

с первой категорией все понятно, там все чики пуки. Со второй тоже все ясно, не удается извратится и подстроить файл сейф под телеметрию то в топку, ищите нормальный приемник и не @би мозг. С последним приемником поинтересней. Файл сейф можно реализовать программно, а можно купить готовый. Программно он реализовывается относительно просто. У нас есть пачка длиной 20мс, в ней должен быть импульс не ниже 0,5 и не больше 2.2. Пачки должны идти друг за другом. У разных приемников длины могут колебаться, на это стоит сделать поправку. В общем все просто, следим за фронтами и смотрим все ли вписывается в наш шаблон, если нет то файл сейв.

Теперь про PCM и иже с ними, почти 100% подобных приемников имеют файл сейв, только вопрос к какой категории они относятся(категории описаны выше). Если файл сейва нет то выкиньте свой приемник, узнать потерю сигнала там не получится, если он только сервы не отрубает или хитро меняет сигнал, тогда программный файл сейв поможет.

RSSI. Ну с этим вообще все плохо. Для файл сева не ГОДИТСЯ, а годится лиш для определения буйков за которые не стоит заплывать. Притом универсальный считыватель сделать трудно, у всех приемников все разное, плюс зависит от кривизны рук паяльщика который полезет в приемник.

Только файл сейв должен включать автопилот, потому как приемник сам знает когда он отрубится и файл сейвом нас оповестит, других вариантов нет! Любителям спектрумов и т.д. видно не повезло, лезьте внутрь приемника и ищите, может что найдете что скажет телеметрии что сработал файл сейв.

Панкратов_Сергей
maloii:

Любителям спектрумов и т.д. видно не повезло, лезьте внутрь приемника и ищите, может что найдете что скажет телеметрии что сработал файл сейв.

Что искать то ?
Выше я же написал - оба светодиода потухло - сигнал автопилоту.
Да и про другие способы, описанные выше.
И кроме того есть приемники 9000-ной серии, где все каналы программируются для файл сейв.

Brandvik

Для определения потери сигнала есть одна идея которая будет работать 100% со всеми приемниками. Но это потребует изготовления доп устройства и пожертвования одного канала. Суть идеи, собирается коробочка похожая на хед-трекер, в нее заводится сигнал ППМ а из нее выходит обратно сигнал ППМ, но один канал постоянно плавает (если хотите может плавать по синусу и ли скокать дискретно) 0.6-1.9мс с частотой 1-2 такта в секунду. На приемной же стороне нужно будет всего лишь отслеживать состояние этого канала. Перестал плавать или стал гнать муть, уходим на автопилот. Кстати при работе с 6 канальными передатчиками можно не тереять канал, а добавлять, если приемник например 8ми канальный.

Dikoy
Brandvik:

На приемной же стороне нужно будет всего лишь отслеживать состояние этого канала.

Мой метод тоже работет со всеми приёмниками. Если отслеживать фронт одного канала и спад другого, то даже с синхронным выходом 😉 И всего 20 лишних строчек кода.
Можно и того проще:


#pragma vector=0x5C
__interrupt void Timer0_ovf_isr(void) { // переполнение таймера 0.

  if( int_trigger > loss_signal_limit ) {
    int_trigger = 0;
    if(manual_mode) loss_signal_flag++;
               else loss_signal_flag = 0;
  } else {
    int_trigger++;
  }
}


#pragma vector=0x04
__interrupt void INT0_isr(void) { // тангаж.

  if( EICRA & (1<<0) ) { // если текущий режим - на подьём
    CH1_start_time = TCNT1;
    CH1_flag = 0;
    EICRA &= ~(1<<0); // переключаем на спад
  } else {
    CH1_stop_time = TCNT1;
    CH1_flag = 1;
    EICRA |= (1<<0); // переключаем на подъём

        if(manual_mode) loss_signal_flag = 0;
                   else loss_signal_flag++;

  }
}

// мейнлуп
 if( manual_mode )  {  // если режим ручной,

   if(loss_signal_flag > AUTOMATIC_DELAY) { // если потеряно импульсов более AUTOMATIC_DELAY подряд
        loss_signal_flag = 0;
        manual_mode = 0; // включаем автоматику.
        loss_signal_limit = (AUTOMATIC_DELAY + (AUTOMATIC_DELAY/2));
   }


 } else { // если сигнал с передатчика исчез,
   if(loss_signal_flag > AUTOMATIC_DELAY) {
        loss_signal_flag = 0;
        loss_signal_limit = 0;
        manual_mode = 1;
   }

 }

Вот примерно так. Работает отлично на обычном ППМ приёмнике.

Причём код такой громоздкий из-за желания максимально разгрузить прерывания. Если вычисления делать в них, можно в 10-15 строк влезть.

baychi

На 7-ми канальных 2.4 ГГц Futab-овских приемниках типа FS607/FS617 полноценный FailSafe есть только на одном канале (остальные уходят в HOLD). Но, как я понимаю, при наличии автопилота, одного нормального канала вполне достаточно. Ведь двигатель можно на любом другом держать, а автопилот им разрулит.

Dikoy

Не удержался и снял видео, как у меня всё работает.
Снимал на телефон, ибо с видеокамеры объём будет зверский, но всё что надо видно. Файл в mp4. 1,5 мБ.
dikoy44.narod.ru/projects/Save_mode.zip

Pavel_E
Dikoy:

Так вот, выключили мы передатчик, прерывания застопорились в каком-то положении, а таймеры считают. Прошла помеха - прерывание дёрнулось и ба! Длина попала в допустимый предел. Но это НЕ сигнал передатчика, а помеха. Ваш метод не учитывает времени между канальным импульсом, а только его длину.

Все, я понял ваш принцип. Но все-таки, наверно, не соглашусь. На мой взгляд, эффективнее и проще отслеживать 2 канала (хотя можно и больше) по влезанию в диапазон. Вам же все равно их измерять, так что мешает заодно и проверить что намерили? И если хоть в одном из каналов сигнал не влез - в топку всю пачку. Не пролезло 5 (10, 20) пачек подряд - включаем фейл-сейф. А до тех пор повторяем последние принятые значения из годной пачки. Маловероятно, что во время помехи сигнал одновременно по двум (а тем более, по нескольким) каналам будет похож на настоящий. И никаких отдельных таймеров под это не надо…

Brandvik:

Суть идеи, собирается коробочка похожая на хед-трекер, в нее заводится сигнал ППМ а из нее выходит обратно сигнал ППМ, но один канал постоянно плавает (если хотите может плавать по синусу и ли скокать дискретно) 0.6-1.9мс с частотой 1-2 такта в секунду.

Это потребует не только сборки коробочки, но и залезания в схему передатчика. Она же на передачу должна этот плавающий PPM отдавать. Собственно, более простой вариант с микшером я предлагал чуть раньше. Идея со сравнением каналов работать будет, но видимо, не очень целесообразна. Потому что PPM есть возможность проверить и так, PCM в большинстве случаев и проверять не надо - включение фейлсейва будет видно по установлению заранее известного значения в одном из каналов (либо специально запрограммированного, либо газа).

maloii:

На самом деле все до нас уже придумано, испробовано и реализовано.

И даже обсуждено несколькими сообщениями выше, только в чуть более литературном тоне 😃

RSSI. Ну с этим вообще все плохо. Для файл сева не ГОДИТСЯ, а годится лиш для определения буйков за которые не стоит заплывать. Притом универсальный считыватель сделать трудно, у всех приемников все разное, плюс зависит от кривизны рук паяльщика который полезет в приемник.

А почему, собственно, не годится? Если есть свободный канал АЦП и возможность настройки порога включения автопилота по уровню сигнала на нем? Чем этот вариант хуже фейлсейва? Насколько он реально нужен - другой вопрос.

Dikoy
Pavel_E:

И если хоть в одном из каналов сигнал не влез - в топку всю пачку.

В процессе работы часто бывает, что канал не влезает. Из-за ошибок математики, таймера и т.п. Если херить всю пачку, самолёт в эпилептика превратится. Я пробовал, знаю 😉 По этому у меня каналы резутся индивидуально:
if( (measured_period_CH1 > MIN_LIM) && (measured_period_CH1 < MAX_LIM) ) {
OCR1A = (measured_period_CH1);
}

if( (measured_period_CH2 > MIN_LIM) && (measured_period_CH2 < MAX_LIM) ) {
OCR1B = measured_period_CH2;
OCR1C = measured_period_CH2; //mirror_value(measured_period_CH2);
}

Да и зачем??? Период между импульсами ОДНОЗНАЧНО определяет помеху и выключение передатчика, когда как период канального импульса ни о чё, собственно, не говорит. По крайней мере в моей системе, где измерение инициируется внешним прерыванием. По 2 лишние строчки в перывания, десяток в мейнлуп и чёткая работа.