Мы с другом хотим разработать универсальный пульт дистанционного управления для обучения , такой как этот , для учебных целей. В основном мы хотим хранить и воспроизводить инфракрасные импульсы.
Мы хотим обнаруживать сигналы 36 кГц, 38 кГц и 40 кГц. Сигнал 40кГц будет иметь период 25 с.
Мы хотим использовать 8-битный микроконтроллер PIC, на данный момент мы выбрали PIC16F616, который будет работать на 20 МГц высокоскоростном кварцевом генераторе. У нас есть два варианта:
- Используйте
Interrupt On Change
модуль. - Используйте режим захвата модуля 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 и хорошо?
источник
Ответы:
Да, 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. Не намного дольше, потому что вы должны сохранять время короче, чем один импульс сигнала основной полосы частот. ,
Успех!
источник