Фотодатчик

DI HALT
13 Май 2009

Наверняка многим захочется присобачить к AVR фотодетектор, чтобы отслеживать хотя бы наличие или отсутствие света. Это полезно как для роботостроителей, так и для тех, кто делает всякую автоматику. Итак, кратко опишу, какие бывают фотодетекторы.

Фоторезистор

ИМХО, вымирающий вид. Последний раз я его видел еще в детстве. Обычно представляет собой такой металический кругляк со стеклянным окошком, в котором видна этакая сероватая зигзагообразная дорожка. При освещении его сопротивление падает, правда незначительно, раза в 3-4.

Фототранзистор

Последнее время я на них натыкаюсь постоянно, неиссякаемый источник фототранзисторов — пятидюймовые дисководы. Последний раз я, по цене грязи, надыбал на радио барахолке штук 5 платок от дисковертов, там светотранзисторы стоят напротив дырок контроля записи и вращения дискеты. Еще сдвоенный фототранзистор (а может и фотодиод, как повезет) стоит в обычной шариковой мышке.
Выглядит как обычный светодиод, только корпус прозрачный. Впрочем, светодиоды тоже такие же бывают; так что перепутать, кто из них кто - раз плюнуть. Но это не беда, партизан легко вычисляется обычным мультиметром. Достаточно включить омметр между его эмиттером и коллектором (базы у него нет) и посветить на него, как его сопротивление рухнет просто катастрофически — с десятков килоОм до считанных Ом. Тот, который у меня в детекторе вращения шестерен в роботе, меняет свое сопротивление с 100 кОм до 30 Ом. Работает фототранзистор подобно обычному — держит ток, но в качестве управляющего воздействия тут не ток базы, а световой поток.

Фотодиод

Внешне ничем не отличается от фототранзистора или обычного светодиода в прозрачном корпусе. Также порой встречаются древние фотодиоды в металлических корпусах. Обычно это совковые девайсы, марки ФД-че-то там. Такой металлический цилиндрик с окошком в торце и торчащими из задницы проводками.
В отличии от фототранзистора, может работать в двух разных режимах. В фотогальваническом и фотодиодном.
В первом, фотогальваническом, варианте фотодиод ведет себя как солнечная батарейка, то есть посветил на него — на выводах возникло слабенькое напряжение. Его можно усилить и применить =). Но куда проще работать в фотодиодном режиме. Тут мы подаем на фотодиод обратное напряжение. Поскольку он хоть и фото, но диод, то в обратную сторону напряжение не пойдет, а значит его сопротивление будет близко к обрыву, а вот если его засветить, то диод начнет очень сильно подтравливать и сопротивление его будет резко падать. Причем резко, на пару порядков, как у фототранзистора.

Спектр

Кроме типа прибора у него еще есть рабочий спектр. Например, фотодетектор, заточенный на инфракрасный спектр (а их большинство), практически не реагирует на свет зеленого или синего светодиода. Плохо реагирует на лампу дневного света, но хорошо реагирует на лампу накаливания и красный светодиод, а уж про инфракрасный и говорить нечего. Так что не удивляйся, если у тебя фотодатчик плохо реагирует на свет, возможно ты со спектром ошибся.

Подключение

Теперь пора показать, как это подключить к микроконтроллеру. С фоторезистором все понятно, тут заморочек нет никаких — берешь и подцепляешь как по схеме.
С фотодиодом и фототранзистором сложней. Надо определить, где у него анод/катод или эмиттер/коллектор. Делается это просто. Берешь мультиметр, ставишь его в режим прозвонки диодов и цепляешься на свой датчик. Мультиметр в этом режиме показывает падение напряжения на диоде/транзисторе, а падение напряжения тут, в основном, зависит от его сопротивления U=I*R. Берешь и засвечиваешь датчик, следя за показаниями. Если число резко уменьшилось, значит ты угадал и красный провод у тебя на катоде/коллекторе, а черный на аноде/эмиттере. Если не изменилось, поменяй выводы местами. Если не помогло, то либо детектор дохлый, либо ты пытаешься добиться реакции от светодиода (кстати, светодиоды тоже могут служить детекторами света, но там не все так просто. Впрочем, когда будет время, я покажу вам это технологическое извращение).

