RSS блога
Подписка
Парктроник + ATmega48 = дальномер
Недавний обзор дальномера на датчике VL6180X напомнил мне еще одну историю из жизни, когда тоже пришлось заниматься измерением расстояния. Лично мне это измерение не было нужно (мне хватает линейки и рулетки), но был заказ, или так называемая «халтурка».
Попросили сделать какой-нибудь датчик уровня для сыпучих материалов. Очевидным решением было использование принципа ультразвукового дальномера. Тем более, с датчиками сейчас проблем нет: на Aliexpress широко представлены датчики для автомобильных парктроников.
Для начала изучил доступные схемы готовых решений. Все они довольно похожи. Датчик питается через трансформатор, вместе с вторичной обмоткой которого образует колебательный контур. В качестве емкости выступает емкость самого датчика, плюс паразитная емкость кабеля. Трансформатор обычно имеет подстройку, что позволяет настраивать контур точно на рабочую частоту, обычно это 40 кГц. Приемный канал содержит усилитель, полосовой фильтр, настроенный на частоту 40 кГц, и детектор. Дальше сигнал обрабатывается микроконтроллером. Им же генерируется сигнал накачки.
Именно по такой структуре и решил строить датчик. Сигнал накачки датчика формирует таймер 0 микроконтроллера ATmega48. Этот сигнал обычно короткий, я выбрал 7 периодов рабочей частоты 40 кГц. Общая длительность пачки импульсов – 175 мкс. Эта длительность формируется с помощью таймера 1. Поскольку датчик вместе с обмоткой трансформатора образует колебательную систему с достаточно высокой добротностью, для затухания колебаний требуется некоторое время. Поэтому таймер 1 после формирования длительности сигнала накачки формирует мертвое время порядка 1500 мкс. В это время приемный канал перегружен затухающими колебаниями на датчике, поэтому входной сигнал игнорируется. После окончания мертвого времени начинается ожидание отраженного импульса. Измерение интервала производится путем захвата значения таймера 1 входным импульсом. Если он приходит через время T, то расстояние до объекта будет L = T * v / 2, где v – скорость звука в воздухе. Скорость звука примерно на 6 порядков меньше скорости света (примерно 300 метров в секунду, против 300 000 километров в секунду). Точное значение скорости звука зависит от многих факторов, например, от атмосферного давления. Лучше всего это значение вычислять при калибровке прибора. Но в данном случае точные измерения были не нужны, я принял скорость звука за константу 343.2 м/с.
Принципиальная схема получилась такой:
При передаче сигнала в первичной обмотке трансформатора с помощью ключа на транзисторе VT2 формируются импульсы с частотой повторения 40 кГц. Питается первичная обмотка напряжением 12 В через ограничительный резистор R16. Через разъем XP2 к вторичной обмотке трансформатора подключается датчик. Удобно, что датчики продаются сразу с разъемами. Коэффициент трансформации 1:10, номинальная индуктивность вторичной обмотки, куда подключен датчик, 8 мГн.
Приемный канал подключен напрямую к датчику, сигнал через резистор R1 поступает на диодный ограничитель VD1, который защищает схему от высокого напряжения – в момент передачи напряжение на датчике может достигать 150 В от пика до пика. С ограничителя сигнал поступает на усилительный каскад на транзисторе VT1, который усиливает сигнал примерно в 50 раз. Дальше сигнал поступает на полосовой фильтр.
Кроме фильтрации сигнала, требуется его усиление, поэтому лучше всего подходит полосовой MFB-фильтр (Multiple FeedBack filter). Здесь он состоит из двух каскадов и выполнен на сдвоенном ОУ U1. От ОУ требуется довольно высокое усиление на рабочей частоте 40 кГц, поэтому ОУ должен быть довольно быстрым. Хорошо подходит знакомый всем аудиофилам ОУ NE5532. Ниже показана АЧХ фильтра: для первого каскада – синим цветом, общая для двух каскадов – желтым. Видно, что каждый каскад фильтра обладает усилением около 20 дБ (10 раз).
Особенность фильтра – его каскады имеют несколько разную центральную частоту. В результате на АЧХ в районе рабочей частоты образуется небольшое плато. Сделано это для того, чтобы уменьшить чувствительность схемы к разбросу компонентов. Резисторы обычно имеют разброс 5% (сейчас практически по той же цене есть и 1%), но керамические SMD-конденсаторы чаще всего имеют разброс 10%. Ниже показана АЧХ фильтра при отклонении всех конденсаторов вверх и вниз на 10%.
Как видно, на рабочей частоте 40 кГц коэффициент передачи фильтра практически не меняется. Если бы оба каскада были настроены на одну частоту, изменение бы составило порядка 10 дБ. Скомпенсировать это дополнительным усилением нельзя, потому что избыточное усиление приводит к ложным срабатываниям датчика.
С выхода фильтра сигнал подается на детектор с удвоением напряжения, выполненный на диодной сборке VD3. Затем на транзисторный ключ VT3, с выхода которого поступает на вход захвата таймера 1 микроконтроллера.
Ниже показаны осциллограммы, снятые при работе датчика. Мой осциллограф не позволяет увидеть сразу несколько сигналов. Поэтому я использовал режим внешней синхронизации, запуск производился по началу сигнала накачки. Все сигналы смотрел по очереди, фотографировал экран осциллографа, затем совмещал картинки.
Вверху – импульсы с выхода микроконтроллера, которые управляют ключом первичной обмотки трансформатора. Внизу – напряжение на вторичной обмотке трансформатора (напряжение на датчике). Видно, что его размах около 150 В, а колебания долго затухают после окончания сигнала накачки. Развертка 0.1 мс на деление.
Увидеть отраженный сигнал в таком масштабе невозможно, так как он очень маленький. Его можно рассмотреть только на выходе приемного тракта после усиления и фильтрации.
Вверху видна серия импульсов накачки, которые слились в один импульс, потому что здесь развертка более медленная (1 мс на деление). Ниже показан сигнал на выходе фильтра. Видно, что приемный тракт находится в ограничении еще на протяжении 1.5 мс после окончания сигнала накачки. Далее следует промежуток относительной тишины, а через 85 мс после начала сигнала накачки виден отраженный импульс. Расстояние до препятствия при этом составляет примерно 1.5 м. В самом низу – сигнал после детектора и транзисторного ключа. Этот сигнал подается на вход захвата микроконтроллера.
При меньшем расстоянии до объекта (примерно 0.7 м) сигналы выглядят так:
Часто отраженные сигналы попадают на датчик разными путями, в результате наблюдается серия импульсов. Программа реагирует только на первый импульс, т.е. на ближайшее препятствие.
Видел забавный лайфхак для таких датчиков: используют рупор, вырезанный из пластиковой бутылки. Диаметр горлышка хорошо подходит к диаметру датчика. При этом дальность работы датчика увеличивается. Действительно, эффект есть, но конкретных замеров не делал, это затруднительно в условиях комнаты.
Предполагалось, что датчики уровня будут соединяться в сеть. В качестве интерфейса был выбран RS-485, для этого к выводам UART микроконтроллера подключена микросхема приемопередатчика U2. Для задания адреса отдельного датчика в сети служит DIP-переключатель S1. Используется протокол Wake. Сеть датчиков через преобразователь USB/RS-485 может быть подключена к компьютеру, который сможет считывать показания и индицировать их. Для этого написал специальную утилиту для компьютера:
В качестве местной индикации используются 3 светодиода (низкий уровень, нормальный, высокий) и бипер, который сигнализирует превышение уровня.
На схеме есть разъем XP1, подписанный как C-SENSOR. Он задумывался как второй канал измерителя уровня – емкостной. Но так и не был реализован.
Печатная плата разрабатывалась под корпус от электрической соединительной коробки. Плата получилась двухсторонней, была заказана на производстве.
Одним из ключевых компонентов схемы является трансформатор. Это моточное изделие, а они всегда представляют проблему при производстве электроники. К счастью, специальные трансформаторы для работы именно с этими датчиками тоже нашлись на Aliexpress. Они имеют подстроечный сердечник, что дает пределы регулировки индуктивности примерно от 5 до 11 мГн.
Для удобства разводки сети использованы разъемы RJ-11, которые накалываются на телефонный провод. Питание подается через эти же разъемы. Потребляемый ток здесь небольшой (примерно 30 мА), но в случае длинной линии лучше было бы использовать RJ-45 и компьютерный сетевой кабель, где для питания можно запараллелить несколько жил. На плате разведены два разъема RJ, соединенные параллельно, чтобы датчики можно было включать цепочкой. Никаких соединений проводов при монтаже сети тогда делать не требуется.
При проверке датчика на объекте выявилась проблема, про которую заранее никто не подумал. Если уровень подбирался слишком близко к датчику, он переставал работать. И это состояние никак не отличается от того, когда уровень ниже предела работы датчика. При нулевом расстоянии, как и при бесконечном, на выходе канала приема в точности одинаковая картина:
Поэтому датчик был забракован. Все остались в минусе – заказчик впустую потратился на детали и изготовление платы, я впустую потратил время. А уровень, как и много лет до этого, продолжили измерять тётки, тыкая в резервуар палкой.
Но обзор не про это, способы измерения уровня для этой конкретной задачи обсуждать смысла нет. Обзор — про реализацию УЗ измерителя расстояния на базе датчиков для парктроника, которому может найтись какое-то применение.
Попросили сделать какой-нибудь датчик уровня для сыпучих материалов. Очевидным решением было использование принципа ультразвукового дальномера. Тем более, с датчиками сейчас проблем нет: на Aliexpress широко представлены датчики для автомобильных парктроников.
Для начала изучил доступные схемы готовых решений. Все они довольно похожи. Датчик питается через трансформатор, вместе с вторичной обмоткой которого образует колебательный контур. В качестве емкости выступает емкость самого датчика, плюс паразитная емкость кабеля. Трансформатор обычно имеет подстройку, что позволяет настраивать контур точно на рабочую частоту, обычно это 40 кГц. Приемный канал содержит усилитель, полосовой фильтр, настроенный на частоту 40 кГц, и детектор. Дальше сигнал обрабатывается микроконтроллером. Им же генерируется сигнал накачки.
Именно по такой структуре и решил строить датчик. Сигнал накачки датчика формирует таймер 0 микроконтроллера ATmega48. Этот сигнал обычно короткий, я выбрал 7 периодов рабочей частоты 40 кГц. Общая длительность пачки импульсов – 175 мкс. Эта длительность формируется с помощью таймера 1. Поскольку датчик вместе с обмоткой трансформатора образует колебательную систему с достаточно высокой добротностью, для затухания колебаний требуется некоторое время. Поэтому таймер 1 после формирования длительности сигнала накачки формирует мертвое время порядка 1500 мкс. В это время приемный канал перегружен затухающими колебаниями на датчике, поэтому входной сигнал игнорируется. После окончания мертвого времени начинается ожидание отраженного импульса. Измерение интервала производится путем захвата значения таймера 1 входным импульсом. Если он приходит через время T, то расстояние до объекта будет L = T * v / 2, где v – скорость звука в воздухе. Скорость звука примерно на 6 порядков меньше скорости света (примерно 300 метров в секунду, против 300 000 километров в секунду). Точное значение скорости звука зависит от многих факторов, например, от атмосферного давления. Лучше всего это значение вычислять при калибровке прибора. Но в данном случае точные измерения были не нужны, я принял скорость звука за константу 343.2 м/с.
Принципиальная схема получилась такой:
При передаче сигнала в первичной обмотке трансформатора с помощью ключа на транзисторе VT2 формируются импульсы с частотой повторения 40 кГц. Питается первичная обмотка напряжением 12 В через ограничительный резистор R16. Через разъем XP2 к вторичной обмотке трансформатора подключается датчик. Удобно, что датчики продаются сразу с разъемами. Коэффициент трансформации 1:10, номинальная индуктивность вторичной обмотки, куда подключен датчик, 8 мГн.
Приемный канал подключен напрямую к датчику, сигнал через резистор R1 поступает на диодный ограничитель VD1, который защищает схему от высокого напряжения – в момент передачи напряжение на датчике может достигать 150 В от пика до пика. С ограничителя сигнал поступает на усилительный каскад на транзисторе VT1, который усиливает сигнал примерно в 50 раз. Дальше сигнал поступает на полосовой фильтр.
Кроме фильтрации сигнала, требуется его усиление, поэтому лучше всего подходит полосовой MFB-фильтр (Multiple FeedBack filter). Здесь он состоит из двух каскадов и выполнен на сдвоенном ОУ U1. От ОУ требуется довольно высокое усиление на рабочей частоте 40 кГц, поэтому ОУ должен быть довольно быстрым. Хорошо подходит знакомый всем аудиофилам ОУ NE5532. Ниже показана АЧХ фильтра: для первого каскада – синим цветом, общая для двух каскадов – желтым. Видно, что каждый каскад фильтра обладает усилением около 20 дБ (10 раз).
Особенность фильтра – его каскады имеют несколько разную центральную частоту. В результате на АЧХ в районе рабочей частоты образуется небольшое плато. Сделано это для того, чтобы уменьшить чувствительность схемы к разбросу компонентов. Резисторы обычно имеют разброс 5% (сейчас практически по той же цене есть и 1%), но керамические SMD-конденсаторы чаще всего имеют разброс 10%. Ниже показана АЧХ фильтра при отклонении всех конденсаторов вверх и вниз на 10%.
Как видно, на рабочей частоте 40 кГц коэффициент передачи фильтра практически не меняется. Если бы оба каскада были настроены на одну частоту, изменение бы составило порядка 10 дБ. Скомпенсировать это дополнительным усилением нельзя, потому что избыточное усиление приводит к ложным срабатываниям датчика.
С выхода фильтра сигнал подается на детектор с удвоением напряжения, выполненный на диодной сборке VD3. Затем на транзисторный ключ VT3, с выхода которого поступает на вход захвата таймера 1 микроконтроллера.
Ниже показаны осциллограммы, снятые при работе датчика. Мой осциллограф не позволяет увидеть сразу несколько сигналов. Поэтому я использовал режим внешней синхронизации, запуск производился по началу сигнала накачки. Все сигналы смотрел по очереди, фотографировал экран осциллографа, затем совмещал картинки.
Вверху – импульсы с выхода микроконтроллера, которые управляют ключом первичной обмотки трансформатора. Внизу – напряжение на вторичной обмотке трансформатора (напряжение на датчике). Видно, что его размах около 150 В, а колебания долго затухают после окончания сигнала накачки. Развертка 0.1 мс на деление.
Увидеть отраженный сигнал в таком масштабе невозможно, так как он очень маленький. Его можно рассмотреть только на выходе приемного тракта после усиления и фильтрации.
Вверху видна серия импульсов накачки, которые слились в один импульс, потому что здесь развертка более медленная (1 мс на деление). Ниже показан сигнал на выходе фильтра. Видно, что приемный тракт находится в ограничении еще на протяжении 1.5 мс после окончания сигнала накачки. Далее следует промежуток относительной тишины, а через 85 мс после начала сигнала накачки виден отраженный импульс. Расстояние до препятствия при этом составляет примерно 1.5 м. В самом низу – сигнал после детектора и транзисторного ключа. Этот сигнал подается на вход захвата микроконтроллера.
При меньшем расстоянии до объекта (примерно 0.7 м) сигналы выглядят так:
Часто отраженные сигналы попадают на датчик разными путями, в результате наблюдается серия импульсов. Программа реагирует только на первый импульс, т.е. на ближайшее препятствие.
Видел забавный лайфхак для таких датчиков: используют рупор, вырезанный из пластиковой бутылки. Диаметр горлышка хорошо подходит к диаметру датчика. При этом дальность работы датчика увеличивается. Действительно, эффект есть, но конкретных замеров не делал, это затруднительно в условиях комнаты.
Предполагалось, что датчики уровня будут соединяться в сеть. В качестве интерфейса был выбран RS-485, для этого к выводам UART микроконтроллера подключена микросхема приемопередатчика U2. Для задания адреса отдельного датчика в сети служит DIP-переключатель S1. Используется протокол Wake. Сеть датчиков через преобразователь USB/RS-485 может быть подключена к компьютеру, который сможет считывать показания и индицировать их. Для этого написал специальную утилиту для компьютера:
В качестве местной индикации используются 3 светодиода (низкий уровень, нормальный, высокий) и бипер, который сигнализирует превышение уровня.
На схеме есть разъем XP1, подписанный как C-SENSOR. Он задумывался как второй канал измерителя уровня – емкостной. Но так и не был реализован.
Печатная плата разрабатывалась под корпус от электрической соединительной коробки. Плата получилась двухсторонней, была заказана на производстве.
Одним из ключевых компонентов схемы является трансформатор. Это моточное изделие, а они всегда представляют проблему при производстве электроники. К счастью, специальные трансформаторы для работы именно с этими датчиками тоже нашлись на Aliexpress. Они имеют подстроечный сердечник, что дает пределы регулировки индуктивности примерно от 5 до 11 мГн.
Для удобства разводки сети использованы разъемы RJ-11, которые накалываются на телефонный провод. Питание подается через эти же разъемы. Потребляемый ток здесь небольшой (примерно 30 мА), но в случае длинной линии лучше было бы использовать RJ-45 и компьютерный сетевой кабель, где для питания можно запараллелить несколько жил. На плате разведены два разъема RJ, соединенные параллельно, чтобы датчики можно было включать цепочкой. Никаких соединений проводов при монтаже сети тогда делать не требуется.
При проверке датчика на объекте выявилась проблема, про которую заранее никто не подумал. Если уровень подбирался слишком близко к датчику, он переставал работать. И это состояние никак не отличается от того, когда уровень ниже предела работы датчика. При нулевом расстоянии, как и при бесконечном, на выходе канала приема в точности одинаковая картина:
Поэтому датчик был забракован. Все остались в минусе – заказчик впустую потратился на детали и изготовление платы, я впустую потратил время. А уровень, как и много лет до этого, продолжили измерять тётки, тыкая в резервуар палкой.
Но обзор не про это, способы измерения уровня для этой конкретной задачи обсуждать смысла нет. Обзор — про реализацию УЗ измерителя расстояния на базе датчиков для парктроника, которому может найтись какое-то применение.
Самые обсуждаемые обзоры
+72 |
3394
139
|
+51 |
3619
66
|
+30 |
2589
49
|
+38 |
2965
41
|
+55 |
2065
37
|
Ну Вы-то уже забыли, а для остальных эта задача свежая и новая, людям хочется поделиться своим мнением. Это нормально.
Но когда это останавливало коллективный разум…
излучателей (подобранные по частоте, кстати) на тушинском — митинском продавали. для всяких автомобильных сигнализаций, без микроконтроллера естественно по тем временам. Нижнего порога нет ( почти). даже ( с микроконтроллером) можно скорость изменения уровня отследить. Задержки ( возможно, с рупорами) не понадобилось бы подбирать. Продавалось и несколько готовых конструкций, у меня даже где-то валяется объемный датчик для салона легковушки ( 93...96 год).
При заполнении «сыпучий материал» поднимал бы площадку и геркон замыкался.
Есть ощущение слишком поспешного решения отказаться от дивайса.
Просто както обидно — работа сделана и невостребованна, ну зато опытом поделились — может кому пригодится.
То что Вы ее не смогли решить, не значит что датчики плохие…
у меня на машине на заднем бампере стоят 4 такие с 2010 года, плата где-то в багажнике… сам тогда ставил, исправно пищит и показывает дистанцию уже 14 лет…
показывает минимум 19-20см.
подцепил датчик с разнесенными излучателем-приемником (HC-SR04) — минимум 2-3см.
Не в ваш адрес. Просто brainstorming
После драки кулаками не машут, но логично было бы предложить тогда заказчику небольшую доработку, так и деньги/время бы не пропали, и халтурка продлилась бы поболе.
А нельзя было датчик подальше поставить, чтобы максимальный уровень был в пределах уверенной работы датчика?
Как можно было сделать — я не могу обсуждать. Потому что ничего про объект не знаю. Сказали, что датчик не подходит и будут продолжать измерять палкой — вот вся информация.
Зато получен ценный урок — не связываться со всякими барыгами и жлобами.
P.S. За обзор спасибо. Прочитал с удовольствием.
Потом вроде вакансии появлялись, но зарплаты уже не очень интересны были.
www.binmaster.com/ll-100-laser-level-sensor-160-ft-maximum.html
И недописано тут имя заказчика. А мне кажется, что автору сильно хотелось его опубличить, но в силу традиционного воспитания — постеснялся.
=====
А прикол потому что если вдуматься, то мы видим: аналоговый осциллограф + микроконтроллерная разработка + предварительное исследование + заказ современной смд платы + программа для ПК. и как-то неубедительно про нежелание доработать. Все умею, но фот фиг вам ( заказчикам). Не хочу и не буду!!! Л.И. — не обижайтесь пожалуйста! Я с уважением к Вашей позиции.
Да, я не очень поверю в то, что Л.И. не задал заказчику вопрос про минимальное расстояние, ведь это очевидно, у любого датчика оно есть (как и максимальное). Поэтому, возможно, никакого заказчика и не было, а просто было интересно разобраться с вопросом УЗ датчиков.
Заказ плат в Китае еще недавно никаких проблем не представлял, до 100х100 стоили «копейки». Здесь же примерно 70х70, то есть, укладываемся. Про осциллограф спорили уже неоднократно, но тут хотя бы наглядно видно, чем цифровой удобней.
Задавать вопросы в начале работы было бессмысленно, так как заказчик сам мало что понимал о задаче. Лично у меня не было и нет никакого интереса к УЗ датчикам, потому что применения для них дома я не вижу.
Размер платы действительно 70х70 мм, заказывалась она в Минске на заводе «Луч», что примено в 10 раз дороже, чем в Китае. Цифровой осциллограф тут был бы удобней, но таких случаев не так много. Покупать его — это не с моей зарплатой.
Что именно удивляет в ходе разработки — не понимаю. Не зная особенностей задачи, я считал, что все получился, вот и сделал эту плату. Но когда оказалось, что она не подходит и требуются какие-то другие решения, то те небольшие деньги, которые можно было получить, никак не соответствовали дальнейшим изысканиям. Целесообразней было работу прекратить и не тратить больше время.
Вообще, этот обзор про УЗ датчик, а не про решаемую задачу. Почему все на ней зациклились — не понимаю.
PS. Жаль, что Ваши проекты на telesys.ru более недоступны.
может проще было взять парктроник на 4 датчика — протокол уже давно открыт…
Когда я иду к стоматологу, то жалюсь на проблемы с зубом. И плачу за посещения, медикаменты, процедуры. Либо могу сразу заявить «Мне нужно вырвать этот зуб». Будет быстро и дешево. Ну а то, что его можно было подлечить — не проблемы хирурга.
Например — HCSR04.
Даже компенсация температуры воздуха была — github.com/enjoyneering/HCSR04
https://aliexpress.com/item/1005007518573060.html
вполне работает за свои деньги…
но в остальном это теже самые датчики, просто с готовой обвязкой.
так зато плату делать ненужно...?
с минимальной дальностью у него сильно лучше. у него с физической защитой никак.
и как ее делать — хороший вопрос.
если нацепить на него скажем пленку — он будет показывать расстояние до этой самой пленки (или минимальное).
почему не 0?
При длине волны порядка см эффект будет небольшой. Рупор хорошо работает когда длина волны хотя бы сравнима с его размерами.
Если честно, я с поста вообще офигел… «я тут чет сделал и ипись оно колом сами виноваты что не работает»…
Да еще и хвастаться «вот как умею».
PS А в общем случае инженер обычно решает задачу. А не развлекается за чужой счет.
Когда-то давно на фирме, где я работал, пытались сделать точный УЗ-дальномер со всякими нониусными методами. Но тоже не довели проект до конца.
Еще можно фазу отраженного сигнала ловить для повышения точности, там получается 1 период 7,5 мм и по фазе можно оценить кратность этим миллиметрам теоретически в некоторых идеальных условиях.
было бы интересно увидеть сигнал до полосового фильтра (это на будущее)
непонятно почему не использовали стандартный модуль из ардуноконструктора (тот где два динамика).
И где ещё можно таково вот как у вас посмотреть чтоб и схема была и осел?