Фильтр по тематике

Цифровой измеритель-сигнализатор уровня освещённости

Статья содержит описание принципа действия и схемы построения цифрового оптико-электронного устройства, позволяющего измерять уровень освещённости в общепринятых единицах – люксах (лк) – без какой-либо пользовательской калибровки. Помимо этого устройство обеспечивает возможность многоканальной сигнализации при переходе значения освещённости через задаваемые пользователем границы. Устройство может быть использовано в качестве измерителя уровня освещённости в жилых и производственных помещениях, на рабочих местах, при фото- и видеосъёмке, а также в качестве управляющего контроллера для автоматического управления системами освещения.

20.11.2015 329 0
Цифровой измеритель-сигнализатор уровня освещённости

Принцип действия и основные характеристики

В основе построения устройства лежит использование специализированного оптико-электронного цифрового датчика освещённости TSL2561, техническая информация о котором (datasheet) [1] доступна для загрузки с интернет-ресурса производителя [2].

Датчик TSL2561 интегрирует на кристалле два канала измерения интенсивности падающего излучения: канал 0 с откликом в широком участке спектра, включающем видимый и инфракрасный диапазоны, и канал 1 с откликом в более узком участке, включающем только инфракрасный диапазон. В каждом канале имеется свой первичный оптический датчик – фотодиод с соответствующим спектром отклика. Сигналы от фотодиодов каждого канала оцифровываются с помощью встроенных модулей АЦП, преобразование в которых запускается одновременно. Результаты АЦП в виде последовательных 16-разрядных слов данных могут быть выданы датчиком на внешнее устройство через последовательный интерфейс I2C. Выдача данных осуществляется с двойной буферизацией, чтобы гарантировать их целостность в случае, если запрос на чтение от внешнего устройства поступит до окончания текущего преобразования. Благодаря возможности программного задания коэффициента усиления аналоговых сигналов на входах АЦП и программного выбора времени аналого-цифрового преобразования динамический диапазон каждого из каналов датчика TSL2561 по входу составляет 1¼1 000 000. Для повышения помехоустойчивости датчик снабжён встроенным режекторным фильтром пульсаций уровня освещённости с частотами модуляции 50/60 Гц. Функциональная схема TSL2561 изображена на рисунке 1.


На рисунке 2 приведена частотная характеристика датчика TSL2561, представляющая собой зависимость нормированных откликов (выходных сигналов) фотодиодов обоих каналов датчика от длины волны падающего света. Нормирование откликов произведено по максимально возможному значению в канале 0, соответствующему длине волны около 650 нм.

Величина уровня освещённости в люксах (лк) падающего на датчик TSL2561 света не выдаётся им непосредственно, но может быть вычислена дополнительно по эмпирической формуле, использующей в качестве исходных данных значения с выходов АЦП обоих каналов датчика. Спектральная чувствительность и соотношение коэффициентов усиления каналов подобраны производителем датчика так, чтобы вычисление по указанной формуле в результате давало значение освещённости, максимально адаптированное к спектру чувствительности человеческого глаза. Вычисление уровня освещённости в люксах из исходных данных, поступающих от TSL2561, может быть возложено на управляющую программу микроконтроллера (МК) или персонального компьютера (ПК), к которому предполагается подключить датчик. Формула для вычисления приведена в технической информации [1]. Там же приводится и упрощённый алгоритмизированный вариант указанной формулы в виде готовой функции CalculateLux() на языке C. При использовании указанной формулы или функции для вычисления уровня освещённости в люксах никакой дополнительной калибровки устройства не требуется.

Датчик TSL2561 используется в измерителе в составе удобного для монтажа промышленного модуля-сборки Digital Light Sensor [3], поддерживающего стандарт конструктива Grove и содержащего помимо самого датчика стабилизатор питающего напряжения, цепи формирования сигналов последовательной шины I2C, используемой для передачи команд и данных, а также разъём питания и подключения по шине I2C к внешним устройствам. Внешний вид модуля показан на рисунке 3.

Функциональная схема всего устройства приведена на рисунке 4.

Измеритель состоит из центрального контроллера, который в качестве ведущего (master) устройства осуществляет обмен командами и данными по шине I2C с ведомым (slave) устройством – модулем Digital Light Sensor. Помимо этого, к центральному контроллеру подключены органы управления и индикации: кнопки, ЖКИ, светодиоды, звуковой излучатель. Центральный контроллер реализован на базе встраиваемого микроконтроллера (МК), выполняющего встроенную управляющую программу.

