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

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 лишние строчки в перывания, десяток в мейнлуп и чёткая работа.

Brandvik

Прошу простить, может я чего не знаю, но разве сигнал RSSI не останется на высоком уровне если появится сильная постоянная помеха частоте приемника?

Второе, в передатчик лезть не надо ,если только передатчик не древний и без тренерского порта.

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

smalltim

Brandvik, идея с генератором постоянно изменяющегося PPM на передатчике хорошая, но, думается, удастся малой кровью обойтись.

Пока идет война идей, выложу картинки, показывающие недавнее обновление комплекта телеметрии. Становится более причесанным продуктом 😃

Хочу публично сказать огромное спасибо одному очень хорошему, но скромному человеку, помогающему мне со всеми этими платами, пайками, проводками и прочей мутью, отвлекающей от разработки 😃
Захочет - сам назовется 😃

Ыы !
1024 сообщения на форуме 😃

Artie
Pavel_E:

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

Тем, что отсутствие полезного сигнала и наличие помехи - две разные вещи.

Может быть как устойчивое управление при низком уровне сигнала (когда далеко улетели, но в эфире чисто), так и регулярные помехи при “ломовом” сигнале всего в сотне-другой метров от передатчика.
И по факту, лично я, например, на порядок чаще наблюдаю второе.

Pavel_E
Brandvik:

Прошу простить, может я чего не знаю, но разве сигнал RSSI не останется на высоком уровне если появится сильная постоянная помеха частоте приемника?

Да, похоже вы правы. rcgroups.com аналогичного мнения:
www.rcgroups.com/forums/showthread.php?t=923419

The pin outputs a DC voltage level is about .7V with the transmitter off and 2.2V when the transmitter is on. You can use this to tell the signal strength that the receiver is getting, but keep in mind that it doesn’t tell you anything about signal quality, or if it is your Tx it is hearing or some other guy’s Tx a mile away.

Т.е. уровень на выходе RSSI показывает уровень сигнала, а не наличия в нем помех.

Второе, в передатчик лезть не надо ,если только передатчик не древний и без тренерского порта.

Вам надо взять сигнал с одного канала, сделать над ним математику и отдать на передачу. Как это можно сдлеать через тренерский разъем? Как взять PPM пачку понятно. Как вернуть PPM пачку понятно. Но как это делать одновременно? Непонятно. Проще все-таки настроить микшер на отдельный канал и сравнивать их.

Dikoy:

По этому у меня каналы резутся индивидуально:
if( (measured_period_CH1 > MIN_LIM) && (measured_period_CH1 < MAX_LIM) )

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

Похоже, мы натолкнулись на интересный факт. Не все приемники одинаковы. Когда я игрался с PPM приемником, там было совершенно четко - любая помеха (искрил пьезозажигалкой на фоне слабого сигнала) или отсутствие/слабый сигнал (передатчик в кастрюле) приводила к появлению на выходе случайных сигналов со случайной длительностью. Длительность - от 0 до 20мс, но в основном - в диапазоне от 0 до 0.5 мс где-то. И их много. Т.е. измерение периода НИЧЕГО не даст (это я про “однозначность” намекаю 😃 ). А измерение длительности (одного канала) поможет определить помеху процентов на 90 (чисто по памяти, специально не мерял). Если следить по 2 каналам - то уже 99%. А если все каналы - то вообще без вопросов. Тем более, что в вашем алгоритме проверка влезания сигнала в диапазон по каждому каналу уже есть, осталось только вести подстчет количества дефектных сигналов и все.
К сожалению, сейчас нет того PPM приемника под рукой - мои только PCM и “умный” PPM, но картину того шума я помню хорошо.

baychi
smalltim:

Пока идет война идей, выложу картинки, показывающие недавнее обновление комплекта телеметрии. Становится более причесанным продуктом 😃

Тимофей, а программатором можно разжиться? А то на работе ни один пока не подошел.

Dikoy
Pavel_E:

А измерение длительности (одного канала) поможет определить помеху процентов на 90 (чисто по памяти, специально не мерял). Если следить по 2 каналам - то уже 99%.

Ну, может быть. Я только свой аппарат тестировал. Мне хватило так, + там же гистерезис - нужно потерять N сигналов чтобы перейти на автомат и словить N, чтобы вернуться. То есть разовые помехи не переключают его на авто.

