Ультразвуковой анемометр
Re: Ультразвуковой анемометр
Мало ли пригодиться, фазовый детектор, не чувствительный к амплитуде и смещению сигнала. Настройки на 4 mps.
https://github.com/Maniak003/Anemometer ... tector.ods
Пересчет в макросе, запуск по кнопке Quadrature, в верхнем правом углу. Делал для тестирования, когда с альтерой возился.
https://github.com/Maniak003/Anemometer ... tector.ods
Пересчет в макросе, запуск по кнопке Quadrature, в верхнем правом углу. Делал для тестирования, когда с альтерой возился.
Re: Ультразвуковой анемометр
Поразмышляю вслух...
Я имею вот такой макет из г... и палок

Расстояние между датчиками и основанием 14мм.
Подключаю осциллограф и вижу картину. Синий луч - сигнал TX, жёлтый луч - сигнал после усилителя RX. Тут же принимаю решение анализировать принятый сигнал в момент наивысшей амплитуды огибающей. К примеру пару периодов подсвеченных розовым.

Собираю прибор, всё прекрасно работает, но затем выношу прибор на мороз, скорость звука прилично падает (с 343м/с до 318м/с). При моих габаритах макета это замедление эквивалентно увеличению числа волн звука 40кГц между датчиками на примерно одно колебание. Я отодвигаю основание от датчиков (типа мы на морозе)

И вижу вот такую картину на осциллографе в моём выбранном окне анализа сигнала амплитуда сильно упала! Анализировать нечего!

Пока снова пришел к выводу, что переотражения между "полом" и "потолком" нам портят всю картину при изменении температуры. И всегда найдётся такая температура при которой в нужном окне анализа амплитуда будет почти ноль.
PS Осциллограммы реальные и сняты с макета на фото.
Я имею вот такой макет из г... и палок
Расстояние между датчиками и основанием 14мм.
Подключаю осциллограф и вижу картину. Синий луч - сигнал TX, жёлтый луч - сигнал после усилителя RX. Тут же принимаю решение анализировать принятый сигнал в момент наивысшей амплитуды огибающей. К примеру пару периодов подсвеченных розовым.
Собираю прибор, всё прекрасно работает, но затем выношу прибор на мороз, скорость звука прилично падает (с 343м/с до 318м/с). При моих габаритах макета это замедление эквивалентно увеличению числа волн звука 40кГц между датчиками на примерно одно колебание. Я отодвигаю основание от датчиков (типа мы на морозе)
И вижу вот такую картину на осциллографе в моём выбранном окне анализа сигнала амплитуда сильно упала! Анализировать нечего!
Пока снова пришел к выводу, что переотражения между "полом" и "потолком" нам портят всю картину при изменении температуры. И всегда найдётся такая температура при которой в нужном окне анализа амплитуда будет почти ноль.
PS Осциллограммы реальные и сняты с макета на фото.
Re: Ультразвуковой анемометр
Есть гипотеза (моя), что узловая точка возникает из-за изменения резонансной частоты излучателя. Проверить смогу на выходных. Сейчас мне удалось добиться, наличие узла в одном из 4 каналов при комнатной температуре. Очень хочется понять природу этого явления.

[ко]
И, да, Вы же понимаете, что проблема не в нулевой амплитуде, а втом, что в этом месте изменяется фаза.
[\ко]
[ко]
И, да, Вы же понимаете, что проблема не в нулевой амплитуде, а втом, что в этом месте изменяется фаза.
[\ко]
Последний раз редактировалось Maniak003 Ср май 25, 2022 12:53:55, всего редактировалось 1 раз.
Re: Ультразвуковой анемометр
[uquote="Maniak003",url="/forum/viewtopic.php?p=4236159#p4236159"]Есть гипотеза (моя), что узловая точка возникает из-за изменения резонансной частоты излучателя. Проверить смогу на выходных. Сейчас мне удалось добиться, наличие узла в одном из 4 каналов при комнатной температуре. Очень хочется понять природу этого явления.
[ко]
И, да, Вы же понимаете, что проблема не в нулевой амплитуде, а втом, что в этом месте изменяется фаза.
[\ко][/uquote]
Да это сумма отражённой волны от основания и переотражённой несколько раз от пола и потолка так скажем. И сумма эта в противофазе, поэтому амплитуда сильно занижается. Я так преполагаю.
[ко]
И, да, Вы же понимаете, что проблема не в нулевой амплитуде, а втом, что в этом месте изменяется фаза.
[\ко][/uquote]
Да это сумма отражённой волны от основания и переотражённой несколько раз от пола и потолка так скажем. И сумма эта в противофазе, поэтому амплитуда сильно занижается. Я так преполагаю.
Re: Ультразвуковой анемометр
Да, Ваша идея понятна. Только возможно, что все несколько хуже. Известно, что есть несколько видов ультразвуковых волн: продольные, поперечные, поверхностные, Лемба. Вы же заметили, что при увеличении расстояния, эфект наложения уменьшается. Видимо имеет место не один вид волн.
Вот, небольшая, но познавательная статья на тему ультразвука. Нам видимо интересен раздел "Звуковое поле излучателя".
Вот, небольшая, но познавательная статья на тему ультразвука. Нам видимо интересен раздел "Звуковое поле излучателя".
Re: Ультразвуковой анемометр
Пока не вышел из тупика, появилась вот такая картинка:

