Урок 90
Часть 1
Датчик освещённости VL6180X
Сегодня мы познакомимся с датчиком, который измеряет освещённость. Это датчик VL6180X производителя ST Microelectronics.
Наряду с измерением освещённости датчик очень прекрасно измеряет и расстояния до объекта. Прекрасно, потому что используется для этого в нём современная технология измерения расстояния ST FlightSense, согласно которой измеряется время пролёта световых импульсов от передатчика к приемнику, а не как раньше — с помощью измерения интенсивности отражённого света. Но как видно из названия урока, мы будем использовать данный датчик только для измерения освещённости, так как измерение расстояний на бытовом уровне мало кого интересует, да и работа с измерением расстояния в данном датчике реализована не очень просто. Также диапазон измеряемых расстояний простирается максимум до 20 сантиметров, поэтому я пока не знаю, где это можно применить. Поэтому я пока не стал заморачиваться с этим. Хотя есть пример на сайте ST Microelectronics, где это всё реализовано и работает отлично. Так что если у вас есть желание, то можете поизучать самостоятельно.
Теперь по поводу измерения освещённости.
Микросхема VL6180X для этих целей имеет встроенный датчик освещённости (Ambient Light Sensor или ALS). Данный датчик работает в спектре, соответствующем спектру дневного освещения, что позволяет использовать данный датчик для многих целей. У меня была задумка использовать его для измерения силы света бытовых ламп, которые мы приобретаем для освещения определённых комнат. Как рассчитать силу света, зная расстояние до источника света и освещённость, я думаю знают многие. Пусть это приблизительно, но все равно это позволит нам неплохо судить о качестве ламп. Мы измеряем показание освещённости лампы, записываем его, Затем измеряем то же самое, только через какой-то определённый период, например через год и сравниваем эти показания, насколько они изменились, что позволит нам определить, насколько лампа стала светить слабее, так как обычно все лампы этим грешат. Но только какие-то больше, а какие-то меньше. И нас уже не будет волновать цветовая температура свечения лампы, она как правило не меняется, хотя по-хорошему длину волны тоже нужно учитывать, так как датчик работает всё-таки в определённом спектре и отклонение будет. Но это не важно. Нам же нужно изменение показаний, а не сравнение силы свечения лампы с холодным катодом и с тёплым.
Вообщем, вот это основная мотивация, побудившая меня к изучению данного датчика. Также ещё немаловажное применение — это измерение освещённости определённых участков помещения, так как существуют определённые нормы для этого и зачастую мы их не соблюдаем. Конечно, для этого существуют специальные приборы — люксометры, только вот если в люксометр поставят такой датчик, то я не думаю, что он будет стоить копейки. Да и боковое освещение данный датчик тоже неплохо учтёт, так как угол обзора его — составляет 42°.
Также датчик освещённости снабжён гибко программируемым диапазоном измерений. Достигается это с помощью установки коэффициента усиления, а также с помощью программируемого времени измерения (рекомендуемое — 100 милисекунд). Также можно программировать не только это время, но и время рассчета показаний. Наряду с этим существует ещё очень много настроек, с которыми мы познакомимся в процессе написания кода.
Вообщем, самые важные технические характеристики мы уже знаем. Остальные можно посмотреть в технической документации, которую любезно предоставляет производитель на своём официальном сайте.
Управление и работа с датчиком осуществляется с помощью шины I2C. Также имеются два программируемых вывода GPIO, как правило один из которых используется для отслеживания определенных прерываний, а второй — для выбора чипа, так как если мы подключим несколько датчиков, а адреса у них будут одинаковые, то без этого раздельно ими управлять не получится.
Данный датчик у меня имеется в виде оценочной платы X-NUCLEO-6180XA1, которая, хоть и стоит недёшево, но она очень неплохо сконфигурирована. Помимо датчика на ней находится четырёхразрядный светодиодный индикатор, подключенный с помощью микросхемы-преобразователя STMPE1600 и управляемый по интерфейсу I2C, что позволяет нам сэкономить очень немало ножек, так как датчик также управляется по этой же шине. С помощью данного индикатора мы можем в реальном времени следить за показаниями датчика, написав соответствующий код, что очень удобно, так как освобождает нас от подключения терминальных програм, что неудобно, если мы хотим измерить освещённость в не очень доступном месте. Я например беру повербанк, подключаю его коротким проводом Mini-USB к плате, на которой установлена оценочная плата и процесс измерения освещённости становится очень удобным. Также на оценочной плате установлен преобразователь уровней, так как датчик питается от 2,8 вольт, а уровни наших плат — 3,3 вольта. Помимо всего этого на плате имеются разъёмы для установки трёх сателлитов с такими же датчиками, управляемыми так же от той же платы, что позволяет отслеживать различные движения и жесты. Ну и ещё плата имеет удобный разъём типа Arduino UNO, позволяя подключить её ко многим современным отладочным средствам.
Данную плату расширения мы по старой традиции подключим к отладочной плате Nucleo STM32F401RE.
Получится вот такая незатейливая конструкция
Кстати, эта цифра уже показыает освещённость в люксах, которую я обеспечил с помощью лампы для того, чтобы сфотографировать нашу конструкцию.
Давайте немного отвлечёмся от теории и создадим проект. Проект мы создадим новый в проектогенераторе Cube MX, выбрав контроллер STM32F401RETx.
Включим тактирование от кварцевого резонатора, установленного в ST-Link
Подключим программатор
Некоторую отладочную и другую информацию мы будем пока отслеживать с помощью терминальной программы, поэтому включим USART2, который у нас работает через ST-Link
Также включим таймер, он нам нужен будет для многих целей
Ни и самое главное — I2C, так как практически всё исследуемое оборудование у нас работает именно через данную шину
Переопределим ножки на следующие, так как именно через них происходит управление через разъём Arduino
Также включим на выход ножку порта, отвечающего за упраление зелёным светодиодом
Теперь переходим в «Clock Configuration» и устанвим там следующие настройки частот (нажмите на картинку для увеличения изображения)
Переходим теперь в «Configuration» и настроим сначала шину I2C
Затем настроим USART
И настроим таймер приблизительно на частоту 1 килогерц (период 1 милисекунда)
Также для таймера включим прерывания
Вообще я ещё включал ножку для отслеживания внешних прерываний и настраивал её на фронт, но так этим и не воспользовался, поэтому мы этого делать не будем, хотя прерывания мы все равно в регистрах затем сконфигурируем.
Ну вот, вроде бы и всё с настройками.
Зайдём в настройки проекта, выберем там в качестве компилятора Кейл, а также присвоим проекту имя ALS_VL6180
Сохраним настройки, сгенерируем проект, откроем его в Keil, настроим программатор на авторезет и для оптимизации установим первый уровень
Попробуем, как всегда, собрать проект, и, если всё нормально, то начнём кодить.
Только кодить мы начнём уже в следующей части занятия, в которой мы создадим и настроим библиотеки для работы с микросхемой stmpe1600 и с четырёхразрядным светодиодным индикатором, который подключен от этой микросхемы.
Предыдущий урок Программирование МК STM32 Следующая часть
Техническая документация:
Документация на датчик VL6180X
Документация на микросхему STMPE1600
Руководство пользователя на оценочную плату X-NUCLEO-6180XA1
Отладочную плату можно приобрести здесь Nucleo STM32F401RE
Оценочную плату можно приобрести здесь X-NUCLEO-6180XA1
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
Добавить комментарий