Pavel_E
Dikoy:

Ну, может быть. Я только свой аппарат тестировал. Мне хватило так, + там же гистерезис - нужно потерять N сигналов чтобы перейти на автомат и словить N, чтобы вернуться. То есть разовые помехи не переключают его на авто.

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

Есть еще третий тип - приемники PPM с математической обработкой сигнала и неким фэйлсейвом. Определение факта пропажи сигнала в них - аналогично приемникам с простым PCM фэйлсейвом.

Brandvik

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

Pavel_E
Brandvik:

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

По-моему, хед-трекеры не пропускают пачку через себя, а генерируют свой сигнал прикидываясь “учеником”, из которого приемник берет нужные каналы (запрограммированные как ученические), подмешивает в пачку и передает в эфир.
Впрочем, сути вашей идеи это не меняет, она действительно будет работать независимо от типа приемника. Но тут возникнет сложность со стороны передатчика, т.к. не все передатчики умеют настраивать произвольные каналы на ученика, а отдавать один из основных, наверно, не совсем правильно. Думаю, что дешевле и надежнее, все-таки, использовать PCM приемник с программируемым каналом, который ставится в определенное значение при падении в fail-safe.

Brandvik

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

Pavel_E
Brandvik:

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

“Для любых типов приемников” - это хорошо, но “для любых типов передатчиков” - важнее.
Насчет PPM, поглядите чуть выше 😃 Мы с товарищем Dikoy чуть не поругались за PPM приемники. Нифига там может не изчезать 😃 Но детекцию пропадания нормального сигнала сделать можно.

Давайте еще раз:

  1. На PCM приемниках с программируемым fail-safe проблем нет вообще.
  2. На обычных PPM приемниках проблем нет (только алгоритм проверки сигнала надо додумать).
  3. Сложность тут: на умных PPM и простых (без настроек fail-safe) PCM. Как вариант можно определяться по “0” в канале газа и/или отсутствию шевеления по другим каналам. Это будет работать, если газ настроить так, чтобы он в 0 не становился при управлении. Насчет шевеления не уверен. Хорошо оттриммированный, устойчивый аппарат вполе себе может секунд 10 (20, 30) без управления лететь по прямой. И отсутствие шевеления не показатель.

Тут еще такой момент надо продумать. Как бы оно перед взлетом/после посадки само заводиться и лететь не начинало. А то стоит самолет с включенным бортом. Выключаем аппаратуру. И тут оно кааак полетит!..

Brandvik
Pavel_E:

И тут оно кааак полетит!..

Тут уже давно все продумано, ниже скольки-то метров автопилот не включается.

Согласен что хорошо оттемированный самолет может летать и пол часа сам. Но на практике шевелить стиками приходится постоянно, НО я не учел одну вещь, В автопилоте будет стоять стабилизатор, поэтому шевелить придется действительно очень редко, только для смены курса… Так что идея ф топку. 😗(

solderer

Коллеги, а если измерять длительность синхроимпульса в кадре. FailSafe на обычных приемниках можно отловить?

maloii
solderer:

Коллеги, а если измерять длительность синхроимпульса в кадре. FailSafe на обычных приемниках можно отловить?

Ну неужели сложно прочесть, выше все про это разжаловано, и много вариантов предложили.

Pavel_E
solderer:

Коллеги, а если измерять длительность синхроимпульса в кадре. FailSafe на обычных приемниках можно отловить?

Коллега, FailSafe - это режим работы приемника, когда сам приемник определяет факт получения дефектного сигнала. Если под “обычными” приемниками вы понимаете простые PPM приемники, то режима failsafe у них нет в принципе.

maloii
Pavel_E:

Коллега, FailSafe - это режим работы приемника, когда сам приемник определяет факт получения дефектного сигнала. Если под “обычными” приемниками вы понимаете простые PPM приемники, то режима failsafe у них нет в принципе.

Есть у них режим такой! Я летаю на таком www.webx.dk/rc/…/MultiplexRX7-SYNTH-DS-IPD.htm и все в нем есть!

Давайте уже прекратим этот флейм! А у кого нет FailSafe то вам не повезло!