ИК-пульт: приёмник TSOP38438 и передатчик на светодиоде TSAL6200
ИК-пульт передаёт команды пачками несущей 38 кГц, а приёмник-модуль сам отфильтровывает несущую и выдаёт на выход готовые импульсы. Разбираем по документам Vishay обе стороны: как подключить TSOP38438 к микроконтроллеру и зачем ему RC-фильтр, какие пачки он пропустит, а какие примет за помеху, и как рассчитать ток ИК-светодиода в импульсе, чтобы получить дальность и не выйти за его пределы.
Обновлено Редакция GAW
ИК-пульт передаёт команды светом с длиной волны около 940 нм, промодулированным несущей — чаще всего 38 кГц. Приёмник-модуль вроде Vishay TSOP38438 содержит фотодиод, усилитель с автоматической регулировкой усиления, полосовой фильтр на частоту несущей и демодулятор. На выход он выдаёт уже огибающую: ноль, пока приходит пачка несущей, и единицу в паузах. Микроконтроллеру остаётся измерить длительности импульсов и декодировать протокол — например, NEC, разобранный в калькуляторе ИК-кода NEC.
Коротко
- Приёмник
- TSOP38438: 2,0–5,5 В, 0,45 мА макс.
- Фильтр питания
- 100 Ом + 0,22 мкФ (Vishay)
- Пачка
- от 10 периодов, пауза от 12
- Выход
- задержка 184–342 мкс, ±132 мкс
- Светодиод
- TSAL6200: 200 мА в импульсе
- Пример
- 24 Ом от 5 В — 135–175 мА
Приёмник
Выводы. У TSOP382.., TSOP384.., TSOP44.. и TSOP48.. порядок одинаковый: 1 — OUT, 2 — GND, 3 — VS. У TSOP22.. и TSOP24.. в том же корпусе питание и общий провод поменяны местами: 1 — OUT, 2 — VS, 3 — GND. Перед пайкой сверяйте маркировку.
Питание. Модуль работает от 2,0 до 5,5 В и потребляет 0,25–0,45 мА при 3,3 В. Питайте его от того же напряжения, что и микроконтроллер: выход — открытый коллектор с внутренней подтяжкой к питанию приёмника, и при 5 В на приёмнике единица на входе 3,3-вольтового микроконтроллера была бы 5 В.
Фильтр питания. У Vishay внутренняя стабилизация, и пульсации питания до 100 мВ на работу почти не влияют (doc. 80072). Если рядом импульсный стабилизатор, цифровые схемы с выбросами по питанию или ИК-светодиод того же устройства, Vishay ставит фильтр: R1 100 Ом последовательно в питание и C1 0,22 мкФ вплотную к выводам VS и GND. На R1 при наибольшем токе приёмника падает
и при 3,3 В приёмник получает 3,25 В — с большим запасом над его минимумом 2,0 В. Частота среза фильтра:
при 100 Ом и 0,22 мкФ, то есть пульсации на частоте несущей 38 кГц и выше он ослабляет в разы.
Выход. Ноль на выходе — не выше 0,2 В при втекающем токе 2 мА, ёмкость нагрузки до 1 нФ допустима (doc. 80069). Внутренней подтяжки хватает для входа микроконтроллера; если фронты нужны круче или декодер чувствителен к уровню, Vishay допускает внешнюю подтяжку 10 кОм (doc. 80067). Выход подают на вход захвата таймера — у STM32F103 это, например, PA0 (TIM2_CH1): таймер сам запишет время каждого фронта.
Какие пачки пропустит приёмник
Приёмник отличает сигнал от помех — света ламп, непрерывных наводок — по частоте, длине пачек и тому, какую долю времени занимает несущая. Требования Vishay к сигналу:
| Требование | TSOP382.. (AGC2) | TSOP384.. (AGC4) |
|---|---|---|
| Пачка | от 10 периодов | от 10 периодов |
| Пауза после пачки | от 12 периодов (пачки 10–70 периодов) | от 12 периодов (пачки 10–35 периодов) |
| Пауза после длинной пачки | больше 5 × длины пачки | больше 15 × длины пачки |
| Коротких пачек в секунду | до 1700 | до 1700 |
| Код NEC | подходит | рекомендован |
На 38 кГц период несущей — 26,3 мкс: пачка от 263 мкс, пауза от 316 мкс. Для TSOP48.. требования мягче к паузам — от 10 периодов, после длинных пачек больше 3 × длины, — но коротких пачек в секунду до 950 (doc. 82459).
Проверка для NEC. Бит NEC начинается пачкой из 22 импульсов с периодом 26,3 мкс — 579 мкс, и до начала следующего бита при «0» остаётся пауза 1,125 − 0,579 = 0,546 мс, почти 21 период. Обе величины с запасом в пределах таблицы. Пачек в кадре около 34 на 108 мс — около 315 в секунду, тоже далеко от предела. Лидер NEC длиной 9 мс — 342 периода — длинная пачка, но Vishay прямо отмечает NEC как подходящий код для обеих серий, а лидер называет ненужным для своих приёмников (doc. 80071).
Длительность на выходе. Выходной ноль приходит с задержкой и отличается по длительности от пачки:
Для TSOP382 задержка — от 7 до 13 периодов несущей, 184–342 мкс, а длительность нуля на выходе — длина пачки ±5 периодов, ±132 мкс (у TSOP48 — ±4 периода). Это допуск с учётом температуры, питания и уровня сигнала. Декодер поэтому не сравнивает длительности точно, а относит их к диапазонам: например, ноль 0,4–0,8 мс — пачка бита, единица короче 0,8 мс — «0», длиннее 1,4 мс — «1».
Передатчик
ИК-светодиод TSAL6200 включён через резистор R1 от шины 5 В и ключ VT1 — MOSFET AO3400A, затвор которого управляет выход таймера. Таймер формирует несущую сам: при тактовой частоте таймера 72 МГц период 1895 тактов (регистр ARR = 1894) даёт 37,995 кГц, а сравнение на 632 такта — заполнение 1/3, как у NEC по описанию Vishay (импульсы 8,77 мкс с периодом 26,3 мкс). Пачки включает и выключает программа или второй таймер. TIM1 у STM32F103 — таймер с расширенными функциями: его выходы заработают, только когда в регистре TIMx_BDTR установлен бит MOE (RM0008, разд. 14.4.18); у TIM2–TIM4 такого бита нет.
Ток светодиода. Пределы TSAL6200 (doc. 81010):
- длительно — 100 мА;
- в импульсах до 100 мкс с заполнением 0,5 — 200 мА;
- одиночный импульс до 100 мкс — 1,5 А.
Импульсы несущей короче (8,8 мкс) и реже (1/3), чем условия для 200 мА, так что этот предел и берём. Цель — 150 мА в импульсе. Прямое напряжение при этом токе по графику рис. 4 — около 1,45 В:
Худший случай. Наименьшее прямое напряжение в таблице не нормировано. По рис. 4 уже при 1 мА оно около 1,1 В, а с нагревом снижается на 1,8 мВ/К — при 85 °C ещё на 0,1 В. Возьмём 1,0 В и резистор −5 %:
При наибольшем прямом напряжении из таблицы (1,6 В при 100 мА) и резисторе +5 % ток — около 135 мА. Падение на открытом AO3400A — до 48 мОм при 2,5 В на затворе, единицы милливольт, — в расчёт не входит.
Средний ток и мощность. Внутри пачки средний ток — треть импульсного, 49 мА, меньше длительных 100 мА даже на 9-миллисекундном лидере NEC. На светодиоде во время пачки рассеивается около 72 мВт при допустимых 160 мВт. Резистор во время длинной пачки греет 0,18 Вт, а в среднем — около 45 мВт, если полный кадр повторяется каждые 108 мс, и около 15 мВт, если пульт, как в NEC, при удержании кнопки шлёт только короткие коды повтора (лидер и один импульс). Резистора на 0,25 Вт хватает.
Затвор. Порог AO3400A — 0,65–1,45 В, а сопротивление канала нормировано при 2,5 В, поэтому выход на 3,3 В открывает его полностью. R2 100 Ом ограничивает ток перезаряда затвора, R3 100 кОм держит транзистор закрытым, пока вывод микроконтроллера после сброса не настроен — иначе светодиод мог бы гореть постоянным током 150 мА.
Конденсатор C1. Каждый импульс 150 мА длительностью 8,8 мкс снимает с C1 100 мкФ около 13 мВ, а провода до источника питания этот ток не видят. Иначе импульсы несущей пошли бы по шине питания — и в приёмник того же устройства, для которого Vishay и советует RC-фильтр.
Дальность и температура. Vishay указывает типичную дальность 30 м для TSOP382 и 24 м для TSOP48 с TSAL6200 при токе всего 50 мА — в испытательном сигнале. Больший ток увеличивает силу излучения, но с нагревом она падает: по рис. 7 даташита TSAL6200 при 50 °C это около 80 % от значения при 25 °C.
Сформировать кадр NEC для своего адреса и команды и проверить длительности можно в калькуляторе:
Исходные данные
0–255; больше 255 — расширенный 16-битный
0–255, можно 0x…
Результат
- Код старшим битом вперёд
- 0x20DF10EF
- так коды записаны в старых скетчах и таблицах
- Код младшим битом вперёд
- 0xF708FB04первый переданный бит — нулевой: так хранят код IRremote и ядро Linux
- Байты в порядке передачи
- 04 FB 08 F7адрес, инверсия адреса, команда, инверсия команды
- Биты в порядке передачи
00100000 11011111 00010000 11101111у каждого байта младший бит идёт первым- Длительность кадра
- 68,06 мсначальная пачка 9 мс и пауза 4,5 мс, 32 бита и завершающая пачка; несущая 38 кГц
- Код повтора при удержании
- 11,81 мспачка 9 мс, пауза 2,25 мс и одна пачка — каждые 108 мс
Длительности и код для Arduino
#include <IRremote.hpp>
void setup() {
IrSender.begin(3); // IR LED pin
}
void loop() {
IrSender.sendNEC(0x04, 0x08, 0); // address, command, repeats
delay(1000);
}
/* The same frame as exact durations: IrSender.sendRaw(nec_raw, 67, 38); */
/* NEC frame: 67 durations in microseconds, mark first, 38 kHz carrier */
const uint16_t nec_raw[67] = {
9000, 4500, 563, 563, 563, 563, 563, 1688, 563, 563,
563, 563, 563, 563, 563, 563, 563, 563, 563, 1688,
563, 1688, 563, 563, 563, 1688, 563, 1688, 563, 1688,
563, 1688, 563, 1688, 563, 563, 563, 563, 563, 563,
563, 1688, 563, 563, 563, 563, 563, 563, 563, 563,
563, 1688, 563, 1688, 563, 1688, 563, 563, 563, 1688,
563, 1688, 563, 1688, 563, 1688, 563
};
Детали
| Позиция | Деталь | Примечание |
|---|---|---|
| DA1 | TSOP38438 | 38 кГц, AGC4; для старых пультов — TSOP38238 |
| R1 (приёмник) | 100 Ом | фильтр питания |
| C1 (приёмник) | 0,22 мкФ | вплотную к выводам VS и GND |
| VD1 | TSAL6200 | 940 нм, ±17° |
| R1 (передатчик) | 24 Ом, 0,25 Вт | 135–175 мА в импульсе |
| VT1 | AO3400A | или другой MOSFET с RDS(on), нормированным при 2,5 В |
| R2, R3 | 100 Ом, 100 кОм | затвор |
| C1 (передатчик) | 100 мкФ | у светодиода |
Почему не работает
- Приёмник греется или не отвечает. Перепутаны выводы: у TSOP22.. и TSOP24.. питание на выводе 2, а у TSOP382, TSOP384 и TSOP48 — на выводе 3.
- Пульт принимается только вблизи, а с включённым передатчиком на той же плате — никак. Импульсы тока светодиода идут по общей шине питания в приёмник. Нужен фильтр 100 Ом + 0,22 мкФ у приёмника и конденсатор у светодиода.
- Свой протокол принимается через раз. Пачки короче 10 периодов или паузы короче 12 периодов, либо длинные пачки без длинных пауз — приёмник счёл их помехой. Сверьтесь с таблицей для своей серии.
- Длительности на выходе «плавают». Это нормальный разброс ±5 периодов несущей и задержка до 13 периодов. Декодер должен сравнивать длительности с допуском.
- Светодиод горит постоянно, а не мигает. Вывод таймера после сброса не настроен или настроен как обычный выход в единице: нужна подтяжка затвора к общему проводу и проверка, что ШИМ включается только на время пачки.
- Дальность маленькая. Слишком малый ток, несущая не на той частоте, что у приёмника (38 кГц против 36 или 40 кГц), или светодиод светит мимо — у TSAL6200 угол половинной силы излучения всего ±17°.
Частые вопросы
Можно ли подключить TSOP напрямую к выводу микроконтроллера?
Да: выход открытый коллектор с внутренней подтяжкой к питанию приёмника, ноль ниже 0,2 В при 2 мА. Питайте приёмник от того же напряжения, что и микроконтроллер, — тогда единица на выходе не выйдет за его питание. RC-фильтр 100 Ом и 0,22 мкФ на питании приёмника Vishay советует при пульсациях больше 100 мВ — например, если рядом импульсный стабилизатор или сам ИК-светодиод.
Какой ток пускать через ИК-светодиод TSAL6200?
Длительно — до 100 мА, в импульсах с заполнением до 0,5 и длительностью до 100 мкс — до 200 мА. Пачки несущей 38 кГц с заполнением 1/3 состоят из импульсов по 8,8 мкс, поэтому 150 мА в импульсе — с запасом: средний ток внутри пачки около 50 мА. Больший ток, до 1,5 А, допустим лишь в одиночных импульсах до 100 мкс.
Чем TSOP38238 отличается от TSOP38438?
Настройкой автоматической регулировки усиления. AGC2 у TSOP38238 Vishay называет вариантом для старых пультов с длинными пачками, AGC4 у TSOP38438 рекомендует для кодов с длинными пачками, в том числе NEC: он лучше подавляет помехи от ламп, но строже к паузам между пачками. Код NEC годится для обоих.
Почему приёмник реагирует на лампу или не видит свой же сигнал?
Приёмник отличает сигнал от помех по частоте, длине пачек и их доле во времени. Непрерывная несущая или слишком длинные пачки без пауз он принимает за помеху и снижает чувствительность. Поэтому собственный протокол строят по таблице даташита: пачка не короче 10 периодов несущей и пауза не короче 12 периодов для TSOP382, а после длинных пачек — пауза в несколько раз длиннее.
Источники
- Vishay. TSOP382.., TSOP384..: IR Receiver Modules for Remote Control Systems (doc. 82491, Rev. 2.1, 27-May-2025) — выводы 1 OUT, 2 GND, 3 VS; питание 2,0–5,5 В, ток 0,25/0,35/0,45 мА при 3,3 В; предельно 6 В, ток выхода 5 мА; R1 и C1 — при сильных пульсациях или выбросах на питании; TSOP38238 (AGC2) и TSOP38438 (AGC4) на 38 кГц; рис. 1 — задержка 7/f0…13/f0, длительность выходного импульса tpi ± 5/f0, рекомендуется пачка от 10 периодов; дальность 30 м с TSAL6200 при 50 мА (типично); таблица «Suitable data format»: пачка от 10 периодов, после пачек 10–70 (TSOP382) или 10–35 (TSOP384) периодов пауза от 12 периодов, после более длинных — больше 5× и 15× длины пачки, до 1700 коротких пачек в секунду; NEC — «Yes» для TSOP382 и «Preferred» для TSOP384
- Vishay. TSOP22.., TSOP24.., TSOP48.., TSOP44..: IR Receiver Modules for Remote Control Systems (doc. 82459, Rev. 2.4, 23-May-2025) — выводы TSOP44.., TSOP48..: 1 OUT, 2 GND, 3 VS; TSOP22.., TSOP24..: 1 OUT, 2 VS, 3 GND; TSOP4838 и TSOP4438 на 38 кГц; tpi ± 4/f0; пачка от 10 периодов, пауза от 10 периодов после пачек 10–72 (TSOP48) и 10–40 (TSOP44) периодов, после более длинных — больше 3× и 10× длины; 950 и 1500 коротких пачек в секунду; дальность 24 м с TSAL6200 при 50 мА
- Vishay. Disturbance Sources (doc. 80072, Rev. 1.9, 29-Jun-16) — пульсации питания до 100 мВ на работу почти не влияют; рис. 7 — фильтр R1 100 Ом и C1 0,22 мкФ, дополнительная подтяжка R2 10 кОм
- Vishay. Circuit Description (doc. 80069, Rev. 1.7, 24-Oct-2025) — выход — открытый коллектор с внутренней подтяжкой, ноль ниже 0,2 В при 2 мА, нагрузка до 1 нФ; интегратор задаёт наименьшую длину пачки и паузы
- Vishay. Application Overview (doc. 80067, Rev. 2.0, 13-Jun-2024) — внешняя подтяжка 10 кОм — если декодеру нужен уровень или крутые фронты; программа должна принимать разброс длительности выходных импульсов
- Vishay. Data Formats for IR Remote Control (doc. 80071, Rev. 2.3, 26-Jun-2024) — NEC: несущая 38 кГц, лидер 9 мс и пауза 4,5 мс, в пачке бита 22 импульса шириной 8,77 мкс с периодом 26,3 мкс, «0» — 1,125 мс, «1» — 2,25 мс, адрес и команда с инверсными копиями; лучшая помехозащищённость — у AGC4; лидер приёмникам Vishay не нужен
- Vishay. TSAL6200: High Power Infrared Emitting Diode, 940 nm (doc. 81010, Rev. 2.4, 13-Mar-14) — IF 100 мА; IFM 200 мА при tp/T = 0,5 и tp = 100 мкс; IFSM 1,5 А при 100 мкс; PV 160 мВт; VR 5 В; VF 1,35/1,6 В при 100 мА и 2,2/3 В при 1 А; ТКН VF −1,8 мВ/К; ±17°; рис. 3 — допустимый ток от длительности импульса, рис. 4 — VF от тока, рис. 7 — сила излучения от температуры
- Alpha & Omega Semiconductor. AO3400A 30V N-Channel MOSFET (Rev 3.1, July 2023) — VGS(th) 0,65–1,05–1,45 В; RDS(on) до 48 мОм при 2,5 В и до 32 мОм при 4,5 В; VGS ±12 В
- STMicroelectronics. STM32F103x8, STM32F103xB datasheet (DS5319 Rev 20, July 2025) — табл. 5 — PA0: TIM2_CH1_ETR, PA8: TIM1_CH1
- STMicroelectronics. RM0008 Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx (Rev 21, February 2021) — разд. 14.4.18 — регистр TIMx_BDTR таймеров TIM1 и TIM8: бит MOE разрешает выходы OC и OCN
Нашли ошибку?
Смотрите также
- ИК-код NECАдрес и команда ↔ код, тайминги кадра, код для Arduino
- Подключение светодиодаРезистор от вывода, ток и напряжение вывода, цепочка на 12 В через транзистор
- Ключ на MOSFETЛогический уровень, резисторы затвора, потери и нагрев, ШИМ, 3,3 В
- ОптопарыТипы выходов, CTR, расчёт резисторов, скорость, фотосимисторы, изоляция
- Открытый стокВыход только с транзистором к земле, единицу даёт подтяжка
- MOSFET с логическим уровнем затвораRDS(on) нормировано при 4–5 В: как проверить по даташиту