РадиоКот :: Цифровой люксометр
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Измерительная техника >

Теги статьи: Добавить тег

Цифровой люксометр

Автор: Сергей Безруков aka Ser60
Опубликовано 10.02.2012
Создано при помощи КотоРед.

Прибор предназначен для измерения освещенности в пределах 0,025 – 99999 люкс. Нижний предел чувствительности определяется сенсором MAX44007, а верхний установлен немного ниже, чем у сенсора (104448), из-за возможности индикации не более 5-ти цифр на дисплее. Сенсор калибруется изготовителем.




Для индикации применен графический ЖКИ дисплей с разрешением 128×32 точек. Применение графического дисплея вызвано несколькими причинами.   Главная – возможность индикации освещенности большим и «жирным» шрифтом размером 19×32, упрощающим чтение показаний со значительного расстояния и под широким углом зрения, чтобы не бросать тень на датчик. Показания хорошо различимы даже в сумерках. Подсветка дисплея при этом не используется для исключения ее влияния на результат измерений. Кроме того, выбранный дисплей потребляет около 80 мкА в рабочем режиме (без подсветки), что намного меньше, чем у большинства знако-синтезируюших ЖКИ на основе популярного контроллера HD44780. Наконец, для связи дисплея с микроконтроллером (МК) по интерфейсу SPI используется меньше линий, что важно для выбранного типа МК. Конденсаторы C6 – C11 необходимы для работы встроенного преобразователя напряжения ЖКИ.

 

 

 

 

В качестве МК использован контроллер C8051F304 фирмы Silicon Laboratories в корпусе QFN, имеющий всего 8 линий ввода/вывода. Выбор корпуса определился желанием сократить размеры устройства фактически до размеров ЖКИ. Связь сенсора с МК осуществляется по интерфейсу I2C с подтягивающими резисторами R3 и R4 и обеспечивается встроенным в МК модулем. При чтении данных из сенсора МК тактируется на частоте около 2,5 мгц от внутреннего генератора с делителем 1:8. На время обработки показаний сенсора и выдачи их на дисплей коэффициент передачи делителя увеличивается до 1:1, в результате чего частота тактирования МК повышается до 20 мгц. Такое кратковременное увеличение частоты положительно сказывается на среднем токопотреблении всей схемы.

Сенсор DA1 программно сконфигурирован на работу в автоматическом режиме, в котором измерение освещенности производится примерно каждые 0,8 сек по внутреннему таймеру сенсора. Окончание измерения сигнализируется появлением уровня логического 0 на выводе 4 сенсора. Для уменьшения токопотребления на время ожидания готовности сенсора МК переводится на работу от RC-генератора на основе вмешнего конденсатора C2 и резистивных элементов МК. Частота этого генератора около 66 кгц, в результате чего потребление МК снижается до 8 мкА. Для пробуждения МК его вывод 7 (P0.5) на момент сна программно конфигурируется на вход и на обслуживание внешнего прерывания INT0 по спаду уровня и подтягивается к напряжению питания внутренним резистором. Во время выдачи данных на дисплей этот вывод переконфигурируется на выход. Резистор R2 обеспечивает развязку МК и сенсора, а R1 служит для подтяжки линии сброса МК. Конденсатиры C1 и  C3 - C5 являются блокировочными в цепях питания сенсора, МК, и ЖКИ, соответственно.

Люксометр собран на печатной плате размером 30×60 мм, спроектированной в системе Eagle. Сенсор установлен на отдельной плате вместе с конденсатором C1 и резистором R4. Такое решение было принято на этапе проектирования для упрощения при необходимости замены сенсора на MAX44009. Файлы печатных плат lux.brd прилагаются. Питание производится от батареи CR2032, средний потребляемый ток от нее около 130 мкА. Так как использование устройства предполагается лишь от случая к случаю, корпус для него не изготавливался. Однако, со стороны печатных проводников елементы схемы защишены пластиной из плексигласа, установленной на стойках высотой 5 мм. Программирование МК производится внутрисхемно по интерфейсу C2 через разъем XS1. В качестве программатора можно применить, например, описанный в https://radiokot.ru/articles/38/ . Этот МК также поддерживается программатором Тритон.

 



Программа МК написана на языке ассемблера, предназначена для компиляции средствами разработки фирмы Keil, и отлажена в среде Silicon Labs IDE. Размер загружаемой части программы около 1,9 Кб, что делает возможным скомпилировать ее бесплатной версией системы, доступной с сайта silabs.com. Малый размер программы позволяет вместо указанного типа МК применить любой из серии C8051F300 – C8051F305 без изменения кода или схемы. Эти модели отличаются, в основном, объемом памяти и периферийными модулями, но все они имеют не менее 2 Кб «флеша» и модуль I2C. Частота внутреннего генератора в моделях F300 и F301 составляет 24.5 мгц вместо 20 мгц у остальных, но это в данном случае несущественно (проверено на макете). Вместо указанного индикатора можно применить весьма похожий на него индикатор LO-13232A-02, но ввиду отсутствия у автора такого индикатора эта замена не испытывалась.

При необходимости люксометр может быть собран и на любом другом МК. Алгоритм его работы достаточно простой и состоит в следующем. Вначале производится инициализация портов МК а также настройка частоты внутреннего генератора и таймера для модуля I2C. После этого в контроллер ЖКИ засылается несколько байт для его инициализации, взятых из «даташита».

Затем производится настройка сенсора. Для этого в него засылается верхний и нижний пороги для формирования сигнала прерывания. Сенсор после каждого измерения освещенности проверяет выход ее за установленные пороги и только в этом случае выставляет сигнал прерывания.  Чтобы этот сигнал устанавливался по окончании каждого измерения (он используется для вывода МК из режима сна), верхний порог устанавливается в 0 а нижний в максимальное значение освещенности. Наконец, в сенсор засылается байт с выставленным битом разрешения прерываний по внутреннему адресу 0х01.

По сигналу готовности от сенсора (спад уровня напряжения на его выводе 4 с уровня лог. 1 до 0) происходит аппаратное прерывание, выводящее МК из сна. МК читает данные из сенсора по интерфейсу I2C и сбрасывает флаг прерывания внутри сенсора путем чтения байта состояния по адресу 0х02. Показания сенсора форматируются и выводятся на дисплей, после чего МК опять входит в сон до следующего пробуждения сенсором. Для минимизации токопотребления блок I2C и таймер включаются только на момент коммуникации с сенсором.

Формат данных сенсора подорбно описан в его ДШ и хранится в памяти сенсора в байтах по адресам 0х03 и 0х04. По первому адресу хранятся 4 младших бита мантиссы, а по второму – 4 ее старших бита и двоичный порядок. При форматировании результата биты мантиссы объединяются в байт и сдвигаются влево на число бит, указанном в порядке. Таким образом получается 22-битное число, соответствующее уровню освещенности. Для преобразования в люксы его следует умножить на 0,025. Так как 0,025 =1/40, умножение на дробное число можно заменить делением на 40. Для этого оно сначала делится на 4 путем сдвига вправо и потом десятичная запятая переносится на 1 десятичный разряд результата влево. Таким образом, вычисление освещенности использует только целочисленные операции.

Этот проект родился в результате дискуссии на форуме https://radiokot.ru/forum/viewtopic.php?f=3&t=55899


 

Файлы:
Видео работы
Исходник и прошивка
Печатная плата (Eagle формат)

 


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

63 3 0
1 0 0