Измеритель имеет следующие потребительские характеристики:

  • Диапазон измеряемой освещённости – 0¼20 000 лк, разрешение – 1 лк. Значение верхней границы диапазона указано для солнечного света. Для света от других источников это значение может отличаться от указанного.
  • Напряжение питания – 4,5 В (батарея из трёх элементов по 1,5 В) или сетевой источник постоянного напря­жения 8¼15 В.
  • Потребляемый от источника питания ток – 100 мА.
  • Количество независимо программируемых выходов (каналов) сигнализации-управления – 3:
    • канал 1 – срабатывание (переход в активный уровень) при увеличении уровня освещённости выше заданного пользователем порога;
    • канал 2 – срабатывание (переход в активный уровень) при уменьшении уровня освещённости ниже заданного пользователем порога;
    • канал 3 – срабатывание (переход в активный уровень) при нахождении уровня освещённости в пределах некоторого диапазона, ограниченного заданными пользователем нижней и верхней границами.

Диапазон задания значения порога в каждом из каналов – 0¼25 000 лк, разрешение – 1 лк. Задаваемые значения хранятся в энергонезависимой памяти EEPROM. Ресурс EEPROM – не менее 500 000 циклов стирания-записи.

Тип выходов для всех каналов – логические уровни, активный уровень – высокий (+3,3 В), максимальный ток нагрузки каждого выхода – не более 12 мА.

Принципиальная схема и конструкция

Для аппаратной реализации устройства в качестве платформы был выбран недорогой микроконтроллерный модуль (отладочная плата) TE-TM4C123 [4] производства компании «Терраэлектроника». Модуль выполнен на основе МК TM4C123GH6PZI недавно анонсированного семейства TIVA компании Texas Instruments. Этот МК имеет процессорное ядро Cortex-M4, максимальную тактовую частоту 80 МГц, объём памяти FLASH – 256 К, SRAM – 32 К, EEPROM – 2 К и набор периферии, в который в числе прочего входят используемые в данном приложении блок 12-разрядного АЦП и 6 аппаратных интерфейсов I2C. Помимо МК модуль TE-TM4C123 также содержит набор периферийных узлов, необходимых для построения портативных устройств с традиционным пользовательским интерфейсом: цветной LCD-дисплей с диагональю 1,8² и разрешением 128 ´ 160 точек, четыре пользовательских светодиода и пять пользовательских кнопок. Все порты и линии ввода-вывода МК выведены на две линейки разъёмов на плате модуля. Программирование и отладка управляющей программы МК осуществляется с помощью встроенного в модуль JTAG-отладчика ICDI с внешним интерфейсом USB. Линейные размеры платы модуля составляют 111 ´ 54 мм. Внешний вид модуля TE-TM4C123 показан на рисунке 5, а его принципиальная схема в виде pdf-файла доступна для свободного скачивания в интернете [4]. Принципиальная схема всего устройства показана на рисунке 6.


Схема состоит из двух частей: модуль TE-TM4C123 (обведён на рисунке жирной рамкой) и внешние по отношению к нему цепи. Обозначения и нумерация элементов модуля TE-TM4C123 на рисунке соответствуют обозначениям и нумерации на его оригинальной принципиальной схеме. Номиналы пассивных элементов внутри модуля на схеме, представленной на рисунке 6, условно не обозначены. Также там не показаны цепи сброса и тактирования МК DD3, цепи и узлы периферии TE-TM4C123, не используемые в данном приложении, а также цепи JTAG-отладчика ICDI.

Обозначения и нумерация элементов внешних по отношению к модулю TE-TM4C123 цепей самостоятельны и никак не связаны с обозначениями и нумерацией элементов модуля.

