Телеметрия (часть 1)
Прочитал всю ветку…
Хочу высказать глубокое уважение к активистам данного вопроса!
Потихоньку изучаю этот вопрос. С pic дружу, тем паче есть хорошие помощники на работе.
Как продвигаются дела у
Artie
Что посоветуете ‘на попробовать’ для начала?
Я в скором времени всё выложу. Схему, ASM-код, прошивку, печатную плату в 2 вариантах. Только у меня не PIC, а Mega8. Artie дал добро на выкладывание своего собственного кода отрисовки в состеве моего безобразия, а всёго остального, что у меня понаписано, мне не жалко. Да и нет там каких-то уж особенных откровений.
Здорово! Буду ждать с нетерпением! А пока пенорезку буду заканчивать!
Ура!
Сегодня собрал схемку на печатной плате в варианте для SMD, всё заработало, ошибок в разводке не обнаружилось 😃
На плате стоит MPX4115 вместо MPX5010D, завтра надо переписать в коде коэффициенты пересчета давления в высоту.
А начиналось всё очень интересно: только собрал плату, запустил, программирую, так обнаруживаю детеныша, увлеченно водящего жалом тестера по ногам меги8. А мега маленькая, SMDшная, тут ноги и коротнулись. Взгрустнул.
Отправил детеныша спать, впаял новую мегу, прошил - не пашет. Прошиваю заново - вообще не видится. Смотрю fuse-биты - мммааать… Биты поставлены на синхронизацию от внешнего генератора. Взгрустнул пуще прежнего, мега-то последняя, где в час ночи новую достанешь? Подумал. Достал старый вариант телеметрии, быстренько вшил в него простенькую программку, чтоб на видеовыход отсылался меандр, подключил к новой платке - ура, мега определилась. Вшил правильные fuse-биты, прошил - не работает. Прошил меандровую программу - вполне себе меандрит в видео. Сижу, думаю, разглядываю плату. Ага, в цепи ресета LM1881 вместо 680кОм на землю стоит 680Ом. Достал линейку резисторов, проданных в Чипе-Дипе - правда, 680 Ом. Однако!
Поковырялся в заначке, выпаял с какой-то платы 470кОм, впаял - заработала!
Все остальное завтра, а сейчас - отдыхаю 😃
Ура!
Сегодня собрал схемку на печатной плате в варианте для SMD, всё заработало, ошибок в разводке не обнаружилось 😃
На плате стоит MPX4115 вместо MPX5010D, завтра надо переписать в коде коэффициенты пересчета давления в высоту.А начиналось всё очень интересно: только собрал плату, запустил, программирую, так обнаруживаю детеныша, увлеченно водящего жалом тестера по ногам меги8. А мега маленькая, SMDшная, тут ноги и коротнулись. Взгрустнул.
Отправил детеныша спать, впаял новую мегу, прошил - не пашет. Прошиваю заново - вообще не видится. Смотрю fuse-биты - мммааать… Биты поставлены на синхронизацию от внешнего генератора. Взгрустнул пуще прежнего, мега-то последняя, где в час ночи новую достанешь? Подумал. Достал старый вариант телеметрии, быстренько вшил в него простенькую программку, чтоб на видеовыход отсылался меандр, подключил к новой платке - ура, мега определилась. Вшил правильные fuse-биты, прошил - не работает. Прошил меандровую программу - вполне себе меандрит в видео. Сижу, думаю, разглядываю плату. Ага, в цепи ресета LM1881 вместо 680кОм на землю стоит 680Ом. Достал линейку резисторов, проданных в Чипе-Дипе - правда, 680 Ом. Однако!
Поковырялся в заначке, выпаял с какой-то платы 470кОм, впаял - заработала!Все остальное завтра, а сейчас - отдыхаю 😃
Ночью- надо спать!
А по поводу SMD процессоров Минздрав предупреждал: при отработке программы они крайне неудобны! Ну а в общем- поздравляю.
Только от детеныша паяльник прячь- хорошо, что он водил жалом (300 градусов!) не по своим или твоим ногам, а по “мегиным” 😃
А то у моего знакомого всей пятерней хватанул- тут уж стало не до пайки 😦
Итак, на высоте 9-го этажа платка выдала ровно 24 метра. Потом в течение 5 минут MPX4115 медленно плыл, нагреваясь, и высота “подросла” до 26 метров. Учитывая разницу в 15-20 градусов между уличной температурой и температурой в квартире - неплохо. В полете такой разницы, конечно, не будет.
При неизменной температуре, т.е., в комнате, за 5 минут гуляние показаний датчика с моей обработкой оказалось 0.8 метра, т.е., меньше чем шаг альтиметра. В сэмплах это уплывание оказалось суммарно 6 сэмплов при усреднении 16 накоплений по 64 измерения родным 10-битным атмеговским ЦАПом.
Касание датчика пальцами, дышание на него и прочие пляски с бубном дают ± 2 сэмпла.
В общем, всё прекрасно, я даже удивлен 😃
Осталось только вставить отрезание отрицательных высот и обработку отрицательных температур от термодатчика - сейчас он фигню при минусе показывает - и всё, выкладываю всё на обозрение.
Так, начинаем раздачу.
Видео старта телеметрии: первые 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 за советы и поддержку 😃
Вах … спасибо. 😃
Эх, придется делать 😃 😃 Спасибо !!!
Эх, придется делать 😃 😃 Спасибо !!!
Привет Андрей, Вашу схему доделываю… жду pic с чип дипа… отпишусь, как получилось.
В личке появились вопросы: как давление преобразовывается в высоту и скорость?
Есть барометрическая формула, записанная в таком виде: Δ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 - разница давлений на дифференциальном датчике
Скорость 0…350кмч с шагом 1 кмч
На низких скоростях шаг, видимо, будет в несколько раз больше. Даже если получать с оверсэмплингом АЦП 12 разрядов, нижний порог скорости будет, по моим расчетам, 7 км/ч. Если я неправ - поравьте, пожалуйста.
А в целом - очень симпатичный проект, поздравляю!
На низких скоростях шаг, видимо, будет в несколько раз больше. Даже если получать с оверсэмплингом АЦП 12 разрядов, нижний порог скорости будет, по моим расчетам, 7 км/ч. Если я неправ - поравьте, пожалуйста.
А в целом - очень симпатичный проект, поздравляю!
Да, это из-за корня вылезает. У меня максимальный шаг - прыжок с нуля до 4 км/ч. Дальше уже 1 м. С софтовой обработкой у меня эквивалент 16-битного АЦП получается, да еще “сглаженный во времени”.
С софтовой обработкой у меня эквивалент 16-битного АЦП получается, да еще “сглаженный во времени”.
Ну, я полагаю, это не совсем так. Усреднение 64х отсчетов дает не 6, а 3 дополнительных разряда. Посмотрите документ www.atmel.com/dyn/resources/…/doc8003.pdf
Кроме того, при недостаточном или “плохом” шуме нелинейность такого софтверного АЦП может быть довольно значительной. Я вот несколько недель наблюдал выход МРХ4115 с усреднением по 4096*16 отсчетам. При медленном росте/спаде атмосферного давления на графиках все равно видны волны основного дискрета АЦП. Ну и нелинейность самого АЦП никто не отменял.
Я думаю, для измерения низких скоростей можно завести на дополнительный канал АЦП усиленный сигнал с датчика и программно определять, какой канал использовать.
Ну, я полагаю, это не совсем так. Усреднение 64х отсчетов дает не 6, а 3 дополнительных разряда. Посмотрите документ www.atmel.com/dyn/resources/…/doc8003.pdf
Кроме того, при недостаточном или “плохом” шуме нелинейность такого софтверного АЦП может быть довольно значительной. Я вот несколько недель наблюдал выход МРХ4115 с усреднением по 4096*16 отсчетам. При медленном росте/спаде атмосферного давления на графиках все равно видны волны основного дискрета АЦП. Ну и нелинейность самого АЦП никто не отменял.
Я думаю, для измерения низких скоростей можно завести на дополнительный канал АЦП усиленный сигнал с датчика и программно определять, какой канал использовать.
Дело в том, что альтернативы MPX4115A (кроме швейцарского MS5534, дорогого, мало распространенного и имеющего цифровой выход) -нет.
А 4115 грубоват для данного диапазона . Но здесь (в моделизме) и не требуется долговременной стабильности и высокой точности (а самолеты медленнее 7 км-час не летают 😃 Они падают).
И то, что Smalltim сделал довольно простое и эффективное устройство- это дорогОго стоит: в основном на форумах цветет пышным цветом “маниловщина”, увядающая еще до появления реальных результатов.
Так что, браво!
Двойной маладэц тебе.
Дело в том, что альтернативы MPX4115A (кроме швейцарского MS5534, дорогого, мало распространенного и имеющего цифровой выход) -нет.
А 4115 грубоват для данного диапазона . Но здесь (в моделизме) и не требуется долговременной стабильности и высокой точности (а самолеты медленнее 7 км-час не летают 😃 Они падают).
И то, что Smalltim сделал довольно простое и эффективное устройство- это дорогОго стоит: в основном на форумах цветет пышным цветом “маниловщина”, увядающая еще до появления реальных результатов.
Так что, браво!
Двойной маладэц тебе.
Проект хороший - несложный, функциональный и реально работающий.
Относительно датчиков давления - на самом деле альтернатива MPX есть.
Это датчик абсолютного давления FOSP01 с интерфейсом I2C.
В MS5534 и FOSP01 используются одни и те же сенсоры в датчике.
Однако MS5534 имеет цифровой интерфейс SPI, а FOSP01 - I2C.
В своем устройстве MBC - бортовой компьютер/телеметрия использую FOSP01 для измерения высоты (и если необходимо, для дополнительного канала измерения температуры).
Сенсор FOSP01 есть в Москве (например в “Чип-Селект”) и стоит всего 198 рублей (дешевле даже чем MPX).
Datasheet на сенсор FOSP01 здесь.
>Ну, я полагаю, это не совсем так. Усреднение 64х отсчетов дает не 6, а 3 дополнительных разряда. Посмотрите документ www.atmel.com/dyn/resources/…/doc8003.pdf
Только что имел возможность лично пообщаться с Artie, в том числе на тему АЦП, оверсэмплинга и т.д., мои бравые заявления насет дополнительных 6 разрядов были опровергнуты 😃. Тем не менее, усреднение имеет право быть и прямо-таки необходимо, когда мы заставляем MPX4115 работать в таком узком диапазоне.
За ссылку спасибо, обязательно изучу 😃
На тему “проекта” - не стоит ли вынести всё, относящееся к готовому устройству, в отдельную тему?
Например, есть планы добавить в устройство счетчик помех, отображение тока мотора для электричек ( целых 2 канала АЦП свободно! 😃 ), программный вариометр, управление режимами отображения с передатчика, опционально графическое отображение параметров. Всё это, разумеется, делается без изменений уже готовой печатной платы 😃
Продублировал всё в блоге, милости просим 😃
rcopen.com
Здорово, а как вы сделали воздухозаборную трубку?
Сенсор FOSP01 есть в Москве (например в “Чип-Селект”) и стоит всего 198 рублей (дешевле даже чем MPX).
про чипселект пишут на сайте: Минимальная сумма заказа - 2600 руб., так реально там датчик в розницу купить?
Здорово, а как вы сделали воздухозаборную трубку?
Пойдет колено от антенны передатчика дешевой китайской игрушки или коктейльная трубочка диаметром около 5 мм. Трубка ставится вдоль набегающего потока воздуха, на ее задний конец надевается гибкая трубочка, дальше на сосок датчика.
про чипселект пишут на сайте: Минимальная сумма заказа - 2600 руб., так реально там датчик в розницу купить?
Вариантов несколько:
- объединиться, набрать заказ на 2600 руб и купить в ЧипСелект (здесь дешевле)
- купить в Платане FOSP01 (я покупал несколько штук здесь)
- купить в других фирмах
Этот сенсор может также называться HP03 (новое название). Сайт производителя
В личке появились вопросы: как давление преобразовывается в высоту и скорость?
Есть барометрическая формула, записанная в таком виде: Δ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.