Jump to content

    

Помогите нарисовать часть схемы по плате (МК, фотодиод и непонятная RC)

У меня на платке стоят безымянные ИК свето/фотодиоды 3мм с aliexpress.
Пробовал и с током светодиода поиграться немного в надежде получить бОльшую разницу в сопротивлении фотодиода. Да всё ломается из-за их кривой установки. И "непрозрачный тубус" по этой же причине криво работает.

Цитата

Если нет задачи экономить батарейку - достаточно 2 фотодатчиков.

Можно подробнее?
Я думаю, что три датчика позволяют отслеживать направление вращения. С двумя датчиками можно достоверно отловить лишь вращение (без направления).
Как это завязано на потребление? Тем более, что три датчика более экономичный вариант.

Задача экономить батарейку есть. Но не гонюсь за годами работы от часовой батарейки.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
8 hours ago, AndryG said:

Можно подробнее? . . .
Задача экономить батарейку есть. Но не гонюсь за годами работы от часовой батарейки.

:) Вы собираетесь питать от "часовой" батарейки-таблетки ? Светодиод ее посадит за неделю-другую, если будет работать в постоянном режиме.

Я потому и предлагал Вам снять осцилограмму со светодиода в режиме длительного останова и на старт-стопах.

Потомукак если счетчик не будет крутить сутки, что вполне можетбыть, то зачем постоянно запитывать светодиод ? (те у счетчика должен быть режим стендбай)

Как оно работает я не знаю, возможно третий фотодатчик как-то с этим связан.

Как определить направление вращения с 2 фотодатчиками - см. вики(энкодер) и ссылки на аппноты, которые я вам выложил.

 

480px-%D0%A1%D1%87%D0%B5%D1%82%D1%87%D0%

Вращение вправо, если "синий" = 1 и не изменяется, а красный из 0 переходит в 1.

Вращение вправо, если "красный" = 0 и не изменяется, а синий из 1 переходит в 0.

Вращение влево,  если "синий" = 1 и не изменяется, а красный из 1 переходит в 0.

тут еще одно условие, сами допишите, у меня интеллект уже исчерпан :)

Share this post


Link to post
Share on other sites
Цитата

:) Вы собираетесь питать от "часовой" батарейки-таблетки ? 


Не собираюсь я питать часовой батарейкой :)

Кажется у нас непонимание возникло. Если "снять осциллограмму" вы предлагаете с готового устройства, то его у меня нет, а фотки я привел с польского форума.

 

Про энкодеры я в курсе. Спасибо. Пока крутил алгоритмы в голове пришел к мысли, что ну их три фотодатчика. Обойдусь двумя - меньше мороки.

Думаю над алгоритмом снятия показаний с датчиков, как поменьше светить светодиодом.

Цикл измерения после побудки контр. собакой:
-запускаем таймер
-зажигаем светодиод
-легкий сон (идет заряд конденсаторов через фотодиоды)
-просыпаемся по таймеру, считываем лог. уровни с конденсаторов
-обработка результатов
-глубокий сон

 

Получается, что светодиод полюбому должен гореть X времени, чтобы гарантировано дать зарядится "светлым" фотодиодам. И время это надо дать с некоторым запасом.

Пока, вижу два способа сократить время горения светодиода:
 - отлавливать заряд конденсаторов прерыванием и гасить светодиод досрочно, если все датчики уже единички (фаза 11)
 - периодически проводить калибровку и динамически изменять время горения светодиода

 

Если с отслеживанием "уже оба заряжены, можно гасить диод" мысли разные есть, то с калибровкой я завис )

Share this post


Link to post
Share on other sites

Или поставить датчики с фазой 180 градусов, исключив полностью фазу 00, отказаться от обработки трех фаз (01 11 10), ловить только две фазы: 01 и 10.

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

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

Как полезен форум :) пока один текст писал сколько другого придумалось.

Share this post


Link to post
Share on other sites

...ну их три фотодатчика. Обойдусь двумя - меньше мороки...


Если разжиться фотоприёмником из компьютерной мыши, то вообще - одной деталью, но трёхногой (там два уже разнесённых фототранзистора).

Share this post


Link to post
Share on other sites

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

При скорости вращения, переходящей в ноль, частота опроса тоже переходит в ноль понятно, что не в ноль, но, допустим, в 100 Гц.

При первой "прокрутке" диска после стендбай выставляется максимальная частота засветки (или вообще постоянная засвета LED). На этой максимальной частоте 

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

В процессе работы идет автоподстройка опроса (включения LED) под скорость вращения диска.

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

(батарейку можно ставить как резервное питание, чтобы не терять накопление объема).

 

Share this post


Link to post
Share on other sites

Появилось время поковырять счетчик.

Схема с первого поста

v1.png

Пробую оценить время заряда конденсатора.
Конденсатор поставил на вход захвата таймер1 и отправляем показания таймера на комп.

/*
Запуск считывания датчика: 
 конф. вход сенсора, включить свет, включить заряд, запустить таймер
*/
void snrStart(){
  flag      &= ~(F_SNR_TMR | F_SNR_CPT | F_SNR_OVF); // флаги
  DDRB_Bit0  = 0; // сенсор вход
  PORTB_Bit2 = 1; // свет
  PORTB_Bit1 = 1; // заряд
  TCNT1      = 0; 
  TCCR1B     = (0<<WGM13)|(1<<ICNC1)|(1<<ICES1)|(0<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10); // таймер
  tcntVal    = 0;
  qtTask(snrStart, 25); // планирование следующего запуска через 50мс
}

В прерывании быстро все выключаем/запоминаем