Внешнее питающее напряжение поступает на вход первичного стабилизатора DA2 через диод VD1, что предотвращает последствия его подачи с неправильной полярностью. На выходе стабилизатора включена сборка VD2 из двух диодов Шоттки с малым прямым падением напряжения, развязывающая между собой выходное напряжение стабилизатора и напряжение батареи GB1 в случае её наличия. Таким образом, можно питать устройство от внешнего источника без риска разрядить батарею. Напряжение +5 В с выхода стабилизатора или +4,5 В от батареи через VD2 поступает на вход встроенного стабилизатора +3,3 В модуля TE-TM4C123. Напряжением с выхода этого стабилизатора питаются МК DD3, ЖКИ HG1 и аналоговый датчик температуры DA2. Этим же напряжением, снимаемым с контакта «3V3» разъёма модуля TE-TM4C123, питается модуль датчика освещённости Digital Light Sensor DA1. Предложенная схема питания позволяет использовать сигнализатор как в качестве портативного носимого устройства с автономным питанием, так и в качестве стационарного контроллера с внешним питанием и резервной батареей.

С помощью делителя R3–R5, C7 формируется контрольное измеряемое напряжение, равное одной трети напряжения питания. Оно подаётся на один из входов АЦП МК DD3. При работе устройства это напряжение периодически измеряется, его значение пересчитывается управляющей программой в вольты, умножается на три и выводится на ЖКИ. При этом в качестве опорного для АЦП служит напряжение питания МК +3,3 В. Таким образом, пользователь может постоянно контролировать степень разряда батареи. Помимо измерения напряжения питания АЦП с такой же периодичностью измеряет напряжение с выхода аналогового датчика температуры DA2, которое программа пересчитывает в градусы Цельсия и также выводит на ЖКИ. Заметим, что в данном приложении измерение температуры – просто бонус к основной функции устройства. Его реализация не влечёт никаких дополнительных затрат, поскольку датчик температуры LMT89DCK входит в набор предустановленной периферии модуля TE-TM4C123.

Резисторы R1 и R2 для шины I2C являются «подтягивающими» к плюсу питания. Хотя в модуле Digital Light Sensor на шине имеются свои «подтягивающие» резисторы сопротивлением 10 кОм, практика работы с устройством показала, что при задающей частоте 400 кГц шина I2C без дополнительных внешних резисторов может работать неустойчиво.

Управление измерителем осуществляется с помощью штатных кнопок SW3–SW6 модуля TE-TM4C123. Подключённый к модулю внешний звуковой пьезоизлучатель BQ1 «озвучивает» нажатия на кнопки, запись пользовательских констант в EEPROM, а также моменты срабатывания (смены уровней выходов) всех каналов сигнализации-управления. Текущий уровень в каждом канале индицируется соответствующим светодиодом VD5, VD7, VD8: активному (высокому) уровню соответствует горящий светодиод. Светодиод VD6 постоянно мигает с частотой около 1 Гц, указывая на нормальную работу управляющей программы.

В авторском варианте корпус для устройства не изготавливался, а разработка-отладка схемотехники и управляющей программы производилась на рабочем макете. Внешний вид макета устройства показан на рисунке 7.

Управляющая программа

Управляющая программа МК обеспечивает обмен командами/данными с модулем датчика Digital Light Sensor, обработку принятых от датчика результатов измерений, вычисление значения освещённости в люксах, вывод его на ЖКИ, сравнение его с заданными пользователем порогами срабатывания каналов, хранящимися в EEPROM, принятие решения по результатам этого сравнения, управление выходами каналов, опрос кнопок управления, формирование аудиосигналов, измерение напряжений с помощью АЦП, вычисление и вывод на ЖКИ значений температуры и напряжения питания, а также решает другие более мелкие задачи.

После включения питания и инициализации процессорного ядра и используемых в данном приложении периферийных узлов МК (аппаратный модуль I2C1, таймер системных сигналов времени SysTick, EEPROM) программа производит тестирование модуля Digital Light Sensor путём записи значения 03 в командный регистр REG_CTL датчика TSL2561 и последующего чтения этого регистра. Как сказано в технической информации [1], если чтение командного регистра возвращает то же самое значение 03, то можно считать, что цифровая часть датчика функционирует корректно. Результат чтения регистра REG_CTL программа выводит на ЖКИ. Затем программа производит инициализацию датчика TSL2561 модуля Digital Light Sensor, задавая с помощью команд управления его основные настройки: режим выполнения АЦП, длительность цикла АЦП, коэффициент аналогового усиления входных сигналов. Записываемые в соответствующие рабочие регистры TSL2561 значения сразу же читаются программой из датчика обратно и выводятся на ЖКИ. Таким образом, пользователь может визуально контролировать исправность датчика и результат его инициализации. Процесс инициализации длится несколько секунд и сопровождается звуковыми сигналами пьезоэлемента BQ1. Выведенный на ЖКИ набор значений регистров Digital Light Sensor, соответствующий исправному датчику и успешному завершению инициализации периферии МК, показан на рисунке 8а.

