Хочу сделать ИК барьер на TSOP приёмнике, помогите пожалуйста.

givvv

✩✩✩✩✩✩✩
5 Мар 2020
25
1
Хочу сделать Инфракрасный барьер как в этих статьях (https://sdelaysam-svoimirukami.ru/4413-infrakrasnyy-barer.html , https://radiopraktikum.blogspot.com/p/5617_19.html , http://easyelectronics.ru/fotodachik-chast-2-modulyaciya.html#comments)
Собрал пульт на лог. схеме как в примере, мультиметром замерил частоту, у меня TSOP 1838 и 34338 на 38кГц. Когда подаю питание на приёмник и передатчик, то светодиод ненадолго светится (подключил его по схеме 1) и гаснет. Если перезагрузить
передатчик, то снова светится и гаснет. Так же собирал генератор на таймере 555 (схема 2), но эффект тот же. В комментариях пишут, что это может быть из-за того, что что-то в TSOP не пропускает постоянный сигнал,
но ведь в статьях всё работает. В чём может быть проблема?
Screenshot_1.jpgсхема 1 1623385093726.pngсхема 2
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
@givvv, при включении напряжение на C1 = 0В, LED1 оказывается подключен к GND, с другой стороны, через сопротивление R2 - к питанию. Соответственно он горит. Ток, протекающий через LED1 заряжает конденсатор и когда напряжение на нём становится больше, чем VCC-VLED1, светодиод гаснет (VLED1 - напряжение светодиода в прямом направлении). Т.е., это - нормальное дело.
Я не знаю, откуда Вы взяли такую схему, но если VCC у Вас не выше 5В, то подключайте его напрямую к V+. Сопротивление R2 оставьте последовательно с LED1 (включив его между out и катодом LED1), его нужно посчитать (по формуле (VCC-VLED1-0,25)/ILED1), при этом ILED1 не должен превышать 5мА. Для эксперимента я бы убрал C1 вовсе, а не для эксперимента - существенно снизил бы его ёмкость (раз в 10-20).
 
Изменено:

givvv

✩✩✩✩✩✩✩
5 Мар 2020
25
1
Избыточное цитирование
@givvv, при включении напряжение на C1 = 0В, LED1 оказывается подключен к GND, с другой стороны, через сопротивление R2 - к питанию. Соответственно он горит. Ток, протекающий через LED1 заряжает конденсатор и когда напряжение на нём становится больше, чем VCC-VLED1, светодиод гаснет (VLED1 - напряжение светодиода в прямом направлении). Т.е., это - нормальное дело.
Я не знаю, откуда Вы взяли такую схему, но если VCC у Вас не выше 5В, то подключайте его напрямую к V+. Сопротивление R2 оставьте последовательно с LED1 (включив его между out и катодом LED1), его нужно посчитать (по формуле (VCC-VLED1-0,25)/ILED1), при этом ILED1 не должен превышать 5мА. Для эксперимента я бы убрал C1 вовсе, а не для эксперимента - существенно снизил бы его ёмкость (раз в 10-20).
Нет, вы не правы. Если просто подать напряжение на схему с приёмником, то светодиод не будет светится, но включить схему передатчика на 555 например, то он светится полсекунды и гаснет. В чём прикол, если между TSOP и ИК-светодиодом поставить руку и потом убрать, то светодиод на TSOPe опять моргнёт и так каждый раз. Но если поднести ИК диод и TSOP на 1-3 см, то всё работает, TSOP меняет сигнал, но это только на 1-3 см, дальше теряется, но если передатчик перезагрузить, то светодиод на TSOP опять моргнёт :(.
 

poty

★★★★★★✩
19 Фев 2020
2,956
886

@givvv, может Вы просто не успеваете увидеть включение светодиода при включении, но в принципе это неважно.
Во-первых, предлагаю изменить схему по принципу того, что я Вам предложил, или
@Эдуард Анисимов, что, в общем-то, одно и то же. Приведенная Вами схема неверна.
Второй шаг - исключить АРУ приемника. Для этого нужно с некоторой частотой (допустим 3000Гц) модулировать посылку 38кГц при передаче. В идеале сделать так, как в одной из статей: примерно 10 -20 периодов несущей передатчик работает, потом примерно 100-200 периодов - нет. На приемной стороне сделать интегратор с разными постоянными времени заряда и разряда для того, чтобы исключить потерю яркости светодиода.
 

givvv

✩✩✩✩✩✩✩
5 Мар 2020
25
1
Избыточное цитирование

@givvv, может Вы просто не успеваете увидеть включение светодиода при включении, но в принципе это неважно.
Во-первых, предлагаю изменить схему по принципу того, что я Вам предложил, или
@Эдуард Анисимов, что, в общем-то, одно и то же. Приведенная Вами схема неверна.
Второй шаг - исключить АРУ приемника. Для этого нужно с некоторой частотой (допустим 3000Гц) модулировать посылку 38кГц при передаче. В идеале сделать так, как в одной из статей: примерно 10 -20 периодов несущей передатчик работает, потом примерно 100-200 периодов - нет. На приемной стороне сделать интегратор с разными постоянными времени заряда и разряда для того, чтобы исключить потерю яркости светодиода.

@givvv, может Вы просто не успеваете увидеть включение светодиода при включении, но в принципе это неважно.
Во-первых, предлагаю изменить схему по принципу того, что я Вам предложил, или
@Эдуард Анисимов, что, в общем-то, одно и то же. Приведенная Вами схема неверна.
Второй шаг - исключить АРУ приемника. Для этого нужно с некоторой частотой (допустим 3000Гц) модулировать посылку 38кГц при передаче. В идеале сделать так, как в одной из статей: примерно 10 -20 периодов несущей передатчик работает, потом примерно 100-200 периодов - нет. На приемной стороне сделать интегратор с разными постоянными времени заряда и разряда для того, чтобы исключить потерю яркости светодиода.
Да идея просто класс, только вот как это сделать? Собрал генератор вот как в статье на 2-х NE555, только он не работает, может я где-то ошибся, не знаю, буду проверять.
 

Вложения

poty

★★★★★★✩
19 Фев 2020
2,956
886
@givvv, а есть какие приборы для тестирования? Лучше бы осциллограф.
Если нет - попробуйте параллельно времязадающим конденсаторам поставить ещё конденсаторы, чтобы понизить частоты до проверяемых глазами значений (допустим, вместо 38кГц сделать 5Гц, а вместо второй частоты (лень считать) - 0,5-1Гц).
Самым простым способом реализации передатчика считаю Attiny самую простую - она с этим справится на ура!
 
  • Лойс +1
Реакции: givvv

givvv

✩✩✩✩✩✩✩
5 Мар 2020
25
1
Избыточное цитирование
@givvv, а есть какие приборы для тестирования? Лучше бы осциллограф.
Если нет - попробуйте параллельно времязадающим конденсаторам поставить ещё конденсаторы, чтобы понизить частоты до проверяемых глазами значений (допустим, вместо 38кГц сделать 5Гц, а вместо второй частоты (лень считать) - 0,5-1Гц).
Самым простым способом реализации передатчика считаю Attiny самую простую - она с этим справится на ура!
Я перерисовал схему на 2-х NE555, может в ней ошибка, но я всё проверял. У меня есть мультиметр, который может измерять до 10мГц, на всех других схемах у меня было 36-38 кГц. На этой схеме на выходе должно быть 38кГЦ, но там только небольшое падение напряжения и 0 ГЦ. Спасибо, что помогаете. Attiny у меня нету, но может быть вы мне подскажете как смоделировать нужный мне сигнал на ардуинке, я просто хочу поверить, что это возможно. Спасибо.Screenshot_2.jpg
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
C++:
// Скетч для проверки приёмника TSOP

#define GENPIN                3     // пин, на который нужно подключить ИК передатчик
                                    // поддерживается D0-D7
#define TARGET_FREQUENCY  38000     // несущая частота, Гц
#define BURST_TIME          600     // длительность цикла burst, мкс
#define GAP_TIME            600     // длительность интервала между burst, мкс
#define SIGNAL_LENGTH_TIME   80     // длительность сигнала, мс
#define SIGNAL_GAP_TIME      20     // интервал между посылками данных, мс

unsigned long timer_target;         // таймер несущей
unsigned long timer_burst;          // таймер burst
unsigned long timer_gap;            // таймер интервала между посылками

#define BIT_TARGET         1<<0
#define BIT_BURST          1<<1
#define BIT_GAP            1<<2
byte flags;                         // бит 0: 0 - сигнал 0; 1 - сигнал 1;
                                    // бит 1: 0 - находимся в gap (бит 0 должен быть равен 0);
                                    //        1 - находимся в burst
                                    // бит 2: 0 - находимся в signal gap (бит 1 и бит 0 должны быть равны 0);
                                    //        1 - находимся в signal send

void setup() {
  // настройка порта на вывод
  pinMode(GENPIN, OUTPUT);
  // включаем таймеры
  timer_target = micros();
  timer_burst = micros();
  timer_gap = millis();
  flags = 0;
}

void loop() {
  // обеспечение логики работы:
  //  1. В течение SIGNAL_LENGTH_TIME выполняем:
  //    1.1. Генерацию несущей с TARGET_FREQUENCY в течение BURST_TIME.
  //    1.2. Пауза в течение GAP_TIME.
  //    1.3. Повторить с 1.1.
  //  2. В течение SIGNAL_GAP_TIME - пауза.
  //  3. Повторить с 1.

  if (flags & BIT_BURST) {
    // вход в эту ветку предполагает, что выполняется пункт 1.1 логики работы
    if (micros()-timer_target >= ((unsigned long)1000000/(TARGET_FREQUENCY*2))) {
      // вход в эту ветку означает, что закончился полупериод несущей частоты
      flags ^= BIT_TARGET;                                // заменяем состояние выхода
      bitWrite(PORTD, GENPIN, flags & BIT_TARGET);        // выводим в соответствующий пин новое состояние
      timer_target = micros();                            // взводим таймер полупериода
    }
    if (micros()-timer_burst >= BURST_TIME) {
      // вход в эту ветку означает, что п.1.1. завершился
      bitWrite(PORTD, GENPIN, 0);                         // сбрасываем выход в 0
      flags &= ~(BIT_BURST | BIT_TARGET);                 // обнуляем активный режим (переходим к 1.2) и состояние выхода
      timer_burst = micros();                             // взводим таймер на GAP_TIME
    }
  } else {
    // вход в эту ветку предполагает, что выполняются п. 1.2 или 2 логики работы
    if(flags & BIT_GAP) {
      // вход в эту ветку предполагает, что выполняются п. 1.2 логики работы
      if (millis()-timer_gap >= SIGNAL_LENGTH_TIME) {
        // вход в эту ветку предполагает, что п. 1.2 завершился и нужно перейти к п. 2
        bitWrite(PORTD, GENPIN, 0);                       // сбрасываем выход в 0
        flags &= ~(BIT_GAP | BIT_TARGET);                 // обнуляем режим передачи сигнала (переходим к п. 2) и состояние выхода
        timer_gap = millis();                             // взводим таймер на SIGNAL_GAP_TIME
      } else {
        // вход в эту ветку означает продолжение выполнения п. 1.2
        if (micros()-timer_burst >= GAP_TIME) {
          // вход в эту ветку означает, что п. 1.2 завершился и нужно перейти к п 1.1.
          bitWrite(PORTD, GENPIN, 1);                     // устанавливаем выход в 1
          flags |= BIT_BURST | BIT_TARGET;                // устанавливаем активный режим, состояние выхода 1
          timer_target = timer_burst = micros();          // взводим таймеры полупериода и BURST_TIME
        }
      }
    } else {
      // вход в эту ветку предполагает, что выполняется п. 2 длгики работы
      if (millis()-timer_gap >= SIGNAL_GAP_TIME) {
        // вход в эту ветку предполагает, что п. 2 завершён и нужно перейти к п. 1.1.
        bitWrite(PORTD, GENPIN, 1);                       // устанавливаем выход в 1
        flags |= BIT_GAP | BIT_BURST | BIT_TARGET;        // устанавливаем режим передачи сигнала, активный режим, состояние выхода 1
        timer_target = timer_burst = micros();            // взводим таймеры полупериода и BURST_TIME
        timer_gap = millis();                             // взводим таймер SIGNAL_LENGTH_TIME
      }
    }
  }
}
Можно было бы сделать несущую частоту более точной с помощью PWM и таймера, но, к сожалению, настройка таймеров имеет отличия для разных процессоров и это могло бы не заработать.
 
Изменено:
  • Лойс +1
Реакции: givvv

givvv

✩✩✩✩✩✩✩
5 Мар 2020
25
1
@poty, Спасибо вам большое. У меня uno. Я собрал схему на 2-x NE555 и она заработала на TSOP серии 17, для 34 или 18 что то не работает, я пробывал менять время между импульсами, количество импульсов, ничего, не плнимаю какой им сигнал для "барьера" нужен. Теперь немного другая проблема, мне надо когда есть сигнал, чтоб нагрузка работала, а когда нету не работала, для этого мне надо реверснуть сигнал приёмника, пробывал делать это с pnp транзистором, но ему 1.5 v (когда есть сигнал) мало для открытия, на КЭ падает очень много U (нагрузка 200 милА, транзистор - КТ851). Ещё не пробылав схему, что с 2И-НЕ, но ведь по логике если на лог схему подавать 1.5 вольт, то она примет это как лог. 1, поэтому эта схема, что в статье не будет работать или я не прав? Думаю нужен MOSFET N типа с изолированным затвором, чтоб при 1.5v открывался, а при 5v закрывался. Буду очень благодарен если поможите решить данную проблему.
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
@givvv, а пробовали с uno тот скетч, что я привёл?
1.5 v (когда есть сигнал)
откуда такие данные? Из datasheet:
Output Voltage Low (Pin 1) IOSL = 0.5 mA,Ee = 0.7 mW/m2, f = fo VOSL 250 mV
Касаемо максимального выходного напряжения, то на выходе стоит npn-транзистор, коллектор которого подключен к +5 через сопротивление в 30кОм. Т.е., подключить любой npn-транзистор на выход и Вы будете иметь инвертированный сигнал.
 

givvv

✩✩✩✩✩✩✩
5 Мар 2020
25
1
@poty, В общем-то путём проб и ошибок, я составил рабочую схему ИК-барьера (приёмника и передатчика). Ваш код я тестировал, но он что-то не работает, скорее всего надо его настраивать под каждый приёмник индивидуально, но я пока не понимаю, что там за что отвечает (нету осциля). У вас есть ВК? Я могу показать видео как всё получилось в итоге. Screenshot_5.jpg