void snrTime(){
  snrVal    += 1;         // показания
  PORTB_Bit2 = 0;         // выключить свет
  TCCR1B    &= 0x07;      // останосит таймер
  PORTB_Bit1 = 0;         // откл.заряд
  DDRB_Bit0  = 1;         // разряд
  flag      |= F_SNR_TMR; // флаг
}

#pragma  vector=TIMER1_OVF_vect
__interrupt void TIMER1_OVF(){
  flag |= F_SNR_OVF;
  snrTime();
}

И потом в общем цикле отправлем данные на комп. Этот код не важен сейчас.

Сперва была радость - работает :) А потом печалька, ибо реальные показатели времени заряда нифига не сходятся с расчетными.

 

Выше в постах есть графики, где я оценивал работу оптопары.
Фотодиод подключил на ногу (mega8) с АЦП и на землю. К питанию ногу подтянул резистором 2к2. Считываем напряжение, закон Ома  и получаем сопротивление фотодиода. Отталкиваясь от этого сопротивления в темной и светлой зонах посчитал время заряда конденсатора.

 

А потом заметил, что если резистор вместо 2к2 поставить другой, то сопротивление фотодиода значительно изменяется от прежних значений. Почему так происходит? Получается, что сопротивление фотодиода у меня измерить не получилось и на практике время заряда получилось намного больше расчетного.

 

А еще вот такая фигня выскакивает на освещенном участке: иголка при включении заряда дает единицу на входе захвата и захват не срабатывает. Единственное, что смог придумать, это емкость самого диода - в момент включения заряда из-за екости фотодиода его сопротивление очень мало и потому выскакивает иголка. Или я не прав?

 

Подскажите, пжлст, почему это всё так работает? (сопротивление диода, иголки)

 

Маркером отмечено напряжение лог. единицы.

1915189787_.jpg.3c330e183ee26badc5eac23d2131da9c.jpg

 

А вот это правильная работа:

650663296_.jpg.da9340331a14cca845cf85cd9ebe9d9a.jpg

 

Share this post


Link to post
Share on other sites
10 hours ago, AndryG said:

Фотодиод подключил на ногу (mega8) с АЦП и на землю. К питанию ногу подтянул резистором 2к2. Считываем напряжение, закон Ома  и получаем сопротивление фотодиода. Отталкиваясь от этого сопротивления в темной и светлой зонах посчитал время заряда конденсатора.

А потом заметил, что если резистор вместо 2к2 поставить другой, то сопротивление фотодиода значительно изменяется от прежних значений. Почему так происходит? Получается, что сопротивление фотодиода у меня измерить не получилось и на практике время заряда получилось намного больше расчетного.

У фотодиода нет сопротивления, есть ток. Этот ток зависит от освещённости. В этом принципиальная ошибка.

Share this post


Link to post
Share on other sites

Глупая ситуация :( Я понимаю, что вы написали, но не знаю, что с этим делать. Как школьник, который закон Ньютона выучил, а применить в задачке не может.

Может вообще глупая затея делать это на оценке времени заряда конденсатора? Поставить фотодиод с резистором, который подобрать таким, чтобы при нужном токе на нем была лог единица.

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Этим вчера и занимался. Пялился на иголку у каждого фотодиода при темном темном/светлом диске и разом сопротивлении резистора.

Числа получились такие:  мкА на резисторе 10к
темнота, темный сектор, светлый сектор  (напр. В  темный/светлый секторы)
А - 2  22  151 (0,31/2,17)
B - 2  17  126 (0,25/1,81)
C - 2  30  213 (0,44/3,06)
На 10к резисторе получаем подходящие нам напряжения. При Uпит 3,3В порог лог. 1 равен 1,3в. При 2,8В - 1,1В

 

За подсказку о прогреве спасибо.

Дальше вопрос  света - когда и на сколько его включать.  Сперва включаем фотодиод, потом свет. Была мысль включать фотодиод, ждать иголку, потом включать свет. Но тогда фронт при включении света очень затягивается. Это видно на второй картинке при темном темном секторе.

В итоге у меня получается, что свет, как ни крути, надо включать на 300-500мкс. (ток светодиода 0,46мА)

Темный 1.png

Думал обыграть как-то емкость фотодиода и его заряд, но не придумал как.

Дальше думать над периодичностью опроса и как изменять частоту опроса в зависимости от потребления/простоя.

Потребление получается почти 2мА на 0,5мс.

 

 

светлый участок.png

Share this post


Link to post
Share on other sites

457031455_.thumb.png.56f556d0fd91ddc6acf399d0a2e3f781.png

Три датчика и ... не знаю, как назвать :) сами видите.
Импульсы выявляет конечный автомат с тремя состояния: А -(3)-> B -(5)-> C -(6)-> A и т.д.
Теперь надо додумать обработку ошибок и прочие задачки:

 - пропуск импульса и/или реверс
 - полный ноль датчиков (прибор снят с счетчика)
 - выявление засветки и реагирование на нее. Много подряд семерок с датчика еще не признак засветки - диск может остановиться в промежуточном положении. Как вариант для такой проверки это прочесть фотодиоды без включения света. Такой вариант увидит тотальную засветку, но может не сработать от слабой засветки, которая сама датчики в единицу не засвечивает, но и не дает получить ноль при темном секторе. Сейчас на столе у окна счетчик умотан в фльгу от засветки )
 - стабилизация тока светодиода.  Свет включается на 500мкс. ШИМ, R2R ЦАП ?
 - подстройка частоты дискретизации в зависимости от потребления (скорости вращения диска)

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now