nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

Измеряем освещённость на ЖК экранчике с помощью диодов подсветки

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

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



Ну и привычное текстовое описание, куда более подробное, под катом :)


У фотодиодов (и светодиодов в режиме фотодиода) есть два варианта включения.

Первый - "фотовольтаический", как в солнечной батарее, когда мы ждём, чтобы диод сам выработал какое-то напряжение, выйдя на прямое смещение. Кремниевые фотодиоды способны выдать около 0,6 вольта, тогда как зелёные светодиоды могли бы и побольше, под свои рабочие 1,8..2 вольта, но из-за мизерных токов, которые мы пытаемся измерять (ведь речь не о прямых солнечных лучах, 150 000 люкс, характерных для солнечных батарей, а хорошо если о 200 люксах - хорошо освещённом рабочем месте - или даже 10..50 люкс, более характерных для жилых помещений) напряжение оказывается заметно ниже.

Этот режим удобен тем, что для включения светодиода нам тоже нужно прямое включение (ВНЕЗАПНО), поэтому каких-то хитрых перекоммутаций не требуется. Мы можем посадить анод на +5 вольт "навечно", а катод то "подвешивать в воздухе" и снимать с него напряжение, то коммутировать на минус питания, чтобы включить светодиод.

Но увы, ПЛИС сама по себе не сможет воспринять эти напряжения - её входы сугубо цифровые. И ещё не каждая АЦП сможет справиться с этим входом - её входное сопротивление должно быть чрезвычайно высоким, речь идёт о токах порядка единиц-десятков НАНОАМПЕР! По крайней мере, попытка померить обратный ток через эти светодиоды при обратном смещении 5 вольт даёт результат 000,0 мкА, даже если светить в упор фонариком! Так что нам здесь может помочь только операционник с полевым входом и низковольтным питанием. Городить огород ради непонятных результатов не хотелось, поэтому данный подход я пока забраковал.

Второй вариант включения - "фотодиодный", с обратным смещением, именно так мы и поступили:


Это позволяет работать с несколько бОльшими размахами напряжения: ножка ПЛИС сначала срабатывает как выход и подаёт 3,3 вольта на диод. Все 3,3 вольта падают на диоде, полностью заряжая его ёмкость, а также выходную ёмкость самого вывода ПЛИС, монтажную ёмкость проводов и т.д.

Сейчас у меня на зарядку уходит один такт на частоте 4 МГц, то есть, 250 нс. Я так прикинул: даже если там непостижимым образом наберётся под сотню пикофарад, зарядиться успеет до упора.

А дальше ножка переключается во вход, в таком состоянии её входное сопротивление составляет ГИГАОМЫ (КМОП однако!), и теперь мы начинаем наблюдать, насколько быстро разрядятся все эти ёмкости. Чем сильнее освещённость - тем выше становится ток через светодиод, тем быстрее произойдёт разряд. Когда напряжение упадёт с исходных 3,3 вольт примерно до вольта - это будет надёжный логический "ноль".

Остаётся только засечь время от зарядки до разряда этих ёмкостей - и золотой ключик у нас в кармане. Вот модуль на верилоге:

module AmbientLightSensor (input clk, input ce, inout backLED, output reg [BitWidth-1:0] Q = 1'b0);

parameter BitWidth = 8;

assign backLED = ce? 1'b1 : 1'bz; //включаем на 1 такт, затем наблюдаем
//при ёмкости даже в 100 пФ, хоть 300 пФ, должно за 1 такт зарядиться 

wire TC;
lpm_counter counter (
			.clock (clk),
			.cnt_en (backLED & (~TC)),	//считает, пока на backLED сохраняется единичка, или пока не дойдёт до ручки
			.sclr (ce),
			.q (Q),
			.cout (TC) );
	defparam
		counter.lpm_direction = "UP",
		counter.lpm_port_updown = "PORT_UNUSED",
		counter.lpm_type = "LPM_COUNTER",
		counter.lpm_width = BitWidth;

endmodule


Ему требуется внешний источник единичных импульсов. В данный момент, для эксперимента, я подаю эти импульсы 2 раза в секунду. Каждый раз, как приходит этот импульс, ce (clock enable), на ножку backLED (к ней подсоединены диоды подсветки) подаётся единичка, а счётчик сбрасывается в ноль. Затем, ножка переключается во вход, а счётчик начинает считать и делает это, пока на ножке сохраняется единица и пока он не досчитает до упора.

Тактовая частота: 4 МГц. Опыты показали, что если мы хотим "почувствовать" 100 люкс и выше (а всё, что ниже 100 люкс пусть доводит счётчик "до упора"), нужно сделать счётчик 19-битным.

До упора он будет доходить за 131 миллисекунду, а при освещённости в 100 люкс он будет останавливаться где-то на 80-й миллисекунде.

Это не есть хорошо: если мы будем на эти 80 мс отключать подсветку, чтобы замерить освещённость, это будет ОЧЕНЬ заметно и ОЧЕНЬ неприятно.

Надо этот интервал уменьшить хотя бы до 10..20 мс.

Похоже, нам может помочь транзистор, который будет коммутировать ток на светодиод:


Даже если его база надёжно заземлена (ножка ПЛИС настроена как выходная, с лог "0"), разряд начинает происходить быстрее, теперь уже достаточно 18-битного счётчика, хотя при 100 лк он успевает досчитать почти до конца, старшие биты 1100..., т.е на разряд уходит около 50 мс - всё ещё многовато.

Если мы оставим базу "висеть в воздухе", то становится как будто ещё чуть быстрее, но показания становятся более хаотичными - теперь уже по одному показанию оценить освещённость нельзя, надо усреднять по большему количеству.

Можно ещё попытаться снизить монтажные ёмкости - сейчас дисплей подключён длиннющим жгутом проводов, а соедини его напрямую - может ещё ускорится раза в 2, и вот тогда затея обретёт реальность: мы сможем на 1/50..1/100 секунды отключать подсветку, замерять освещённость, и затем снова включать её, если необходимо.

Хотя меня здесь радует не сколько конечный результат, сколько сам факт: практически нахаляву можно измерять наноамперные токи!


Poll #2099707 Текст или видео?

Как всякий программерский бред лучше воспринимается?

Как текст с картинками и листингом
7(87.5%)
Как видео
1(12.5%)
Tags: ПЛИС, освещение, работа, странные девайсы
Subscribe

  • О вытягивании себя из болота по методу Мюнхгаузена

    Всё готовлюсь к встрече с представителями РКК Энергия, нужно убедить их в моём способе определения положения ВидеоИзмерителя Параметров Сближения на…

  • Ремонт лыжных мостиков

    Вернулся с сегодняшнего субботника. Очень продуктивно: отремонтировали все ТРИ мостика! Правда, для этого надо было разделиться, благо народу…

  • Гетто-байк

    В субботу во время Великой Октябрьской резни бензопилой умудрился петуха сломать в велосипеде. По счастью, уже на следующий день удалось купить…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 6 comments