Обмен командами/данными МК с модулем датчика Digital Light Sensor осуществляется в программе с помощью функции записи N байт в ведомое устройство WR_N_byte_Slave_I2C() и функции чтения K байт из ведомого устройства RD_K_byte_Slave_I2C(). Указанные функции инициируют процесс обмена по шине I2C для аппаратного модуля I2C1 МК. Согласно описанию TSL2561 [1], чтение данных из него может осуществляться побайтно, пословно или блочно, то есть сразу всего массива данных. В нашем случае используется пословное чтение, реализуемое функцией READ_TSL2561_ADC_WORD().

После завершения инициализации модуля датчика Digital Light Sensor и периферии МК устройство автоматически переходит в основной рабочий режим, в котором осуществляется периодическое чтение из датчика результатов измерений обоих оптических каналов, вычисление из полученных данных значения уровня текущей освещённости в люксах и вывод его на ЖКИ в виде пятизначного числа крупным шрифтом в верхней строке экрана. Менее крупным шрифтом на ЖКИ выводится вспомогательная информация: значения результатов АЦП для обоих каналов (Ch0 = XXXXX, Ch1 = XXXXX), значение аналогового усиления датчика (Gain = XX), как показано на рисунке 8б.

В зависимости от текущего уровня освещённости аналоговое усиление адаптивно подстраивается программой под этот уровень, чтобы, пока это возможно, не допускать переполнения регистров результата АЦП. Если при минимальном усилении (Gain = 01) всё же происходит переполнение АЦП хотя бы в одном из оптических каналов, на ЖКИ выводится надпись «OVERFLOW», а отображаемое значение освещённости в люксах заменяется прочерками. Заметим, что датчик TSL2561 имеет аппаратный выход прерываний INT, который удобно было бы использовать для оповещения МК об окончании текущего преобразования. К сожалению, в модуле Digital Light Sensor этот выход датчика не выведен на разъём, поэтому в данном приложении управляющая программа просто производит чтение данных измерений из Digital Light Sensor каждые 500 мс. Периодичность преобразований в датчике при этом задана равной 400 мс. Поскольку в датчике реализована двойная буферизация выхода, полученные данные всегда достоверны.

Помимо основного рабочего режима в устройстве имеются ещё четыре вспомогательных режима индикации-задания пользовательских констант – порогов срабатывания каналов управления-сигнализации: порога максимума для канала 1 (константа MAX LIMIT), порога минимума для канала 2 (константа MIN LIMIT), порога максимума полосы для канала 3 (константа MAX LIMIT BAND), порога минимума полосы для канала 3 (константа MIN LIMIT BAND). Перемещения между всеми режимами осуществляется по кольцу с помощью кнопки SW3 «SEL». Измерение уровня освещённости во вспомогательных режимах устройство не осуществляет. При переходе в каждый из этих режимов на экране отображается название константы и её значение, выгруженное из EEPROM, о чём свидетельствует надпись «EEPROM» в нижней строке ЖКИ. Как только пользователь начинает модифицировать отображаемое значение константы, надпись «EEPROM» на экране заменяется надписью «Changed». Модификация отображаемых на ЖКИ значений порогов осуществляется с помощью кнопок SW5 «>» и SW6 «<». При однократном нажатии на кнопку SW5/SW6 значение увеличивается/уменьшается на единицу. Если нажать и удерживать нажатой кнопку SW5/SW6 больше одной секунды, то значение начнёт автоматически увеличиваться/уменьшаться с большой скоростью, пока удерживается кнопка. Таким способом достаточно удобно реализуется быстрое задание больших значений порогов. Установленное кнопками SW5, SW6 значение порога не станет активным (не вступит в силу), пока не будет записано в EEPROM. Запись в EEPROM осуществляется нажатием на кнопку SW4 «SAVE». Успешное завершение записи индицируется заставкой на ЖКИ «SAVE EEPROM» и сопровождается тройным звуковым сигналом. Запись значений порогов в EEPROM организована в программе с помощью функции EEPROM_Data_Prog_LIM().

