Как измерить ширину импульса ИК-сигнала с помощью 8-битного ПИК?


14

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

Мы хотим обнаруживать сигналы 36 кГц, 38 кГц и 40 кГц. Сигнал 40кГц будет иметь период 25 с.μ

Мы хотим использовать 8-битный микроконтроллер PIC, на данный момент мы выбрали PIC16F616, который будет работать на 20 МГц высокоскоростном кварцевом генераторе. У нас есть два варианта:

  1. Используйте Interrupt On Changeмодуль.
  2. Используйте режим захвата модуля CCP.

Первый вариант будет следующим:

Предположим , регистр устанавливается как: unsigned char _10_us = 0;. Этот регистр будет содержать время. Модуль TMR2 с периодическим регистром настроен на создание прерывания каждые 10 . Когда происходит прерывание, оно увеличивает регистр и завершает работу. Это даст максимальное время 2,55 мсек. Если требуется больше измерения времени, дополнительные регистры, такие как, могут быть определены и увеличены по мере необходимости.μ_10_us_1_ms

_10_us_10_usμ

Эта опция заставляет меня почесать голову; Прерывание TMR2 будет происходить примерно через каждые 50 инструкций. Обработка прерываний займет около 20 инструкций. У меня осталось 30 инструкций для вычисления и сохранения периода в массиве. Будет ли этот метод работать?

Второй вариант будет следующим:

Настройте режим захвата модуля CCP, чтобы он генерировал прерывание, когда на выводе CCP1 происходит событие (от высокого к низкому). В подпрограмме прерывания он установит флаг, чтобы задача в программе могла рассчитать (при необходимости) и сохранить значение CCPR1H (вероятно, не понадобится) и CCPR1L. Затем мы изменим конфигурацию режима захвата, чтобы он вызывал прерывание при возникновении границы от низкого до высокого уровня. И тогда он будет ждать следующего события. Я не могу оценить эффективность этого метода, поскольку я никогда не использовал его.

Другой вариант?

Мы можем использовать инфракрасный демодулятор ИС, такой как серия TSOP17xx . Это решило бы нашу проблему полностью. Однако некоторые вопросы приходят на ум.

Наше требование к расстоянию для чтения невелико; 1 метр (~ 3 фута). Если мы выберем TSOP1738, который предназначен для работы в 38 кГц, насколько хорошо это будет работать с сигналами 36 кГц и 40 кГц?

На странице 4 таблицы TSOP17xx показан график «Частотная зависимость чувствительности». Насколько мы поняли;

  • 40 кГц, что составляет ~ 1,053 от 38 кГц, даст относительную чувствительность ~ 0,6.
  • 36 кГц, что составляет ~ 0,95 от 38 кГц, даст относительную чувствительность ~ 0,65.

Что означают эти значения? Можем ли мы использовать TSOP1738 и хорошо?


Почему бы просто не написать программный цикл, который подсчитывает, сколько циклов между импульсами?
Ракетный магнит

@Rocketmagnet Я не понимаю. Не могли бы вы написать ответ, если у вас есть время? Кроме того, имейте в виду, что помимо упомянутой проблемы мы сделаем много других вещей, таких как RS232 и SPI.
Абдулла Кахраман

Ответы:


11

Да, TSOP1738 будет делать на этом коротком расстоянии. Относительная чувствительность 0,65 означает, что при 36 кГц ваш ИК-светодиод должен быть0,65= 0,8 раза ближе, чтобы увидеть тот же уровень сигнала, из -за закона обратных квадратов . Поэтому, если ваш TSOP1738 видит определенный уровень для 38 кГц на расстоянии 1 м, вам придется держать передатчик на уровне 80 см, чтобы получить тот же уровень сигнала на 36 кГц. Кстати, с помощью пульта дистанционного управления со свежими батареями я измерил идеальный прием на расстоянии более 15 м, так что никаких проблем нет.

Не беспокойтесь о производительности PIC. TSOP1738 не будет выводить сигнал 38 кГц. Это несущая частота, которая удаляется TSOP1738 для возврата сигнала основной полосы, который имеет гораздо более низкую частоту с длительностью импульсов порядка 1 мс, поэтому есть достаточно времени для точного измерения времени между фронтами.

Следующие изображения области иллюстрируют это:

введите описание изображения здесь

Это один код RC5. Верхний сигнал - это модулированный сигнал 36 кГц, нижний - сигнал основной полосы частот с реальным кодом.

введите описание изображения здесь

Это увеличивает один импульс сигнала основной полосы частот. Вы можете увидеть отдельные импульсы несущей 36 кГц.

Еще одно слово о несущей частоте. Возможно, вы используете пульт дистанционного управления, частота которого вам неизвестна. TSOP1738 не дает его на выходе, так что если вы хотите прочитать его , вы должны подключить ИК фотодиод или транзистор на один из входов ПОС и прочитать время между двумя же фронтами. Это возможно. Период времени для разных несущих частот:

40 кГц: 25 мкс
38 кГц: 26,3 мкс
36 кГц: 27,8 мкс

PIC16F616 с частотой 20 МГц имеет цикл команд 200 нс (он делит тактовую частоту на 4!). Таким образом, показания для трех частот должны быть около 125, 131 и 139. Этого должно быть достаточно, чтобы отличить их друг от друга. Но если вы хотите, вы можете пропустить несколько фронтов и прочитать таймер только после 10-го прерывания, например: 1250, 1316, 1389. Не намного дольше, потому что вы должны сохранять время короче, чем один импульс сигнала основной полосы частот. ,

Успех!


Это сейчас расслабляет, спасибо. Я давно создал «Ученика IR» на основе TSOP1738, но это был беспорядок.
Абдулла Кахраман
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.