Перейти к содержанию
    

Водяной счетчик с оптическим датчиком (зеркальный диск)

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

Цитата

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цитата

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


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

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

 

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

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

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, AndryG said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Числа получились такие:  мкА на резисторе 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

457031455_.thumb.png.56f556d0fd91ddc6acf399d0a2e3f781.png

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Долго возился с датчиком. Никак не получается получить равномерную работу. Грешил на кривые руки и кривые посадочные отверстия для диодов, а оказалось что и светодиод имеет ярко выраженную направленность излучения и ну никак он не хочет в три стороны. Потом осенило, что можно фотодиоды наклонить к центру - вспомнил про закон отражения ) В итоге получается после кучи возни более-менее выстроить систему, где кривое, косое и криво светящее начинает работать почти нормально :)

Вот вчерашние изыскания. Три канала АЦП с фотодиодов, потом эти же три канала снятые с цифрового входа мк и "код состояния"

 

аналог-цифра-код.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...