Максимально, что удалось добиться, подбором расстояния от излучателей, до отражающей поверхности. Но срывы сигнала все равно есть. Выбирается такая дистанция, на которой при комнатной температуре, устойчиво детектируется эхо, а при уменьшении расстояния, уровень эха увеличивается. Расстояние подгоняется в пределах 2 мм.
Похоже, нужно, что то кардинально менять, подбор размеров -- это очень не технологично. Можно конечно, увеличить расстояние и проблема уйдет сама, но при этом снизится максимальная измеряемая скорость. Пока надеюсь, что удастся найти какое нибудь решение.
Пришли вот такие излучатели:

Работают, но чувствительность раза в полтора хуже, чем у не покрашенных и диаметр передней части отличается, пришлось корпус перепечатывать, иначе на 1мм выше становятся.
Максимально, что удалось добиться, подбором расстояния от излучателей, до отражающей поверхности. Но срывы сигнала все равно есть. Выбирается такая дистанция, на которой при комнатной температуре, устойчиво детектируется эхо, а при уменьшении расстояния, уровень эха увеличивается. Расстояние подгоняется в пределах 2 мм.
Похоже, нужно, что то кардинально менять, подбор размеров -- это очень не технологично. Можно конечно, увеличить расстояние и проблема уйдет сама, но при этом снизится максимальная измеряемая скорость. Пока надеюсь, что удастся найти какое нибудь решение.
Пришли вот такие излучатели:
Работают, но чувствительность раза в полтора хуже, чем у не покрашенных и диаметр передней части отличается, пришлось корпус перепечатывать, иначе на 1мм выше становятся.
Re: Ультразвуковой анемометр
[uquote="Maniak003",url="/forum/viewtopic.php?p=4227029#p4227029"]Offtop:
Не худа без добра, этот инцидент и сподвиг меня на данный проект.[/uquote]
Это Вы ее не мочили еще! Если конденсат или капли дождя на отражающей пластине - скорость 10-12 мс при реальном штиле и хаотичные градусы.
Спойлер
Не смог удержаться, что бы это не описать... Получил в конце прошлого года вот это чудо. Обычно чужие поделия не критикую, но -- это.... Эксплуатация закончилась не начавшись, все остальное время занимался перепиской с производителем. Первый не очень существенный нюанс: скорость на столе всегда показывает 0. Что то отличное от нуля начинает выдавать (судя по механическому анемометру), начиная от 0.5m/s. А вот то, что он не показывал значение угла больше 345 градусов, меня признаться сильно озадачило. Еще один интересный эффект: разная скорость по разным осям, причем сильно разная, отличающаяся до полутора раз. После предоставления видео, производитель сказал, что мои эксперименты с вентилятором -- полная ерунда и измерения нужно выполнять специальным оборудованием. "Устанавливай на улицу, все будет нормально." Как ни странно законы природы действуют везде одинаково и выгуливание в течении недели не помогло. Как Вы наверное понимаете, осциллографом я в него залезал, но в аппаратной части проблем не обнаружил.Не худа без добра, этот инцидент и сподвиг меня на данный проект.
Это Вы ее не мочили еще! Если конденсат или капли дождя на отражающей пластине - скорость 10-12 мс при реальном штиле и хаотичные градусы.
Re: Ультразвуковой анемометр
[uquote="Maniak003",url="/forum/viewtopic.php?p=4238424#p4238424"]Максимально, что удалось добиться, подбором расстояния от излучателей, до отражающей поверхности. Но срывы сигнала все равно есть.[/uquote]
А если излучатели утопить в шахты-рупоры?
А если излучатели утопить в шахты-рупоры?
Re: Ультразвуковой анемометр
Любые попытки установить что нибудь перед излучателями до отражающей поверхности приводили к искажениям. Последняя версия прибора с не прерывным излучением вместо импульсного сильно обнадеживает, но сейчас вынуждено приостановил работу над проектом. Надеюсь скоро удастся возобновить разработку.
Re: Ультразвуковой анемометр
[uquote="Maniak003",url="/forum/viewtopic.php?p=4329721#p4329721"]Надеюсь скоро удастся возобновить разработку.[/uquote]
Как он себя чувствует с дождем? Кажется Ваш проект вдохновил меня на покупку 3d принтера и попробовать повторить этот датчик. Еще просится сюда добавить счетчик дождя на оптической основе в крышу. На эффекте отражения, встречали такие варианты?
Можно ли пообщаться в телеграм?
Как он себя чувствует с дождем? Кажется Ваш проект вдохновил меня на покупку 3d принтера и попробовать повторить этот датчик. Еще просится сюда добавить счетчик дождя на оптической основе в крышу. На эффекте отражения, встречали такие варианты?
Можно ли пообщаться в телеграм?
Re: Ультразвуковой анемометр
Последние две недели удалось возобновить работу над проектом. Крайняя версия прибора:

Усилители смонтированы с излучателями для снижения уровня помех от импульсных источников. Датчики расположил под углом для уменьшения интерференции. Решил не использовать мультиплексоры для обеспечения работы в непрерывном режиме:
Непрерывный режим не оказался панацеей от всех проблем, но позволил избавится от фазовой нестабильности. Температурная нестабильность конструкции заметно уменьшилась, но как оказалось, большее влияние на постоянство измерений оказывают различия в самих датчиках. Сравнил несколько моделей датчиков на предмет постоянства добротности и резонансной частоты.

Результаты не сильно отличаются и выделить, что то однозначно сложно и вот почему:

На первом графике сырые данные с датчиков при изменении температуры. В исследуемом приборе датчики установлены в посадочные места с натягом и жестко зафиксированы. Подробнее по графику: ось X, красная и зеленая линии, ось Y синяя и коричневая, температура -- желтая. Измеряется температура корпуса, в области крепления датчиков. Видно, что ни о каком линейном законе речь не идет. На втором графике значения скорости. Около 17:20 наблюдается скачкообразное изменение значений при установившейся температуре.
Далее посадочные места под датчики были расточены, что бы корпус не касался датчика. Так же подобрал максимально близкие по параметрам пары.

Исчезли скачкообразные изменения и наблюдается стабильная повторяемость.

Но результат все еще оставляет желать... Напрашивается калибровка во всем диапазоне температур, но пока не известно как прибор будет реагировать на погодные условия. Что бы не возникло идей играться с корпусом, покажу вот такую модель:

Результат тот же. Мне кажется, что конструкция получается крайне не технологична в плане калибровки и видимо при отсутствии идей, это концепт лучше оставить как есть. Дальше предполагаю попробовать датчики на 200kHz.

Суть метода измерения намного проще и менее подвержена влиянию конструктивных особенностей датчиков (кмк), нужно получить время между сигналом и ответом. Но как обычно не без сюрпризов: при скорости от 15м/с приемник "глохнет", от 18м/c -- появляется сильный шум. Т.е. нужно поднимать уровень сигнала, значит предыдущая схемотехника не годится в принципе.
Усилители смонтированы с излучателями для снижения уровня помех от импульсных источников. Датчики расположил под углом для уменьшения интерференции. Решил не использовать мультиплексоры для обеспечения работы в непрерывном режиме:
Непрерывный режим не оказался панацеей от всех проблем, но позволил избавится от фазовой нестабильности. Температурная нестабильность конструкции заметно уменьшилась, но как оказалось, большее влияние на постоянство измерений оказывают различия в самих датчиках. Сравнил несколько моделей датчиков на предмет постоянства добротности и резонансной частоты.
Результаты не сильно отличаются и выделить, что то однозначно сложно и вот почему:
На первом графике сырые данные с датчиков при изменении температуры. В исследуемом приборе датчики установлены в посадочные места с натягом и жестко зафиксированы. Подробнее по графику: ось X, красная и зеленая линии, ось Y синяя и коричневая, температура -- желтая. Измеряется температура корпуса, в области крепления датчиков. Видно, что ни о каком линейном законе речь не идет. На втором графике значения скорости. Около 17:20 наблюдается скачкообразное изменение значений при установившейся температуре.
Далее посадочные места под датчики были расточены, что бы корпус не касался датчика. Так же подобрал максимально близкие по параметрам пары.
Исчезли скачкообразные изменения и наблюдается стабильная повторяемость.
Но результат все еще оставляет желать... Напрашивается калибровка во всем диапазоне температур, но пока не известно как прибор будет реагировать на погодные условия. Что бы не возникло идей играться с корпусом, покажу вот такую модель:
Результат тот же. Мне кажется, что конструкция получается крайне не технологична в плане калибровки и видимо при отсутствии идей, это концепт лучше оставить как есть. Дальше предполагаю попробовать датчики на 200kHz.
Суть метода измерения намного проще и менее подвержена влиянию конструктивных особенностей датчиков (кмк), нужно получить время между сигналом и ответом. Но как обычно не без сюрпризов: при скорости от 15м/с приемник "глохнет", от 18м/c -- появляется сильный шум. Т.е. нужно поднимать уровень сигнала, значит предыдущая схемотехника не годится в принципе.
Re: Ультразвуковой анемометр
Потихоньку продолжаю эксперименты с датчиками на 200кГц. В частности обработка сигнала согласованным фильтром. Выполнял обработку сигнала с тройным по времени запасом и получил интересный результат.
Вот сигнал который принимаем на дистанции 203 мм:
Задержка 587 uS
Согласованный фильтр тоже это подтверждает. Но он так же находит это сигнал на 1.743mS. А вот, что там на самом деле:
Т.е. можно увидеть дважды отраженный сигнал. Вот она, перспектива автоматической калибровки. Датчики можно приколотить к любой деревяшке и геометрия определиться сама.
Re: Ультразвуковой анемометр
Творческий кризис, не знаю куда дальше двигаться.... Вот так забил stm32f303cc.

Проблема не в HAL, а в том, что слишком много памяти уходит на математику.
Остановился на том, что сначала использую согласованный фильтр, но свертка не дает нормальной возможности определить начало импульса.
Исходный сигнал, 200 измерений:

Результат свертки, 76 точек:

Т.е. видно, что положение максимума зависит от расположения точек оцифровки. Увеличение количества измерений особо не играет роли -- несколько уменьшается ошибка, но она может быть до полупериода.
Тогда пришла в голову идея получить огибающую преобразованием Гильберта и на ней найти максимум.

Результат замечательный только в смысле результата вычислений, а вот реализация и время вычисления -- это ужас. На F303, при 72МГц, расчет 200 измерений занимает около секунды.
Не проблема МК заменить на более производительный и с большей памятью. Но может быть кто то владеет математикой не так как я, а на нормальном уровне и подскажет более эффективный алгоритм ?
На всякий случай: fft, удаление половины спектра с удвоением второй половины и обратное fft -- занимает еще больше места.
Проблема не в HAL, а в том, что слишком много памяти уходит на математику.
Остановился на том, что сначала использую согласованный фильтр, но свертка не дает нормальной возможности определить начало импульса.
Исходный сигнал, 200 измерений:
Результат свертки, 76 точек:
Т.е. видно, что положение максимума зависит от расположения точек оцифровки. Увеличение количества измерений особо не играет роли -- несколько уменьшается ошибка, но она может быть до полупериода.
Тогда пришла в голову идея получить огибающую преобразованием Гильберта и на ней найти максимум.
Результат замечательный только в смысле результата вычислений, а вот реализация и время вычисления -- это ужас. На F303, при 72МГц, расчет 200 измерений занимает около секунды.
Не проблема МК заменить на более производительный и с большей памятью. Но может быть кто то владеет математикой не так как я, а на нормальном уровне и подскажет более эффективный алгоритм ?
На всякий случай: fft, удаление половины спектра с удвоением второй половины и обратное fft -- занимает еще больше места.
Re: Ультразвуковой анемометр
Maniak003, опишите поподробней ваш алгоритм. Я предполагал, что достаточно измерять фазовый сдвиг между непрерывным опорным сигналом и сигналом с датчика. А это делать на много проще.
- fvladimirn
- Родился
- Сообщения: 11
- Зарегистрирован: Вс ноя 19, 2017 00:29:13
- Откуда: Москва
Re: Ультразвуковой анемометр
А почему не использовать более дешевые ESP32. Пообъемнее и побыстрее.
Re: Ультразвуковой анемометр
Не очень владею esp32. Нужно, что бы таймеры и АЦП взаимодействовали на аппаратном уровне. Как это сделать на esp32 -- не знаю. Как минимум нужно три таймера. Первый формирует 13 импульсов, второй запускается по событию от первого и по окончании (задержка измерений) запускает ADC и третий таймер для фиксации пересечений нуля.
Re: Ультразвуковой анемометр
Собрал на stm32g473cbt6, оперативной памяти использовано около 60КБ для 1024 отсчетов. Сначала сделал на CMSIS-DSP -- нормально получилось, потом попробовал то, что сгенерировал MATLAB. Пока остановлюсь на коде MATLAB'а, поскольку легче с отладкой. На компе проверил, загрузил в МК -- работает одинаково. По скорости: CMSIS-DSP -- примерно в полтора раза быстрее.
Алгоритм для одного измерения выполняется за 35 mS. В идеале нужно 4 измерения (хотя кмк достаточно двух), т.е. за, примерно 0.15 сек., реализуется полный расчет. На текущий момент попробовал уточнить начало ответа при помощи таймера, но точность из-за шумов получается так себе. Преобразование по 1024 точкам, дает более стабильный результат. Все значения вычисляются с учетом таимингов и размеров конструкции, никакие поправочные/калибровочные коэффициенты не используется. Вот, что получается в сравнении:

