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

Artie
foxfly:

Мне кажется, тут должна последовать фраза из анекдота: “Дорогой, а с кем это ты сейчас говорил?”😃
Тем более, не полетавши на ДПЛА выдвигать какие-то ТТХ- занятие довольно бессмысленное, примерно- как бокс по переписке…

Я готов согласиться, что у меня - “не настоящий ДПЛА”. - Не буду спорить о терминологии. 😉
Но меня полеты на своем пепелаце вполне устраивают, равно как и моя реализация телеметрии. Не говоря уже о том, что оценку точности той или иной технолигии можно давать, вообще ни на чем не летая, - достаточно знать предметную область.

Не нравятся мои оценки - приведите свои. Желательно вместе с конкретными технологиями, и ценами на их реализацию. Можно даже с примерами из жизни… В противном же случе, - если продолжать “боксерские” аналогии, - Вы будете продолжать вести бои с собственной тенью 😁.

foxfly:

А азимут с точностью 10 градусов- это не курс, а направление:)
Прикиньте, где окажется аэроплан , летящий с удаления 5км с точностью 10грд.? Правильно- нэ в нашэм районе.

Ошибка в определении угла в прямоугольном треугольнике определения точностью задания его катетов и точностью вычисления арктангенса. Первое для одночастотного gps-приемника заведомо известно - это порядка 15м КВО, а второе выбирается, исходя из вычислительных ресурсов и решаемой задачи. Если Вы еще не забыли, то обсуждается не самолет-разведчик, отправляемый на территорию сопредельного государства, а чисто хоббийная примочка - just for fun, и исходя из этой задачи я и озвучил ошибку в 10 градусов, которая возможная на удалении порядка сотни-другой метров (ближе самолет уже точно видно глазом, равно как с него видна и ВПП). И тут вполне пригодно даже “направление”.
Если же вдруг предположить, что мы вдруг действительно улетели на 5 километров, и у нас при этом не пропал ни ап- ни даунлинк с моделью, то несложно прикинуть, что на таких удалениях угловая ошибка будет порядка четверти градуса, - то есть, значительно меньше того, что вообще имеет смысл отображать на экране…

Artie
smalltim:

А Вы подумайте хорошенько 😃

В данном случае - не буду спорить.

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

smalltim:

Представьте себе две кривые на графике: одна - показания от ГПС, шумная, рваная, но при усредении большого количества отсчетов достаточно точно описывающая высоту.

Для “усреднения на большом количестве отсчетов” нужно, чтобы характерная постоянная времени изменения истинной высоты была много больше периода “плаваний” показания приемника из-за всяко-разных ионосферных, тропосферных, и прочих задержек. А она, к сожалению, или сравнима с последним, или даже меньше его…

smalltim
Artie:

В данном случае - не буду спорить.

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

Вот через неделю закончу одну хреньку по работе, тоже, кстати, связанную с обработкой и отображением сигналов, и попробую сделать модель. Думаю, Екселя хватит 😃

Проблемы видятся только в том случае, если истинная высота самолета сильно (сильнее уровня шумов) меняется с частотой выше, чем половина частоты опроса GPS. Ну, это понятно, происки Найквиста-Котельникова. Если самолет не шарахается вверх-вниз чаще чем раз в 2 секунды, всё должно быть хорошо 😃

Degreez

Ну вот, народ начинает вспоминать теорию автомачического регулирования. Время реакции по рассматриваемой оси = Т, соответственно инфу о этой оси нужно получать не реже чем Т/2 (по Найквисту)

serj

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

барометр в спокойную погоду за час обычно уплывает на 5-12м. перед дождем- бывает и 20-30м, но редко.

Далее. ну посмотрите же наконец, на картинки, котрые я выкладывал. 😃
право же, не из пальца содержание, расположение и размер цифр высосаны.

smalltim

Мне еще далеко до такого уровня просветления. Да и не нужно.

Северный

Прочитал всю ветку…
Хочу высказать глубокое уважение к активистам данного вопроса!
Потихоньку изучаю этот вопрос. С pic дружу, тем паче есть хорошие помощники на работе.
Как продвигаются дела у
Artie

Куда деньги нести - признаться, не знаю. Свою версию как нечто коммерческое я не рассматриваю, бо делается оно крайне немудряще; - там не за что брать деньги. Выкладывать свои сорсы в public domain я пока не буду, бо за код стыдно (это, в общем, была поделка уровня “проект выходного дня”), но со временем - по мере причесывания и доведения до ума - вероятно, выложу.

Что посоветуете ‘на попробовать’ для начала?

smalltim
Северный:

Прочитал всю ветку…
Хочу высказать глубокое уважение к активистам данного вопроса!
Потихоньку изучаю этот вопрос. С pic дружу, тем паче есть хорошие помощники на работе.
Как продвигаются дела у
Artie
Что посоветуете ‘на попробовать’ для начала?

Я в скором времени всё выложу. Схему, ASM-код, прошивку, печатную плату в 2 вариантах. Только у меня не PIC, а Mega8. Artie дал добро на выкладывание своего собственного кода отрисовки в состеве моего безобразия, а всёго остального, что у меня понаписано, мне не жалко. Да и нет там каких-то уж особенных откровений.

Brandvik

Здорово! Буду ждать с нетерпением! А пока пенорезку буду заканчивать!

smalltim

Ура!
Сегодня собрал схемку на печатной плате в варианте для SMD, всё заработало, ошибок в разводке не обнаружилось 😃
На плате стоит MPX4115 вместо MPX5010D, завтра надо переписать в коде коэффициенты пересчета давления в высоту.

А начиналось всё очень интересно: только собрал плату, запустил, программирую, так обнаруживаю детеныша, увлеченно водящего жалом тестера по ногам меги8. А мега маленькая, SMDшная, тут ноги и коротнулись. Взгрустнул.
Отправил детеныша спать, впаял новую мегу, прошил - не пашет. Прошиваю заново - вообще не видится. Смотрю fuse-биты - мммааать… Биты поставлены на синхронизацию от внешнего генератора. Взгрустнул пуще прежнего, мега-то последняя, где в час ночи новую достанешь? Подумал. Достал старый вариант телеметрии, быстренько вшил в него простенькую программку, чтоб на видеовыход отсылался меандр, подключил к новой платке - ура, мега определилась. Вшил правильные fuse-биты, прошил - не работает. Прошил меандровую программу - вполне себе меандрит в видео. Сижу, думаю, разглядываю плату. Ага, в цепи ресета LM1881 вместо 680кОм на землю стоит 680Ом. Достал линейку резисторов, проданных в Чипе-Дипе - правда, 680 Ом. Однако!
Поковырялся в заначке, выпаял с какой-то платы 470кОм, впаял - заработала!

Все остальное завтра, а сейчас - отдыхаю 😃

foxfly
smalltim:

Ура!
Сегодня собрал схемку на печатной плате в варианте для SMD, всё заработало, ошибок в разводке не обнаружилось 😃
На плате стоит MPX4115 вместо MPX5010D, завтра надо переписать в коде коэффициенты пересчета давления в высоту.

А начиналось всё очень интересно: только собрал плату, запустил, программирую, так обнаруживаю детеныша, увлеченно водящего жалом тестера по ногам меги8. А мега маленькая, SMDшная, тут ноги и коротнулись. Взгрустнул.
Отправил детеныша спать, впаял новую мегу, прошил - не пашет. Прошиваю заново - вообще не видится. Смотрю fuse-биты - мммааать… Биты поставлены на синхронизацию от внешнего генератора. Взгрустнул пуще прежнего, мега-то последняя, где в час ночи новую достанешь? Подумал. Достал старый вариант телеметрии, быстренько вшил в него простенькую программку, чтоб на видеовыход отсылался меандр, подключил к новой платке - ура, мега определилась. Вшил правильные fuse-биты, прошил - не работает. Прошил меандровую программу - вполне себе меандрит в видео. Сижу, думаю, разглядываю плату. Ага, в цепи ресета LM1881 вместо 680кОм на землю стоит 680Ом. Достал линейку резисторов, проданных в Чипе-Дипе - правда, 680 Ом. Однако!
Поковырялся в заначке, выпаял с какой-то платы 470кОм, впаял - заработала!

Все остальное завтра, а сейчас - отдыхаю 😃

Ночью- надо спать!
А по поводу SMD процессоров Минздрав предупреждал: при отработке программы они крайне неудобны! Ну а в общем- поздравляю.
Только от детеныша паяльник прячь- хорошо, что он водил жалом (300 градусов!) не по своим или твоим ногам, а по “мегиным” 😃
А то у моего знакомого всей пятерней хватанул- тут уж стало не до пайки 😦

smalltim

Итак, на высоте 9-го этажа платка выдала ровно 24 метра. Потом в течение 5 минут MPX4115 медленно плыл, нагреваясь, и высота “подросла” до 26 метров. Учитывая разницу в 15-20 градусов между уличной температурой и температурой в квартире - неплохо. В полете такой разницы, конечно, не будет.
При неизменной температуре, т.е., в комнате, за 5 минут гуляние показаний датчика с моей обработкой оказалось 0.8 метра, т.е., меньше чем шаг альтиметра. В сэмплах это уплывание оказалось суммарно 6 сэмплов при усреднении 16 накоплений по 64 измерения родным 10-битным атмеговским ЦАПом.
Касание датчика пальцами, дышание на него и прочие пляски с бубном дают ± 2 сэмпла.
В общем, всё прекрасно, я даже удивлен 😃

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

smalltim

Так, начинаем раздачу.
Видео старта телеметрии: первые 15 секунд - “разогрев датчиков”: инициализация нуля высоты и скорости в момент времени 5, 10 и 15 секунд.

ASM-код и прошивка телеметрии:

Схема и разводка печатной платы в Eagle:

Eagle доступен в бесплатной версии, проблем быть не должно

Фото вариантов печатных плат:

Фото телеметрии в сборе. Серый шлейф идет к разъему программирования, он будет отпаян. Плата после промывки перестанет пугать внешним видом:

ASM - код кое-где имеет комментарии, “чтоб сам не забыл”, так что проблем с пониманием как что работает, быть не должно.

Железка питается от 3S LiPo (соответственно, код заточен на показ трех напряжений), на плате стоит линейный стабилизатор 5В 0.5А, питающий атмегу и всё остальное. Есть диодная защита от переполюсовки по питанию.

Меряет:
Температура: -40…+85 градусов с шагом 1 градус
Высота: 0…999м с шагом 1 м
Скорость 0…350кмч с шагом 1 кмч
Напряжение: 3х 0…9.99В с шагом 0.01В. Из напряжений на банках 2 и 3 вычитаются напряжения банок 1 и 2, чтоб получить индивидуальные побаночные напряжения. Соответственно, независимо три напряжения не померять без изменения кода.

Что еще?
Синхронизация времени ведется по кадровым синхроимпульсам видеосигнала, так что при мощных помехах в видеосигнале или отключении камеры время останавливается 😃

Да, самое главное:
Спасибо Artie, Foxfly, Serj за советы и поддержку 😃

Северный
Prikupets:

Эх, придется делать 😃 😃 Спасибо !!!

Привет Андрей, Вашу схему доделываю… жду pic с чип дипа… отпишусь, как получилось.

smalltim

В личке появились вопросы: как давление преобразовывается в высоту и скорость?

Есть барометрическая формула, записанная в таком виде: Δh = 18400(1 + at)lg(p1 / p2)
Температуру в полете считаем постоянной, упрощаем до: Δh = 18400*lg(p1 / p2)
Считаем, что в нашем случае p1/p2~1, то есть аппроксимируем логарифмическую кривую касательной в единице.
В итоге получается Δh = K*(p2 - p1), где в К входит и число разрядов ЦАП, и логарифм десятки по основанию е, и т.д. В общем, примерно 80 метров на кПа.
Если кому-то хочется просчитать “честный” логарифм, милости просим: код открыт, посчитать логарифм на атмеге - не сверхзадача. Только это будет из пушки по воробьям.

Скорость считается “честно”: извлекается корень и т.д.
Формула из школьного курса: P1-P2=(rv^2) /2, где r - плотность воздуха, v^2 - квадрат скорости, P1-P2 - разница давлений на дифференциальном датчике

Vad64
smalltim:

Скорость 0…350кмч с шагом 1 кмч

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

smalltim
Vad64:

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

Да, это из-за корня вылезает. У меня максимальный шаг - прыжок с нуля до 4 км/ч. Дальше уже 1 м. С софтовой обработкой у меня эквивалент 16-битного АЦП получается, да еще “сглаженный во времени”.

Vad64
smalltim:

С софтовой обработкой у меня эквивалент 16-битного АЦП получается, да еще “сглаженный во времени”.

Ну, я полагаю, это не совсем так. Усреднение 64х отсчетов дает не 6, а 3 дополнительных разряда. Посмотрите документ www.atmel.com/dyn/resources/…/doc8003.pdf
Кроме того, при недостаточном или “плохом” шуме нелинейность такого софтверного АЦП может быть довольно значительной. Я вот несколько недель наблюдал выход МРХ4115 с усреднением по 4096*16 отсчетам. При медленном росте/спаде атмосферного давления на графиках все равно видны волны основного дискрета АЦП. Ну и нелинейность самого АЦП никто не отменял.
Я думаю, для измерения низких скоростей можно завести на дополнительный канал АЦП усиленный сигнал с датчика и программно определять, какой канал использовать.

foxfly
Vad64:

Ну, я полагаю, это не совсем так. Усреднение 64х отсчетов дает не 6, а 3 дополнительных разряда. Посмотрите документ www.atmel.com/dyn/resources/…/doc8003.pdf
Кроме того, при недостаточном или “плохом” шуме нелинейность такого софтверного АЦП может быть довольно значительной. Я вот несколько недель наблюдал выход МРХ4115 с усреднением по 4096*16 отсчетам. При медленном росте/спаде атмосферного давления на графиках все равно видны волны основного дискрета АЦП. Ну и нелинейность самого АЦП никто не отменял.
Я думаю, для измерения низких скоростей можно завести на дополнительный канал АЦП усиленный сигнал с датчика и программно определять, какой канал использовать.

Дело в том, что альтернативы MPX4115A (кроме швейцарского MS5534, дорогого, мало распространенного и имеющего цифровой выход) -нет.
А 4115 грубоват для данного диапазона . Но здесь (в моделизме) и не требуется долговременной стабильности и высокой точности (а самолеты медленнее 7 км-час не летают 😃 Они падают).
И то, что Smalltim сделал довольно простое и эффективное устройство- это дорогОго стоит: в основном на форумах цветет пышным цветом “маниловщина”, увядающая еще до появления реальных результатов.
Так что, браво!
Двойной маладэц тебе.