Теперь о работе схемы, тут все элементарно. В затемненном состоянии фотодиод не пропускает ток в обратном направлении, фототранзистор тоже закрыт, а у фоторезистора сопротивление весьма высоко. Сопротивление входа близко к бесконечности, а значит на входе будет полное напряжение питания aka логическая единица. Стоит теперь засветить диод/транзистор/резистор, как сопротивление резко падает, а вывод оказывается посажен наглухо на землю, ну или весьма близко к земле. Во всяком случае сопротивление будет куда ниже 10 кОм-ного резистора, а значит напряжение резко пропадет и будет где-то на уровне логического нуля. В AVR и PIC можно даже резистор не ставить, вполне хватит внутренней подтяжки. Так что DDRx=0 PORTx=1 и будет вам счастье. Ну а обратывать это как обычную кнопку. Единственная сложность может возникнуть с фоторезистором — у него не настолько резко падает сопротивление, поэтому до нуля может и не дотянуть. Но тут можно поиграть величиной подтягивающего резистора и сделать так, чтобы изменения сопротивления хватало на переход через логический уровень.

Если надо именно измерять освещенность, а не тупо ловить светло/темно, то тогда надо будет подцеплять все на АЦП и подтягивающий резистор делать переменным, для подстройки параметров.

Есть еще продвинутый тип фотодатчиков — TSOP. Там встроенный детектор частоты и усилитель, но о нем я напишу чуть попозже.

ист-к: http://easyelectronics.ru/fotodatchik.html

17 Май 2009

Модуляция

О простейших фотодетекторах я уже писал (см. выше), но их применение для передачи информации или сигналов на расстояние весьма ограничено.

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

Очевидный ответ — сравнение двух состояний. Когда полезный сигнал есть, и когда его нет. Для того, чтобы знать, что полезный сигнал есть, у него должен быть какой-нибудь признак, например частота. То есть, если полезный сигнал будет мигать с частотой, скажем, 30 кГц, то мы увидим эти пульсации частоты при любом раскладе.
Теперь нам не составляет труда понять, что полезный сигнал есть: выходное напряжение с датчика скачет с частотой 30 кГц — есть коннект. Если же не скачет — значит это всего лишь фоновая засветка и на нее можно не обращать внимания.

Теперь наш приемник можно усложнить.
Добавим усилитель с регулируемым коэффициентом.
А после него добавим фильтр, который будет отсекать постоянную составляющую (внешная фоновая засветка) и выделять только несущую частоту, те самые 30 кГц. А выход с фильтра завяжем на управление коэффициентом нашего усилителя.

Получится АРУ (автоматический регулятор усиления). Работает он так — если после фильтра не слышно модуляции, мы повышаем коэффициент усиления до тех пор, пока не поймаем частоту полезного сигнала. Если не поймаем, то задираем коэффициент усиления настолько, насколько сможем — все равно ничего, кроме полезного сигнала, не пролезет.

Но если вдруг сигнал появится, то уменьшаем усиление до такой степени, чтобы сигнал четко детектился. Уменьшать усиление надо для того, чтобы не усиливать шумы и не перегружать фильтр лишним мусором.

Несущая есть, на нее можно накладывать сигнал.
Информацию можно передавать пачками импульсов: есть пачка - 0, нет пачки - 1, или наоборот.

Структурная схема понятна, перейдем к практике. А тут даже изобретать ничего не надо — уже существюут готовые применики, имеющие на борту все необходимое. Например, широко распространенные, дешевые и простые в использовании датчики серии TSOP17xx, где в качестве хх идет детектируемая частота. Например, TSOP1730 детектит несущую в 30 кГц и когда чувствует ее наличие, прижимает выходную линию в 0.

Схема включения его элементарная — подать питалово, да завести выход на любой из портов микроконтроллера (на схеме обозначен как uC). Резисторы опциональны, их можно выкинуть.

В качестве передатчика может быть микроконтроллер, а импульсы можно генерить ШИМом.

Но есть тут одна хитрая особенность, не явная на первый взгляд — нельзя слать несущую без данных непрерывным потоком. Равно как и нельзя слать данные сплошняком. Так как АРУ начинает занижать чувствительность и в итоге передача затыкается через пару секунд. Это сделано для того, чтобы наш TSOP не забивался еще и периодическим шумом сходной частоты, например от люминисцентных ламп с электронным балластом, которые мерцают на очень близкой частоте.
Чтобы затыка не случилось, надо слать информацию в виде, удовлетворяющем условию:

Где f0 — это частота несущей, на которую рассчитан TSOP.
Здесь биты шлются пачками (burst), а N — это число импульсов несущей в одной пачке. Также указана минимальная длина пачки и промежутка (Gap) между ними.

А сам параметр минимальной скважности (Duty Cycle) рассчитывается по такой формуле:

Если же надо сделать тупую «светилку», например, для организации ИК-барьера, реагирующего на пересечение, то можно не заморачиваться, а поступить так, как советуют разработчики — собрав двойной генератор:

Обрати внимания на левую часть, которую я обвел красной рамкой. Тут два генератора, собраных на простейшей логической микросхеме — нашей родимой К555ЛА3 или ее буржуйском оригинале. На первом элементе 2И-НЕ собран генератор пачек импульсов. Как видишь, там есть кондесатор С1 на 10нФ и два резистора R1 и R2, а также диод.
Работает просто. Допустим, мы только включили схему и конденсатор у нас разряжен. На входе 1 всегда лог1, а на входе 2 у нас лог0 (так как конденсатор еще разряжен). лог1 & лог0 = 0, но на выходе у нас инверсия, так что на 3 выводе будет лог1, то есть +5V. Конденсатор С1 начнет заряжаться от напряжения выхода через резисторы R1 и R2. Когда он полностью зарядится, то на входе 2 будет уже лог1, а лог1 & лог1 = 1, да инверсия = 0, на третьем выходе будет уже напряжение около нуля. И конденсатору С1 ничего не остается как начать разряжаться, но делать он уже это будет не через оба резистора, а только через R1, т.к. в обратную сторону через R2 ему помешает разрядиться диод. Обрати внимание, насколько велика разница между R1 и R2 — в порядок! Так что длительность заряда будет в десять раз короче длительности разряда.

На втором 2И-НЕ элементе собран еще один генератор, на этот раз это генератор несущей частоты. У него и конденсатор меньше значительно, а значит заряжаться он будет быстрей и частота будет выше. Резисторы R3 и потенциометр P1 позволяют подстраивать частоту. Диод тут не нужен — несущая должна иметь одинаковые импульсы и паузы. Работает он точно также как и первый. НО! Обрати внимание на его верхний вход с номером 5. Если в первом генераторе там всегда был лог1, т.к. он был подвешен на питание, то тут на входе у нас выход с первого генератора. А значит второй генератор будет работать только тогда, когда ему разрешит первый. Все просто!
Вот и получается, что данная конструкция выплевывает пачки 30кГц импульсов, стоит только подать на нее питание.

Правая же часть - это интерпретатор пачек, для создания полноценного сигнального ИК-барьера. Там пачки интегрируются на RC-цепочке (R7, C4), собираясь из импульсного (каждая пачка = импульс) в постоянный сигнал. На выходе происходит изменение уровня лишь тогда, когда сигнал действительно надолго прервался (чтобы не реагировать на провалы между импульсами-пачками).
Первый элемент (U1D) служит разделителем и пороговым формирователем, превращая колебания напряжения с RC-цепи в логические уровни +5V и 0V.

Бодяга из R8, R9, C5 и диода - это линия задержки. Когда луч кратко пересекается вражеским телом, то пропадает много пачек, напряжение с интегратора снижается ниже лог0 и на входе U1D возникает ноль. Так как там инверсия на выходе, то на 11 выводе будет лог1, то есть +5V. Это напряжение, пройдя через диод и малое сопротивление R9 быстро зарядит кондер С5. Напряжение на заряженом С5 сформирует две лог1 на входе U1C, что даст 0 на выходе — АХТУНГ! АЛЯРМ!!!
Тело ушло с луча, на интеграторе (и на входе U1D) напряжение вновь подскочило, а с U1D стал опять выходить 0 и конденсатор С5 теперь начинает разряжаться, но благодаря диоду, делать он это может только через R8, который уже в два порядка больше, а значит и разряд будет в два порядка дольше. И пока он не разрядится, на выходе U1C будет гореть ахтунговый лог0.

Итог:

Схема не реагирует на провалы между пачками за счет первого интегратора. Но если потерялось много пачек (пересечение луча), то это интегратор пропустит, а элемент задержки запомнит и выдаст длительный сигнал тревоги. Гораздо длинней, чем время пересечения луча вражеской тушей.


ист-к: http://easyelectronics.ru/fotodachik-chast-2-modulyaciya.html