Vc - значения с поправкой capture таймера. Видимо от фиксации пересечения нуля буду отказываться.
Vh - Измеренное значения скорости, найденное по максимуму огибающей.
Vs - Рассчитанная скорость звука по температуре, влажности и давлению.
При 1024 отсчетах, получается погрешность измерения ~ 0.2m/s. При желании можно использовать dual mode adc и повысить точность в два раза, памяти для этого достаточно и время выполнения будет не критичное. Правда, пока особой необходимости в этом не вижу. Удивительно, но на столе, все получается намного проще, чем при фазовом методе -- прощаются погрешности в сотни nS.
Текущая схема приемной части, для возможности 4-х измерений:

Пожалуйста критикуйте/поправляйте.
Алгоритм для одного измерения выполняется за 35 mS. В идеале нужно 4 измерения (хотя кмк достаточно двух), т.е. за, примерно 0.15 сек., реализуется полный расчет. На текущий момент попробовал уточнить начало ответа при помощи таймера, но точность из-за шумов получается так себе. Преобразование по 1024 точкам, дает более стабильный результат. Все значения вычисляются с учетом таимингов и размеров конструкции, никакие поправочные/калибровочные коэффициенты не используется. Вот, что получается в сравнении:
Vc - значения с поправкой capture таймера. Видимо от фиксации пересечения нуля буду отказываться.
Vh - Измеренное значения скорости, найденное по максимуму огибающей.
Vs - Рассчитанная скорость звука по температуре, влажности и давлению.
При 1024 отсчетах, получается погрешность измерения ~ 0.2m/s. При желании можно использовать dual mode adc и повысить точность в два раза, памяти для этого достаточно и время выполнения будет не критичное. Правда, пока особой необходимости в этом не вижу. Удивительно, но на столе, все получается намного проще, чем при фазовом методе -- прощаются погрешности в сотни nS.
Текущая схема приемной части, для возможности 4-х измерений:
Пожалуйста критикуйте/поправляйте.
Re: Ультразвуковой анемометр
Удалось повысить разрешение в три раза при помощи интерполяции.

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

Т.е. сейчас, дискретность измерения 0.06м/с.
Использование памяти, без учета стека:

Реально, RAM задействовано примерно на 60кБ больше. Основная часть flash, используется для табличных значений. В общем места остается более чем достаточно, а то была мысль, сразу делать на stm32f722.
Зеленая точка -- ближе к истинному максимуму огибающей.
Полностью избавился от кода отвечающего за таймерные измерения, соответственно компаратор больше не нужен. На столе, получается вот такая картинка:
Т.е. сейчас, дискретность измерения 0.06м/с.
Использование памяти, без учета стека:
Реально, RAM задействовано примерно на 60кБ больше. Основная часть flash, используется для табличных значений. В общем места остается более чем достаточно, а то была мысль, сразу делать на stm32f722.