В статье я расскажу о том, как я делал лазерный дальномер и о принципе его работы. Сразу отмечу, что конструкция представляет собой макет, и ее нельзя использовать для практического применения. Делалась она только для того, чтобы убедится в том, что фазовый дальномер реально собрать самому.
Теория
Часто приходится встречать мнение, что с помощью лазера расстояние измеряют только путем прямого измерения времени «полета» лазерного импульса от лазера до отражающего объекта и обратно. На самом деле, этот метод (его называют импульсным или времяпролетным, TOF) применяют в основном в тех случаях, когда расстояния до нужного объекта достаточно велики (>100м). Так как скорость света очень велика, то за один импульс лазера достаточно сложно с большой точностью измерить время пролета света, и следовательно, расстояние. Свет проходит 1 метр примерно за 3.3 нс, так что точность измерения времени должна быть наносекундная, хотя точность измерения расстояния при этом все равно будет составлять десятки сантиметров. Для измерения временных интервалов с такой точностью используют ПЛИС и специализированные микросхемы.
Однако существуют и другие лазерные методы изменения расстояния, одним из них является фазовый. В этом методе, в отличие от предыдущего, лазер работает постоянно, но его излучение амплитудно модулируется сигналом определенной частоты (обычно это частоты меньше 500МГц). Отмечу, что длина волны лазера при этом остается неизменной (она находится в пределах 500 — 1100 нм).
Отраженное от объекта излучение принимается фотоприемником, и его фаза сравнивается с фазой опорного сигнала — от лазера. Наличие задержки при распространении волны создает сдвиг фаз, который и измеряется дальномером.
Расстояние определяется по формуле:
Где с — скорость света, f — частота модуляции лазера, фи — фазовый сдвиг.
Эта формула справедлива только в том случае, если расстояние до объекта меньше половины длины волны модулирующего сигнала, которая равна с / 2f.
Если частота модуляции равна 10МГц, то измеряемое расстояние может доходить до 15 метров, и при изменении расстояния от 0 до 15 метров разность фаз будет меняться от 0 до 360 градусов. Изменение сдвига фаз на 1 градус в таком случае соответствует перемещению объекта примерно на 4 см.
При превышении этого расстояния возникает неоднозначность — невозможно определить, сколько периодов волны укладывается в измеряемом расстоянии. Для разрешения неоднозначности частоту модуляции лазера переключают, после чего решают получившуюся систему уравнений.
Самый простой случай — использование двух частот, на низкой приблизительно определяют расстояние до объекта (но максимальное расстояние все равно ограничено), на высокой определяют расстояние с нужной точностью — при одинаковой точности измерения фазового сдвига, при использовании высокой частоты точность измерения расстояния будет заметно выше.
Так как существуют относительно простые способы измерять фазовый сдвиг с высокой точностью, то точность измерения расстояния в таких дальномерах может доходить до 0.5 мм. Именно фазовый принцип используется в дальномерах, требующих большой точности измерения — геодезических дальномерах, лазерных рулетках, сканирующих дальномерах, устанавливаемых на роботах.
Однако у метода есть и недостатки — мощность излучения постоянно работающего лазера заметно меньше, чем у импульсного лазера, что не позволяет использовать фазовые дальномеры для измерения больших расстояний. Кроме того, измерение фазы с нужной точностью может занимать определенное время, что ограничивает быстродействие прибора.
Наиболее важный процесс в таком дальномере — это измерение разности фаз сигналов, которая и определяет точность измерения расстояния. Существуют различные способы измерения разности фаз, как аналоговые, так и цифровые. Аналоговые значительно проще, цифровые дают большую точность. При этом цифровыми методами измерить разность фаз высокочастотных сигналов сложнее — временная задержка между сигналами измеряется наносекундами (эта задержка возникает также, как и в импульсном дальномере).
Для того, чтобы упростить задачу, используют гетеродинное преобразование сигналов — сигналы от фотоприемника и лазера по отдельности смешивают с сигналом близкой частоты, который формируется дополнительным генератором — гетеродином. Частоты модулирующего сигнала и гетеродина различаются на килогерцы или единицы мегагерц. Из полученных сигналов при помощи ФНЧ выделяют сигналы разностной частоты.
Пример структурной схемы дальномера с гетеродином. М — генератор сигнала модуляции лазера, Г — гетеродин.
Разность фаз сигналов в таком преобразовании не изменяется. После этого разность фаз полученных низкочастотных сигналов измерить цифровыми методами значительно проще — можно легко оцифровать сигналы низкоскоростным АЦП, или измерить задержку между сигналами (при понижении частоты она заметно увеличивается) при помощи счетчика. Оба метода достаточно просто реализовать на микроконтроллере.
Есть и другой способ измерения разности фаз — цифровое синхронное детектирование. Если частота модулирующего сигнала не сильно велика (меньше 15 МГц), то такой сигнал можно оцифровать высокоскоростным АЦП, синхронизированным с сигналом модуляции лазера. Из теоремы Котельникова следует, что частота дискретизации при этом должна быть в два раза выше частоты модуляции лазера. Однако, так как оцифровывается узкополосный сигнал (кроме частоты модуляции, других сигналов на входе АЦП нет), то можно использовать метод субдискретизации, благодаря которому частоту дискретизации АЦП можно заметно снизить — до единиц мегагерц. Понятно, что аналоговая часть дальномера при этом упрощается.
Более подробно (с всеми нужными формулами) этот метод рассматривается здесь (на английском) и здесь (на русском).
В первой статье указывается, что если частота дискретизации сигнала (fsp) связана с частотой модуляции (fo) следующим соотношением:
где p — целое число, то процесс вычисления фазы значительно упрощается.
Достаточно взять N выборок сигнала X[i], после чего разность фаз можно вычислить по следующим формулам:
Отмечу, что оба вышеуказанных метода часто применяются вместе — низкочастотные сигналы подаются напрямую на АЦП, высокочастотные переносятся в область более низких частот гетеродинным мотодом, и также подаются на АЦП.
Именно второй вариант фазометра, с использованием частоты модуляции 10МГц я и решил реализовать в своем макете дальномера.
Практика
Структурная схема моего дальномера:
Фактически, вся конструкция состоит из 3 частей — отладочной платы с микроконтроллером, усилителя сигнала лазера с самим лазером, и фотоприемника с усилителем и фильтром.
В вышеописанной теории предполагалось, что излучение лазера модулируется синусоидальным сигналом. Сформировать такой сигнал частотой 10Мгц с использованием контроллера непросто, поэтому в своей конструкции я подаю на лазер меандр частотой 10МГц. После усиления сигнала с фотоприемника от полученного сигнала отсекаются лишние гармоники полосовым LC-фильтром, настроенным на частоту 10МГц, в результате чего на выходе фильтра возникает сигнал, очень близкий к синусоидальному.
Схема аналоговой части (усилителя лазера и приемной части):
Схема была взята из проекта лазерной связи Ronja, описание на русском. В этом проекте как раз реализована передача данных со скоростью 10Mbit, что соответствует выбранной частоте модуляции.
Как видно из схемы — усилитель мощности для лазера простейший, собран на микросхеме 74HC04 (содержит 6 инверторов). Включение микросхемы не совсем корректное, но оно работает. Ток через лазер ограничивается резисторами (тоже не самое лучшее решение). Напряжение питания 5В для усилителя берется с отладочной платы.
Для того, чтобы сигнал с усилителя не наводился на остальную часть схемы, корпус усилителя сделан металлическим, все провода экранированы.
Сам лазер (красного цвета) взят из пишущего DVD-привода, его мощность можно установить достаточно высокой, и он гарантированно будет работать на частоте 10МГц.
Приемник состоит из фотодиода и усилителя, собранного на полевом транзисторе и микросхеме-высокоскоростном усилителе. Так как с увеличением расстояния освещенность фотодиода сильно падает, то усиление должно быть достаточно большим (в этой схеме оно примерно равно 4000). Кроме того, с ростом частоты заметно падает сигнал на выходе фотодиода (сказывается его емкость). Отмечу, что усилитель в данной конструкции — важнейшая и наиболее капризная часть. Как оказалось, его усиления явно не хватает. Изначально я предполагал, что коэффициент усиления можно будет менять (чтобы ослаблять сигнал при его слишком большой величине), используемая схема позволяет это делать, меняя напряжение на втором затворе транзистора. Однако оказалось, что при изменении усиления достаточно сильно изменяется вносимый усилителем сдвиг фаз, что ухудшает точность измерения расстояния, так что пришлось установить коэффициент усиления на максимум, подавая на затвор транзистора напряжение 3В с батарейки.
Приемнику для работы требуется напряжение 12В, так что для его питания приходится использовать отдельный блок питания.
Усилитель очень чувствителен к внешним наводкам, так что он тоже должен быть экранированным. Я взял готовый корпус от нерабочего оптического датчика, и разместил усилитель в нем (белая полоска — фольга для дополнительного экранирования фотодиода):
Отмечу, что наводка сигнала от лазера на приемник довольно сильно ухудшает точность измерения разности фаз, так что нужно контролировать, чтобы такая наводка отсутствовала.
LC-фильтр, используемый в дальномере — взят от приемника. Так как фильтр отсекает постоянную составляющую сигнала, а АЦП отрицательные сигналы не воспринимает, то ее приходится добавлять при помощи резисторного делителя R15, R16. Постоянное напряжение, подаваемое на делитель, берется c отладочной платы (VCC).
Отладочная плата — STM32F4-DISCOVERY. Ее выбрал потому, что для формирования двух достаточно различающихся частот нужен генератор достаточно высокой частоты (PLL STM32F4 может давать частоты больше 100МГц).
В формуле, связывающей частоту модуляции и дискретизации, коэффициент «p» я принял равным 6, так что при частоте модуляции 10МГц частота дискретизации должна быть 1.6МГц.
Для формирования частоты 10МГц используется таймер TIM2, работающий в режиме формирования ШИМ сигнала. При системной частоте 160МГц его период — 16 «тиков».
АЦП получает запросы на запуск от таймера TIM2. Для формирования частоты 1.6МГц его период — 100 «тиков». Все данные от АЦП при помощи DMA сохраняются в массив, размер которого должен быть равен двойке в N степени. Оба таймера, АЦП и DMA запускаются один раз при включении и больше уже не отключаются. Таким образом, так как таймеры тактируются от одного источника, а одному периоду измеряемого сигнала соответствуют четыре выборки данных, получается, что в массив всегда попадет целое число периодов сигнала.
Так как останавливать DMA не желательно (это упрощает управление захватом данных), при заполнении первой половины массива генерируется прерывание. Обнаружив, что половина массива заполнена, контроллер копирует ее содержимое в другой массив (в целях упрощения программы вторая половина основного массива при этом не используется). После этого полученные данные обрабатываются — вычисляется средняя амплитуда и фаза сигнала, проводится пересчет фазового сдвига в расстояние.
Полученные величины выводятся на ЖК индикатор от кассового аппарата, также подключенный к отладочной плате.
Дальномер должен знать где находится начало отсчета. Для его калибровки при включении на «нулевом» расстоянии от дальномера устанавливается объект, после чего на отладочной плате нужно нажать кнопку, при этом измеренное значение дальности записывается в память, после чего это значение будет вычитаться из измеренной дальномером дальности.
Как я уже отмечал выше, реализовать автоматическое управление усилением не удалось. При этом изменение амплитуды принятого сигнала приводит к изменению фазовых сдвигов в усилителе, и следовательно, к дополнительным ошибкам.
Поэтому мне пришлось регулировать освещенность фотодиода при помощи механической заслонки, поворачиваемой сервоприводом — при слишком большой освещенности заслонка перекрывает световой поток. ШИМ сигнал для управления приводом формируется таймером TIM3.
Про оптику. Без нее дальномер невозможен. Ее конструкция хорошо видна на фотографиях ниже. Лазер находится внутри пластиковой трубки, установленной вертикально. В нее вставлена небольшая втулка с зеркальной призмой. Втулку можно поворачивать, поднимать и опускать, перемещая таким образом луч лазера. Так как я догадывался, что усиления не хватит, то для приема сигнала использовал крупную линзу Френеля.
Так так лазер, линза и фотодиод установлены соосно, то на близких расстояниях лазер закрывает от фотодиода собственный луч. Для компенсации этого эффекта я установил вторую линзу (лупа с оправой), хотя полностью эффект не устраняется, поэтому максимальный сигнал наблюдается на расстоянии примерно 50-70 см от лазера.
А вот и фотографии получившейся конструкции:
На индикаторе первое число — амплитуда в единицах АЦП, второе число — расстояние в сантиметрах от края доски.
Видео работы дальномера:
Дальность работы у получившегося дальномера вышла достаточно небольшая: 1,5-2 м в зависимости от коэффициента отражения объекта.
Для того, чтобы увеличить дальность, можно использовать специальный отражатель, на который нужно будет направлять луч лазера.
Для экспериментов я сделал линзовый отражатель, состоящий из линзы, в фокусе которой расположена матовая бумага. Такая конструкция отражает свет в ту же точку, откуда он был выпущен, правда, диаметр луча при этом увеличивается.
Фотография отражателя:
Использование отражателя:
Как видно, расстояние до отражателя — 6.4 метра (в реальности было примерно 6.3). Сигнал при этом возрастает настолько, что его приходится ослаблять, направляя луч лазера на край отражателя.
Точность получившегося дальномера — 1-2 сантиметра, что соответствует точности измерения сдвига фаз — 0,2-0,5 градуса. При этом, для достижения такой точности, данные приходится слишком долго усреднять — на одно измерение уходит 0.5 сек. Возможно, это связано с использованием PLL для формирования сигналов — у него довольно большой джиттер. Хотя я считаю, что для самодельного макета, аналоговая часть которого сделана довольно коряво, в котором присутствуют достаточно длинные провода, даже такая точность — довольно неплохо.
Отмечу, что я не смог найти в Интернете ни одного существующего проекта фазового дальномера (хотя бы со схемой конструкции), что и послужило причиной написать эту статью.
Программа контроллера: ссылка
Автор: iliasam
Почти два года прошло, а никто не похвалил! Спасибо автору статьи, дало много мыслей для своих разработок.
Действительно, столько лет прошло, а как будто никто и не читал, хотя статья реально интересная. Много кто пользуется, но мало кто задумывается как оно устроено на самом деле. Спасибо автору, часть окружающего мира стала ближе и понятней
Лучик света в стране где производят, как оказывается, не только понты.
Отличный проект! Обязательно почитаю и другие статьи.
“столько лет прошло, а как будто никто и не читал”
Ну так источник-то указан! Та на хабре и похвал хватало.