Заметим, что при первом включении устройства память EEPROM МК пуста, там ещё не содержатся пользовательские значения порогов. Управляющая программа «узнает» об этом перед переходом в основной пользовательский режим путём чтения контрольной ячейки-«маячка», расположенной в EEPROM по адресу EEPROM_ADDR_Start. Если по этому адресу программа считывает значение, отличное от константы VALID_DATA, то далее она начинает использовать в качестве активных значений порогов жёстко заданные по умолчанию константы, прописанные в исходном коде: LIMIT_MAX_DEF=5000, LIMIT_MIN_DEF=100, LIMIT_BAND_MAX_DEF=2000, LIMIT_BAND_MIN_DEF=1000. Однако после первой же записи пользователем в EEPROM хотя бы одного значения порога содержимое контрольной ячейки-«маячка» автоматически модифицируется значением VALID_DATA. Заметим, что в EEPROM каждый раз записывается не единственное модифицированное пользователем значение, а блок данных, состоящий из всех активных на текущий момент значений порогов. При следующих включениях питания программа уже начинает использовать в качестве активных значений считанные из EEPROM ве­личины.

Момент перехода текущим уровнем освещённости через любое из значений порогов, записанных в EEPROM, сопровождается сменой состояния выхода соответствующего канала (зажиганием или гашением подключённого к нему светодиода) и однократным длинным звуковым сигналом. Необходимо заметить, что каналы не обладают эффектом триггерного «защёлкивания» своих состояний.

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

  • заведомо бóльшим любого возможного максимума, например, 25 000 для границы канала 1, нижней и верхней границ канала 3;
  • равным 0 для границы канала 2, нижней и верхней границ канала 3.

Исходный текст управляющей программы версии 1.0 (и файл «прошивки» Flash-памяти МК) содержится в каталоге проекта Lux_I2C, архив которого доступен на сайте журнала «Современная электроника» в дополнительных материалах к данной статье. Проект был подготовлен и отлажен в интегрированной среде разработки IDE µVision4 V4.72 от Keil Software. Программирование и отладка управляющей программы МК производились с помощью встроенного JTAG-отлад­чика ICDI.

Наладка и регулировка

Правильно собранное устройство с запрограммированным МК начинает работать сразу и в наладке не нуждается. После первого включения питания и завершения начального тестирования необходимо убедиться в идентичности отображаемой на экране картинки изображению, показанному на рисунке 8а. Заметим, что значение регистра идентификатора REG_ID датчика TSL2561 существенной роли не играет и для разных версий датчика может отличаться от показанного на рисунке. Затем, когда измеритель перейдёт в основной пользовательский режим и на экране отобразится значение уровня освещённости в люксах, необходимо убедиться, что оно меняется сообразно степени освещённости лицевой поверхности датчика TSL2561. Также следует убедиться, что при полном затемнении датчика показания ЖКИ стремятся к нулю, проконтролировать адаптивную подстройку усиления (от Gain = 01 до Gain = 16) при изменении степени освещённости вплоть до наступления состояния переполнения АЦП. По опыту работы с устройством было установлено, что при освещении солнечным светом его пограничные показания перед переполнением АЦП составляют около 20 000 лк. Однако это значение может существенно меняться в зависимости от конкретного спектрального состава излучения.

Далее следует убедиться в корректном срабатывании всех каналов управления-сигнализации, а также проверить возможность задания кнопками и сохранения пользовательских значений порогов в EEPROM.

В качестве регулировочной следует проделать только одну аппаратную операцию. Предварительно измерив цифровым вольтметром питающее напряжение в средней точке диодной сборки VD2, необходимо в основном рабочем режиме устройства с помощью подстроечного резистора R4 выставить это измеренное значение на экране ЖКИ в строке «POWER =
= X,XX B».

Литература

  1. TSL2560, TSL2561 Light-to-Digital Converter. TAOS059Q. 2009. November.
  2. www.ams.com/eng/Light-to-Digital.
  3. www.seeedstudio.com/wiki/Grove_-_Digital_Light_Sensor.
  4. www.terraelectronica.ru/catalog_info.php?CODE=1210657.

Если вам понравился материал, кликните значок - вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал - не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

20.11.2015 329 0
Комментарии
Рекомендуем

  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться