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

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 сделал довольно простое и эффективное устройство- это дорогОго стоит: в основном на форумах цветет пышным цветом “маниловщина”, увядающая еще до появления реальных результатов.
Так что, браво!
Двойной маладэц тебе.

3apw
foxfly:

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

Проект хороший - несложный, функциональный и реально работающий.

Относительно датчиков давления - на самом деле альтернатива MPX есть.

Это датчик абсолютного давления FOSP01 с интерфейсом I2C.

В MS5534 и FOSP01 используются одни и те же сенсоры в датчике.

Однако MS5534 имеет цифровой интерфейс SPI, а FOSP01 - I2C.

В своем устройстве MBC - бортовой компьютер/телеметрия использую FOSP01 для измерения высоты (и если необходимо, для дополнительного канала измерения температуры).

Сенсор FOSP01 есть в Москве (например в “Чип-Селект”) и стоит всего 198 рублей (дешевле даже чем MPX).

Datasheet на сенсор FOSP01 здесь.

smalltim

>Ну, я полагаю, это не совсем так. Усреднение 64х отсчетов дает не 6, а 3 дополнительных разряда. Посмотрите документ www.atmel.com/dyn/resources/…/doc8003.pdf

Только что имел возможность лично пообщаться с Artie, в том числе на тему АЦП, оверсэмплинга и т.д., мои бравые заявления насет дополнительных 6 разрядов были опровергнуты 😃. Тем не менее, усреднение имеет право быть и прямо-таки необходимо, когда мы заставляем MPX4115 работать в таком узком диапазоне.
За ссылку спасибо, обязательно изучу 😃

На тему “проекта” - не стоит ли вынести всё, относящееся к готовому устройству, в отдельную тему?
Например, есть планы добавить в устройство счетчик помех, отображение тока мотора для электричек ( целых 2 канала АЦП свободно! 😃 ), программный вариометр, управление режимами отображения с передатчика, опционально графическое отображение параметров. Всё это, разумеется, делается без изменений уже готовой печатной платы 😃