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

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 канала АЦП свободно! 😃 ), программный вариометр, управление режимами отображения с передатчика, опционально графическое отображение параметров. Всё это, разумеется, делается без изменений уже готовой печатной платы 😃

Brandvik

Здорово, а как вы сделали воздухозаборную трубку?

SGordon
3apw:

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

про чипселект пишут на сайте: Минимальная сумма заказа - 2600 руб., так реально там датчик в розницу купить?

smalltim
Brandvik:

Здорово, а как вы сделали воздухозаборную трубку?

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

3apw
SGordon:

про чипселект пишут на сайте: Минимальная сумма заказа - 2600 руб., так реально там датчик в розницу купить?

Вариантов несколько:

Этот сенсор может также называться HP03 (новое название). Сайт производителя

smalltim:

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

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

Еще один алгоритм вычисления высоты:

** H[m] = (1 - (P[hPa] / P0) ^ s) / A**

P0 = 1013 hPa
s = 1 / 5.2563
A = 2.2555E-5
The software run by the PIC uses a 2nd ordre polynomial approximation. It gives a good accuracy from 0 to 3500. This approximation requires only a 32 bits x 32 bits unsigned multiplication.

H[m] =(((745 * Q) / 256 + 46597) * Q) / 65536 - 966
with
Q = 11390 - P
P = ambiant atmospheric pressure in tenth of hPa or mBar.

Источник

foxfly
smalltim:

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

Ну, вообще то -не совсем так: трубка Пито должна брать динамическое и статическое давление из одной точки, находящейся вне потока винта и завихрений от несущих поверхностей. Если “статика” берется внутри фюзеляжа, то неизвестно- какая там ситуация 😃
Поэтому она ставится, как правило, на законцовке крыла (вперед!) и имеет такой вид:
в трубку Ф6 (Ф- замена значка “диаметр”) длиной 100мм, впаяна соосно трубка Ф3 (от антенн, которые на МИТИНО продаются по субботам на барахолке по 25 руб)
При этом оба конца Ф6- заглушены пайкой.
Со свободного конца Ф3- берем динамическое давление.
По окружности Ф6 на расстоянии 20мм от переднего (по полету) края сверлим 3-4 отверстия Ф1.
И из дальнего торца той же трубкой Ф3 (еще одним куском) -выводим статическое давление.
Т.е. вся конструкция имеет вид толстой трубки из одного конца которой торчит тонкая (этот конец направлен вперед) а из другого- две тонких (с них двумя силиконовыми трубочками Ф3 к датчику и подается статическое и динамическое давление)

smalltim

Ок, ок. Тогда MPX5010 надо брать с двумя “сосками”, а не с одним.

Северный

Насчет объединения заказа… свистните, если надумаете.